diff --git a/.gitignore b/.gitignore index 5893d04..4b09365 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules/ dist/ release/ .engine-build/ +engines/java/target/ coverage/ playwright-report/ test-results/ diff --git a/.prettierignore b/.prettierignore index c805541..47624d7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,3 @@ public/engines/pcre2/pcre2.mjs +public/engines/java/ +public/engines/python/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 1761bbb..2fcf65d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,31 @@ ## Unreleased +## 0.3.0 — 2026-07-27 + +- Add a self-hosted Pyodide 314.0.3 worker containing CPython 3.14.2 `re`, with + runtime identity verification, bounded compilation/matching/replacement and + exact code-point-to-editor-UTF-16 range normalization. +- Add TeaVM 0.15.0's `java.util.regex` class-library implementation as a + verified self-hosted ES module, with bounded `Pattern`/`Matcher` execution, + native replacement and exact UTF-16 ranges. +- Identify the Java engine as TeaVM class-library code rather than OpenJDK and + report its documented `UNICODE_CHARACTER_CLASS`, single-digit replacement + and unavailable named-replacement compatibility boundaries. +- Add partial application-owned Python and Java lexical syntax and replacement + providers while keeping the selected runtime compiler authoritative. +- Separate heavyweight engine loading from the per-request execution deadline, + retain worker recovery after timeout/crash/cancellation and keep every + runtime local to the release. +- Add flavour-specific quick reference and capability content for all four + executable engines. +- Keep comparison, generated cases, code generation, minimization, analysis + and formatting behind their explicitly verified ECMAScript/PCRE2 boundaries; + Python and Java are never routed through another flavour as a fallback. +- Extend deterministic engine-pack provenance, checksums, licence notices, + release verification and nested-path delivery checks to the Python and Java + runtime assets. + ## 0.2.0 — 2026-07-27 - Open Quick reference and Capabilities as populated, accessible in-viewport diff --git a/README.md b/README.md index bf20e5b..f455f37 100644 --- a/README.md +++ b/README.md @@ -8,16 +8,23 @@ Patterns, replacement templates, test text and project files stay in the browser. There is no account, backend, upload, remote execution, telemetry, runtime CDN, remote font, or cloud-save service. -## Current release — 0.2.0 +## Current release — 0.3.0 -The v0.2.0 release contains two real production engine slices: ECMAScript and -PCRE2 10.47. +The v0.3.0 release contains four executable engine slices: + +- the current browser's native ECMAScript `RegExp`; +- official PCRE2 10.47 as a self-hosted 8-bit WebAssembly pack; +- CPython 3.14.2 `re` in the self-hosted Pyodide 314.0.3 runtime; and +- TeaVM 0.15.0's `java.util.regex` class-library implementation as a + self-hosted ES2015 module. + +The Java flavour is TeaVM class-library code compiled to JavaScript. It is not +OpenJDK and is not advertised as an OpenJDK compatibility oracle. - Syntax acceptance: `@eslint-community/regexpp` 4.12.2, ECMAScript 2025 grammar; application-owned structural explanations are partial and feature-matrix tested. -- Execution engine: the current browser's native ECMAScript `RegExp`. -- Native and editor offsets: UTF-16 code units. +- ECMAScript native and editor offsets are UTF-16 code units. - PCRE2 execution and substitution: pinned official PCRE2 10.47 compiled to a self-hosted 8-bit WebAssembly pack with UTF/UCP always enabled. - PCRE2 native UTF-8 byte ranges are retained and normalized to exact editor @@ -26,10 +33,22 @@ PCRE2 10.47. - PCRE2 automatic callouts are copied through a separate ABI operation and displayed from a dedicated killable trace worker under 50,000-event and 10 MiB serialized-data hard caps. +- Python compilation, matching and replacement use the bundled CPython `re` + module. Native code-point ranges are retained and normalized to exact editor + UTF-16 ranges. +- Java compilation, matching and replacement use TeaVM's + `java.util.regex.Pattern` and `Matcher`. Native ranges are UTF-16 code units. +- TeaVM 0.15.0 replacement supports its actual single-digit `$n` subset. + `$12` is therefore `$1` followed by literal `2`; Java SE `${name}` + replacement is reported as unavailable rather than presented as OpenJDK + behavior. +- Python and Java use deliberately partial application-owned lexical syntax + providers; their actual runtime compiler remains authoritative. - Parsing and execution run in separate workers. - Actual execution can be terminated by killing its worker. - The worker is recreated after timeout, crash or cancellation. -- Capture ranges use the engine's `d` indices result. +- ECMAScript capture ranges use the engine's `d` indices result; the other + flavours return their native range records through bounded bridges. - Named, numbered, optional, empty and repeated-final captures are represented. - Match, replacement, typed list/extraction, corpus/apply and unit-test modes are available. @@ -73,7 +92,8 @@ as a complete record of every internal engine action. ## Workbench modes - **Match** — live highlighting, extraction tree and bounded capture table. -- **Replace** — engine-native bounded substitution for ECMAScript and PCRE2; +- **Replace** — engine-native bounded substitution for all four executable + flavours; output completeness is reported separately from bounded per-match original/result, changed-range and token-contribution previews that synchronize the replacement, pattern, subject and output editors. @@ -121,10 +141,12 @@ Pattern and flags are stored separately; delimiters are presentation only. ECMAScript preserves native `g` and `y`; PCRE2 offers the application-level `g` iteration flag plus `i`, `m`, `s`, `x`, `U` and `J`. PCRE2 UTF/UCP mode is mandatory because browser strings are Unicode and partial-byte ranges cannot be -represented safely in the editor. The optional **Scan all** action adds only an -internal iteration flag to that request and does not change saved flags. -ECMAScript may add internal `d` to obtain exact indices without changing match -semantics. +represented safely in the editor. Python exposes application-level `g` plus +CPython `re` flags `a`, `i`, `m`, `s` and `x`. Java exposes application-level +`g` plus TeaVM `Pattern` flags `i`, `d`, `m`, `s`, `u`, `x` and the documented +`U` compatibility request. The optional **Scan all** action adds only an +internal iteration request and does not change saved flags. ECMAScript may add +internal `d` to obtain exact indices without changing match semantics. Zero-length global iteration advances using the selected Unicode semantics and cannot loop forever. @@ -247,6 +269,10 @@ npm run engines:verify npm run engines:pcre2:build -- --source-dir /path/to/pcre2 --emcc /path/to/emcc npm run engines:pcre2:verify npm run engines:pcre2:install +node scripts/python-engine-pack.mjs node_modules/pyodide .engine-build/python +node scripts/install-python-engine.mjs .engine-build/python +node scripts/java-engine-pack.mjs +node scripts/install-java-engine.mjs npm run build npm run toolbox:check npm run check @@ -266,18 +292,30 @@ The deterministic release ZIP can be consumed by Toolbox Portal using an exact artifact URL, manifest ID, version and SHA-256. Portal builds consume the artifact; they do not build Regex Tools source. -The PCRE2 worker loads self-hosted JavaScript and WebAssembly only. Deployment -must serve `.wasm` as `application/wasm` and allow WebAssembly compilation in -`script-src`; see [`docs/PORTAL_REQUIREMENTS.md`](docs/PORTAL_REQUIREMENTS.md). +The PCRE2 and Python workers load only self-hosted JavaScript, WebAssembly and +Python-standard-library assets; Java loads its self-hosted ES module. +Deployment must serve `.wasm` as `application/wasm` and allow WebAssembly +compilation in `script-src`; see +[`docs/PORTAL_REQUIREMENTS.md`](docs/PORTAL_REQUIREMENTS.md). -## Flavour roadmap +## Flavour support and boundaries -PCRE2 10.47 is the second implemented flavour. Its application-owned ABI -provides bounded compilation, matching, native substitution and separate -automatic-callout tracing, copied caller-owned records, deterministic -allocation cleanup and explicit result completeness. The exact -source/toolchain build is reproducible offline and the verified pack is bundled -with its metadata, checksums and licence. +PCRE2's application-owned ABI provides bounded compilation, matching, native +substitution and separate automatic-callout tracing, copied caller-owned +records, deterministic allocation cleanup and explicit result completeness. +The exact source/toolchain build is reproducible offline and the verified pack +is bundled with its metadata, checksums and licence. + +The Python slice executes actual CPython 3.14.2 `re` in Pyodide 314.0.3; it does +not translate a Python pattern into ECMAScript. Pyodide startup is a separate +worker-load operation and is excluded from the normal execution deadline. + +The Java slice executes TeaVM 0.15.0's own `java.util.regex` class library. It +does not translate a Java pattern into ECMAScript, but it is also not OpenJDK: +in particular, TeaVM 0.15.0 does not implement +`Pattern.UNICODE_CHARACTER_CLASS`. The UI reports the `U` flag as a +compatibility request and preserves TeaVM's predefined-class and word-boundary +behaviour. Generated-case version 1 is ECMAScript-only. It traverses the complete application-owned ECMAScript AST under node, depth, attempt, byte, repetition @@ -286,17 +324,17 @@ browser `RegExp` adapter. PCRE2 generation remains unavailable until its syntax provider can expose a complete normalized tree. Pattern formatting is likewise ECMAScript-only. It consumes the complete -regexpp token model and does not reinterpret the partial PCRE2 structure. -PCRE2 formatting remains unavailable until a complete grammar-backed -implementation passes equivalent idempotence, reparse, engine and test gates. +regexpp token model and does not reinterpret the partial PCRE2, Python or Java +structures. Those flavours remain unavailable until complete grammar-backed +implementations pass equivalent idempotence, reparse, engine and test gates. The first advertised generated-code target is the PCRE2 10.47 8-bit C API. Its deterministic match and replacement fixtures compile and execute against the exact official release. See [`docs/COMPARISON_AND_CODEGEN.md`](docs/COMPARISON_AND_CODEGEN.md). -Python, Go, Rust, .NET, Java and legacy PCRE follow only through their actual -named runtimes. No flavour is emulated through JavaScript and relabelled. +Go, Rust, .NET and legacy PCRE follow only through their actual named runtimes. +No flavour is emulated through JavaScript and relabelled. ## Licensing @@ -308,7 +346,7 @@ notices; see [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md) and No regex101 application source, branding, generated explanation prose, reference text or visual design is copied. RegexLib and RGXP.RU fixtures are not redistributed because a suitable fixture licence was not established. No -RegexHub fixture is shipped in v0.2.0. +RegexHub fixture is shipped in v0.3.0. ## Known limitations @@ -332,6 +370,14 @@ RegexHub fixture is shipped in v0.2.0. recognizes common capture forms and PCRE2-only constructs for reference, but the actual PCRE2 compiler is authoritative. Branch-reset capture numbering is omitted from the explanation rather than guessed. +- Python and Java structural explanations are deliberately partial lexical + models. CPython `re` and TeaVM `Pattern` respectively remain authoritative + for compilation, group count and matching. +- Python reports native Unicode code-point offsets and converts them at valid + boundaries to editor UTF-16 ranges. Java and ECMAScript report native UTF-16 + offsets; PCRE2 reports native UTF-8 bytes. Native units remain visible. +- TeaVM `java.util.regex` is not OpenJDK. Its `U` compatibility request does + not add OpenJDK's `UNICODE_CHARACTER_CLASS` semantics. - Capture-table rendering is paged at 200 rows while aggregate collection is bounded separately. - Explanation/extraction trees and editor decorations show bounded 2,000-node @@ -366,6 +412,9 @@ RegexHub fixture is shipped in v0.2.0. - Pattern formatting is intentionally narrow and ECMAScript-only. Its bounded source/candidate and unit-test validation is evidence for the checked snapshots, not a proof of equivalence over all subjects. +- Cross-flavour comparison, PCRE2 C generation and subject minimization remain + scoped to their explicitly supported ECMAScript/PCRE2 paths; selecting + Python or Java does not silently substitute one of those engines. Architecture, security, performance, provenance and flavour details live in [`docs/`](docs/). diff --git a/SOURCE.md b/SOURCE.md index b55c84b..eb7f3da 100644 --- a/SOURCE.md +++ b/SOURCE.md @@ -1,10 +1,10 @@ # Source identity - Project: Regex Tools -- Release version: `0.2.0` -- Release tag: `v0.2.0` +- Release version: `0.3.0` +- Release tag: `v0.3.0` - Repository: -- Previous release tag: `v0.1.0` +- Previous release tag: `v0.2.0` - Licence: GPL-3.0-or-later - Copyright: © 2026 Albrecht Degering @@ -20,14 +20,26 @@ runtime or build-time CDN fetch. Complete preferred-form source is the tagged repository. The release archive contains compiled static assets plus legal, source-identity and attribution documents. -The explicit offline PCRE2 build is documented in `docs/ENGINE_BUILDS.md`. -PCRE2 source is not vendored: the gate accepts only the pinned, clean official -10.47 checkout and Emscripten 6.0.4 compiler. Generated staging is ignored; the -verified runtime files, deterministic metadata, checksums and exact licence are -installed under `public/engines/pcre2/` and included in the application source -and build. +The engine-pack inputs and rebuild gates are documented in +`docs/ENGINE_BUILDS.md`. -The v0.2.0 release includes PCRE2. Python, Go, Rust, .NET, Java and legacy PCRE -remain unimplemented. The v0.1.0 release remains available under its historical -tag and artifact coordinates. A future public artifact must bump package, -manifest, tag and source identity together; it must not reuse `v0.2.0`. +- PCRE2 source is not vendored: the gate accepts only the pinned, clean + official 10.47 checkout and Emscripten 6.0.4 compiler. +- The Python pack is copied from the exact pinned Pyodide 314.0.3 npm package + and contains its CPython 3.14.2 runtime, Python standard library, loader, + WebAssembly module, metadata, checksums and licence material. +- The Java bridge source is under `engines/java/`. Its bundled module is + compiled against TeaVM 0.15.0's `java.util.regex` class library and is + identified as TeaVM rather than OpenJDK. + +Generated staging is ignored. Only verified runtime packs with deterministic +metadata, closed file sets, checksums and exact licence/notice material are +installed under `public/engines/` and included in the application source and +build. + +The v0.3.0 release includes native browser ECMAScript, PCRE2 10.47, CPython +3.14.2 `re` through Pyodide 314.0.3 and TeaVM 0.15.0 `java.util.regex`. Go, +Rust, .NET and legacy PCRE remain unimplemented. Earlier releases remain +available under their historical tags and artifact coordinates. A future +public artifact must bump package, manifest, tag and source identity together; +it must not reuse `v0.3.0`. diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index ad8cee6..90dd7c8 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -15,6 +15,9 @@ Exact dependency resolution is recorded in `package-lock.json`. | `fflate` | 0.8.3 | MIT | Runtime and build dependency | Local corpus-output ZIP and deterministic release ZIP; | | Emscripten generated runtime | 6.0.4 | MIT | Generated WebAssembly glue | PCRE2 module loader/runtime; | | PCRE2 | 10.47 | BSD-3-Clause WITH PCRE2-exception | WebAssembly runtime | Pinned official 8-bit engine; | +| Pyodide | 314.0.3 | MPL-2.0 | Python runtime pack | Self-hosted CPython browser runtime; | +| CPython | 3.14.2 | PSF-2.0 | Python runtime/stdlib | `re` execution and bundled standard library; | +| TeaVM | 0.15.0 | Apache-2.0 | Generated Java engine module | `java.util.regex` class-library implementation; | | Vite | 8.1.5 | MIT | Generated helpers | Production build; | | Rolldown | 1.1.5 | MIT | Generated helpers | Production bundling; | @@ -23,9 +26,13 @@ development-only and are not part of the static runtime bundle. `recheck` 4.5.0 and `regexp-ast-analysis` 0.7.1 were inspected but deliberately not installed or shipped. PCRE2 source is not vendored; its generated -WebAssembly pack is shipped with exact metadata, checksums and licence. +WebAssembly pack is shipped with exact metadata, checksums and licence. Pyodide +is pinned as an npm build input and its reviewed self-hosted runtime files are +copied into the Python pack. The TeaVM module contains its compiled class +library and is explicitly identified as TeaVM, not OpenJDK. -Corresponding licence texts and copyright notices are in `LICENSES/`. The -release package additionally carries the exact Vite and Rolldown legal files -under `LICENSES/build/`, including Vite's bundled-dependency notices for code -emitted by the production build. +Licence texts and copyright notices for the ordinary bundled dependencies are +in `LICENSES/`. Each engine pack carries its exact upstream licence/notice +files alongside the runtime. The release package additionally carries the exact +Vite and Rolldown legal files under `LICENSES/build/`, including Vite's +bundled-dependency notices for code emitted by the production build. diff --git a/docs/ANALYSIS.md b/docs/ANALYSIS.md index 88bd95f..634ec87 100644 --- a/docs/ANALYSIS.md +++ b/docs/ANALYSIS.md @@ -3,7 +3,7 @@ Regex Tools provides one deliberately scoped analysis implementation: ECMAScript 2025 patterns parsed into the application-owned normalized AST and executed by the browser's native `RegExp` runtime. The analyser does not apply -ECMAScript findings to PCRE2 or any other flavour. +ECMAScript findings to PCRE2, Python, Java or any other flavour. Analysis is advisory. The UI uses “potential risk”, “possibly” and “observed under selected limits”. It never turns an empty finding list into “safe”, diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index d198537..ec1a1f6 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -7,11 +7,15 @@ boundaries. React workbench ├─ Pattern SyntaxSupervisor → syntax.worker │ ├─ Regexpp ECMAScript provider → normalized AST - │ └─ PCRE2 lexical provider → partial normalized structure + │ ├─ PCRE2 lexical provider → partial normalized structure + │ ├─ Python lexical provider → partial normalized structure + │ └─ Java lexical provider → partial normalized structure ├─ Replacement SyntaxSupervisor → syntax.worker → typed replacement tokens ├─ EngineSupervisor │ ├─ ecmascript.worker → native RegExp → match DTOs - │ └─ pcre2.worker → PCRE2 10.47 WASM ABI → match DTOs + │ ├─ pcre2.worker → PCRE2 10.47 WASM ABI → match DTOs + │ ├─ python.worker → Pyodide 314.0.3 → CPython 3.14.2 re → match DTOs + │ └─ java.worker → TeaVM 0.15.0 java.util.regex module → match DTOs ├─ Pcre2TraceSupervisor → pcre2-trace.worker │ └─ separate ABI-v3 PCRE2_AUTO_CALLOUT operation → bounded trace DTOs ├─ AnalysisPanel @@ -42,7 +46,18 @@ provenance. React never imports or traverses regexpp's cyclic AST. Every engine request carries a protocol version, monotonically increasing request ID and worker generation. A supervisor allows one active request, rejects stale responses, terminates on timeout/crash/cancel, and lazily creates -a new generation. Timeout is a distinct error state. +a new generation. Timeout is a distinct error state. A separate idempotent +load operation verifies a worker's runtime identity before execution; its +flavour-specific startup deadline is not charged to the 250 ms live or selected +manual execution deadline. A killed generation must load and verify again. + +The Python worker imports only the self-hosted Pyodide loader and pack, then +evaluates the application-owned bounded bridge in CPython. The bridge returns +code-point ranges, which are retained as native values and converted only at +valid boundaries to editor UTF-16. The Java worker imports a verified TeaVM +ES2015 module. That module executes TeaVM's own `java.util.regex.Pattern` and +`Matcher` class-library implementation and returns native UTF-16 ranges; it is +not OpenJDK. PCRE2 tracing is not an `EngineSupervisor` match or replacement operation. Its own worker compiles with `PCRE2_AUTO_CALLOUT`, copies only complete fixed @@ -70,13 +85,14 @@ PCRE2 API cannot express directly. Its advertised C17 target is protected by deterministic golden identities and an exact PCRE2 10.47 compile/execute gate. Subject minimization is a main-thread bounded reducer whose expensive predicate -checks stay in independently terminable engine workers. Fixed pattern syntax -is parsed once for capture metadata. The baseline and every accepted candidate -retain the exact target and engine identity. Timeout, crash, cancellation, -worker failure and incomplete output are separate outcomes. Deterministic -ddmin deletion is followed by a fixed-point local sweep over Unicode-scalar -deletion and lower-rank canonical replacement; only completion of that sweep -permits a transform-local minimality claim. +checks stay in independently terminable ECMAScript or PCRE2 workers. Fixed +pattern syntax is parsed once for capture metadata. Python and Java are blocked +at this feature boundary rather than routed to a different engine. The baseline +and every accepted candidate retain the exact target and engine identity. +Timeout, crash, cancellation, worker failure and incomplete output are separate +outcomes. Deterministic ddmin deletion is followed by a fixed-point local sweep +over Unicode-scalar deletion and lower-rank canonical replacement; only +completion of that sweep permits a transform-local minimality claim. Generated-case synthesis and verification are separate trust boundaries. The dedicated generation worker receives only a validated, complete ECMAScript @@ -123,12 +139,13 @@ separator during apply. This makes anchor and cross-line behavior deliberately different rather than silently rewriting the pattern. Match DTOs are reduced to bounded per-group participation counts and samples before the next document. -Native ranges are retained in the engine's declared unit. PCRE2 always uses -UTF/UCP and exposes UTF-8 byte ranges; its ABI copies scalar records and names -out of WebAssembly before returning and retains no code pointer. Browser editor ranges -are half-open UTF-16 code-unit ranges. Reusable converters cover UTF-8 byte and -Unicode code-point offsets, including invalid-boundary rejection and -lone-surrogate detection. +Native ranges are retained in the engine's declared unit. ECMAScript and Java +use UTF-16 code units. PCRE2 always uses UTF/UCP and exposes UTF-8 byte ranges; +its ABI copies scalar records and names out of WebAssembly before returning and +retains no code pointer. CPython `re` exposes Unicode code-point indices. +Browser editor ranges are half-open UTF-16 code-unit ranges. Reusable +converters cover UTF-8 byte and Unicode code-point offsets, including +invalid-boundary rejection and lone-surrogate detection. The release boundary is `dist/` plus checked-in legal/source documents. The Portal consumes the resulting immutable ZIP and never imports React source. diff --git a/docs/COMPARISON_AND_CODEGEN.md b/docs/COMPARISON_AND_CODEGEN.md index 137851c..71f0892 100644 --- a/docs/COMPARISON_AND_CODEGEN.md +++ b/docs/COMPARISON_AND_CODEGEN.md @@ -6,6 +6,10 @@ The comparison panel sends two explicit requests: one to the native browser ECMAScript worker and one to the bundled PCRE2 10.47 worker. It does not translate patterns, flags, options or replacement templates. +This is an explicit two-engine feature, not a generic active-flavour +comparison. Selecting Python or Java for the main workbench does not insert it +into either side or route it through ECMAScript/PCRE2. + Two pattern models are available: - **Shared pattern** sends the same string unchanged to both engines. @@ -52,8 +56,10 @@ result. The panel renders at most 250 differences and 100 alignments at once. ## PCRE2 C17 generator The first reviewed code-generation target is the PCRE2 10.47 8-bit C API. -Other languages remain unavailable until their generators have equivalent -escaping, semantic and toolchain gates. +Python, Java and other targets remain unavailable until their generators have +equivalent escaping, semantic and named-runtime/toolchain gates. The executable +Python and Java browser flavours do not by themselves imply a code-generation +target. The generator consumes a validated PCRE2 snapshot and: diff --git a/docs/ENGINE_BUILDS.md b/docs/ENGINE_BUILDS.md index 072ce6f..a7bf4ad 100644 --- a/docs/ENGINE_BUILDS.md +++ b/docs/ENGINE_BUILDS.md @@ -1,9 +1,9 @@ # Engine builds The production application uses the browser's native `RegExp` for ECMAScript -and bundles a verified PCRE2 10.47 WebAssembly pack. Normal application builds -never download or compile an engine: the reviewed files under -`public/engines/pcre2/` are copied into `dist/` and verified there. +and bundles verified PCRE2, Python and Java runtime packs. Normal application +builds never download or compile an engine: reviewed files under +`public/engines/` are copied into `dist/` and verified there. ## Rebuilding PCRE2 @@ -52,7 +52,77 @@ The immutable signed-tag object is pinned. OpenPGP trust validation remains a release-operator step because the offline builder does not install or trust a key. -## Runtime boundary +## Installing the Python pack + +The Python pack is derived from the exact `pyodide@314.0.3` npm package locked +with integrity: + +```text +sha512-sK40My6m8tmBUYtYH9au9rXUeh9x0wfahtHdOlGmJxZDsKBGKtP6KznyFB2+u/klbQTdDionR0uaVd176zVQzQ== +``` + +That Pyodide release is tag/commit +`ac57031be7564f864d061cb37c5c152e59f83ad4`. Direct executable identity +verification reports CPython 3.14.2; the shipped `pyodide-lock.json` +independently reports `info.python` as 3.14.0, and the verifier records rather +than conflates those two upstream identities. The pack copies only the reviewed +loader, WebAssembly runtime, Python standard library and lock metadata required +for a local CPython `re` worker. It adds deterministic engine metadata, a +closed-file-set checksum manifest and exact Pyodide/CPython licence material. + +The install operation reads from the already installed pinned npm package. It +does not contact a CDN or package index. It verifies source package identity, +file hashes, runtime metadata and licence inputs before atomically replacing +only `public/engines/python/`. The distribution verifier checks the same closed +set under `dist/`, validates WebAssembly magic and confirms that all runtime +references remain relative and self-hosted. + +```sh +node scripts/python-engine-pack.mjs \ + node_modules/pyodide \ + .engine-build/python +node scripts/install-python-engine.mjs .engine-build/python +``` + +The installed closed set is: + +- `pyodide.mjs`, `pyodide.asm.mjs` and `pyodide.asm.wasm`; +- `python_stdlib.zip` and `pyodide-lock.json`; +- `engine-metadata.json` and `SHA256SUMS`; and +- `LICENSE.pyodide.txt` and `LICENSE.cpython.txt`. + +## Building the Java pack + +The Java bridge under `engines/java/` wraps TeaVM 0.15.0 +`java.util.regex.Pattern` and `Matcher`. TeaVM tag/commit +`ee91b03e616c4b45401cd11fb0cd7eb0daf6649b` is pinned through the Maven build. +The build produces a minified ES2015 module without source maps, source files, +remote imports or an OpenJDK runtime. + +The pack gate verifies the Maven coordinates, bridge source identity, TeaVM +engine identity and self-test, generated module, deterministic metadata, +checksums, Apache-2.0 licence and TeaVM NOTICE. Only the verified pack is +installed under `public/engines/java/`. + +```sh +node scripts/java-engine-pack.mjs +node scripts/install-java-engine.mjs +``` + +The pack command performs two clean offline Maven builds and requires identical +output. The installed closed set is `java-regex.mjs`, +`engine-metadata.json`, `SHA256SUMS`, `LICENSE.txt` and `NOTICE.txt`. + +TeaVM supplies its own Apache Harmony-derived class-library implementation. +The resulting engine is therefore identified as +`TeaVM java.util.regex 0.15.0`, not OpenJDK. TeaVM 0.15.0 does not implement +OpenJDK's `Pattern.UNICODE_CHARACTER_CLASS`; the bridge treats the application +`U` flag as a compatibility request, implies Unicode case folding and reports +that predefined-character classes and word boundaries retain TeaVM behaviour. + +## Runtime boundaries + +### PCRE2 ABI version 3 has no retained native handles. Each call compiles, obtains capture names, matches/substitutes or traces and releases its code, match data @@ -72,3 +142,24 @@ Normal execution lives only in `pcre2.worker`. Instrumented never call it. Each supervisor terminates its worker on timeout, crash, cancellation or supersession and lazily creates a clean generation for the next request. + +### Python + +The Python worker loads the self-hosted Pyodide pack and verifies Pyodide, +CPython and `re` identities before accepting work. The application bridge is +evaluated inside that interpreter and exposes bounded compile, match and native +replacement operations. It reports CPython's Unicode code-point positions; +the TypeScript adapter retains them and converts only valid boundaries to +half-open editor UTF-16 ranges. Runtime load has a separate startup deadline. +Execution timeout, cancellation or crash terminates the worker and its complete +Python/WebAssembly heap. + +### Java + +The Java worker imports the self-hosted TeaVM ES module and checks the bridge +ABI, declared engine identity and compiled self-test before accepting work. +Every request compiles a `Pattern`, obtains bounded `Matcher` results or native +replacement output, and returns native half-open UTF-16 ranges. No Java virtual +machine, OpenJDK classes, remote service or ECMAScript regex fallback is +involved. Runtime load has a separate startup deadline; termination discards +the complete worker module state. diff --git a/docs/EXECUTION_TRACES.md b/docs/EXECUTION_TRACES.md index e337ad7..b2edeeb 100644 --- a/docs/EXECUTION_TRACES.md +++ b/docs/EXECUTION_TRACES.md @@ -5,6 +5,10 @@ results, but no V8, SpiderMonkey or JavaScriptCore execution trace. Regex Tools does not relabel structural explanations, static findings or timing observations as an ECMAScript engine trace. +The bundled CPython `re` and TeaVM `java.util.regex` bridges likewise expose +compilation, bounded match/capture and replacement results, not internal engine +steps. Regex Tools does not label their partial lexical syntax trees as traces. + PCRE2 10.47 has a separate actual automatic-callout vertical. ABI version 3 compiles the requested pattern with `PCRE2_AUTO_CALLOUT`, registers an application callback, and copies only: diff --git a/docs/EXPLANATION_MODEL.md b/docs/EXPLANATION_MODEL.md index f5ed969..e3832d4 100644 --- a/docs/EXPLANATION_MODEL.md +++ b/docs/EXPLANATION_MODEL.md @@ -20,8 +20,16 @@ common capture forms. It does not infer branch-reset numbering or claim full nesting; authoritative compilation, capture counts, names and result ranges come from PCRE2 itself. +The Python and Java providers likewise emit deliberately partial lexical trees. +They recognize their documented capture and replacement forms for navigation +and display, but do not claim full grammar acceptance. CPython `re` and TeaVM +`Pattern` remain authoritative for compilation. Java capture names displayed +with native numbered spans come from the bounded lexical metadata; they are not +invented as a TeaVM-reported name table. + The explanation tree is structural. It is never called an actual execution trace. Selecting a node selects and scrolls its exact editor range; selecting pattern text chooses the smallest enclosing node. PCRE2’s separate trace viewer contains actual bounded automatic callouts; its movement labels remain a distinct derived layer and are never copied into the structural explanation. +Python and Java expose no actual execution trace. diff --git a/docs/EXTRACTION_MODEL.md b/docs/EXTRACTION_MODEL.md index f1fd021..7721919 100644 --- a/docs/EXTRACTION_MODEL.md +++ b/docs/EXTRACTION_MODEL.md @@ -18,10 +18,14 @@ budget. Consumers must inspect the preview status rather than treating a preview as complete. In particular, list export is disabled if its template would consume an incomplete value. -Repeated ECMAScript captures expose only the final retained capture. The UI -labels this limitation and does not invent history. Later .NET support may add -actual engine capture-history nodes without degrading them to this model. +Repeated ECMAScript, PCRE2, Python and Java captures expose only the final +retained capture. The UI labels this limitation and does not invent history. +Later .NET support may add actual engine capture-history nodes without +degrading them to this model. The syntactic hierarchy remains useful even if actual spans overlap or fall outside a parent's geometry; native and normalized ranges are preserved rather -than “fixed”. +than “fixed”. ECMAScript and Java native offsets are UTF-16 code units, PCRE2 +native offsets are UTF-8 bytes and Python native offsets are Unicode code +points. All editor ranges are normalized to UTF-16 without discarding the +native unit. diff --git a/docs/FLAVOUR_SUPPORT.md b/docs/FLAVOUR_SUPPORT.md index 6590c4c..57e65b1 100644 --- a/docs/FLAVOUR_SUPPORT.md +++ b/docs/FLAVOUR_SUPPORT.md @@ -1,15 +1,15 @@ # Flavour support -| Flavour | Syntax | Execution | Replacement | Captures | Trace | Analysis | Generated cases | Native offsets | -| ------------ | ------------------------------------------------------------ | ------------------------------------------------------ | ---------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------- | ------------------- | -| ECMAScript | regexpp 4.12.2; explanations partial/feature-matrix tested | Current browser `RegExp`; conformance tested | Bounded ECMAScript `GetSubstitution` | Named/numbered; final repeated capture; no history | Unavailable | Experimental static heuristics + bounded native probes | Bounded normalized-AST sampling; actual-engine verified | UTF-16 | -| PCRE2 10.47 | Application lexical provider partial; compiler authoritative | Pinned 8-bit WASM; bounded/killable/conformance tested | Native bounded `pcre2_substitute()` loop | Native named/numbered records; no capture history | Bounded reported automatic callouts; derived movement labels | Unavailable; ECMAScript heuristics are never applied | Unavailable; structural syntax provider is partial | UTF-8 bytes | -| PCRE | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | -| Python `re` | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Planned code points | -| Go `regexp` | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Planned UTF-8 bytes | -| Rust `regex` | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Planned UTF-8 bytes | -| .NET | Unavailable | Unavailable | Unavailable | Planned capture history | Unavailable | Unavailable | Unavailable | Planned UTF-16 | -| Java | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Planned UTF-16 | +| Flavour | Syntax | Execution | Replacement | Captures | Trace | Analysis | Generated cases | Native offsets | +| ---------------------- | ------------------------------------------------------------ | --------------------------------------------------------- | ---------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------- | -------------- | +| ECMAScript | regexpp 4.12.2; explanations partial/feature-matrix tested | Current browser `RegExp`; conformance tested | Bounded ECMAScript `GetSubstitution` | Named/numbered; final repeated capture; no history | Unavailable | Experimental static heuristics + bounded native probes | Bounded normalized-AST sampling; actual-engine verified | UTF-16 | +| PCRE2 10.47 | Application lexical provider partial; compiler authoritative | Pinned 8-bit WASM; bounded/killable/conformance tested | Native bounded `pcre2_substitute()` loop | Native named/numbered records; no capture history | Bounded reported automatic callouts; derived movement labels | Unavailable; ECMAScript heuristics are never applied | Unavailable; structural syntax provider is partial | UTF-8 bytes | +| Python `re` | Application lexical provider partial; compiler authoritative | CPython 3.14.2 in self-hosted Pyodide 314.0.3 | Native bounded `re` expansion | Native named/numbered spans; no capture history | Unavailable | Unavailable; ECMAScript heuristics are never applied | Unavailable; structural syntax provider is partial | Code points | +| Java `java.util.regex` | Application lexical provider partial; compiler authoritative | TeaVM 0.15.0 class library; bounded/killable; not OpenJDK | TeaVM single-digit `$n`; no `${name}` | Native numbered ranges; lexical names; no history | Unavailable | Unavailable; ECMAScript heuristics are never applied | Unavailable; structural syntax provider is partial | UTF-16 | +| PCRE | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | +| Go `regexp` | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Planned bytes | +| Rust `regex` | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable | Planned bytes | +| .NET | Unavailable | Unavailable | Unavailable | Planned capture history | Unavailable | Unavailable | Unavailable | Planned UTF-16 | ECMAScript tests cover its complete exposed flag matrix, internal indices, zero-length iteration, captures, lookbehind, backreferences, Unicode properties @@ -22,6 +22,19 @@ and result/output truncation. Trace tests cover reported automatic callouts, bounded mark copying, native stop at the complete-event cap, compile ranges, worker loading and browser rendering. +Python tests cover application-level `g`, CPython flags `a`, `i`, `m`, `s` and +`x`, Python-only named-group/replacement syntax, native `re` substitution, +astral code-point/UTF-16 normalization, zero-length iteration, compile errors, +result limits, runtime identity and worker recovery. + +Java tests cover application-level `g`, TeaVM `Pattern` flags, Java named-group +syntax, TeaVM's native single-digit `$n` `Matcher` replacement, explicit +rejection of unsupported `${name}`, astral UTF-16 ranges, zero-length +iteration, compile errors, result limits, module identity and worker recovery. +The runtime and UI explicitly report that TeaVM 0.15.0 is not OpenJDK and does +not implement OpenJDK `Pattern.UNICODE_CHARACTER_CLASS`; `U` is a compatibility +request rather than an exact implementation of that flag. + ECMAScript static findings and generated-input timing observations are advisory. They describe only the selected ECMAScript 2025 pattern, browser runtime and bounded inputs; they are not proofs of safety or general @@ -30,13 +43,14 @@ complexity. ECMAScript generated-case version 1 uses only a complete accepted normalized AST, an explicit deterministic seed and bounded sampling strategies. Every retained positive or negative label is confirmed by the actual selected -browser engine. PCRE2 generation is unavailable because its current lexical -provider is intentionally partial; ECMAScript behavior is never relabelled as -PCRE2. +browser engine. PCRE2, Python and Java generation are unavailable because +their current lexical providers are intentionally partial; ECMAScript behavior +is never relabelled as another flavour. -The PCRE2 explanation provider deliberately does not invent full structural -coverage. In particular, branch-reset numbering is omitted from the syntax tree -while actual capture numbers and names still come from PCRE2 results. +The PCRE2, Python and Java explanation providers deliberately do not invent +full structural coverage. PCRE2 branch-reset numbering is omitted from the +syntax tree, while actual capture numbers, names and ranges still come from the +selected runtime result. ECMAScript and PCRE2 support exact-request comparison for syntax acceptance, engine compilation, matches, captures and engine-native replacement. Results @@ -47,8 +61,14 @@ equivalent results. Pattern formatting is available only for an exact accepted ECMAScript regexpp snapshot. It canonicalizes literal slashes and raw control/line-separator representations, then requires paired actual-engine and applicable exact-test -validation before apply. PCRE2 formatting is unavailable because the current -provider is deliberately partial; its syntax is never treated as ECMAScript. +validation before apply. PCRE2, Python and Java formatting is unavailable +because those providers are deliberately partial; their syntax is never +treated as ECMAScript. + +Subject minimization accepts only the verified ECMAScript and PCRE2 paths. +Python and Java selections are disabled rather than being minimized through a +different flavour. Semantic comparison is likewise an explicit +ECMAScript/PCRE2 operation; it is not a generic four-way equivalence checker. PCRE2 is the only current code-generation target. The reviewed C17 generator is pinned to the PCRE2 10.47 8-bit API; other language generators remain diff --git a/docs/FORMATTING.md b/docs/FORMATTING.md index 9ed2a83..48ff3ee 100644 --- a/docs/FORMATTING.md +++ b/docs/FORMATTING.md @@ -23,8 +23,9 @@ pretty-printer. The transform is idempotent. Formatting requires the exact current, accepted, non-recovered syntax snapshot from the bundled `@eslint-community/regexpp` provider. Transformations are derived from the provider's literal-token ranges rather than from a heuristic -text scan. A stale parse, a malformed pattern, a partial provider, PCRE2 or any -other flavour is reported as unavailable and is never silently rewritten. +text scan. A stale parse, a malformed pattern, a partial provider, PCRE2, +Python, Java or any other flavour is reported as unavailable and is never +silently rewritten. ## Mandatory validation before apply diff --git a/docs/GENERATED_CASES.md b/docs/GENERATED_CASES.md index 0935037..94e1740 100644 --- a/docs/GENERATED_CASES.md +++ b/docs/GENERATED_CASES.md @@ -25,10 +25,11 @@ The coverage report says `covered`, `partial`, `unsupported` or sampling strategy was requested. It does not mean every string in the regular language was enumerated. -PCRE2 generation is unavailable in version 1. Its actual engine is complete for -the advertised execution operations, but its current structural syntax -provider is intentionally partial. Regex Tools does not feed PCRE2 syntax to -the ECMAScript generator or relabel ECMAScript behavior. +PCRE2, Python and Java generation is unavailable in version 1. Their actual +engines are complete for the advertised execution operations, but their +current structural syntax providers are intentionally partial. Regex Tools +does not feed their syntax to the ECMAScript generator or relabel ECMAScript +behaviour. ## Unsupported and partial constructs @@ -75,7 +76,9 @@ removes the generation provenance. Candidate synthesis runs in a dedicated killable worker. The verifier then sends each exact candidate, pattern, flavour version, flags, engine options and scan mode through `EngineSupervisor`, which selects the registered real engine -worker. +worker. Version 1's eligibility gate accepts only the exact current ECMAScript +snapshot; the generic supervisor boundary does not make partial-provider +flavours eligible. - An intended positive is labelled `should-match` only after the engine returns at least one match. diff --git a/docs/MINIMIZATION.md b/docs/MINIMIZATION.md index 656dc5d..c7fe730 100644 --- a/docs/MINIMIZATION.md +++ b/docs/MINIMIZATION.md @@ -10,6 +10,10 @@ selected real ECMAScript or PCRE2 worker. It can preserve: - the same one-sided comparison timeout while the other engine completes with authoritative, untruncated output. +Python and Java are not supported minimization targets in v0.3.0. The workspace +disables reduction for those active flavours; it does not substitute +ECMAScript, PCRE2 or a lexical provider as an execution oracle. + The fixed pattern, ordered flags, options, replacement and engine versions form the target identity. Syntax is parsed once to obtain capture metadata. Every accepted subject candidate is then verified through the selected execution diff --git a/docs/PARSER_PROFILES.md b/docs/PARSER_PROFILES.md index a00cfde..10d20d7 100644 --- a/docs/PARSER_PROFILES.md +++ b/docs/PARSER_PROFILES.md @@ -9,11 +9,17 @@ community It uses only reviewed open-source dependencies and builds without private registry credentials. ECMAScript uses regexpp 4.12.2. PCRE2 uses an application-owned lexical provider for partial explanations and the actual -bundled PCRE2 compiler for authoritative acceptance. +bundled PCRE2 compiler for authoritative acceptance. Python and Java use +application-owned lexical providers for partial explanations and +flavour-native replacement tokens; bundled CPython `re` and TeaVM +`java.util.regex` respectively remain authoritative for compilation. +The Java provider follows the bundled TeaVM 0.15.0 replacement subset: +single-digit `$n` is executable, `$12` is `$1` followed by literal `2`, and +Java SE `${name}` references are surfaced as a compatibility limitation. The product deliberately does not implement or reference an `@r101/parser` profile. No commercial package alias, import, tarball, credential, licence key -or private CI path exists. Additional flavour syntax will be implemented +or private CI path exists. Additional flavour syntax is implemented incrementally as open-source providers behind the same application-owned interface. Partial coverage is exposed as metadata and never presented as a complete parser. diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md index a8a56e6..ea10e7c 100644 --- a/docs/PERFORMANCE.md +++ b/docs/PERFORMANCE.md @@ -10,12 +10,22 @@ browser, engine version, pattern and subject. The UI therefore reports observed elapsed time and exact runtime identity but makes no universal throughput or safety claim. -PCRE2 cold execution includes loading and instantiating the self-hosted -WebAssembly module inside its worker; warm requests reuse that instance. +PCRE2 cold worker startup includes loading and instantiating the self-hosted +WebAssembly module; warm requests reuse that instance. Every request still compiles and frees its pattern so no unbounded compiled-code cache can accumulate. Native match-step, depth and heap limits complement the supervisor wall clock, and cancellation discards the complete worker heap. +Python has a materially larger cold start because its worker loads the +self-hosted Pyodide JavaScript/WebAssembly runtime and Python standard library +before verifying CPython and `re`. Java imports and self-tests its bundled +TeaVM ES module. Engine loading is an explicit operation with a +flavour-specific startup deadline; it is not charged to the 250 ms live or +selected manual execution timeout. Warm requests reuse the verified worker. +Killing a worker for timeout, crash or cancellation discards its complete +runtime, so the next request pays the cold-load cost and verifies identity +again. + Automatic-callout tracing is deliberately excluded from every benchmark. It compiles an independently instrumented PCRE2 pattern in a separate worker and can materially change runtime work. The trace path retains at most 50,000 @@ -44,12 +54,12 @@ pages of 200. Individual result-value previews are capped at 64 Ki UTF-16 units and share an 8 Mi-unit aggregate engine-result budget. The extraction tree shows 100 UTF-16 units per value and capture-table cells show 512, with explicit range lengths and separate engine-prefix labels; copy and eligible JSON export -retain the bounded engine value. List export is disabled when a source value is incomplete, so a bounded -preview cannot be mistaken for the full value. List generation additionally -stops at 250,000 template-token evaluations, a 64 Ki UTF-16 row preview, or an -8 Mi-unit aggregate materialization bound. The UI shows 500 list rows while an -eligible export still contains every generated row; any incomplete result -disables export. +retain the bounded engine value. List export is disabled when a source value is +incomplete, so a bounded preview cannot be mistaken for the full value. List +generation additionally stops at 250,000 template-token evaluations, a 64 Ki +UTF-16 row preview, or an 8 Mi-unit aggregate materialization bound. The UI +shows 500 list rows while an eligible export still contains every generated +row; any incomplete result disables export. Replacement output has a separate 64 MiB bound. Match/capture-limit incompleteness and output-byte truncation are tracked separately; either makes the aggregate replacement result incomplete. diff --git a/docs/PORTAL_REQUIREMENTS.md b/docs/PORTAL_REQUIREMENTS.md index c519ad1..5cd34a2 100644 --- a/docs/PORTAL_REQUIREMENTS.md +++ b/docs/PORTAL_REQUIREMENTS.md @@ -9,17 +9,23 @@ Required delivery behavior: revalidation/no-cache resources. - Hashed Vite assets may use immutable long-term caching. - CSP must allow `worker-src 'self' blob:`. -- `engines/pcre2/pcre2.wasm` must use `application/wasm`. +- `engines/pcre2/pcre2.wasm` and + `engines/python/pyodide.asm.wasm` must use `application/wasm`. +- Engine `.mjs` files must use a JavaScript MIME type; + `engines/python/python_stdlib.zip`, JSON, licence, notice and checksum files + must be delivered without content transformation. - `script-src` must permit self-hosted WebAssembly compilation, normally with `'wasm-unsafe-eval'`; broad `'unsafe-eval'` is neither needed nor recommended. -- `engines/pcre2/pcre2.mjs`, metadata, checksums, licence and WASM should use - revalidation or a release-scoped immutable cache. They are not +- `connect-src 'self'` must allow the Pyodide worker to fetch its own + same-origin WebAssembly, standard-library and lock files. +- Every file below `engines/pcre2/`, `engines/python/` and `engines/java/` + should use revalidation or a release-scoped immutable cache. These are not content-hashed filenames and must never drift under one release identity. The Portal must consume the immutable release ZIP, verify its SHA-256, verify -manifest ID `de.add-ideas.regex-tools` and version `0.2.0`, and mount it at a +manifest ID `de.add-ideas.regex-tools` and version `0.3.0`, and mount it at a relative target such as `apps/regex/`. -The package, manifest, tag, artifact URL and checksum must all use the v0.2.0 -identity. The historical v0.1.0 artifact coordinates remain immutable and must -not be overwritten or reused. +The package, manifest, tag, artifact URL and checksum must all use the v0.3.0 +identity. Historical artifact coordinates remain immutable and must not be +overwritten or reused. diff --git a/docs/REFERENCE_IMPLEMENTATIONS.md b/docs/REFERENCE_IMPLEMENTATIONS.md index ab5fba8..80d78f1 100644 --- a/docs/REFERENCE_IMPLEMENTATIONS.md +++ b/docs/REFERENCE_IMPLEMENTATIONS.md @@ -1,14 +1,17 @@ # Reference implementations and sources -Inspection date: 2026-07-24. +Inspection date: 2026-07-27. | Reference | Exact revision/version | Licence | Use and copying status | | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------- | -| Regex Tools | Unborn repository at initial inspection; release identity `v0.1.0` | GPL-3.0-or-later | Application source written for this project. | +| Regex Tools | Release identity `v0.3.0` | GPL-3.0-or-later | Application source written for this project. | | Toolbox SDK | `53c40a61ba1581246f65773fcbb1c1cfd31ac98e` / 0.2.2 | Apache-2.0 | Contract, shell and release conventions; package APIs used, no source adapted. | | Toolbox Portal | `a9c31c8986c40a0097966318e925083302e91e13` / 0.5.0 | AGPL-3.0-only | Assembly/lock conventions inspected; no source copied into the app. | | regexpp | 4.12.2; npm integrity `sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==` | MIT | Pinned ECMAScript syntax provider. Provider AST is normalized in a worker. | | PCRE2 | signed tag 10.47; commit `f454e231fe5006dd7ff8f4693fd2b8eb94333429` | BSD-3-Clause WITH PCRE2-exception | Pinned offline build; generated verified WebAssembly pack is shipped, source is not vendored. | +| Pyodide | tag 314.0.3; commit `ac57031be7564f864d061cb37c5c152e59f83ad4`; pinned npm integrity | MPL-2.0 | Reviewed self-hosted runtime pack; no CDN use. | +| CPython | executable runtime identity 3.14.2 in Pyodide 314.0.3 | PSF-2.0 | Actual `re` compiler, matcher and replacement runtime; Python source is not vendored. | +| TeaVM | tag/commit `ee91b03e616c4b45401cd11fb0cd7eb0daf6649b` / 0.15.0 | Apache-2.0 | `java.util.regex` class library compiled into the verified module; not OpenJDK. | | ECMAScript specification | ; living specification inspected 2026-07-24 | ECMA terms | Semantics reference; no prose copied. | | regex101 | and public parser documentation | Product/commercial terms | Product reference only. No source, branding, explanations, reference prose or visual design copied. | | `recheck` | 4.5.0 | MIT | Metadata inspected; not installed or shipped. | @@ -17,5 +20,5 @@ Inspection date: 2026-07-24. | RegexLib | Website inspected | Redistribution licence not established | No fixture copied. | | RGXP.RU | Website inspected | Redistribution licence not established | No fixture copied. | -All v0.1.0 and v0.2.0 conformance cases are project-authored. See +All v0.1.0, v0.2.0 and v0.3.0 conformance cases are project-authored. See `tests/fixtures/README.md`. diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 194ecba..d560464 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -18,9 +18,13 @@ on publication failure, replaces an existing exact version only with `--force`, and produces: ```text -release/regex-tools-0.2.0.zip -release/regex-tools-0.2.0.zip.sha256 +release/regex-tools-0.3.0.zip +release/regex-tools-0.3.0.zip.sha256 ``` -The existing `release/regex-tools-0.1.0.zip` and matching sidecar are historical -immutable artifacts. Creating v0.2.0 must not replace, rename or remove them. +Before packaging, the engine verifier checks the closed PCRE2, Python and Java +file sets in `dist/`, including checksums, metadata, licences/notices, module +and WebAssembly identities and self-hosted relative asset references. + +The existing v0.1.0 and v0.2.0 ZIPs and matching sidecars are historical +immutable artifacts. Creating v0.3.0 must not replace, rename or remove them. diff --git a/docs/SECURITY.md b/docs/SECURITY.md index 77ec32b..f2bbef7 100644 --- a/docs/SECURITY.md +++ b/docs/SECURITY.md @@ -19,6 +19,18 @@ untrusted. - PCRE2 runs only in mandatory UTF/UCP mode. Exact UTF-8 byte boundaries are normalized to editor UTF-16 offsets; lone surrogates are rejected instead of being silently replaced by browser encoding. +- Python starts only after the worker verifies Pyodide, CPython and `re` + identities. Pattern, subject, flags and replacement remain string data passed + to the fixed application bridge; no user-supplied Python source is evaluated. + Native code-point boundaries are checked before conversion to editor UTF-16. +- Java starts only after the worker verifies the TeaVM bridge ABI, engine + identity and compiled self-test. It exposes only fixed bounded + `Pattern`/`Matcher` entry points; no JVM, Java class loading or user-supplied + JavaScript is available. The runtime is TeaVM, not OpenJDK. +- Every bundled engine directory has a closed file set, deterministic + metadata/checksums and licence material verified both before installation and + in `dist/`. Runtime imports and fetches resolve only against the same-origin + release path. - Replacement templates are strings; executable callbacks are unavailable. - Replacement/list token decorations, rows, chips, diagnostics and list evaluation work have separate presentation/operation caps; incomplete list @@ -72,10 +84,14 @@ untrusted. predicate check runs in the selected killable engine worker. Timeout, crash, cancellation and worker error remain distinct; truncated results fail closed. Subjects and results are ephemeral and never uploaded or persisted. -- No backend, uploads, telemetry, remote corpus URL, CDN, remote font, `eval`, - `Function`, arbitrary command line or unsafe HTML rendering exists. +- No backend, uploads, telemetry, remote corpus URL, CDN, remote font, + arbitrary command line or unsafe HTML rendering exists. Application code + does not evaluate user-controlled JavaScript or Python. The generic generated + Pyodide loader contains an Emscripten dynamic-link branch that uses + JavaScript `eval`, but the shipped self-contained CPython/stdlib path does not + exercise it and loads under the CSP below without broad `'unsafe-eval'`. -The PCRE2-enabled build needs a CSP equivalent to: +The engine-enabled build needs a CSP equivalent to: ```text default-src 'self'; @@ -91,9 +107,11 @@ base-uri 'none'; form-action 'none'; ``` -The Toolbox shell currently requires inline styles. Corpus ZIP generation and -PCRE2 use self-hosted modules and local workers under the existing -`worker-src` policy. Broad `unsafe-eval` is not required. +The Toolbox shell currently requires inline styles. Corpus ZIP generation, +PCRE2, Pyodide and TeaVM use self-hosted modules/assets and local workers under +the existing `worker-src` and `connect-src` policy. Broad `'unsafe-eval'` is not +required; `'wasm-unsafe-eval'` remains required for the two WebAssembly +runtimes. Report vulnerabilities privately to the repository owner before public issue details are posted. diff --git a/engines/java/LICENSE-TeaVM.txt b/engines/java/LICENSE-TeaVM.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/engines/java/LICENSE-TeaVM.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/engines/java/NOTICE-TeaVM.txt b/engines/java/NOTICE-TeaVM.txt new file mode 100644 index 0000000..ee91916 --- /dev/null +++ b/engines/java/NOTICE-TeaVM.txt @@ -0,0 +1,11 @@ +This product includes software developed by Alexey Andreev +(http://teavm.org). + +This product includes software developed by The Apache Software +Foundation (http://www.apache.org/). + +============================================================================= += NOTICE file corresponding to section 4d of the Apache License Version 2.0 = +============================================================================= +This product includes software developed by +Joda.org (http://www.joda.org/). diff --git a/engines/java/README.md b/engines/java/README.md new file mode 100644 index 0000000..40c8f76 --- /dev/null +++ b/engines/java/README.md @@ -0,0 +1,25 @@ +# TeaVM Java regular-expression engine + +This project compiles a bounded bridge around TeaVM 0.15.0's +`java.util.regex.Pattern` and `Matcher` class-library implementation to a +minified ES2015 module. + +The runtime is intentionally identified as `TeaVM java.util.regex 0.15.0`. +TeaVM supplies its own Apache Harmony-derived Java class-library subset; the +generated engine is not OpenJDK and must not be presented as exact OpenJDK +semantics. + +The `U` application flag is a compatibility request. TeaVM 0.15.0 does not +implement OpenJDK's `Pattern.UNICODE_CHARACTER_CLASS`; the bridge implies +Unicode case folding but retains TeaVM's predefined-character-class and word +boundary behaviour. The TypeScript adapter reports this boundary. + +Replacement is delegated to TeaVM 0.15.0's native `Matcher` implementation. +That implementation recognizes only a single decimal digit after `$` (`$0` +through `$9`, subject to the compiled group count). It does not implement +OpenJDK's `${name}` named-replacement syntax; the bridge returns a +`replacement-error` when such a replacement is attempted. + +Maven builds `target/generated/java-regex.mjs`. The repository pack script +verifies the pinned source identity, bridge source hashes, licence/notice and +generated module before it can be installed under `public/engines/java`. diff --git a/engines/java/pom.xml b/engines/java/pom.xml new file mode 100644 index 0000000..3da41ca --- /dev/null +++ b/engines/java/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + de.addideas.regextools + java-regex-engine + 0.1.0 + jar + + + 11 + 2026-06-06T15:27:10Z + UTF-8 + 0.15.0 + + + + + org.teavm + teavm-classlib + ${teavm.version} + provided + + + org.teavm + teavm-jso + ${teavm.version} + provided + + + + + + + org.apache.maven.plugins + maven-clean-plugin + 3.4.1 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + ${maven.compiler.release} + + + + org.apache.maven.plugins + maven-jar-plugin + 3.4.2 + + ${project.build.outputTimestamp} + + + + org.teavm + teavm-maven-plugin + ${teavm.version} + + + java-regex-browser-engine + + compile + + + de.addideas.regextools.javaengine.RegexBridge + ${project.build.directory}/generated + java-regex.mjs + JAVASCRIPT + ES2015 + true + ADVANCED + false + false + false + + + + + + + diff --git a/engines/java/src/main/java/de/addideas/regextools/javaengine/RegexBridge.java b/engines/java/src/main/java/de/addideas/regextools/javaengine/RegexBridge.java new file mode 100644 index 0000000..961e03c --- /dev/null +++ b/engines/java/src/main/java/de/addideas/regextools/javaengine/RegexBridge.java @@ -0,0 +1,346 @@ +/* + * SPDX-License-Identifier: GPL-3.0-or-later + * + * The generated module links TeaVM 0.15.0 class-library code distributed + * under Apache-2.0. Its runtime identity is TeaVM java.util.regex, not OpenJDK. + */ +package de.addideas.regextools.javaengine; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; +import org.teavm.jso.JSExport; + +public final class RegexBridge { + private static final int BRIDGE_ABI_VERSION = 1; + private static final String ENGINE_IDENTITY = "TeaVM java.util.regex 0.15.0"; + private static final int MAXIMUM_CAPTURE_GROUPS = 1_000; + private static final int MAXIMUM_NATIVE_OUTPUT_UTF16 = 64 * 1024 * 1024; + + private static final int FLAG_CASE_INSENSITIVE = 1 << 0; + private static final int FLAG_MULTILINE = 1 << 1; + private static final int FLAG_DOTALL = 1 << 2; + private static final int FLAG_UNICODE_CASE = 1 << 3; + private static final int FLAG_COMMENTS = 1 << 4; + private static final int FLAG_UNICODE_CHARACTER_COMPATIBILITY = 1 << 5; + private static final int FLAG_UNIX_LINES = 1 << 6; + + private RegexBridge() { + } + + public static void main(String[] arguments) { + // TeaVM requires a main class. All useful entry points are JS exports. + } + + @JSExport + public static int bridgeAbiVersion() { + return BRIDGE_ABI_VERSION; + } + + @JSExport + public static String engineIdentity() { + return ENGINE_IDENTITY; + } + + @JSExport + public static int selfTest() { + try { + Matcher matcher = Pattern.compile("(?<=a)(b)\\1").matcher("abb"); + if (!matcher.find() || matcher.start() != 1 || matcher.end() != 3 + || matcher.start(1) != 1 || matcher.end(1) != 2) { + return 1; + } + StringBuffer output = new StringBuffer(); + matcher.appendReplacement(output, "<$1>"); + matcher.appendTail(output); + return "a".contentEquals(output) ? 0 : 2; + } catch (RuntimeException failure) { + return 3; + } + } + + @JSExport + public static String execute( + String pattern, + String subject, + int applicationFlags, + boolean iterate, + int maximumMatches, + int maximumCaptureRows) { + return run( + pattern, + subject, + applicationFlags, + iterate, + maximumMatches, + maximumCaptureRows, + null); + } + + @JSExport + public static String replace( + String pattern, + String subject, + String replacement, + int applicationFlags, + boolean iterate, + int maximumMatches, + int maximumCaptureRows) { + return run( + pattern, + subject, + applicationFlags, + iterate, + maximumMatches, + maximumCaptureRows, + replacement); + } + + private static String run( + String patternText, + String subject, + int applicationFlags, + boolean iterate, + int maximumMatches, + int maximumCaptureRows, + String replacement) { + if (patternText == null || subject == null) { + return failure("bridge-error", "NullPointerException", + "Pattern and subject must not be null.", -1); + } + if (maximumMatches < 1 || maximumCaptureRows < 1) { + return failure("limit-error", "IllegalArgumentException", + "Result limits must be positive.", -1); + } + + Pattern pattern; + try { + pattern = Pattern.compile(patternText, nativeFlags(applicationFlags)); + } catch (PatternSyntaxException failure) { + String message = failure.getDescription(); + if (message == null || message.length() == 0) { + message = failure.getMessage(); + } + return failure("compile-error", "PatternSyntaxException", message, failure.getIndex()); + } catch (RuntimeException failure) { + return failure("compile-error", failure.getClass().getSimpleName(), + safeMessage(failure, "TeaVM rejected the pattern."), -1); + } + + Matcher matcher = pattern.matcher(subject); + int groupCount = matcher.groupCount(); + if (groupCount > MAXIMUM_CAPTURE_GROUPS) { + return failure("limit-error", "CaptureGroupLimit", + "The pattern exceeds the 1,000 capture-group execution limit.", -1); + } + + StringBuilder records = new StringBuilder(); + StringBuffer output = replacement == null ? null : new StringBuffer(); + int matchCount = 0; + int captureRows = 0; + int lastReplacementEnd = 0; + boolean resultsTruncated = false; + boolean outputTruncated = false; + + try { + while (matcher.find()) { + int rowsForMatch = Math.max(1, groupCount); + if (matchCount >= maximumMatches + || captureRows + rowsForMatch > maximumCaptureRows) { + resultsTruncated = true; + break; + } + + appendNumber(records, matcher.start()); + appendNumber(records, matcher.end()); + for (int group = 1; group <= groupCount; group++) { + appendNumber(records, matcher.start(group)); + appendNumber(records, matcher.end(group)); + } + matchCount++; + captureRows += rowsForMatch; + + if (output != null && !outputTruncated) { + long expansionLength = replacementExpansionLength(matcher, replacement); + long projectedLength = (long) output.length() + + matcher.start() - lastReplacementEnd + + expansionLength; + if (projectedLength > MAXIMUM_NATIVE_OUTPUT_UTF16) { + appendBounded( + output, + subject, + lastReplacementEnd, + matcher.start(), + MAXIMUM_NATIVE_OUTPUT_UTF16); + outputTruncated = true; + } else { + matcher.appendReplacement(output, replacement); + lastReplacementEnd = matcher.end(); + } + } + + if (!iterate) { + break; + } + } + + if (output != null && !outputTruncated) { + long projectedLength = (long) output.length() + + subject.length() - lastReplacementEnd; + if (projectedLength > MAXIMUM_NATIVE_OUTPUT_UTF16) { + appendBounded( + output, + subject, + lastReplacementEnd, + subject.length(), + MAXIMUM_NATIVE_OUTPUT_UTF16); + outputTruncated = true; + } else { + matcher.appendTail(output); + } + } + } catch (RuntimeException failure) { + String kind = replacement == null ? "execution-error" : "replacement-error"; + String fallback = replacement == null + ? "TeaVM failed while matching." + : "TeaVM Matcher rejected the replacement."; + return failure(kind, failure.getClass().getSimpleName(), + safeMessage(failure, fallback), -1); + } + + FieldWriter result = new FieldWriter(); + result.field("1"); + result.field("ok"); + result.number(groupCount); + result.bool(resultsTruncated); + result.number(matchCount); + result.raw(records); + if (output != null) { + result.bool(outputTruncated); + result.field(output.toString()); + } + return result.toString(); + } + + private static int nativeFlags(int applicationFlags) { + int flags = 0; + if ((applicationFlags & FLAG_CASE_INSENSITIVE) != 0) { + flags |= Pattern.CASE_INSENSITIVE; + } + if ((applicationFlags & FLAG_MULTILINE) != 0) { + flags |= Pattern.MULTILINE; + } + if ((applicationFlags & FLAG_DOTALL) != 0) { + flags |= Pattern.DOTALL; + } + if ((applicationFlags & FLAG_UNICODE_CASE) != 0 + || (applicationFlags & FLAG_UNICODE_CHARACTER_COMPATIBILITY) != 0) { + flags |= Pattern.UNICODE_CASE; + } + if ((applicationFlags & FLAG_COMMENTS) != 0) { + flags |= Pattern.COMMENTS; + } + if ((applicationFlags & FLAG_UNIX_LINES) != 0) { + flags |= Pattern.UNIX_LINES; + } + return flags; + } + + private static long replacementExpansionLength(Matcher matcher, String replacement) { + long length = 0; + for (int index = 0; index < replacement.length(); index++) { + char current = replacement.charAt(index); + if (current == '\\') { + index++; + if (index >= replacement.length()) { + throw new IndexOutOfBoundsException(); + } + length++; + } else if (current == '$') { + index++; + if (index >= replacement.length()) { + throw new IllegalArgumentException(""); + } + int group = Character.digit(replacement.charAt(index), 10); + if (group < 0) { + throw new IllegalArgumentException(""); + } + String value = matcher.group(group); + // TeaVM 0.15.0's native replacement path dereferences this + // value too, including its unmatched-capture behaviour. + length += value.length(); + } else { + length++; + } + if (length > MAXIMUM_NATIVE_OUTPUT_UTF16) { + return length; + } + } + return length; + } + + private static void appendBounded( + StringBuffer output, + String value, + int start, + int end, + int maximumLength) { + int remaining = maximumLength - output.length(); + if (remaining <= 0 || start >= end) { + return; + } + int boundedEnd = Math.min(end, start + remaining); + if (boundedEnd < end + && boundedEnd > start + && Character.isHighSurrogate(value.charAt(boundedEnd - 1)) + && Character.isLowSurrogate(value.charAt(boundedEnd))) { + boundedEnd--; + } + output.append(value, start, boundedEnd); + } + + private static String failure(String status, String name, String message, int index) { + FieldWriter result = new FieldWriter(); + result.field("1"); + result.field(status); + result.field(name == null ? "Error" : name); + result.field(message == null ? "" : message); + result.number(index); + return result.toString(); + } + + private static String safeMessage(RuntimeException failure, String fallback) { + String message = failure.getMessage(); + return message == null || message.length() == 0 ? fallback : message; + } + + private static void appendNumber(StringBuilder output, int value) { + String encoded = Integer.toString(value); + output.append(encoded.length()).append(':').append(encoded); + } + + private static final class FieldWriter { + private final StringBuilder output = new StringBuilder(); + + void field(String value) { + output.append(value.length()).append(':').append(value); + } + + void number(int value) { + field(Integer.toString(value)); + } + + void bool(boolean value) { + field(value ? "1" : "0"); + } + + void raw(StringBuilder encodedFields) { + output.append(encodedFields); + } + + @Override + public String toString() { + return output.toString(); + } + } +} diff --git a/engines/python/bridge.py b/engines/python/bridge.py new file mode 100644 index 0000000..a21196a --- /dev/null +++ b/engines/python/bridge.py @@ -0,0 +1,277 @@ +"""Fixed, bounded CPython ``re`` bridge used by the Python engine worker. + +This file is bundled as source by Vite and evaluated once while the trusted +Pyodide runtime starts. User-controlled values are passed as function +arguments; they are never evaluated as Python source. +""" + +import json +import re +import sys + + +_BRIDGE_ABI_VERSION = 1 +_MAX_CAPTURE_GROUPS = 1_000 +_MAX_NATIVE_EXPANSION_CODE_POINTS = 16 * 1024 * 1024 + + +def _json_result(value): + return json.dumps(value, ensure_ascii=True, separators=(",", ":")) + + +def _error(phase, code, error, position=None): + message = str(error) + if len(message) > 1_024: + message = message[:1_023] + "\N{HORIZONTAL ELLIPSIS}" + result = { + "abi": _BRIDGE_ABI_VERSION, + "ok": False, + "phase": phase, + "code": code, + "message": message, + } + if isinstance(position, int) and position >= 0: + result["position"] = position + return _json_result(result) + + +def _flag_bits(flags): + bits = 0 + if "a" in flags: + bits |= re.ASCII + if "i" in flags: + bits |= re.IGNORECASE + if "m" in flags: + bits |= re.MULTILINE + if "s" in flags: + bits |= re.DOTALL + if "x" in flags: + bits |= re.VERBOSE + return bits + + +def _match_record(match, group_count): + captures = [] + for group_number in range(1, group_count + 1): + start, end = match.span(group_number) + captures.append(None if start < 0 else [start, end]) + start, end = match.span(0) + return {"span": [start, end], "captures": captures} + + +def _utf8_width(character): + code_point = ord(character) + if code_point <= 0x7F: + return 1 + if code_point <= 0x7FF: + return 2 + if code_point <= 0xFFFF: + return 3 + return 4 + + +def _append_utf8_bounded(chunks, value, byte_count, maximum_bytes): + remaining = maximum_bytes - byte_count + if not value: + return byte_count, True + end = 0 + for character in value: + width = _utf8_width(character) + if width > remaining: + break + remaining -= width + byte_count += width + end += 1 + if end: + chunks.append(value[:end]) + return byte_count, end == len(value) + + +def _expansion_code_points(parsed_template, match): + total = 0 + for part in parsed_template: + if isinstance(part, int): + start, end = match.span(part) + if start >= 0: + total += end - start + else: + total += len(part) + if total > _MAX_NATIVE_EXPANSION_CODE_POINTS: + return total + return total + + +def _identity(): + return _json_result( + { + "abi": _BRIDGE_ABI_VERSION, + "ok": True, + "identity": { + "implementation": sys.implementation.name, + "pythonVersion": ".".join( + str(part) for part in sys.version_info[:3] + ), + "reModule": re.__name__, + }, + } + ) + + +def _regex_tools_run( + operation, + pattern, + flags, + subject, + maximum_matches, + maximum_capture_rows, + replacement, + maximum_output_bytes, +): + if operation == "identity": + return _identity() + if operation not in ("execute", "replace"): + return _error("bridge", "invalid-operation", "Unsupported bridge operation.") + + try: + compiled = re.compile(pattern, _flag_bits(flags)) + except re.PatternError as error: + return _error( + "compile", + "compile-error", + error, + getattr(error, "pos", None), + ) + except Exception as error: + return _error("compile", "compile-error", error) + + group_count = compiled.groups + if group_count > _MAX_CAPTURE_GROUPS: + return _error( + "compile", + "capture-group-limit", + ( + f"The pattern declares {group_count} capture groups; " + f"the bridge limit is {_MAX_CAPTURE_GROUPS}." + ), + ) + + group_names = sorted( + ([group_number, name] for name, group_number in compiled.groupindex.items()), + key=lambda item: item[0], + ) + + parsed_template = None + if operation == "replace": + try: + parsed_template = re._parser.parse_template(replacement, compiled) + except (re.PatternError, IndexError) as error: + return _error( + "replacement", + "replacement-error", + error, + getattr(error, "pos", None), + ) + except Exception as error: + return _error("replacement", "replacement-error", error) + + iterate = "g" in flags + try: + matches = compiled.finditer(subject) if iterate else ( + candidate for candidate in (compiled.search(subject),) if candidate + ) + records = [] + capture_rows = 0 + results_truncated = False + output_chunks = [] + output_bytes = 0 + output_truncated = False + output_stopped = False + next_source_position = 0 + + for match in matches: + rows_for_match = max(1, group_count) + if ( + len(records) >= maximum_matches + or capture_rows + rows_for_match > maximum_capture_rows + ): + results_truncated = True + break + + records.append(_match_record(match, group_count)) + capture_rows += rows_for_match + + if operation == "replace" and not output_stopped: + start, end = match.span(0) + output_bytes, complete = _append_utf8_bounded( + output_chunks, + subject[next_source_position:start], + output_bytes, + maximum_output_bytes, + ) + if not complete: + output_truncated = True + output_stopped = True + else: + expansion_size = _expansion_code_points( + parsed_template, match + ) + if expansion_size > _MAX_NATIVE_EXPANSION_CODE_POINTS: + return _error( + "replacement", + "replacement-expansion-limit", + ( + "One native match expansion exceeds the " + f"{_MAX_NATIVE_EXPANSION_CODE_POINTS} " + "code-point safety limit." + ), + ) + expanded = match.expand(replacement) + output_bytes, complete = _append_utf8_bounded( + output_chunks, + expanded, + output_bytes, + maximum_output_bytes, + ) + if not complete: + output_truncated = True + output_stopped = True + next_source_position = end + + if operation == "replace" and not output_stopped: + output_bytes, complete = _append_utf8_bounded( + output_chunks, + subject[next_source_position:], + output_bytes, + maximum_output_bytes, + ) + if not complete: + output_truncated = True + + result = { + "abi": _BRIDGE_ABI_VERSION, + "ok": True, + "groupCount": group_count, + "groupNames": group_names, + "matches": records, + "resultsTruncated": results_truncated, + } + if operation == "replace": + result.update( + { + "output": "".join(output_chunks), + "outputBytes": output_bytes, + "outputTruncated": output_truncated, + } + ) + return _json_result(result) + except re.PatternError as error: + phase = "replacement" if operation == "replace" else "match" + code = "replacement-error" if operation == "replace" else "match-error" + return _error(phase, code, error, getattr(error, "pos", None)) + except Exception as error: + phase = "replacement" if operation == "replace" else "match" + code = "replacement-error" if operation == "replace" else "match-error" + return _error(phase, code, error) + + +_regex_tools_run diff --git a/package-lock.json b/package-lock.json index 22e0e3d..3562dd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "regex-tools", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "regex-tools", - "version": "0.2.0", + "version": "0.3.0", "license": "GPL-3.0-or-later", "dependencies": { "@add-ideas/toolbox-contract": "0.2.2", @@ -39,6 +39,7 @@ "globals": "17.7.0", "jsdom": "29.1.1", "prettier": "3.9.5", + "pyodide": "314.0.3", "typescript": "6.0.3", "typescript-eslint": "8.64.0", "vite": "8.1.5", @@ -1385,6 +1386,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/emscripten": { + "version": "1.41.5", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.41.5.tgz", + "integrity": "sha512-cMQm7pxu6BxtHyqJ7mQZ2kXWV5SLmugybFdHCBbJ5eHzOo6VhBckEgAT3//rP5FwPHNPeEiq4SmQ5ucBwsOo4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/esrecurse": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", @@ -3405,6 +3413,20 @@ "node": ">=6" } }, + "node_modules/pyodide": { + "version": "314.0.3", + "resolved": "https://registry.npmjs.org/pyodide/-/pyodide-314.0.3.tgz", + "integrity": "sha512-sK40My6m8tmBUYtYH9au9rXUeh9x0wfahtHdOlGmJxZDsKBGKtP6KznyFB2+u/klbQTdDionR0uaVd176zVQzQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/emscripten": "^1.41.4", + "ws": "^8.5.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/react": { "version": "19.2.7", "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", @@ -4101,6 +4123,28 @@ "node": ">=0.10.0" } }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", diff --git a/package.json b/package.json index 26da57e..4ffaf75 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regex-tools", - "version": "0.2.0", + "version": "0.3.0", "description": "Develop, explain, test and apply regular expressions locally in the browser.", "license": "GPL-3.0-or-later", "author": "Albrecht Degering", @@ -35,6 +35,12 @@ "engines:pcre2:build": "node scripts/build-engines.mjs --pcre2", "engines:pcre2:install": "node scripts/install-pcre2-engine.mjs", "engines:pcre2:verify": "node scripts/verify-engine-assets.mjs --pcre2-pack .engine-build/pcre2", + "engines:python:build": "node scripts/python-engine-pack.mjs", + "engines:python:install": "node scripts/install-python-engine.mjs", + "engines:python:verify": "node scripts/verify-engine-assets.mjs --python-pack public/engines/python", + "engines:java:build": "node scripts/java-engine-pack.mjs", + "engines:java:install": "node scripts/install-java-engine.mjs", + "engines:java:verify": "node scripts/verify-engine-assets.mjs --java-pack public/engines/java", "engines:verify": "node scripts/verify-engine-assets.mjs", "manifest:generate": "node scripts/generate-toolbox-manifest.mjs", "manifest:check": "node scripts/generate-toolbox-manifest.mjs --check", @@ -75,6 +81,7 @@ "globals": "17.7.0", "jsdom": "29.1.1", "prettier": "3.9.5", + "pyodide": "314.0.3", "typescript": "6.0.3", "typescript-eslint": "8.64.0", "vite": "8.1.5", diff --git a/public/engines/README.md b/public/engines/README.md index 34b814f..6069dc1 100644 --- a/public/engines/README.md +++ b/public/engines/README.md @@ -1,9 +1,13 @@ # Engine assets Regex Tools executes ECMAScript through the browser's native `RegExp` engine. -It also ships the declared, self-hosted PCRE2 10.47 WebAssembly pack in -`pcre2/`. +It also ships three declared, self-hosted runtime packs: -The PCRE2 pack is built from pinned, documented open-source code and -toolchain revisions. `engine-metadata.json`, `SHA256SUMS` and `LICENSE.txt` -travel with the runtime files and are verified by the release gate. +- `pcre2/`: official PCRE2 10.47, 8-bit WebAssembly; +- `python/`: Pyodide 314.0.3 with CPython 3.14.2 `re`; and +- `java/`: TeaVM 0.15.0's `java.util.regex` class library compiled to an + ES2015 module. This module is not OpenJDK. + +The packs come from pinned, documented open-source inputs. Runtime files travel +with deterministic metadata, closed-set checksums and the applicable upstream +licence/notice material, all of which are verified by the release gate. diff --git a/public/engines/java/LICENSE.txt b/public/engines/java/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/public/engines/java/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/public/engines/java/NOTICE.txt b/public/engines/java/NOTICE.txt new file mode 100644 index 0000000..ee91916 --- /dev/null +++ b/public/engines/java/NOTICE.txt @@ -0,0 +1,11 @@ +This product includes software developed by Alexey Andreev +(http://teavm.org). + +This product includes software developed by The Apache Software +Foundation (http://www.apache.org/). + +============================================================================= += NOTICE file corresponding to section 4d of the Apache License Version 2.0 = +============================================================================= +This product includes software developed by +Joda.org (http://www.joda.org/). diff --git a/public/engines/java/SHA256SUMS b/public/engines/java/SHA256SUMS new file mode 100644 index 0000000..4078123 --- /dev/null +++ b/public/engines/java/SHA256SUMS @@ -0,0 +1,4 @@ +cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE.txt +71bbe79ff78d0e5e64096acdd418589abfe886b8f827048dc655df438a57e477 NOTICE.txt +719cb99761c8f0964835bf7b954fcf6e0df30ec14d2c06050c07c23a978d6d22 engine-metadata.json +fd7974e7bde911ef0682cdc432d28e93c5db9d56f7268482a62e40a2ad86d62f java-regex.mjs diff --git a/public/engines/java/engine-metadata.json b/public/engines/java/engine-metadata.json new file mode 100644 index 0000000..d5b34c1 --- /dev/null +++ b/public/engines/java/engine-metadata.json @@ -0,0 +1,118 @@ +{ + "schemaVersion": 1, + "engine": "java", + "engineName": "TeaVM java.util.regex", + "engineVersion": "0.15.0", + "semanticIdentity": "TeaVM 0.15.0 classlib java.util.regex; Apache Harmony-derived; not OpenJDK", + "status": "production-compatibility-runtime", + "bridge": { + "abiVersion": 1, + "maximumPatternUtf16": 65536, + "maximumSubjectBytes": 16777216, + "maximumReplacementUtf16": 65536, + "maximumMatches": 10000, + "maximumCaptureRows": 100000, + "maximumCaptureGroups": 1000, + "maximumOutputBytes": 67108864, + "offsetUnit": "utf16", + "exports": [ + "bridgeAbiVersion", + "engineIdentity", + "execute", + "replace", + "selfTest" + ], + "sourceFiles": [ + { + "path": "engines/java/pom.xml", + "sha256": "8f70247241da0e1a1db9eb64a604206a69eb6a573b5634f1faa196fa9bb07b15", + "bytes": 2995 + }, + { + "path": "engines/java/README.md", + "sha256": "7ce93387533e889221179515b1c36c67fd54f490edd2d7624c4ee5744bf42cf1", + "bytes": 1309 + }, + { + "path": "engines/java/LICENSE-TeaVM.txt", + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "bytes": 11358 + }, + { + "path": "engines/java/NOTICE-TeaVM.txt", + "sha256": "71bbe79ff78d0e5e64096acdd418589abfe886b8f827048dc655df438a57e477", + "bytes": 493 + }, + { + "path": "engines/java/src/main/java/de/addideas/regextools/javaengine/RegexBridge.java", + "sha256": "8512906fa000cc8ef10f5c8d7e01b7037bbfca24882e834d2de5a706bc1e1cd5", + "bytes": 12469 + } + ] + }, + "source": { + "repository": "https://github.com/konsoletyper/teavm.git", + "tag": "0.15.0", + "commitSha1": "ee91b03e616c4b45401cd11fb0cd7eb0daf6649b", + "treeSha1": "1cdc5c332d5809828c8952f96d73f9e7504a0cec", + "license": "Apache-2.0", + "upstreamLicenseSha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "upstreamNoticeSha256": "6c2b3372a6beee7fbaad482248ac0f5ad2b099d92ff2a528c04261cc9c0636f4" + }, + "toolchain": { + "mavenVersion": "3.9.15", + "javaVersion": "25.0.3", + "teaVmArtifacts": [ + { + "coordinate": "org.teavm:teavm-classlib:0.15.0", + "sha256": "7d805be4670a892a34c89d9d750a8afd65e2f8201b7b3a10343634ea19d1c410" + }, + { + "coordinate": "org.teavm:teavm-jso:0.15.0", + "sha256": "58b337b93924106bf819c45890c7c231a0c740145afe77795f1e0f099f621d71" + }, + { + "coordinate": "org.teavm:teavm-maven-plugin:0.15.0", + "sha256": "1133e16e45f1fd3cb93129fd96d142e1f5ef3608891d83b2273442d5446a3879" + } + ] + }, + "configuration": { + "target": "JavaScript ES2015 module", + "minified": true, + "optimizationLevel": "ADVANCED", + "sourceMaps": false, + "filesystem": false, + "supportedApplicationFlags": [ + "g", + "i", + "d", + "m", + "s", + "u", + "x", + "U" + ], + "unixLines": "d maps to TeaVM Pattern.UNIX_LINES.", + "unicodeCharacterClassCompatibility": "TeaVM 0.15.0 lacks OpenJDK UNICODE_CHARACTER_CLASS; U implies Unicode case folding only.", + "replacement": "TeaVM 0.15.0 Matcher appendReplacement/appendTail semantics: only single-digit $n references; ${name} is rejected; not OpenJDK Matcher parity." + }, + "sourceDateEpoch": 1780759630, + "files": [ + { + "path": "LICENSE.txt", + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "bytes": 11358 + }, + { + "path": "NOTICE.txt", + "sha256": "71bbe79ff78d0e5e64096acdd418589abfe886b8f827048dc655df438a57e477", + "bytes": 493 + }, + { + "path": "java-regex.mjs", + "sha256": "fd7974e7bde911ef0682cdc432d28e93c5db9d56f7268482a62e40a2ad86d62f", + "bytes": 136962 + } + ] +} diff --git a/public/engines/java/java-regex.mjs b/public/engines/java/java-regex.mjs new file mode 100644 index 0000000..5900a63 --- /dev/null +++ b/public/engines/java/java-regex.mjs @@ -0,0 +1,441 @@ +"use strict"; +let Js=2463534242,OY=()=>{let x=Js;x^=x<<13;x^=x>>>17;x^=x<<5;Js=x;return x;},M=f=>function(){return f(this);},O=f=>function(p1){return f(this,p1);},Bq=f=>function(p1,p2){return f(this,p1,p2);},S=f=>function(p1,p2,p3){return f(this,p1,p2,p3);},Bz=f=>function(p1,p2,p3,p4){return f(this,p1,p2,p3,p4);},JT=f=>(args,callback)=>{if(!args){args=[];}let javaArgs=K(CH(),args.length);for(let i=0;i{f.call(null,javaArgs);},callback);},B3=target=>target.$clinit=()=> +{},RB=obj=>{let cls=obj.constructor;let arrayDegree=0;while(cls[Bc]&&cls[Bc].item){++arrayDegree;cls=cls[Bc].item;}let clsName="";if(cls[Bc].primitiveKind!==0){clsName=cls[Bc].name;}else {clsName=cls[Bc]?cls[Bc].name||"a/"+cls.name:"@"+cls.name;}while(arrayDegree-->0){clsName+="[]";}return clsName;},L=superclass=>{if(superclass===0){return function(){};}if(superclass===void 0){superclass=CH();}return function(){superclass.call(this);};},Bc=Symbol("teavm_meta"),B9=cls=>{if(cls[Bc].classObject===null){cls[Bc].classObject +=K1(cls);}return cls[Bc].classObject;},CH=()=>J,Fl=source=>{return Object.assign({name:null,binaryName:null,parent:null,superinterfaces:[],modifiers:0,primitiveKind:0,itemType:null,arrayType:null,enclosingClass:null,declaringClass:null,simpleName:null,clinit:()=>{},constructor:null,enumConstants:()=>null,resolvedEnumConstants:null,reflection:null,classObject:null,assignableCache:null,valueToObject:o=>o,objectToValue:o=>o},source||{});},Dl=(name,binaryName,kind,config)=>{let cls=()=>{};let meta=Fl({name:name, +binaryName:binaryName,modifiers:1|1<<4,primitiveKind:kind});cls[Bc]=meta;if(typeof config==='function'){config(meta);}return cls;},JO=Dl("byte","B",2,meta=>{}),HC=Dl("char","C",4,meta=>{}),Gs=Dl("int","I",5,meta=>{}),N$=Dl("void","V",9),B1=(a,b)=>a===b?0:a>>16&0xFFFF;let al=a&0xFFFF;let bh=b>>>16&0xFFFF;let bl=b&0xFFFF;return al*bl+(ah*bl+al*bh<<16>>>0)|0;},EP=(a,b)=>(a>>>0)/(b>>>0)>>>0,RG=(a,b)=>(a>>>0)%(b>>>0)>>>0,Es=(a,b)=>{a>>>=0;b>>>=0;return ab?1: +0;},RN=BigInt(0),BM=val=>BigInt.asIntN(64,BigInt(val|0)),JK=(a,b)=>a>b,FW=(a,b)=>a<=b,Cv=(a,b)=>BigInt.asIntN(64,a+b),HU=(a,b)=>BigInt.asIntN(64,a -b),K=(cls,sz)=>{let data=new Array(sz);data.fill(null);return new (CG(cls))(data);},BJ=sz=>new Pn(new Uint16Array(sz)),I0=sz=>new Pf(new Int8Array(sz)),BC=sz=>new Iu(new Int32Array(sz)),HV=data=>{let buffer=new Int32Array(data.length);buffer.set(data);return new Iu(buffer);},CG=cls=>{let result=cls[Bc].arrayType;if(result===null){function JavaArray(data){(CH()).call(this);this.data +=data;}JavaArray.prototype=Object.create((CH()).prototype);JavaArray.prototype.type=cls;JavaArray.prototype.constructor=JavaArray;JavaArray.prototype.toString=function(){let str="[";for(let i=0;i0){str+=", ";}str+=this.data[i].toString();}str+="]";return str;};JavaArray.prototype.ix=function(){let dataCopy;if('slice' in this.data){dataCopy=this.data.slice();}else {dataCopy=new this.data.constructor(this.data.length);for(let i=0;i{P2();E4=new Array(strings.length);for(let i=0;iE4[index],Hh=(array,offset,count)=>{let result="";let limit=offset+count;for(let i=offset;istr===null?null:HS(str),D$=str=>str===null?null:str.eh,P2=()=>Ce(),Gd; +{Gd=str=>str;}let Di=(from,to)=>{if(from===to){return true;}let map=from[Bc].assignableCache;if(map===null){map=new Map();from[Bc].assignableCache=map;}let cachedResult=map.get(to);if(typeof cachedResult!=='undefined'){return cachedResult;}if(to[Bc].itemType!==null){let result=from[Bc].itemType!==null&&Di(from[Bc].itemType,to[Bc].itemType);map.set(to,result);return result;}let parent=from[Bc].parent;if(parent!==null&&parent!==from){if(Di(parent,to)){map.set(to,true);return true;}}let superinterfaces=from[Bc].superinterfaces;for +(let i=0;i{throw LG(ex);},Cw=Symbol("javaException"),LG=ex=>{if(!ex.$jsException){G0(ex);}return ex.$jsException;},G0=ex=>{let javaCause=R7(ex);let jsCause=javaCause!==null?javaCause.$jsException:void 0;let cause=typeof jsCause==="object"?{cause:jsCause}:void 0;let err=new B_("Java exception thrown",cause);if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(err);}err[Cw] +=ex;ex.$jsException=err;I7(err,ex);},I7=(err,ex)=>{if(typeof Kx==="function"&&err.stack){let stack=Kx(err.stack);let javaStack=K(KY(),stack.length);let elem;let noStack=false;for(let i=0;ie instanceof Error&&typeof e[Cw]==='object'?e[Cw]:null,BS=err=> +{let ex=err[Cw];if(!ex){ex=Oy(Bt("(JavaScript) "+err.toString()));err[Cw]=ex;ex.$jsException=err;I7(err,ex);}return ex;},Oy=message=>Rd(message),NK=t=>RV(t),R7=t=>R8(t),KY=()=>CH(),Pk=(className,methodName,fileName,lineNumber)=>{{return null;}},Lv=(e,stack)=>{},FY=null,LQ=data=>{let i=0;let packages=new Array(data.length);for(let j=0;j=0?packages[prefixIndex]:"";packages[j]=prefix+data[i++]+".";}FY=packages;},Ld=[],Cu=data=>{let packages=FY;let i +=0;while(i=0){m.name=packages[packageIndex]+m.name;}}m.binaryName="L"+m.name+";";let superclass=data[i++];m.parent=superclass!==0?superclass:null;m.superinterfaces=data[i++];if(m.parent){cls.prototype=Object.create(m.parent.prototype);}else {cls.prototype={};}cls.prototype.constructor=cls;m.modifiers=data[i++];m.primitiveKind +=0;let innerClassInfo=data[i++];if(innerClassInfo!==0){let enclosingClass=innerClassInfo[0];m.enclosingClass=enclosingClass!==0?enclosingClass:null;let declaringClass=innerClassInfo[1];m.declaringClass=declaringClass!==0?declaringClass:null;let simpleName=innerClassInfo[2];m.simpleName=simpleName!==0?simpleName:null;}let clinit=data[i++];m.clinit=clinit!==0?()=>{m.clinit=()=>{};clinit();}:()=>{};let virtualMethods=data[i++];if(virtualMethods!==0){for(let j=0;j{let result;try {result=runner();}catch(e){result=e;}if(typeof callback!=='undefined'){callback(result);}else if(result instanceof Error){throw result;}}; +function J(){this.$id$=0;} +let Co=a=>{return B9(Mw(a));},Mw=a=>{return a.constructor;},Is=a=>{let b,c,d,e,f,g,h,i;b=a;if(!b.$id$)b.$id$=OY();c=a.$id$;BN();if(!c)d=I(0);else{e=(((32-Hp(c)|0)+4|0)-1|0)/4|0;f=BJ(e);g=f.data;e=(e-1|0)*4|0;h=0;while(e>=0){i=h+1|0;g[h]=Fm((c>>>e|0)&15,16);e=e-4|0;h=i;}d=Dk(f);}b=new W;Y(b);T(T(b,I(1)),d);return X(b);},B$=L(0),DX=L(0),EY=L(0); +function Br(){J.call(this);this.fF=0;} +let N9=null,Gh=null,KS=null,Ce=()=>{Ce=B3(Br);MV();},GJ=(a,b)=>{Ce();a.eh=Hh(b.data,0,b.data.length);},Dk=a=>{let b=new Br();GJ(b,a);return b;},ML=(a,b)=>{a.eh=b;},HS=a=>{let b=new Br();ML(b,a);return b;},Jy=(a,b,c,d)=>{let e,f;Ce();e=b.data.length;if(c>=0&&d>=0&&d<=(e-c|0)){a.eh=Hh(b.data,c,d);return;}f=new Bo;Z(f);Q(f);},D3=(a,b,c)=>{let d=new Br();Jy(d,a,b,c);return d;},P=(a,b)=>{let c;if(b>=0&&b{return a.eh.length;},KN=(a,b)=>{let c;if(a.eh.length +!=b.er)return 0;c=0;while(c{let d,e,f;if((c+b.eh.length|0)>a.eh.length)return 0;d=0;while(d{if(a===b)return 1;return H6(a,b,0);},DH=(a,b,c)=>{let d,e,f,g;d=BR(0,c);if(b<65536){e=b&65535;while(true){if(d>=a.eh.length)return (-1);if(a.eh.charCodeAt(d)==e)break;d=d+1|0;}return d;}f=Ft(b);g=EH(b);while(true){if(d>=(a.eh.length-1|0))return (-1);if +(a.eh.charCodeAt(d)==f&&a.eh.charCodeAt((d+1|0))==g)break;d=d+1|0;}return d;},C0=(a,b,c)=>{let d,e,f,g;d=Bw(c,a.eh.length-1|0);if(b<65536){e=b&65535;while(true){if(d<0)return (-1);if(a.eh.charCodeAt(d)==e)break;d=d+(-1)|0;}return d;}f=Ft(b);g=EH(b);while(true){if(d<1)return (-1);if(a.eh.charCodeAt(d)==g){c=d-1|0;if(a.eh.charCodeAt(c)==f)break;}d=d+(-1)|0;}return c;},HW=(a,b)=>{return C0(a,b,a.eh.length-1|0);},FJ=(a,b,c)=>{let d,e,f;d=BR(0,c);e=a.eh.length-b.eh.length|0;a:while(true){if(d>e)return (-1);f=0;while +(true){if(f>=b.eh.length)break a;if(P(a,d+f|0)!=P(b,f))break;f=f+1|0;}d=d+1|0;}return d;},BW=(a,b,c)=>{let d,e,f;d=a.eh.length;e=B1(b,c);if(!e)return Gh;if(!b&&c==d)return a;if(b>=0&&e<=0&&c<=d)return HS(a.eh.substring(b,c));f=new CJ;Z(f);Q(f);},DV=(a,b)=>{return BW(a,b,a.eh.length);},Px=a=>{return a;},D4=a=>{let b,c,d,e;b=BJ(a.eh.length);c=b.data;d=0;e=c.length;while(d{Ce();return b===null?I(2):b.g();},Hg=b=>{let c;Ce();c=new W;Y(c);return X(BY(c,b));},C1=(a,b)=>{let c;if +(a===b)return 1;if(!(b instanceof Br))return 0;c=b;return a.eh!==c.eh?0:1;},MV=()=>{let b;N9=BJ(0);b=new Br;Ce();b.eh="";Gh=b;KS=new Hw;},Fk=L(); +function Dw(){Fk.call(this);this.ij=0;} +let Lb=null,Ea=null,BN=()=>{BN=B3(Dw);KR();},JL=(a,b)=>{BN();a.ij=b;},GU=a=>{let b=new Dw();JL(b,a);return b;},C7=b=>{BN();return (G7(OD(20),b,10)).g();},DN=(b,c)=>{BN();if(b!==null)return N5(b,0,b.eh.length,c);b=new BK;Bu(b,I(3));Q(b);},N5=(b,c,d,e)=>{let f,g,h,i,j,k,l,m;BN();if(c==d){b=new BK;Bu(b,I(4));Q(b);}if(e>=2&&e<=36){a:{f=0;b=b;switch(P(b,c)){case 43:g=c+1|0;break a;case 45:f=1;g=c+1|0;break a;default:}g=c;}h=0;i=1+(2147483647/e|0)|0;if(g==d){b=new BK;Z(b);Q(b);}while(g=48 +&&k<=57?k-48|0:k>=97&&k<=122?(k-97|0)+10|0:k>=65&&k<=90?(k-65|0)+10|0:(-1);if(k<0){l=new BK;b=Df(BW(b,c,d));m=new W;Y(m);T(T(m,I(5)),b);Bu(l,X(m));Q(l);}if(k>=e){l=new BK;b=Df(BW(b,c,d));m=new W;Y(m);T(T(BY(T(m,I(6)),e),I(7)),b);Bu(l,X(m));Q(l);}if(h>i){b=new BK;Bu(b,I(8));Q(b);}h=DF(e,h)+k|0;if(h<0){if(j==d&&h==(-2147483648)&&f)return (-2147483648);l=new BK;b=Df(BW(b,c,d));m=new W;Y(m);T(T(m,I(9)),b);Bu(l,X(m));Q(l);}g=j;}if(f)h= -h|0;return h;}b=new BK;l=new W;Y(l);BY(T(l,I(10)),e);Bu(b,X(l));Q(b);},RS=b=> +{BN();return DN(b,10);},Hp=b=>{let c,d;BN();if(!b)return 32;c=0;d=b>>>16|0;if(d)c=16;else d=b;b=d>>>8|0;if(!b)b=d;else c=c|8;d=b>>>4|0;if(!d)d=b;else c=c|4;b=d>>>2|0;if(!b)b=d;else c=c|2;if(b>>>1|0)c=c|1;return (32-c|0)-1|0;},DO=b=>{let c,d;BN();if(!b)return 32;c=0;d=b<<16;if(d)c=16;else d=b;b=d<<8;if(!b)b=d;else c=c|8;d=b<<4;if(!d)d=b;else c=c|4;b=d<<2;if(!b)b=d;else c=c|2;if(b<<1)c=c|1;return (32-c|0)-1|0;},KR=()=>{Lb=B9(Gs);}; +function Cl(){let a=this;J.call(a);a.eD=null;a.er=0;} +let Y=a=>{CX(a,16);},Sk=()=>{let a=new Cl();Y(a);return a;},CX=(a,b)=>{a.eD=BJ(b);},OD=a=>{let b=new Cl();CX(b,a);return b;},B4=(a,b)=>{return a.x(a.er,b);},Eh=(a,b,c)=>{let d,e,f,g;if(b>=0&&b<=a.er){if(c===null)c=I(2);else if(c.eh.length?0:1)return a;a.y(a.er+c.eh.length|0);d=a.er-1|0;while(d>=b){a.eD.data[d+c.eh.length|0]=a.eD.data[d];d=d+(-1)|0;}a.er=a.er+c.eh.length|0;e=0;while(e{return OZ(a,a.er,b,c);},OZ +=(a,b,c,d)=>{let e,f,g,h,i,j,k;e=1;if(c<0){e=0;c= -c|0;}a:{if(Es(c,d)<0){if(e)Cy(a,b,b+1|0);else{Cy(a,b,b+2|0);f=a.eD.data;g=b+1|0;f[b]=45;b=g;}a.eD.data[b]=Fm(c,d);}else{h=1;i=1;j=EP((-1),d);b:{while(true){k=DF(h,d);if(Es(k,c)>0){k=h;break b;}i=i+1|0;if(Es(k,j)>0)break;h=k;}}if(!e)i=i+1|0;Cy(a,b,b+i|0);if(e)e=b;else{f=a.eD.data;e=b+1|0;f[b]=45;}while(true){if(!k)break a;f=a.eD.data;b=e+1|0;f[e]=Fm(EP(c,k),d);c=RG(c,k);k=EP(k,d);e=b;}}}return a;},Bh=(a,b)=>{return a.B(a.er,b);},In=(a,b,c)=>{Cy(a,b,b+1|0);a.eD.data[b] +=c;return a;},EQ=(a,b)=>{let c,d,e,f,g;c=a.eD.data.length;if(c>=b)return;d=c>=1073741823?2147483647:BR(b,BR(c*2|0,5));e=a.eD.data;f=BJ(d);g=f.data;b=Bw(d,e.length);c=0;while(c{return D3(a.eD,0,a.er);},Er=(a,b)=>{let c;if(b>=0&&b{return a.D(a.er,b,c,d);},Gr=(a,b,c,d,e)=>{let f,g;if(d<=e&&e<=c.E()&&d>=0){Cy(a,b,(b+e|0)-d|0);while(d{return a.F(b,0,b.E());},HQ=(a,b,c,d)=>{return a.G(a.er,b,c,d);},GA=(a,b,c,d,e)=>{let f,g,h,i;Cy(a,b,b+e|0);f=e+d|0;while(d{return a.H(b,0,b.data.length);},Cy=(a,b,c)=>{let d,e,f,g;d=a.er;e=d-b|0;a.y((d+c|0)-b|0);f=e-1|0;while(f>=0){g=a.eD.data;g[c+f|0]=g[b+f|0];f=f+(-1)|0;}a.er=a.er+(c-b|0)|0;},EL=L(0),W=L(Cl),PB=a=>{Y(a);},L7=()=>{let a=new W();PB(a);return a;},T=(a,b)=>{let c,d;c=a.er;d=a;b=b===null?I(2):b.g();Eh(d,c, +b);return a;},Lf=(a,b)=>{B4(a,b);return a;},BY=(a,b)=>{G7(a,b,10);return a;},F$=(a,b)=>{Bh(a,b);return a;},N6=(a,b,c)=>{let d,e,f,g,h,i;if(b>=0){d=B1(b,c);if(d<=0){e=a.er;if(b<=e){if(d){if(c>e)c=e;f=e-c|0;a.er=e-(c-b|0)|0;e=0;while(e{let c,d,e,f;if(b>=0){c=a.er;if(b{let d;d=a;if(b<=c&&b>=0&&c<=d.er)return D3(d.eD, +b,c-b|0);d=new Bo;Z(d);Q(d);},QF=(a,b,c,d,e)=>{GA(a,b,c,d,e);return a;},JU=(a,b,c,d)=>{HQ(a,b,c,d);return a;},OI=(a,b,c,d,e)=>{Gr(a,b,c,d,e);return a;},RF=(a,b,c,d)=>{E3(a,b,c,d);return a;},MC=(a,b)=>{return Er(a,b);},C5=a=>{return a.er;},C9=a=>{return X(a);},Q6=(a,b)=>{EQ(a,b);},Kc=(a,b,c)=>{In(a,b,c);return a;},RA=(a,b,c)=>{Eh(a,b,c);return a;}; +function Ff(){let a=this;J.call(a);a.gw=null;a.iq=null;a.ht=0;a.hI=0;} +let Si=a=>{return a;},G5=a=>{G0(a);},RV=a=>{return a.gw;},R8=a=>{let b;b=a.iq;if(b===a)b=null;return b;},Cr=L(Ff),Bi=L(Cr),Z=a=>{G5(a);a.ht=1;a.hI=1;},Sf=()=>{let a=new Bi();Z(a);return a;},Bu=(a,b)=>{G5(a);a.ht=1;a.hI=1;a.gw=b;},Rd=a=>{let b=new Bi();Bu(b,a);return b;},CT=L(),Me=L(CT),KP=(a,b)=>{switch(a.primitiveKind){default:return K(a,b);}},LO=L(CT),GE=L(0),Jl=L(0),FU=L(0); +function GX(){let a=this;J.call(a);a.fP=0;a.eJ=null;a.gE=null;a.gW=null;} +let K1=b=>{let c;c=new GX;c.eJ=b;return c;},I6=a=>{let b,c,d,e,f;b=a.fP;if(!(b&1)){a.fP=b|1;c=a.eJ[Bc].name;d=c===null?null:Bt(c);if(d===null){e=a.eJ[Bc].itemType;if(e!==null){f=I6(B9(e));if(f!==null){if(e[Bc].itemType!==null){c=new W;Y(c);Bh(c,91);T(c,f);d=X(c);}else{c=new W;Y(c);Bh(T(T(c,I(11)),f),59);d=X(c);}}}}a.gE=d;}return a.gE;},Fh=a=>{let b,c,d,e;b=a.fP;if(!(b&2)){a.fP=b|2;c=a.eJ[Bc].simpleName;d=c===null?null:Bt(c);if(d===null){if(a.eJ[Bc].itemType!==null){c=Fh(B9(a.eJ[Bc].itemType));d=new W;Y(d);T(T(d, +c),I(12));d=X(d);}else{c=a.eJ[Bc].enclosingClass;if((c===null?null:B9(c))!==null)d=I(13);else{d=I6(a);e=HW(d,36);if(e==(-1)){b=HW(d,46);if(b!=(-1))d=DV(d,b+1|0);}else{d=DV(d,e+1|0);if(P(d,0)>=48&&P(d,0)<=57)d=I(13);}}}}a.gW=d;}return a.gW;},DI=a=>{return !a.eJ[Bc].primitiveKind?0:1;},Ek=a=>{let b;b=a.eJ[Bc].itemType;return b===null?null:B9(b);},I_=L(),Bx=()=>{Bx=B3(I_);Mx();},O0=b=>{Bx();},H0=(b,c,d,e,f,g,h)=>{let i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ba,bb,$$je;Bx();if(b!==null&&c!==null){if(f>=1&&g>=1){a:{b: +{try{i=FT(b,NZ(d));break a;}catch($$e){$$je=BS($$e);if($$je instanceof CB){j=$$je;break b;}else if($$je instanceof Bi){j=$$je;}else{throw $$e;}}return CR(I(14),Fh(Co(j)),Jr(j,I(15)),(-1));}k=j.gp;if(!(k!==null&&k.eh.length)){b=I(13);e=j.fv;if(e>=1){l=BJ(e);m=l.data;e=0;f=m.length;if(e>f){b=new Bs;Z(b);Q(b);}while(e1000)return CR(I(18),I(19),I(20),(-1));q=new W;Y(q);if(h===null)r=null;else{r=new DT;Y(r);}s=0;t=0;u=0;v=0;w=0;c:{try{d:{e:{while(G6(o)){x=BR(1,p);if(s>=f)break e;t=t+x|0;if(t>g)break e;Ec(q,C$(o));Ec(q,Dq(o));y=1;while(y<=p){Ec(q,Fq(o,y));Ec(q,Eu(o,y));y=y+1|0;}s=s+1|0;if(r!==null&&!w){z=Li(o,h);if(FW(Cv(HU(Cv(BM(I$(r)),BM(C$(o))),BM(u)),z),BM(67108864))){Gm(o,r,h);u=Dq(o);}else{Gy(r,c,u,C$(o),67108864);w=1;}}if(!e)break d;}break d;}v=1;}if(r!==null&&!w){if(FW(HU(Cv(BM(I$(r)), +BM(Dz(c))),BM(u)),BM(67108864)))GK(o,r);else{Gy(r,c,u,Dz(c),67108864);w=1;}}}catch($$e){$$je=BS($$e);if($$je instanceof Bi){j=$$je;break c;}else{throw $$e;}}ba=FX();B5(ba,I(21));B5(ba,I(22));ED(ba,p);FE(ba,v);ED(ba,s);Fo(ba.fO,q);if(r!==null){FE(ba,w);B5(ba,X(r));}return HX(ba);}n=h!==null?I(23):I(24);bb=h!==null?I(25):I(26);return CR(n,Fh(Co(j)),Jr(j,bb),(-1));}return CR(I(18),I(27),I(28),(-1));}return CR(I(29),I(30),I(31),(-1));},NZ=b=>{let c;Bx();c=0;if(b&1)c=2;if(b&2)c=c|8;if(b&4)c=c|32;if(!(!(b&8)&&!(b +&32)))c=c|64;if(b&16)c=c|4;if(b&64)c=c|1;return c;},Li=(b,c)=>{let d,e,f,g;Bx();d=RN;e=0;while(e=c.eh.length){b=new Bo;Z(b);Q(b);}d=Cv(d,BM(1));}else if(f!=36)d=Cv(d,BM(1));else{e=e+1|0;if(e>=c.eh.length){b=new Bs;Bu(b,I(13));Q(b);}g=Fc(P(c,e),10);if(g<0){b=new Bs;Bu(b,I(13));Q(b);}d=Cv(d,BM((Ep(b,g)).eh.length));}if(JK(d,BM(67108864)))return d;e=e+1|0;}return d;},Gy=(b,c,d,e,f)=>{let g,h;Bx();g=f-b.er|0;if(g>0&&dd&&BA(P(c,h-1|0))&&BI(P(c, +h)))h=h+(-1)|0;E3(b,c,d,h);return;}},CR=(b,c,d,e)=>{let f;Bx();f=FX();B5(f,I(21));B5(f,b);if(c===null)c=I(32);B5(f,c);if(d===null)d=I(13);B5(f,d);ED(f,e);return HX(f);},Jr=(b,c)=>{let d;Bx();d=b.gw;if(d!==null&&d.eh.length)c=d;return c;},Ec=(b,c)=>{let d;Bx();d=C7(c);b=BY(b,d.eh.length);Bh(b,58);B4(b,d);},D=()=>{Bx();return 1;},E=()=>{Bx();return "TeaVM java.util.regex 0.15.0";},F=()=>{let b,c,d,$$je;Bx();a:{try{b=Ha(RJ(I(33)),I(34));if(G6(b)&&C$(b)==1&&Dq(b)==3&&Fq(b,1)==1&&Eu(b,1)==2){c=QH();Gm(b,c,I(35));GK(b, +c);d=!KN(I(36),c)?2:0;break a;}d=1;break a;}catch($$e){$$je=BS($$e);if($$je instanceof Bi){d=3;break a;}else{throw $$e;}}}return d;},G=(b,c,d,e,f,g)=>{Bx();return D$(H0(Bt(b),Bt(c),d,e?1:0,f,g,null));},H=(b,c,d,e,f,g,h)=>{Bx();return D$(H0(Bt(b),Bt(c),e,f?1:0,g,h,Bt(d)));},Mx=()=>{return;},Pw=L(),Q1=L(),RT=L(),E7=L(0),Hw=L(),E9=L(),La=null,Eo=null,Fb=null,EB=null,EW=null,PL=null,Dt=null,Ds=null,Du=null,Dv=null,Bb=()=>{Bb=B3(E9);Mr();},HA=b=>{let c,d;Bb();c=new Br;d=BJ(1);d.data[0]=b;GJ(c,d);return c;},EM=b=> +{Bb();return b>=65536&&b<=1114111?1:0;},BA=b=>{Bb();return (b&64512)!=55296?0:1;},BI=b=>{Bb();return (b&64512)!=56320?0:1;},Dx=(b,c)=>{Bb();return BA(b)&&BI(c)?1:0;},Cm=(b,c)=>{Bb();return ((b&1023)<<10|c&1023)+65536|0;},Ft=b=>{Bb();return (55296|(b-65536|0)>>10&1023)&65535;},EH=b=>{Bb();return (56320|b&1023)&65535;},Cj=b=>{Bb();return CV(b)&65535;},CV=b=>{Bb();if(EB===null){if(Dt===null)Dt=Pq();EB=F6(Hx((Dt.value!==null?Bt(Dt.value):null)));}return Go(EB,b);},Ch=b=>{Bb();return Dh(b)&65535;},Dh=b=>{Bb();if +(Fb===null){if(Ds===null)Ds=KT();Fb=F6(Hx((Ds.value!==null?Bt(Ds.value):null)));}return Go(Fb,b);}; +let Go=(b,c)=>{let d,e,f,g,h,i;Bb();d=b.gJ.data;if(cg)break a;}else{h=h-1|0;if(h=0){h=h*2|0;if(h{let d,e,f,g,h,i,j,k,l,m;Bb();if(c>=2&&c<=36){if(Eo===null){if(Du===null)Du=Oa();d=(Du.value!==null?Bt(Du.value):null);e=JC(D4(d));f=DY(e);g=BC(f*2|0);h=g.data;i=0;j=0;k=0;l=0;while(l=i){k=(i+j|0)/2|0;l=k*2|0;f=B1(b,g[l]);if(f>0)i=k+1|0;else{if(f>=0){b=g[l+1|0];break a;}j=k-1|0;}}b=(-1);}if(b>=c)b=(-1);}else b=(-1);return b;},Fm=(b,c)=>{Bb();if(c>=2&&c<=36&&b>=0&&b{let c,d,e;Bb();if(!(b>=0&&b<=1114111?1:0)){c=new Bs;Z(c);Q(c);}if(b<65536){d=BJ(1);d.data[0]=b&65535;return d;}d=BJ(2);e=d.data;e[0]=Ft(b);e[1]=EH(b);return d;},DD +=b=>{Bb();return BB(b);},BB=b=>{let c,d,e,f,g;Bb();if(b>0&&b<=65535?1:0){c=b&65535;if(!BA(c)&&!BI(c)?0:1)return 19;}if(EW===null){if(Dv===null)Dv=Re();EW=RR((Dv.value!==null?Bt(Dv.value):null));}d=EW.data;e=0;c=d.length-1|0;while(e<=c){f=(e+c|0)/2|0;g=d[f];if(b>=g.gF)e=f+1|0;else{c=g.gY;if(b>=c)return g.g7.data[b-c|0];c=f-1|0;}}return 0;},HY=b=>{Bb();return Ho(b);},Ho=b=>{Bb();a:{switch(BB(b)){case 1:case 2:case 3:case 4:case 5:case 9:break;case 6:case 7:case 8:break a;default:break a;}return 1;}return 0;},C4 +=b=>{Bb();a:{if(!(b>=0&&b<=8)&&!(b>=14&&b<=27)){if(b<127)break a;if(b>159)break a;}return 1;}return BB(b)!=16?0:1;},JB=b=>{Bb();switch(BB(b)){case 12:case 13:case 14:break;default:return 0;}return 1;},HI=b=>{Bb();switch(b){case 9:case 10:case 11:case 12:case 13:case 28:case 29:case 30:case 31:break;case 160:case 8199:case 8239:return 0;default:return JB(b);}return 1;},Mr=()=>{La=B9(HC);PL=K(E9,128);},Pq=()=>{return {"value":"NY H#F#U 4%F#O #F#/ d%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #a1# #%# #%# #%# %%# #%# #%# #%# #%# #%# #%# #%# %%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #<+#%# #%# #%# \'.3#%# #%# #{1#%# #w1%%# %J\'#k1#o1#%# #w1#!3# #23#*3#%# \'23#:3# #>3#%# #%# #%# #N3#%# #N3# %%# #N3#%# #J3%%# #%# #R3#%# \'%# /)#%# #)#%# #)#%# #%# #%# #%# #%# #%# #%# #%# #%# %%# #%# #%# #%# #%# #%# #%# #%# #%# %)#%# #%# #8)#L%#%# #%# #%# #" ++"%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #a+# #%# #%# #%# #%# #%# #%# #%# #%# #%# /B45#%# #,/#645# %%# #P1#!\'#*\'#%# #%# #%# #%# #%# <-%# #%# \'%# 1&++ %_## #Z#)k%%g%% #F#W hA# 1%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# +]%# %%# #?#%# %a+\'N\'AF#b &#%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# 3%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #^#%# #%# #%# #%# #%# #%# #%# %%# #%# #%# #%# #%# #%# #%# #%" ++"# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# %*%p kB#oq-&# _?gejg#A1 a$#%# -mo%&# {-%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# 3,4/# #%# #%" ++"# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# 3C1 1C1 1C1 1C1 1C1 3C/ 1C1 QC1 1C1 1C1 1C%8\'%G# 7i\')G# 7C%D)\' 7C%u)%?# 7X+%P+%G# L-q*/# \'Pw/#8m/# -6## |bA G%# kC.#U !r*%&# &#%# #,05#qX\'#H.5# %%# #%# #%# #e25#D05#q25#m25# #%# %%# 1865%%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# " ++"#%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# 1%# #%# )%# (a=%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# G%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# y%%# #%# #%# #%# #%# #%# #%# \'%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #%# 5%# #%# #4Fd#%# #%# #%# #%# #%# )%# #<{p# %%# #%# \'%# #%# #%# #%# #%# #%# #%# #%# #%# #%# #P}p#}}p#m}p#D}p#P}p# #@yp#D{p#Lyp#Br#%# #%# #%" ++"# #%# #%# #%# #%# #%# #,%#L}p#LJd#%# #%# #$$r#%# #%# #%# #%# #%# #%# #%# #%# #P6r#}!rI )%# :GL#) i,5F#U TUg#r {%g#r >\'c#p Lnk%F# .\'F#S HB#F#b o@5F#b F#2#W 4Z;%# /%# #%# %%# \'%# M%# #%# #%# #%# \'%# #%# #%# #%# #%# #%# #%# u.#N#f "};},KT=()=>{return {"value":"L[ ,%H#U :#>b# vH#O #H#/:+# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #,5# #\'# #\'# #\'# %\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# %\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# %\'# #\'# #\'#(;#N1# %\'# #\'# %\'# \'\'# +\'# %6)# \'\'#*/#N6r# %_+# %\'# #\'# #\'# %\'# )\'# %\'# \'\'# #\'# %\'# \'\'# #J%# +\'#+# #\'#+# #\'#+# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'#L\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# %\'#+# #\'# \'\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'#" ++" #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# \'\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# 1\'# %665% #\'# )\'# #\'# #\'# #\'# #\'#o25#c25#k25#03#}1# #y1% #m1# #q1#{}p# \'y1#k}p# #$3#!$r#:{p#N}p# #,3#43#N}p#*05#B}p# %43# #B05#<3# %@3# #{!r# ){!r#F.5# %P3# #J}p#P3# \'B{p#P3#$\'#L3%,\'# +T3# 5Jyp#>yp# Z\'_\'# x\'# #\'# \'\'\' #_+\' !#a##]#\' #H#CD##H#3m%#i%% #e%#P%# \'(%#D%#C# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'#i\'#P\'#=#(+# #4)# %\'# %\'# .#H#bP\'A #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# 3\'# #\'# #\'# #\'# #\'# #\'# " ++"#\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# %\'# #\'# #\'# #\'# #\'# #\'# #\'#`# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'% &#,%n mB#ko%x %ko%\' RAC1 >$#yu+#uu+#Pu+#Hu+%Lu+#0u+#io+#>@d# #\'- (+2Fd# \'oX\'# AJJd# N%\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #" ++"\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# +X%# +\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'# #\'#A1 1A1 1A1 1A1 1A1 3A# #A# #A# #A% /A1 16\'%g\')B)%V+%s)%N+)A1 1A1 1A1 1A% #E# 5B#H#b o@5H#b <#4#P# eV;\'# /\'# #\'# %\'# \'\'# M\'# #\'# #\'# #\'# \'\'# #\'# #\'# #\'# #\'# #\'# #\'# Z0#P#f "};},Oa=()=>{return {"value":"6G*% %%%%%%%%%%%%%%%%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=,#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%_H#T#%%%%%%%%%%%%%%%%%%s+G%%%%%%%%%%%%%%%%%%_1G%%%%%%%%%%%%%%%%%%{CG%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%6)G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%*\'G%%%%%%%%%%%%%%%%%%.9G%%%%%%%%%%%%%%%%%%*\'G%%%%%%%%%%%%%%%%%%!i#G" ++"%%%%%%%%%%%%%%%%%%c#G%%%%%%%%%%%%%%%%%%*;G%%%%%%%%%%%%%%%%%%Z+G%%%%%%%%%%%%%%%%%%:/G%%%%%%%%%%%%%%%%%%=G%%%%%%%%%%%%%%%%%%{/G%%%%%%%%%%%%%%%%%%k\'G%%%%%%%%%%%%%%%%%%s+G%%%%%%%%%%%%%%%%%%=G%%%%%%%%%%%%%%%%%%R@dG%%%%%%%%%%%%%%%%%%R[G%%%%%%%%%%%%%%%%%%c#G%%%%%%%%%%%%%%%%%%_1G%%%%%%%%%%%%%%%%%%!#G%%%%%%%%%%%%%%%%%%k\'G%%%%%%%%%%%%%%%%%%cCG%%%%%%%%%%%%%%%%%%o*IG%%%%%%%%%%%%%%%%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=,#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%c:#T#%%%%%%%%%%%%%%%%%%w&%G%%%%%" ++"%%%%%%%%%%%%%=G%%%%%%%%%%%%%%%%%%_fG%%%%%%%%%%%%%%%%%%Z+G%%%%%%%%%%%%%%%%%%_%G%%%%%%%%%%%%%%%%%%>-G%%%%%%%%%%%%%%%%%%.9G%%%%%%%%%%%%%%%%%%w=G%%%%%%%%%%%%%%%%%%2+G%%%%%%%%%%%%%%%%%%>AG%%%%%%%%%%%%%%%%%%N)G%%%%%%%%%%%%%%%%%%=G%%%%%%%%%%%%%%%%%%%G%%%%%%%%%%%%%%%%%%B\'G%%%%%%%%%%%%%%%%%%FEG%%%%%%%%%%%%%%%%%%N)G%%%%%%%%%%%%%%%%%%oYG%%%%%%%%%%%%%%%%%%k\'G%%%%%%%%%%%%%%%%%%g5G%%%%%%%%%%%%%%%%%%*\'G%%%%%%%%%%%%%%%%%%F%G%%%%%%%%%%%%%%%%%%Z?G%%%%%%%%%%%%%%%%%%ow?G%%%%%%%%%%%%%%%%%%s4%G%%%%%%%%%%%%%%%%%%k\'G%%%%%%%%%%%%%%" ++"%%%%s+G%%%%%%%%%%%%%%%%%%:OG%%%%%%%%%%%%%%%%%%c#G%%%%%%%%%%%%%%%%%%N&OG%%%%%%%%%%%%%%%%%%VZ%G%%%%%%%%%%%%%%%%%%%G%%%%%%%%%%%%%%%%%%%G%%%%%%%%%%%%%%%%%%%G%%%%%%%%%%%%%%%%%%%G%%%%%%%%%%%%%%%%%%!8%G%%%%%%%%%%%%%%%%%%FEG%%%%%%%%%%%%%%%%%%sKG%%%%%%%%%%%%%%%%%%k5G%%%%%%%%%%%%%%%%%%.lG%%%%%%%%%%%%%%%%%%wN)G%%%%%%%%%%%%%%%%%%"};},Re=()=>{return {"value":"PA-Y$;Y$679:95Y#J+Y#Z$Y#B;697<8:1=<=:L#<#Y#<,&?L$9B8:B(C9:C)!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!C#!#!#!#!#!#!#!#!C#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#B##!#!C$B##!#B##B$C#B%#B##B$C$B##B##!#!#B##!C#!#B##B$#!#B#C#&!C$F%!$#!$#!$#!#!#!#!#!#!#!#!C#!#!#!#!#!#!#!#!#!C#!$#!#B$#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!C(B##B#C#!#B%#!#!#!#!CgF#C;E3]%E-]/E&](%<%]2b\'Q! !#!#%?6_#?6>Y)./Q&-Y*>?Y%X#Y$:67Y,:98Y+-Q& Q+,%A#L\'Z$67%L+Z$67E2[FA,G." ++"H%\'H$G-A0^#!^%!^##B$C#B$#=!^#:B&^\'!=!=!=B%=#B%#F%#^#C#B#Z&!C%=:^##=L1KD!#K%,^#A%Z&^&Z#^%:^#:^#:^(:^@Z#^#:=:^@b:-% ^)6767^5Z#^(67b=2! :^?Z:^IZ\'^jA7^,A6L^^pL7b=X# :^*:^WZ)b=P! :b=Y$ 67676767676767L?^MZ&67Z@6767676767Z1b= % b:$# 6767676767676767676767Za6767ZA67b:#% ^QZ6^#Z\'^HA#b=+# BQCQ!#B$C#!#!#!#B%#!C#!C\'E#B$#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!C#^\'!#!#G$!#A&Y%,Y#CG #A&#A#FYA(%9A/\'F8A*F( F( F( F( F( F( F( F( GAY#>?>?Y$>?9>?Y*5Y#59>?Y#>?67676767Y&%Y" ++"+U#Y%596Y.^#Y$676767675A#Y#67A=^; b=:! A-b=7$ A;^1-Y$=%&+6767676767^#6767676756W#=K*G%I#5E&^#K$%&9^# b&7! A#G#]#E#&5b&;! 9E$&A&FL b&?! ^#L%^+FA^GA*=F1^@ L+^?L)=L0^AL+^HL0b= & b& H!^bb& %b&6)!%b&X2 A$^XA*FIE\'Y#b&-% %Y$F1J+F#A5!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#&\'H$9G+9%!#!#!#!#!#!#!#!#!#!#!#!#!#!#E#G#FhK+G#Y\'A)]8E*]#!#!#!#!#!#!#!C$!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#%C)!#!#B##!#!#!#!#%]#!#!#&!#!C$!#!#!#!#!#!#!#!#!#!#B&#B&#!#!#!#!#!#!#!#B%#!#B##!#!#!#!#!#!#!#B#A%!A/E%!#&" ++"E##F(\'F$\'F%\'F8I#G#)^%\'A$L\'^#;=A\'FUY%A)I#FSI1G#A)Y#J+A\'G3F\'Y$&9F#\'J+F=G)Y#F8G,I#A,9F>A$G$)FP\'I#G%I#G#I$Y. %J+A%Y#F&\'%F*J+F& FJG\'I#G#I#G#A*F$\'F)\')A#J+A#Y%F1%F\'^$&)\')FS\'&G$F#G#F&G#&\'&A9F#%Y#F,)G#I#Y#&E#)\'A+F\'A#F\'A#F\'A*F( F( CLA$FRA0\'LA#G$A%\'L*A(Y*A(F>L#9F>L$AAF)=F=G#A%L&Y(A*FWA$Y(F7A#L)F4A&L)F3A(Y%A-L(b 1! FkAXBTA.CTA(L\'FEG%A)J+A\'J+F%%&B7A$G&5%C7A)Z#b 1$ L@ FK G#5A#F#A1F$%F# ]#G&9^)F7 G1F>L+&A)F7G,L%Y&A7F3G%Y%AGF6L(A5F8A*)\')FVG0Y(A%L5J+\'F#G#&" ++"A*G$)FNI$G%I#G#Y#1Y%\'A+1A#F:A(J+A\'G$FEG&)G) J+Y%&I#&A)FD\'Y#&A*G#)FQI$G*I#F%Y%G%9)\'J+&9&Y$ L5A,F3 F:I$G$I#\')G#Y\'\'F#\'A`F( & F% F0 F+9A\'FP\'I$G)A&J+A\'G#I# F)A#F#A#F7 F( F# F& G#&I#\'I%A#I#A#I$A#&A\')A&F&I#A#G(A$G&A,F+ &A#& FG &I$G\' )A#) I% I#\')\'&\'&Y# Y#A)G#A>FVI$G)I#G$)\'F%Y&J+Y# 9\'F$A?FQI$G\')\'I%G#)G#F#9&A)J+b G# FPI$G%A#I%G#)G#Y8F%G#ACFQI$G)I#\')G#Y$&A,J+A\'Y.A4FL\')\'I#G\')\'&9A\'J+A\'J5A=FY!E% E( E# b&J% A*&A>F$A#&A/F&" ++"A(b&-\' b %E b&L! A&F.A$F*A(F+A#=G#9Q%b =_ b=Q$ J+^$A$b=U\' A\'^8 ^$A)Z$^1Z/A#GOA#G8A*b=U! A^b=W$ A+^HG#^^I#G$^$I\'Q)G)^#G(^?G%b=5# G$=A+I$^)G#^#)^AI#A`L5A-L5A-b=8! A*L:b (# B;C;B;C( C3B;C;! B#A#!A#B#A#B% B)C% # C( C,B;C;B# B%A#B) B( C;B# B% B& !A$B( C;B;C;B;C;B;C;B;C;B;C;B;C> B::C::C\'B::C::C\'B::C::C\'B::C::C\'B::C::C\'!#A#JSb= ) GX^%GS^)\'^/\'^#Y&A0G& G0b 1! Z>b D0 C+&CV!C(!#!C#!C$!C7!#!#!#!C$!#!#!#!#!#!#!#F#A/C(AWETG( G2A#G( G# G&A&E`AB\'b Q! FNA$G(E(A#J+A%&=b & F?\'A2FMG%J+A&;b 1( F<%G%J+b 7$ F?G#&J+A%9b $ F@ F$\'" ++"F#\'F(G#F&\'A)&%b A$ F( F% F# F0 b&&$ A#L*G(AJBCCCG(%A%J+A%Y#b 2- L]=L$;L%AnLN=L0b #$ F% F< F# &A#& F+ F% & &A\'&A%& & & F$ F# &A#& & & & & F# &A#F% F( F% F% & F+ F2A&F$ F& F2AUZ#b /% ^MA%b=E! A-^0A#^0 ^0 ^FA+L.b=C# AX^>A.^MA%^*A(^#A/^\'b ;# b=]$ ]&b=;, A#^2A$^.A$b==$ A%^-A%^=A%^YA)^+A\'^IA)^?A#^-A%^#A/Z*AHb=9& A)^/A#^.A$^i =A$^3 ^.A$^-A&b=4# b==! J+=b &1 b& %b& %b&A<#AAb&@%! b&/;!A#b&RU!A0b&O* b CG b&?) b C8 b&,.!A&b&K%#b %b %b \'O!b& R#b %b %b %b %b %b %b %b %b %b %b %b %b %b " ++"%b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b !0 1A?b1A! b # b\'Q$ b %b %b %b 1Y$b3 %b3 %b3 %b3`a$A#b3 %b3 %b3 %b3`a$"};},LX=L(),Rf=L(); +function HH(){let a=this;J.call(a);a.ei=null;a.eQ=0;a.gt=null;a.hb=0;a.fa=0;a.e1=0;a.ey=0;a.f2=null;a.fb=null;} +let Ha=(a,b)=>{let c,d,e,f,g,h,i,j,k;c=new FL;c.fI=(-1);c.f9=(-1);c.ir=a;c.gS=a.f2;c.fk=b;c.fI=0;d=b.eh.length;c.f9=d;e=new Jf;f=c.fI;g=a.fa;h=a.e1+1|0;i=a.ey+1|0;j=a.fb;e.fr=(-1);g=g+1|0;e.gz=g;e.eS=BC(g*2|0);e.ic=j;k=BC(i);e.fM=k;DS(k,(-1));if(h>0)e.gv=BC(h);DS(e.eS,(-1));IG(e,b,f,d);c.eI=e;e.e8=1;return c;},Fv=a=>{return a.ei.eE;},FT=(b,c)=>{let d,e,f,g,h,i,j;if(b===null){b=new Do;Bu(b,I(37));Q(b);}if(c&&(c|255)!=255){b=new Bs;Bu(b,I(13));Q(b);}Dc();CD=1;d=new HH;d.gt=K(By,10);d.fa=(-1);d.e1=(-1);d.ey=(-1);e +=new Hs;e.eY=1;e.eE=b;if((c&16)>0){f=new W;Y(f);B4(f,I(38));g=0;while(true){h=FJ(b,I(39),g);if(h<0)break;i=h+2|0;B4(f,BW(b,g,i));B4(f,I(40));g=i;}B4(f,DV(b,g));B4(f,I(39));b=X(f);}e.et=BJ(b.eh.length+2|0);G2(D4(b),0,e.et,0,b.eh.length);j=e.et.data;i=j.length;j[i-1|0]=0;j[i-2|0]=0;e.gK=i;e.fe=c;Cx(e);Cx(e);d.ei=e;d.eQ=c;d.f2=I3(d,(-1),c,null);if(!BQ(d.ei)){b=new CB;d=d.ei;DB(b,I(13),d.eE,d.eL);Q(b);}if(d.hb)d.f2.bP();b=d.fb;if(b===null){DA();d.fb=GL;}else{DA();e=new IF;e.ip=b;d.fb=e;}return d;},I3=(a,b,c,d)=> +{let e,f,g,h,i,j,k,l,m;e=HB();f=a.eQ;g=0;if(c!=f)a.eQ=c;a:{switch(b){case -1073741784:h=new IN;c=a.ey+1|0;a.ey=c;CE(h,c);break a;case -536870872:case -268435416:break;case -134217688:case -67108824:h=new FQ;c=a.ey+1|0;a.ey=c;CE(h,c);break a;case -33554392:h=new Gc;c=a.ey+1|0;a.ey=c;CE(h,c);break a;default:c=a.fa+1|0;a.fa=c;if(d===null){h=new Cz;CE(h,0);g=1;}else{h=RU(c);if(b==(-2130706392)){if(a.fb===null){i=new Hf;H7(i,16,0.75);i.g2=0;i.fN=null;a.fb=i;}i=a.fb;j=a.ei.hr;k=a.fa;BN();if(k>=(-128)&&k<=127){b:{if +(Ea===null){Ea=K(Dw,256);l=0;while(true){m=Ea.data;if(l>=m.length)break b;m[l]=GU(l-128|0);l=l+1|0;}}}d=Ea.data[k+128|0];}else d=GU(k);i.bR(j,d);}}k=a.fa;if(k<=(-1))break a;if(k>=10)break a;a.gt.data[k]=h;break a;}h=new IK;CE(h,(-1));}while(true){if(Cq(a.ei)&&a.ei.ej==(-536870788)){d=Hk(Bp(a,2),Bp(a,64));while(!BQ(a.ei)&&Cq(a.ei)){i=a.ei;k=i.ej;if(k&&k!=(-536870788)&&k!=(-536870871))break;Bv(d,V(i));i=a.ei;if(i.ev!=(-536870788))continue;V(i);}i=Fu(a,d);i.bY(h);}else if(a.ei.ev==(-536870788)){i=Cp(h);V(a.ei);} +else{i=IY(a,h);d=a.ei;if(d.ev==(-536870788))V(d);}if(i!==null)C2(e,i);if(BQ(a.ei))break;if(a.ei.ev==(-536870871))break;}if(a.ei.gb==(-536870788))C2(e,Cp(h));if(a.eQ!=f&&!g){a.eQ=f;d=a.ei;d.fe=f;d.ej=d.ev;d.e5=d.e0;g=d.eL;d.ek=g+1|0;d.fw=g;Cx(d);}switch(b){case -1073741784:break;case -536870872:d=new F4;Cn(d,e,h);return d;case -268435416:d=new Gx;Cn(d,e,h);return d;case -134217688:d=new HK;Cn(d,e,h);return d;case -67108824:d=new Hb;Cn(d,e,h);return d;case -33554392:d=new BZ;Cn(d,e,h);return d;default:switch(e.eC) +{case 0:break;case 1:return Ob(BT(e,0),h);default:return QX(e,h);}return Cp(h);}d=new D7;Cn(d,e,h);return d;},R4=a=>{let b,c,d,e,f,g,h;b=BC(4);c=(-1);d=(-1);if(!BQ(a.ei)&&Cq(a.ei)){e=b.data;c=V(a.ei);e[0]=c;d=c-4352|0;}if(d>=0&&d<19){e=BJ(3);b=e.data;b[0]=c&65535;f=a.ei;g=f.ev;h=g-4449|0;if(h>=0&&h<21){b[1]=g&65535;V(f);f=a.ei;g=f.ev;c=g-4519|0;if(c>=0&&c<28){b[2]=g&65535;V(f);return G$(e,3);}return G$(e,2);}if(!Bp(a,2))return Fx(b[0]);if(Bp(a,64))return IZ(b[0]);return Iz(b[0]);}e=b.data;c=1;while(c<4&&!BQ(a.ei) +&&Cq(a.ei)){h=c+1|0;e[c]=V(a.ei);c=h;}if(c==1){h=e[0];if(!(OH.b7(h)==J3?0:1))return IE(a,e[0]);}if(!Bp(a,2))return Ry(b,c);if(Bp(a,64)){f=new H9;ER(f,b,c);return f;}f=new Hy;ER(f,b,c);return f;},IY=(a,b)=>{let c,d,e,f,g,h,i;if(Cq(a.ei)&&!E1(a.ei)&&DM(a.ei.ej)){if(Bp(a,128)){c=R4(a);if(!BQ(a.ei)){d=a.ei;e=d.ev;if(!(e==(-536870871)&&!(b instanceof Cz))&&e!=(-536870788)&&!Cq(d))c=E8(a,b,c);}}else if(!HP(a.ei)&&!Ji(a.ei)){d=new DT;Y(d);while(!BQ(a.ei)&&Cq(a.ei)&&!HP(a.ei)&&!Ji(a.ei)){if(!(!E1(a.ei)&&!a.ei.ej)&& +!(!E1(a.ei)&&DM(a.ei.ej))){f=a.ei.ej;if(f!=(-536870871)&&(f&(-2147418113))!=(-2147483608)&&f!=(-536870788)&&f!=(-536870876))break;}e=V(a.ei);if(!EM(e))Bh(d,e&65535);else DR(d,CI(e));}if(!Bp(a,2)){c=new IA;BV(c);c.eG=X(d);e=d.er;c.eA=e;c.f6=Hc(e);c.f5=Hc(c.eA);g=0;while(g<(c.eA-1|0)){HR(c.f6,P(c.eG,g),(c.eA-g|0)-1|0);HR(c.f5,P(c.eG,(c.eA-g|0)-1|0),(c.eA-g|0)-1|0);g=g+1|0;}}else c=Bp(a,64)?Q8(d):Sc(d);}else c=E8(a,b,H8(a,b));}else{d=a.ei;if(d.ev!=(-536870871))c=E8(a,b,H8(a,b));else{if(b instanceof Cz)Q(Bl(I(13), +d.eE,d.eL));c=Cp(b);}}a:{if(!BQ(a.ei)){e=a.ei.ev;if(!(e==(-536870871)&&!(b instanceof Cz))&&e!=(-536870788)){h=IY(a,b);if(c instanceof BF&&!(c instanceof Ck)&&!(c instanceof BG)&&!(c instanceof Ci)){i=c;d=i;if(!h.ck(d.eo)){c=new GW;d=d.eo;i=i;Cc(c,d,i.eg,i.fC);c.eo.bY(c);}}if((h.cm()&65535)!=43)c.bY(h);else c.bY(h.eo);break a;}}if(c===null)return null;c.bY(b);}if((c.cm()&65535)!=43)return c;return c.eo;},E8=(a,b,c)=>{let d,e,f,g,h;d=a.ei;e=d.ev;if(c!==null&&!(c instanceof Bn)){switch(e){case -2147483606:V(d);d +=new JF;BP(d,c,b,e);Ct();c.bY(CW);return d;case -2147483605:V(d);d=new FG;BP(d,c,b,(-2147483606));Ct();c.bY(CW);return d;case -2147483585:V(d);d=new Jh;BP(d,c,b,(-536870849));Ct();c.bY(CW);return d;case -2147483525:f=new GG;d=CO(d);g=a.e1+1|0;a.e1=g;Dr(f,d,c,b,(-536870849),g);Ct();c.bY(CW);return f;case -1073741782:case -1073741781:V(d);d=new Iv;BP(d,c,b,e);c.bY(d);return d;case -1073741761:V(d);d=new G8;BP(d,c,b,(-536870849));c.bY(b);return d;case -1073741701:f=new IP;d=CO(d);e=a.e1+1|0;a.e1=e;Dr(f,d,c,b,(-536870849), +e);c.bY(f);return f;case -536870870:case -536870869:V(d);if(c.cm()!=(-2147483602)){d=new BG;BP(d,c,b,e);}else if(Bp(a,32)){d=new Iw;BP(d,c,b,e);}else{d=new H$;f=Fr(a.eQ);BP(d,c,b,e);d.ga=f;}c.bY(d);return d;case -536870849:V(d);d=new CN;BP(d,c,b,(-536870849));c.bY(b);return d;case -536870789:f=new Cf;d=CO(d);e=a.e1+1|0;a.e1=e;Dr(f,d,c,b,(-536870849),e);c.bY(f);return f;default:}return c;}h=null;if(c!==null)h=c;switch(e){case -2147483606:case -2147483605:V(d);d=new JH;Cc(d,h,b,e);h.eg=d;return d;case -2147483585:V(d);c +=new GN;Cc(c,h,b,(-2147483585));return c;case -2147483525:c=new IX;Fp(c,CO(d),h,b,(-2147483525));return c;case -1073741782:case -1073741781:V(d);d=new G4;Cc(d,h,b,e);h.eg=d;return d;case -1073741761:V(d);c=new HG;Cc(c,h,b,(-1073741761));return c;case -1073741701:c=new HL;Fp(c,CO(d),h,b,(-1073741701));return c;case -536870870:case -536870869:V(d);d=PI(h,b,e);h.eg=d;return d;case -536870849:V(d);c=new Ci;Cc(c,h,b,(-536870849));return c;case -536870789:return KA(CO(d),h,b,(-536870789));default:}return c;},H8=(a, +b)=>{let c,d,e,f,g,h,i,j;c=null;d=b instanceof Cz;while(true){a:{e=a.ei;f=e.ev;if((f&(-2147418113))==(-2147483608)){V(e);g=(f&16711680)>>16;f=f&(-16711681);if(f==(-16777176))a.eQ=g;else{if(f!=(-1073741784))g=a.eQ;c=I3(a,f,g,b);e=a.ei;if(e.ev!=(-536870871))Q(Bl(I(13),e.eE,e.eL));V(e);}}else{b:{c:{switch(f){case -2147483599:case -2147483598:case -2147483597:case -2147483596:case -2147483595:case -2147483594:case -2147483593:case -2147483592:case -2147483591:break c;case -2147483583:break;case -2147483582:V(e);c +=GR(0);break a;case -2147483577:V(e);c=new H1;Bm(c);break a;case -2147483558:V(e);c=new EO;h=a.ey+1|0;a.ey=h;Gu(c,h);break a;case -2147483550:V(e);c=GR(1);break a;case -2147483526:V(e);c=new Hi;Bm(c);break a;case -536870876:V(e);a.ey=a.ey+1|0;if(Bp(a,8)){if(Bp(a,1)){c=Oc(a.ey);break a;}c=Lw(a.ey);break a;}if(Bp(a,1)){c=JZ(a.ey);break a;}c=Kv(a.ey);break a;case -536870866:V(e);if(Bp(a,32)){c=Ov();break a;}c=Q0(Fr(a.eQ));break a;case -536870821:V(e);i=0;c=a.ei;if(c.ev==(-536870818)){i=1;V(c);}c=Fu(a,C3(a,i));c.bY(b);e +=a.ei;if(e.ev!=(-536870819))Q(Bl(I(13),e.eE,e.eL));IC(e,1);V(a.ei);break a;case -536870818:V(e);a.ey=a.ey+1|0;if(!Bp(a,8)){c=new EU;Bm(c);break a;}c=new GZ;e=Fr(a.eQ);Bm(c);c.gB=e;break a;case 0:j=e.e0;if(j!==null)c=Fu(a,j);else{if(BQ(e)){c=Cp(b);break a;}c=Fx(f&65535);}V(a.ei);break a;default:break b;}V(e);c=new EU;Bm(c);break a;}h=(f&2147483647)-48|0;if(a.fa=0&&!C_(e)) +{c=IE(a,f);V(a.ei);}else if(f==(-536870788))c=Cp(b);else{if(f!=(-536870871)){b=new CB;c=!C_(a.ei)?HA(f&65535):a.ei.e0.g();e=a.ei;DB(b,c,e.eE,e.eL);Q(b);}if(d){b=new CB;e=a.ei;DB(b,I(13),e.eE,e.eL);Q(b);}c=Cp(b);}}}if(f!=(-16777176))break;}return c;},C3=(a,b)=>{let c,d,e,f,g,h,i,j,$$je;c=Hk(Bp(a,2),Bp(a,64));Cb(c,b);d=(-1);e=0;f=0;g=1;a:{b:{c:while(true){if(BQ(a.ei))break a;h=a.ei;b=h.ev;f=b==(-536870819)&&!g?0:1;if(!f)break a;d:{switch(b){case -536870874:if(d>=0)Bv(c,d);d=V(a.ei);h=a.ei;if(h.ev!=(-536870874)) +{d=38;break d;}if(h.ej==(-536870821)){V(h);e=1;d=(-1);break d;}V(h);if(g){c=C3(a,0);break d;}if(a.ei.ev==(-536870819))break d;Hm(c,C3(a,0));break d;case -536870867:if(!g){b=h.ej;if(b!=(-536870819)&&b!=(-536870821)&&d>=0){V(h);h=a.ei;i=h.ev;if(C_(h))break c;if(i<0){j=a.ei.ej;if(j!=(-536870819)&&j!=(-536870821)&&d>=0)break c;}e:{try{if(DM(i))break e;i=i&65535;break e;}catch($$e){$$je=BS($$e);if($$je instanceof Cr){break b;}else{throw $$e;}}}try{Bk(c,d,i);}catch($$e){$$je=BS($$e);if($$je instanceof Cr){break b;} +else{throw $$e;}}V(a.ei);d=(-1);break d;}}if(d>=0)Bv(c,d);d=45;V(a.ei);break d;case -536870821:if(d>=0){Bv(c,d);d=(-1);}V(a.ei);j=0;h=a.ei;if(h.ev==(-536870818)){V(h);j=1;}if(!e)Kz(c,C3(a,j));else Hm(c,C3(a,j));e=0;V(a.ei);break d;case -536870819:if(d>=0)Bv(c,d);d=93;V(a.ei);break d;case -536870818:if(d>=0)Bv(c,d);d=94;V(a.ei);break d;case 0:if(d>=0)Bv(c,d);h=a.ei.e0;if(h===null)d=0;else{RC(c,h);d=(-1);}V(a.ei);break d;default:}if(d>=0)Bv(c,d);d=V(a.ei);}g=0;}Q(Bl(I(13),Fv(a),a.ei.eL));}Q(Bl(I(13),Fv(a),a.ei.eL));}if +(!f){if(d>=0)Bv(c,d);return c;}Q(Bl(I(13),Fv(a),a.ei.eL-1|0));},IE=(a,b)=>{let c,d,e;c=EM(b);if(Bp(a,2)){a:{if(!(b>=97&&b<=122)){if(b<65)break a;if(b>90)break a;}return Iz(b&65535);}if(Bp(a,64)&&b>128){if(c){d=new FR;BV(d);d.eA=2;d.gs=CV(Dh(b));return d;}if(Fj(b))return Hj(b&65535);if(!Ei(b))return IZ(b&65535);return H5(b&65535);}}if(!c){if(Fj(b))return Hj(b&65535);if(!Ei(b))return Fx(b&65535);return H5(b&65535);}d=new B7;BV(d);d.eA=2;d.fg=b;e=(CI(b)).data;d.fz=e[0];d.fp=e[1];return d;},Fu=(a,b)=>{let c,d,e;if +(!KM(b)){if(!b.eq){if(b.cJ())return Hu(b);return GS(b);}if(!b.cJ())return IS(b);c=new Em;E2(c,b);return c;}c=Nf(b);d=new Ga;Bm(d);d.gg=c;d.gH=c.ew;if(!b.eq){if(b.cJ())return EZ(Hu(DU(b)),d);return EZ(GS(DU(b)),d);}if(!b.cJ())return EZ(IS(DU(b)),d);c=new Ex;e=new Em;E2(e,DU(b));Iy(c,e,d);return c;},RJ=b=>{return FT(b,0);},Da=b=>{if(b>=97&&b<=122)b=(b-32|0)&65535;else if(b>=65&&b<=90)b=(b+32|0)&65535;return b;},Bp=(a,b)=>{return (a.eQ&b)!=b?0:1;},EC=L(0); +function FL(){let a=this;J.call(a);a.ir=null;a.gS=null;a.fk=null;a.eI=null;a.fI=0;a.f9=0;a.gl=0;a.ho=null;a.fV=null;a.e2=null;} +let Gm=(a,b,c)=>{let d,e;a.fV=OB(a,c);c=a.fk;d=a.gl;e=C$(a);Fo(b,BW(c,d,e));B4(b,a.fV);a.gl=Dq(a);return a;},OB=(a,b)=>{let c,d,e,f,g,h,i,j,k,l,$$je;c=a.ho;if(c!==null&&C1(c,b)){if(a.e2===null)return a.fV;d=new W;Y(d);e=0;while(true){b=a.e2;if(e>=b.eC)break;T(d,BT(b,e));e=e+1|0;}return X(d);}a.ho=b;f=D4(b);c=new W;Y(c);a.e2=null;g=0;h=0;i=0;a:{b:while(true){j=f.data;e=j.length;if(g>=e){b=a.e2;if(b!==null){k=c.er;if(h!=k)C2(b,Jb(c,h,k));}return X(c);}if(j[g]==92&&!i){i=1;g=g+1|0;}c:{if(i){if(g>=e)break b;Bh(c, +j[g]);i=0;}else if(j[g]!=36)Bh(c,j[g]);else{if(a.e2===null)a.e2=HB();d:{try{b=new Br;g=g+1|0;Jy(b,f,g,1);k=RS(b);if(h==C5(c))break d;C2(a.e2,Jb(c,h,C5(c)));h=C5(c);break d;}catch($$e){$$je=BS($$e);if($$je instanceof Cr){break a;}else{throw $$e;}}}try{C2(a.e2,J8(a,k));l=Ep(a,k);h=h+Dz(l)|0;Lf(c,l);break c;}catch($$e){$$je=BS($$e);if($$je instanceof Cr){break a;}else{throw $$e;}}}}g=g+1|0;}b=new Bo;Z(b);Q(b);}b=new Bs;Bu(b,I(13));Q(b);},GK=(a,b)=>{let c,d;c=a.fk;d=a.gl;c=c;Fo(b,BW(c,d,c.eh.length));return b;},Ep +=(a,b)=>{let c,d,e;c=a.eI;if(D9(c,b)<0)c=null;else{d=c.fS;e=D9(c,b);b=Fn(c,b);c=BW(d,e,b);}return c;},F5=(a,b)=>{let c,d,e;c=a.fk.eh.length;if(b>=0&&b<=c){IG(a.eI,null,(-1),(-1));d=a.eI;d.fE=1;d.eW=b;c=d.fr;if(c<0)c=b;d.fr=c;b=a.gS.cU(b,a.fk,d);if(b==(-1))a.eI.eP=1;if(b>=0){d=a.eI;if(d.fQ){e=d.eS.data;if(e[0]==(-1)){c=d.eW;e[0]=c;e[1]=c;}d.fr=Ej(d);return 1;}}a.eI.eW=(-1);return 0;}d=new Bo;Bu(d,Hg(b));Q(d);},G6=a=>{let b,c,d;b=a.fk.eh.length;c=a.eI;if(!c.fG)b=a.f9;if(c.eW>=0&&c.fE==1){c.eW=Ej(c);if(Ej(a.eI) +==D9(a.eI,0)){c=a.eI;c.eW=c.eW+1|0;}d=a.eI.eW;return d<=b&&F5(a,d)?1:0;}return F5(a,a.fI);},Fq=(a,b)=>{return D9(a.eI,b);},Eu=(a,b)=>{return Fn(a.eI,b);},C$=a=>{return Fq(a,0);},Dq=a=>{return Eu(a,0);},DT=L(Cl),NH=a=>{Y(a);},QH=()=>{let a=new DT();NH(a);return a;},LI=(a,b,c,d,e)=>{GA(a,b,c,d,e);return a;},OJ=(a,b,c,d)=>{HQ(a,b,c,d);return a;},Ms=(a,b,c,d,e)=>{Gr(a,b,c,d,e);return a;},Q7=(a,b,c,d)=>{E3(a,b,c,d);return a;},I$=a=>{return a.er;},PM=(a,b)=>{EQ(a,b);},Ly=(a,b,c)=>{In(a,b,c);return a;},K2=(a,b,c)=> +{Eh(a,b,c);return a;},Bo=L(Bi); +function Jf(){let a=this;J.call(a);a.eS=null;a.fM=null;a.gv=null;a.fS=null;a.gz=0;a.fQ=0;a.eK=0;a.el=0;a.eW=0;a.fG=0;a.e8=0;a.eP=0;a.hW=0;a.fr=0;a.fE=0;a.ic=null;} +let Bf=(a,b,c)=>{a.fM.data[b]=c;},BU=(a,b)=>{return a.fM.data[b];},Ej=a=>{return Fn(a,0);},Fn=(a,b)=>{IO(a,b);return a.eS.data[(b*2|0)+1|0];},B0=(a,b,c)=>{a.eS.data[b*2|0]=c;},ES=(a,b,c)=>{a.eS.data[(b*2|0)+1|0]=c;},CL=(a,b)=>{return a.eS.data[b*2|0];},D6=(a,b)=>{return a.eS.data[(b*2|0)+1|0];},D9=(a,b)=>{IO(a,b);return a.eS.data[b*2|0];},Gf=(a,b)=>{return a.gv.data[b];},Cd=(a,b,c)=>{a.gv.data[b]=c;},IO=(a,b)=>{let c;if(!a.fQ){c=new GI;Z(c);Q(c);}if(b>=0&&b{a.fQ=0;a.fE=2;DS(a.eS,(-1));DS(a.fM,(-1));if(b!==null)a.fS=b;if(c>=0){a.eK=c;a.el=d;}a.eW=a.eK;},Bs=L(Bi); +function CB(){let a=this;Bs.call(a);a.gp=null;a.f3=null;a.fv=0;} +let DB=(a,b,c,d)=>{Z(a);a.fv=(-1);a.gp=b;a.f3=c;a.fv=d;},Bl=(a,b,c)=>{let d=new CB();DB(d,a,b,c);return d;},OC=L(),Bw=(b,c)=>{if(b{if(b>c)c=b;return c;}; +function H2(){J.call(this);this.fO=null;} +let LC=a=>{let b;b=new W;Y(b);a.fO=b;},FX=()=>{let a=new H2();LC(a);return a;},B5=(a,b)=>{let c;c=BY(a.fO,b.eh.length);Bh(c,58);B4(c,b);},ED=(a,b)=>{B5(a,C7(b));},FE=(a,b)=>{B5(a,!b?I(0):I(21));},HX=a=>{return X(a.fO);},Do=L(Bi); +function Bd(){let a=this;J.call(a);a.eg=null;a.eH=0;a.fW=null;a.fC=0;} +let CD=0,Dc=()=>{Dc=B3(Bd);QK();},Bm=a=>{let b;Dc();b=CD;CD=b+1|0;a.fW=C7(b);},Je=(a,b)=>{let c;Dc();c=CD;CD=c+1|0;a.fW=C7(c);a.eg=b;},Dg=(a,b,c,d)=>{let e;e=d.el;while(true){if(b>e)return (-1);if(a.cY(b,c,d)>=0)break;b=b+1|0;}return b;},CY=(a,b,c,d,e)=>{while(true){if(c=0)break;c=c+(-1)|0;}return c;},So=(a,b)=>{a.fC=b;},Pg=a=>{return a.fC;},Lu=a=>{let b,c,d;b=a.fW;c=a.L();d=new W;Y(d);Bh(d,60);b=T(d,b);Bh(b,58);Bh(T(b,c),62);return X(d);},Rl=a=>{return Lu(a);},Sg=a=>{return a.eg;},MU +=(a,b)=>{a.eg=b;},MT=(a,b)=>{return 1;},PA=a=>{return null;},Dm=a=>{let b;a.eH=1;b=a.eg;if(b!==null){if(!b.eH){b=b.c0();if(b!==null){a.eg.eH=1;a.eg=b;}a.eg.bP();}else if(b instanceof CM&&b.eX.gr)a.eg=b.eg;}},QK=()=>{CD=1;},GF=L(0),DQ=L(0),CU=L(),I4=L(0),Ge=L(0); +function C6(){CU.call(this);this.eZ=0;} +let CS=L(0),EV=L(0); +function HD(){let a=this;C6.call(a);a.eU=null;a.eC=0;} +let L5=a=>{a.eU=K(J,10);},HB=()=>{let a=new HD();L5(a);return a;},G3=(a,b)=>{let c,d;c=a.eU.data.length;if(c=1073741823?2147483647:BR(b,BR(c*2|0,5));a.eU=H3(a.eU,d);}},BT=(a,b)=>{Gb(a,b);return a.eU.data[b];},C2=(a,b)=>{let c,d;G3(a,a.eC+1|0);c=a.eU.data;d=a.eC;a.eC=d+1|0;c[d]=b;a.eZ=a.eZ+1|0;return 1;},Gb=(a,b)=>{let c;if(b>=0&&b{a.hJ=b;a.ib=c;a.hy=c;},J8=(a,b)=>{let c=new Gv();Sa(c,a,b);return c;},R$=a=>{return Ep(a.hJ,a.hy);},PZ=L(Bi); +function By(){let a=this;Bd.call(a);a.gr=0;a.eT=0;} +let CW=null,Ct=()=>{Ct=B3(By);K7();},CE=(a,b)=>{Ct();Bm(a);a.eT=b;},RU=a=>{let b=new By();CE(b,a);return b;},Nn=(a,b,c,d)=>{let e,f;e=D6(d,a.eT);ES(d,a.eT,b);f=a.eg.cY(b,c,d);if(f<0)ES(d,a.eT,e);return f;},Sh=a=>{return a.eT;},NS=a=>{return I(41);},OM=(a,b)=>{return 0;},K7=()=>{let b;b=new HT;Bm(b);CW=b;}; +function Hs(){let a=this;J.call(a);a.et=null;a.fe=0;a.eY=0;a.g1=0;a.gb=0;a.ev=0;a.ej=0;a.hr=null;a.gK=0;a.e0=null;a.e5=null;a.ek=0;a.fx=0;a.eL=0;a.fw=0;a.eE=null;} +let K8=null,OH=null,J3=0,IC=(a,b)=>{if(b>0&&b<3)a.eY=b;if(b==1){a.ej=a.ev;a.e5=a.e0;a.ek=a.fw;a.fw=a.eL;Cx(a);}},C_=a=>{return a.e0===null?0:1;},E1=a=>{return a.e5===null?0:1;},V=a=>{Cx(a);return a.gb;},CO=a=>{let b;b=a.e0;Cx(a);return b;},Cx=a=>{let b,c,d,e,f,g,h,i,$$je;a.gb=a.ev;a.ev=a.ej;a.e0=a.e5;a.eL=a.fw;a.fw=a.ek;a:{while(true){b=0;c=a.ek>=a.et.data.length?0:Fs(a);a.ej=c;a.e5=null;if(a.eY==4){if(c!=92)return;c=a.ek;d=a.et.data;c=c>=d.length?0:d[Bg(a)];a.ej=c;switch(c){case 69:break;default:a.ej=92;a.ek +=a.fx;return;}a.eY=a.g1;a.ej=a.ek>(a.et.data.length-2|0)?0:Fs(a);}b:{c=a.ej;if(c==92){c=a.ek>=(a.et.data.length-2|0)?(-1):Fs(a);c:{a.ej=c;switch(c){case -1:Q(Bl(I(13),Ca(a),a.ek));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 19:case 20:case 21:case 22: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 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 118:break;case 48:a.ej +=Na(a);break b;case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:if(a.eY!=1)break b;a.ej=(-2147483648)|c;break b;case 65:a.ej=(-2147483583);break b;case 66:a.ej=(-2147483582);break b;case 67:case 69:case 70:case 72:case 73:case 74:case 75:case 76:case 77:case 78:case 79:case 82:case 84:case 85:case 86:case 88:case 89:case 103:case 104:case 105:case 106:case 107:case 108:case 109:case 111:case 113:case 121:Q(Bl(I(13),Ca(a),a.ek));case 68:case 83:case 87:case 100:case 115:case 119:a.e5=Ja(D3(a.et, +a.fx,1),0);a.ej=0;break b;case 71:a.ej=(-2147483577);break b;case 80:case 112:break c;case 81:a.g1=a.eY;a.eY=4;b=1;break b;case 90:a.ej=(-2147483558);break b;case 97:a.ej=7;break b;case 98:a.ej=(-2147483550);break b;case 99:c=a.ek;d=a.et.data;if(c>=(d.length-2|0))Q(Bl(I(13),Ca(a),a.ek));a.ej=d[Bg(a)]&31;break b;case 101:a.ej=27;break b;case 102:a.ej=12;break b;case 110:a.ej=10;break b;case 114:a.ej=13;break b;case 116:a.ej=9;break b;case 117:a.ej=FK(a,4);break b;case 120:a.ej=FK(a,2);break b;case 122:a.ej=(-2147483526);break b;default:}break b;}e +=L8(a);f=0;if(a.ej==80)f=1;try{a.e5=Ja(e,f);}catch($$e){$$je=BS($$e);if($$je instanceof Et){Q(Bl(I(13),Ca(a),a.ek));}else{throw $$e;}}a.ej=0;}else{g=a.eY;if(g==1)switch(c){case 36:a.ej=(-536870876);break b;case 40:if(a.et.data[a.ek]!=63){a.ej=(-2147483608);break b;}Bg(a);c=a.et.data[a.ek];g=0;h=null;while(true){d:{if(!g){switch(c){case 33:break;case 60:Bg(a);c=a.et.data[a.ek];g=1;break d;case 61:a.ej=(-536870872);Bg(a);break d;case 62:a.ej=(-33554392);Bg(a);break d;default:i=QQ(a);a.ej=i;if(i<256){a.fe=i;i= +i<<16;a.ej=i;a.ej=(-1073741784)|i;break d;}i=i&255;a.ej=i;a.fe=i;i=i<<16;a.ej=i;a.ej=(-16777176)|i;break d;}a.ej=(-268435416);Bg(a);}else{e:{switch(c){case 33:break;case 61:g=0;a.ej=(-134217688);Bg(a);break d;case 62:if(h===null)Q(Bl(I(13),Ca(a),a.ek));a.hr=C9(h);Bg(a);h=null;g=0;a.ej=(-2130706392);break d;default:break e;}g=0;a.ej=(-67108824);Bg(a);break d;}f:{if(!(c>=65&&c<=90)){if(c<97)break f;if(c>122)break f;}if(h===null)h=L7();F$(h,c);Bg(a);c=a.et.data[a.ek];break d;}if(c<48)break a;if(c>57)break a;if +(h===null)Q(Bl(I(42),Ca(a),a.ek));F$(h,c);Bg(a);c=a.et.data[a.ek];}}if(!g)break;}break b;case 41:a.ej=(-536870871);break b;case 42:case 43:case 63:g=a.ek;d=a.et.data;switch(g>=d.length?42:d[g]){case 43:a.ej=c|(-2147483648);Bg(a);break b;case 63:a.ej=c|(-1073741824);Bg(a);break b;default:}a.ej=c|(-536870912);break b;case 46:a.ej=(-536870866);break b;case 91:a.ej=(-536870821);IC(a,2);break b;case 93:if(g!=2)break b;a.ej=(-536870819);break b;case 94:a.ej=(-536870818);break b;case 123:a.e5=Ne(a,c);break b;case 124:a.ej +=(-536870788);break b;default:}else if(g==2)switch(c){case 38:a.ej=(-536870874);break b;case 45:a.ej=(-536870867);break b;case 91:a.ej=(-536870821);break b;case 93:a.ej=(-536870819);break b;case 94:a.ej=(-536870818);break b;default:}}}if(b)continue;else break;}return;}Q(Bl(I(13),Ca(a),a.ek));},L8=a=>{let b,c,d,e,f,g;b=new W;CX(b,10);c=a.ek;d=a.et;e=d.data;if(c<(e.length-2|0)){if(e[c]!=123){b=D3(d,Bg(a),1);f=new W;Y(f);T(T(f,I(43)),b);return X(f);}Bg(a);c=0;a:{while(true){g=a.ek;d=a.et.data;if(g>=(d.length-2 +|0))break;c=d[Bg(a)];if(c==125)break a;Bh(b,c);}}if(c!=125)Q(Bl(I(13),a.eE,a.ek));}if(!b.er)Q(Bl(I(13),a.eE,a.ek));f=X(b);if(f.eh.length==1){b=new W;Y(b);T(T(b,I(43)),f);return X(b);}b:{c:{if(f.eh.length>3){if(II(f,I(43)))break c;if(II(f,I(44)))break c;}break b;}f=DV(f,2);}return f;},Ne=(a,b)=>{let c,d,e,f,g,$$je;c=new W;CX(c,4);d=(-1);e=2147483647;a:{while(true){f=a.ek;g=a.et.data;if(f>=g.length)break a;b=g[Bg(a)];if(b==125)break a;if(b==44&&d<0)try{d=DN(C9(c),10);N6(c,0,C5(c));continue;}catch($$e){$$je=BS($$e);if +($$je instanceof BK){break;}else{throw $$e;}}Bh(c,b&65535);}Q(Bl(I(13),a.eE,a.ek));}if(b!=125)Q(Bl(I(13),a.eE,a.ek));if(c.er>0)b:{try{e=DN(C9(c),10);if(d>=0)break b;d=e;break b;}catch($$e){$$je=BS($$e);if($$je instanceof BK){Q(Bl(I(13),a.eE,a.ek));}else{throw $$e;}}}else if(d<0)Q(Bl(I(13),a.eE,a.ek));if((d|e|(e-d|0))<0)Q(Bl(I(13),a.eE,a.ek));b=a.ek;g=a.et.data;f=b>=g.length?42:g[b];c:{switch(f){case 43:a.ej=(-2147483525);Bg(a);break c;case 63:a.ej=(-1073741701);Bg(a);break c;default:}a.ej=(-536870789);}c=new Gt;c.e7 +=d;c.e4=e;return c;},Ca=a=>{return a.eE;},BQ=a=>{return !a.ev&&!a.ej&&a.ek==a.gK&&!C_(a)?1:0;},DM=b=>{return b<0?0:1;},Cq=a=>{return !BQ(a)&&!C_(a)&&DM(a.ev)?1:0;},HP=a=>{let b;b=a.ev;return b<=56319&&b>=55296?1:0;},Ji=a=>{let b;b=a.ev;return b<=57343&&b>=56320?1:0;},Ei=b=>{return b<=56319&&b>=55296?1:0;},Fj=b=>{return b<=57343&&b>=56320?1:0;},FK=(a,b)=>{let c,d,e,f,$$je;c=new W;CX(c,b);d=a.et.data.length-2|0;e=0;while(true){f=B1(e,b);if(f>=0)break;if(a.ek>=d)break;Bh(c,a.et.data[Bg(a)]);e=e+1|0;}if(!f)a:{try +{b=DN(C9(c),16);}catch($$e){$$je=BS($$e);if($$je instanceof BK){break a;}else{throw $$e;}}return b;}Q(Bl(I(13),a.eE,a.ek));},Na=a=>{let b,c,d,e,f,g;b=3;c=1;d=a.et.data;e=d.length-2|0;f=Fc(d[a.ek],8);switch(f){case -1:break;default:if(f>3)b=2;Bg(a);a:{while(true){if(c>=b)break a;g=a.ek;if(g>=e)break a;g=Fc(a.et.data[g],8);if(g<0)break;f=(f*8|0)+g|0;Bg(a);c=c+1|0;}}return f;}Q(Bl(I(13),a.eE,a.ek));},QQ=a=>{let b,c,d,e;b=1;c=a.fe;a:while(true){d=a.ek;e=a.et.data;if(d>=e.length)Q(Bl(I(13),a.eE,d));b:{c:{switch(e[d]) +{case 41:Bg(a);return c|256;case 45:if(!b)Q(Bl(I(13),a.eE,d));b=0;break b;case 58:break a;case 100:break c;case 105:c=b?c|2:(c^2)&c;break b;case 109:c=b?c|8:(c^8)&c;break b;case 115:c=b?c|32:(c^32)&c;break b;case 117:c=b?c|64:(c^64)&c;break b;case 120:c=b?c|4:(c^4)&c;break b;default:}break b;}c=b?c|1:(c^1)&c;}Bg(a);}Bg(a);return c;},Bg=a=>{let b,c,d,e,f;b=a.ek;a.fx=b;if(!(a.fe&4))a.ek=b+1|0;else{c=a.et.data.length-2|0;a.ek=b+1|0;a:while(true){d=a.ek;if(d=c)break;e=a.et.data;if(e[d]!=35)break;a.ek=d+1|0;while(true){f=a.ek;if(f>=c)continue a;b=e[f];if(b!=10&&b!=13&&b!=133&&(b|1)!=8233?0:1)continue a;a.ek=f+1|0;}}}return a.fx;},GV=b=>{return K8.df(b);},Fs=a=>{let b,c,d,e;b=a.et.data[Bg(a)];if(BA(b)){c=a.fx+1|0;d=a.et.data;if(c{return a.eL;},ND=L(),EK=(b,c)=>{let d,e,f,g;b=b.data;d=I0(c);e=d.data;f=Bw(c,b.length);g=0;while(g{let d,e,f,g;d +=Ek(Co(b));if(d===null){d=new Do;Z(d);Q(d);}if(d===B9(N$)){d=new Bs;Z(d);Q(d);}if(c<0){d=new JD;Z(d);Q(d);}b=b.data;e=KP(d.eJ,c);f=Bw(c,b.length);g=0;while(g{let f,g,h;if(c>d){f=new Bs;Z(f);Q(f);}while(c{Gi(b,0,b.data.length,c);},CJ=L(Bo),OL=L(),Se=(b,c,d,e,f)=>{let g,h,i,j,k,l,m,n;if(b!==null&&d!==null){if(c>=0&&e>=0&&f>=0&&(c+f|0)<=DZ(b)&&(e+f|0)<=DZ(d)){a:{b:{if(b!==d){g=Ek(Co(b));h=Ek(Co(d));if(g!==null&&h!== +null){if(g===h)break b;if(!DI(g)&&!DI(h)){i=b;j=0;k=c;while(j{if(c>=0&&e>=0&&f>=0&&(c+f|0)<=DZ(b)&&(e+f|0)<=DZ(d)){D8(b,c,d,e,f);return;}b=new Bo;Z(b);Q(b);},D8=(b,c,d,e,f)=> +{if(f!==0){if(typeof b.data.buffer!=='undefined'){d.data.set(b.data.subarray(c,c+f),e);}else if(b!==d||e{let e;e=a.eT;Bf(d,e,b-BU(d,e)|0);return a.eg.cY(b,c,d);},Ra=a=>{return I(46);},R5=(a,b)=>{return 0;},IK=L(By),QI=(a,b,c,d)=>{return b;},P0=a=>{return I(47);},FQ=L(By),O$=(a,b,c,d)=>{if(BU(d,a.eT)!=b)b=(-1);return b;},MD=a=>{return I(48);}; +function Gc(){By.call(this);this.g4=0;} +let L_=(a,b,c,d)=>{let e;e=a.eT;Bf(d,e,b-BU(d,e)|0);a.g4=b;return b;},KG=a=>{return I(49);},Or=(a,b)=>{return 0;},Cz=L(By),Nu=(a,b,c,d)=>{if(d.fE!=1&&b!=d.el)return (-1);d.fQ=1;ES(d,0,b);return b;},PN=a=>{return I(50);}; +function Bn(){Bd.call(this);this.eA=0;} +let BV=a=>{Bm(a);a.eA=1;},QV=(a,b,c,d)=>{let e;if((b+a.dq()|0)>d.el){d.eP=1;return (-1);}e=a.dr(b,c);if(e<0)return (-1);return a.eg.cY(b+e|0,c,d);},LB=a=>{return a.eA;},PS=(a,b)=>{return 1;},Gp=L(Bn),Lg=(a,b)=>{Je(a,b);a.eA=1;a.fC=1;a.eA=0;},Cp=a=>{let b=new Gp();Lg(b,a);return b;},Kl=(a,b,c)=>{return 0;},Ls=(a,b,c,d)=>{let e,f,g,h;e=d.el;f=d.eK;while(true){g=B1(b,e);if(g>0)return (-1);if(g<0){h=c;if(BI(P(h,b))&&b>f&&BA(P(h,b-1|0))){b=b+1|0;continue;}}if(a.eg.cY(b,c,d)>=0)break;b=b+1|0;}return b;},Qp=(a,b,c, +d,e)=>{let f,g,h;f=e.el;g=e.eK;while(true){if(cg&&BA(P(h,c-1|0))){c=c+(-1)|0;continue;}}if(a.eg.cY(c,d,e)>=0)break;c=c+(-1)|0;}return c;},NU=a=>{return I(51);},L3=(a,b)=>{return 0;}; +function Bj(){let a=this;Bd.call(a);a.eB=null;a.eX=null;a.es=0;} +let Cn=(a,b,c)=>{Bm(a);a.eB=b;a.eX=c;a.es=c.eT;},QX=(a,b)=>{let c=new Bj();Cn(c,a,b);return c;},MY=(a,b,c,d)=>{let e,f,g,h;if(a.eB===null)return (-1);e=CL(d,a.es);B0(d,a.es,b);f=a.eB.eC;g=0;while(true){if(g>=f){B0(d,a.es,e);return (-1);}h=(BT(a.eB,g)).cY(b,c,d);if(h>=0)break;g=g+1|0;}return h;},Oh=(a,b)=>{a.eX.eg=b;},P9=a=>{return I(52);},RY=(a,b)=>{let c,d,e,f;a:{c=a.eB;if(c!==null){c=c;d=new He;d.hp=c;d.hf=c.eZ;d.hk=c.eC;d.gO=(-1);d=d;while(true){e=d.hd;if(!(e>=d.hk?0:1))break a;f=d.hf;c=d.hp;if(f!=c.eZ){b +=new GY;Z(b);Q(b);}d.gO=e;d.hd=e+1|0;if(!(BT(c,e)).ck(b))continue;else break;}return 1;}}return 0;},Qe=(a,b)=>{return D6(b,a.es)>=0&&CL(b,a.es)==D6(b,a.es)?0:1;},Qk=a=>{let b,c,d,e,f,g,h,i,j;a.eH=1;b=a.eX;if(b!==null&&!b.eH)Dm(b);a:{b=a.eB;if(b!==null){c=b.eC;d=0;while(true){if(d>=c)break a;b=BT(a.eB,d);e=b.c0();if(e===null)e=b;else{b.eH=1;f=a.eB;Gb(f,d);g=f.eC-1|0;f.eC=g;h=d;while(hj)break;G3(f,j+1|0);h=f.eC;g +=h;while(g>d){i=f.eU.data;i[g]=i[g-1|0];g=g+(-1)|0;}f.eU.data[d]=e;f.eC=h+1|0;f.eZ=f.eZ+1|0;}if(!e.eH)e.bP();d=d+1|0;}b=new Bo;Z(b);Q(b);}}if(a.eg!==null)Dm(a);},D7=L(Bj),NF=(a,b,c,d)=>{let e,f,g,h;e=BU(d,a.es);Bf(d,a.es,b);f=a.eB.eC;g=0;while(true){if(g>=f){Bf(d,a.es,e);return (-1);}h=(BT(a.eB,g)).cY(b,c,d);if(h>=0)break;g=g+1|0;}return h;},J6=a=>{return I(53);},Q9=(a,b)=>{return !BU(b,a.es)?0:1;},BZ=L(D7),RX=(a,b,c,d)=>{let e,f,g;e=BU(d,a.es);Bf(d,a.es,b);f=a.eB.eC;g=0;while(g=0)return a.eg.cY(a.eX.g4,c,d);g=g+1|0;}Bf(d,a.es,e);return (-1);},Qm=(a,b)=>{a.eg=b;},LY=a=>{return I(53);},F4=L(BZ),N3=(a,b,c,d)=>{let e,f;e=a.eB.eC;f=0;while(f=0)return a.eg.cY(b,c,d);f=f+1|0;}return (-1);},M2=(a,b)=>{return 0;},Ps=a=>{return I(54);},Gx=L(BZ),Oz=(a,b,c,d)=>{let e,f;e=a.eB.eC;f=0;while(true){if(f>=e)return a.eg.cY(b,c,d);if((BT(a.eB,f)).cY(b,c,d)>=0)break;f=f+1|0;}return (-1);},LS=(a,b)=>{return 0;},MH=a=>{return I(55);},HK=L(BZ),Qb=(a,b,c,d)=>{let e,f,g,h;e +=a.eB.eC;f=d.fG?0:d.eK;a:{g=a.eg.cY(b,c,d);if(g>=0){Bf(d,a.es,b);h=0;while(true){if(h>=e)break a;if((BT(a.eB,h)).du(f,b,c,d)>=0){Bf(d,a.es,(-1));return g;}h=h+1|0;}}}return (-1);},RL=(a,b)=>{return 0;},M9=a=>{return I(56);},Hb=L(BZ),KH=(a,b,c,d)=>{let e,f;e=a.eB.eC;Bf(d,a.es,b);f=0;while(true){if(f>=e)return a.eg.cY(b,c,d);if((BT(a.eB,f)).du(0,b,c,d)>=0)break;f=f+1|0;}return (-1);},RD=(a,b)=>{return 0;},Pb=a=>{return I(57);}; +function CM(){Bj.call(this);this.eM=null;} +let Jd=(a,b,c)=>{Bm(a);a.eM=b;a.eX=c;a.es=c.eT;},Ob=(a,b)=>{let c=new CM();Jd(c,a,b);return c;},Lm=(a,b,c,d)=>{let e,f;e=CL(d,a.es);B0(d,a.es,b);f=a.eM.cY(b,c,d);if(f>=0)return f;B0(d,a.es,e);return (-1);},Kh=(a,b,c,d)=>{let e;e=a.eM.cU(b,c,d);if(e>=0)B0(d,a.es,e);return e;},Sd=(a,b,c,d,e)=>{let f;f=a.eM.du(b,c,d,e);if(f>=0)B0(e,a.es,f);return f;},Rz=(a,b)=>{return a.eM.ck(b);},Om=a=>{let b;b=new GD;Jd(b,a.eM,a.eX);a.eg=b;return b;},PG=a=>{let b;a.eH=1;b=a.eX;if(b!==null&&!b.eH)Dm(b);b=a.eM;if(b!==null&&!b.eH) +{b=b.c0();if(b!==null){a.eM.eH=1;a.eM=b;}a.eM.bP();}},En=L(0),Cs=L(),NI=(a,b,c)=>{b=new EA;Z(b);Q(b);}; +function D2(){let a=this;Cs.call(a);a.fu=0;a.e3=null;a.hA=0;a.hK=0.0;a.hu=0;} +let HO=b=>{let c;if(b>=1073741824)return 1073741824;if(!b)return 16;c=b-1|0;b=c|c>>1;b=b|b>>2;b=b|b>>4;b=b|b>>8;return (b|b>>16)+1|0;},H7=(a,b,c)=>{let d;if(b>=0&&c>0.0){b=HO(b);a.fu=0;a.e3=K(DG,b);a.hK=c;IJ(a);return;}d=new Bs;Z(d);Q(d);},Sr=(a,b)=>{let c=new D2();H7(c,a,b);return c;},IJ=a=>{a.hu=a.e3.data.length*a.hK|0;},G_=L(0); +function Hf(){let a=this;D2.call(a);a.g2=0;a.fN=null;a.fD=null;} +let NW=(a,b,c)=>{let d,e,f,g,h,i,j,k,l,m,n,o;d=a;e=d.fu;f=a.g2;if(!a.fu){a.fN=null;a.fD=null;}if(b===null)g=0;else{a:{h=b;if(!h.fF){i=0;while(true){if(i>=h.eh.length)break a;h.fF=(31*h.fF|0)+h.eh.charCodeAt(i)|0;i=i+1|0;}}}g=h.fF;}j=g&2147483647;k=a.e3.data;i=j%k.length|0;if(b===null){l=k[0];while(l!==null&&l.gx!==null){l=l.fB;}}else{l=k[i];while(l!==null){if(l.gc==g){h=l.gx;if(b!==h&&!C1(b,h)?0:1)break;}l=l.fB;}}l=l;if(l===null){a.hA=a.hA+1|0;f=a.fu+1|0;a.fu=f;if(f>a.hu){f=d.e3.data.length;f=HO(!f?1:f<<1);m +=K(DG,f);n=m.data;i=0;o=f-1|0;while(true){k=d.e3.data;if(i>=k.length)break;l=k[i];k[i]=null;while(l!==null){f=l.gc&o;h=l.fB;l.fB=n[f];n[f]=l;l=h;}i=i+1|0;}d.e3=m;IJ(d);i=j%a.e3.data.length|0;}h=new DG;l=null;h.gx=b;h.gf=l;h.gc=g;h.ff=null;h.fn=null;k=a.e3.data;h.fB=k[i];k[i]=h;b=a.fD;if(b===null)a.fN=h;else b.ff=h;h.fn=b;a.fD=h;l=h;}else if(f){b=l.ff;if(b!==null){h=l.fn;if(h===null)a.fN=b;else h.ff=b;b.fn=h;b=a.fD;if(b!==null)b.ff=l;l.fn=b;l.ff=null;a.fD=l;}}h=l.gf;l.gf=c;return h;},HF=L(),M5=null,GL=null,Kb +=null,JQ=null,Pi=null,Pc=null,DA=()=>{DA=B3(HF);LA();},LA=()=>{M5=new FF;GL=new FC;Kb=new FD;JQ=new FA;Pi=new FB;Pc=new Jj;},BK=L(Bs),L$=L(),DZ=b=>{let c;c=(Co(b)).eJ;if(c[Bc].itemType!==null)return Qn(b);b=new Bs;Z(b);Q(b);},DJ=L(Bi),C8=L(); +function R(){let a=this;C8.call(a);a.ew=0;a.eF=0;a.ep=null;a.fK=null;a.gj=null;a.eq=0;} +let J$=null,CK=()=>{CK=B3(R);Rg();},Ba=a=>{let b;CK();b=new EN;b.em=BC(64);a.ep=b;},OG=a=>{return null;},MJ=a=>{return a.ep;},KM=a=>{let b,c,d,e,f;if(!a.eF)b=Db(a.ep,0)>=2048?0:1;else{a:{c=a.ep;b=0;d=c.ex;if(b>>0|0;if(f)b=DO(f)+b|0;else{b=(d+31|0)/32|0;f=1;while(f=2048?0:1;}return b;},Sm=a=>{return a.eq;},Lo=a=>{return a;},Nf=a=>{let b,c;if(a.gj===null){b=a.dz();c=new GT;c.h5=a;c.hm=b;Ba(c);a.gj=c;Cb(c,a.eF);}return a.gj;},DU +=a=>{let b,c;if(a.fK===null){b=a.dz();c=new GP;c.il=a;c.gG=b;c.ha=a;Ba(c);a.fK=c;Cb(c,a.ew);a.fK.eq=a.eq;}return a.fK;},Pp=a=>{return 0;},Cb=(a,b)=>{let c;c=a.ew;if(c^b){a.ew=c?0:1;a.eF=a.eF?0:1;}if(!a.eq)a.eq=1;return a;},Sj=a=>{return a.ew;},Ez=(b,c)=>{CK();return b.dA(c);},DK=(b,c)=>{let d,e;CK();if(b.dB()!==null&&c.dB()!==null){b=b.dB();c=c.dB();d=Bw(b.em.data.length,c.em.data.length);e=0;a:{while(e{let d,e,f;CK();d +=0;while(true){Eb();e=HZ.data;if(d>=e.length){f=new Et;Bu(f,I(13));f.ie=I(13);f.h7=b;Q(f);}e=e[d].data;if(C1(b,e[0]))break;d=d+1|0;}return Rm(e[1],c);},Rg=()=>{let b;b=new EG;Eb();J$=b;}; +function Et(){let a=this;Bi.call(a);a.ie=null;a.h7=null;} +function Fg(){let a=this;R.call(a);a.f8=0;a.g3=0;a.fi=0;a.gq=0;a.eV=0;a.fc=0;a.en=null;a.ez=null;} +let Rc=a=>{Ba(a);a.en=Jw();},BE=()=>{let a=new Fg();Rc(a);return a;},QM=(a,b,c)=>{Ba(a);a.en=Jw();a.f8=b;a.g3=c;},Hk=(a,b)=>{let c=new Fg();QM(c,a,b);return c;},Bv=(a,b)=>{a:{if(a.f8){b:{if(!(b>=97&&b<=122)){if(b<65)break b;if(b>90)break b;}if(a.eV){Fw(a.en,Da(b&65535));break a;}Fe(a.en,Da(b&65535));break a;}if(a.g3&&b>128){a.fi=1;b=CV(Dh(b));}}}if(!(!Ei(b)&&!Fj(b))){if(a.gq)Fw(a.ep,b-55296|0);else Fe(a.ep,b-55296|0);}if(a.eV)Fw(a.en,b);else Fe(a.en,b);if(!a.eq&&EM(b))a.eq=1;return a;},RC=(a,b)=>{let c,d,e;if +(!a.eq&&b.eq)a.eq=1;if(a.gq){if(!b.eF)CP(a.ep,b.dz());else BL(a.ep,b.dz());}else if(!b.eF)CF(a.ep,b.dz());else{CQ(a.ep,b.dz());BL(a.ep,b.dz());a.eF=a.eF?0:1;a.gq=1;}if(!a.fc&&b.dB()!==null){if(a.eV){if(!b.ew)CP(a.en,b.dB());else BL(a.en,b.dB());}else if(!b.ew)CF(a.en,b.dB());else{CQ(a.en,b.dB());BL(a.en,b.dB());a.ew=a.ew?0:1;a.eV=1;}}else{c=a.ew;d=a.ez;if(d!==null){if(!c){e=new Im;e.im=a;e.hq=c;e.gU=d;e.gN=b;Ba(e);a.ez=e;}else{e=new Io;e.io=a;e.hO=c;e.hB=d;e.hl=b;Ba(e);a.ez=e;}}else{if(c&&!a.eV&&EX(a.en)){d +=new Ij;d.hY=a;d.hG=b;Ba(d);a.ez=d;}else if(!c){d=new Ih;d.gi=a;d.f0=c;d.hM=b;Ba(d);a.ez=d;}else{d=new Ii;d.gk=a;d.f_=c;d.gR=b;Ba(d);a.ez=d;}a.fc=1;}}return a;},Bk=(a,b,c)=>{let d,e,f,g,h;if(b>c){d=new Bs;Z(d);Q(d);}a:{b:{if(!a.f8){if(c<55296)break b;if(b>57343)break b;}c=c+1|0;while(true){if(b>=c)break a;Bv(a,b);b=b+1|0;}}if(!a.eV)DP(a.en,b,c+1|0);else{d=a.en;c=c+1|0;if(b>=0&&b<=c){e=d.ex;if(b{let c,d,e;if(!a.eq&&b.eq)a.eq=1;c=b;if(c.fi)a.fi=1;d=a.eF;if(!(d^b.eF)){if(!d)CF(a.ep,c.ep);else BL(a.ep,c.ep);}else if(d)CP(a.ep,c.ep);else{CQ(a.ep,c.ep);BL(a.ep,c.ep);a.eF=1;}if(!a.fc&&BD(c)!==null){d=a.ew;if(!(d^b.ew)){if(!d)CF(a.en,BD(c));else BL(a.en,BD(c));}else if(d)CP(a.en,BD(c));else{CQ(a.en,BD(c));BL(a.en,BD(c));a.ew=1;}}else{d=a.ew;e=a.ez;if(e!==null) +{if(!d){c=new Ic;c.h6=a;c.hF=d;c.gQ=e;c.hi=b;Ba(c);a.ez=c;}else{c=new I1;c.iu=a;c.hg=d;c.gL=e;c.g6=b;Ba(c);a.ez=c;}}else{if(!a.eV&&EX(a.en)){if(!d){e=new Ik;e.is=a;e.g_=b;Ba(e);a.ez=e;}else{e=new Il;e.hT=a;e.g9=b;Ba(e);a.ez=e;}}else if(!d){e=new Ip;e.hH=a;e.gD=b;e.hD=d;Ba(e);a.ez=e;}else{e=new Iq;e.gP=a;e.g8=b;e.hh=d;Ba(e);a.ez=e;}a.fc=1;}}},Hm=(a,b)=>{let c,d,e;if(!a.eq&&b.eq)a.eq=1;c=b;if(c.fi)a.fi=1;d=a.eF;if(!(d^b.eF)){if(!d)BL(a.ep,c.ep);else CF(a.ep,c.ep);}else if(!d)CP(a.ep,c.ep);else{CQ(a.ep,c.ep);BL(a.ep, +c.ep);a.eF=0;}if(!a.fc&&BD(c)!==null){d=a.ew;if(!(d^b.ew)){if(!d)BL(a.en,BD(c));else CF(a.en,BD(c));}else if(!d)CP(a.en,BD(c));else{CQ(a.en,BD(c));BL(a.en,BD(c));a.ew=0;}}else{d=a.ew;e=a.ez;if(e!==null){if(!d){c=new Ie;c.ik=a;c.hL=d;c.hj=e;c.hN=b;Ba(c);a.ez=c;}else{c=new If;c.hZ=a;c.hs=d;c.gI=e;c.hE=b;Ba(c);a.ez=c;}}else{if(!a.eV&&EX(a.en)){if(!d){e=new Ia;e.hV=a;e.gM=b;Ba(e);a.ez=e;}else{e=new Ib;e.ii=a;e.gT=b;Ba(e);a.ez=e;}}else if(!d){e=new Ig;e.hQ=a;e.hn=b;e.gZ=d;Ba(e);a.ez=e;}else{e=new H_;e.gV=a;e.hw= +b;e.hP=d;Ba(e);a.ez=e;}a.fc=1;}}},BH=(a,b)=>{let c;c=a.ez;if(c!==null)return a.ew^c.dA(b);return a.ew^BX(a.en,b);},BD=a=>{if(!a.fc)return a.en;return null;},K6=a=>{return a.ep;},Mp=a=>{let b,c;if(a.ez!==null)return a;b=BD(a);c=new Id;c.h2=a;c.fH=b;Ba(c);return Cb(c,a.ew);},Mi=a=>{let b,c,d;b=new W;Y(b);c=Db(a.en,0);while(c>=0){DR(b,CI(c));Bh(b,124);c=Db(a.en,c+1|0);}d=b.er;if(d>0)GB(b,d-1|0);return X(b);},LE=a=>{return a.fi;}; +function B6(){Bd.call(this);this.eo=null;} +let BP=(a,b,c,d)=>{Je(a,c);a.eo=b;a.fC=d;},Sp=a=>{return a.eo;},JM=(a,b)=>{return !a.eo.ck(b)&&!a.eg.ck(b)?0:1;},Ng=(a,b)=>{return 1;},K5=a=>{let b;a.eH=1;b=a.eg;if(b!==null&&!b.eH){b=b.c0();if(b!==null){a.eg.eH=1;a.eg=b;}a.eg.bP();}b=a.eo;if(b!==null){if(!b.eH){b=b.c0();if(b!==null){a.eo.eH=1;a.eo=b;}a.eo.bP();}else if(b instanceof CM&&b.eX.gr)a.eo=b.eg;}}; +function BF(){B6.call(this);this.eu=null;} +let Cc=(a,b,c,d)=>{BP(a,b,c,d);a.eu=b;},PI=(a,b,c)=>{let d=new BF();Cc(d,a,b,c);return d;},KJ=(a,b,c,d)=>{let e,f;e=0;a:{while((b+a.eu.dq()|0)<=d.el){f=a.eu.dr(b,c);if(f<=0)break a;b=b+f|0;e=e+1|0;}}while(true){if(e<0)return (-1);f=a.eg.cY(b,c,d);if(f>=0)break;b=b-a.eu.dq()|0;e=e+(-1)|0;}return f;},Qf=a=>{return I(58);}; +function Ck(){BF.call(this);this.fo=null;} +let Fp=(a,b,c,d,e)=>{Cc(a,c,d,e);a.fo=b;},KA=(a,b,c,d)=>{let e=new Ck();Fp(e,a,b,c,d);return e;},Nv=(a,b,c,d)=>{let e,f,g,h,i;e=a.fo;f=e.e7;g=e.e4;h=0;while(true){if(h>=f){a:{while(hd.el)break a;i=a.eu.dr(b,c);if(i<1)break a;b=b+i|0;h=h+1|0;}}while(true){if(h=0)break;b=b-a.eu.dq()|0;h=h+(-1)|0;}return i;}if((b+a.eu.dq()|0)>d.el){d.eP=1;return (-1);}i=a.eu.dr(b,c);if(i<1)break;b=b+i|0;h=h+1|0;}return (-1);},OK=a=>{return EE(a.fo);},BG=L(B6),Ll=(a,b, +c,d)=>{let e;if(!a.eo.dQ(d))return a.eg.cY(b,c,d);e=a.eo.cY(b,c,d);if(e>=0)return e;return a.eg.cY(b,c,d);},OP=a=>{return I(59);},Ci=L(BF),Kq=(a,b,c,d)=>{let e;e=a.eo.cY(b,c,d);if(e<0)e=a.eg.cY(b,c,d);return e;},R1=(a,b)=>{a.eg=b;a.eo.bY(b);},GW=L(BF),Qy=(a,b,c,d)=>{while((b+a.eu.dq()|0)<=d.el&&a.eu.dr(b,c)>0){b=b+a.eu.dq()|0;}return a.eg.cY(b,c,d);},L9=(a,b,c,d)=>{let e,f,g;e=a.eg.cU(b,c,d);if(e<0)return (-1);f=e-a.eu.dq()|0;while(f>=b&&a.eu.dr(f,c)>0){g=f-a.eu.dq()|0;e=f;f=g;}return e;}; +function IF(){Cs.call(this);this.ip=null;} +let EG=L(),Ew=null,E6=null,HZ=null,Eb=()=>{Eb=B3(EG);J_();},J_=()=>{let b,c,d,e;Ew=Lp();E6=QG();b=K(CG(J),194);c=b.data;d=K(J,2);e=d.data;e[0]=I(60);e[1]=Qr();c[0]=d;d=K(J,2);e=d.data;e[0]=I(61);e[1]=KX();c[1]=d;d=K(J,2);e=d.data;e[0]=I(62);e[1]=KW();c[2]=d;d=K(J,2);e=d.data;e[0]=I(63);e[1]=Nl();c[3]=d;d=K(J,2);e=d.data;e[0]=I(64);e[1]=E6;c[4]=d;d=K(J,2);e=d.data;e[0]=I(65);e[1]=Kn();c[5]=d;d=K(J,2);e=d.data;e[0]=I(66);e[1]=P7();c[6]=d;d=K(J,2);e=d.data;e[0]=I(67);e[1]=Nx();c[7]=d;d=K(J,2);e=d.data;e[0]=I(68);e[1] +=Mo();c[8]=d;d=K(J,2);e=d.data;e[0]=I(69);e[1]=Op();c[9]=d;d=K(J,2);e=d.data;e[0]=I(70);e[1]=K0();c[10]=d;d=K(J,2);e=d.data;e[0]=I(71);e[1]=NO();c[11]=d;d=K(J,2);e=d.data;e[0]=I(72);e[1]=Pz();c[12]=d;d=K(J,2);e=d.data;e[0]=I(73);e[1]=Kr();c[13]=d;d=K(J,2);e=d.data;e[0]=I(74);e[1]=Mz();c[14]=d;d=K(J,2);e=d.data;e[0]=I(75);e[1]=KF();c[15]=d;d=K(J,2);e=d.data;e[0]=I(76);e[1]=Kd();c[16]=d;d=K(J,2);e=d.data;e[0]=I(77);e[1]=Ky();c[17]=d;d=K(J,2);e=d.data;e[0]=I(78);e[1]=Ki();c[18]=d;d=K(J,2);e=d.data;e[0]=I(79);e[1] +=O_();c[19]=d;d=K(J,2);e=d.data;e[0]=I(80);e[1]=Ot();c[20]=d;d=K(J,2);e=d.data;e[0]=I(81);e[1]=QL();c[21]=d;d=K(J,2);e=d.data;e[0]=I(82);e[1]=Lz();c[22]=d;d=K(J,2);e=d.data;e[0]=I(83);e[1]=KL();c[23]=d;d=K(J,2);e=d.data;e[0]=I(84);e[1]=Kw();c[24]=d;d=K(J,2);e=d.data;e[0]=I(85);e[1]=NY();c[25]=d;d=K(J,2);e=d.data;e[0]=I(86);e[1]=OS();c[26]=d;d=K(J,2);e=d.data;e[0]=I(87);e[1]=QB();c[27]=d;d=K(J,2);e=d.data;e[0]=I(88);e[1]=Ew;c[28]=d;d=K(J,2);e=d.data;e[0]=I(89);e[1]=MN();c[29]=d;d=K(J,2);e=d.data;e[0]=I(90);e[1] +=Nz();c[30]=d;d=K(J,2);e=d.data;e[0]=I(91);e[1]=Ew;c[31]=d;d=K(J,2);e=d.data;e[0]=I(92);e[1]=JP();c[32]=d;d=K(J,2);e=d.data;e[0]=I(93);e[1]=E6;c[33]=d;d=K(J,2);e=d.data;e[0]=I(94);e[1]=ME();c[34]=d;d=K(J,2);e=d.data;e[0]=I(95);e[1]=N(0,127);c[35]=d;d=K(J,2);e=d.data;e[0]=I(96);e[1]=N(128,255);c[36]=d;d=K(J,2);e=d.data;e[0]=I(97);e[1]=N(256,383);c[37]=d;d=K(J,2);e=d.data;e[0]=I(98);e[1]=N(384,591);c[38]=d;d=K(J,2);e=d.data;e[0]=I(99);e[1]=N(592,687);c[39]=d;d=K(J,2);e=d.data;e[0]=I(100);e[1]=N(688,767);c[40] +=d;d=K(J,2);e=d.data;e[0]=I(101);e[1]=N(768,879);c[41]=d;d=K(J,2);e=d.data;e[0]=I(102);e[1]=N(880,1023);c[42]=d;d=K(J,2);e=d.data;e[0]=I(103);e[1]=N(1024,1279);c[43]=d;d=K(J,2);e=d.data;e[0]=I(104);e[1]=N(1280,1327);c[44]=d;d=K(J,2);e=d.data;e[0]=I(105);e[1]=N(1328,1423);c[45]=d;d=K(J,2);e=d.data;e[0]=I(106);e[1]=N(1424,1535);c[46]=d;d=K(J,2);e=d.data;e[0]=I(107);e[1]=N(1536,1791);c[47]=d;d=K(J,2);e=d.data;e[0]=I(108);e[1]=N(1792,1871);c[48]=d;d=K(J,2);e=d.data;e[0]=I(109);e[1]=N(1872,1919);c[49]=d;d=K(J,2);e +=d.data;e[0]=I(110);e[1]=N(1920,1983);c[50]=d;d=K(J,2);e=d.data;e[0]=I(111);e[1]=N(2304,2431);c[51]=d;d=K(J,2);e=d.data;e[0]=I(112);e[1]=N(2432,2559);c[52]=d;d=K(J,2);e=d.data;e[0]=I(113);e[1]=N(2560,2687);c[53]=d;d=K(J,2);e=d.data;e[0]=I(114);e[1]=N(2688,2815);c[54]=d;d=K(J,2);e=d.data;e[0]=I(115);e[1]=N(2816,2943);c[55]=d;d=K(J,2);e=d.data;e[0]=I(116);e[1]=N(2944,3071);c[56]=d;d=K(J,2);e=d.data;e[0]=I(117);e[1]=N(3072,3199);c[57]=d;d=K(J,2);e=d.data;e[0]=I(118);e[1]=N(3200,3327);c[58]=d;d=K(J,2);e=d.data;e[0] +=I(119);e[1]=N(3328,3455);c[59]=d;d=K(J,2);e=d.data;e[0]=I(120);e[1]=N(3456,3583);c[60]=d;d=K(J,2);e=d.data;e[0]=I(121);e[1]=N(3584,3711);c[61]=d;d=K(J,2);e=d.data;e[0]=I(122);e[1]=N(3712,3839);c[62]=d;d=K(J,2);e=d.data;e[0]=I(123);e[1]=N(3840,4095);c[63]=d;d=K(J,2);e=d.data;e[0]=I(124);e[1]=N(4096,4255);c[64]=d;d=K(J,2);e=d.data;e[0]=I(125);e[1]=N(4256,4351);c[65]=d;d=K(J,2);e=d.data;e[0]=I(126);e[1]=N(4352,4607);c[66]=d;d=K(J,2);e=d.data;e[0]=I(127);e[1]=N(4608,4991);c[67]=d;d=K(J,2);e=d.data;e[0]=I(128);e[1] +=N(4992,5023);c[68]=d;d=K(J,2);e=d.data;e[0]=I(129);e[1]=N(5024,5119);c[69]=d;d=K(J,2);e=d.data;e[0]=I(130);e[1]=N(5120,5759);c[70]=d;d=K(J,2);e=d.data;e[0]=I(131);e[1]=N(5760,5791);c[71]=d;d=K(J,2);e=d.data;e[0]=I(132);e[1]=N(5792,5887);c[72]=d;d=K(J,2);e=d.data;e[0]=I(133);e[1]=N(5888,5919);c[73]=d;d=K(J,2);e=d.data;e[0]=I(134);e[1]=N(5920,5951);c[74]=d;d=K(J,2);e=d.data;e[0]=I(135);e[1]=N(5952,5983);c[75]=d;d=K(J,2);e=d.data;e[0]=I(136);e[1]=N(5984,6015);c[76]=d;d=K(J,2);e=d.data;e[0]=I(137);e[1]=N(6016, +6143);c[77]=d;d=K(J,2);e=d.data;e[0]=I(138);e[1]=N(6144,6319);c[78]=d;d=K(J,2);e=d.data;e[0]=I(139);e[1]=N(6400,6479);c[79]=d;d=K(J,2);e=d.data;e[0]=I(140);e[1]=N(6480,6527);c[80]=d;d=K(J,2);e=d.data;e[0]=I(141);e[1]=N(6528,6623);c[81]=d;d=K(J,2);e=d.data;e[0]=I(142);e[1]=N(6624,6655);c[82]=d;d=K(J,2);e=d.data;e[0]=I(143);e[1]=N(6656,6687);c[83]=d;d=K(J,2);e=d.data;e[0]=I(144);e[1]=N(7424,7551);c[84]=d;d=K(J,2);e=d.data;e[0]=I(145);e[1]=N(7552,7615);c[85]=d;d=K(J,2);e=d.data;e[0]=I(146);e[1]=N(7616,7679);c[86] +=d;d=K(J,2);e=d.data;e[0]=I(147);e[1]=N(7680,7935);c[87]=d;d=K(J,2);e=d.data;e[0]=I(148);e[1]=N(7936,8191);c[88]=d;d=K(J,2);e=d.data;e[0]=I(149);e[1]=N(8192,8303);c[89]=d;d=K(J,2);e=d.data;e[0]=I(150);e[1]=N(8304,8351);c[90]=d;d=K(J,2);e=d.data;e[0]=I(151);e[1]=N(8352,8399);c[91]=d;d=K(J,2);e=d.data;e[0]=I(152);e[1]=N(8400,8447);c[92]=d;d=K(J,2);e=d.data;e[0]=I(153);e[1]=N(8448,8527);c[93]=d;d=K(J,2);e=d.data;e[0]=I(154);e[1]=N(8528,8591);c[94]=d;d=K(J,2);e=d.data;e[0]=I(155);e[1]=N(8592,8703);c[95]=d;d=K(J, +2);e=d.data;e[0]=I(156);e[1]=N(8704,8959);c[96]=d;d=K(J,2);e=d.data;e[0]=I(157);e[1]=N(8960,9215);c[97]=d;d=K(J,2);e=d.data;e[0]=I(158);e[1]=N(9216,9279);c[98]=d;d=K(J,2);e=d.data;e[0]=I(159);e[1]=N(9280,9311);c[99]=d;d=K(J,2);e=d.data;e[0]=I(160);e[1]=N(9312,9471);c[100]=d;d=K(J,2);e=d.data;e[0]=I(161);e[1]=N(9472,9599);c[101]=d;d=K(J,2);e=d.data;e[0]=I(162);e[1]=N(9600,9631);c[102]=d;d=K(J,2);e=d.data;e[0]=I(163);e[1]=N(9632,9727);c[103]=d;d=K(J,2);e=d.data;e[0]=I(164);e[1]=N(9728,9983);c[104]=d;d=K(J,2);e +=d.data;e[0]=I(165);e[1]=N(9984,10175);c[105]=d;d=K(J,2);e=d.data;e[0]=I(166);e[1]=N(10176,10223);c[106]=d;d=K(J,2);e=d.data;e[0]=I(167);e[1]=N(10224,10239);c[107]=d;d=K(J,2);e=d.data;e[0]=I(168);e[1]=N(10240,10495);c[108]=d;d=K(J,2);e=d.data;e[0]=I(169);e[1]=N(10496,10623);c[109]=d;d=K(J,2);e=d.data;e[0]=I(170);e[1]=N(10624,10751);c[110]=d;d=K(J,2);e=d.data;e[0]=I(171);e[1]=N(10752,11007);c[111]=d;d=K(J,2);e=d.data;e[0]=I(172);e[1]=N(11008,11263);c[112]=d;d=K(J,2);e=d.data;e[0]=I(173);e[1]=N(11264,11359);c[113] +=d;d=K(J,2);e=d.data;e[0]=I(174);e[1]=N(11392,11519);c[114]=d;d=K(J,2);e=d.data;e[0]=I(175);e[1]=N(11520,11567);c[115]=d;d=K(J,2);e=d.data;e[0]=I(176);e[1]=N(11568,11647);c[116]=d;d=K(J,2);e=d.data;e[0]=I(177);e[1]=N(11648,11743);c[117]=d;d=K(J,2);e=d.data;e[0]=I(178);e[1]=N(11776,11903);c[118]=d;d=K(J,2);e=d.data;e[0]=I(179);e[1]=N(11904,12031);c[119]=d;d=K(J,2);e=d.data;e[0]=I(180);e[1]=N(12032,12255);c[120]=d;d=K(J,2);e=d.data;e[0]=I(181);e[1]=N(12272,12287);c[121]=d;d=K(J,2);e=d.data;e[0]=I(182);e[1]=N(12288, +12351);c[122]=d;d=K(J,2);e=d.data;e[0]=I(183);e[1]=N(12352,12447);c[123]=d;d=K(J,2);e=d.data;e[0]=I(184);e[1]=N(12448,12543);c[124]=d;d=K(J,2);e=d.data;e[0]=I(185);e[1]=N(12544,12591);c[125]=d;d=K(J,2);e=d.data;e[0]=I(186);e[1]=N(12592,12687);c[126]=d;d=K(J,2);e=d.data;e[0]=I(187);e[1]=N(12688,12703);c[127]=d;d=K(J,2);e=d.data;e[0]=I(188);e[1]=N(12704,12735);c[128]=d;d=K(J,2);e=d.data;e[0]=I(189);e[1]=N(12736,12783);c[129]=d;d=K(J,2);e=d.data;e[0]=I(190);e[1]=N(12784,12799);c[130]=d;d=K(J,2);e=d.data;e[0]=I(191);e[1] +=N(12800,13055);c[131]=d;d=K(J,2);e=d.data;e[0]=I(192);e[1]=N(13056,13311);c[132]=d;d=K(J,2);e=d.data;e[0]=I(193);e[1]=N(13312,19893);c[133]=d;d=K(J,2);e=d.data;e[0]=I(194);e[1]=N(19904,19967);c[134]=d;d=K(J,2);e=d.data;e[0]=I(195);e[1]=N(19968,40959);c[135]=d;d=K(J,2);e=d.data;e[0]=I(196);e[1]=N(40960,42127);c[136]=d;d=K(J,2);e=d.data;e[0]=I(197);e[1]=N(42128,42191);c[137]=d;d=K(J,2);e=d.data;e[0]=I(198);e[1]=N(42752,42783);c[138]=d;d=K(J,2);e=d.data;e[0]=I(199);e[1]=N(43008,43055);c[139]=d;d=K(J,2);e=d.data;e[0] +=I(200);e[1]=N(44032,55203);c[140]=d;d=K(J,2);e=d.data;e[0]=I(201);e[1]=N(55296,56191);c[141]=d;d=K(J,2);e=d.data;e[0]=I(202);e[1]=N(56192,56319);c[142]=d;d=K(J,2);e=d.data;e[0]=I(203);e[1]=N(56320,57343);c[143]=d;d=K(J,2);e=d.data;e[0]=I(204);e[1]=N(57344,63743);c[144]=d;d=K(J,2);e=d.data;e[0]=I(205);e[1]=N(63744,64255);c[145]=d;d=K(J,2);e=d.data;e[0]=I(206);e[1]=N(64256,64335);c[146]=d;d=K(J,2);e=d.data;e[0]=I(207);e[1]=N(64336,65023);c[147]=d;d=K(J,2);e=d.data;e[0]=I(208);e[1]=N(65024,65039);c[148]=d;d=K(J, +2);e=d.data;e[0]=I(209);e[1]=N(65040,65055);c[149]=d;d=K(J,2);e=d.data;e[0]=I(210);e[1]=N(65056,65071);c[150]=d;d=K(J,2);e=d.data;e[0]=I(211);e[1]=N(65072,65103);c[151]=d;d=K(J,2);e=d.data;e[0]=I(212);e[1]=N(65104,65135);c[152]=d;d=K(J,2);e=d.data;e[0]=I(213);e[1]=N(65136,65279);c[153]=d;d=K(J,2);e=d.data;e[0]=I(214);e[1]=N(65280,65519);c[154]=d;d=K(J,2);e=d.data;e[0]=I(215);e[1]=N(0,1114111);c[155]=d;d=K(J,2);e=d.data;e[0]=I(216);e[1]=NT();c[156]=d;d=K(J,2);e=d.data;e[0]=I(217);e[1]=Be(0,1);c[157]=d;d=K(J, +2);e=d.data;e[0]=I(218);e[1]=CC(62,1);c[158]=d;d=K(J,2);e=d.data;e[0]=I(219);e[1]=Be(1,1);c[159]=d;d=K(J,2);e=d.data;e[0]=I(220);e[1]=Be(2,1);c[160]=d;d=K(J,2);e=d.data;e[0]=I(221);e[1]=Be(3,0);c[161]=d;d=K(J,2);e=d.data;e[0]=I(222);e[1]=Be(4,0);c[162]=d;d=K(J,2);e=d.data;e[0]=I(223);e[1]=Be(5,1);c[163]=d;d=K(J,2);e=d.data;e[0]=I(224);e[1]=CC(448,1);c[164]=d;d=K(J,2);e=d.data;e[0]=I(225);e[1]=Be(6,1);c[165]=d;d=K(J,2);e=d.data;e[0]=I(226);e[1]=Be(7,0);c[166]=d;d=K(J,2);e=d.data;e[0]=I(227);e[1]=Be(8,1);c[167] +=d;d=K(J,2);e=d.data;e[0]=I(228);e[1]=CC(3584,1);c[168]=d;d=K(J,2);e=d.data;e[0]=I(229);e[1]=Be(9,1);c[169]=d;d=K(J,2);e=d.data;e[0]=I(230);e[1]=Be(10,1);c[170]=d;d=K(J,2);e=d.data;e[0]=I(231);e[1]=Be(11,1);c[171]=d;d=K(J,2);e=d.data;e[0]=I(232);e[1]=CC(28672,0);c[172]=d;d=K(J,2);e=d.data;e[0]=I(233);e[1]=Be(12,0);c[173]=d;d=K(J,2);e=d.data;e[0]=I(234);e[1]=Be(13,0);c[174]=d;d=K(J,2);e=d.data;e[0]=I(235);e[1]=Be(14,0);c[175]=d;d=K(J,2);e=d.data;e[0]=I(236);e[1]=O7(983040,1,1);c[176]=d;d=K(J,2);e=d.data;e[0] +=I(237);e[1]=Be(15,0);c[177]=d;d=K(J,2);e=d.data;e[0]=I(238);e[1]=Be(16,1);c[178]=d;d=K(J,2);e=d.data;e[0]=I(239);e[1]=Be(18,1);c[179]=d;d=K(J,2);e=d.data;e[0]=I(240);e[1]=RP(19,0,1);c[180]=d;d=K(J,2);e=d.data;e[0]=I(241);e[1]=CC(1643118592,1);c[181]=d;d=K(J,2);e=d.data;e[0]=I(242);e[1]=Be(20,0);c[182]=d;d=K(J,2);e=d.data;e[0]=I(243);e[1]=Be(21,0);c[183]=d;d=K(J,2);e=d.data;e[0]=I(244);e[1]=Be(22,0);c[184]=d;d=K(J,2);e=d.data;e[0]=I(245);e[1]=Be(23,0);c[185]=d;d=K(J,2);e=d.data;e[0]=I(246);e[1]=Be(24,1);c[186] +=d;d=K(J,2);e=d.data;e[0]=I(247);e[1]=CC(2113929216,1);c[187]=d;d=K(J,2);e=d.data;e[0]=I(248);e[1]=Be(25,1);c[188]=d;d=K(J,2);e=d.data;e[0]=I(249);e[1]=Be(26,0);c[189]=d;d=K(J,2);e=d.data;e[0]=I(250);e[1]=Be(27,0);c[190]=d;d=K(J,2);e=d.data;e[0]=I(251);e[1]=Be(28,1);c[191]=d;d=K(J,2);e=d.data;e[0]=I(252);e[1]=Be(29,0);c[192]=d;d=K(J,2);e=d.data;e[0]=I(253);e[1]=Be(30,0);c[193]=d;HZ=b;}; +function U(){let a=this;J.call(a);a.gn=null;a.gh=null;} +let Rm=(a,b)=>{if(!b&&a.gn===null)a.gn=a.dT();else if(b&&a.gh===null)a.gh=Cb(a.dT(),1);if(b)return a.gh;return a.gn;}; +function Gt(){let a=this;C8.call(a);a.e7=0;a.e4=0;} +let EE=a=>{let b,c,d,e,f;b=a.e7;c=a.e4;d=c!=2147483647?C7(c):I(13);e=new W;Y(e);Bh(e,123);f=BY(e,b);Bh(f,44);Bh(T(f,d),125);return X(e);},HT=L(Bd),Qu=(a,b,c,d)=>{return b;},N0=a=>{return I(254);},Oe=(a,b)=>{return 0;}; +function EN(){let a=this;J.call(a);a.em=null;a.ex=0;} +let PR=a=>{a.em=BC(2);},Jw=()=>{let a=new EN();PR(a);return a;},Fe=(a,b)=>{let c,d,e;if(b<0){c=new Bo;Z(c);Q(c);}d=b/32|0;if(b>=a.ex){DW(a,d+1|0);a.ex=b+1|0;}e=a.em.data;e[d]=e[d]|1<<(b%32|0);},DP=(a,b,c)=>{let d,e,f,g,h;if(b>=0){d=B1(b,c);if(d<=0){if(!d)return;d=b/32|0;e=c/32|0;if(c>a.ex){DW(a,e+1|0);a.ex=c;}if(d==e){f=a.em.data;f[d]=f[d]|Dp(a,b)&Dy(a,c);}else{f=a.em.data;f[d]=f[d]|Dp(a,b);g=d+1|0;while(g{return (-1)<<(b%32|0);},Dy=(a,b)=>{b=b%32|0;return !b?0:(-1)>>>(32-b|0)|0;},Fw=(a,b)=>{let c,d,e,f,g,h;if(b<0){c=new Bo;Z(c);Q(c);}d=b/32|0;e=a.em.data;if(d>>(32-h|0)|0));if(b==(a.ex-1|0))CZ(a);}},BX=(a,b)=>{let c,d,e;if(b<0){c=new Bo;Z(c);Q(c);}d=b/32|0;e=a.em.data;return d{let c,d,e,f,g;if(b<0){c=new Bo;Z(c);Q(c);}d=a.ex;if(b>=d)return (-1);e=b/32|0;f=a.em.data;g=f[e]>>>(b%32|0)|0;if(g)return DO(g) ++b|0;d=(d+31|0)/32|0;g=e+1|0;while(g{let c,d,e,f;c=a.em.data.length;if(c>=b)return;c=BR((b*3|0)/2|0,(c*2|0)+1|0);d=a.em.data;e=BC(c);f=e.data;b=Bw(c,d.length);c=0;while(c{let b,c,d;b=(a.ex+31|0)/32|0;a.ex=b*32|0;c=b-1|0;a:{while(true){if(c<0)break a;d=Hp(a.em.data[c]);if(d<32)break;c=c+(-1)|0;a.ex=a.ex-32|0;}a.ex=a.ex-d|0;}},BL=(a,b)=>{let c,d,e,f;c=Bw(a.em.data.length,b.em.data.length);d=0;while(d< +c){e=a.em.data;e[d]=e[d]&b.em.data[d];d=d+1|0;}while(true){f=a.em.data;if(c>=f.length)break;f[c]=0;c=c+1|0;}a.ex=Bw(a.ex,b.ex);CZ(a);},CP=(a,b)=>{let c,d,e;c=Bw(a.em.data.length,b.em.data.length);d=0;while(d{let c,d,e;c=BR(a.ex,b.ex);a.ex=c;DW(a,(c+31|0)/32|0);c=Bw(a.em.data.length,b.em.data.length);d=0;while(d{let c,d,e;c=BR(a.ex,b.ex);a.ex=c;DW(a,(c+31|0)/32|0);c=Bw(a.em.data.length, +b.em.data.length);d=0;while(d{return a.ex?0:1;}; +function Ga(){let a=this;Bj.call(a);a.gg=null;a.gH=0;} +let OA=a=>{let b,c,d;b=!a.gH?I(255):I(256);c=a.gg.g();d=new W;Y(d);T(T(T(d,I(257)),b),c);return X(d);}; +function Ex(){let a=this;Bj.call(a);a.fJ=null;a.fL=null;} +let Iy=(a,b,c)=>{Bm(a);a.fJ=b;a.fL=c;},EZ=(a,b)=>{let c=new Ex();Iy(c,a,b);return c;},Nh=(a,b,c,d)=>{let e,f,g,h,i,j;e=a.fJ.cY(b,c,d);if(e<0)a:{f=a.fL;g=d.eK;e=d.el;h=b+1|0;e=B1(h,e);if(e>0){d.eP=1;e=(-1);}else{i=c;j=P(i,b);if(!f.gg.dA(j))e=(-1);else{if(BA(j)){if(e<0&&BI(P(i,h))){e=(-1);break a;}}else if(BI(j)&&b>g&&BA(P(i,b-1|0))){e=(-1);break a;}e=f.eg.cY(h,c,d);}}}if(e>=0)return e;return (-1);},NC=(a,b)=>{a.eg=b;a.fL.eg=b;a.fJ.bY(b);},Pl=a=>{let b,c,d;b=Df(a.fJ);c=Df(a.fL);d=new W;Y(d);T(T(T(T(d,I(258)), +b),I(259)),c);return X(d);},Pr=(a,b)=>{return 1;},OE=(a,b)=>{return 1;}; +function BO(){let a=this;Bj.call(a);a.eN=null;a.gA=0;} +let E2=(a,b)=>{Bm(a);a.eN=b.dU();a.gA=b.ew;},IS=a=>{let b=new BO();E2(b,a);return b;},KK=(a,b,c,d)=>{let e,f,g,h,i;e=d.el;if(b0)return i;}if(f{let b,c,d;b=!a.gA?I(255):I(256);c=a.eN.g();d=new W;Y(d);T(T(T(d,I(257)),b),c);return X(d);},L6=(a,b)=>{return a.eN.dA(b);},M1=(a,b)=>{if(b instanceof B7)return Ez(a.eN,b.fg);if(b instanceof B8)return Ez(a.eN,b.eO);if(b instanceof BO)return DK(a.eN, +b.eN);if(!(b instanceof B2))return 1;return DK(a.eN,b.e6);},Sn=a=>{return a.eN;},Lc=(a,b)=>{a.eg=b;},Lh=(a,b)=>{return 1;},Em=L(BO),PT=(a,b)=>{return a.eN.dA(CV(Dh(b)));},P6=a=>{let b,c,d;b=!a.gA?I(255):I(256);c=a.eN.g();d=new W;Y(d);T(T(T(d,I(260)),b),c);return X(d);}; +function It(){let a=this;Bn.call(a);a.go=null;a.he=0;} +let MO=(a,b)=>{BV(a);a.go=b.dU();a.he=b.ew;},Hu=a=>{let b=new It();MO(b,a);return b;},Qz=(a,b,c)=>{return !a.go.dA(Cj(Ch(P(c,b))))?(-1):1;},OT=a=>{let b,c,d;b=!a.he?I(255):I(256);c=a.go.g();d=new W;Y(d);T(T(T(d,I(260)),b),c);return X(d);}; +function B2(){let a=this;Bn.call(a);a.e6=null;a.g$=0;} +let Pv=(a,b)=>{BV(a);a.e6=b.dU();a.g$=b.ew;},GS=a=>{let b=new B2();Pv(b,a);return b;},Eg=(a,b,c)=>{return !a.e6.dA(P(c,b))?(-1):1;},QY=a=>{let b,c,d;b=!a.g$?I(255):I(256);c=a.e6.g();d=new W;Y(d);T(T(T(d,I(257)),b),c);return X(d);},Oj=(a,b)=>{if(b instanceof B8)return Ez(a.e6,b.eO);if(b instanceof B2)return DK(a.e6,b.e6);if(!(b instanceof BO)){if(!(b instanceof B7))return 1;return 0;}return DK(a.e6,b.eN);}; +function Fa(){let a=this;Bj.call(a);a.fm=null;a.fX=null;a.fR=0;} +let Lq=(a,b,c)=>{Bm(a);a.fm=b;a.fR=c;},G$=(a,b)=>{let c=new Fa();Lq(c,a,b);return c;},Ko=(a,b)=>{a.eg=b;},EF=a=>{if(a.fX===null)a.fX=Dk(a.fm);return a.fX;},RH=a=>{let b,c;b=EF(a);c=new W;Y(c);T(T(c,I(261)),b);return X(c);},Kp=(a,b,c,d)=>{let e,f,g,h,i,j,k,l,m,n,o,p,q;e=d.el;f=BC(3);g=(-1);h=(-1);if(b>=e)return (-1);i=b+1|0;j=c;k=P(j,b);l=k-44032|0;if(l>=0&&l<11172){m=4352+(l/588|0)|0;n=4449+((l%588|0)/28|0)|0;b=l%28|0;o=!b?HV([m,n]):HV([m,n,4519+b|0]);}else o=null;if(o!==null){p=o.data;l=0;b=p.length;q=a.fR;if +(b!=q)return (-1);while(true){if(l>=q)return a.eg.cY(i,c,d);if(p[l]!=a.fm.data[l])break;l=l+1|0;}return (-1);}f=f.data;f[0]=k;n=k-4352|0;if(n>=0&&n<19){if(i=0&&g<21){n=i+1|0;f[1]=k;if(n=0&&h<28){a:{b=n+1|0;f[2]=k;if(a.fR==3){n=f[0];p=a.fm.data;if(n==p[0]&&f[1]==p[1]&&f[2]==p[2]){b=a.eg.cY(b,c,d);break a;}}b=(-1);}return b;}b:{if(a.fR==2){q=f[0];p=a.fm.data;if(q==p[0]&&f[1]==p[1]){b=a.eg.cY(n,c,d);break b;}}b=(-1);}return b;}return (-1);}return (-1);},O5 +=(a,b)=>{return b instanceof Fa&&!C1(EF(b),EF(a))?0:1;},MG=(a,b)=>{return 1;}; +function B8(){Bn.call(this);this.eO=0;} +let PO=(a,b)=>{BV(a);a.eO=b;},Fx=a=>{let b=new B8();PO(b,a);return b;},P$=a=>{return 1;},Nk=(a,b,c)=>{return a.eO!=P(c,b)?(-1):1;},KE=(a,b,c,d)=>{let e,f,g,h;if(!(c instanceof Br))return Dg(a,b,c,d);e=c;f=d.el;while(true){if(b>=f)return (-1);g=DH(e,a.eO,b);if(g<0)return (-1);h=a.eg;b=g+1|0;if(h.cY(b,c,d)>=0)break;}return g;},Ql=(a,b,c,d,e)=>{let f,g;if(!(d instanceof Br))return CY(a,b,c,d,e);f=d;a:{while(true){if(c=0)break;c=g ++(-1)|0;}return g;}return (-1);},M8=a=>{let b,c;b=a.eO;c=new W;Y(c);Bh(c,b);return X(c);},Mg=(a,b)=>{if(b instanceof B8)return b.eO!=a.eO?0:1;if(!(b instanceof B2)){if(b instanceof BO)return b.dA(a.eO);if(!(b instanceof B7))return 1;return 0;}return Eg(b,0,HA(a.eO))<=0?0:1;}; +function HJ(){Bn.call(this);this.fY=0;} +let L4=(a,b)=>{BV(a);a.fY=Cj(Ch(b));},IZ=a=>{let b=new HJ();L4(b,a);return b;},J1=(a,b,c)=>{return a.fY!=Cj(Ch(P(c,b)))?(-1):1;},NA=a=>{let b,c;b=a.fY;c=new W;Y(c);Bh(T(c,I(262)),b);return X(c);}; +function F7(){let a=this;Bn.call(a);a.gm=0;a.hc=0;} +let Ro=(a,b)=>{BV(a);a.gm=b;a.hc=Da(b);},Iz=a=>{let b=new F7();Ro(b,a);return b;},K9=(a,b,c)=>{let d;d=a.gm;c=c;return d!=P(c,b)&&a.hc!=P(c,b)?(-1):1;},Of=a=>{let b,c;b=a.gm;c=new W;Y(c);Bh(T(c,I(263)),b);return X(c);}; +function Cg(){let a=this;Bj.call(a);a.ft=0;a.fZ=null;a.f7=null;a.fU=0;} +let ER=(a,b,c)=>{Bm(a);a.ft=1;a.f7=b;a.fU=c;},Ry=(a,b)=>{let c=new Cg();ER(c,a,b);return c;},PF=(a,b)=>{a.eg=b;},NE=(a,b,c,d)=>{let e,f,g,h,i,j,k,l;e=BC(4);f=d.el;if(b>=f)return (-1);g=E5(a,b,c,f);h=b+a.ft|0;i=GV(g);if(i===null){i=e.data;b=1;i[0]=g;}else{b=i.data.length;G2(i,0,e,0,b);b=0+b|0;}a:{if(h=f){b=k;break a;}g=E5(a,h,c,f);b=k;}}}if(b!=a.fU)return (-1);i=e.data;g=0;while(true){if(g>=b)return a.eg.cY(h,c,d);if(i[g]!=a.f7.data[g])break;g=g+1|0;}return (-1);},EJ=a=>{let b,c;if(a.fZ===null){b=new W;Y(b);c=0;while(c{let b,c;b=EJ(a);c=new W;Y(c);T(T(c,I(264)),b);return X(c);},E5=(a,b,c,d)=>{let e,f,g;a.ft=1;if(b>=(d-1|0))e=P(c,b);else{d=b+1|0;c=c;e=P(c,b);f=P(c,d);if(Dx(e,f)){g=BJ(2).data;g[0]=e;g[1]=f;d=g.length;if(0 +{return b instanceof Cg&&!C1(EJ(b),EJ(a))?0:1;},Qo=(a,b)=>{return 1;},H9=L(Cg),Hy=L(Cg),JF=L(BG),QU=(a,b,c,d)=>{let e;while(true){e=a.eo.cY(b,c,d);if(e<=0)break;b=e;}return a.eg.cY(b,c,d);},FG=L(BG),LD=(a,b,c,d)=>{let e;e=a.eo.cY(b,c,d);if(e<0)return (-1);if(e>b){while(true){b=a.eo.cY(e,c,d);if(b<=e)break;e=b;}b=e;}return a.eg.cY(b,c,d);},CN=L(BG),KU=(a,b,c,d)=>{let e;if(!a.eo.dQ(d))return a.eg.cY(b, +c,d);e=a.eo.cY(b,c,d);if(e>=0)return e;return a.eg.cY(b,c,d);},NM=(a,b)=>{a.eg=b;a.eo.bY(b);},Jh=L(CN),Qd=(a,b,c,d)=>{let e;e=a.eo.cY(b,c,d);if(e<=0)e=b;return a.eg.cY(e,c,d);},MB=(a,b)=>{a.eg=b;}; +function Cf(){let a=this;BG.call(a);a.e9=null;a.eR=0;} +let Dr=(a,b,c,d,e,f)=>{BP(a,c,d,e);a.e9=b;a.eR=f;},Sq=(a,b,c,d,e)=>{let f=new Cf();Dr(f,a,b,c,d,e);return f;},Rw=(a,b,c,d)=>{let e,f;e=Gf(d,a.eR);if(!a.eo.dQ(d))return a.eg.cY(b,c,d);if(e>=a.e9.e4)return a.eg.cY(b,c,d);f=a.eR;e=e+1|0;Cd(d,f,e);f=a.eo.cY(b,c,d);if(f>=0){Cd(d,a.eR,0);return f;}f=a.eR;e=e+(-1)|0;Cd(d,f,e);if(e>=a.e9.e7)return a.eg.cY(b,c,d);Cd(d,a.eR,0);return (-1);},N4=a=>{return EE(a.e9);},GG=L(Cf),OQ=(a,b,c,d)=>{let e,f,g;e=0;f=a.e9.e4;a:{while(true){g=a.eo.cY(b,c,d);if(g<=b)break a;if(e>=f)break;e +=e+1|0;b=g;}}if(g<0&&e{let e;if(!a.eo.dQ(d))return a.eg.cY(b,c,d);e=a.eg.cY(b,c,d);if(e>=0)return e;return a.eo.cY(b,c,d);},G8=L(CN),Pu=(a,b,c,d)=>{let e;if(!a.eo.dQ(d))return a.eg.cY(b,c,d);e=a.eg.cY(b,c,d);if(e<0)e=a.eo.cY(b,c,d);return e;},IP=L(Cf),Mk=(a,b,c,d)=>{let e,f,g;e=Gf(d,a.eR);if(!a.eo.dQ(d))return a.eg.cY(b,c,d);f=a.e9;if(e>=f.e4){Cd(d,a.eR,0);return a.eg.cY(b,c,d);}if(e=0){Cd(d,a.eR,0);return g;}Cd(d,a.eR,e+1|0);g=a.eo.cY(b,c,d);}return g;},Iw=L(B6),Q5=(a,b,c,d)=>{let e;e=d.el;if(e>b)return a.eg.du(b,e,c,d);return a.eg.cY(b,c,d);},Lr=(a,b,c,d)=>{let e;e=d.el;if(a.eg.du(b,e,c,d)>=0)return b;return (-1);},PD=a=>{return I(265);}; +function H$(){B6.call(this);this.ga=null;} +let Oo=(a,b,c,d)=>{let e,f;e=d.el;f=IV(a,b,e,c);if(f>=0)e=f;if(e>b)return a.eg.du(b,e,c,d);return a.eg.cY(b,c,d);},KC=(a,b,c,d)=>{let e,f,g,h;e=d.el;f=a.eg.cU(b,c,d);if(f<0)return (-1);g=IV(a,f,e,c);if(g>=0)e=g;g=BR(f,a.eg.du(f,e,c,d));if(g<=0)h=g?(-1):0;else{h=g-1|0;a:{while(true){if(h=b)b=h>=g?h:h+1|0;return b;},IV=(a,b,c,d)=>{while(true){if(b>=c)return (-1);if(a.ga.d7(P(d,b)))break;b=b+1|0;}return b;},R0=a=>{return I(266);},Dd=L(),IR=null,I2 +=null,Fr=b=>{let c;if(!(b&1)){c=I2;if(c!==null)return c;c=new Jo;I2=c;return c;}c=IR;if(c!==null)return c;c=new Jn;IR=c;return c;},JH=L(BF),Mu=(a,b,c,d)=>{let e;a:{while(true){if((b+a.eu.dq()|0)>d.el)break a;e=a.eu.dr(b,c);if(e<1)break;b=b+e|0;}}return a.eg.cY(b,c,d);},GN=L(Ci),Lt=(a,b,c,d)=>{let e;if((b+a.eu.dq()|0)<=d.el){e=a.eu.dr(b,c);if(e>=1)b=b+e|0;}return a.eg.cY(b,c,d);},IX=L(Ck),JR=(a,b,c,d)=>{let e,f,g,h,i;e=a.fo;f=e.e7;g=e.e4;h=0;while(true){if(h>=f){a:{while(true){if(h>=g)break a;if((b+a.eu.dq() +|0)>d.el)break a;i=a.eu.dr(b,c);if(i<1)break;b=b+i|0;h=h+1|0;}}return a.eg.cY(b,c,d);}if((b+a.eu.dq()|0)>d.el){d.eP=1;return (-1);}i=a.eu.dr(b,c);if(i<1)break;b=b+i|0;h=h+1|0;}return (-1);},G4=L(BF),N8=(a,b,c,d)=>{let e;while(true){e=a.eg.cY(b,c,d);if(e>=0)break;if((b+a.eu.dq()|0)<=d.el){e=a.eu.dr(b,c);b=b+e|0;}if(e<1)return (-1);}return e;},HG=L(Ci),MR=(a,b,c,d)=>{let e;e=a.eg.cY(b,c,d);if(e>=0)return e;return a.eo.cY(b,c,d);},HL=L(Ck),Ks=(a,b,c,d)=>{let e,f,g,h,i,j;e=a.fo;f=e.e7;g=e.e4;h=0;while(true){if(h +>=f){a:{while(true){i=a.eg.cY(b,c,d);if(i>=0)break;if((b+a.eu.dq()|0)<=d.el){i=a.eu.dr(b,c);b=b+i|0;h=h+1|0;}if(i<1)break a;if(h>g)break a;}return i;}return (-1);}if((b+a.eu.dq()|0)>d.el){d.eP=1;return (-1);}j=a.eu.dr(b,c);if(j<1)break;b=b+j|0;h=h+1|0;}return (-1);},EU=L(Bd),RK=(a,b,c,d)=>{if(b&&!(d.e8&&b==d.eK))return (-1);return a.eg.cY(b,c,d);},Ph=(a,b)=>{return 0;},Lx=a=>{return I(267);}; +function FM(){Bd.call(this);this.gX=0;} +let PX=(a,b)=>{Bm(a);a.gX=b;},GR=a=>{let b=new FM();PX(b,a);return b;},Ox=(a,b,c,d)=>{let e,f,g,h;e=b>=d.el?32:P(c,b);if(!b)f=32;else{g=b-1|0;f=P(c,g);}h=d.fG?0:d.eK;return (e!=32&&!Hd(a,e,b,h,c)?0:1)^(f!=32&&!Hd(a,f,b-1|0,h,c)?0:1)^a.gX?(-1):a.eg.cY(b,c,d);},OW=(a,b)=>{return 0;},Rp=a=>{return I(268);},Hd=(a,b,c,d,e)=>{let f;if(!HY(b)&&b!=95){a:{if(DD(b)==6)while(true){c=c+(-1)|0;if(c{if(b!=d.fr)return (-1);return a.eg.cY(b, +c,d);},Ri=(a,b)=>{return 0;},NL=a=>{return I(269);}; +function EO(){Bd.call(this);this.fh=0;} +let Gu=(a,b)=>{Bm(a);a.fh=b;},Kv=a=>{let b=new EO();Gu(b,a);return b;},P3=(a,b,c,d)=>{let e,f,g,h;e=d.e8?d.el:c.eh.length;if(b>=e){Bf(d,a.fh,0);return a.eg.cY(b,c,d);}f=e-b|0;if(f==2){g=c;if(P(g,b)==13&&P(g,b+1|0)==10){Bf(d,a.fh,0);return a.eg.cY(b,c,d);}}a:{if(f==1){h=P(c,b);if(h==10)break a;if(h==13)break a;if(h==133)break a;if((h|1)==8233)break a;}return (-1);}Bf(d,a.fh,0);return a.eg.cY(b,c,d);},Qw=(a,b)=>{let c;c=!BU(b,a.fh)?0:1;Bf(b,a.fh,(-1));return c;},KD=a=>{return I(270);},Hi=L(Bd),Nq=(a,b,c,d)=>{if +(b<(!d.fG?d.el:c.eh.length))return (-1);d.eP=1;d.hW=1;return a.eg.cY(b,c,d);},JX=(a,b)=>{return 0;},MX=a=>{return I(271);}; +function GZ(){Bd.call(this);this.gB=null;} +let Qg=(a,b,c,d)=>{let e,f,g;a:{if(b!=d.el){if(!b)break a;if(d.e8&&b==d.eK)break a;e=a.gB;f=b-1|0;g=c;if(e.d_(P(g,f),P(g,b)))break a;}return (-1);}return a.eg.cY(b,c,d);},Mt=(a,b)=>{return 0;},M_=a=>{return I(272);},G9=L(Bj),M6=a=>{Bm(a);},Ov=()=>{let a=new G9();M6(a);return a;},Qi=(a,b,c,d)=>{let e,f,g,h;e=d.el;f=b+1|0;if(f>e){d.eP=1;return (-1);}g=c;h=P(g,b);if(BA(h)){b=b+2|0;if(b<=e&&Dx(h,P(g,f)))return a.eg.cY(b,c,d);}return a.eg.cY(f,c,d);},Sb=a=>{return I(273);},O8=(a,b)=>{a.eg=b;},MQ=a=>{return (-2147483602);},O6 +=(a,b)=>{return 1;}; +function IH(){Bj.call(this);this.gy=null;} +let Qs=(a,b)=>{Bm(a);a.gy=b;},Q0=a=>{let b=new IH();Qs(b,a);return b;},Nd=(a,b,c,d)=>{let e,f,g,h,i;e=d.el;f=b+1|0;if(f>e){d.eP=1;return (-1);}g=c;h=P(g,b);if(BA(h)){b=b+2|0;if(b<=e){i=P(g,f);if(Dx(h,i))return a.gy.d7(Cm(h,i))?(-1):a.eg.cY(b,c,d);}}return a.gy.d7(h)?(-1):a.eg.cY(f,c,d);},QR=a=>{return I(274);},RW=(a,b)=>{a.eg=b;},JI=a=>{return (-2147483602);},QT=(a,b)=>{return 1;}; +function GO(){Bd.call(this);this.fA=0;} +let Mj=(a,b)=>{Bm(a);a.fA=b;},JZ=a=>{let b=new GO();Mj(b,a);return b;},QN=(a,b,c,d)=>{let e;e=d.e8?d.el:c.eh.length;if(b>=e){Bf(d,a.fA,0);return a.eg.cY(b,c,d);}if((e-b|0)==1&&P(c,b)==10){Bf(d,a.fA,1);return a.eg.cY(b+1|0,c,d);}return (-1);},Mf=(a,b)=>{let c;c=!BU(b,a.fA)?0:1;Bf(b,a.fA,(-1));return c;},JN=a=>{return I(270);}; +function Gg(){Bd.call(this);this.fs=0;} +let Ns=(a,b)=>{Bm(a);a.fs=b;},Oc=a=>{let b=new Gg();Ns(b,a);return b;},Nm=(a,b,c,d)=>{if((d.e8?d.el-b|0:c.eh.length-b|0)<=0){Bf(d,a.fs,0);return a.eg.cY(b,c,d);}if(P(c,b)!=10)return (-1);Bf(d,a.fs,1);return a.eg.cY(b+1|0,c,d);},LU=(a,b)=>{let c;c=!BU(b,a.fs)?0:1;Bf(b,a.fs,(-1));return c;},LV=a=>{return I(275);}; +function FZ(){Bd.call(this);this.e$=0;} +let RE=(a,b)=>{Bm(a);a.e$=b;},Lw=a=>{let b=new FZ();RE(b,a);return b;},O2=(a,b,c,d)=>{let e,f,g,h;e=d.e8?d.el-b|0:c.eh.length-b|0;if(!e){Bf(d,a.e$,0);return a.eg.cY(b,c,d);}if(e<2){f=P(c,b);g=97;}else{h=c;f=P(h,b);g=P(h,b+1|0);}switch(f){case 10:case 133:case 8232:case 8233:Bf(d,a.e$,0);return a.eg.cY(b,c,d);case 13:if(g!=10){Bf(d,a.e$,0);return a.eg.cY(b,c,d);}Bf(d,a.e$,0);return a.eg.cY(b,c,d);default:}return (-1);},QD=(a,b)=>{let c;c=!BU(b,a.e$)?0:1;Bf(b,a.e$,(-1));return c;},My=a=>{return I(276);}; +function CA(){let a=this;Bj.call(a);a.g0=0;a.fj=0;} +let Fi=(a,b,c)=>{Bm(a);a.g0=b;a.fj=c;},Qq=(a,b)=>{let c=new CA();Fi(c,a,b);return c;},MF=(a,b,c,d)=>{let e,f,g,h,i;e=De(a,d);if(e!==null&&(b+e.eh.length|0)<=d.el){f=0;while(true){if(f>=e.eh.length){Bf(d,a.fj,e.eh.length);return a.eg.cY(b+e.eh.length|0,c,d);}g=P(e,f);h=b+f|0;i=c;if(g!=P(i,h)&&Da(P(e,f))!=P(i,h))break;f=f+1|0;}return (-1);}return (-1);},Qj=(a,b)=>{a.eg=b;},De=(a,b)=>{let c,d;c=a.g0;d=CL(b,c);c=D6(b,c);return (c|d|(c-d|0))>=0&&c<=b.fS.eh.length?BW(b.fS,d,c):null;},L0=a=>{let b,c;b=a.es;c=new W;Y(c);BY(T(c, +I(277)),b);return X(c);},Q_=(a,b)=>{let c;c=!BU(b,a.fj)?0:1;Bf(b,a.fj,(-1));return c;},G1=L(CA),Nj=(a,b,c)=>{Fi(a,b,c);},MI=(a,b)=>{let c=new G1();Nj(c,a,b);return c;},QS=(a,b,c,d)=>{let e,f;e=De(a,d);if(e!==null&&(b+e.eh.length|0)<=d.el){f=!H6(c,e,b)?(-1):e.eh.length;if(f<0)return (-1);Bf(d,a.fj,f);return a.eg.cY(b+f|0,c,d);}return (-1);},MW=(a,b,c,d)=>{let e,f,g;e=De(a,d);f=d.eK;if(e!==null&&(b+e.eh.length|0)<=f){g=c;while(true){if(b>f)return (-1);b=FJ(g,e,b);if(b<0)return (-1);if(a.eg.cY(b+e.eh.length|0, +c,d)>=0)break;b=b+1|0;}return b;}return (-1);},LW=(a,b,c,d,e)=>{let f,g,h;f=De(a,e);if(f===null)return (-1);g=d;a:{while(true){if(c=f.eh.length)break c;if(P(g,c+h|0)!=P(f,h))break;h=h+1|0;}c=c+(-1)|0;}}if(c<0)break a;if(c=0)break;c=c+(-1)|0;}return c;}return (-1);},Lj=(a,b)=>{return 1;},NG=a=>{let b,c;b=a.es;c=new W;Y(c);BY(T(c,I(278)),b);return X(c);}; +function HE(){CA.call(this);this.h_=0;} +let Md=(a,b,c)=>{Fi(a,b,c);},Od=(a,b)=>{let c=new HE();Md(c,a,b);return c;},Ka=(a,b,c,d)=>{let e,f,g,h;e=De(a,d);if(e!==null&&(b+e.eh.length|0)<=d.el){f=0;while(true){if(f>=e.eh.length){Bf(d,a.fj,e.eh.length);return a.eg.cY(b+e.eh.length|0,c,d);}g=Cj(Ch(P(e,f)));h=b+f|0;if(g!=Cj(Ch(P(c,h))))break;f=f+1|0;}return (-1);}return (-1);},OX=a=>{let b,c;b=a.h_;c=new W;Y(c);BY(T(c,I(279)),b);return X(c);}; +function IA(){let a=this;Bn.call(a);a.eG=null;a.f6=null;a.f5=null;} +let RM=(a,b,c)=>{return !ET(a,c,b)?(-1):a.eA;},Ok=(a,b,c,d)=>{let e,f,g;e=d.el;while(true){if(b>e)return (-1);f=P(a.eG,a.eA-1|0);a:{while(true){g=a.eA;if(b>(e-g|0)){b=(-1);break a;}g=(b+g|0)-1|0;g=P(c,g);if(g==f&&ET(a,c,b))break;b=b+F1(a.f6,g)|0;}}if(b<0)return (-1);if(a.eg.cY(b+a.eA|0,c,d)>=0)break;b=b+1|0;}return b;},Mq=(a,b,c,d,e)=>{let f,g,h;while(true){if(c=0)break;c=c+(-1)|0;}return c;},NP=a=>{let b,c;b=a.eG;c=new W;Y(c);T(T(c,I(280)),b);return X(c);},NJ=(a,b)=>{let c;if(b instanceof B8)return b.eO!=P(a.eG,0)?0:1;if(b instanceof B2)return Eg(b,0,BW(a.eG,0,1))<=0?0:1;if(!(b instanceof BO)){if(!(b instanceof B7))return 1;return a.eG.eh.length>1&&b.fg==Cm(P(a.eG,0),P(a.eG,1))?1:0;}a:{b:{b=b;if(!b.dA(P(a.eG,0))){if(a.eG.eh.length<=1)break b;if(!b.dA(Cm(P(a.eG,0),P(a.eG,1))))break b;}c=1;break a;}c=0;}return c;},ET +=(a,b,c)=>{let d,e;d=0;while(d{let c,d;BV(a);c=new W;Y(c);d=0;while(d{let b=new FV();Mh(b,a);return b;},Kk=(a,b,c)=>{let d,e,f;d=0;while(true){if(d>=a.fq.eh.length)return a.fq.eh.length;e=P(a.fq,d);f=b+d|0;if(e!=Cj(Ch(P(c,f))))break;d=d+1|0;}return (-1);},Oi=a=>{let b,c;b=a.fq;c=new W;Y(c);T(T(c,I(281)),b);return X(c);}; +function GQ(){Bn.call(this);this.fl=null;} +let No=(a,b)=>{BV(a);a.fl=X(b);a.eA=b.er;},Sc=a=>{let b=new GQ();No(b,a);return b;},JV=(a,b,c)=>{let d,e,f,g;d=0;while(true){if(d>=a.fl.eh.length)return a.fl.eh.length;e=P(a.fl,d);f=b+d|0;g=c;if(e!=P(g,f)&&Da(P(a.fl,d))!=P(g,f))break;d=d+1|0;}return (-1);},Mn=a=>{let b,c;b=a.fl;c=new W;Y(c);T(T(c,I(282)),b);return X(c);},IU=L(0),El=L(CU),Ey=L(El),FF=L(Ey),E$=L(Cs),KV=(a,b,c)=>{b=new EA;Z(b);Q(b);},FC=L(E$),EI=L(C6),FD=L(EI),D_=L(0),FA=L(),Ju=L(0),FB=L(),Jj=L(),RQ=L(),Pt=L(),Hx=b=>{let c,d,e,f,g,h,i;c=JC(D4(b));d +=DY(c);e=BC(d*2|0);f=e.data;g=0;h=0;while(h{let c,d,e,f,g,h,i,j,k,l;c=BC(65536);d=c.data;e=0;f=0;g=0;a:{while(true){h=b.data;if(g>=h.length)break a;i=h[g];j=h[g+1|0];k=d.length;if(i{if(b>92)return ((b-32|0)-2|0)<<24>>24;if(b<=34)return (b-32|0)<<24>>24;return ((b-32|0)-1|0)<<24>>24;},RR=b=>{let c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;c=K(DC,16384);d=c.data;e +=I0(16384);f=e.data;g=0;h=0;i=0;j=0;a:while(true){if(j>=b.eh.length){if(g<=0)k=h;else{k=h+1|0;d[h]=GC(i,i+g|0,EK(e,g));}return H3(c,k);}l=D5(P(b,j));if(l==64){j=j+1|0;l=D5(P(b,j));m=0;k=1;n=0;while(n<3){j=j+1|0;m=m|DF(k,D5(P(b,j)));k=k*64|0;n=n+1|0;}}else if(l<32)m=1;else{l=(l-32|0)<<24>>24;j=j+1|0;m=D5(P(b,j));}if(!l&&m>=128){if(g>0){k=h+1|0;d[h]=GC(i,i+g|0,EK(e,g));h=k;}i=i+(g+m|0)|0;g=0;}else while(m>0){k=f.length;if(g!=k){n=h;o=i;i=g;}else{n=h+1|0;p=new DC;o=i+g|0;Gl(p,i,o,EK(e,g));d[h]=p;i=0;}q=Bw(m,k- +i|0);g=i+q|0;if(i>g)break a;while(i{let d,e;d=b+1|0;c=c;e=P(c,b);d=P(c,d);return a.gs!=CV(Dh(Cm(e,d)))?(-1):2;},Rk=a=>{let b,c;b=Dk(CI(a.gs));c=new W;Y(c);T(T(c,I(262)),b);return X(c);}; +function Dn(){Bj.call(this);this.e_=0;} +let PC=(a,b)=>{Bm(a);a.e_=b;},Hj=a=>{let b=new Dn();PC(b,a);return b;},N2=(a,b)=>{a.eg=b;},Qx=(a,b,c,d)=>{let e,f,g;e=b+1|0;if(e>d.el){d.eP=1;return (-1);}f=c;g=P(f,b);if(b>d.eK&&BA(P(f,b-1|0)))return (-1);if(a.e_!=g)return (-1);return a.eg.cY(e,c,d);},NB=(a,b,c,d)=>{let e,f,g,h,i;if(!(c instanceof Br))return Dg(a,b,c,d);e=c;f=d.eK;g=d.el;while(true){if(b>=g)return (-1);h=DH(e,a.e_,b);if(h<0)return (-1);if(h>f&&BA(P(e,h-1|0))){b=h+1|0;continue;}i=a.eg;b=h+1|0;if(i.cY(b,c,d)>=0)break;}return h;},R9=(a,b,c,d, +e)=>{let f,g;if(!(d instanceof Br))return CY(a,b,c,d,e);f=e.eK;g=d;a:{while(true){if(cf&&BA(P(g,c-1|0))){c=c+(-2)|0;continue;}if(a.eg.cY(c+1|0,d,e)>=0)break;c=c+(-1)|0;}return c;}return (-1);},LF=a=>{let b,c;b=a.e_;c=new W;Y(c);Bh(c,b);return X(c);},LN=(a,b)=>{if(b instanceof B8)return 0;if(b instanceof B2)return 0;if(b instanceof BO)return 0;if(b instanceof B7)return 0;if(b instanceof DL)return 0;if(!(b instanceof Dn))return 1;return b.e_!=a.e_ +?0:1;},LZ=(a,b)=>{return 1;}; +function DL(){Bj.call(this);this.fd=0;} +let Ni=(a,b)=>{Bm(a);a.fd=b;},H5=a=>{let b=new DL();Ni(b,a);return b;},PK=(a,b)=>{a.eg=b;},KI=(a,b,c,d)=>{let e,f,g,h,i;e=d.el;f=b+1|0;g=B1(f,e);if(g>0){d.eP=1;return (-1);}h=c;i=P(h,b);if(g<0&&BI(P(h,f)))return (-1);if(a.fd!=i)return (-1);return a.eg.cY(f,c,d);},OU=(a,b,c,d)=>{let e,f,g;if(!(c instanceof Br))return Dg(a,b,c,d);e=c;f=d.el;while(true){if(b>=f)return (-1);g=DH(e,a.fd,b);if(g<0)return (-1);b=g+1|0;if(b=0)break;}return g;},JS=(a,b,c,d,e)=>{let f, +g,h;if(!(d instanceof Br))return CY(a,b,c,d,e);f=d;g=e.el;a:{while(true){if(c=0)break;c=c+(-1)|0;}return c;}return (-1);},Qc=a=>{let b,c;b=a.fd;c=new W;Y(c);Bh(c,b);return X(c);},RO=(a,b)=>{if(b instanceof B8)return 0;if(b instanceof B2)return 0;if(b instanceof BO)return 0;if(b instanceof B7)return 0;if(b instanceof Dn)return 0;if(!(b instanceof DL))return 1;return b.fd!=a.fd?0:1;},Pm +=(a,b)=>{return 1;}; +function B7(){let a=this;Bn.call(a);a.fz=0;a.fp=0;a.fg=0;} +let Rb=(a,b,c)=>{let d,e;d=b+1|0;c=c;e=P(c,b);d=P(c,d);return a.fz==e&&a.fp==d?2:(-1);},Ml=(a,b,c,d)=>{let e,f,g;if(!(c instanceof Br))return Dg(a,b,c,d);e=c;f=d.el;while(b=f)continue;g=P(e,b);if(a.fp==g&&a.eg.cY(b+1|0,c,d)>=0)return b+(-1)|0;b=b+1|0;}return (-1);},PH=(a,b,c,d,e)=>{let f;if(!(d instanceof Br))return CY(a,b,c,d,e);f=d;a:{while(true){if(c=0)break;c +=c+(-1)|0;}return c;}return (-1);},NQ=a=>{let b,c,d;b=a.fz;c=a.fp;d=new W;Y(d);Bh(d,b);Bh(d,c);return X(d);},QE=(a,b)=>{if(b instanceof B7)return b.fg!=a.fg?0:1;if(b instanceof BO)return b.dA(a.fg);if(b instanceof B8)return 0;if(!(b instanceof B2))return 1;return 0;},Jn=L(Dd),P4=(a,b)=>{return b!=10?0:1;},QW=(a,b,c)=>{return b!=10?0:1;},Jo=L(Dd),KB=(a,b)=>{return b!=10&&b!=13&&b!=133&&(b|1)!=8233?0:1;},Pe=(a,b,c)=>{a:{b:{if(b!=10&&b!=133&&(b|1)!=8233){if(b!=13)break b;if(c==10)break b;}b=1;break a;}b=0;}return b;}; +function IL(){let a=this;J.call(a);a.gu=null;a.f$=null;a.fy=0;a.hC=0;} +let PU=(a,b)=>{let c,d;while(true){c=a.fy;if(b{let b=new IL();PU(b,a);return b;},HR=(a,b,c)=>{let d,e,f,g;d=0;e=a.fy;f=b&e;while(true){g=a.gu.data;if(!g[f])break;if(g[f]==b)break;d=(d+1|0)&e;f=(f+d|0)&e;}g[f]=b;a.f$.data[f]=c;},F1=(a,b)=>{let c,d,e,f;c=a.fy;d=b&c;e=0;while(true){f=a.gu.data[d];if(!f)break;if(f==b)return a.f$.data[d];e=(e+1|0)&c;d=(d+e|0)&c;}return a.hC;}; +function Jg(){let a=this;J.call(a);a.hx=null;a.hz=0;} +let RZ=(a,b)=>{a.hx=b;},JC=a=>{let b=new Jg();RZ(b,a);return b;},Np=L(),DY=b=>{let c,d,e,f,g;c=0;d=1;while(true){e=b.hx.data;f=b.hz;b.hz=f+1|0;g=e[f];g=g<34?g-32|0:g>=92?(g-32|0)-2|0:(g-32|0)-1|0;f=(g%2|0)!=1?0:1;c=c+DF(d,g/2|0)|0;d=d*46|0;if(!f)break;}return c;},Ev=b=>{let c,d;c=DY(b);d=c/2|0;if(c%2|0)d= -d|0;return d;},Dj=L(U),OR=a=>{return;},Lp=()=>{let a=new Dj();OR(a);return a;},HM=a=>{return Bv(Bk(BE(),9,13),32);},Ed=L(U),LH=a=>{return;},QG=()=>{let a=new Ed();LH(a);return a;},FP=a=>{return Bk(BE(),48, +57);},IB=L(U),MZ=a=>{return;},Qr=()=>{let a=new IB();MZ(a);return a;},R3=a=>{return Bk(BE(),97,122);},Fy=L(U),P5=a=>{return;},KX=()=>{let a=new Fy();P5(a);return a;},L1=a=>{return Bk(BE(),65,90);},FI=L(U),Ol=a=>{return;},KW=()=>{let a=new FI();Ol(a);return a;},KO=a=>{return Bk(BE(),0,127);},Ee=L(U),QZ=a=>{return;},Nl=()=>{let a=new Ee();QZ(a);return a;},IW=a=>{return Bk(Bk(BE(),97,122),65,90);},D1=L(Ee),Pd=a=>{return;},Kn=()=>{let a=new D1();Pd(a);return a;},GM=a=>{return Bk(IW(a),48,57);},Jq=L(U),LK=a=>{return;},P7 +=()=>{let a=new Jq();LK(a);return a;},Ny=a=>{return Bk(Bk(Bk(BE(),33,64),91,96),123,126);},Ef=L(D1),Qa=a=>{return;},Nx=()=>{let a=new Ef();Qa(a);return a;},FN=a=>{return Bk(Bk(Bk(GM(a),33,64),91,96),123,126);},Ix=L(Ef),Ln=a=>{return;},Mo=()=>{let a=new Ix();Ln(a);return a;},K_=a=>{return Bv(FN(a),32);},Jv=L(U),JW=a=>{return;},Op=()=>{let a=new Jv();JW(a);return a;},Ru=a=>{return Bv(Bv(BE(),32),9);},JE=L(U); +let ON=a=>{return;},K0=()=>{let a=new JE();ON(a);return a;},KZ=a=>{return Bv(Bk(BE(),0,31),127);},Jc=L(U),OV=a=>{return;},NO=()=>{let a=new Jc();OV(a);return a;},Po=a=>{return Bk(Bk(Bk(BE(),48,57),97,102),65,70);},FS=L(U),Nt=a=>{return;},Pz=()=>{let a=new FS();Nt(a);return a;},MK=a=>{let b;b=new Gq;b.iv=a;Ba(b);b.eq=1;return b;},JG=L(U),QO=a=>{return;},Kr=()=>{let a=new JG();QO(a);return a;},Kt=a=>{let b;b=new F9;b.h1=a;Ba(b);b.eq=1;return b;},IM=L(U),Ou=a=>{return;},Mz=()=>{let a=new IM();Ou(a);return a;},Pa +=a=>{let b;b=new I9;b.h8=a;Ba(b);return b;},H4=L(U),K3=a=>{return;},KF=()=>{let a=new H4();K3(a);return a;},Rj=a=>{let b;b=new I8;b.hX=a;Ba(b);return b;},Gw=L(U),QP=a=>{return;},Kd=()=>{let a=new Gw();QP(a);return a;},Rr=a=>{let b;b=new Hn;b.h4=a;Ba(b);DP(b.ep,0,2048);b.eq=1;return b;},Ht=L(U),PV=a=>{return;},Ky=()=>{let a=new Ht();PV(a);return a;},JY=a=>{let b;b=new IQ;b.ia=a;Ba(b);b.eq=1;return b;},Gz=L(U),Kg=a=>{return;},Ki=()=>{let a=new Gz();Kg(a);return a;},O4=a=>{let b;b=new HN;b.ih=a;Ba(b);b.eq=1;return b;},I5 +=L(U),LM=a=>{return;},O_=()=>{let a=new I5();LM(a);return a;},J4=a=>{let b;b=new Hq;b.iw=a;Ba(b);return b;},Jt=L(U),Og=a=>{return;},Ot=()=>{let a=new Jt();Og(a);return a;},Q3=a=>{let b;b=new F3;b.hU=a;Ba(b);b.eq=1;return b;},Gk=L(U),L2=a=>{return;},QL=()=>{let a=new Gk();L2(a);return a;},Ke=a=>{let b;b=new F8;b.id=a;Ba(b);b.eq=1;return b;},Fz=L(U),P_=a=>{return;},Lz=()=>{let a=new Fz();P_(a);return a;}; +let MA=a=>{let b;b=new Hv;b.h3=a;Ba(b);b.eq=1;return b;},Ir=L(U),Rq=a=>{return;},KL=()=>{let a=new Ir();Rq(a);return a;},Q$=a=>{let b;b=new Jp;b.h9=a;Ba(b);b.eq=1;return b;},Jm=L(U),Mv=a=>{return;},Kw=()=>{let a=new Jm();Mv(a);return a;},MM=a=>{let b;b=new JA;b.h$=a;Ba(b);return b;},Hz=L(U),PY=a=>{return;},NY=()=>{let a=new Hz();PY(a);return a;},PP=a=>{let b;b=new Hr;b.ig=a;Ba(b);return b;},Gj=L(U),Rn=a=>{return;},OS=()=>{let a=new Gj();Rn(a);return a;},Mm=a=>{let b;b=new FO;b.h0=a;Ba(b);b.eq=1;return b;},Jz +=L(U),N1=a=>{return;},QB=()=>{let a=new Jz();N1(a);return a;},RI=a=>{let b;b=new Gn;b.it=a;Ba(b);b.eq=1;return b;},DE=L(U),Ku=a=>{return;},MN=()=>{let a=new DE();Ku(a);return a;},Jx=a=>{return Bv(Bk(Bk(Bk(BE(),97,122),65,90),48,57),95);},GH=L(DE),Oq=a=>{return;},Nz=()=>{let a=new GH();Oq(a);return a;},LR=a=>{let b;b=Cb(Jx(a),1);b.eq=1;return b;},ID=L(Dj),NV=a=>{return;},JP=()=>{let a=new ID();NV(a);return a;},N7=a=>{let b;b=Cb(HM(a),1);b.eq=1;return b;},F_=L(Ed),Qt=a=>{return;},ME=()=>{let a=new F_();Qt(a);return a;},Nc +=a=>{let b;b=Cb(FP(a),1);b.eq=1;return b;}; +function Jk(){let a=this;U.call(a);a.hv=0;a.hR=0;} +let O1=(a,b,c)=>{a.hv=b;a.hR=c;},N=(a,b)=>{let c=new Jk();O1(c,a,b);return c;},R6=a=>{return Bk(BE(),a.hv,a.hR);},F2=L(U),PJ=a=>{return;},NT=()=>{let a=new F2();PJ(a);return a;},Ow=a=>{return Bk(Bk(BE(),65279,65279),65520,65533);}; +function E0(){let a=this;U.call(a);a.f4=0;a.fT=0;a.gC=0;} +let QC=(a,b,c)=>{a.fT=c;a.f4=b;},Be=(a,b)=>{let c=new E0();QC(c,a,b);return c;},O3=(a,b,c,d)=>{a.gC=d;a.fT=c;a.f4=b;},RP=(a,b,c)=>{let d=new E0();O3(d,a,b,c);return d;},LL=a=>{let b;b=PE(a.f4);if(a.gC)DP(b.ep,0,2048);b.eq=a.fT;return b;}; +function E_(){let a=this;U.call(a);a.f1=0;a.ge=0;a.g5=0;} +let Kf=(a,b,c)=>{a.ge=c;a.f1=b;},CC=(a,b)=>{let c=new E_();Kf(c,a,b);return c;},J9=(a,b,c,d)=>{a.g5=d;a.ge=c;a.f1=b;},O7=(a,b,c)=>{let d=new E_();J9(d,a,b,c);return d;},J7=a=>{let b;b=new IT;Hl(b,a.f1);if(a.g5)DP(b.ep,0,2048);b.eq=a.ge;return b;},JD=L(Bi),Ma=L(); +function F0(){let a=this;J.call(a);a.hS=null;a.gJ=null;} +function DC(){let a=this;J.call(a);a.gY=0;a.gF=0;a.g7=null;} +let Gl=(a,b,c,d)=>{a.gY=b;a.gF=c;a.g7=d;},GC=(a,b,c)=>{let d=new DC();Gl(d,a,b,c);return d;},EA=L(Bi); +function GT(){let a=this;R.call(a);a.hm=null;a.h5=null;} +let K4=(a,b)=>{let c;c=b-55296|0;return c>=0&&c<2048?a.eF^BX(a.hm,c):0;}; +function GP(){let a=this;R.call(a);a.gG=null;a.ha=null;a.il=null;} +let Lk=(a,b)=>{let c,d;c=b-55296|0;d=c>=0&&c<2048?a.eF^BX(a.gG,c):0;return a.ha.dA(b)&&!d?1:0;}; +function Id(){let a=this;R.call(a);a.fH=null;a.h2=null;} +let Rv=(a,b)=>{return a.ew^BX(a.fH,b);},MS=a=>{let b,c,d;b=new W;Y(b);c=Db(a.fH,0);while(c>=0){DR(b,CI(c));Bh(b,124);c=Db(a.fH,c+1|0);}d=b.er;if(d>0)GB(b,d-1|0);return X(b);}; +function Ij(){let a=this;R.call(a);a.hG=null;a.hY=null;} +let Rh=(a,b)=>{return a.hG.dA(b);}; +function Ih(){let a=this;R.call(a);a.f0=0;a.hM=null;a.gi=null;} +let J0=(a,b)=>{return !(a.f0^BX(a.gi.en,b))&&!(a.f0^a.gi.eV^a.hM.dA(b))?0:1;}; +function Ii(){let a=this;R.call(a);a.f_=0;a.gR=null;a.gk=null;} +let Kj=(a,b)=>{return !(a.f_^BX(a.gk.en,b))&&!(a.f_^a.gk.eV^a.gR.dA(b))?1:0;}; +function Im(){let a=this;R.call(a);a.hq=0;a.gU=null;a.gN=null;a.im=null;} +let J5=(a,b)=>{return a.hq^(!a.gU.dA(b)&&!a.gN.dA(b)?0:1);}; +function Io(){let a=this;R.call(a);a.hO=0;a.hB=null;a.hl=null;a.io=null;} +let JJ=(a,b)=>{return a.hO^(!a.hB.dA(b)&&!a.hl.dA(b)?0:1)?0:1;}; +function Ik(){let a=this;R.call(a);a.g_=null;a.is=null;} +let M0=(a,b)=>{return BH(a.g_,b);}; +function Il(){let a=this;R.call(a);a.g9=null;a.hT=null;} +let Km=(a,b)=>{return BH(a.g9,b)?0:1;}; +function Ip(){let a=this;R.call(a);a.gD=null;a.hD=0;a.hH=null;} +let M3=(a,b)=>{return !BH(a.gD,b)&&!(a.hD^BX(a.hH.en,b))?0:1;}; +function Iq(){let a=this;R.call(a);a.g8=null;a.hh=0;a.gP=null;} +let Q4=(a,b)=>{return !BH(a.g8,b)&&!(a.hh^BX(a.gP.en,b))?1:0;}; +function Ic(){let a=this;R.call(a);a.hF=0;a.gQ=null;a.hi=null;a.h6=null;} +let R_=(a,b)=>{return !(a.hF^a.gQ.dA(b))&&!BH(a.hi,b)?0:1;}; +function I1(){let a=this;R.call(a);a.hg=0;a.gL=null;a.g6=null;a.iu=null;} +let M$=(a,b)=>{return !(a.hg^a.gL.dA(b))&&!BH(a.g6,b)?1:0;}; +function Ia(){let a=this;R.call(a);a.gM=null;a.hV=null;} +let Q2=(a,b)=>{return BH(a.gM,b);}; +function Ib(){let a=this;R.call(a);a.gT=null;a.ii=null;} +let Mc=(a,b)=>{return BH(a.gT,b)?0:1;}; +function Ig(){let a=this;R.call(a);a.hn=null;a.gZ=0;a.hQ=null;} +let P1=(a,b)=>{return BH(a.hn,b)&&a.gZ^BX(a.hQ.en,b)?1:0;}; +function H_(){let a=this;R.call(a);a.hw=null;a.hP=0;a.gV=null;} +let Mb=(a,b)=>{return BH(a.hw,b)&&a.hP^BX(a.gV.en,b)?0:1;}; +function Ie(){let a=this;R.call(a);a.hL=0;a.hj=null;a.hN=null;a.ik=null;} +let OO=(a,b)=>{return a.hL^a.hj.dA(b)&&BH(a.hN,b)?1:0;}; +function If(){let a=this;R.call(a);a.hs=0;a.gI=null;a.hE=null;a.hZ=null;} +let Pj=(a,b)=>{return a.hs^a.gI.dA(b)&&BH(a.hE,b)?0:1;},FH=L(0); +function Fd(){let a=this;J.call(a);a.gx=null;a.gf=null;} +function Eq(){let a=this;Fd.call(a);a.gc=0;a.fB=null;} +function DG(){let a=this;Eq.call(a);a.ff=null;a.fn=null;} +let GI=L(Bi),GD=L(CM),LT=(a,b,c,d)=>{let e,f,g;e=0;f=d.el;a:{while(true){if(b>f){b=e;break a;}g=CL(d,a.es);B0(d,a.es,b);e=a.eM.cY(b,c,d);if(e>=0)break;B0(d,a.es,g);b=b+1|0;}}return b;},Rs=(a,b,c,d,e)=>{let f,g;f=0;a:{while(true){if(c=0)break;B0(e,a.es,g);c=c+(-1)|0;}}return c;},Qv=a=>{return null;}; +function Gq(){R.call(this);this.iv=null;} +let Nr=(a,b)=>{Bb();return BB(b)!=2?0:1;}; +function F9(){R.call(this);this.h1=null;} +let NR=(a,b)=>{Bb();return BB(b)!=1?0:1;}; +function I9(){R.call(this);this.h8=null;} +let MP=(a,b)=>{return HI(b);}; +function I8(){R.call(this);this.hX=null;} +let LJ=(a,b)=>{return 0;}; +function Hn(){R.call(this);this.h4=null;} +let Py=(a,b)=>{Bb();return !BB(b)?0:1;}; +function IQ(){R.call(this);this.ia=null;} +let Nw=(a,b)=>{Bb();return BB(b)!=9?0:1;}; +function HN(){R.call(this);this.ih=null;} +let NN=(a,b)=>{return C4(b);}; +function Hq(){R.call(this);this.iw=null;} +let Rx=(a,b)=>{a:{b:{Bb();if(!(b>=0&&b<=31)){if(b<127)break b;if(b>159)break b;}b=1;break a;}b=0;}return b;}; +function F3(){R.call(this);this.hU=null;} +let QJ=(a,b)=>{a:{b:{Bb();switch(BB(b)){case 1:case 2:case 3:case 4:case 5:case 6:case 8:case 9:case 10:case 23:case 26:break;case 7: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 24:case 25:break b;default:break b;}b=1;break a;}b=C4(b);}return b;}; +function F8(){R.call(this);this.id=null;} +let R2=(a,b)=>{a:{b:{Bb();switch(BB(b)){case 1:case 2:case 3:case 4:case 5:case 10:case 23:case 26:break;case 6:case 7:case 8:case 9: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 24:case 25:break b;default:break b;}b=1;break a;}b=C4(b);}return b;}; +function Hv(){R.call(this);this.h3=null;} +let On=(a,b)=>{a:{Bb();switch(BB(b)){case 1:case 2:case 3:case 4:case 5:break;default:b=0;break a;}b=1;}return b;}; +function Jp(){R.call(this);this.h9=null;} +let KQ=(a,b)=>{return Ho(b);}; +function JA(){R.call(this);this.h$=null;} +let Qh=(a,b)=>{return JB(b);}; +function Hr(){R.call(this);this.ig=null;} +let M4=(a,b)=>{Bb();return BB(b)!=3?0:1;}; +function FO(){R.call(this);this.h0=null;} +let PQ=(a,b)=>{a:{b:{Bb();switch(BB(b)){case 1:case 2:case 3:case 4:case 5:case 6:case 8:case 9:case 10:case 23:break;case 7:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:break b;default:break b;}b=1;break a;}b=C4(b);}return b;}; +function Gn(){R.call(this);this.it=null;} +let Rt=(a,b)=>{a:{b:{Bb();switch(BB(b)){case 1:case 2:case 3:case 4:case 5:case 10:break;case 6:case 7:case 8:case 9:break b;default:break b;}b=1;break a;}b=C4(b);}return b;}; +function D0(){R.call(this);this.gd=0;} +let Hl=(a,b)=>{Ba(a);a.gd=b;},PE=a=>{let b=new D0();Hl(b,a);return b;},NX=(a,b)=>{return a.ew^(a.gd!=DD(b&65535)?0:1);},IT=L(D0),Le=(a,b)=>{return a.ew^(!(a.gd>>DD(b&65535)&1)?0:1);}; +function He(){let a=this;J.call(a);a.hd=0;a.hf=0;a.hk=0;a.gO=0;a.hp=null;} +let Os=L(),GY=L(Bi); +LQ([-1,"java",0,"util",0,"lang"]); +Cu([J,0,0,[],1,0,0,["g",M(Is)],B$,0,J,[],1537,0,0,0,DX,0,J,[],1537,0,0,0,EY,0,J,[],1537,0,0,0,Br,0,J,[B$,DX,EY],17,0,()=>Ce(),["h",O(P),"E",M(Dz),"g",M(Px)],Fk,0,J,[B$],1025,0,0,0,Dw,0,Fk,[DX],1,0,()=>BN(),0,Cl,0,J,[B$,EY],0,0,0,["y",O(EQ),"g",M(X)],EL,0,J,[],1537,0,0,0,W,0,Cl,[EL],1,0,0,["G",Bz(QF),"H",S(JU),"D",Bz(OI),"F",S(RF),"h",O(MC),"E",M(C5),"g",M(C9),"y",O(Q6),"B",Bq(Kc),"x",Bq(RA)],Ff,0,J,[],1,0,0,0,Cr,0,Ff,[],1,0,0,0,Bi,0,Cr,[],1,0,0,0,CT,0,J,[],1025,0,0,0,Me,0,CT,[],17,0,0,0,LO,0,CT,[],17,0,0,0,GE, +0,J,[],1537,0,0,0,Jl,0,J,[GE],1537,0,0,0,FU,0,J,[],1537,0,0,0,GX,0,J,[Jl,FU],17,0,0,0,I_,0,J,[],17,0,()=>Bx(),0,Pw,0,J,[],17,0,0,0,Q1,0,J,[],17,0,0,0,RT,0,J,[],17,0,0,0,E7,0,J,[],1537,0,0,0,Hw,0,J,[E7],1,0,0,0,E9,0,J,[DX],1,0,()=>Bb(),0,LX,0,J,[],17,0,0,0,Rf,0,J,[],17,0,0,0,HH,0,J,[B$],17,0,0,0,EC,0,J,[],1537,0,0,0,FL,0,J,[EC],17,0,0,0,DT,0,Cl,[EL],1,0,0,["G",Bz(LI),"H",S(OJ),"D",Bz(Ms),"F",S(Q7),"y",O(PM),"B",Bq(Ly),"x",Bq(K2)],Bo,"IndexOutOfBoundsException",2,Bi,[],1,[0,0,0],0,0,Jf,0,J,[EC],0,0,0,0,Bs,"IllegalArgumentException", +2,Bi,[],1,[0,0,0],0,0,CB,0,Bs,[],1,0,0,0,OC,0,J,[],17,0,0,0,H2,0,J,[],16,0,0,0,Do,"NullPointerException",2,Bi,[],1,[0,0,0],0,0,Bd,0,J,[],1024,0,()=>Dc(),["cU",S(Dg),"du",Bz(CY),"cm",M(Pg),"g",M(Rl),"bY",O(MU),"ck",O(MT),"c0",M(PA),"bP",M(Dm)],GF,0,J,[],1537,0,0,0,DQ,0,J,[GF],1537,0,0,0,CU,0,J,[DQ],1025,0,0,0,I4,0,J,[DQ],1537,0,0,0,Ge,0,J,[I4],1537,0,0,0,C6,0,CU,[Ge],1025,0,0,0,CS,0,J,[],1537,0,0,0,EV,0,J,[],1537,0,0,0,HD,0,C6,[CS,B$,EV],1,0,0,0]); +Cu([Gv,0,J,[],0,0,0,["g",M(R$)],PZ,"ClassCastException",2,Bi,[],1,[0,0,0],0,0,By,0,Bd,[],0,0,()=>Ct(),["cY",S(Nn),"L",M(NS),"dQ",O(OM)],Hs,0,J,[],0,0,0,0,ND,0,J,[],1,0,0,0,CJ,"StringIndexOutOfBoundsException",2,Bo,[],1,[0,0,0],0,0,OL,0,J,[],17,0,0,0,IN,0,By,[],0,0,0,["cY",S(LP),"L",M(Ra),"dQ",O(R5)],IK,0,By,[],0,0,0,["cY",S(QI),"L",M(P0)],FQ,0,By,[],0,0,0,["cY",S(O$),"L",M(MD)],Gc,0,By,[],0,0,0,["cY",S(L_),"L",M(KG),"dQ",O(Or)],Cz,0,By,[],0,0,0,["cY",S(Nu),"L",M(PN)],Bn,0,Bd,[],1024,0,0,["cY",S(QV),"dq",M(LB), +"dQ",O(PS)],Gp,0,Bn,[],0,0,0,["dr",Bq(Kl),"cU",S(Ls),"du",Bz(Qp),"L",M(NU),"dQ",O(L3)],Bj,0,Bd,[],0,0,0,["cY",S(MY),"bY",O(Oh),"L",M(P9),"ck",O(RY),"dQ",O(Qe),"bP",M(Qk)],D7,0,Bj,[],0,0,0,["cY",S(NF),"L",M(J6),"dQ",O(Q9)],BZ,0,D7,[],0,0,0,["cY",S(RX),"bY",O(Qm),"L",M(LY)],F4,0,BZ,[],0,0,0,["cY",S(N3),"dQ",O(M2),"L",M(Ps)],Gx,0,BZ,[],0,0,0,["cY",S(Oz),"dQ",O(LS),"L",M(MH)],HK,0,BZ,[],0,0,0,["cY",S(Qb),"dQ",O(RL),"L",M(M9)],Hb,0,BZ,[],0,0,0,["cY",S(KH),"dQ",O(RD),"L",M(Pb)],CM,0,Bj,[],0,0,0,["cY",S(Lm),"cU",S(Kh), +"du",Bz(Sd),"ck",O(Rz),"c0",M(Om),"bP",M(PG)],En,0,J,[],1537,0,0,0,Cs,0,J,[En],1025,0,0,["bR",Bq(NI)],D2,0,Cs,[CS,B$],1,0,0,0,G_,0,J,[En],1537,0,0,0,Hf,0,D2,[G_],1,0,0,["bR",Bq(NW)],HF,0,J,[],17,0,()=>DA(),0,BK,0,Bs,[],1,0,0,0,L$,0,J,[],17,0,0,0,DJ,"ArrayStoreException",2,Bi,[],1,[0,0,0],0,0,C8,0,J,[],1024,0,0,0,R,0,C8,[],1024,0,()=>CK(),["dB",M(OG),"dz",M(MJ),"dU",M(Lo),"cJ",M(Pp)],Et,"MissingResourceException",1,Bi,[],1,[0,0,0],0,0,Fg,0,R,[],0,0,0,["dA",O(BH),"dB",M(BD),"dz",M(K6),"dU",M(Mp),"g",M(Mi),"cJ", +M(LE)],B6,0,Bd,[],1024,0,0,["ck",O(JM),"dQ",O(Ng),"bP",M(K5)],BF,0,B6,[],0,0,0,["cY",S(KJ),"L",M(Qf)],Ck,0,BF,[],0,0,0,["cY",S(Nv),"L",M(OK)],BG,0,B6,[],0,0,0,["cY",S(Ll),"L",M(OP)],Ci,0,BF,[],0,0,0,["cY",S(Kq),"bY",O(R1)],GW,0,BF,[],0,0,0,["cY",S(Qy),"cU",S(L9)],IF,0,Cs,[],0,0,0,0,EG,0,J,[],16,0,()=>Eb(),0,U,0,J,[],1024,0,0,0,Gt,0,C8,[CS],0,0,0,["g",M(EE)],HT,0,Bd,[],0,0,0,["cY",S(Qu),"L",M(N0),"dQ",O(Oe)],EN,0,J,[CS,B$],1,0,0,0,Ga,0,Bj,[],0,0,0,["L",M(OA)],Ex,0,Bj,[],0,0,0,["cY",S(Nh),"bY",O(NC),"L",M(Pl), +"dQ",O(Pr),"ck",O(OE)],BO,0,Bj,[],0,0,0,["cY",S(KK),"L",M(O9),"dA",O(L6),"ck",O(M1),"bY",O(Lc),"dQ",O(Lh)]]); +Cu([Em,0,BO,[],0,0,0,["dA",O(PT),"L",M(P6)],It,0,Bn,[],0,0,0,["dr",Bq(Qz),"L",M(OT)],B2,0,Bn,[],0,0,0,["dr",Bq(Eg),"L",M(QY),"ck",O(Oj)],Fa,0,Bj,[],0,0,0,["bY",O(Ko),"L",M(RH),"cY",S(Kp),"ck",O(O5),"dQ",O(MG)],B8,0,Bn,[],0,0,0,["dq",M(P$),"dr",Bq(Nk),"cU",S(KE),"du",Bz(Ql),"L",M(M8),"ck",O(Mg)],HJ,0,Bn,[],0,0,0,["dr",Bq(J1),"L",M(NA)],F7,0,Bn,[],0,0,0,["dr",Bq(K9),"L",M(Of)],Cg,0,Bj,[],0,0,0,["bY",O(PF),"cY",S(NE),"L",M(Nb),"ck",O(QA),"dQ",O(Qo)],H9,0,Cg,[],0,0,0,0,Hy,0,Cg,[],0,0,0,0,JF,0,BG,[],0,0,0,["cY", +S(QU)],FG,0,BG,[],0,0,0,["cY",S(LD)],CN,0,BG,[],0,0,0,["cY",S(KU),"bY",O(NM)],Jh,0,CN,[],0,0,0,["cY",S(Qd),"bY",O(MB)],Cf,0,BG,[],0,0,0,["cY",S(Rw),"L",M(N4)],GG,0,Cf,[],0,0,0,["cY",S(OQ)],Iv,0,BG,[],0,0,0,["cY",S(P8)],G8,0,CN,[],0,0,0,["cY",S(Pu)],IP,0,Cf,[],0,0,0,["cY",S(Mk)],Iw,0,B6,[],0,0,0,["cY",S(Q5),"cU",S(Lr),"L",M(PD)],H$,0,B6,[],0,0,0,["cY",S(Oo),"cU",S(KC),"L",M(R0)],Dd,0,J,[],1024,0,0,0,JH,0,BF,[],0,0,0,["cY",S(Mu)],GN,0,Ci,[],0,0,0,["cY",S(Lt)],IX,0,Ck,[],0,0,0,["cY",S(JR)],G4,0,BF,[],0,0,0,["cY", +S(N8)],HG,0,Ci,[],0,0,0,["cY",S(MR)],HL,0,Ck,[],0,0,0,["cY",S(Ks)],EU,0,Bd,[],16,0,0,["cY",S(RK),"dQ",O(Ph),"L",M(Lx)],FM,0,Bd,[],0,0,0,["cY",S(Ox),"dQ",O(OW),"L",M(Rp)],H1,0,Bd,[],0,0,0,["cY",S(PW),"dQ",O(Ri),"L",M(NL)],EO,0,Bd,[],16,0,0,["cY",S(P3),"dQ",O(Qw),"L",M(KD)],Hi,0,Bd,[],0,0,0,["cY",S(Nq),"dQ",O(JX),"L",M(MX)],GZ,0,Bd,[],0,0,0,["cY",S(Qg),"dQ",O(Mt),"L",M(M_)],G9,0,Bj,[],0,0,0,["cY",S(Qi),"L",M(Sb),"bY",O(O8),"cm",M(MQ),"dQ",O(O6)],IH,0,Bj,[],16,0,0,["cY",S(Nd),"L",M(QR),"bY",O(RW),"cm",M(JI),"dQ", +O(QT)],GO,0,Bd,[],16,0,0,["cY",S(QN),"dQ",O(Mf),"L",M(JN)],Gg,0,Bd,[],0,0,0,["cY",S(Nm),"dQ",O(LU),"L",M(LV)],FZ,0,Bd,[],0,0,0,["cY",S(O2),"dQ",O(QD),"L",M(My)],CA,0,Bj,[],0,0,0,["cY",S(MF),"bY",O(Qj),"L",M(L0),"dQ",O(Q_)],G1,0,CA,[],0,0,0,["cY",S(QS),"cU",S(MW),"du",Bz(LW),"ck",O(Lj),"L",M(NG)],HE,0,CA,[],0,0,0,["cY",S(Ka),"L",M(OX)],IA,0,Bn,[],0,0,0,["dr",Bq(RM),"cU",S(Ok),"du",Bz(Mq),"L",M(NP),"ck",O(NJ)],FV,0,Bn,[],0,0,0,["dr",Bq(Kk),"L",M(Oi)],GQ,0,Bn,[],0,0,0,["dr",Bq(JV),"L",M(Mn)],IU,0,J,[DQ],1537,0, +0,0,El,0,CU,[IU],1025,0,0,0,Ey,0,El,[],1024,0,0,0,FF,0,Ey,[],0,0,0,0,E$,0,Cs,[],1024,0,0,["bR",Bq(KV)]]); +Cu([FC,0,E$,[],0,0,0,0,EI,0,C6,[EV],1024,0,0,0,FD,0,EI,[],0,0,0,0,D_,0,J,[],1537,0,0,0,FA,0,J,[D_],0,0,0,0,Ju,0,J,[D_],1537,0,0,0,FB,0,J,[Ju],0,0,0,0,Jj,0,J,[E7],1,0,0,0,RQ,0,J,[],16,0,0,0,Pt,0,J,[],17,0,0,0,FR,0,Bn,[],0,0,0,["dr",Bq(J2),"L",M(Rk)],Dn,0,Bj,[],0,0,0,["bY",O(N2),"cY",S(Qx),"cU",S(NB),"du",Bz(R9),"L",M(LF),"ck",O(LN),"dQ",O(LZ)],DL,0,Bj,[],0,0,0,["bY",O(PK),"cY",S(KI),"cU",S(OU),"du",Bz(JS),"L",M(Qc),"ck",O(RO),"dQ",O(Pm)],B7,0,Bn,[],0,0,0,["dr",Bq(Rb),"cU",S(Ml),"du",Bz(PH),"L",M(NQ),"ck",O(QE)],Jn, +0,Dd,[],0,0,0,["d7",O(P4),"d_",Bq(QW)],Jo,0,Dd,[],0,0,0,["d7",O(KB),"d_",Bq(Pe)],IL,0,J,[],0,0,0,0,Jg,0,J,[],1,0,0,0,Np,0,J,[],17,0,0,0,Dj,0,U,[],0,0,0,["dT",M(HM)],Ed,0,U,[],0,0,0,["dT",M(FP)],IB,0,U,[],0,0,0,["dT",M(R3)],Fy,0,U,[],0,0,0,["dT",M(L1)],FI,0,U,[],0,0,0,["dT",M(KO)],Ee,0,U,[],0,0,0,["dT",M(IW)],D1,0,Ee,[],0,0,0,["dT",M(GM)],Jq,0,U,[],0,0,0,["dT",M(Ny)],Ef,0,D1,[],0,0,0,["dT",M(FN)],Ix,0,Ef,[],0,0,0,["dT",M(K_)],Jv,0,U,[],0,0,0,["dT",M(Ru)],JE,0,U,[],0,0,0,["dT",M(KZ)],Jc,0,U,[],0,0,0,["dT",M(Po)],FS, +0,U,[],0,0,0,["dT",M(MK)],JG,0,U,[],0,0,0,["dT",M(Kt)],IM,0,U,[],0,0,0,["dT",M(Pa)],H4,0,U,[],0,0,0,["dT",M(Rj)],Gw,0,U,[],0,0,0,["dT",M(Rr)],Ht,0,U,[],0,0,0,["dT",M(JY)],Gz,0,U,[],0,0,0,["dT",M(O4)],I5,0,U,[],0,0,0,["dT",M(J4)],Jt,0,U,[],0,0,0,["dT",M(Q3)],Gk,0,U,[],0,0,0,["dT",M(Ke)],Fz,0,U,[],0,0,0,["dT",M(MA)],Ir,0,U,[],0,0,0,["dT",M(Q$)],Jm,0,U,[],0,0,0,["dT",M(MM)],Hz,0,U,[],0,0,0,["dT",M(PP)],Gj,0,U,[],0,0,0,["dT",M(Mm)],Jz,0,U,[],0,0,0,["dT",M(RI)],DE,0,U,[],0,0,0,["dT",M(Jx)],GH,0,DE,[],0,0,0,["dT", +M(LR)]]); +Cu([ID,0,Dj,[],0,0,0,["dT",M(N7)],F_,0,Ed,[],0,0,0,["dT",M(Nc)],Jk,0,U,[],0,0,0,["dT",M(R6)],F2,0,U,[],0,0,0,["dT",M(Ow)],E0,0,U,[],0,0,0,["dT",M(LL)],E_,0,U,[],0,0,0,["dT",M(J7)],JD,"NegativeArraySizeException",2,Bi,[],1,[0,0,0],0,0,Ma,0,J,[],0,0,0,0,F0,0,J,[],1,0,0,0,DC,0,J,[],1,0,0,0,EA,"UnsupportedOperationException",2,Bi,[],1,[0,0,0],0,0,GT,0,R,[],0,0,0,["dA",O(K4)],GP,0,R,[],0,0,0,["dA",O(Lk)],Id,0,R,[],0,0,0,["dA",O(Rv),"g",M(MS)],Ij,0,R,[],0,0,0,["dA",O(Rh)],Ih,0,R,[],0,0,0,["dA",O(J0)],Ii,0,R,[],0, +0,0,["dA",O(Kj)],Im,0,R,[],0,0,0,["dA",O(J5)],Io,0,R,[],0,0,0,["dA",O(JJ)],Ik,0,R,[],0,0,0,["dA",O(M0)],Il,0,R,[],0,0,0,["dA",O(Km)],Ip,0,R,[],0,0,0,["dA",O(M3)],Iq,0,R,[],0,0,0,["dA",O(Q4)],Ic,0,R,[],0,0,0,["dA",O(R_)],I1,0,R,[],0,0,0,["dA",O(M$)],Ia,0,R,[],0,0,0,["dA",O(Q2)],Ib,0,R,[],0,0,0,["dA",O(Mc)],Ig,0,R,[],0,0,0,["dA",O(P1)],H_,0,R,[],0,0,0,["dA",O(Mb)],Ie,0,R,[],0,0,0,["dA",O(OO)],If,0,R,[],0,0,0,["dA",O(Pj)],FH,0,J,[],1537,0,0,0,Fd,0,J,[FH,CS],0,0,0,0,Eq,0,Fd,[],0,0,0,0,DG,0,Eq,[],16,0,0,0,GI,"IllegalStateException", +2,Bi,[],1,[0,0,0],0,0,GD,0,CM,[],0,0,0,["cU",S(LT),"du",Bz(Rs),"c0",M(Qv)],Gq,0,R,[],0,0,0,["dA",O(Nr)],F9,0,R,[],0,0,0,["dA",O(NR)],I9,0,R,[],0,0,0,["dA",O(MP)],I8,0,R,[],0,0,0,["dA",O(LJ)],Hn,0,R,[],0,0,0,["dA",O(Py)],IQ,0,R,[],0,0,0,["dA",O(Nw)],HN,0,R,[],0,0,0,["dA",O(NN)],Hq,0,R,[],0,0,0,["dA",O(Rx)],F3,0,R,[],0,0,0,["dA",O(QJ)],F8,0,R,[],0,0,0,["dA",O(R2)],Hv,0,R,[],0,0,0,["dA",O(On)],Jp,0,R,[],0,0,0,["dA",O(KQ)],JA,0,R,[],0,0,0,["dA",O(Qh)]]); +Cu([Hr,0,R,[],0,0,0,["dA",O(M4)],FO,0,R,[],0,0,0,["dA",O(PQ)],Gn,0,R,[],0,0,0,["dA",O(Rt)],D0,0,R,[],0,0,0,["dA",O(NX)],IT,0,D0,[],0,0,0,["dA",O(Le)],He,0,J,[D_],0,0,0,0,Os,0,J,[],0,0,0,0,GY,"ConcurrentModificationException",1,Bi,[],1,[0,0,0],0,0]); +let Pn=CG(HC),Pf=CG(JO),Iu=CG(Gs); +K$(["0","@","null","String is null","String is empty","String contains invalid digits: ","String contains digits out of radix ",": ","The value is too big for integer type","The value is too big for int type: ","Illegal radix: ","[L","[]","","compile-error","TeaVM rejected the pattern.",", ","PatternSyntaxException","limit-error","CaptureGroupLimit","The pattern exceeds the 1,000 capture-group execution limit.","1","ok","replacement-error","execution-error","TeaVM Matcher rejected the replacement.", +"TeaVM failed while matching.","IllegalArgumentException","Result limits must be positive.","bridge-error","NullPointerException","Pattern and subject must not be null.","Error","(?<=a)(b)\\1","abb","<$1>","a","Patter is null","\\Q","\\E","\\\\E\\Q","fSet","Name capturing group should start with letter","Is","In","Either src or dest is null","NonCapFSet","AheadFSet","BehindFSet","AtomicFSet","FinalSet","","JointSet","NonCapJointSet","PosLookaheadJointSet","NegLookaheadJointSet","PosBehindJointSet", +"NegBehindJointSet","","","Lower","Upper","ASCII","Alpha","Digit","Alnum","Punct","Graph","Print","Blank","Cntrl","XDigit","javaLowerCase","javaUpperCase","javaWhitespace","javaMirrored","javaDefined","javaDigit","javaIdentifierIgnorable","javaISOControl","javaJavaIdentifierPart","javaJavaIdentifierStart","javaLetter","javaLetterOrDigit","javaSpaceChar","javaTitleCase","javaUnicodeIdentifierPart","javaUnicodeIdentifierStart","Space","w","W","s","S","d","D","BasicLatin","Latin-1Supplement", +"LatinExtended-A","LatinExtended-B","IPAExtensions","SpacingModifierLetters","CombiningDiacriticalMarks","Greek","Cyrillic","CyrillicSupplement","Armenian","Hebrew","Arabic","Syriac","ArabicSupplement","Thaana","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","HangulJamo","Ethiopic","EthiopicSupplement","Cherokee","UnifiedCanadianAboriginalSyllabics","Ogham","Runic","Tagalog","Hanunoo","Buhid","Tagbanwa","Khmer", +"Mongolian","Limbu","TaiLe","NewTaiLue","KhmerSymbols","Buginese","PhoneticExtensions","PhoneticExtensionsSupplement","CombiningDiacriticalMarksSupplement","LatinExtendedAdditional","GreekExtended","GeneralPunctuation","SuperscriptsandSubscripts","CurrencySymbols","CombiningMarksforSymbols","LetterlikeSymbols","NumberForms","Arrows","MathematicalOperators","MiscellaneousTechnical","ControlPictures","OpticalCharacterRecognition","EnclosedAlphanumerics","BoxDrawing","BlockElements","GeometricShapes","MiscellaneousSymbols", +"Dingbats","MiscellaneousMathematicalSymbols-A","SupplementalArrows-A","BraillePatterns","SupplementalArrows-B","MiscellaneousMathematicalSymbols-B","SupplementalMathematicalOperators","MiscellaneousSymbolsandArrows","Glagolitic","Coptic","GeorgianSupplement","Tifinagh","EthiopicExtended","SupplementalPunctuation","CJKRadicalsSupplement","KangxiRadicals","IdeographicDescriptionCharacters","CJKSymbolsandPunctuation","Hiragana","Katakana","Bopomofo","HangulCompatibilityJamo","Kanbun","BopomofoExtended","CJKStrokes", +"KatakanaPhoneticExtensions","EnclosedCJKLettersandMonths","CJKCompatibility","CJKUnifiedIdeographsExtensionA","YijingHexagramSymbols","CJKUnifiedIdeographs","YiSyllables","YiRadicals","ModifierToneLetters","SylotiNagri","HangulSyllables","HighSurrogates","HighPrivateUseSurrogates","LowSurrogates","PrivateUseArea","CJKCompatibilityIdeographs","AlphabeticPresentationForms","ArabicPresentationForms-A","VariationSelectors","VerticalForms","CombiningHalfMarks","CJKCompatibilityForms","SmallFormVariants","ArabicPresentationForms-B", +"HalfwidthandFullwidthForms","all","Specials","Cn","IsL","Lu","Ll","Lt","Lm","Lo","IsM","Mn","Me","Mc","N","Nd","Nl","No","IsZ","Zs","Zl","Zp","IsC","Cc","Cf","Co","Cs","IsP","Pd","Ps","Pe","Pc","Po","IsS","Sm","Sc","Sk","So","Pi","Pf","posFSet"," ","^ ","range:","CompositeRangeSet: "," ","UCI range:","decomposed Hangul syllable:","UCI ","CI ","decomposed char:","","","","WordBoundary","PreviousMatch","","EOI","^","DotAll",".","", +"","CI back reference: ","back reference: ","UCI back reference: ","sequence: ","UCI sequence: ","CI sequence: "]); +Br.prototype.toString=function(){return D$(this);}; +Br.prototype.valueOf=Br.prototype.toString;J.prototype.toString=function(){return D$(Is(this));}; +J.prototype.__teavm_class__=function(){return RB(this);}; +let C=JT(O0); +C.javaException=N_; +let Sl=Symbol('jsoClass'); +(()=>{let c;})(); +export{C as main,D as bridgeAbiVersion,E as engineIdentity,F as selfTest,G as execute,H as replace}; \ No newline at end of file diff --git a/public/engines/python/LICENSE.cpython.txt b/public/engines/python/LICENSE.cpython.txt new file mode 100644 index 0000000..20cf390 --- /dev/null +++ b/public/engines/python/LICENSE.cpython.txt @@ -0,0 +1,277 @@ +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see https://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations, which became +Zope Corporation. In 2001, the Python Software Foundation (PSF, see +https://www.python.org/psf/) was formed, a non-profit organization +created specifically to own Python-related Intellectual Property. +Zope Corporation was a sponsoring member of the PSF. + +All Python releases are Open Source (see https://opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +Python software and documentation are licensed under the +Python Software Foundation License Version 2. + +Starting with Python 3.8.6, examples, recipes, and other code in +the documentation are dual licensed under the PSF License Version 2 +and the Zero-Clause BSD license. + +Some software incorporated into Python is under different licenses. +The licenses are listed with code falling under that license. + + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001 Python Software Foundation; All Rights Reserved" +are retained in Python alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION +---------------------------------------------------------------------- + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/public/engines/python/LICENSE.pyodide.txt b/public/engines/python/LICENSE.pyodide.txt new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/public/engines/python/LICENSE.pyodide.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/public/engines/python/SHA256SUMS b/public/engines/python/SHA256SUMS new file mode 100644 index 0000000..de8a16d --- /dev/null +++ b/public/engines/python/SHA256SUMS @@ -0,0 +1,8 @@ +b0e25a78cffb43f4d92de8b61ccfa1f1f98ecbc22330b54b5251e7b6ba010231 LICENSE.cpython.txt +1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5 LICENSE.pyodide.txt +00267477b691c9f855375a6930f13a3a87fa6580d8fab949bc6cce0fb1d0a821 engine-metadata.json +c963d22858f6bcb8f41586a2142f03905ab370c88ea22a86a2736e95fac2a8f3 pyodide-lock.json +1a9775427ef6e8abaa7db88ece0515422d1886915ae5c9093776410c865dfd8d pyodide.asm.mjs +e7f8fac36f8bf11085309cbc5c829b3ec3057c18bf1d73b05a6741612d63cdbf pyodide.asm.wasm +640ac750bf7cf42ee58b524faa09f803732d2237753cd630d6878edda8a107bf pyodide.mjs +444c770dfd75a32097fc0a7d5c1413fd3140601f49c3a1f2e9af0376fcd124b4 python_stdlib.zip diff --git a/public/engines/python/engine-metadata.json b/public/engines/python/engine-metadata.json new file mode 100644 index 0000000..628f36c --- /dev/null +++ b/public/engines/python/engine-metadata.json @@ -0,0 +1,99 @@ +{ + "schemaVersion": 1, + "engine": "python", + "engineVersion": "CPython 3.14.2 re", + "runtime": "Pyodide 314.0.3", + "status": "production-runtime", + "bridge": { + "abiVersion": 1, + "sourceFile": { + "path": "engines/python/bridge.py", + "sha256": "87cf2690368eab306eb6765d5e516f23c73d987711a2be704576b1c36cf8c6c0", + "bytes": 8509 + }, + "userValuesAreFunctionArguments": true, + "regexModule": "re", + "supportModules": { + "serialization": "json", + "runtimeIdentity": "sys" + }, + "maximumPatternUtf16": 65536, + "maximumSubjectBytes": 16777216, + "maximumReplacementUtf16": 65536, + "maximumOutputBytes": 67108864, + "maximumMatches": 10000, + "maximumCaptureRows": 100000, + "maximumCaptureGroups": 1000, + "maximumNativeExpansionCodePoints": 16777216 + }, + "source": { + "pyodide": { + "repository": "https://github.com/pyodide/pyodide.git", + "tag": "314.0.3", + "commitSha1": "ac57031be7564f864d061cb37c5c152e59f83ad4", + "license": "MPL-2.0", + "npmPackage": "pyodide@314.0.3", + "npmResolved": "https://registry.npmjs.org/pyodide/-/pyodide-314.0.3.tgz", + "npmIntegrity": "sha512-sK40My6m8tmBUYtYH9au9rXUeh9x0wfahtHdOlGmJxZDsKBGKtP6KznyFB2+u/klbQTdDionR0uaVd176zVQzQ==" + }, + "cpython": { + "repository": "https://github.com/python/cpython.git", + "tag": "v3.14.2", + "tagObjectSha1": "a1d0069daf8e85b25a0c3f96abc43182be6d429e", + "commitSha1": "df793163d5821791d4e7caf88885a2c11a107986", + "license": "Python-2.0" + } + }, + "toolchain": { + "abiVersion": "2026_0", + "architecture": "wasm32", + "emscriptenVersion": "5.0.3", + "lockPythonVersion": "3.14.0", + "executablePythonVersion": "3.14.2", + "threads": false + }, + "packaging": { + "loaderTransformation": "Removed only the upstream sourceMappingURL trailer; executable JavaScript is unchanged.", + "upstreamLoaderSha256": "5cfc46f5dcbaf2a16f26e2363f441873eb424762609cc03db00d6a2ace4d00e5", + "packedLoaderSha256": "640ac750bf7cf42ee58b524faa09f803732d2237753cd630d6878edda8a107bf", + "externalPackagesIncluded": false, + "lockPythonVersionNote": "The upstream lock's 3.14.0 field identifies its CPython 3.14 ABI baseline; the executable runtime self-identifies as 3.14.2." + }, + "files": [ + { + "path": "LICENSE.cpython.txt", + "sha256": "b0e25a78cffb43f4d92de8b61ccfa1f1f98ecbc22330b54b5251e7b6ba010231", + "bytes": 13804 + }, + { + "path": "LICENSE.pyodide.txt", + "sha256": "1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5", + "bytes": 16725 + }, + { + "path": "pyodide-lock.json", + "sha256": "c963d22858f6bcb8f41586a2142f03905ab370c88ea22a86a2736e95fac2a8f3", + "bytes": 113804 + }, + { + "path": "pyodide.asm.mjs", + "sha256": "1a9775427ef6e8abaa7db88ece0515422d1886915ae5c9093776410c865dfd8d", + "bytes": 1249447 + }, + { + "path": "pyodide.asm.wasm", + "sha256": "e7f8fac36f8bf11085309cbc5c829b3ec3057c18bf1d73b05a6741612d63cdbf", + "bytes": 9596462 + }, + { + "path": "pyodide.mjs", + "sha256": "640ac750bf7cf42ee58b524faa09f803732d2237753cd630d6878edda8a107bf", + "bytes": 17843 + }, + { + "path": "python_stdlib.zip", + "sha256": "444c770dfd75a32097fc0a7d5c1413fd3140601f49c3a1f2e9af0376fcd124b4", + "bytes": 2545106 + } + ] +} diff --git a/public/engines/python/pyodide-lock.json b/public/engines/python/pyodide-lock.json new file mode 100644 index 0000000..8c9b0b6 --- /dev/null +++ b/public/engines/python/pyodide-lock.json @@ -0,0 +1 @@ +{"info": {"abi_version": "2026_0", "arch": "wasm32", "platform": "emscripten_5_0_3", "python": "3.14.0"}, "packages": {"affine": {"depends": [], "file_name": "affine-2.4.0-py3-none-any.whl", "imports": ["affine"], "install_dir": "site", "name": "affine", "package_type": "package", "sha256": "a99f162c6cef4c1cef211df087b59ba930672eebebe59c1e2a6aedcbcfb41287", "unvendored_tests": true, "version": "2.4.0"}, "affine-tests": {"depends": ["affine"], "file_name": "affine-tests.tar", "imports": [], "install_dir": "site", "name": "affine-tests", "package_type": "package", "sha256": "f19683b16f771f68453cd282f8dc6cc144ffcde9985ab055da294e6d8a65f642", "unvendored_tests": false, "version": "2.4.0"}, "aiohappyeyeballs": {"depends": [], "file_name": "aiohappyeyeballs-2.6.1-py3-none-any.whl", "imports": ["aiohappyeyeballs"], "install_dir": "site", "name": "aiohappyeyeballs", "package_type": "package", "sha256": "d44b4f504b16ad3f4d2819a3596c3ca42819d20cbf38521f5657830b33d20acc", "unvendored_tests": false, "version": "2.6.1"}, "aiohttp": {"depends": ["aiohappyeyeballs", "aiosignal", "async-timeout", "attrs", "charset-normalizer", "frozenlist", "multidict", "yarl"], "file_name": "aiohttp-3.13.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["aiohttp"], "install_dir": "site", "name": "aiohttp", "package_type": "package", "sha256": "332277d75d4ffc4aea350323dae0a2297db00a086c9ad03c87475c31b3cc1cd7", "unvendored_tests": true, "version": "3.13.5"}, "aiohttp-tests": {"depends": ["aiohttp"], "file_name": "aiohttp-tests.tar", "imports": [], "install_dir": "site", "name": "aiohttp-tests", "package_type": "package", "sha256": "579d3e4cdcbd5e9b6faa945344ffa7ac85928de6987e18c102eb60eddf1d023e", "unvendored_tests": false, "version": "3.13.5"}, "aiosignal": {"depends": ["frozenlist"], "file_name": "aiosignal-1.4.0-py3-none-any.whl", "imports": ["aiosignal"], "install_dir": "site", "name": "aiosignal", "package_type": "package", "sha256": "414e1c05fc0ceb8e3faea9f3c3f5e0dff04f23544236813a379e419319664447", "unvendored_tests": false, "version": "1.4.0"}, "altair": {"depends": ["typing-extensions", "jinja2", "jsonschema", "packaging", "narwhals"], "file_name": "altair-6.0.0-py3-none-any.whl", "imports": ["altair"], "install_dir": "site", "name": "altair", "package_type": "package", "sha256": "bed35390f3c370873fc8b18194298759d146450a647ed3dc1b84625a11b21de9", "unvendored_tests": false, "version": "6.0.0"}, "annotated-doc": {"depends": [], "file_name": "annotated_doc-0.0.4-py3-none-any.whl", "imports": ["annotated_doc"], "install_dir": "site", "name": "annotated-doc", "package_type": "package", "sha256": "506c20d29063f37e4ae1dbd32c373546df4a40c76a760f3fff586168dd03a216", "unvendored_tests": false, "version": "0.0.4"}, "annotated-types": {"depends": [], "file_name": "annotated_types-0.7.0-py3-none-any.whl", "imports": ["annotated_types"], "install_dir": "site", "name": "annotated-types", "package_type": "package", "sha256": "7beddfd593719e92d8d4d6c290a512ceff0f0879428417fced1384cf5417e8c4", "unvendored_tests": true, "version": "0.7.0"}, "annotated-types-tests": {"depends": ["annotated-types"], "file_name": "annotated-types-tests.tar", "imports": [], "install_dir": "site", "name": "annotated-types-tests", "package_type": "package", "sha256": "b3850cba81505c5a5d0647505ed7b34e619de15553661cc2f156dafce5b2fa65", "unvendored_tests": false, "version": "0.7.0"}, "anyio": {"depends": ["sniffio", "typing-extensions"], "file_name": "anyio-4.13.0-py3-none-any.whl", "imports": ["anyio"], "install_dir": "site", "name": "anyio", "package_type": "package", "sha256": "6e4139828bae2bdbc968ac43fafb20007af8fcd22b683f60d245ebd6992cbe3c", "unvendored_tests": false, "version": "4.13.0"}, "apsw": {"depends": [], "file_name": "apsw-3.51.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["apsw"], "install_dir": "site", "name": "apsw", "package_type": "package", "sha256": "204975619eb2c48fb97b5e17056af90254ee5403e2080e989cad87e6f1b229b2", "unvendored_tests": true, "version": "3.51.3.0"}, "apsw-tests": {"depends": ["apsw"], "file_name": "apsw-tests.tar", "imports": [], "install_dir": "site", "name": "apsw-tests", "package_type": "package", "sha256": "9a3366636fa72a6c762b7c31a23abf9343b40997950768dc0759f196cc6e8b15", "unvendored_tests": false, "version": "3.51.3.0"}, "argon2-cffi": {"depends": ["argon2-cffi-bindings"], "file_name": "argon2_cffi-23.1.0-py3-none-any.whl", "imports": ["argon2"], "install_dir": "site", "name": "argon2-cffi", "package_type": "package", "sha256": "9aa1f44a7884e477c6df85defbfd8cfc29e4033fd2104fce90a39a49456a8f02", "unvendored_tests": false, "version": "23.1.0"}, "argon2-cffi-bindings": {"depends": ["cffi"], "file_name": "argon2_cffi_bindings-25.1.0-cp314-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["_argon2_cffi_bindings"], "install_dir": "site", "name": "argon2-cffi-bindings", "package_type": "package", "sha256": "ede7269ddc8fc1e085dd881aebb0b05dc2dba5cc8cbb31768a736e3b3231796c", "unvendored_tests": false, "version": "25.1.0"}, "astropy": {"depends": ["packaging", "numpy", "pyerfa", "pyyaml", "astropy_iers_data"], "file_name": "astropy-7.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["astropy"], "install_dir": "site", "name": "astropy", "package_type": "package", "sha256": "49f923e7a49fe5a6329f1115bddc780f2f2aae32fa356e1d6c4bdf4cb0e23322", "unvendored_tests": false, "version": "7.2.0"}, "astropy-iers-data": {"depends": [], "file_name": "astropy_iers_data-0.2026.4.1.15.5.49-py3-none-any.whl", "imports": ["astropy_iers_data"], "install_dir": "site", "name": "astropy_iers_data", "package_type": "package", "sha256": "61563e6b47112cfb95d6911a60b07fa70969d33233c5b8a3b100c6501d1ebb3a", "unvendored_tests": true, "version": "0.2026.4.1.15.5.49"}, "astropy-iers-data-tests": {"depends": ["astropy_iers_data"], "file_name": "astropy-iers-data-tests.tar", "imports": [], "install_dir": "site", "name": "astropy_iers_data-tests", "package_type": "package", "sha256": "3762063a56e00624ec0a361535478d0958a809a56f661ddce40a16dc1343ad9f", "unvendored_tests": false, "version": "0.2026.4.1.15.5.49"}, "asttokens": {"depends": ["six"], "file_name": "asttokens-3.0.1-py3-none-any.whl", "imports": ["asttokens"], "install_dir": "site", "name": "asttokens", "package_type": "package", "sha256": "df85a646e630bb2649a22296eea308e3f3cf1cec104970eff772b4bf17dd7b31", "unvendored_tests": false, "version": "3.0.1"}, "async-timeout": {"depends": [], "file_name": "async_timeout-5.0.1-py3-none-any.whl", "imports": ["async_timeout"], "install_dir": "site", "name": "async-timeout", "package_type": "package", "sha256": "e9e8c20bc9f576bc5310d623de8a69dfe7babb1118bd1a59472f7e983a2153ed", "unvendored_tests": false, "version": "5.0.1"}, "atomicwrites": {"depends": [], "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "imports": ["atomicwrites"], "install_dir": "site", "name": "atomicwrites", "package_type": "package", "sha256": "fc548be9837504e69ef17371f85c7fdd1d075a9c59aebc914467d60b9e6e790c", "unvendored_tests": false, "version": "1.4.1"}, "attrs": {"depends": ["six"], "file_name": "attrs-26.1.0-py3-none-any.whl", "imports": ["attr", "attrs"], "install_dir": "site", "name": "attrs", "package_type": "package", "sha256": "b5f2e20d25fbeb55950af8cda6b5ef71d47e60872587d11ab6b6425b0d7c2c92", "unvendored_tests": false, "version": "26.1.0"}, "audioop-lts": {"depends": [], "file_name": "audioop_lts-0.2.2-cp313-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["audioop"], "install_dir": "site", "name": "audioop-lts", "package_type": "package", "sha256": "66e83cfbd4ad1081ec8c403ac9982cf8ec30e729cb62f58221a1ca0d37f8ec4e", "unvendored_tests": false, "version": "0.2.2"}, "awkward-cpp": {"depends": ["numpy"], "file_name": "awkward_cpp-52-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["awkward_cpp"], "install_dir": "site", "name": "awkward-cpp", "package_type": "package", "sha256": "37293dab9f38d4fef125a89becc8baf262fe9e72352bcb62b2135e106e9811c9", "unvendored_tests": false, "version": "52"}, "b2d": {"depends": ["numpy", "pydantic", "setuptools", "annotated-types"], "file_name": "b2d-0.7.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["b2d"], "install_dir": "site", "name": "b2d", "package_type": "package", "sha256": "0dcf829dce1d9620eb4f9321d98ce096cb68f46ac434859f06d4c01d45b9fbf3", "unvendored_tests": false, "version": "0.7.4"}, "bcrypt": {"depends": [], "file_name": "bcrypt-5.0.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["bcrypt"], "install_dir": "site", "name": "bcrypt", "package_type": "package", "sha256": "8667af694782044a8d38fe43fbb681b4075d1f12f9a3fdc7ddb540fef8f5780f", "unvendored_tests": false, "version": "5.0.0"}, "beautifulsoup4": {"depends": ["soupsieve", "typing-extensions"], "file_name": "beautifulsoup4-4.14.3-py3-none-any.whl", "imports": ["bs4"], "install_dir": "site", "name": "beautifulsoup4", "package_type": "package", "sha256": "95a87dbe58c8dafab021c1f2c003fc9a9c69759a81495ae739f1df483805115e", "unvendored_tests": false, "version": "4.14.3"}, "bilby-cython": {"depends": ["numpy"], "file_name": "bilby_cython-0.5.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["bilby_cython"], "install_dir": "site", "name": "bilby.cython", "package_type": "package", "sha256": "79200bf2b8ae1ac10f3095cdd3a5abeb6af5208b16f143762d90ebfc95ad11e0", "unvendored_tests": true, "version": "0.5.4"}, "bilby-cython-tests": {"depends": ["bilby.cython"], "file_name": "bilby-cython-tests.tar", "imports": [], "install_dir": "site", "name": "bilby.cython-tests", "package_type": "package", "sha256": "6e820a0a7205d64d232f4a5236012f2f110849c1699f396a483bb7824163e6dc", "unvendored_tests": false, "version": "0.5.4"}, "biopython": {"depends": ["numpy"], "file_name": "biopython-1.87-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["Bio", "BioSQL"], "install_dir": "site", "name": "biopython", "package_type": "package", "sha256": "ead5d11932412cb38c7c1fa351f01d58e8e08bb9b6e21234d508d659bce12e14", "unvendored_tests": false, "version": "1.87"}, "bitarray": {"depends": [], "file_name": "bitarray-3.8.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["bitarray"], "install_dir": "site", "name": "bitarray", "package_type": "package", "sha256": "7546a25e733eb23dc9d3fc4f4c5d26adf91f5d26cc20422007308707e40e6bd5", "unvendored_tests": true, "version": "3.8.1"}, "bitarray-tests": {"depends": ["bitarray"], "file_name": "bitarray-tests.tar", "imports": [], "install_dir": "site", "name": "bitarray-tests", "package_type": "package", "sha256": "ce1c0b249a871c45d86a1564a3f5a3214b7331c4267d378e952fe2b045140d5c", "unvendored_tests": false, "version": "3.8.1"}, "bitstring": {"depends": ["bitarray"], "file_name": "bitstring-4.4.0-py3-none-any.whl", "imports": ["bitstring"], "install_dir": "site", "name": "bitstring", "package_type": "package", "sha256": "f0ee49a5055b336f96787fc50a3f9f87a72f0ece544622a1bdf2f58be099d50d", "unvendored_tests": false, "version": "4.4.0"}, "bleach": {"depends": ["webencodings", "packaging", "six"], "file_name": "bleach-6.3.0-py3-none-any.whl", "imports": ["bleach"], "install_dir": "site", "name": "bleach", "package_type": "package", "sha256": "9feea175697d0e0f1f158707649f69641e82fc0dee4211e853c7108031e56949", "unvendored_tests": false, "version": "6.3.0"}, "bokeh": {"depends": ["contourpy", "numpy", "jinja2", "pandas", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml", "xyzservices"], "file_name": "bokeh-3.9.0-py3-none-any.whl", "imports": ["bokeh"], "install_dir": "site", "name": "bokeh", "package_type": "package", "sha256": "d07aa3f82875cc7dc6fa33fa4c322355387abf5183bf3b69d6395e9ac28d0edf", "unvendored_tests": false, "version": "3.9.0"}, "boost-histogram": {"depends": ["numpy"], "file_name": "boost_histogram-1.7.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["boost_histogram"], "install_dir": "site", "name": "boost-histogram", "package_type": "package", "sha256": "f87ca182ba03dced96f0d10f127c6f10ff31972c65d6ed730366dd3a501c847c", "unvendored_tests": false, "version": "1.7.1"}, "bottleneck": {"depends": ["numpy"], "file_name": "bottleneck-1.6.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["bottleneck"], "install_dir": "site", "name": "Bottleneck", "package_type": "package", "sha256": "05fe8867e043ec1d9c61706ffab30bf3e3f713ce1f73a6bc3f0906aed4379efb", "unvendored_tests": false, "version": "1.6.0"}, "brotli": {"depends": [], "file_name": "brotli-1.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["brotli"], "install_dir": "site", "name": "brotli", "package_type": "package", "sha256": "3c8bfbc8d2f98e7488a0bc0f2a97257515385da2e8d268f58617358b91980b87", "unvendored_tests": false, "version": "1.2.0"}, "cachetools": {"depends": [], "file_name": "cachetools-7.0.5-py3-none-any.whl", "imports": ["cachetools"], "install_dir": "site", "name": "cachetools", "package_type": "package", "sha256": "2fb7fde243da79d3a2e8ad189ca6e8bbbc02fed69d9f765d3894aebb8606130f", "unvendored_tests": false, "version": "7.0.5"}, "cartopy": {"depends": ["shapely", "pyshp", "pyproj", "matplotlib", "scipy"], "file_name": "cartopy-0.25.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cartopy"], "install_dir": "site", "name": "Cartopy", "package_type": "package", "sha256": "50ee5e39ccb1f44aad61c8e4ab85f2c7737d11fb550d6aa168c307e789201717", "unvendored_tests": true, "version": "0.25.0"}, "cartopy-tests": {"depends": ["Cartopy"], "file_name": "cartopy-tests.tar", "imports": [], "install_dir": "site", "name": "Cartopy-tests", "package_type": "package", "sha256": "1c96b382904c075666d10da5f0c2b082732c46fbc98072d9c7417bb6b16c1573", "unvendored_tests": false, "version": "0.25.0"}, "casadi": {"depends": ["numpy"], "file_name": "casadi-3.7.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["casadi"], "install_dir": "site", "name": "casadi", "package_type": "package", "sha256": "d855f4fb60751c1239a8fb281ed54aa6d7a07c47e7dbeee0683f758a36d350d7", "unvendored_tests": false, "version": "3.7.2"}, "cbor-diag": {"depends": [], "file_name": "cbor_diag-1.1.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cbor_diag"], "install_dir": "site", "name": "cbor-diag", "package_type": "package", "sha256": "d96a9f4810939567924f8291155fb408234286c6d6a7584b5776ca6a445a037e", "unvendored_tests": false, "version": "1.1.2"}, "certifi": {"depends": [], "file_name": "certifi-2026.4.22-py3-none-any.whl", "imports": ["certifi"], "install_dir": "site", "name": "certifi", "package_type": "package", "sha256": "93071d4b932b2c9d0f4aa9a74c8b320135d0cf9f8f8a2c8575b59ee57621d801", "unvendored_tests": false, "version": "2026.4.22"}, "cffi": {"depends": ["pycparser"], "file_name": "cffi-2.0.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cffi"], "install_dir": "site", "name": "cffi", "package_type": "package", "sha256": "757845812fc8d2c94b0f0fb664d542e7d6e098263fbb5cda3b89dca5d7eff6d3", "unvendored_tests": false, "version": "2.0.0"}, "cffi-example": {"depends": ["cffi"], "file_name": "cffi_example-0.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cffi_example"], "install_dir": "site", "name": "cffi_example", "package_type": "package", "sha256": "9825ee063e4acf187fded254808d6bb4e0e59f54db7df1a7039fde6be1069e54", "unvendored_tests": false, "version": "0.1"}, "cftime": {"depends": ["numpy"], "file_name": "cftime-1.6.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cftime"], "install_dir": "site", "name": "cftime", "package_type": "package", "sha256": "cf0797f0ab3800269298d7fb4b63cdfec05c57fb4e42ddc342e58b68a018b5a0", "unvendored_tests": false, "version": "1.6.5"}, "charset-normalizer": {"depends": [], "file_name": "charset_normalizer-3.4.7-py3-none-any.whl", "imports": ["charset_normalizer"], "install_dir": "site", "name": "charset-normalizer", "package_type": "package", "sha256": "fdb1aad0f2606f2c05b27de59beabd9c4fc897795996492ccc5e2b7ef2967248", "unvendored_tests": false, "version": "3.4.7"}, "clarabel": {"depends": ["numpy", "scipy"], "file_name": "clarabel-0.11.1-cp39-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["clarabel"], "install_dir": "site", "name": "clarabel", "package_type": "package", "sha256": "f7d1974d99136cbcc2a61442c3ea471554e4c59d2314d8fcaf716a86c8ca2b9e", "unvendored_tests": false, "version": "0.11.1"}, "click": {"depends": [], "file_name": "click-8.3.1-py3-none-any.whl", "imports": ["click"], "install_dir": "site", "name": "click", "package_type": "package", "sha256": "200b390f193f56180bfb06987ae9fbb4f3efded531356163b14371d7044469e7", "unvendored_tests": false, "version": "8.3.1"}, "cligj": {"depends": ["click"], "file_name": "cligj-0.7.2-py3-none-any.whl", "imports": ["cligj"], "install_dir": "site", "name": "cligj", "package_type": "package", "sha256": "ff37fb06db319ad13db8801148a7ed12ed4049bcb74ecfb4c730b978187d78d3", "unvendored_tests": false, "version": "0.7.2"}, "clingo": {"depends": ["cffi"], "file_name": "clingo-5.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["clingo"], "install_dir": "site", "name": "clingo", "package_type": "package", "sha256": "6355a327fae31cbf0252c3b1f20229b0cfdb762f83febb5f9c01c20e9da53c31", "unvendored_tests": false, "version": "5.8.0"}, "cloudpickle": {"depends": [], "file_name": "cloudpickle-3.1.2-py3-none-any.whl", "imports": ["cloudpickle"], "install_dir": "site", "name": "cloudpickle", "package_type": "package", "sha256": "f668f6a51e8e4f777b843a32aa9aeef228c2751b78cf54b40093e7171ada6fb6", "unvendored_tests": false, "version": "3.1.2"}, "cmyt": {"depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "file_name": "cmyt-2.0.2-py3-none-any.whl", "imports": ["cmyt"], "install_dir": "site", "name": "cmyt", "package_type": "package", "sha256": "ea96d300ce8f25953a24990274ddb48d95e677ef01c82175efd02ff9c40ed4b4", "unvendored_tests": false, "version": "2.0.2"}, "cobs": {"depends": [], "file_name": "cobs-1.2.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cobs"], "install_dir": "site", "name": "cobs", "package_type": "package", "sha256": "06d9e6b2a57ce3ac3c20cee9e9e827078958fb123bd684513af1b134d0c4fa06", "unvendored_tests": false, "version": "1.2.2"}, "colorspacious": {"depends": ["numpy"], "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "imports": ["colorspacious"], "install_dir": "site", "name": "colorspacious", "package_type": "package", "sha256": "1ef810a223c4ee11f45644a507190d17209579e4a765215ecc00a87fcd6d352e", "unvendored_tests": false, "version": "1.1.2"}, "contourpy": {"depends": ["numpy"], "file_name": "contourpy-1.3.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["contourpy"], "install_dir": "site", "name": "contourpy", "package_type": "package", "sha256": "8af5f4338988b30a65f5c81c0a3f335353546809538e81d35b572ed4595f80b6", "unvendored_tests": false, "version": "1.3.3"}, "coolprop": {"depends": ["numpy", "matplotlib"], "file_name": "coolprop-7.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["CoolProp"], "install_dir": "site", "name": "coolprop", "package_type": "package", "sha256": "81fdff8e25be7d90492c43d1409788dac9d07ed159761fbba15e33406d88bd0c", "unvendored_tests": true, "version": "7.2.0"}, "coolprop-tests": {"depends": ["coolprop"], "file_name": "coolprop-tests.tar", "imports": [], "install_dir": "site", "name": "coolprop-tests", "package_type": "package", "sha256": "68a7f157cf9d1e531f4986c25cc45c746caf3e7c22a97540a37616629539d7cf", "unvendored_tests": false, "version": "7.2.0"}, "coverage": {"depends": [], "file_name": "coverage-7.13.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["coverage"], "install_dir": "site", "name": "coverage", "package_type": "package", "sha256": "e9508c4e7112ba90d643844f76df5cf12d4cf5f6840e35c8db8b0cf79a436666", "unvendored_tests": false, "version": "7.13.5"}, "crc32c": {"depends": [], "file_name": "crc32c-2.8-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["crc32c"], "install_dir": "site", "name": "crc32c", "package_type": "package", "sha256": "611f5a037c41fe4a9fe606c5b001b3fb619a12be4f3b932bf624b46ea1fa3aeb", "unvendored_tests": false, "version": "2.8"}, "crcmod": {"depends": [], "file_name": "crcmod-1.7-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["crcmod"], "install_dir": "site", "name": "crcmod", "package_type": "package", "sha256": "4092ec01991782f5c18b26bdd5faac534dd13ca7eeed2c6c3710fd7c44f7e80f", "unvendored_tests": false, "version": "1.7"}, "cryptography": {"depends": ["six", "cffi"], "file_name": "cryptography-47.0.0-cp314-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["cryptography"], "install_dir": "site", "name": "cryptography", "package_type": "package", "sha256": "4e0e7e8e47613dd96110c640b15ee525db72a47946b8b06f8bcd0377c403fc5a", "unvendored_tests": false, "version": "47.0.0"}, "cssselect": {"depends": [], "file_name": "cssselect-1.4.0-py3-none-any.whl", "imports": ["cssselect"], "install_dir": "site", "name": "cssselect", "package_type": "package", "sha256": "3d2b826357fed9e01ee8ee7d420b150212f84871811d5158eda5284ce900f562", "unvendored_tests": false, "version": "1.4.0"}, "cvxpy-base": {"depends": ["numpy", "scipy", "clarabel"], "file_name": "cvxpy_base-1.8.2-py3-none-any.whl", "imports": ["cvxpy"], "install_dir": "site", "name": "cvxpy-base", "package_type": "package", "sha256": "ae61d3fcee03ab4b741cbe004a0e82c421eea1b08d8ac1b718489a31e6768905", "unvendored_tests": true, "version": "1.8.2"}, "cvxpy-base-tests": {"depends": ["cvxpy-base"], "file_name": "cvxpy-base-tests.tar", "imports": [], "install_dir": "site", "name": "cvxpy-base-tests", "package_type": "package", "sha256": "f4e13228d1fdbc25c3278b4a141e3fc0ecd040b1525f98345bd457b390e763be", "unvendored_tests": false, "version": "1.8.2"}, "cycler": {"depends": ["six"], "file_name": "cycler-0.12.1-py3-none-any.whl", "imports": ["cycler"], "install_dir": "site", "name": "cycler", "package_type": "package", "sha256": "3569bab200be7f85520bf64a3ff334b016e19441ba89b588d2625c3b89da09c7", "unvendored_tests": false, "version": "0.12.1"}, "cysignals": {"depends": [], "file_name": "cysignals-1.12.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cysignals"], "install_dir": "site", "name": "cysignals", "package_type": "package", "sha256": "b8ed985b70edaaf696d0b2e9705989d718b2197029a6e62f31d1bcba50cd3570", "unvendored_tests": false, "version": "1.12.3"}, "cytoolz": {"depends": ["toolz"], "file_name": "cytoolz-1.1.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cytoolz"], "install_dir": "site", "name": "cytoolz", "package_type": "package", "sha256": "75249b7d5d227c4cb25420dec90b82855f1deb730bf7d9cc33b71728a85bc04d", "unvendored_tests": true, "version": "1.1.0"}, "cytoolz-tests": {"depends": ["cytoolz"], "file_name": "cytoolz-tests.tar", "imports": [], "install_dir": "site", "name": "cytoolz-tests", "package_type": "package", "sha256": "2f4d16f91b936e5644c796bb66141a445ae3d40e152034a4aa3c356469893264", "unvendored_tests": false, "version": "1.1.0"}, "decorator": {"depends": [], "file_name": "decorator-5.2.1-py3-none-any.whl", "imports": ["decorator"], "install_dir": "site", "name": "decorator", "package_type": "package", "sha256": "791060972d212b89d6b64c646d940bd647d26d4e5ab3c8e1e8adbae4f1309f8b", "unvendored_tests": false, "version": "5.2.1"}, "demes": {"depends": ["attrs", "ruamel.yaml"], "file_name": "demes-0.2.3-py3-none-any.whl", "imports": ["demes"], "install_dir": "site", "name": "demes", "package_type": "package", "sha256": "b309418ea650960ea606a5994e6b3344ba7dd59bc9c2dcffddeeb5c8bd316a31", "unvendored_tests": false, "version": "0.2.3"}, "deprecated": {"depends": ["wrapt"], "file_name": "deprecated-1.3.1-py2.py3-none-any.whl", "imports": ["deprecated"], "install_dir": "site", "name": "deprecated", "package_type": "package", "sha256": "e21462ba83bf0c4a32e6b168d0d732b84d06cd95fa312df8e1ccb077e47b1fae", "unvendored_tests": false, "version": "1.3.1"}, "deprecation": {"depends": ["packaging"], "file_name": "deprecation-2.1.0-py2.py3-none-any.whl", "imports": ["deprecation"], "install_dir": "site", "name": "deprecation", "package_type": "package", "sha256": "934bb82d017ab64a48211090c3c848811347c5df83d5a0872274345a855a2a42", "unvendored_tests": false, "version": "2.1.0"}, "diskcache": {"depends": [], "file_name": "diskcache-5.6.3-py3-none-any.whl", "imports": ["diskcache"], "install_dir": "site", "name": "diskcache", "package_type": "package", "sha256": "c33d094aed8b8daba0e1056ffbb0fc16b8053adef6c27586c4f15b62e6500605", "unvendored_tests": false, "version": "5.6.3"}, "distlib": {"depends": [], "file_name": "distlib-0.4.0-py2.py3-none-any.whl", "imports": ["distlib"], "install_dir": "site", "name": "distlib", "package_type": "package", "sha256": "ca1b4112980d6b0cf6dfc9d5a55579395ad4e57d0943659cebc7528ee81be5fb", "unvendored_tests": false, "version": "0.4.0"}, "distro": {"depends": [], "file_name": "distro-1.9.0-py3-none-any.whl", "imports": ["distro"], "install_dir": "site", "name": "distro", "package_type": "package", "sha256": "56ae1ed8841379b6948b9a564555c1547907a0ecbf863e7cc42a265d0b2728ff", "unvendored_tests": false, "version": "1.9.0"}, "dnspython": {"depends": [], "file_name": "dnspython-2.8.0-py3-none-any.whl", "imports": ["dns"], "install_dir": "site", "name": "dnspython", "package_type": "package", "sha256": "087740d3b2bb9ac3ca01df6e09c03251e117600b32fda95e202dcd865859c213", "unvendored_tests": false, "version": "2.8.0"}, "docutils": {"depends": [], "file_name": "docutils-0.22.4-py3-none-any.whl", "imports": ["docutils"], "install_dir": "site", "name": "docutils", "package_type": "package", "sha256": "ecb7755f2afe8e65053f2ab85d1db723d25d830f2bbf80eea18c164715fefc0a", "unvendored_tests": false, "version": "0.22.4"}, "donfig": {"depends": ["pyyaml"], "file_name": "donfig-0.8.1.post1-py3-none-any.whl", "imports": ["donfig"], "install_dir": "site", "name": "donfig", "package_type": "package", "sha256": "f06bc9652c5120591b48db5e0213c5f608e6e5342eb65ef9504fb2bcf78e03b9", "unvendored_tests": true, "version": "0.8.1.post1"}, "donfig-tests": {"depends": ["donfig"], "file_name": "donfig-tests.tar", "imports": [], "install_dir": "site", "name": "donfig-tests", "package_type": "package", "sha256": "afaac9ca0a0788686428898babe7b5c2c25bbe0bb7bc045fc374678ee01561bb", "unvendored_tests": false, "version": "0.8.1.post1"}, "duckdb": {"depends": [], "file_name": "duckdb-1.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["duckdb"], "install_dir": "site", "name": "duckdb", "package_type": "package", "sha256": "4a17fac33af7e0816d30c1a74103fe93d0c1f21587f042844a8f2eeab8fd35f0", "unvendored_tests": false, "version": "1.5.1"}, "ewah-bool-utils": {"depends": ["numpy"], "file_name": "ewah_bool_utils-1.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["ewah_bool_utils"], "install_dir": "site", "name": "ewah_bool_utils", "package_type": "package", "sha256": "01b54472498df5464b0874ce165ddd9c6eddad6c21bbfb72df1d343c497dde99", "unvendored_tests": true, "version": "1.3.0"}, "ewah-bool-utils-tests": {"depends": ["ewah_bool_utils"], "file_name": "ewah-bool-utils-tests.tar", "imports": [], "install_dir": "site", "name": "ewah_bool_utils-tests", "package_type": "package", "sha256": "ef4d2810d3805e70e0b8eb309f9fc46bd510916b0f53e845d547badbfa92e120", "unvendored_tests": false, "version": "1.3.0"}, "exceptiongroup": {"depends": [], "file_name": "exceptiongroup-1.3.1-py3-none-any.whl", "imports": ["exceptiongroup"], "install_dir": "site", "name": "exceptiongroup", "package_type": "package", "sha256": "da3e3885b4f10485ddbe9d13c9cde6feaab7baff61a00099dec474111113f004", "unvendored_tests": false, "version": "1.3.1"}, "executing": {"depends": [], "file_name": "executing-2.2.1-py2.py3-none-any.whl", "imports": ["executing"], "install_dir": "site", "name": "executing", "package_type": "package", "sha256": "cc2c5f9bbd2cfc976c2827c3435c4d0ea013c7c6ed4bbbb33dfcc21ae376fd94", "unvendored_tests": false, "version": "2.2.1"}, "fastapi": {"depends": ["httpx", "jinja2", "pydantic", "starlette", "anyio", "annotated-doc"], "file_name": "fastapi-0.136.1-py3-none-any.whl", "imports": ["fastapi"], "install_dir": "site", "name": "fastapi", "package_type": "package", "sha256": "4637c38150c348d357a1dbe128fea60ba81b4d419bdf4532a3fe9b6eef3b8725", "unvendored_tests": false, "version": "0.136.1"}, "fiona": {"depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"], "file_name": "fiona-1.10.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["fiona"], "install_dir": "site", "name": "fiona", "package_type": "package", "sha256": "d104c07524010a344ca9d17d300cbbbb0346b2de4ec4718fd0542b1c53fcae11", "unvendored_tests": false, "version": "1.10.1"}, "fonttools": {"depends": [], "file_name": "fonttools-4.62.1-py3-none-any.whl", "imports": ["fontTools"], "install_dir": "site", "name": "fonttools", "package_type": "package", "sha256": "6d8caa09c191f26c47403499d6cff62f3fb9685b978baa047bf791862bcb298a", "unvendored_tests": false, "version": "4.62.1"}, "freesasa": {"depends": [], "file_name": "freesasa-2.2.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["freesasa"], "install_dir": "site", "name": "freesasa", "package_type": "package", "sha256": "1382fb95823f3e692b047a0106633d062eb91c129b9193518f518e216b47ae19", "unvendored_tests": false, "version": "2.2.1"}, "frozenlist": {"depends": [], "file_name": "frozenlist-1.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["frozenlist"], "install_dir": "site", "name": "frozenlist", "package_type": "package", "sha256": "283d6a832ba0847e71c753611ca882e34103cf45c52489c3c03fcc6ab1b9016b", "unvendored_tests": false, "version": "1.8.0"}, "fsspec": {"depends": [], "file_name": "fsspec-2026.3.0-py3-none-any.whl", "imports": ["fsspec"], "install_dir": "site", "name": "fsspec", "package_type": "package", "sha256": "ed9f0fdaffd4c7a95502a488dda1a4104017d4856fd37b35648b3443097d67b3", "unvendored_tests": true, "version": "2026.3.0"}, "fsspec-tests": {"depends": ["fsspec"], "file_name": "fsspec-tests.tar", "imports": [], "install_dir": "site", "name": "fsspec-tests", "package_type": "package", "sha256": "c7cb2c406355cc51235c79cb4935f20ac536c1bf2ce4fa9ee42f557578268493", "unvendored_tests": false, "version": "2026.3.0"}, "future": {"depends": [], "file_name": "future-1.0.0-py3-none-any.whl", "imports": ["future"], "install_dir": "site", "name": "future", "package_type": "package", "sha256": "4df2fa86fa6bb3e16382962877fa469bd4c34b0727778065df28c83194e30cbc", "unvendored_tests": true, "version": "1.0.0"}, "future-tests": {"depends": ["future"], "file_name": "future-tests.tar", "imports": [], "install_dir": "site", "name": "future-tests", "package_type": "package", "sha256": "87af61eb0b54822adf881f8c0f100b8f248bd96ceb870e78ac238d126a02918e", "unvendored_tests": false, "version": "1.0.0"}, "galpy": {"depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"], "file_name": "galpy-1.11.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["galpy"], "install_dir": "site", "name": "galpy", "package_type": "package", "sha256": "bcc0571db64a92b198dc3194096392d3bd8b891c88ae66d327e554457f9f17ef", "unvendored_tests": false, "version": "1.11.2"}, "geopandas": {"depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "file_name": "geopandas-1.1.3-py3-none-any.whl", "imports": ["geopandas"], "install_dir": "site", "name": "geopandas", "package_type": "package", "sha256": "fdd989196544d754f4b398132925702393951c29754dd495378bba71773f9c6d", "unvendored_tests": true, "version": "1.1.3"}, "geopandas-tests": {"depends": ["geopandas"], "file_name": "geopandas-tests.tar", "imports": [], "install_dir": "site", "name": "geopandas-tests", "package_type": "package", "sha256": "bdf4419386837f618b3d2a52d6625791b943d6499ad92e8c8996e97b748dde4f", "unvendored_tests": false, "version": "1.1.3"}, "gmpy2": {"depends": [], "file_name": "gmpy2-2.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["gmpy2"], "install_dir": "site", "name": "gmpy2", "package_type": "package", "sha256": "85e7920c72fdcf760e89ab5617e83db7ec1a241a9b8b7a02e4e13b3691f10dae", "unvendored_tests": false, "version": "2.3.0"}, "google-crc32c": {"depends": [], "file_name": "google_crc32c-1.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["google_crc32c"], "install_dir": "site", "name": "google-crc32c", "package_type": "package", "sha256": "9a4c7be63ea36f56795750371c2d8639656ff73721bc0b4c6f6332e38bfb8cef", "unvendored_tests": false, "version": "1.8.0"}, "h11": {"depends": [], "file_name": "h11-0.16.0-py3-none-any.whl", "imports": ["h11"], "install_dir": "site", "name": "h11", "package_type": "package", "sha256": "7a6b1873432ad52e5d2fd147f3239aa5dd2ec9e502fe2aeb73c1e15c7e13545d", "unvendored_tests": false, "version": "0.16.0"}, "h3": {"depends": [], "file_name": "h3-4.4.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["h3"], "install_dir": "site", "name": "h3", "package_type": "package", "sha256": "cd24caf1fec6e372927eda58a04c5a5c6ffe60f14a483dd7cc5ead0ed3921fb2", "unvendored_tests": false, "version": "4.4.2"}, "h5py": {"depends": ["numpy", "pkgconfig"], "file_name": "h5py-3.13.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["h5py"], "install_dir": "site", "name": "h5py", "package_type": "package", "sha256": "1bfda90e046654273d7a3c1e50d6de75e583f328140c2c81044a07f9ecbbfeee", "unvendored_tests": true, "version": "3.13.0"}, "h5py-tests": {"depends": ["h5py"], "file_name": "h5py-tests.tar", "imports": [], "install_dir": "site", "name": "h5py-tests", "package_type": "package", "sha256": "2d7f657d04eca6da48d9da7ddd2876010ba1a0e982c796c7072d1301db9d957a", "unvendored_tests": false, "version": "3.13.0"}, "healpy": {"depends": ["numpy", "astropy"], "file_name": "healpy-1.19.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["healpy"], "install_dir": "site", "name": "healpy", "package_type": "package", "sha256": "f95b46f903eede8170fa55219fba525ef93877424dc3f637afcec52be28a32d3", "unvendored_tests": true, "version": "1.19.0"}, "healpy-tests": {"depends": ["healpy"], "file_name": "healpy-tests.tar", "imports": [], "install_dir": "site", "name": "healpy-tests", "package_type": "package", "sha256": "81074d227c85d852002a9b07f71f1479ff87b0fc8e2390bfc29709fd24cb9c27", "unvendored_tests": false, "version": "1.19.0"}, "highspy": {"depends": ["numpy"], "file_name": "highspy-1.13.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["highspy"], "install_dir": "site", "name": "highspy", "package_type": "package", "sha256": "8e7d773b1e86db97aee07b6e678883a61fc26066759cb78c4546339bb7ca0843", "unvendored_tests": false, "version": "1.13.1"}, "html5lib": {"depends": ["webencodings", "six"], "file_name": "html5lib-1.1-py2.py3-none-any.whl", "imports": ["html5lib"], "install_dir": "site", "name": "html5lib", "package_type": "package", "sha256": "7aa486a68c84c7e4504f504e850e72a26babdeb1d23966e4d6be18119a894aec", "unvendored_tests": false, "version": "1.1"}, "httpcore": {"depends": ["certifi", "h11"], "file_name": "httpcore-1.0.9-py3-none-any.whl", "imports": ["httpcore"], "install_dir": "site", "name": "httpcore", "package_type": "package", "sha256": "830b23a174d22273fbc2000cd92d5644922e540831909ff2208f771b7c209c25", "unvendored_tests": false, "version": "1.0.9"}, "httpx": {"depends": [], "file_name": "httpx-0.28.1-py3-none-any.whl", "imports": ["httpx"], "install_dir": "site", "name": "httpx", "package_type": "package", "sha256": "80fdeea708b53a5ce509b3669b89b67124acdd241f7bfd131ff8bf215d620400", "unvendored_tests": false, "version": "0.28.1"}, "idna": {"depends": [], "file_name": "idna-3.11-py3-none-any.whl", "imports": ["idna"], "install_dir": "site", "name": "idna", "package_type": "package", "sha256": "1c8df7b3fbc3e2767635c9fd38a8e970ddc0bb36d94ff223250a348e1dfa0e7d", "unvendored_tests": false, "version": "3.11"}, "igraph": {"depends": ["texttable"], "file_name": "igraph-1.0.0-cp39-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["igraph"], "install_dir": "site", "name": "igraph", "package_type": "package", "sha256": "97e32f3fb8e05f61a5a1d655b18e5ba53eb602dba30fdf654fcbddeef93ddcfc", "unvendored_tests": false, "version": "1.0.0"}, "imageio": {"depends": ["numpy", "pillow"], "file_name": "imageio-2.37.3-py3-none-any.whl", "imports": ["imageio"], "install_dir": "site", "name": "imageio", "package_type": "package", "sha256": "d4a85837a12593eb71a75bb4a3c6a40eea38298d08f205598df20734d2ae4eed", "unvendored_tests": false, "version": "2.37.3"}, "iminuit": {"depends": ["numpy"], "file_name": "iminuit-2.30.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["iminuit"], "install_dir": "site", "name": "iminuit", "package_type": "package", "sha256": "4b73bec92fb52a1fca4433da295a229d2cc87620b733d0dffd78fb9861d277d0", "unvendored_tests": false, "version": "2.30.1"}, "iniconfig": {"depends": [], "file_name": "iniconfig-2.3.0-py3-none-any.whl", "imports": ["iniconfig"], "install_dir": "site", "name": "iniconfig", "package_type": "package", "sha256": "1cd8448eea1c863c970703ed01fa1baf655043150cee772772253e3461b701ed", "unvendored_tests": false, "version": "2.3.0"}, "ipython": {"depends": ["asttokens", "decorator", "executing", "matplotlib-inline", "prompt_toolkit", "pure-eval", "pygments", "six", "stack-data", "traitlets", "wcwidth"], "file_name": "ipython-9.12.0-py3-none-any.whl", "imports": ["IPython"], "install_dir": "site", "name": "ipython", "package_type": "package", "sha256": "e7ec8a64f4c3be1b32b653134e71f4c136184e6b29f91493cb4ab318aa34113d", "unvendored_tests": true, "version": "9.12.0"}, "ipython-tests": {"depends": ["ipython"], "file_name": "ipython-tests.tar", "imports": [], "install_dir": "site", "name": "ipython-tests", "package_type": "package", "sha256": "a1e74c4de21306f048b48a67ed525d3856d175f30f90458ce2a3512916190091", "unvendored_tests": false, "version": "9.12.0"}, "jedi": {"depends": ["parso"], "file_name": "jedi-0.19.2-py2.py3-none-any.whl", "imports": ["jedi"], "install_dir": "site", "name": "jedi", "package_type": "package", "sha256": "3d65f786600178d41b4657d12ca5c332ea7ee45484510bee74bc5a9046e7a48f", "unvendored_tests": true, "version": "0.19.2"}, "jedi-tests": {"depends": ["jedi"], "file_name": "jedi-tests.tar", "imports": [], "install_dir": "site", "name": "jedi-tests", "package_type": "package", "sha256": "9e107ab31ed7f8d9224b13823e69275a02302dd0ebc60c2c0405bd003aef85c7", "unvendored_tests": false, "version": "0.19.2"}, "jinja2": {"depends": ["markupsafe"], "file_name": "jinja2-3.1.6-py3-none-any.whl", "imports": ["jinja2"], "install_dir": "site", "name": "Jinja2", "package_type": "package", "sha256": "e92e71ef947608f60ab57f223b3c9ffedfa261a649d0301524a940ed393ee833", "unvendored_tests": false, "version": "3.1.6"}, "jiter": {"depends": [], "file_name": "jiter-0.13.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["jiter"], "install_dir": "site", "name": "jiter", "package_type": "package", "sha256": "a058ea3b1f99a0fab68e96f9a331d65593452f1a1fce965dcd56fd32ee03db1a", "unvendored_tests": false, "version": "0.13.0"}, "joblib": {"depends": [], "file_name": "joblib-1.5.3-py3-none-any.whl", "imports": ["joblib"], "install_dir": "site", "name": "joblib", "package_type": "package", "sha256": "b2263b31e10db62fc9b7d307a270064017040001e6c24a8d6aff1db2d62d4821", "unvendored_tests": true, "version": "1.5.3"}, "joblib-tests": {"depends": ["joblib"], "file_name": "joblib-tests.tar", "imports": [], "install_dir": "site", "name": "joblib-tests", "package_type": "package", "sha256": "1901989e1888a53904bfb567fa5d27e255e72bd2c65edfac77aa3fd56896834a", "unvendored_tests": false, "version": "1.5.3"}, "jsonpatch": {"depends": ["jsonpointer"], "file_name": "jsonpatch-1.33-py2.py3-none-any.whl", "imports": ["jsonpatch"], "install_dir": "site", "name": "jsonpatch", "package_type": "package", "sha256": "b2b8833d0a866edc12ea9e9dcb8e06b473a144b34141bc8f1063e37885b401ba", "unvendored_tests": false, "version": "1.33"}, "jsonpointer": {"depends": [], "file_name": "jsonpointer-3.1.1-py3-none-any.whl", "imports": ["jsonpointer"], "install_dir": "site", "name": "jsonpointer", "package_type": "package", "sha256": "daeadffa7d0dd447dbde7a21583fc50f2e0bfab3efba6ed228cb4f617fd8b482", "unvendored_tests": false, "version": "3.1.1"}, "jsonschema": {"depends": ["attrs", "pyrsistent", "referencing", "jsonschema_specifications"], "file_name": "jsonschema-4.26.0-py3-none-any.whl", "imports": ["jsonschema"], "install_dir": "site", "name": "jsonschema", "package_type": "package", "sha256": "d2d29b9c8db3520b39feac084c913bbe79372f088ffb49fb59f44a1a7b57724a", "unvendored_tests": true, "version": "4.26.0"}, "jsonschema-specifications": {"depends": ["referencing"], "file_name": "jsonschema_specifications-2025.9.1-py3-none-any.whl", "imports": ["jsonschema_specifications"], "install_dir": "site", "name": "jsonschema_specifications", "package_type": "package", "sha256": "ad8df6243b990e76af93135ab36903225cdc03e1730fc433f93ac3934a50d05b", "unvendored_tests": true, "version": "2025.9.1"}, "jsonschema-specifications-tests": {"depends": ["jsonschema_specifications"], "file_name": "jsonschema-specifications-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema_specifications-tests", "package_type": "package", "sha256": "01de369c9af413ea993b20a95f16934e4983bebe6b883ed1c93f71678ddee491", "unvendored_tests": false, "version": "2025.9.1"}, "jsonschema-tests": {"depends": ["jsonschema"], "file_name": "jsonschema-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema-tests", "package_type": "package", "sha256": "4b8bc3acfa97b81464f27d357ec18c34c3e9a57c889c98d45f4acb375507c08c", "unvendored_tests": false, "version": "4.26.0"}, "kiwisolver": {"depends": [], "file_name": "kiwisolver-1.5.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["kiwisolver"], "install_dir": "site", "name": "kiwisolver", "package_type": "package", "sha256": "7591db9cc1181815eeefb2e7c5b5622a18a3fa334788e1b49eb3e8ad7f90186f", "unvendored_tests": false, "version": "1.5.0"}, "lakers-python": {"depends": [], "file_name": "lakers_python-0.6.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["lakers"], "install_dir": "site", "name": "lakers-python", "package_type": "package", "sha256": "63d2d8e59fc90bb59ad8222890c5460fe999974fb92e2b42eaf8ee170ea89b06", "unvendored_tests": false, "version": "0.6.2"}, "lazy-loader": {"depends": [], "file_name": "lazy_loader-0.5-py3-none-any.whl", "imports": ["lazy_loader"], "install_dir": "site", "name": "lazy_loader", "package_type": "package", "sha256": "7c11bbbabb45eb8cf9b9674d4d9defc24ae63e0f66baa2ea538deedb5bceec41", "unvendored_tests": false, "version": "0.5"}, "lazy-object-proxy": {"depends": [], "file_name": "lazy_object_proxy-1.12.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["lazy_object_proxy"], "install_dir": "site", "name": "lazy-object-proxy", "package_type": "package", "sha256": "2a90592a36f0e1ab5c3ddc3d63248001d8f604606bf4a3ae8f662df1a03fd050", "unvendored_tests": false, "version": "1.12.0"}, "libcrc32c": {"depends": [], "file_name": "libcrc32c-1.1.0.zip", "imports": [], "install_dir": "dynlib", "name": "libcrc32c", "package_type": "shared_library", "sha256": "169b2b64b92beef35578835446aefe94553fb316ffc01b9c4f653b39b9e77aa2", "unvendored_tests": false, "version": "1.1.0"}, "libcst": {"depends": ["pyyaml"], "file_name": "libcst-1.8.6-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["libcst"], "install_dir": "site", "name": "libcst", "package_type": "package", "sha256": "d081efd5f5bf610b6c3c5d6a240df0dea70846be35c98a80052b079a1cef83dc", "unvendored_tests": true, "version": "1.8.6"}, "libcst-tests": {"depends": ["libcst"], "file_name": "libcst-tests.tar", "imports": [], "install_dir": "site", "name": "libcst-tests", "package_type": "package", "sha256": "9720735162ec21b8829d5656cdcf21d69364c859ce6042ccb3b82dded2450b35", "unvendored_tests": false, "version": "1.8.6"}, "libgdal": {"depends": ["libgeos"], "file_name": "libgdal-3.8.3.zip", "imports": [], "install_dir": "dynlib", "name": "libgdal", "package_type": "shared_library", "sha256": "40f6439b818b75c005ad761cedcc766e4f50f0c85133824224b286ad79c5141e", "unvendored_tests": false, "version": "3.8.3"}, "libgeos": {"depends": [], "file_name": "libgeos-3.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "libgeos", "package_type": "shared_library", "sha256": "4afd10fb9e121e12ede733c92319efa5cbde9949af69be848a126213f6816c7d", "unvendored_tests": false, "version": "3.12.1"}, "libhdf5": {"depends": [], "file_name": "libhdf5-1.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "libhdf5", "package_type": "shared_library", "sha256": "5e2e84be80f54cb8b6572ee8e07ba41e537042d6676d17ae1f604727b4351720", "unvendored_tests": false, "version": "1.12.1"}, "libheif": {"depends": [], "file_name": "libheif-1.12.0.zip", "imports": [], "install_dir": "dynlib", "name": "libheif", "package_type": "shared_library", "sha256": "9f7a3bfb1803fbd2f848520ff7281c49015af0840fb0b295e94302734df8b364", "unvendored_tests": false, "version": "1.12.0"}, "libopenblas": {"depends": [], "file_name": "libopenblas-0.3.28.zip", "imports": [], "install_dir": "dynlib", "name": "libopenblas", "package_type": "shared_library", "sha256": "5489d82d8b00ddd3ba283055ba14e2a03d870f1b7e9c07873d6064a8c306ea4c", "unvendored_tests": false, "version": "0.3.28"}, "libproj": {"depends": [], "file_name": "libproj-9.6.2.zip", "imports": [], "install_dir": "dynlib", "name": "libproj", "package_type": "shared_library", "sha256": "8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85", "unvendored_tests": false, "version": "9.6.2"}, "librt": {"depends": [], "file_name": "librt-0.8.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["librt"], "install_dir": "site", "name": "librt", "package_type": "package", "sha256": "8e31c83c95a6bdc6511b915dfe6fe4896a1f47aa76b510557c398dac91dcd31d", "unvendored_tests": false, "version": "0.8.1"}, "libsuitesparse": {"depends": ["libopenblas"], "file_name": "libsuitesparse-5.11.0.zip", "imports": [], "install_dir": "dynlib", "name": "libsuitesparse", "package_type": "shared_library", "sha256": "72c1fa730dfa1fdc7fbddb134031fcbfdbca18cbbbef5d540421f850bf3f73ca", "unvendored_tests": false, "version": "5.11.0"}, "libtaglib": {"depends": [], "file_name": "libtaglib-2.1.1.zip", "imports": [], "install_dir": "dynlib", "name": "libtaglib", "package_type": "shared_library", "sha256": "28d71b342be8f77f3da7c221973be1dd7ac781dd19e183e579918ea8915a72e7", "unvendored_tests": false, "version": "2.1.1"}, "lightgbm": {"depends": ["numpy", "scipy", "scikit-learn"], "file_name": "lightgbm-4.6.0-py3-none-pyemscripten_2026_0_wasm32.whl", "imports": ["lightgbm"], "install_dir": "site", "name": "lightgbm", "package_type": "package", "sha256": "1383802204df7e6ac2068b144b495e1a562f2b79bf658f4de5ac93e8da56544f", "unvendored_tests": false, "version": "4.6.0"}, "logbook": {"depends": ["typing-extensions"], "file_name": "logbook-1.9.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["logbook"], "install_dir": "site", "name": "logbook", "package_type": "package", "sha256": "c0f85541516c19d4f54958ef70314cf1c6058bae96e3bf0c60c87fe43785418a", "unvendored_tests": false, "version": "1.9.2"}, "lxml": {"depends": [], "file_name": "lxml-6.0.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["lxml"], "install_dir": "site", "name": "lxml", "package_type": "package", "sha256": "f37f82e09f6d7957aa167440db7ef683439cc3ce1befac1d2ca27e35bd7c95d4", "unvendored_tests": false, "version": "6.0.2"}, "lz4": {"depends": [], "file_name": "lz4-4.4.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["lz4"], "install_dir": "site", "name": "lz4", "package_type": "package", "sha256": "52a18b615af23a21f628c5bb30d9f2447fa9ea3013eecdd6312618c3a76ac228", "unvendored_tests": false, "version": "4.4.5"}, "markupsafe": {"depends": [], "file_name": "markupsafe-3.0.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["markupsafe"], "install_dir": "site", "name": "MarkupSafe", "package_type": "package", "sha256": "70d3fb95b0946e2b4a2c182b4e10ddff5e498ebe2bb596a0aa179f0844c56c67", "unvendored_tests": false, "version": "3.0.3"}, "matplotlib": {"depends": ["contourpy", "cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz"], "file_name": "matplotlib-3.10.8-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "install_dir": "site", "name": "matplotlib", "package_type": "package", "sha256": "2867b2003ee66d0d2478423f783ec035d432c6560ae86d0e58d096ff98cab6a8", "unvendored_tests": true, "version": "3.10.8"}, "matplotlib-inline": {"depends": ["traitlets"], "file_name": "matplotlib_inline-0.2.1-py3-none-any.whl", "imports": ["matplotlib-inline"], "install_dir": "site", "name": "matplotlib-inline", "package_type": "package", "sha256": "16932830c5cd0f7d3ab13642cb68124534d88baf6f29733fdaa1c5e9c9323837", "unvendored_tests": false, "version": "0.2.1"}, "matplotlib-tests": {"depends": ["matplotlib"], "file_name": "matplotlib-tests.tar", "imports": [], "install_dir": "site", "name": "matplotlib-tests", "package_type": "package", "sha256": "262a0505d91ff32ab64aafc0f26e90707d315c8bc04e07455fe0307950d57455", "unvendored_tests": false, "version": "3.10.8"}, "memory-allocator": {"depends": [], "file_name": "memory_allocator-0.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["memory_allocator"], "install_dir": "site", "name": "memory-allocator", "package_type": "package", "sha256": "a044a0569d71833e38c7e47fdfe5b7a0064d174facaccfbc45cbac57dcfaa6a0", "unvendored_tests": false, "version": "0.2.0"}, "micropip": {"depends": [], "file_name": "micropip-0.11.1-py3-none-any.whl", "imports": ["micropip"], "install_dir": "site", "name": "micropip", "package_type": "package", "sha256": "668cd1270f480ac9f93da4a2b4873a252743e4ad3da723d37a7e4c637c4f2314", "unvendored_tests": false, "version": "0.11.1"}, "ml-dtypes": {"depends": ["numpy"], "file_name": "ml_dtypes-0.5.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["ml_dtypes"], "install_dir": "site", "name": "ml_dtypes", "package_type": "package", "sha256": "0a1fae1e5c9a473a65246d83f91fb3388076fbb7a9bc1a91e40fb376047b8563", "unvendored_tests": false, "version": "0.5.4"}, "mmh3": {"depends": [], "file_name": "mmh3-5.2.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["mmh3"], "install_dir": "site", "name": "mmh3", "package_type": "package", "sha256": "cd381ca02d45cb16cd7f72961fd8d9f050ee03a01596688b5f822771df5a3e41", "unvendored_tests": false, "version": "5.2.1"}, "more-itertools": {"depends": [], "file_name": "more_itertools-11.0.1-py3-none-any.whl", "imports": ["more_itertools"], "install_dir": "site", "name": "more-itertools", "package_type": "package", "sha256": "d348eb309bd03b414df82dc8bd5b2e1717417434849aeee58d9b4b1b2dff8e7e", "unvendored_tests": false, "version": "11.0.1"}, "mpmath": {"depends": [], "file_name": "mpmath-1.4.1-py3-none-any.whl", "imports": ["mpmath"], "install_dir": "site", "name": "mpmath", "package_type": "package", "sha256": "625a8215b09034296e02e6a432a26997e08a865e2637d43a7b13ab5faa59306e", "unvendored_tests": true, "version": "1.4.1"}, "mpmath-tests": {"depends": ["mpmath"], "file_name": "mpmath-tests.tar", "imports": [], "install_dir": "site", "name": "mpmath-tests", "package_type": "package", "sha256": "ed57401c5d0f9feb1603b0ffbd088097adf87372e330e1e2eee1e1622221257e", "unvendored_tests": false, "version": "1.4.1"}, "msgpack": {"depends": [], "file_name": "msgpack-1.1.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["msgpack"], "install_dir": "site", "name": "msgpack", "package_type": "package", "sha256": "7888085522053f041fe9c6b1aa5053e90444ea020562dd1097fc58282c7bec07", "unvendored_tests": false, "version": "1.1.2"}, "msgspec": {"depends": [], "file_name": "msgspec-0.20.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["msgspec"], "install_dir": "site", "name": "msgspec", "package_type": "package", "sha256": "c83b7ee0a54570ef95f02c5a665355dbade5fb476b9edd1433335e1272238bb2", "unvendored_tests": false, "version": "0.20.0"}, "msprime": {"depends": ["numpy", "newick", "tskit", "demes", "rpds-py"], "file_name": "msprime-1.4.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["msprime"], "install_dir": "site", "name": "msprime", "package_type": "package", "sha256": "39a9c4f5a9158a7a6235cce55c016943d3dc2b39f7b25b8c81046fc1970db300", "unvendored_tests": false, "version": "1.4.1"}, "multidict": {"depends": [], "file_name": "multidict-6.7.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["multidict"], "install_dir": "site", "name": "multidict", "package_type": "package", "sha256": "c2a38d453cafdc024c05cfcf199a86d323aa103e53d2c87060695ba8ea108319", "unvendored_tests": false, "version": "6.7.1"}, "munch": {"depends": ["setuptools", "six"], "file_name": "munch-4.0.0-py2.py3-none-any.whl", "imports": ["munch"], "install_dir": "site", "name": "munch", "package_type": "package", "sha256": "6179e44ed0dcf51ca2a261e0488b82c4ca75a26c1785586c787dac5909caccc9", "unvendored_tests": false, "version": "4.0.0"}, "mypy": {"depends": ["librt"], "file_name": "mypy-1.19.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["mypyc", "mypy"], "install_dir": "site", "name": "mypy", "package_type": "package", "sha256": "d4d4e1ad30335236cb6aca2d7c3cdfcfa15195fc7e5a6d6b93e6e2b39b81a963", "unvendored_tests": true, "version": "1.19.1"}, "mypy-tests": {"depends": ["mypy"], "file_name": "mypy-tests.tar", "imports": [], "install_dir": "site", "name": "mypy-tests", "package_type": "package", "sha256": "7cf7c14d40069e7b5d8f9471a0d1b65df5e9d3710d879ac9c65b909872f2e21d", "unvendored_tests": false, "version": "1.19.1"}, "narwhals": {"depends": [], "file_name": "narwhals-2.18.1-py3-none-any.whl", "imports": ["narwhals"], "install_dir": "site", "name": "narwhals", "package_type": "package", "sha256": "d4a958aa61fca388a6f93ab733c4c45ebee05aaaf8e1cfb97d51987e0399f0bc", "unvendored_tests": false, "version": "2.18.1"}, "ndindex": {"depends": [], "file_name": "ndindex-1.10.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["ndindex"], "install_dir": "site", "name": "ndindex", "package_type": "package", "sha256": "0381ba4e0aa7b15b9a659d8735c2da98e5bd59f02c42273c3eb80d00000df4f2", "unvendored_tests": true, "version": "1.10.1"}, "ndindex-tests": {"depends": ["ndindex"], "file_name": "ndindex-tests.tar", "imports": [], "install_dir": "site", "name": "ndindex-tests", "package_type": "package", "sha256": "90cb33fcde8f34aa22f3bba7e36f2f9a54b7d956cf055a486c3e40e9adfbd7b7", "unvendored_tests": false, "version": "1.10.1"}, "netcdf4": {"depends": ["numpy", "packaging", "cftime", "certifi"], "file_name": "netcdf4-1.7.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["netCDF4"], "install_dir": "site", "name": "netcdf4", "package_type": "package", "sha256": "f3b876051eaa947c22909c180240116f579a4f057c210d4336488f4a190d9909", "unvendored_tests": false, "version": "1.7.4"}, "networkx": {"depends": ["decorator", "setuptools", "matplotlib", "numpy"], "file_name": "networkx-3.6.1-py3-none-any.whl", "imports": ["networkx"], "install_dir": "site", "name": "networkx", "package_type": "package", "sha256": "de0354124c06f1b24dbad90defacf49764ab04dd616a13b685493670e199755c", "unvendored_tests": true, "version": "3.6.1"}, "networkx-tests": {"depends": ["networkx"], "file_name": "networkx-tests.tar", "imports": [], "install_dir": "site", "name": "networkx-tests", "package_type": "package", "sha256": "757b17ecfbd4a7f917d813ff976a4283e20c7971cfac4ffa8326d81da21a7ab8", "unvendored_tests": false, "version": "3.6.1"}, "newick": {"depends": [], "file_name": "newick-1.11.0-py2.py3-none-any.whl", "imports": ["newick"], "install_dir": "site", "name": "newick", "package_type": "package", "sha256": "7cfae654b5249f3073285fcfd41a741e025da374bcefd178a4983477b439652d", "unvendored_tests": false, "version": "1.11.0"}, "nh3": {"depends": [], "file_name": "nh3-0.3.4-cp38-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["nh3"], "install_dir": "site", "name": "nh3", "package_type": "package", "sha256": "beac0668523837dffece22490f091d52df17030d14eb6cae85678f5a84b5ecf5", "unvendored_tests": false, "version": "0.3.4"}, "nlopt": {"depends": ["numpy"], "file_name": "nlopt-2.9.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["nlopt"], "install_dir": "site", "name": "nlopt", "package_type": "package", "sha256": "84f992771a7c4d7e09990f19c095aa93ecf6fbdab670a0a878ead54ba407b8ba", "unvendored_tests": false, "version": "2.9.1"}, "nltk": {"depends": ["regex"], "file_name": "nltk-3.9.4-py3-none-any.whl", "imports": ["nltk"], "install_dir": "site", "name": "nltk", "package_type": "package", "sha256": "dc1050a5aec8f3babaa7a6995bc194f81bad637bcfcff0b70527d685d7071896", "unvendored_tests": true, "version": "3.9.4"}, "nltk-tests": {"depends": ["nltk"], "file_name": "nltk-tests.tar", "imports": [], "install_dir": "site", "name": "nltk-tests", "package_type": "package", "sha256": "8ef4b2dcc0144c4cf6b5f9f6b4d07186ccce60ff116c1f3ec944bc1c6bb1f28c", "unvendored_tests": false, "version": "3.9.4"}, "numcodecs": {"depends": ["deprecated", "numpy"], "file_name": "numcodecs-0.15.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["numcodecs"], "install_dir": "site", "name": "numcodecs", "package_type": "package", "sha256": "0e796eafa0bf5a563a34406bbed9963ee116b14e6c539a853a266b30e3c35860", "unvendored_tests": true, "version": "0.15.1"}, "numcodecs-tests": {"depends": ["numcodecs"], "file_name": "numcodecs-tests.tar", "imports": [], "install_dir": "site", "name": "numcodecs-tests", "package_type": "package", "sha256": "70f55a3708eee999ad7540c75ee1bee0467d409e29cd4b0684745fb325db6dda", "unvendored_tests": false, "version": "0.15.1"}, "numpy": {"depends": [], "file_name": "numpy-2.4.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["numpy"], "install_dir": "site", "name": "numpy", "package_type": "package", "sha256": "0cad9c1b91f0082e4f959bc0e0bf5835a2efbba6ab3b1e9d1fe6e7e564cca98e", "unvendored_tests": false, "version": "2.4.3"}, "numpy-tests": {"depends": [], "file_name": "numpy_tests-2.4.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["numpy-tests"], "install_dir": "site", "name": "numpy-tests", "package_type": "package", "sha256": "0f8d0a18c19c75cb7e2ee1d2f53cedb377284092995e636484711211c7f4c6f2", "unvendored_tests": false, "version": "2.4.3"}, "openai": {"depends": ["httpx", "pydantic", "typing-extensions", "distro", "anyio", "jiter"], "file_name": "openai-2.30.0-py3-none-any.whl", "imports": ["openai"], "install_dir": "site", "name": "openai", "package_type": "package", "sha256": "365c3b95509e66a2303130a94f6a66d78e4260d1922ddca272b1d397b299a581", "unvendored_tests": false, "version": "2.30.0"}, "opencv-python": {"depends": ["numpy"], "file_name": "opencv_python-4.11.0.86-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["cv2"], "install_dir": "site", "name": "opencv-python", "package_type": "package", "sha256": "7aff09fdabbb4c34b0df6178cfdfee19d32c2fafb042f4270cff84d3165e47ef", "unvendored_tests": false, "version": "4.11.0.86"}, "optlang": {"depends": ["sympy", "six", "swiglpk"], "file_name": "optlang-1.9.0-py2.py3-none-any.whl", "imports": ["optlang"], "install_dir": "site", "name": "optlang", "package_type": "package", "sha256": "87eb845e51ad93d4812c13ec312bec06bc352e018cac7619ea0e2e34bebc5674", "unvendored_tests": true, "version": "1.9.0"}, "optlang-tests": {"depends": ["optlang"], "file_name": "optlang-tests.tar", "imports": [], "install_dir": "site", "name": "optlang-tests", "package_type": "package", "sha256": "4aa7bc7eb9cc97be969f2ee6a32b750dfa30213b89f1fa4d140bb32fb77cdef4", "unvendored_tests": false, "version": "1.9.0"}, "orjson": {"depends": [], "file_name": "orjson-3.11.8-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["orjson"], "install_dir": "site", "name": "orjson", "package_type": "package", "sha256": "8de621cd40c20b316db1fcf7981807f5125a0dc7e65cac8b5c6856ea5f5f247d", "unvendored_tests": false, "version": "3.11.8"}, "packaging": {"depends": [], "file_name": "packaging-26.1-py3-none-any.whl", "imports": ["packaging"], "install_dir": "site", "name": "packaging", "package_type": "package", "sha256": "2719239437268bcea22845651a242f2c252e2ed984645161dd203546f2a52219", "unvendored_tests": false, "version": "26.1"}, "pandas": {"depends": ["numpy", "python-dateutil", "pytz"], "file_name": "pandas-3.0.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pandas"], "install_dir": "site", "name": "pandas", "package_type": "package", "sha256": "51475a2026084c3b600566658fffc95efc5a71593472ab8a561d92a504a15a3e", "unvendored_tests": true, "version": "3.0.2"}, "pandas-tests": {"depends": ["pandas"], "file_name": "pandas-tests.tar", "imports": [], "install_dir": "site", "name": "pandas-tests", "package_type": "package", "sha256": "0dd88507dfe8ab502e68ac679b2b1d0187b3490b9c1f65aeb8df020b091ff3f0", "unvendored_tests": false, "version": "3.0.2"}, "parso": {"depends": [], "file_name": "parso-0.8.6-py2.py3-none-any.whl", "imports": ["parso"], "install_dir": "site", "name": "parso", "package_type": "package", "sha256": "31fad5b0c039c6769850f94b6c7289a738371dbc1b514f497fe997c0c3d90217", "unvendored_tests": false, "version": "0.8.6"}, "patsy": {"depends": ["numpy", "six"], "file_name": "patsy-1.0.2-py2.py3-none-any.whl", "imports": ["patsy"], "install_dir": "site", "name": "patsy", "package_type": "package", "sha256": "b47a353700dee69323fbc56dff35e19075b0f02537b3aafa0d4dd2d702af4598", "unvendored_tests": true, "version": "1.0.2"}, "patsy-tests": {"depends": ["patsy"], "file_name": "patsy-tests.tar", "imports": [], "install_dir": "site", "name": "patsy-tests", "package_type": "package", "sha256": "897dc50dfd17fa5e83e7c357a34e5ddace039865006c8cb92ad8528b3fd32a0f", "unvendored_tests": false, "version": "1.0.2"}, "pcodec": {"depends": ["numpy"], "file_name": "pcodec-1.0.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pcodec"], "install_dir": "site", "name": "pcodec", "package_type": "package", "sha256": "ff3f7669f78213b7b9c048012cdec96d64d44ae734f02566055a54bd61dedce4", "unvendored_tests": false, "version": "1.0.1"}, "peewee": {"depends": [], "file_name": "peewee-4.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["peewee"], "install_dir": "site", "name": "peewee", "package_type": "package", "sha256": "5d15c6e19fa05301e5be1e5361da8c51b531f12ca206fe7ff6faabc06fb42e81", "unvendored_tests": true, "version": "4.0.4"}, "peewee-tests": {"depends": ["peewee"], "file_name": "peewee-tests.tar", "imports": [], "install_dir": "site", "name": "peewee-tests", "package_type": "package", "sha256": "997d8f93ed6223b35840ced7d06fda2a0da0752380ab3ebfdba69978af8087c3", "unvendored_tests": false, "version": "4.0.4"}, "phispy": {"depends": ["biopython", "numpy", "scikit-learn"], "file_name": "phispy-5.0.6-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["PhiSpyModules", "PhiSpyRepeatFinder"], "install_dir": "site", "name": "phispy", "package_type": "package", "sha256": "1ab164679688cb4be5cb50adff229cb62c1a9c961f9535ccdb60f1df5b0f9b4b", "unvendored_tests": false, "version": "5.0.6"}, "pi-heif": {"depends": ["cffi", "pillow"], "file_name": "pi_heif-1.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pi_heif"], "install_dir": "site", "name": "pi-heif", "package_type": "package", "sha256": "72c6a8e9496d4e27dc46a4881a0b48ca3f83b8f30390812450271d582ef1d7d7", "unvendored_tests": false, "version": "1.3.0"}, "pillow": {"depends": [], "file_name": "pillow-12.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["PIL"], "install_dir": "site", "name": "Pillow", "package_type": "package", "sha256": "a50d83a8a76d646768e99e93ed5bf365d0b83563fd8b597e77562e75c8f575a9", "unvendored_tests": false, "version": "12.2.0"}, "pillow-heif": {"depends": ["cffi", "pillow"], "file_name": "pillow_heif-1.3.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pillow_heif"], "install_dir": "site", "name": "pillow-heif", "package_type": "package", "sha256": "b5bd2840cb5fcc119f84b358edcf5cd807f7e4b806f85727cec92ed6e0a4b723", "unvendored_tests": false, "version": "1.3.0"}, "pkgconfig": {"depends": [], "file_name": "pkgconfig-1.6.0-py3-none-any.whl", "imports": ["pkgconfig"], "install_dir": "site", "name": "pkgconfig", "package_type": "package", "sha256": "81157722e71ec21c4aca36e97140eb92f44152fc765421e9cbfcddb3b3cc9e6c", "unvendored_tests": false, "version": "1.6.0"}, "platformdirs": {"depends": [], "file_name": "platformdirs-4.9.4-py3-none-any.whl", "imports": ["platformdirs"], "install_dir": "site", "name": "platformdirs", "package_type": "package", "sha256": "df6b888248eaf3d0ae8938f73c00a57755d66df97b6f8a280f5332cae626aa12", "unvendored_tests": false, "version": "4.9.4"}, "pluggy": {"depends": [], "file_name": "pluggy-1.6.0-py3-none-any.whl", "imports": ["pluggy"], "install_dir": "site", "name": "pluggy", "package_type": "package", "sha256": "8358dcb4259589a6dbb54b42d0c437801bac4c69e843e617e3b529e9b7926fda", "unvendored_tests": false, "version": "1.6.0"}, "ply": {"depends": [], "file_name": "ply-3.11-py2.py3-none-any.whl", "imports": ["ply"], "install_dir": "site", "name": "ply", "package_type": "package", "sha256": "aada8dd65148100455fbdead843a4aabff4c412c6c3ea3efd32393be5c9bf0f2", "unvendored_tests": false, "version": "3.11"}, "polars": {"depends": [], "file_name": "polars-1.33.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["polars"], "install_dir": "site", "name": "polars", "package_type": "package", "sha256": "3eefe347ffa293521fe54b25b4bd89baea72017eb0738c23dec9028643f66b1b", "unvendored_tests": false, "version": "1.33.1"}, "prompt-toolkit": {"depends": ["wcwidth"], "file_name": "prompt_toolkit-3.0.52-py3-none-any.whl", "imports": ["prompt_toolkit"], "install_dir": "site", "name": "prompt_toolkit", "package_type": "package", "sha256": "a9319fb4f0bd1a1186ff8d47cb06674de431c594f5982ff0fa2bfd57b92a1d04", "unvendored_tests": false, "version": "3.0.52"}, "propcache": {"depends": [], "file_name": "propcache-0.4.1-py3-none-any.whl", "imports": ["propcache"], "install_dir": "site", "name": "propcache", "package_type": "package", "sha256": "0110ae103d00b3993dc5c0cf4fb8904239875a62c4a70d24674a118d03a54a9c", "unvendored_tests": false, "version": "0.4.1"}, "protobuf": {"depends": [], "file_name": "protobuf-7.34.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["google"], "install_dir": "site", "name": "protobuf", "package_type": "package", "sha256": "2337db4f407b60eb09fb041275d865b7cf8c4b5af66a410fb21b4ae2f4aefb66", "unvendored_tests": false, "version": "7.34.1"}, "pure-eval": {"depends": [], "file_name": "pure_eval-0.2.3-py3-none-any.whl", "imports": ["pure_eval"], "install_dir": "site", "name": "pure-eval", "package_type": "package", "sha256": "385e27ddb09a827d352a572bbbdf57bed25f93c1385725c0d6c8d76a9247bdac", "unvendored_tests": false, "version": "0.2.3"}, "py": {"depends": [], "file_name": "py-1.11.0-py2.py3-none-any.whl", "imports": ["py"], "install_dir": "site", "name": "py", "package_type": "package", "sha256": "be81603a61919214bdaa4bf9962df662a221ac36a9306b0fbfef1a4188954f72", "unvendored_tests": false, "version": "1.11.0"}, "pyarrow": {"depends": ["numpy", "pandas", "pyodide-unix-timezones"], "file_name": "pyarrow-22.0.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyarrow"], "install_dir": "site", "name": "pyarrow", "package_type": "package", "sha256": "5ec8dcef05b34cdc452e65d7c4e88baaa9b7ff3a91cedb00529d1715d6bf5f0b", "unvendored_tests": false, "version": "22.0.0"}, "pyclipper": {"depends": [], "file_name": "pyclipper-1.4.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyclipper"], "install_dir": "site", "name": "pyclipper", "package_type": "package", "sha256": "08ac6670349bb59062b66443556a36bece92ef7d99068394cbf9ce87c6efe474", "unvendored_tests": false, "version": "1.4.0"}, "pycparser": {"depends": [], "file_name": "pycparser-3.0-py3-none-any.whl", "imports": ["pycparser"], "install_dir": "site", "name": "pycparser", "package_type": "package", "sha256": "fab73d094251fa60eef1b744db416f4f1fae95b18741b207870b65aa2f3479ed", "unvendored_tests": false, "version": "3.0"}, "pycryptodome": {"depends": [], "file_name": "pycryptodome-3.23.0-cp37-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["Crypto"], "install_dir": "site", "name": "pycryptodome", "package_type": "package", "sha256": "63a29e78ab83afc62df29b26c5fe428c3d7a05ab5e8312c14b8ec51a62f09538", "unvendored_tests": true, "version": "3.23.0"}, "pycryptodome-tests": {"depends": ["pycryptodome"], "file_name": "pycryptodome-tests.tar", "imports": [], "install_dir": "site", "name": "pycryptodome-tests", "package_type": "package", "sha256": "7d5bac3bf76937dc5db2654b048de4721e67244613d5cd477742f7a3d71e9dc4", "unvendored_tests": false, "version": "3.23.0"}, "pydantic": {"depends": ["typing-extensions", "pydantic_core", "annotated-types", "typing-inspection"], "file_name": "pydantic-2.12.5-py3-none-any.whl", "imports": ["pydantic"], "install_dir": "site", "name": "pydantic", "package_type": "package", "sha256": "f27dd6df3cbc35ce8fdc56571bcd431e724dbee4c48aef4012a33201bf737b68", "unvendored_tests": false, "version": "2.12.5"}, "pydantic-core": {"depends": ["typing-extensions"], "file_name": "pydantic_core-2.41.5-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pydantic_core"], "install_dir": "site", "name": "pydantic_core", "package_type": "package", "sha256": "fad0d59f3602537b4b0342ba6f1a997062b991dffe40f74722cc2b69cb95b075", "unvendored_tests": false, "version": "2.41.5"}, "pydoc-data": {"depends": [], "file_name": "pydoc_data-1.0.0-py2.py3-none-any.whl", "imports": ["pydoc_data"], "install_dir": "site", "name": "pydoc_data", "package_type": "package", "sha256": "4d56d58cd86590088d892487b9a909cafdd139797f6c4ce5fbfe7e7e10e5f265", "unvendored_tests": false, "version": "1.0.0"}, "pyerfa": {"depends": ["numpy"], "file_name": "pyerfa-2.0.1.5-cp39-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["erfa"], "install_dir": "site", "name": "pyerfa", "package_type": "package", "sha256": "4965ba76433ce57e9f71962020cb4501b0c5aa00f7f68df880e835338c70bcbd", "unvendored_tests": true, "version": "2.0.1.5"}, "pyerfa-tests": {"depends": ["pyerfa"], "file_name": "pyerfa-tests.tar", "imports": [], "install_dir": "site", "name": "pyerfa-tests", "package_type": "package", "sha256": "36d4d9d649e639f40eb566e3b97bfa35e0d6776edaa737febc65c96b8d8a649a", "unvendored_tests": false, "version": "2.0.1.5"}, "pygame-ce": {"depends": [], "file_name": "pygame_ce-2.5.7-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pygame"], "install_dir": "site", "name": "pygame-ce", "package_type": "package", "sha256": "cb4110ae867f54702354a50c98a8c07adb30a23fb2922421ae593c1f307b117d", "unvendored_tests": false, "version": "2.5.7"}, "pygments": {"depends": [], "file_name": "pygments-2.20.0-py3-none-any.whl", "imports": ["pygments"], "install_dir": "site", "name": "Pygments", "package_type": "package", "sha256": "72b3a2c9c1f6eae60e2023e19d2d706cc0a6e0b2c40cc7fd94b9264a380e7569", "unvendored_tests": false, "version": "2.20.0"}, "pyheif": {"depends": ["cffi"], "file_name": "pyheif-0.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyheif"], "install_dir": "site", "name": "pyheif", "package_type": "package", "sha256": "7b4710788e8dff3a7532018eb5636cde5851a4b1d24806bb96f4c131b0f0114e", "unvendored_tests": false, "version": "0.8.0"}, "pyiceberg": {"depends": ["click", "cachetools", "fsspec", "mmh3", "pydantic", "pyparsing", "pyroaring", "requests", "rich", "sortedcontainers", "sqlalchemy", "strictyaml"], "file_name": "pyiceberg-0.11.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyiceberg"], "install_dir": "site", "name": "pyiceberg", "package_type": "package", "sha256": "c6b6209a498acfe34cfb9b9b8e99e854090d33736e05e0bd6867f2a1c35f07c9", "unvendored_tests": false, "version": "0.11.1"}, "pyinstrument": {"depends": [], "file_name": "pyinstrument-5.1.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyinstrument"], "install_dir": "site", "name": "pyinstrument", "package_type": "package", "sha256": "34797b20f5228d961a92d9f12fca867c45fcaf35ea1d289a6c6de0dba29c6510", "unvendored_tests": false, "version": "5.1.2"}, "pymongo": {"depends": ["dnspython"], "file_name": "pymongo-4.16.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pymongo", "gridfs"], "install_dir": "site", "name": "pymongo", "package_type": "package", "sha256": "34415ef94bbfc12863dbcbca9b048d7f4d6e8dec96cf8d5c7be266278db039de", "unvendored_tests": false, "version": "4.16.0"}, "pymupdf": {"depends": [], "file_name": "pymupdf-1.27.2.2-cp314-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["pymupdf", "fitz"], "install_dir": "site", "name": "PyMuPDF", "package_type": "package", "sha256": "d4372bb93be6eda3ecd0ea5c203ff1522d8f177121829fe7257122de89bc1cf3", "unvendored_tests": false, "version": "1.27.2.2"}, "pynacl": {"depends": ["cffi"], "file_name": "pynacl-1.6.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["nacl"], "install_dir": "site", "name": "pynacl", "package_type": "package", "sha256": "5a890d6cf83d53a465dea4b9d4b168c3dbfd7b0ada201e8306d16b03166f72c7", "unvendored_tests": false, "version": "1.6.2"}, "pyodide-http": {"depends": [], "file_name": "pyodide_http-0.2.2-py3-none-any.whl", "imports": ["pyodide_http"], "install_dir": "site", "name": "pyodide-http", "package_type": "package", "sha256": "c1bcb12d64854b0f5365ba34e684e04c389eaa8210eb3c5312db828e26fc3e35", "unvendored_tests": false, "version": "0.2.2"}, "pyodide-unix-timezones": {"depends": [], "file_name": "pyodide_unix_timezones-1.0.0-py3-none-any.whl", "imports": ["unix_timezones"], "install_dir": "site", "name": "pyodide-unix-timezones", "package_type": "package", "sha256": "f2677e2cd3c636d14149a2130eeffe9d5bc30a32ed9e80ca455ca69ed23b3c17", "unvendored_tests": false, "version": "1.0.0"}, "pyparsing": {"depends": [], "file_name": "pyparsing-3.3.2-py3-none-any.whl", "imports": ["pyparsing"], "install_dir": "site", "name": "pyparsing", "package_type": "package", "sha256": "101eece4e324f842bf46e6f821fe5bc62d79b9ebfa3b399b6aff0e0ab0ee400f", "unvendored_tests": false, "version": "3.3.2"}, "pyproj": {"depends": ["certifi"], "file_name": "pyproj-3.7.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyproj"], "install_dir": "site", "name": "pyproj", "package_type": "package", "sha256": "5b2f39f2bece8d5b69035a099c844e9fc7969801b5045c1b6928e7ba43a5a2b3", "unvendored_tests": false, "version": "3.7.2"}, "pyroaring": {"depends": [], "file_name": "pyroaring-1.0.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyroaring"], "install_dir": "site", "name": "pyroaring", "package_type": "package", "sha256": "7cc8d7f6fb867ad5dc7739b5a3f6e05c56f9644cc138d14b2ae7523eebfb902f", "unvendored_tests": false, "version": "1.0.4"}, "pyrodigal": {"depends": [], "file_name": "pyrodigal-3.7.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyrodigal"], "install_dir": "site", "name": "pyrodigal", "package_type": "package", "sha256": "deffc9214cd92cb01e17796bea2efb8b76a671f1d21f3dea27e89875503163c8", "unvendored_tests": true, "version": "3.7.1"}, "pyrodigal-tests": {"depends": ["pyrodigal"], "file_name": "pyrodigal-tests.tar", "imports": [], "install_dir": "site", "name": "pyrodigal-tests", "package_type": "package", "sha256": "483321a5e49bb0ca0138007d5b5cba910983c88e589594d608469029720a59f3", "unvendored_tests": false, "version": "3.7.1"}, "pyrsistent": {"depends": [], "file_name": "pyrsistent-0.20.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["_pyrsistent_version", "pyrsistent"], "install_dir": "site", "name": "pyrsistent", "package_type": "package", "sha256": "76419c4464827bcec17ac9ce1686d1d9b4a57b8e014d48d76de3f73c444c0034", "unvendored_tests": false, "version": "0.20.0"}, "pysam": {"depends": [], "file_name": "pysam-0.23.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pysam"], "install_dir": "site", "name": "pysam", "package_type": "package", "sha256": "434f380b709f4f5d7ad6164949bb42d71d6ad7410e1c00d5e904e13e4b8e0bfc", "unvendored_tests": false, "version": "0.23.0"}, "pyshp": {"depends": [], "file_name": "pyshp-3.0.3-py3-none-any.whl", "imports": ["shapefile"], "install_dir": "site", "name": "pyshp", "package_type": "package", "sha256": "5c1c20f6f3877ca6ed54d6e3da0f60fb53cb090103cad427165a569d01084cfd", "unvendored_tests": false, "version": "3.0.3"}, "pytaglib": {"depends": [], "file_name": "pytaglib-3.2.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["taglib"], "install_dir": "site", "name": "pytaglib", "package_type": "package", "sha256": "e02dbf8f0d69962664b9a049950d005e10cf8ac90ae8da9f48224dd706d43def", "unvendored_tests": false, "version": "3.2.0"}, "pytest": {"depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup", "pygments"], "file_name": "pytest-9.0.2-py3-none-any.whl", "imports": ["_pytest", "pytest"], "install_dir": "site", "name": "pytest", "package_type": "package", "sha256": "53053e6052c428bac5aa8d6adc9ee73077c6d10d34881d3fdffc7eb47ca0e4c8", "unvendored_tests": false, "version": "9.0.2"}, "pytest-asyncio": {"depends": ["pytest"], "file_name": "pytest_asyncio-0.25.3-py3-none-any.whl", "imports": ["pytest_asyncio"], "install_dir": "site", "name": "pytest-asyncio", "package_type": "package", "sha256": "c477dbe5cce557b982a85f1ae0c4f65805af34b2e6d8be6ffe63a1fc1cfc1ee6", "unvendored_tests": false, "version": "0.25.3"}, "pytest-benchmark": {"depends": [], "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "imports": ["pytest_benchmark"], "install_dir": "site", "name": "pytest-benchmark", "package_type": "package", "sha256": "265907a3ce436a612448ee6d6e39a4b36254801af17d09742a95948fcba20278", "unvendored_tests": false, "version": "4.0.0"}, "pytest-httpx": {"depends": ["httpx", "pytest", "httpcore"], "file_name": "pytest_httpx-0.36.0-py3-none-any.whl", "imports": ["pytest_httpx"], "install_dir": "site", "name": "pytest_httpx", "package_type": "package", "sha256": "ca7d6048cca2a641e9eeed8275d39f7a58a4d3bd7608b59b843a72cf18502485", "unvendored_tests": false, "version": "0.36.0"}, "python-calamine": {"depends": ["packaging"], "file_name": "python_calamine-0.6.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["python_calamine"], "install_dir": "site", "name": "python-calamine", "package_type": "package", "sha256": "9b4eca877e7f67fcd63b56079d856d315b5751e484a462c5e38ac1879d7a108b", "unvendored_tests": false, "version": "0.6.2"}, "python-dateutil": {"depends": ["six"], "file_name": "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", "imports": ["dateutil"], "install_dir": "site", "name": "python-dateutil", "package_type": "package", "sha256": "e0dad39eec43965d30ef0dbe870617bd5a7ca795c65fda722a7ab2bbd2b747e3", "unvendored_tests": false, "version": "2.9.0.post0"}, "python-flint": {"depends": [], "file_name": "python_flint-0.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["flint"], "install_dir": "site", "name": "python-flint", "package_type": "package", "sha256": "41c203caaf46b5cbdc40dccf4cd210ac7f0f748a819e285c62d9a019df5a0c23", "unvendored_tests": false, "version": "0.8.0"}, "python-flirt": {"depends": [], "file_name": "python_flirt-0.9.10-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["flirt"], "install_dir": "site", "name": "python-flirt", "package_type": "package", "sha256": "0c95b2ac87c9f788cd378a602d12dd3924bb6965cd2e38a9ad2cc4492cc97dcd", "unvendored_tests": false, "version": "0.9.10"}, "python-sat": {"depends": ["six"], "file_name": "python_sat-1.8.dev26-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pysat"], "install_dir": "site", "name": "python-sat", "package_type": "package", "sha256": "38cd81b473e50bd8f6bc69d957bd2cce477d5979a3b20a0099230312a97a699d", "unvendored_tests": false, "version": "1.8.dev26"}, "python-solvespace": {"depends": [], "file_name": "python_solvespace-3.0.8-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["python_solvespace"], "install_dir": "site", "name": "python-solvespace", "package_type": "package", "sha256": "d5421127c4b63d3b497214704b4a570834c5b333e6a4819b5603e21442219beb", "unvendored_tests": false, "version": "3.0.8"}, "pytz": {"depends": [], "file_name": "pytz-2026.1.post1-py2.py3-none-any.whl", "imports": ["pytz"], "install_dir": "site", "name": "pytz", "package_type": "package", "sha256": "b746aea4d621b01e8c9c5e8e3a6498daecec99f5bffa429beaf3cd6483b14f61", "unvendored_tests": false, "version": "2026.1.post1"}, "pywavelets": {"depends": ["numpy"], "file_name": "pywavelets-1.9.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pywt"], "install_dir": "site", "name": "pywavelets", "package_type": "package", "sha256": "87d48ef7c6fb86674c6a41d1b24b24f8fa200815ce4e226dc34f263644df4cf2", "unvendored_tests": true, "version": "1.9.0"}, "pywavelets-tests": {"depends": ["pywavelets"], "file_name": "pywavelets-tests.tar", "imports": [], "install_dir": "site", "name": "pywavelets-tests", "package_type": "package", "sha256": "50910bf44ea60b35074ab79efeee0dc815138d7ea6222abe3193a33f8237ecb2", "unvendored_tests": false, "version": "1.9.0"}, "pyxirr": {"depends": [], "file_name": "pyxirr-0.10.8-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["pyxirr"], "install_dir": "site", "name": "pyxirr", "package_type": "package", "sha256": "e7ec55a87a3377d6f75c3d0e2b2c4555cd9893fbf47b26a45162c72e40dbb576", "unvendored_tests": false, "version": "0.10.8"}, "pyyaml": {"depends": [], "file_name": "pyyaml-6.0.3-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["_yaml", "yaml"], "install_dir": "site", "name": "pyyaml", "package_type": "package", "sha256": "2d30008b0dac84ea05f1ba400837918826368bec76e856798f995f25c630086b", "unvendored_tests": false, "version": "6.0.3"}, "rasterio": {"depends": ["numpy", "affine", "attrs", "certifi", "click", "cligj"], "file_name": "rasterio-1.5.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["rasterio"], "install_dir": "site", "name": "rasterio", "package_type": "package", "sha256": "e5283bdb56216058bd718d9cc63dbd22d7367450aabd5b8cafc26f4b7f67c608", "unvendored_tests": false, "version": "1.5.0"}, "rateslib": {"depends": ["numpy", "pandas", "matplotlib"], "file_name": "rateslib-2.7.1-cp310-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["rateslib"], "install_dir": "site", "name": "rateslib", "package_type": "package", "sha256": "68d084741e4ef2208f90222d8326906c0a4a382c37993df6f66b645798983b3d", "unvendored_tests": false, "version": "2.7.1"}, "rebound": {"depends": ["numpy"], "file_name": "rebound-4.4.7-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["rebound"], "install_dir": "site", "name": "rebound", "package_type": "package", "sha256": "4a62db045e6684cb0346590095d5bae2e384e1376cca89a418eabc5f0834b266", "unvendored_tests": false, "version": "4.4.7"}, "reboundx": {"depends": ["rebound", "numpy"], "file_name": "reboundx-4.4.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["reboundx"], "install_dir": "site", "name": "reboundx", "package_type": "package", "sha256": "37548fecf0821c1d9e5b6b6b0c03905708b6a78614235cf08075f3642755c1aa", "unvendored_tests": false, "version": "4.4.1"}, "referencing": {"depends": ["attrs", "rpds-py", "typing-extensions"], "file_name": "referencing-0.37.0-py3-none-any.whl", "imports": ["referencing"], "install_dir": "site", "name": "referencing", "package_type": "package", "sha256": "ae7bf99d7fc3f1f3a44a208aa00ad39f1e89037b67a2f699a11887e432e84b0f", "unvendored_tests": true, "version": "0.37.0"}, "referencing-tests": {"depends": ["referencing"], "file_name": "referencing-tests.tar", "imports": [], "install_dir": "site", "name": "referencing-tests", "package_type": "package", "sha256": "8980bd7a318df905735b13bd6c172f0c664b22015f56ef67ab203b5f62cbcd4c", "unvendored_tests": false, "version": "0.37.0"}, "regex": {"depends": [], "file_name": "regex-2026.3.32-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["regex"], "install_dir": "site", "name": "regex", "package_type": "package", "sha256": "116203af92638f05a67791cc5a217f860bfab7f6635a41cb6dce08e2691ae6bc", "unvendored_tests": true, "version": "2026.3.32"}, "regex-tests": {"depends": ["regex"], "file_name": "regex-tests.tar", "imports": [], "install_dir": "site", "name": "regex-tests", "package_type": "package", "sha256": "45165dad242c5399cb090bec7bc3e73d3b78e7475725eb31980981d6e8af2ccc", "unvendored_tests": false, "version": "2026.3.32"}, "requests": {"depends": ["charset-normalizer", "idna", "urllib3", "certifi"], "file_name": "requests-2.33.1-py3-none-any.whl", "imports": ["requests"], "install_dir": "site", "name": "requests", "package_type": "package", "sha256": "6a7c3f883c3b3daa44f03430d812e0b2ff7b9c1714d64aef6418be0e18b51780", "unvendored_tests": false, "version": "2.33.1"}, "retrying": {"depends": ["six"], "file_name": "retrying-1.4.2-py3-none-any.whl", "imports": ["retrying"], "install_dir": "site", "name": "retrying", "package_type": "package", "sha256": "9e01636b579b24749d9f965e9004e0cd8b10d86712d43c1357827ae726d019e4", "unvendored_tests": false, "version": "1.4.2"}, "rich": {"depends": [], "file_name": "rich-14.3.3-py3-none-any.whl", "imports": ["rich"], "install_dir": "site", "name": "rich", "package_type": "package", "sha256": "8e7422e326746554e7f0dd20444830913208cb98e4b0ef1a129f1cc13a63763b", "unvendored_tests": false, "version": "14.3.3"}, "rpds-py": {"depends": [], "file_name": "rpds_py-0.30.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["rpds"], "install_dir": "site", "name": "rpds-py", "package_type": "package", "sha256": "3b419aa82348a3b54e2e0c47d734bb91753175c7f75ec8e0315300728e761ceb", "unvendored_tests": false, "version": "0.30.0"}, "ruamel-yaml": {"depends": [], "file_name": "ruamel_yaml-0.19.1-py3-none-any.whl", "imports": ["ruamel"], "install_dir": "site", "name": "ruamel.yaml", "package_type": "package", "sha256": "eec1c6fae3e4ebf2784c05309c5238a3ca58ac2b71384ae8660fb6eb568af252", "unvendored_tests": false, "version": "0.19.1"}, "safetensors": {"depends": ["numpy"], "file_name": "safetensors-0.7.0-cp38-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["safetensors"], "install_dir": "site", "name": "safetensors", "package_type": "package", "sha256": "bfa0f826a4404063373e256dc48f08cf8b1b77f67371793c959bcfbadc842ce2", "unvendored_tests": false, "version": "0.7.0"}, "scikit-image": {"depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets", "lazy_loader"], "file_name": "scikit_image-0.25.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["skimage"], "install_dir": "site", "name": "scikit-image", "package_type": "package", "sha256": "ebde167f651748b29adc37d70b4ace2fe5066541c2c00e1b8a1dc99acd92c586", "unvendored_tests": true, "version": "0.25.2"}, "scikit-image-tests": {"depends": ["scikit-image"], "file_name": "scikit-image-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-image-tests", "package_type": "package", "sha256": "f05e2a4ac0d5be4a9ec8e15d1af25be33a9670cd3c513e116168964375b9aab2", "unvendored_tests": false, "version": "0.25.2"}, "scikit-learn": {"depends": ["scipy", "joblib", "threadpoolctl"], "file_name": "scikit_learn-1.8.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["sklearn"], "install_dir": "site", "name": "scikit-learn", "package_type": "package", "sha256": "2ebb90e80c0efc5fe4d392197d6838878a7cd8c899c1aa59369d18d0ffe13ca9", "unvendored_tests": true, "version": "1.8.0"}, "scikit-learn-tests": {"depends": ["scikit-learn"], "file_name": "scikit-learn-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-learn-tests", "package_type": "package", "sha256": "87d182659274e4b46314902dc685efbd944c37bacb5098e0f4c53640a92b6f6e", "unvendored_tests": false, "version": "1.8.0"}, "scipy": {"depends": ["numpy"], "file_name": "scipy-1.18.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["scipy"], "install_dir": "site", "name": "scipy", "package_type": "package", "sha256": "4ef1569eac793bec84a92fa2eaf24eafb4529ff10c5ed87d1e335063f26142f3", "unvendored_tests": true, "version": "1.18.0"}, "scipy-tests": {"depends": ["scipy"], "file_name": "scipy-tests.tar", "imports": [], "install_dir": "site", "name": "scipy-tests", "package_type": "package", "sha256": "81d55b1106f90ab1c10ebe3037b48574e276ff7b9f01c9f00186b61fed590aaa", "unvendored_tests": false, "version": "1.18.0"}, "screed": {"depends": [], "file_name": "screed-1.1.3-py2.py3-none-any.whl", "imports": ["bigtests", "screed"], "install_dir": "site", "name": "screed", "package_type": "package", "sha256": "3ddcc3126948b32aa9de96156c54041341d1b36487196c8bd669fc4cdd56791d", "unvendored_tests": true, "version": "1.1.3"}, "screed-tests": {"depends": ["screed"], "file_name": "screed-tests.tar", "imports": [], "install_dir": "site", "name": "screed-tests", "package_type": "package", "sha256": "3f40e2eea4b7de7e149d0ee9ff5f1e88467fb887a002056777ce5f167ae26083", "unvendored_tests": false, "version": "1.1.3"}, "sentencepiece": {"depends": [], "file_name": "sentencepiece-0.2.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["sentencepiece"], "install_dir": "site", "name": "sentencepiece", "package_type": "package", "sha256": "c86d4f7b7cbe52a4af3550ff77a5108bc06c88fa9e161fb544715e974010b3ec", "unvendored_tests": false, "version": "0.2.1"}, "setuptools": {"depends": ["pyparsing"], "file_name": "setuptools-82.0.1-py3-none-any.whl", "imports": ["_distutils_hack", "setuptools"], "install_dir": "site", "name": "setuptools", "package_type": "package", "sha256": "43e06cea3e40c5a8594b20341557153e446eec6997e031762c290e0b94639457", "unvendored_tests": true, "version": "82.0.1"}, "setuptools-tests": {"depends": ["setuptools"], "file_name": "setuptools-tests.tar", "imports": [], "install_dir": "site", "name": "setuptools-tests", "package_type": "package", "sha256": "2e171885528f54769b9a0b881a82233b815f1dd5a40bc414bb3fd52f2ce9da63", "unvendored_tests": false, "version": "82.0.1"}, "shapely": {"depends": ["numpy"], "file_name": "shapely-2.1.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["shapely"], "install_dir": "site", "name": "shapely", "package_type": "package", "sha256": "c3e30e879f92e3600819ee25adf6d7c631ab060af8332335a24311f33e935093", "unvendored_tests": true, "version": "2.1.2"}, "shapely-tests": {"depends": ["shapely"], "file_name": "shapely-tests.tar", "imports": [], "install_dir": "site", "name": "shapely-tests", "package_type": "package", "sha256": "7c00b43ba494ef6ed2f294efcb898cd96e1df7329e96a6059c177919166ca575", "unvendored_tests": false, "version": "2.1.2"}, "simplejson": {"depends": [], "file_name": "simplejson-3.20.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["simplejson"], "install_dir": "site", "name": "simplejson", "package_type": "package", "sha256": "7280823a6b2a34b23dd91053df2582b7d81d0cdbdafab6a23f5e0545d559f4e1", "unvendored_tests": true, "version": "3.20.2"}, "simplejson-tests": {"depends": ["simplejson"], "file_name": "simplejson-tests.tar", "imports": [], "install_dir": "site", "name": "simplejson-tests", "package_type": "package", "sha256": "a3723f4bb513efc0b8da7be330a28edfce45531ce097427eb83ec540bc7fda6a", "unvendored_tests": false, "version": "3.20.2"}, "sisl": {"depends": ["pyparsing", "numpy", "scipy", "tqdm", "xarray", "pandas", "matplotlib"], "file_name": "sisl-0.16.4-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["sisl_toolbox", "sisl"], "install_dir": "site", "name": "sisl", "package_type": "package", "sha256": "fffbeefb14cc84852b1244e50106ec88f32e99ecb2dc589cb7e12b6beee9b7bd", "unvendored_tests": true, "version": "0.16.4"}, "sisl-tests": {"depends": ["sisl"], "file_name": "sisl-tests.tar", "imports": [], "install_dir": "site", "name": "sisl-tests", "package_type": "package", "sha256": "d8e1443aae171a6bf40ed95f5d8e2498c6904b44ea4116465b56260ffe731358", "unvendored_tests": false, "version": "0.16.4"}, "six": {"depends": [], "file_name": "six-1.17.0-py2.py3-none-any.whl", "imports": ["six"], "install_dir": "site", "name": "six", "package_type": "package", "sha256": "c6681057bd87fdec57e811b8e4007bad38deea284052817fa400d542c6423e2d", "unvendored_tests": false, "version": "1.17.0"}, "smart-open": {"depends": ["wrapt"], "file_name": "smart_open-7.5.1-py3-none-any.whl", "imports": ["smart_open"], "install_dir": "site", "name": "smart-open", "package_type": "package", "sha256": "40fd425b914cbccc4ed428888946090f0332a50a96b354e756c0944bf9fe3f8d", "unvendored_tests": false, "version": "7.5.1"}, "sniffio": {"depends": [], "file_name": "sniffio-1.3.1-py3-none-any.whl", "imports": ["sniffio"], "install_dir": "site", "name": "sniffio", "package_type": "package", "sha256": "4b7eb20cfa667229d721e3b41fd628633f7007a7296af1f731008728bd54145e", "unvendored_tests": true, "version": "1.3.1"}, "sniffio-tests": {"depends": ["sniffio"], "file_name": "sniffio-tests.tar", "imports": [], "install_dir": "site", "name": "sniffio-tests", "package_type": "package", "sha256": "57b04d4704244167ff6783b5ace1cfc1c20e89b77266407bf8d2049440642669", "unvendored_tests": false, "version": "1.3.1"}, "sortedcontainers": {"depends": [], "file_name": "sortedcontainers-2.4.0-py2.py3-none-any.whl", "imports": ["sortedcontainers"], "install_dir": "site", "name": "sortedcontainers", "package_type": "package", "sha256": "f9fc70329a6a64a0cca46260abb486035cee345ea9e6f63263529bb05ff3c0d7", "unvendored_tests": false, "version": "2.4.0"}, "soundfile": {"depends": ["cffi", "numpy"], "file_name": "soundfile-0.12.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["soundfile"], "install_dir": "site", "name": "soundfile", "package_type": "package", "sha256": "7c1e8d6572b4b850e140ec2f878e68f1f3b41bf515995f830895fc76c3d3ab1f", "unvendored_tests": false, "version": "0.12.1"}, "soupsieve": {"depends": [], "file_name": "soupsieve-2.8.3-py3-none-any.whl", "imports": ["soupsieve"], "install_dir": "site", "name": "soupsieve", "package_type": "package", "sha256": "5dad54616ed5b536f4801bed57a9b87e392046869047bb83b41843ffd1152379", "unvendored_tests": false, "version": "2.8.3"}, "sourmash": {"depends": ["screed", "cffi", "deprecation", "cachetools", "numpy", "matplotlib", "scipy", "bitstring"], "file_name": "sourmash-4.8.14-py3-none-pyemscripten_2026_0_wasm32.whl", "imports": ["sourmash"], "install_dir": "site", "name": "sourmash", "package_type": "package", "sha256": "733fb24273fc2a9e820217dff0f22a8b6c39f889c54d6c9f4cf4f615237a6c96", "unvendored_tests": false, "version": "4.8.14"}, "soxr": {"depends": ["numpy"], "file_name": "soxr-0.5.0.post1-cp312-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["soxr"], "install_dir": "site", "name": "soxr", "package_type": "package", "sha256": "4a2f6c5d3d1806be42d771a05f2b0aecd75d76b1427ef18542643296d86d8591", "unvendored_tests": false, "version": "0.5.0.post1"}, "sparseqr": {"depends": ["pycparser", "cffi", "numpy", "scipy"], "file_name": "sparseqr-1.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["sparseqr"], "install_dir": "site", "name": "sparseqr", "package_type": "package", "sha256": "740a56a33ba62304edea14de7302c9681d31e93516f68a84cb483e1cf0f5c4ae", "unvendored_tests": false, "version": "1.2"}, "sqlalchemy": {"depends": ["typing-extensions"], "file_name": "sqlalchemy-2.0.48-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["sqlalchemy"], "install_dir": "site", "name": "sqlalchemy", "package_type": "package", "sha256": "c03b7fbafdc531e366a5f0060efc48bb5ca1b19269a819c84186ec2120e111fe", "unvendored_tests": true, "version": "2.0.48"}, "sqlalchemy-tests": {"depends": ["sqlalchemy"], "file_name": "sqlalchemy-tests.tar", "imports": [], "install_dir": "site", "name": "sqlalchemy-tests", "package_type": "package", "sha256": "78fdeea3388971c02a61996e46640a2ce9c0ec29471b6a9826c7d977a444b959", "unvendored_tests": false, "version": "2.0.48"}, "stack-data": {"depends": ["executing", "asttokens", "pure-eval"], "file_name": "stack_data-0.6.3-py3-none-any.whl", "imports": ["stack_data"], "install_dir": "site", "name": "stack-data", "package_type": "package", "sha256": "aa2bcc8a9652f42a5b999d467697bd23430b6971f9304e5a877dbbcd5af8bd71", "unvendored_tests": false, "version": "0.6.3"}, "starlette": {"depends": [], "file_name": "starlette-1.0.0-py3-none-any.whl", "imports": ["starlette"], "install_dir": "site", "name": "starlette", "package_type": "package", "sha256": "640965ea4168a263473c08df5d86be6e6a64625d731e60ad637796faa2173d12", "unvendored_tests": false, "version": "1.0.0"}, "statsmodels": {"depends": ["numpy", "scipy", "pandas", "patsy", "packaging"], "file_name": "statsmodels-0.14.6-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["statsmodels"], "install_dir": "site", "name": "statsmodels", "package_type": "package", "sha256": "cccb1d00257af36be6b5c91edcdd34f7c383bd7caa42529e4e22811700424795", "unvendored_tests": false, "version": "0.14.6"}, "strictyaml": {"depends": ["python-dateutil"], "file_name": "strictyaml-1.7.3-py3-none-any.whl", "imports": ["strictyaml"], "install_dir": "site", "name": "strictyaml", "package_type": "package", "sha256": "a2d7a8685293a679acc5889ae6718bcc784646a6d36d8c3e4dda249dd5dae1fe", "unvendored_tests": false, "version": "1.7.3"}, "svgwrite": {"depends": [], "file_name": "svgwrite-1.4.3-py3-none-any.whl", "imports": ["svgwrite"], "install_dir": "site", "name": "svgwrite", "package_type": "package", "sha256": "49820ba085f82ecb174698dca75cf92b3bda9559eb865364f9599b535173d63b", "unvendored_tests": false, "version": "1.4.3"}, "swiglpk": {"depends": [], "file_name": "swiglpk-5.0.13-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["swiglpk"], "install_dir": "site", "name": "swiglpk", "package_type": "package", "sha256": "b5bb2f3007210d9f572237db5046f613e434994b0c556c0125d7a7d94f6cf588", "unvendored_tests": false, "version": "5.0.13"}, "sympy": {"depends": ["mpmath"], "file_name": "sympy-1.14.0-py3-none-any.whl", "imports": ["isympy", "sympy"], "install_dir": "site", "name": "sympy", "package_type": "package", "sha256": "b95cce43522f14f9cf476b950a91c752e801be3369c1c1fc043a49f0a24bc2e4", "unvendored_tests": true, "version": "1.14.0"}, "sympy-tests": {"depends": ["sympy"], "file_name": "sympy-tests.tar", "imports": [], "install_dir": "site", "name": "sympy-tests", "package_type": "package", "sha256": "ade6e104f4b0288424c6d62d72130217082ff9207ca97abe7423ee93f24bf021", "unvendored_tests": false, "version": "1.14.0"}, "tblib": {"depends": [], "file_name": "tblib-3.2.2-py3-none-any.whl", "imports": ["tblib"], "install_dir": "site", "name": "tblib", "package_type": "package", "sha256": "8bfb3050d4afae5a674e83e81d38a604b14664c07d2d593517689fed4bb1b7b8", "unvendored_tests": false, "version": "3.2.2"}, "termcolor": {"depends": [], "file_name": "termcolor-3.3.0-py3-none-any.whl", "imports": ["termcolor"], "install_dir": "site", "name": "termcolor", "package_type": "package", "sha256": "1fa53e6f7718ab7fc6fcd043e02ec83d558f0e8d7541239e846cf431bc90fe7a", "unvendored_tests": false, "version": "3.3.0"}, "texttable": {"depends": [], "file_name": "texttable-1.7.0-py2.py3-none-any.whl", "imports": ["texttable"], "install_dir": "site", "name": "texttable", "package_type": "package", "sha256": "bdd98999310f95b7ca63cdd0ab1da5da04e1cc573dc6796e2aa40368c86452ff", "unvendored_tests": false, "version": "1.7.0"}, "texture2ddecoder": {"depends": [], "file_name": "texture2ddecoder-1.0.6-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["texture2ddecoder"], "install_dir": "site", "name": "texture2ddecoder", "package_type": "package", "sha256": "4f6ef53171d940b06358d3cd3271ba9cc7222bddb9dbeaf7c2ee22e7fafb7e63", "unvendored_tests": false, "version": "1.0.6"}, "threadpoolctl": {"depends": [], "file_name": "threadpoolctl-3.6.0-py3-none-any.whl", "imports": ["threadpoolctl"], "install_dir": "site", "name": "threadpoolctl", "package_type": "package", "sha256": "3aaf76e073749216354f3bf597768410ed3d2575e103e79ecaaf100b84e4ac6e", "unvendored_tests": false, "version": "3.6.0"}, "tiktoken": {"depends": ["regex", "requests"], "file_name": "tiktoken-0.12.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["tiktoken", "tiktoken_ext"], "install_dir": "site", "name": "tiktoken", "package_type": "package", "sha256": "719895996dd047ade3c4083fcba9c327be8b3d492b21adca3e94e6eb398863c5", "unvendored_tests": false, "version": "0.12.0"}, "tomli": {"depends": [], "file_name": "tomli-2.4.1-py3-none-any.whl", "imports": ["tomli"], "install_dir": "site", "name": "tomli", "package_type": "package", "sha256": "61330565b8eddb0a8a68887d87c00e56ec3334c282531d0816111bec2c766784", "unvendored_tests": false, "version": "2.4.1"}, "tomli-w": {"depends": [], "file_name": "tomli_w-1.2.0-py3-none-any.whl", "imports": ["tomli_w"], "install_dir": "site", "name": "tomli-w", "package_type": "package", "sha256": "ba6f659de7fc740ded43502cdb3d8e75383822eee44ab57dfaca6321f60a9177", "unvendored_tests": false, "version": "1.2.0"}, "toolz": {"depends": [], "file_name": "toolz-1.1.0-py3-none-any.whl", "imports": ["tlz", "toolz"], "install_dir": "site", "name": "toolz", "package_type": "package", "sha256": "656b542c0fcb8b2275aee1e434856d5649666704974dede177850b9dd9f74066", "unvendored_tests": true, "version": "1.1.0"}, "toolz-tests": {"depends": ["toolz"], "file_name": "toolz-tests.tar", "imports": [], "install_dir": "site", "name": "toolz-tests", "package_type": "package", "sha256": "90295298d48b1e5b5f10d22586753709ecb5683ca87152d0e9ef01b376191303", "unvendored_tests": false, "version": "1.1.0"}, "tqdm": {"depends": [], "file_name": "tqdm-4.67.3-py3-none-any.whl", "imports": ["tqdm"], "install_dir": "site", "name": "tqdm", "package_type": "package", "sha256": "acf8cffe10944a27f1689b3498cf1e5e426b27018f609a05b058812b52b74226", "unvendored_tests": false, "version": "4.67.3"}, "traitlets": {"depends": [], "file_name": "traitlets-5.14.3-py3-none-any.whl", "imports": ["traitlets"], "install_dir": "site", "name": "traitlets", "package_type": "package", "sha256": "4dde644e216b0f7c5c2afc8692ddd02354a838e11d47b5bab74718ca8e94e725", "unvendored_tests": true, "version": "5.14.3"}, "traitlets-tests": {"depends": ["traitlets"], "file_name": "traitlets-tests.tar", "imports": [], "install_dir": "site", "name": "traitlets-tests", "package_type": "package", "sha256": "fa4e51e507f795d428ee6a9940d139dc249265deb93b56cd82ecafd240a2176f", "unvendored_tests": false, "version": "5.14.3"}, "traits": {"depends": [], "file_name": "traits-7.1.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["traits"], "install_dir": "site", "name": "traits", "package_type": "package", "sha256": "cb2c6d93b837c53bb4b76d9375f1ab65b5d36087a6629b5d4366b1e2df647f05", "unvendored_tests": true, "version": "7.1.0"}, "traits-tests": {"depends": ["traits"], "file_name": "traits-tests.tar", "imports": [], "install_dir": "site", "name": "traits-tests", "package_type": "package", "sha256": "a22e747198bd19f5a55f74087f767c6c5cb0a964710e58fabc62afd8d91be1e0", "unvendored_tests": false, "version": "7.1.0"}, "tree-sitter": {"depends": [], "file_name": "tree_sitter-0.23.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["tree_sitter"], "install_dir": "site", "name": "tree-sitter", "package_type": "package", "sha256": "0e4f03afd3a7f51eddbc3459768e0ffc9c809189e55b4f3c48663a97efb91b88", "unvendored_tests": false, "version": "0.23.2"}, "tree-sitter-go": {"depends": ["tree-sitter"], "file_name": "tree_sitter_go-0.23.3-cp39-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["tree_sitter_go"], "install_dir": "site", "name": "tree-sitter-go", "package_type": "package", "sha256": "06ec0c72f7cbaf2d1dc67d7ead46aa28b8fcfc995ac6b46805bf653719808798", "unvendored_tests": false, "version": "0.23.3"}, "tree-sitter-java": {"depends": ["tree-sitter"], "file_name": "tree_sitter_java-0.23.4-cp39-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["tree_sitter_java"], "install_dir": "site", "name": "tree-sitter-java", "package_type": "package", "sha256": "df91be29258af8437a7866690d56c9c575cab79d106acdce51cddde46fef6bdf", "unvendored_tests": false, "version": "0.23.4"}, "tree-sitter-python": {"depends": ["tree-sitter"], "file_name": "tree_sitter_python-0.23.4-cp39-abi3-pyemscripten_2026_0_wasm32.whl", "imports": ["tree_sitter_python"], "install_dir": "site", "name": "tree-sitter-python", "package_type": "package", "sha256": "9dfae85ce236618342fbb6650ae95c6e36cc084ad4f12e57689789fb4a592059", "unvendored_tests": false, "version": "0.23.4"}, "tskit": {"depends": ["numpy", "jsonschema", "rpds-py"], "file_name": "tskit-1.0.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["tskit"], "install_dir": "site", "name": "tskit", "package_type": "package", "sha256": "29dd11241a2d3c3d6a2ba5944f8362d0d6f32548379335b08d710a1d9d89d758", "unvendored_tests": false, "version": "1.0.2"}, "typing-extensions": {"depends": [], "file_name": "typing_extensions-4.15.0-py3-none-any.whl", "imports": ["typing_extensions"], "install_dir": "site", "name": "typing-extensions", "package_type": "package", "sha256": "213fc049fb8bbea5f8369b06c7270cdddd634c2c000f721ce445e22473d66fd5", "unvendored_tests": false, "version": "4.15.0"}, "typing-inspection": {"depends": [], "file_name": "typing_inspection-0.4.2-py3-none-any.whl", "imports": ["typing_inspection"], "install_dir": "site", "name": "typing-inspection", "package_type": "package", "sha256": "b9719c895b2b6123042043573cbd110c8712d508201dcb3126c378a6face49cb", "unvendored_tests": false, "version": "0.4.2"}, "tzdata": {"depends": [], "file_name": "tzdata-2025.3-py2.py3-none-any.whl", "imports": ["tzdata"], "install_dir": "site", "name": "tzdata", "package_type": "package", "sha256": "717c97d3df7fbc3075a872585fec0e182e885853de99043b35ecb0c28c3abe15", "unvendored_tests": false, "version": "2025.3"}, "ujson": {"depends": [], "file_name": "ujson-5.12.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["ujson"], "install_dir": "site", "name": "ujson", "package_type": "package", "sha256": "9f7eb397ef663d5e7042d2894eb817ea1bbc3947d2aee483d4373efbb15a6850", "unvendored_tests": false, "version": "5.12.0"}, "uncertainties": {"depends": ["future"], "file_name": "uncertainties-3.2.3-py3-none-any.whl", "imports": ["uncertainties"], "install_dir": "site", "name": "uncertainties", "package_type": "package", "sha256": "8aba7b65c4e2703900a988d6dceaea0e4f7a548929ca88b1c66443cb01f775c5", "unvendored_tests": false, "version": "3.2.3"}, "unyt": {"depends": ["numpy", "packaging", "sympy"], "file_name": "unyt-3.1.0-py3-none-any.whl", "imports": ["unyt"], "install_dir": "site", "name": "unyt", "package_type": "package", "sha256": "32e3733f84a2ad5efa0651d5fc75e9e93a6e3596f6d8f3e98f6cf8ae5345aebf", "unvendored_tests": true, "version": "3.1.0"}, "unyt-tests": {"depends": ["unyt"], "file_name": "unyt-tests.tar", "imports": [], "install_dir": "site", "name": "unyt-tests", "package_type": "package", "sha256": "86f643c86c35ff1bd1e36ba37423dc41243af23b60f102d306eb6481adc05ffc", "unvendored_tests": false, "version": "3.1.0"}, "urllib3": {"depends": [], "file_name": "urllib3-2.6.3-py3-none-any.whl", "imports": ["urllib3"], "install_dir": "site", "name": "urllib3", "package_type": "package", "sha256": "890b138aa020e1f17842d735901a8869585894b994a3d6a8636f704551de29b3", "unvendored_tests": false, "version": "2.6.3"}, "vega-datasets": {"depends": ["pandas"], "file_name": "vega_datasets-0.9.0-py3-none-any.whl", "imports": ["vega_datasets"], "install_dir": "site", "name": "vega-datasets", "package_type": "package", "sha256": "40921f7c38b5a507081e81980f8a64c5cee3fb7ce44c73a77a5b083066c493b4", "unvendored_tests": true, "version": "0.9.0"}, "vega-datasets-tests": {"depends": ["vega-datasets"], "file_name": "vega-datasets-tests.tar", "imports": [], "install_dir": "site", "name": "vega-datasets-tests", "package_type": "package", "sha256": "c76d37a6f35dec9874e3abd29f43217bdb20bb4212956ff38c52e05d26375a0f", "unvendored_tests": false, "version": "0.9.0"}, "vrplib": {"depends": ["numpy"], "file_name": "vrplib-2.1.0-py3-none-any.whl", "imports": ["vrplib"], "install_dir": "site", "name": "vrplib", "package_type": "package", "sha256": "6545d1a48c8dc503bd38564144993881c811e27b735ee226761f7242bfeefeaf", "unvendored_tests": false, "version": "2.1.0"}, "wcwidth": {"depends": [], "file_name": "wcwidth-0.6.0-py3-none-any.whl", "imports": ["wcwidth"], "install_dir": "site", "name": "wcwidth", "package_type": "package", "sha256": "96f634dd982132bdf265366a2db9c2d676afcd837f7d0bf07a15d094a667cfd1", "unvendored_tests": false, "version": "0.6.0"}, "webencodings": {"depends": [], "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "imports": ["webencodings"], "install_dir": "site", "name": "webencodings", "package_type": "package", "sha256": "6b142d8fdf4cbf0a14ea19512cb6d71abfb6f1422c1067cba18ac5a25079a245", "unvendored_tests": false, "version": "0.5.1"}, "wordcloud": {"depends": ["matplotlib"], "file_name": "wordcloud-1.9.6-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["wordcloud"], "install_dir": "site", "name": "wordcloud", "package_type": "package", "sha256": "7e9d0d8d70ec7f035990b222fed4c3b3a3768bf20001e2cdddfd0a0337bac18d", "unvendored_tests": false, "version": "1.9.6"}, "wrapt": {"depends": [], "file_name": "wrapt-2.1.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["wrapt"], "install_dir": "site", "name": "wrapt", "package_type": "package", "sha256": "bd43f0d4fa46879f74ae5bc3630a743640d96dce0ecff70edc46e8d62153c3b1", "unvendored_tests": false, "version": "2.1.2"}, "xarray": {"depends": ["numpy", "packaging", "pandas"], "file_name": "xarray-2026.2.0-py3-none-any.whl", "imports": ["xarray"], "install_dir": "site", "name": "xarray", "package_type": "package", "sha256": "78043e019e2ca8660c8c301063076a05cba300dfac2ba30b555458817fb1a1bd", "unvendored_tests": true, "version": "2026.2.0"}, "xarray-tests": {"depends": ["xarray"], "file_name": "xarray-tests.tar", "imports": [], "install_dir": "site", "name": "xarray-tests", "package_type": "package", "sha256": "b4c7cfe3435a479201c625239e6a56ca38aad662a30d6681ced95bb7e8f61219", "unvendored_tests": false, "version": "2026.2.0"}, "xgboost": {"depends": ["numpy", "scipy", "setuptools"], "file_name": "xgboost-2.1.4-py3-none-pyemscripten_2026_0_wasm32.whl", "imports": ["xgboost"], "install_dir": "site", "name": "xgboost", "package_type": "package", "sha256": "fab99c29e0a2eeca4f7b48f1a78104bda0a1d2db9d3531bc45aeacce15167aa0", "unvendored_tests": false, "version": "2.1.4"}, "xlrd": {"depends": [], "file_name": "xlrd-2.0.2-py2.py3-none-any.whl", "imports": ["xlrd"], "install_dir": "site", "name": "xlrd", "package_type": "package", "sha256": "0cf17c3fecd37bde859cc502c4022a890dcf8ee565f8e8662626f0d7ba514a2b", "unvendored_tests": false, "version": "2.0.2"}, "xxhash": {"depends": [], "file_name": "xxhash-3.6.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["xxhash"], "install_dir": "site", "name": "xxhash", "package_type": "package", "sha256": "79db6cdb2e251071a30199374f29fad65257ee8145bf43361ac716a68c327a21", "unvendored_tests": false, "version": "3.6.0"}, "xyzservices": {"depends": [], "file_name": "xyzservices-2026.3.0-py3-none-any.whl", "imports": ["xyzservices"], "install_dir": "site", "name": "xyzservices", "package_type": "package", "sha256": "947091e6c3e6423408d7f0fb794ae1c81fcc8862eb2c222d69180acc0edae12c", "unvendored_tests": true, "version": "2026.3.0"}, "xyzservices-tests": {"depends": ["xyzservices"], "file_name": "xyzservices-tests.tar", "imports": [], "install_dir": "site", "name": "xyzservices-tests", "package_type": "package", "sha256": "9fc29843af5c616e9afd0f9d134cd9ec16ad436cc68db81d4000b8eb0b1bd9f1", "unvendored_tests": false, "version": "2026.3.0"}, "yarl": {"depends": ["multidict", "idna", "propcache"], "file_name": "yarl-1.23.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["yarl"], "install_dir": "site", "name": "yarl", "package_type": "package", "sha256": "b95d563dc55dc74048d5ec6a6c06900fbde94336c4142b427492e7fdae0c0ca9", "unvendored_tests": false, "version": "1.23.0"}, "yt": {"depends": ["ewah_bool_utils", "numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "file_name": "yt-4.4.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["yt"], "install_dir": "site", "name": "yt", "package_type": "package", "sha256": "4a8c8ef08b447472809fa5c2df1002e7de6c8a5c2b8b5136cc8e6d76b1b03100", "unvendored_tests": false, "version": "4.4.0"}, "zarr": {"depends": ["numpy", "packaging", "numcodecs", "google-crc32c", "donfig", "typing-extensions"], "file_name": "zarr-3.2.1-py3-none-any.whl", "imports": ["zarr"], "install_dir": "site", "name": "zarr", "package_type": "package", "sha256": "33329fb8ca402c0c50f1d12ce69d84ef4345ee1f238b906b773bc06fe4a6f926", "unvendored_tests": true, "version": "3.2.1"}, "zarr-tests": {"depends": ["zarr"], "file_name": "zarr-tests.tar", "imports": [], "install_dir": "site", "name": "zarr-tests", "package_type": "package", "sha256": "ab4915739f497326a0b1705bb16984bb321dd18b7ff9d2dce05e6d80e966d0b3", "unvendored_tests": false, "version": "3.2.1"}, "zengl": {"depends": [], "file_name": "zengl-2.7.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["zengl", "_zengl"], "install_dir": "site", "name": "zengl", "package_type": "package", "sha256": "9ff5b6d4c4386b140611dd67787022212f0d98272fb06534bc1a274ecd3197c0", "unvendored_tests": false, "version": "2.7.2"}, "zfpy": {"depends": ["numpy"], "file_name": "zfpy-1.0.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["zfpy"], "install_dir": "site", "name": "zfpy", "package_type": "package", "sha256": "7f2e87660fc7828201213a24c02dea88a71786eeff96d33fdfbd6a68a0073179", "unvendored_tests": false, "version": "1.0.1"}, "zstandard": {"depends": ["cffi"], "file_name": "zstandard-0.25.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", "imports": ["zstandard"], "install_dir": "site", "name": "zstandard", "package_type": "package", "sha256": "5b83ee277cf2cbf52187660561ae909c8e1c892047574f873398ab95ed82bd9f", "unvendored_tests": false, "version": "0.25.0"}}} \ No newline at end of file diff --git a/public/engines/python/pyodide.asm.mjs b/public/engines/python/pyodide.asm.mjs new file mode 100644 index 0000000..1403822 --- /dev/null +++ b/public/engines/python/pyodide.asm.mjs @@ -0,0 +1,2 @@ +async function _createPyodideModule(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){const{createRequire}=await import("node:module");var require=createRequire(import.meta.url)}var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){readBinary=f=>{if(globalThis.readbuffer){return new Uint8Array(readbuffer(f))}let data=read(f,"binary");assert(typeof data=="object");return data};readAsync=async f=>readBinary(f);globalThis.clearTimeout??=id=>{};globalThis.setTimeout??=f=>f();arguments_=globalThis.arguments||globalThis.scriptArgs;if(globalThis.quit){quit_=(status,toThrow)=>{setTimeout(()=>{if(!(toThrow instanceof ExitStatus)){let toLog=toThrow;if(toThrow&&typeof toThrow=="object"&&toThrow.stack){toLog=[toThrow,toThrow.stack]}err(`exiting due to exception: ${toLog}`)}quit(status)});throw toThrow}}if(typeof print!="undefined"){globalThis.console??={};console.log=print;console.warn=console.error=globalThis.printErr??print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var dynamicLibraries=[];var wasmBinary;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var isFileURI=filename=>filename.startsWith("file://");var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;var runtimeExited=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}var __RELOC_FUNCS__=[];function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__RELOC_FUNCS__);callRuntimeCallbacks(onInits);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);PIPEFS.root=FS.mount(PIPEFS,{},null);wasmExports["__wasm_call_ctors"]();callRuntimeCallbacks(onPostCtors);FS.ignorePermissions=false}function preMain(){callRuntimeCallbacks(onMains)}function exitRuntime(){___funcs_on_exit();callRuntimeCallbacks(onExits);FS.quit();TTY.shutdown();IDBFS.quit();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(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";if(runtimeInitialized){___trap()}var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(ENVIRONMENT_IS_SHELL){return"pyodide.asm.wasm"}if(Module["locateFile"]){return locateFile("pyodide.asm.wasm")}return new URL("pyodide.asm.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_SHELL){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var GOTProxyHandler=new Proxy(new Set([]),GOTHandler);var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports,"GOT.mem":GOTProxyHandler,"GOT.func":GOTProxyHandler};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;var origExports=wasmExports;mergeLibSymbols(wasmExports,"main");var metadata=getDylinkMetadata(module);if(metadata.neededDynlibs){dynamicLibraries=metadata.neededDynlibs.concat(dynamicLibraries)}wasmExports=applySignatureConversions(wasmExports);assignWasmExports(wasmExports);updateGOT(origExports);LDSO.init();loadDylibs();updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var GOT={};var GOTHandler={get(weakImports,symName){var rtn=GOT[symName];if(!rtn){rtn=GOT[symName]=new WebAssembly.Global({value:"i32",mutable:true},-1)}if(!weakImports.has(symName)){rtn.required=true}return rtn}};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{idx>>>=0;var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var getDylinkMetadata=binary=>{var offset=0;var end=0;function getU8(){return binary[offset++]}function getLEB(){var ret=0;var mul=1;while(1){var byte=binary[offset++];ret+=(byte&127)*mul;mul*=128;if(!(byte&128))break}return ret}function getString(){var len=getLEB();offset+=len;return UTF8ArrayToString(binary,offset-len,len)}function getStringList(){var count=getLEB();var rtn=[];while(count--)rtn.push(getString());return rtn}function failIf(condition,message){if(condition)throw new Error(message)}if(binary instanceof WebAssembly.Module){var dylinkSection=WebAssembly.Module.customSections(binary,"dylink.0");failIf(dylinkSection.length===0,"need dylink section");binary=new Uint8Array(dylinkSection[0]);end=binary.length}else{var int32View=new Uint32Array(new Uint8Array(binary.subarray(0,24)).buffer);var magicNumberFound=int32View[0]==1836278016;failIf(!magicNumberFound,"need to see wasm magic number");failIf(binary[8]!==0,"need the dylink section to be first");offset=9;var section_size=getLEB();end=offset+section_size;var name=getString();failIf(name!=="dylink.0")}var customSection={neededDynlibs:[],tlsExports:new Set,weakImports:new Set,runtimePaths:[]};var WASM_DYLINK_MEM_INFO=1;var WASM_DYLINK_NEEDED=2;var WASM_DYLINK_EXPORT_INFO=3;var WASM_DYLINK_IMPORT_INFO=4;var WASM_DYLINK_RUNTIME_PATH=5;var WASM_SYMBOL_TLS=256;var WASM_SYMBOL_BINDING_MASK=3;var WASM_SYMBOL_BINDING_WEAK=1;while(offset>>0];case"i8":return HEAP8[ptr>>>0];case"i16":return HEAP16[ptr>>>1>>>0];case"i32":return HEAP32[ptr>>>2>>>0];case"i64":return HEAP64[ptr>>>3>>>0];case"float":return HEAPF32[ptr>>>2>>>0];case"double":return HEAPF64[ptr>>>3>>>0];case"*":return HEAPU32[ptr>>>2>>>0];default:abort(`invalid type for getValue: ${type}`)}}var newDSO=(name,handle,syms)=>{var dso={refcount:Infinity,name,exports:syms,global:true};LDSO.loadedLibsByName[name]=dso;if(handle!=undefined){LDSO.loadedLibsByHandle[handle]=dso}return dso};var LDSO={loadedLibsByName:{},loadedLibsByHandle:{},init(){newDSO("__main__",0,wasmImports)}};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var getMemory=size=>{if(runtimeInitialized){return _calloc(size,1)}var ret=___heap_base;var end=ret+alignMemory(size,16);___heap_base=end;var sbrk_ptr=_emscripten_get_sbrk_ptr();HEAPU32[sbrk_ptr>>>2>>>0]=end;return ret};var isInternalSym=symName=>["memory","__memory_base","__table_base","__stack_pointer","__indirect_function_table","__cpp_exception","__c_longjmp","__wasm_apply_data_relocs","__dso_handle","__tls_size","__tls_align","__set_stack_limits","_emscripten_tls_init","__wasm_init_tls","__wasm_call_ctors","__start_em_asm","__stop_em_asm","__start_em_js","__stop_em_js"].includes(symName)||symName.startsWith("__em_js__");var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}return wasmTable["grow"](1)};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var uleb128EncodeWithLen=arr=>{const n=arr.length;return[n%128|128,n>>7,...arr]};var wasmTypeCodes={i:127,p:127,j:126,f:125,d:124,e:111};var generateTypePack=types=>uleb128EncodeWithLen(Array.from(types,type=>{var code=wasmTypeCodes[type];return code}));var convertJsFunctionToWasm=(func,sig)=>{var bytes=Uint8Array.of(0,97,115,109,1,0,0,0,1,...uleb128EncodeWithLen([1,96,...generateTypePack(sig.slice(1)),...generateTypePack(sig[0]==="v"?"":sig[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(bytes);var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var updateGOT=(exports,replace)=>{for(var symName in exports){if(isInternalSym(symName)){continue}var value=exports[symName];var existingEntry=GOT[symName]&&GOT[symName].value!=-1;if(replace||!existingEntry){var newValue;if(typeof value=="function"){newValue=addFunction(value)}else if(typeof value.value=="number"){newValue=value}else{continue}GOT[symName]??=new WebAssembly.Global({value:"i32",mutable:true});GOT[symName].value=newValue}}};var isImmutableGlobal=val=>{if(val instanceof WebAssembly.Global){try{val.value=val.value}catch{return true}}return false};var relocateExports=(exports,memoryBase=0)=>{function relocateExport(name,value){if(isImmutableGlobal(value)){return new WebAssembly.Global({value:"i32"},value.value+memoryBase)}return value}var relocated={};for(var e in exports){relocated[e]=relocateExport(e,exports[e])}return relocated};var isSymbolDefined=symName=>{var existing=wasmImports[symName];if(!existing||existing.stub){return false}return true};var createNamedFunction=(name,func)=>Object.defineProperty(func,"name",{value:name});var resolveGlobalSymbol=(symName,direct=false)=>{var sym;if(isSymbolDefined(symName)){sym=wasmImports[symName]}return{sym,name:symName}};var onPostCtors=[];var addOnPostCtor=cb=>onPostCtors.push(cb);var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):""};var loadWebAssemblyModule=(binary,flags,libName,localScope,handle)=>{var metadata=getDylinkMetadata(binary);function loadModule(){var memAlign=Math.pow(2,metadata.memoryAlign);var memoryBase=metadata.memorySize?alignMemory(getMemory(metadata.memorySize+memAlign),memAlign):0;var tableBase=metadata.tableSize?wasmTable.length:0;if(handle){HEAP8[handle+8>>>0]=1;HEAPU32[handle+12>>>2>>>0]=memoryBase;HEAP32[handle+16>>>2>>>0]=metadata.memorySize;HEAPU32[handle+20>>>2>>>0]=tableBase;HEAP32[handle+24>>>2>>>0]=metadata.tableSize}if(metadata.tableSize){wasmTable.grow(metadata.tableSize)}var moduleExports;function resolveSymbol(sym){var resolved=resolveGlobalSymbol(sym).sym;if(!resolved&&localScope){resolved=localScope[sym]}if(!resolved){resolved=moduleExports[sym]}return resolved}var proxyHandler={get(stubs,prop){switch(prop){case"__memory_base":return memoryBase;case"__table_base":return tableBase}if(prop in wasmImports&&!wasmImports[prop].stub){var res=wasmImports[prop];return res}if(!(prop in stubs)){var resolved;stubs[prop]=(...args)=>{resolved||=resolveSymbol(prop);if(!resolved){throw new Error(`Dynamic linking error: cannot resolve symbol ${prop}`)}return resolved(...args)}}return stubs[prop]}};var proxy=new Proxy({},proxyHandler);var GOTProxy=new Proxy(metadata.weakImports,GOTHandler);var info={"GOT.mem":GOTProxy,"GOT.func":GOTProxy,env:proxy,wasi_snapshot_preview1:proxy};function postInstantiation(module,instance){updateTableMap(tableBase,metadata.tableSize);moduleExports=relocateExports(instance.exports,memoryBase);updateGOT(moduleExports);if(!flags.allowUndefined){reportUndefinedSymbols()}function addEmAsm(addr,body){var args=[];for(var arity=0;;arity++){var argName="$"+arity;if(!body.includes(argName))break;args.push(argName)}args=args.join(",");var func=`(${args}) => { ${body} };`;ASM_CONSTS[start]=eval(func)}if("__start_em_asm"in moduleExports){var start=moduleExports["__start_em_asm"].value;var stop=moduleExports["__stop_em_asm"].value;start>>>=0;stop>>>=0;while(start ${body};`;moduleExports[name]=eval(func)}for(var name in moduleExports){if(name.startsWith("__em_js__")){var start=moduleExports[name].value;var jsString=UTF8ToString(start);var[sig,body]=jsString.split("<::>");addEmJs(name.replace("__em_js__",""),sig,body);delete moduleExports[name]}}var applyRelocs=moduleExports["__wasm_apply_data_relocs"];if(applyRelocs){if(runtimeInitialized){applyRelocs()}else{__RELOC_FUNCS__.push(applyRelocs)}}var init=moduleExports["__wasm_call_ctors"];if(init){if(runtimeInitialized){init()}else{addOnPostCtor(init)}}return moduleExports}if(flags.loadAsync){return(async()=>{var instance;if(binary instanceof WebAssembly.Module){instance=new WebAssembly.Instance(binary,info)}else{({module:binary,instance}=await WebAssembly.instantiate(binary,info))}return postInstantiation(binary,instance)})()}var module=binary instanceof WebAssembly.Module?binary:new WebAssembly.Module(binary);var instance=new WebAssembly.Instance(module,info);return postInstantiation(module,instance)}flags={...flags,rpath:{parentLibPath:libName,paths:metadata.runtimePaths}};if(flags.loadAsync){return metadata.neededDynlibs.reduce((chain,needed)=>chain.then(()=>{needed=findLibraryFS(needed,flags.rpath)??needed;return loadDynamicLibrary(needed,flags,localScope)}),Promise.resolve()).then(loadModule)}for(var needed of metadata.neededDynlibs){needed=findLibraryFS(needed,flags.rpath)??needed;loadDynamicLibrary(needed,flags,localScope)}return loadModule()};var mergeLibSymbols=(exports,libName)=>{for(var[sym,exp]of Object.entries(exports)){const setImport=target=>{if(!isSymbolDefined(target)){wasmImports[target]=exp}};setImport(sym);const main_alias="__main_argc_argv";if(sym=="main"){setImport(main_alias)}if(sym==main_alias){setImport("main")}}};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var preloadPlugins=[];var registerWasmPlugin=()=>{var wasmPlugin={promiseChainEnd:Promise.resolve(),canHandle:name=>!Module["noWasmDecoding"]&&name.endsWith(".so"),handle:async(byteArray,name)=>wasmPlugin.promiseChainEnd=wasmPlugin.promiseChainEnd.then(async()=>{try{var exports=await loadWebAssemblyModule(byteArray,{loadAsync:true,nodelete:true},name,{})}catch(error){throw new Error(`failed to instantiate wasm: ${name}: ${error}`)}preloadedWasm[name]=exports;return byteArray})};preloadPlugins.push(wasmPlugin)};var preloadedWasm={};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(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:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var replaceORIGIN=(parentLibName,rpath)=>{if(rpath.startsWith("$ORIGIN")){var origin=PATH.dirname(parentLibName);return rpath.replace("$ORIGIN",origin)}return rpath};var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63;i++}}heap[outIdx>>>0]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var base64Decode=b64=>{if(ENVIRONMENT_IS_NODE){var buf=Buffer.from(b64,"base64");return new Uint8Array(buf.buffer,buf.byteOffset,buf.length)}var b1,b2,i=0,j=0,bLength=b64.length;var output=new Uint8Array((bLength*3>>2)-(b64[bLength-2]=="=")-(b64[bLength-1]=="="));for(;i>4;output[j+1]=b1<<4|b2>>2;output[j+2]=b2<<6|base64ReverseLookup[b64.charCodeAt(i+3)]}return output};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}if(ENVIRONMENT_IS_SHELL){return view=>{if(!os.system){throw new Error("randomFill not supported on d8 unless --enable-os-system is passed")}const b64=os.system("sh",["-c",`head -c${view.byteLength} /dev/urandom | base64 --wrap=0`]);view.set(base64Decode(b64))}}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{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};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(globalThis.readline){result=readline();if(result){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(ptr,size)=>HEAPU8.fill(0,ptr,ptr+size);var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=MEMFS.emptyFileContents??=new Uint8Array(0)}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));node.usedBytes=newSize},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);buffer.set(contents.subarray(position,position+size),offset);return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);node.usedBytes=Math.max(node.usedBytes,position+length)}return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}if(contents){if(position>0||position+length>>0)}}return{ptr,allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS_modeStringToFlags=str=>{if(typeof str!="string")return str;var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var IDBFS={dbs:{},indexedDB:()=>indexedDB,DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",queuePersist:mount=>{function onPersistComplete(){if(mount.idbPersistState==="again")startPersist();else mount.idbPersistState=0}function startPersist(){mount.idbPersistState="idb";IDBFS.syncfs(mount,false,onPersistComplete)}if(!mount.idbPersistState){mount.idbPersistState=setTimeout(startPersist,0)}else if(mount.idbPersistState==="idb"){mount.idbPersistState="again"}},mount:mount=>{var mnt=MEMFS.mount(mount);if(mount?.opts?.autoPersist){mount.idbPersistState=0;var memfs_node_ops=mnt.node_ops;mnt.node_ops={...mnt.node_ops};mnt.node_ops.mknod=(parent,name,mode,dev)=>{var node=memfs_node_ops.mknod(parent,name,mode,dev);node.node_ops=mnt.node_ops;node.idbfs_mount=mnt.mount;node.memfs_stream_ops=node.stream_ops;node.stream_ops={...node.stream_ops};node.stream_ops.write=(stream,buffer,offset,length,position,canOwn)=>{stream.node.isModified=true;return node.memfs_stream_ops.write(stream,buffer,offset,length,position,canOwn)};node.stream_ops.close=stream=>{var n=stream.node;if(n.isModified){IDBFS.queuePersist(n.idbfs_mount);n.isModified=false}if(n.memfs_stream_ops.close)return n.memfs_stream_ops.close(stream)};IDBFS.queuePersist(mnt.mount);return node};mnt.node_ops.rmdir=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rmdir(...args));mnt.node_ops.symlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.symlink(...args));mnt.node_ops.unlink=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.unlink(...args));mnt.node_ops.rename=(...args)=>(IDBFS.queuePersist(mnt.mount),memfs_node_ops.rename(...args))}return mnt},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{for(var value of Object.values(IDBFS.dbs)){value.close()}IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}};req.onsuccess=()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)};req.onerror=e=>{callback(e.target.error);e.preventDefault()}},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return p=>PATH.join2(root,p)}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.lstat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push(...FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={timestamp:stat.mtime}}return callback(null,{type:"local",entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=e=>{callback(e.target.error);e.preventDefault()};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db,entries})}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue()}}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.lstat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode})}else if(FS.isLink(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode,link:node.link})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:(path,entry,callback)=>{try{if(FS.isDir(entry["mode"])){FS.mkdirTree(path,entry["mode"])}else if(FS.isLink(entry["mode"])){FS.symlink(entry["link"],path)}else if(FS.isFile(entry["mode"])){FS.writeFile(path,entry["contents"],{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry["mode"]);FS.utime(path,entry["timestamp"],entry["timestamp"])}catch(e){return callback(e)}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.lstat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else{FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=event=>callback(null,event.target.result);req.onerror=e=>{callback(e.target.error);e.preventDefault()}},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=event=>callback();req.onerror=e=>{callback(e.target.error);e.preventDefault()}},reconcile:(src,dst,callback)=>{var total=0;var create=[];for(var[key,e]of Object.entries(src.entries)){var e2=dst.entries[key];if(!e2||e["timestamp"].getTime()!=e2["timestamp"].getTime()){create.push(key);total++}}var remove=[];for(var key of Object.keys(dst.entries)){if(!src.entries[key]){remove.push(key);total++}}if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=transaction.onabort=e=>{done(e.target.error);e.preventDefault()};transaction.oncomplete=e=>{if(!errored){callback(null)}};for(const path of create.sort()){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}}for(var path of remove.sort().reverse()){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}}};var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var NODEFS={isWindows:false,staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process.binding("constants")["fs"];NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],256:flags["O_NOCTTY"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"],131072:flags["O_NOFOLLOW"]}},convertNodeCode(e){var code=e.code;return ERRNO_CODES[code]},tryFSOperation(f){try{return f()}catch(e){if(!e.code)throw e;if(e.code==="UNKNOWN")throw new FS.ErrnoError(28);throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},mount(mount){return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(28)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode(path){return NODEFS.tryFSOperation(()=>{var mode=fs.lstatSync(path).mode;if(NODEFS.isWindows){mode|=(mode&292)>>2}return mode})},realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join(...parts)},flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;flags&=~65536;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(flags){throw new FS.ErrnoError(28)}return newFlags},getattr(func,node){var stat=NODEFS.tryFSOperation(func);if(NODEFS.isWindows){if(!stat.blksize){stat.blksize=4096}if(!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}stat.mode|=(stat.mode&292)>>2}return{dev:stat.dev,ino:node.id,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr(arg,node,attr,chmod,utimes,truncate,stat){NODEFS.tryFSOperation(()=>{if(attr.mode!==undefined){var mode=attr.mode;if(NODEFS.isWindows){mode&=384}chmod(arg,mode);node.mode=attr.mode}if(typeof(attr.atime??attr.mtime)==="number"){var atime=new Date(attr.atime??stat(arg).atime);var mtime=new Date(attr.mtime??stat(arg).mtime);utimes(arg,atime,mtime)}if(attr.size!==undefined){truncate(arg,attr.size)}})},node_ops:{getattr(node){var path=NODEFS.realPath(node);return NODEFS.getattr(()=>fs.lstatSync(path),node)},setattr(node,attr){var path=NODEFS.realPath(node);if(attr.mode!=null&&attr.dontFollow){throw new FS.ErrnoError(52)}NODEFS.setattr(path,node,attr,fs.chmodSync,fs.utimesSync,fs.truncateSync,fs.lstatSync)},lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);NODEFS.tryFSOperation(()=>{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}});return node},rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{FS.unlink(newPath)}catch(e){}NODEFS.tryFSOperation(()=>fs.renameSync(oldPath,newPath));oldNode.name=newName},unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);NODEFS.tryFSOperation(()=>fs.unlinkSync(path))},rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);NODEFS.tryFSOperation(()=>fs.rmdirSync(path))},readdir(node){var path=NODEFS.realPath(node);return NODEFS.tryFSOperation(()=>fs.readdirSync(path))},symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);NODEFS.tryFSOperation(()=>fs.symlinkSync(oldPath,newPath))},readlink(node){var path=NODEFS.realPath(node);return NODEFS.tryFSOperation(()=>fs.readlinkSync(path))},statfs(path){var stats=NODEFS.tryFSOperation(()=>fs.statfsSync(path));stats.frsize=stats.bsize;return stats}},stream_ops:{getattr(stream){return NODEFS.getattr(()=>fs.fstatSync(stream.nfd),stream.node)},setattr(stream,attr){NODEFS.setattr(stream.nfd,stream.node,attr,fs.fchmodSync,fs.futimesSync,fs.ftruncateSync,fs.fstatSync)},open(stream){var path=NODEFS.realPath(stream.node);NODEFS.tryFSOperation(()=>{stream.shared.refcount=1;stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))})},close(stream){NODEFS.tryFSOperation(()=>{if(stream.nfd&&--stream.shared.refcount===0){fs.closeSync(stream.nfd)}})},dup(stream){stream.shared.refcount++},read(stream,buffer,offset,length,position){return NODEFS.tryFSOperation(()=>fs.readSync(stream.nfd,buffer,offset,length,position))},write(stream,buffer,offset,length,position){return NODEFS.tryFSOperation(()=>fs.writeSync(stream.nfd,buffer,offset,length,position))},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){NODEFS.tryFSOperation(()=>{var stat=fs.fstatSync(stream.nfd);position+=stat.size})}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}},msync(stream,buffer,offset,length,mmapFlags){NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount(mount){assert(ENVIRONMENT_IS_WORKER);WORKERFS.reader??=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write(stream,buffer,offset,length,position){throw new FS.ErrnoError(29)},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(28)}return position}}};var PROXYFS={mount(mount){return PROXYFS.createNode(null,"/",mount.opts.fs.lstat(mount.opts.root).mode,0)},createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=PROXYFS.node_ops;node.stream_ops=PROXYFS.stream_ops;return node},realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join(...parts)},node_ops:{getattr(node){var path=PROXYFS.realPath(node);var stat;try{stat=node.mount.opts.fs.lstat(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr(node,attr){var path=PROXYFS.realPath(node);try{if(attr.mode!==undefined){node.mount.opts.fs.chmod(path,attr.mode);node.mode=attr.mode}if(attr.atime||attr.mtime){var atime=new Date(attr.atime||attr.mtime);var mtime=new Date(attr.mtime||attr.atime);node.mount.opts.fs.utime(path,atime,mtime)}if(attr.size!==undefined){node.mount.opts.fs.truncate(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},lookup(parent,name){try{var path=PATH.join2(PROXYFS.realPath(parent),name);var mode=parent.mount.opts.fs.lstat(path).mode;var node=PROXYFS.createNode(parent,name,mode);return node}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},mknod(parent,name,mode,dev){var node=PROXYFS.createNode(parent,name,mode,dev);var path=PROXYFS.realPath(node);try{if(FS.isDir(node.mode)){node.mount.opts.fs.mkdir(path,node.mode)}else{node.mount.opts.fs.writeFile(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node},rename(oldNode,newDir,newName){var oldPath=PROXYFS.realPath(oldNode);var newPath=PATH.join2(PROXYFS.realPath(newDir),newName);try{oldNode.mount.opts.fs.rename(oldPath,newPath);oldNode.name=newName}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},unlink(parent,name){var path=PATH.join2(PROXYFS.realPath(parent),name);try{parent.mount.opts.fs.unlink(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},rmdir(parent,name){var path=PATH.join2(PROXYFS.realPath(parent),name);try{parent.mount.opts.fs.rmdir(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readdir(node){var path=PROXYFS.realPath(node);try{return node.mount.opts.fs.readdir(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},symlink(parent,newName,oldPath){var newPath=PATH.join2(PROXYFS.realPath(parent),newName);try{parent.mount.opts.fs.symlink(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readlink(node){var path=PROXYFS.realPath(node);try{return node.mount.opts.fs.readlink(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}},stream_ops:{open(stream){var path=PROXYFS.realPath(stream.node);try{stream.nfd=stream.node.mount.opts.fs.open(path,stream.flags)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},close(stream){try{stream.node.mount.opts.fs.close(stream.nfd)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},read(stream,buffer,offset,length,position){try{return stream.node.mount.opts.fs.read(stream.nfd,buffer,offset,length,position)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},write(stream,buffer,offset,length,position){try{return stream.node.mount.opts.fs.write(stream.nfd,buffer,offset,length,position)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=stream.node.node_ops.getattr(stream.node);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position}}};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var LZ4={DIR_MODE:16895,FILE_MODE:33279,CHUNK_SIZE:-1,codec:null,init(){if(LZ4.codec)return;LZ4.codec=(()=>{var MiniLZ4=function(){var exports={};exports.uncompress=function(input,output,sIdx,eIdx){sIdx=sIdx||0;eIdx=eIdx||input.length-sIdx;for(var i=sIdx,n=eIdx,j=0;i>4;if(literals_length>0){var l=literals_length+240;while(l===255){l=input[i++];literals_length+=l}var end=i+literals_length;while(ij)return-(i-2);var match_length=token&15;var l=match_length+240;while(l===255){l=input[i++];match_length+=l}var pos=j-offset;var end=j+match_length+4;while(jmaxInputSize?0:isize+isize/255+16|0};exports.compress=function(src,dst,sIdx,eIdx){hashTable.set(empty);return compressBlock(src,dst,0,sIdx||0,eIdx||dst.length)};function compressBlock(src,dst,pos,sIdx,eIdx){var dpos=sIdx;var dlen=eIdx-sIdx;var anchor=0;if(src.length>=maxInputSize)throw new Error("input too large");if(src.length>mfLimit){var n=exports.compressBound(src.length);if(dlen>>hashShift;var ref=hashTable[hash]-1;hashTable[hash]=pos+1;if(ref<0||pos-ref>>>16>0||((src[ref+3]<<8|src[ref+2])!=sequenceHighBits||(src[ref+1]<<8|src[ref])!=sequenceLowBits)){step=findMatchAttempts++>>skipStrength;pos+=step;continue}findMatchAttempts=(1<=runMask){dst[dpos++]=(runMask<254;len-=255){dst[dpos++]=255}dst[dpos++]=len}else{dst[dpos++]=(literals_length<>8;if(match_length>=mlMask){match_length-=mlMask;while(match_length>=255){match_length-=255;dst[dpos++]=255}dst[dpos++]=match_length}anchor=pos}}if(anchor==0)return 0;literals_length=src.length-anchor;if(literals_length>=runMask){dst[dpos++]=runMask<254;ln-=255){dst[dpos++]=255}dst[dpos++]=ln}else{dst[dpos++]=literals_length<0){assert(compressedSize<=bound);compressed=compressed.subarray(0,compressedSize);compressedChunks.push(compressed);total+=compressedSize;successes.push(1);if(verify){var back=exports.uncompress(compressed,temp);assert(back===chunk.length,[back,chunk.length]);for(var i=0;iremoveRunDependency(dep);var byteArray=FS.readFile(fullname);plugin["handle"](byteArray,fullname).then(finish).catch(finish);break}}}}},createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=LZ4.node_ops;node.stream_ops=LZ4.stream_ops;this.atime=this.mtime=this.ctime=(mtime||new Date).getTime();assert(LZ4.FILE_MODE!==LZ4.DIR_MODE);if(mode===LZ4.FILE_MODE){node.size=contents.end-contents.start;node.contents=contents}else{node.size=4096;node.contents={}}if(parent){parent.contents[name]=node}return node},node_ops:{getattr(node){return{dev:1,ino:node.id,mode:node.mode,nlink:1,uid:0,gid:0,rdev:0,size:node.size,atime:new Date(node.atime),mtime:new Date(node.mtime),ctime:new Date(node.ctime),blksize:4096,blocks:Math.ceil(node.size/4096)}},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]){node[key]=attr[key]}}},lookup(parent,name){throw new FS.ErrnoError(44)},mknod(parent,name,mode,dev){throw new FS.ErrnoError(63)},rename(oldNode,newDir,newName){throw new FS.ErrnoError(63)},unlink(parent,name){throw new FS.ErrnoError(63)},rmdir(parent,name){throw new FS.ErrnoError(63)},readdir(node){throw new FS.ErrnoError(63)},symlink(parent,newName,oldPath){throw new FS.ErrnoError(63)}},stream_ops:{read(stream,buffer,offset,length,position){length=Math.min(length,stream.node.size-position);if(length<=0)return 0;var contents=stream.node.contents;var compressedData=contents.compressedData;var written=0;while(written=0){currChunk=compressedData["cachedChunks"][found]}else{compressedData["cachedIndexes"].pop();compressedData["cachedIndexes"].unshift(chunkIndex);currChunk=compressedData["cachedChunks"].pop();compressedData["cachedChunks"].unshift(currChunk);if(compressedData["debug"]){out("decompressing chunk "+chunkIndex);Module["decompressedChunks"]=(Module["decompressedChunks"]||0)+1}var compressed=compressedData["data"].subarray(compressedStart,compressedStart+compressedSize);var originalSize=LZ4.codec.uncompress(compressed,currChunk);if(chunkIndex!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}if(perms.includes("w")&&!(node.mode&146)){return 2}if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else if(FS.isDir(node.mode)){return 31}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;FS.trackingDelegate["onMakeDirectory"]?.(path,mode);return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}FS.trackingDelegate["onMakeSymlink"]?.(oldpath,newpath);return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.trackingDelegate["willMovePath"]?.(old_path,new_path);FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}FS.trackingDelegate["onMovePath"]?.(old_path,new_path)},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}FS.trackingDelegate["willDeletePath"]?.(path);parent.node_ops.rmdir(parent,name);FS.destroyNode(node);FS.trackingDelegate["onDeletePath"]?.(path)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}FS.trackingDelegate["willDeletePath"]?.(path);parent.node_ops.unlink(parent,name);FS.destroyNode(node);FS.trackingDelegate["onDeletePath"]?.(path)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}var origFlags=flags;flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}FS.trackingDelegate["onOpenFile"]?.(path,origFlags);return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null;if(stream.path){FS.trackingDelegate["onCloseFile"]?.(stream.path)}},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];if(stream.path){FS.trackingDelegate["onSeekFile"]?.(stream.path,stream.position,whence)}return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;if(stream.path){FS.trackingDelegate["onReadFile"]?.(stream.path,bytesRead)}return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;if(stream.path){FS.trackingDelegate["onWriteToFile"]?.(stream.path,bytesWritten)}return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS,IDBFS,NODEFS,WORKERFS,PROXYFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){data=FS_fileDataToTypedArray(data);FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length){output(10)}},read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var findLibraryFS=(libName,rpath)=>{if(!runtimeInitialized){return undefined}if(PATH.isAbs(libName)){try{FS.lookupPath(libName);return libName}catch(e){return undefined}}var rpathResolved=(rpath?.paths||[]).map(p=>replaceORIGIN(rpath?.parentLibPath,p));return withStackSave(()=>{var bufSize=2*255+2;var buf=stackAlloc(bufSize);var rpathC=stringToUTF8OnStack(rpathResolved.join(":"));var libNameC=stringToUTF8OnStack(libName);var resLibNameC=__emscripten_find_dylib(buf,rpathC,libNameC,bufSize);return resLibNameC?UTF8ToString(resLibNameC):undefined})};function loadDynamicLibrary(libName,flags={global:true,nodelete:true},localScope,handle){libName=PATH.normalize(libName);var dso=LDSO.loadedLibsByName[libName];if(dso){if(!flags.global){if(localScope){Object.assign(localScope,dso.exports)}}else if(!dso.global){dso.global=true;mergeLibSymbols(dso.exports,libName)}if(flags.nodelete&&dso.refcount!==Infinity){dso.refcount=Infinity}dso.refcount++;if(handle){LDSO.loadedLibsByHandle[handle]=dso}return flags.loadAsync?Promise.resolve(true):true}dso=newDSO(libName,handle,"loading");dso.refcount=flags.nodelete?Infinity:1;dso.global=flags.global;function loadLibData(){if(handle){var data=HEAPU32[handle+28>>>2>>>0];var dataSize=HEAPU32[handle+32>>>2>>>0];if(data&&dataSize){var libData=HEAP8.slice(data,data+dataSize);return flags.loadAsync?Promise.resolve(libData):libData}}var f=findLibraryFS(libName,flags.rpath);if(f){var libData=FS.readFile(f,{encoding:"binary"});return flags.loadAsync?Promise.resolve(libData):libData}var libFile=locateFile(libName);if(flags.loadAsync){return asyncLoad(libFile)}if(!readBinary){throw new Error(`${libFile}: file not found, and synchronous loading of external files is not available`)}return readBinary(libFile)}function getExports(){var preloaded=preloadedWasm[libName];if(preloaded){return flags.loadAsync?Promise.resolve(preloaded):preloaded}if(flags.loadAsync){return loadLibData().then(libData=>loadWebAssemblyModule(libData,flags,libName,localScope,handle))}return loadWebAssemblyModule(loadLibData(),flags,libName,localScope,handle)}function moduleLoaded(exports){if(dso.global){mergeLibSymbols(exports,libName)}else if(localScope){Object.assign(localScope,exports)}dso.exports=exports}if(flags.loadAsync){return getExports().then(exports=>{moduleLoaded(exports);return true})}moduleLoaded(getExports());return true}var reportUndefinedSymbols=()=>{for(var[symName,entry]of Object.entries(GOT)){if(entry.value==-1){var value=resolveGlobalSymbol(symName,true).sym;if(!value&&!entry.required){entry.value=0;continue}else if(!value){throw new Error(`Dynamic linking error: undefined symbol '${symName}'`)}if(typeof value=="function"){entry.value=addFunction(value,value.sig)}else if(typeof value=="number"){entry.value=value}else if(typeof value.value=="number"){entry.value=value}else{throw new Error(`bad export type for '${symName}': ${typeof value} (${value})`)}}}};var loadDylibs=async()=>{if(!dynamicLibraries.length){reportUndefinedSymbols();return}addRunDependency("loadDylibs");for(var lib of dynamicLibraries){await loadDynamicLibrary(lib,{loadAsync:true,global:true,nodelete:true,allowUndefined:true})}reportUndefinedSymbols();removeRunDependency("loadDylibs")};var noExitRuntime=false;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>>0]=value;break;case"i8":HEAP8[ptr>>>0]=value;break;case"i16":HEAP16[ptr>>>1>>>0]=value;break;case"i32":HEAP32[ptr>>>2>>>0]=value;break;case"i64":HEAP64[ptr>>>3>>>0]=BigInt(value);break;case"float":HEAPF32[ptr>>>2>>>0]=value;break;case"double":HEAPF64[ptr>>>3>>>0]=value;break;case"*":HEAPU32[ptr>>>2>>>0]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var _JsvError_Check=()=>{};var _Jsv_GetError_import=()=>{};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function ___assert_fail(condition,filename,line,func){condition>>>=0;filename>>>=0;func>>>=0;return abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}___assert_fail.sig="vppip";function ___call_sighandler(fp,sig){fp>>>=0;return getWasmTableEntry(fp)(sig)}___call_sighandler.sig="vpi";var SOCKFS={websocketArgs:{},callbacks:{},on(event,callback){SOCKFS.callbacks[event]=callback},emit(event,param){SOCKFS.callbacks[event]?.(param)},mount(mount){SOCKFS.websocketArgs=Module["websocket"]||{};(Module["websocket"]??={})["on"]=SOCKFS.on;return FS.createNode(null,"/",16895,0)},createSocket(family,type,protocol){if(family!=2){throw new FS.ErrnoError(5)}type&=~526336;if(type!=1&&type!=2){throw new FS.ErrnoError(28)}var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family,type,protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return`socket[${SOCKFS.nextname.current++}]`},websocket_sock_ops:{createPeer(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var url="ws://".replace("#","//");var subProtocols="binary";var opts=undefined;if(SOCKFS.websocketArgs["url"]){url=SOCKFS.websocketArgs["url"]}if(SOCKFS.websocketArgs["subprotocol"]){subProtocols=SOCKFS.websocketArgs["subprotocol"]}else if(SOCKFS.websocketArgs["subprotocol"]===null){subProtocols="null"}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr,port,socket:ws,msg_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.msg_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer(sock,addr,port){return sock.peers[addr+":"+port]},addPeer(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents(sock,peer){var first=true;var handleOpen=function(){sock.connecting=false;SOCKFS.emit("open",sock.stream.fd);try{var queued=peer.msg_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.msg_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{if(data.byteLength==0){return}data=new Uint8Array(data)}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data});SOCKFS.emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){SOCKFS.emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){SOCKFS.emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;SOCKFS.emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){if(sock.connecting){mask|=4}else{mask|=16}}return mask},ioctl(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>>2>>>0]=bytes;return 0;case 21537:var on=HEAP32[arg>>>2>>>0];if(on){sock.stream.flags|=2048}else{sock.stream.flags&=~2048}return 0;default:return 28}},close(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}for(var peer of Object.values(sock.peers)){try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e.name==="ErrnoError"))throw e;if(e.errno!==138)throw e}}},connect(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;sock.connecting=true},listen(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}if(sock.server){throw new FS.ErrnoError(28)}var WebSocketServer=require("ws").Server;var host=sock.saddr;sock.server=new WebSocketServer({host,port:sock.sport});SOCKFS.emit("listen",sock.stream.fd);sock.server.on("connection",function(ws){if(sock.type===1){var newsock=SOCKFS.createSocket(sock.family,sock.type,sock.protocol);var peer=SOCKFS.websocket_sock_ops.createPeer(newsock,ws);newsock.daddr=peer.addr;newsock.dport=peer.port;sock.pending.push(newsock);SOCKFS.emit("connection",newsock.stream.fd)}else{SOCKFS.websocket_sock_ops.createPeer(sock,ws);SOCKFS.emit("connection",sock.stream.fd)}});sock.server.on("close",function(){SOCKFS.emit("close",sock.stream.fd);sock.server=null});sock.server.on("error",function(error){sock.error=23;SOCKFS.emit("error",[sock.stream.fd,sock.error,"EHOSTUNREACH: Host is unreachable"])})},accept(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr,port}},sendmsg(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data=buffer.slice(offset,offset+length);if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(sock.type===2){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}}dest.msg_send_queue.push(data);return length}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}throw new FS.ErrnoError(6)}throw new FS.ErrnoError(6)}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead{var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket};var inetPton4=str=>{var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0};var inetPton6=str=>{var words;var w,offset,z,i;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=Number(words[words.length-4])+Number(words[words.length-3])*256;words[words.length-3]=Number(words[words.length-2])+Number(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w{switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>>2>>>0]=16}HEAP16[sa>>>1>>>0]=family;HEAP32[sa+4>>>2>>>0]=addr;HEAP16[sa+2>>>1>>>0]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>>2>>>0]=28}HEAP32[sa>>>2>>>0]=family;HEAP32[sa+8>>>2>>>0]=addr[0];HEAP32[sa+12>>>2>>>0]=addr[1];HEAP32[sa+16>>>2>>>0]=addr[2];HEAP32[sa+20>>>2>>>0]=addr[3];HEAP16[sa+2>>>1>>>0]=_htons(port);break;default:return 5}return 0};var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags,d1,d2){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_accept4.sig="iippiii";var inetNtop4=addr=>(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255);var inetNtop6=ints=>{var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word{var family=HEAP16[sa>>>1>>>0];var port=_ntohs(HEAPU16[sa+2>>>1>>>0]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>>2>>>0];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>>2>>>0],HEAP32[sa+12>>>2>>>0],HEAP32[sa+16>>>2>>>0],HEAP32[sa+20>>>2>>>0]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family,addr,port}};var getSocketAddress=(addrp,addrlen)=>{var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info};function ___syscall_bind(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_bind.sig="iippiii";var SYSCALLS={calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>>2>>>0]=stat.dev;HEAPU32[buf+4>>>2>>>0]=stat.mode;HEAPU32[buf+8>>>2>>>0]=stat.nlink;HEAPU32[buf+12>>>2>>>0]=stat.uid;HEAPU32[buf+16>>>2>>>0]=stat.gid;HEAPU32[buf+20>>>2>>>0]=stat.rdev;HEAP64[buf+24>>>3>>>0]=BigInt(stat.size);HEAP32[buf+32>>>2>>>0]=4096;HEAP32[buf+36>>>2>>>0]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>>3>>>0]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>>2>>>0]=atime%1e3*1e3*1e3;HEAP64[buf+56>>>3>>>0]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>>2>>>0]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>>3>>>0]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>>2>>>0]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>>3>>>0]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>>2>>>0]=stats.bsize;HEAPU32[buf+60>>>2>>>0]=stats.bsize;HEAP64[buf+8>>>3>>>0]=BigInt(stats.blocks);HEAP64[buf+16>>>3>>>0]=BigInt(stats.bfree);HEAP64[buf+24>>>3>>>0]=BigInt(stats.bavail);HEAP64[buf+32>>>3>>>0]=BigInt(stats.files);HEAP64[buf+40>>>3>>>0]=BigInt(stats.ffree);HEAPU32[buf+48>>>2>>>0]=stats.fsid;HEAPU32[buf+64>>>2>>>0]=stats.flags;HEAPU32[buf+56>>>2>>>0]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_chdir(path){path>>>=0;try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_chdir.sig="ip";function ___syscall_chmod(path,mode){path>>>=0;try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_chmod.sig="ipi";function ___syscall_connect(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_connect.sig="iippiii";function ___syscall_dup(fd){try{var old=SYSCALLS.getStreamFromFD(fd);return FS.dupStream(old).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_dup.sig="ii";function ___syscall_dup3(fd,newfd,flags){try{var old=SYSCALLS.getStreamFromFD(fd);if(old.fd===newfd)return-28;if(newfd<0||newfd>=FS.MAX_OPEN_FDS)return-8;var existing=FS.getStream(newfd);if(existing)FS.close(existing);return FS.dupStream(old,newfd).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_dup3.sig="iiii";function ___syscall_faccessat(dirfd,path,amode,flags){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_faccessat.sig="iipii";var ___syscall_fadvise64=(fd,offset,len,advice)=>0;___syscall_fadvise64.sig="iijji";function ___syscall_fallocate(fd,mode,offset,len){offset=bigintToI53Checked(offset);len=bigintToI53Checked(len);try{if(isNaN(offset)||isNaN(len))return-61;if(mode!=0){return-138}if(offset<0||len<0){return-28}var oldSize=FS.fstat(fd).size;var newSize=offset+len;if(newSize>oldSize){FS.ftruncate(fd,newSize)}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fallocate.sig="iiijj";function ___syscall_fchdir(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.chdir(stream.path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fchdir.sig="ii";function ___syscall_fchmod(fd,mode){try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fchmod.sig="iii";function ___syscall_fchmodat2(dirfd,path,mode,flags){path>>>=0;try{var nofollow=flags&256;path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.chmod(path,mode,nofollow);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fchmodat2.sig="iipii";function ___syscall_fchown32(fd,owner,group){try{FS.fchown(fd,owner,group);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fchown32.sig="iiii";function ___syscall_fchownat(dirfd,path,owner,group,flags){path>>>=0;try{path=SYSCALLS.getStr(path);var nofollow=flags&256;flags=flags&~256;path=SYSCALLS.calculateAt(dirfd,path);(nofollow?FS.lchown:FS.chown)(path,owner,group);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fchownat.sig="iipiii";var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>>2>>>0];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>>1>>>0]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fcntl64.sig="iiip";function ___syscall_fdatasync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fdatasync.sig="ii";function ___syscall_fstat64(fd,buf){buf>>>=0;try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fstat64.sig="iip";function ___syscall_fstatfs64(fd,size,buf){size>>>=0;buf>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);SYSCALLS.writeStatFs(buf,FS.statfsStream(stream));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_fstatfs64.sig="iipp";function ___syscall_ftruncate64(fd,length){length=bigintToI53Checked(length);try{if(isNaN(length))return-61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_ftruncate64.sig="iij";function ___syscall_getcwd(buf,size){buf>>>=0;size>>>=0;try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>>=0;count>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);stream.getdents||=FS.readdir(stream.path);var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var startIdx=Math.floor(off/struct_size);var endIdx=Math.min(stream.getdents.length,startIdx+Math.floor(count/struct_size));for(var idx=startIdx;idx>>3>>>0]=BigInt(id);HEAP64[dirp+pos+8>>>3>>>0]=BigInt((idx+1)*struct_size);HEAP16[dirp+pos+16>>>1>>>0]=280;HEAP8[dirp+pos+18>>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_getdents64.sig="iipp";function ___syscall_getpeername(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);if(!sock.daddr){return-53}var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.daddr),sock.dport,addrlen);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_getpeername.sig="iippiii";function ___syscall_getsockname(fd,addr,addrlen,d1,d2,d3){addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_getsockname.sig="iippiii";function ___syscall_getsockopt(fd,level,optname,optval,optlen,d1){optval>>>=0;optlen>>>=0;try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>>2>>>0]=sock.error;HEAP32[optlen>>>2>>>0]=4;sock.error=null;return 0}}return-50}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_getsockopt.sig="iiiippi";function ___syscall_ioctl(fd,op,varargs){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>>2>>>0]=termios.c_iflag||0;HEAP32[argp+4>>>2>>>0]=termios.c_oflag||0;HEAP32[argp+8>>>2>>>0]=termios.c_cflag||0;HEAP32[argp+12>>>2>>>0]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17>>>0]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>>2>>>0];var c_oflag=HEAP32[argp+4>>>2>>>0];var c_cflag=HEAP32[argp+8>>>2>>>0];var c_lflag=HEAP32[argp+12>>>2>>>0];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17>>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>>2>>>0]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>>1>>>0]=winsize[0];HEAP16[argp+2>>>1>>>0]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_ioctl.sig="iiip";function ___syscall_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_listen.sig="iiiiiii";function ___syscall_lstat64(path,buf){path>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_lstat64.sig="ipp";function ___syscall_mkdirat(dirfd,path,mode){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_mkdirat.sig="iipi";function ___syscall_mknodat(dirfd,path,mode,dev){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_mknodat.sig="iipii";function ___syscall_newfstatat(dirfd,path,buf,flags){path>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_newfstatat.sig="iippi";function ___syscall_openat(dirfd,path,flags,varargs){path>>>=0;varargs>>>=0;SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_openat.sig="iipip";var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount(mount){return FS.createNode(null,"/",16384|511,0)},createPipe(){var pipe={buckets:[],refcnt:2,timestamp:new Date};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{getattr(stream){var node=stream.node;var timestamp=node.pipe.timestamp;return{dev:14,ino:node.id,mode:4480,nlink:1,uid:0,gid:0,rdev:0,size:0,atime:timestamp,mtime:timestamp,ctime:timestamp,blksize:4096,blocks:0}},poll(stream,timeout,notifyCallback){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}for(var bucket of pipe.buckets){if(bucket.offset-bucket.roffset>0){return 64|1}}return 0},dup(stream){stream.node.pipe.refcnt++},ioctl(stream,request,varargs){return 28},fsync(stream){return 28},read(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var bucket of pipe.buckets){currentLength+=bucket.offset-bucket.roffset}var data=buffer.subarray(offset,offset+length);if(length<=0){return 0}if(currentLength==0){throw new FS.ErrnoError(6)}var toRead=Math.min(currentLength,length);var totalRead=toRead;var toRemove=0;for(var bucket of pipe.buckets){var bucketSize=bucket.offset-bucket.roffset;if(toRead<=bucketSize){var tmpSlice=bucket.buffer.subarray(bucket.roffset,bucket.offset);if(toRead=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};function ___syscall_pipe(fdPtr){fdPtr>>>=0;try{if(fdPtr==0){throw new FS.ErrnoError(21)}var res=PIPEFS.createPipe();HEAP32[fdPtr>>>2>>>0]=res.readable_fd;HEAP32[fdPtr+4>>>2>>>0]=res.writable_fd;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_pipe.sig="ip";function ___syscall_poll(fds,nfds,timeout){fds>>>=0;try{var count=0;for(var i=0;i>>2>>>0];var events=HEAP16[pollfd+4>>>1>>>0];var flags=32;var stream=FS.getStream(fd);if(stream){if(stream.stream_ops.poll){flags=stream.stream_ops.poll(stream,-1)}else{flags=5}}flags&=events|8|16;if(flags)count++;HEAP16[pollfd+6>>>1>>>0]=flags}return count}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_poll.sig="ipii";function ___syscall_readlinkat(dirfd,path,buf,bufsize){path>>>=0;buf>>>=0;bufsize>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len>>>0];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len>>>0]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_readlinkat.sig="iippp";function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){buf>>>=0;len>>>=0;addr>>>=0;addrlen>>>=0;try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf>>>0);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_recvfrom.sig="iippipp";function ___syscall_recvmsg(fd,message,flags,d1,d2,d3){message>>>=0;try{var sock=getSocketFromFD(fd);var iov=HEAPU32[message+8>>>2>>>0];var num=HEAP32[message+12>>>2>>>0];var total=0;for(var i=0;i>>2>>>0]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAPU32[message>>>2>>>0];if(name){var errno=writeSockaddr(name,sock.family,DNS.lookup_name(msg.addr),msg.port)}var bytesRead=0;var bytesRemaining=msg.buffer.byteLength;for(var i=0;bytesRemaining>0&&i>>2>>>0];var iovlen=HEAP32[iov+(8*i+4)>>>2>>>0];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead>>>0);bytesRead+=length;bytesRemaining-=length}return bytesRead}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_recvmsg.sig="iipiiii";function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){oldpath>>>=0;newpath>>>=0;try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_renameat.sig="iipip";function ___syscall_rmdir(path){path>>>=0;try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_rmdir.sig="ip";function ___syscall_sendmsg(fd,message,flags,d1,d2,d3){message>>>=0;d1>>>=0;d2>>>=0;try{var sock=getSocketFromFD(fd);var iov=HEAPU32[message+8>>>2>>>0];var num=HEAP32[message+12>>>2>>>0];var addr,port;var name=HEAPU32[message>>>2>>>0];var namelen=HEAP32[message+4>>>2>>>0];if(name){var info=getSocketAddress(name,namelen);port=info.port;addr=info.addr}var total=0;for(var i=0;i>>2>>>0]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>>2>>>0];var iovlen=HEAP32[iov+(8*i+4)>>>2>>>0];for(var j=0;j>>0]}}return sock.sock_ops.sendmsg(sock,view,0,total,addr,port)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_sendmsg.sig="iipippi";function ___syscall_sendto(fd,message,length,flags,addr,addr_len){message>>>=0;length>>>=0;addr>>>=0;addr_len>>>=0;try{var sock=getSocketFromFD(fd);if(!addr){return FS.write(sock.stream,HEAP8,message,length)}var dest=getSocketAddress(addr,addr_len);return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_sendto.sig="iippipp";function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_socket.sig="iiiiiii";function ___syscall_stat64(path,buf){path>>>=0;buf>>>=0;try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_stat64.sig="ipp";function ___syscall_statfs64(path,size,buf){path>>>=0;size>>>=0;buf>>>=0;try{SYSCALLS.writeStatFs(buf,FS.statfs(SYSCALLS.getStr(path)));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_statfs64.sig="ippp";function ___syscall_symlinkat(target,dirfd,linkpath){target>>>=0;linkpath>>>=0;try{target=SYSCALLS.getStr(target);linkpath=SYSCALLS.getStr(linkpath);linkpath=SYSCALLS.calculateAt(dirfd,linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_symlinkat.sig="ipip";function ___syscall_truncate64(path,length){path>>>=0;length=bigintToI53Checked(length);try{if(isNaN(length))return-61;path=SYSCALLS.getStr(path);FS.truncate(path,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_truncate64.sig="ipj";function ___syscall_unlinkat(dirfd,path,flags){path>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(!flags){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{return-28}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_unlinkat.sig="iipi";var readI53FromI64=ptr=>HEAPU32[ptr>>>2>>>0]+HEAP32[ptr+4>>>2>>>0]*4294967296;function ___syscall_utimensat(dirfd,path,times,flags){path>>>=0;times>>>=0;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);var now=Date.now(),atime,mtime;if(!times){atime=now;mtime=now}else{var seconds=readI53FromI64(times);var nanoseconds=HEAP32[times+8>>>2>>>0];if(nanoseconds==1073741823){atime=now}else if(nanoseconds==1073741822){atime=null}else{atime=seconds*1e3+nanoseconds/(1e3*1e3)}times+=16;seconds=readI53FromI64(times);nanoseconds=HEAP32[times+8>>>2>>>0];if(nanoseconds==1073741823){mtime=now}else if(nanoseconds==1073741822){mtime=null}else{mtime=seconds*1e3+nanoseconds/(1e3*1e3)}}if((mtime??atime)!==null){FS.utime(path,atime,mtime)}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}___syscall_utimensat.sig="iippi";var __abort_js=()=>abort("");__abort_js.sig="v";var dlSetError=msg=>{var sp=stackSave();var cmsg=stringToUTF8OnStack(msg);___dl_seterr(cmsg,0);stackRestore(sp)};var dlopenInternal=(handle,jsflags)=>{var filename=UTF8ToString(handle+36);var flags=HEAP32[handle+4>>>2>>>0];filename=PATH.normalize(filename);var searchpaths=[];var global=Boolean(flags&256);var localScope=global?null:{};var combinedFlags={global,nodelete:Boolean(flags&4096),loadAsync:jsflags.loadAsync};if(jsflags.loadAsync){return loadDynamicLibrary(filename,combinedFlags,localScope,handle)}try{return loadDynamicLibrary(filename,combinedFlags,localScope,handle)}catch(e){dlSetError(`could not load dynamic lib: ${filename}\n${e}`);return 0}};function __dlopen_js(handle){handle>>>=0;return dlopenInternal(handle,{loadAsync:false})}__dlopen_js.sig="pp";function __dlsym_js(handle,symbol,symbolIndex){handle>>>=0;symbol>>>=0;symbolIndex>>>=0;symbol=UTF8ToString(symbol);var result;var newSymIndex;var lib=LDSO.loadedLibsByHandle[handle];newSymIndex=Object.keys(lib.exports).indexOf(symbol);if(newSymIndex==-1||lib.exports[symbol].stub){dlSetError(`Tried to lookup unknown symbol "${symbol}" in dynamic lib: ${lib.name}`);return 0}result=lib.exports[symbol];if(typeof result=="function"){var addr=getFunctionAddress(result);if(addr){result=addr}else{result=addFunction(result,result.sig);HEAPU32[symbolIndex>>>2>>>0]=newSymIndex}}return result}__dlsym_js.sig="pppp";var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};_proc_exit.sig="vi";var exitJS=(status,implicit)=>{EXITSTATUS=status;if(!keepRuntimeAlive()){exitRuntime()}_proc_exit(status)};var _exit=exitJS;_exit.sig="vi";var maybeExit=()=>{if(runtimeExited){return}if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(runtimeExited||ABORT){return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};runtimeKeepalivePush.sig="v";var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};runtimeKeepalivePop.sig="v";function __emscripten_dlopen_js(handle,onsuccess,onerror,user_data){handle>>>=0;onsuccess>>>=0;onerror>>>=0;user_data>>>=0;function errorCallback(e){var filename=UTF8ToString(handle+36);dlSetError(`'Could not load dynamic lib: ${filename}\n${e}`);runtimeKeepalivePop();callUserCallback(()=>getWasmTableEntry(onerror)(handle,user_data))}function successCallback(){runtimeKeepalivePop();callUserCallback(()=>getWasmTableEntry(onsuccess)(handle,user_data))}runtimeKeepalivePush();var promise=dlopenInternal(handle,{loadAsync:true});if(promise){promise.then(successCallback,errorCallback)}else{errorCallback()}}__emscripten_dlopen_js.sig="vpppp";var getExecutableName=()=>thisProgram||"./this.program";function __emscripten_get_progname(str,len){str>>>=0;return stringToUTF8(getExecutableName(),str,len)}__emscripten_get_progname.sig="vpi";var jsStackTrace=()=>(new Error).stack.toString();var getCallstack=flags=>{var callstack=jsStackTrace();var lines=callstack.split("\n");callstack="";var firefoxRe=new RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)");var chromeRe=new RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)");for(var line of lines){var symbolName="";var file="";var lineno=0;var column=0;var parts=chromeRe.exec(line);if(parts?.length==5){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]}else{parts=firefoxRe.exec(line);if(parts?.length>=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}if(symbolName=="_emscripten_log"||symbolName=="_emscripten_get_callstack"){callstack="";continue}if(flags&24){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=` at ${symbolName} (${file}:${lineno}:${column})\n`}}callstack=callstack.replace(/\s+$/,"");return callstack};function __emscripten_log_formatted(flags,str){str>>>=0;str=UTF8ToString(str);if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+getCallstack(flags)}if(flags&1){if(flags&4){console.error(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{console.log(str)}}else if(flags&6){err(str)}else{out(str)}}__emscripten_log_formatted.sig="vip";function __emscripten_lookup_name(name){name>>>=0;var nameString=UTF8ToString(name);return inetPton4(DNS.lookup_name(nameString))}__emscripten_lookup_name.sig="ip";var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};__emscripten_runtime_keepalive_clear.sig="v";function __emscripten_system(command){command>>>=0;if(ENVIRONMENT_IS_NODE){if(!command)return 1;var cmdstr=UTF8ToString(command);if(!cmdstr.length)return 0;var cp=require("node:child_process");var ret=cp.spawnSync(cmdstr,[],{shell:true,stdio:"inherit"});var _W_EXITCODE=(ret,sig)=>ret<<8|sig;if(ret.status===null){var signalToNumber=sig=>{switch(sig){case"SIGHUP":return 1;case"SIGQUIT":return 3;case"SIGFPE":return 8;case"SIGKILL":return 9;case"SIGALRM":return 14;case"SIGTERM":return 15;default:return 2}};return _W_EXITCODE(0,signalToNumber(ret.signal))}return _W_EXITCODE(ret.status,0)}if(!command)return 0;return-52}__emscripten_system.sig="ip";function __gmtime_js(time,tmPtr){time=bigintToI53Checked(time);tmPtr>>>=0;var date=new Date(time*1e3);HEAP32[tmPtr>>>2>>>0]=date.getUTCSeconds();HEAP32[tmPtr+4>>>2>>>0]=date.getUTCMinutes();HEAP32[tmPtr+8>>>2>>>0]=date.getUTCHours();HEAP32[tmPtr+12>>>2>>>0]=date.getUTCDate();HEAP32[tmPtr+16>>>2>>>0]=date.getUTCMonth();HEAP32[tmPtr+20>>>2>>>0]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>>2>>>0]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>>2>>>0]=yday}__gmtime_js.sig="vjp";var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);tmPtr>>>=0;var date=new Date(time*1e3);HEAP32[tmPtr>>>2>>>0]=date.getSeconds();HEAP32[tmPtr+4>>>2>>>0]=date.getMinutes();HEAP32[tmPtr+8>>>2>>>0]=date.getHours();HEAP32[tmPtr+12>>>2>>>0]=date.getDate();HEAP32[tmPtr+16>>>2>>>0]=date.getMonth();HEAP32[tmPtr+20>>>2>>>0]=date.getFullYear()-1900;HEAP32[tmPtr+24>>>2>>>0]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>>2>>>0]=yday;HEAP32[tmPtr+36>>>2>>>0]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>>2>>>0]=dst}__localtime_js.sig="vjp";var __mktime_js=function(tmPtr){tmPtr>>>=0;var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>>2>>>0]+1900,HEAP32[tmPtr+16>>>2>>>0],HEAP32[tmPtr+12>>>2>>>0],HEAP32[tmPtr+8>>>2>>>0],HEAP32[tmPtr+4>>>2>>>0],HEAP32[tmPtr>>>2>>>0],0);var dst=HEAP32[tmPtr+32>>>2>>>0];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>>2>>>0]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>>2>>>0]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>>2>>>0]=yday;HEAP32[tmPtr>>>2>>>0]=date.getSeconds();HEAP32[tmPtr+4>>>2>>>0]=date.getMinutes();HEAP32[tmPtr+8>>>2>>>0]=date.getHours();HEAP32[tmPtr+12>>>2>>>0]=date.getDate();HEAP32[tmPtr+16>>>2>>>0]=date.getMonth();HEAP32[tmPtr+20>>>2>>>0]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return BigInt(ret)};__mktime_js.sig="jp";function __mmap_js(len,prot,flags,fd,offset,allocated,addr){len>>>=0;offset=bigintToI53Checked(offset);allocated>>>=0;addr>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>>2>>>0]=res.allocated;HEAPU32[addr>>>2>>>0]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}__mmap_js.sig="ipiiijpp";function __msync_js(addr,len,prot,flags,fd,offset){addr>>>=0;len>>>=0;offset=bigintToI53Checked(offset);try{if(isNaN(offset))return-61;SYSCALLS.doMsync(addr,SYSCALLS.getStreamFromFD(fd),len,flags,offset);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}__msync_js.sig="ippiiij";function __munmap_js(addr,len,prot,flags,fd,offset){addr>>>=0;len>>>=0;offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}__munmap_js.sig="ippiiij";var timers={};var _emscripten_get_now=()=>performance.now();_emscripten_get_now.sig="d";var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};__setitimer_js.sig="iid";var __timegm_js=function(tmPtr){tmPtr>>>=0;var ret=(()=>{var time=Date.UTC(HEAP32[tmPtr+20>>>2>>>0]+1900,HEAP32[tmPtr+16>>>2>>>0],HEAP32[tmPtr+12>>>2>>>0],HEAP32[tmPtr+8>>>2>>>0],HEAP32[tmPtr+4>>>2>>>0],HEAP32[tmPtr>>>2>>>0],0);var date=new Date(time);HEAP32[tmPtr+24>>>2>>>0]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>>2>>>0]=yday;return date.getTime()/1e3})();return BigInt(ret)};__timegm_js.sig="jp";var __tzset_js=function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>>2>>>0]=stdTimezoneOffset*60;HEAP32[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset{if(ENVIRONMENT_IS_NODE){return 1}return 1e3};_emscripten_get_now_res.sig="d";var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_res_get(clk_id,pres){pres>>>=0;if(!checkWasiClock(clk_id)){return 28}var nsec;if(clk_id===0){nsec=1e3*1e3}else if(nowIsMonotonic){nsec=_emscripten_get_now_res()}else{return 52}HEAP64[pres>>>3>>>0]=BigInt(nsec);return 0}_clock_res_get.sig="iip";var _emscripten_date_now=()=>Date.now();_emscripten_date_now.sig="d";function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);ptime>>>=0;if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>>3>>>0]=BigInt(nsec);return 0}_clock_time_get.sig="iijp";var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++>>>0]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>>2>>>0]:ch==106?HEAP64[buf>>>3>>>0]:ch==105?HEAP32[buf>>>2>>>0]:HEAPF64[buf>>>3>>>0]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};function _emscripten_asm_const_int(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}_emscripten_asm_const_int.sig="ippp";function _emscripten_console_error(str){str>>>=0;console.error(UTF8ToString(str))}_emscripten_console_error.sig="vp";function _emscripten_console_log(str){str>>>=0;console.log(UTF8ToString(str))}_emscripten_console_log.sig="vp";function _emscripten_console_trace(str){str>>>=0;console.trace(UTF8ToString(str))}_emscripten_console_trace.sig="vp";function _emscripten_console_warn(str){str>>>=0;console.warn(UTF8ToString(str))}_emscripten_console_warn.sig="vp";var _emscripten_debugger=()=>{debugger};_emscripten_debugger.sig="v";function _emscripten_err(str){str>>>=0;return err(UTF8ToString(str))}_emscripten_err.sig="vp";var getHeapMax=()=>4294901760;function _emscripten_get_heap_max(){return getHeapMax()}_emscripten_get_heap_max.sig="p";var GLctx;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"));var webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"));var webgl_enable_EXT_polygon_offset_clamp=ctx=>!!(ctx.extPolygonOffsetClamp=ctx.getExtension("EXT_polygon_offset_clamp"));var webgl_enable_EXT_clip_control=ctx=>!!(ctx.extClipControl=ctx.getExtension("EXT_clip_control"));var webgl_enable_WEBGL_polygon_mode=ctx=>!!(ctx.webglPolygonMode=ctx.getExtension("WEBGL_polygon_mode"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_color_buffer_float","EXT_conservative_depth","EXT_disjoint_timer_query_webgl2","EXT_texture_norm16","NV_shader_noperspective_interpolation","WEBGL_clip_cull_distance","EXT_clip_control","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_polygon_offset_clamp","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw","WEBGL_polygon_mode"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,unpackRowLength:0,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>>2>>>0]=id}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>>2>>>0]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>>2>>>0],len)}return source},createContext:(canvas,webGLContextAttributes)=>{var ctx=webGLContextAttributes.majorVersion>1?canvas.getContext("webgl2",webGLContextAttributes):canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={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:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module["ctx"]=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext: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]?.GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_multi_draw(GLctx);webgl_enable_EXT_polygon_offset_clamp(GLctx);webgl_enable_EXT_clip_control(GLctx);webgl_enable_WEBGL_polygon_mode(GLctx);webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}for(var ext of getEmscriptenSupportedExtensions(GLctx)){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}}}};var _emscripten_glActiveTexture=x0=>GLctx.activeTexture(x0);_emscripten_glActiveTexture.sig="vi";var _emscripten_glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};_emscripten_glAttachShader.sig="vii";var _emscripten_glBeginQuery=(target,id)=>{GLctx.beginQuery(target,GL.queries[id])};_emscripten_glBeginQuery.sig="vii";var _emscripten_glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};_emscripten_glBeginQueryEXT.sig="vii";var _emscripten_glBeginTransformFeedback=x0=>GLctx.beginTransformFeedback(x0);_emscripten_glBeginTransformFeedback.sig="vi";function _emscripten_glBindAttribLocation(program,index,name){name>>>=0;GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}_emscripten_glBindAttribLocation.sig="viip";var _emscripten_glBindBuffer=(target,buffer)=>{if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])};_emscripten_glBindBuffer.sig="vii";var _emscripten_glBindBufferBase=(target,index,buffer)=>{GLctx.bindBufferBase(target,index,GL.buffers[buffer])};_emscripten_glBindBufferBase.sig="viii";function _emscripten_glBindBufferRange(target,index,buffer,offset,ptrsize){offset>>>=0;ptrsize>>>=0;GLctx.bindBufferRange(target,index,GL.buffers[buffer],offset,ptrsize)}_emscripten_glBindBufferRange.sig="viiipp";var _emscripten_glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};_emscripten_glBindFramebuffer.sig="vii";var _emscripten_glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};_emscripten_glBindRenderbuffer.sig="vii";var _emscripten_glBindSampler=(unit,sampler)=>{GLctx.bindSampler(unit,GL.samplers[sampler])};_emscripten_glBindSampler.sig="vii";var _emscripten_glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};_emscripten_glBindTexture.sig="vii";var _emscripten_glBindTransformFeedback=(target,id)=>{GLctx.bindTransformFeedback(target,GL.transformFeedbacks[id])};_emscripten_glBindTransformFeedback.sig="vii";var _emscripten_glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};_emscripten_glBindVertexArray.sig="vi";var _glBindVertexArray=_emscripten_glBindVertexArray;_glBindVertexArray.sig="vi";var _emscripten_glBindVertexArrayOES=_glBindVertexArray;_emscripten_glBindVertexArrayOES.sig="vi";var _emscripten_glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);_emscripten_glBlendColor.sig="vffff";var _emscripten_glBlendEquation=x0=>GLctx.blendEquation(x0);_emscripten_glBlendEquation.sig="vi";var _emscripten_glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);_emscripten_glBlendEquationSeparate.sig="vii";var _emscripten_glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);_emscripten_glBlendFunc.sig="vii";var _emscripten_glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);_emscripten_glBlendFuncSeparate.sig="viiii";var _emscripten_glBlitFramebuffer=(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)=>GLctx.blitFramebuffer(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);_emscripten_glBlitFramebuffer.sig="viiiiiiiiii";function _emscripten_glBufferData(target,size,data,usage){size>>>=0;data>>>=0;GLctx.bufferData(target,data?HEAPU8.subarray(data>>>0,data+size>>>0):size,usage)}_emscripten_glBufferData.sig="vippi";function _emscripten_glBufferSubData(target,offset,size,data){offset>>>=0;size>>>=0;data>>>=0;GLctx.bufferSubData(target,offset,HEAPU8.subarray(data>>>0,data+size>>>0))}_emscripten_glBufferSubData.sig="vippp";var _emscripten_glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);_emscripten_glCheckFramebufferStatus.sig="ii";var _emscripten_glClear=x0=>GLctx.clear(x0);_emscripten_glClear.sig="vi";var _emscripten_glClearBufferfi=(x0,x1,x2,x3)=>GLctx.clearBufferfi(x0,x1,x2,x3);_emscripten_glClearBufferfi.sig="viifi";function _emscripten_glClearBufferfv(buffer,drawbuffer,value){value>>>=0;GLctx.clearBufferfv(buffer,drawbuffer,HEAPF32,value>>>2)}_emscripten_glClearBufferfv.sig="viip";function _emscripten_glClearBufferiv(buffer,drawbuffer,value){value>>>=0;GLctx.clearBufferiv(buffer,drawbuffer,HEAP32,value>>>2)}_emscripten_glClearBufferiv.sig="viip";function _emscripten_glClearBufferuiv(buffer,drawbuffer,value){value>>>=0;GLctx.clearBufferuiv(buffer,drawbuffer,HEAPU32,value>>>2)}_emscripten_glClearBufferuiv.sig="viip";var _emscripten_glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);_emscripten_glClearColor.sig="vffff";var _emscripten_glClearDepthf=x0=>GLctx.clearDepth(x0);_emscripten_glClearDepthf.sig="vf";var _emscripten_glClearStencil=x0=>GLctx.clearStencil(x0);_emscripten_glClearStencil.sig="vi";function _emscripten_glClientWaitSync(sync,flags,timeout){sync>>>=0;timeout=Number(timeout);return GLctx.clientWaitSync(GL.syncs[sync],flags,timeout)}_emscripten_glClientWaitSync.sig="ipij";var _emscripten_glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};_emscripten_glClipControlEXT.sig="vii";var _emscripten_glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};_emscripten_glColorMask.sig="viiii";var _emscripten_glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};_emscripten_glCompileShader.sig="vi";function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){data>>>=0;if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data);return}}GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data>>>0,data+imageSize>>>0))}_emscripten_glCompressedTexImage2D.sig="viiiiiiip";function _emscripten_glCompressedTexImage3D(target,level,internalFormat,width,height,depth,border,imageSize,data){data>>>=0;if(GLctx.currentPixelUnpackBufferBinding){GLctx.compressedTexImage3D(target,level,internalFormat,width,height,depth,border,imageSize,data)}else{GLctx.compressedTexImage3D(target,level,internalFormat,width,height,depth,border,HEAPU8,data,imageSize)}}_emscripten_glCompressedTexImage3D.sig="viiiiiiiip";function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){data>>>=0;if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data);return}}GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8.subarray(data>>>0,data+imageSize>>>0))}_emscripten_glCompressedTexSubImage2D.sig="viiiiiiiip";function _emscripten_glCompressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data){data>>>=0;if(GLctx.currentPixelUnpackBufferBinding){GLctx.compressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)}else{GLctx.compressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,HEAPU8,data,imageSize)}}_emscripten_glCompressedTexSubImage3D.sig="viiiiiiiiiip";function _emscripten_glCopyBufferSubData(x0,x1,x2,x3,x4){x2>>>=0;x3>>>=0;x4>>>=0;return GLctx.copyBufferSubData(x0,x1,x2,x3,x4)}_emscripten_glCopyBufferSubData.sig="viippp";var _emscripten_glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);_emscripten_glCopyTexImage2D.sig="viiiiiiii";var _emscripten_glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);_emscripten_glCopyTexSubImage2D.sig="viiiiiiii";var _emscripten_glCopyTexSubImage3D=(x0,x1,x2,x3,x4,x5,x6,x7,x8)=>GLctx.copyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8);_emscripten_glCopyTexSubImage3D.sig="viiiiiiiii";var _emscripten_glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};_emscripten_glCreateProgram.sig="i";var _emscripten_glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};_emscripten_glCreateShader.sig="ii";var _emscripten_glCullFace=x0=>GLctx.cullFace(x0);_emscripten_glCullFace.sig="vi";function _emscripten_glDeleteBuffers(n,buffers){buffers>>>=0;for(var i=0;i>>2>>>0];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GLctx.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}}_emscripten_glDeleteBuffers.sig="vip";function _emscripten_glDeleteFramebuffers(n,framebuffers){framebuffers>>>=0;for(var i=0;i>>2>>>0];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}_emscripten_glDeleteFramebuffers.sig="vip";var _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};_emscripten_glDeleteProgram.sig="vi";function _emscripten_glDeleteQueries(n,ids){ids>>>=0;for(var i=0;i>>2>>>0];var query=GL.queries[id];if(!query)continue;GLctx.deleteQuery(query);GL.queries[id]=null}}_emscripten_glDeleteQueries.sig="vip";function _emscripten_glDeleteQueriesEXT(n,ids){ids>>>=0;for(var i=0;i>>2>>>0];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}}_emscripten_glDeleteQueriesEXT.sig="vip";function _emscripten_glDeleteRenderbuffers(n,renderbuffers){renderbuffers>>>=0;for(var i=0;i>>2>>>0];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}_emscripten_glDeleteRenderbuffers.sig="vip";function _emscripten_glDeleteSamplers(n,samplers){samplers>>>=0;for(var i=0;i>>2>>>0];var sampler=GL.samplers[id];if(!sampler)continue;GLctx.deleteSampler(sampler);sampler.name=0;GL.samplers[id]=null}}_emscripten_glDeleteSamplers.sig="vip";var _emscripten_glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};_emscripten_glDeleteShader.sig="vi";function _emscripten_glDeleteSync(id){id>>>=0;if(!id)return;var sync=GL.syncs[id];if(!sync){GL.recordError(1281);return}GLctx.deleteSync(sync);sync.name=0;GL.syncs[id]=null}_emscripten_glDeleteSync.sig="vp";function _emscripten_glDeleteTextures(n,textures){textures>>>=0;for(var i=0;i>>2>>>0];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}_emscripten_glDeleteTextures.sig="vip";function _emscripten_glDeleteTransformFeedbacks(n,ids){ids>>>=0;for(var i=0;i>>2>>>0];var transformFeedback=GL.transformFeedbacks[id];if(!transformFeedback)continue;GLctx.deleteTransformFeedback(transformFeedback);transformFeedback.name=0;GL.transformFeedbacks[id]=null}}_emscripten_glDeleteTransformFeedbacks.sig="vip";function _emscripten_glDeleteVertexArrays(n,vaos){vaos>>>=0;for(var i=0;i>>2>>>0];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}}_emscripten_glDeleteVertexArrays.sig="vip";var _glDeleteVertexArrays=_emscripten_glDeleteVertexArrays;_glDeleteVertexArrays.sig="vip";var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArrays;_emscripten_glDeleteVertexArraysOES.sig="vip";var _emscripten_glDepthFunc=x0=>GLctx.depthFunc(x0);_emscripten_glDepthFunc.sig="vi";var _emscripten_glDepthMask=flag=>{GLctx.depthMask(!!flag)};_emscripten_glDepthMask.sig="vi";var _emscripten_glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);_emscripten_glDepthRangef.sig="vff";var _emscripten_glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};_emscripten_glDetachShader.sig="vii";var _emscripten_glDisable=x0=>GLctx.disable(x0);_emscripten_glDisable.sig="vi";var _emscripten_glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};_emscripten_glDisableVertexAttribArray.sig="vi";var _emscripten_glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};_emscripten_glDrawArrays.sig="viii";var _emscripten_glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};_emscripten_glDrawArraysInstanced.sig="viiii";var _glDrawArraysInstanced=_emscripten_glDrawArraysInstanced;_glDrawArraysInstanced.sig="viiii";var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedARB=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedEXT=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedNV=_glDrawArraysInstanced;var tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){bufs>>>=0;var bufArray=tempFixedLengthArray[n];for(var i=0;i>>2>>>0]}GLctx.drawBuffers(bufArray)}_emscripten_glDrawBuffers.sig="vip";var _glDrawBuffers=_emscripten_glDrawBuffers;_glDrawBuffers.sig="vip";var _emscripten_glDrawBuffersEXT=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffers;function _emscripten_glDrawElements(mode,count,type,indices){indices>>>=0;GLctx.drawElements(mode,count,type,indices)}_emscripten_glDrawElements.sig="viiip";function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){indices>>>=0;GLctx.drawElementsInstanced(mode,count,type,indices,primcount)}_emscripten_glDrawElementsInstanced.sig="viiipi";var _glDrawElementsInstanced=_emscripten_glDrawElementsInstanced;_glDrawElementsInstanced.sig="viiipi";var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedARB=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedEXT=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedNV=_glDrawElementsInstanced;var _glDrawElements=_emscripten_glDrawElements;_glDrawElements.sig="viiip";function _emscripten_glDrawRangeElements(mode,start,end,count,type,indices){indices>>>=0;_glDrawElements(mode,count,type,indices)}_emscripten_glDrawRangeElements.sig="viiiiip";var _emscripten_glEnable=x0=>GLctx.enable(x0);_emscripten_glEnable.sig="vi";var _emscripten_glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};_emscripten_glEnableVertexAttribArray.sig="vi";var _emscripten_glEndQuery=x0=>GLctx.endQuery(x0);_emscripten_glEndQuery.sig="vi";var _emscripten_glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};_emscripten_glEndQueryEXT.sig="vi";var _emscripten_glEndTransformFeedback=()=>GLctx.endTransformFeedback();_emscripten_glEndTransformFeedback.sig="v";function _emscripten_glFenceSync(condition,flags){var sync=GLctx.fenceSync(condition,flags);if(sync){var id=GL.getNewId(GL.syncs);sync.name=id;GL.syncs[id]=sync;return id}return 0}_emscripten_glFenceSync.sig="pii";var _emscripten_glFinish=()=>GLctx.finish();_emscripten_glFinish.sig="v";var _emscripten_glFlush=()=>GLctx.flush();_emscripten_glFlush.sig="v";var _emscripten_glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};_emscripten_glFramebufferRenderbuffer.sig="viiii";var _emscripten_glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};_emscripten_glFramebufferTexture2D.sig="viiiii";var _emscripten_glFramebufferTextureLayer=(target,attachment,texture,level,layer)=>{GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)};_emscripten_glFramebufferTextureLayer.sig="viiiii";var _emscripten_glFrontFace=x0=>GLctx.frontFace(x0);_emscripten_glFrontFace.sig="vi";function _emscripten_glGenBuffers(n,buffers){buffers>>>=0;GL.genObject(n,buffers,"createBuffer",GL.buffers)}_emscripten_glGenBuffers.sig="vip";function _emscripten_glGenFramebuffers(n,ids){ids>>>=0;GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)}_emscripten_glGenFramebuffers.sig="vip";function _emscripten_glGenQueries(n,ids){ids>>>=0;GL.genObject(n,ids,"createQuery",GL.queries)}_emscripten_glGenQueries.sig="vip";function _emscripten_glGenQueriesEXT(n,ids){ids>>>=0;for(var i=0;i>>2>>>0]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>>2>>>0]=id}}_emscripten_glGenQueriesEXT.sig="vip";function _emscripten_glGenRenderbuffers(n,renderbuffers){renderbuffers>>>=0;GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}_emscripten_glGenRenderbuffers.sig="vip";function _emscripten_glGenSamplers(n,samplers){samplers>>>=0;GL.genObject(n,samplers,"createSampler",GL.samplers)}_emscripten_glGenSamplers.sig="vip";function _emscripten_glGenTextures(n,textures){textures>>>=0;GL.genObject(n,textures,"createTexture",GL.textures)}_emscripten_glGenTextures.sig="vip";function _emscripten_glGenTransformFeedbacks(n,ids){ids>>>=0;GL.genObject(n,ids,"createTransformFeedback",GL.transformFeedbacks)}_emscripten_glGenTransformFeedbacks.sig="vip";function _emscripten_glGenVertexArrays(n,arrays){arrays>>>=0;GL.genObject(n,arrays,"createVertexArray",GL.vaos)}_emscripten_glGenVertexArrays.sig="vip";var _glGenVertexArrays=_emscripten_glGenVertexArrays;_glGenVertexArrays.sig="vip";var _emscripten_glGenVertexArraysOES=_glGenVertexArrays;_emscripten_glGenVertexArraysOES.sig="vip";var _emscripten_glGenerateMipmap=x0=>GLctx.generateMipmap(x0);_emscripten_glGenerateMipmap.sig="vi";var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>>2>>>0]=numBytesWrittenExclNull;if(size)HEAP32[size>>>2>>>0]=info.size;if(type)HEAP32[type>>>2>>>0]=info.type}};function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){length>>>=0;size>>>=0;type>>>=0;name>>>=0;return __glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}_emscripten_glGetActiveAttrib.sig="viiipppp";function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){length>>>=0;size>>>=0;type>>>=0;name>>>=0;return __glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}_emscripten_glGetActiveUniform.sig="viiipppp";function _emscripten_glGetActiveUniformBlockName(program,uniformBlockIndex,bufSize,length,uniformBlockName){length>>>=0;uniformBlockName>>>=0;program=GL.programs[program];var result=GLctx.getActiveUniformBlockName(program,uniformBlockIndex);if(!result)return;if(uniformBlockName&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(result,uniformBlockName,bufSize);if(length)HEAP32[length>>>2>>>0]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>>2>>>0]=0}}_emscripten_glGetActiveUniformBlockName.sig="viiipp";function _emscripten_glGetActiveUniformBlockiv(program,uniformBlockIndex,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}program=GL.programs[program];if(pname==35393){var name=GLctx.getActiveUniformBlockName(program,uniformBlockIndex);HEAP32[params>>>2>>>0]=name.length+1;return}var result=GLctx.getActiveUniformBlockParameter(program,uniformBlockIndex,pname);if(result===null)return;if(pname==35395){for(var i=0;i>>2>>>0]=result[i]}}else{HEAP32[params>>>2>>>0]=result}}_emscripten_glGetActiveUniformBlockiv.sig="viiip";function _emscripten_glGetActiveUniformsiv(program,uniformCount,uniformIndices,pname,params){uniformIndices>>>=0;params>>>=0;if(!params){GL.recordError(1281);return}if(uniformCount>0&&uniformIndices==0){GL.recordError(1281);return}program=GL.programs[program];var ids=[];for(var i=0;i>>2>>>0])}var result=GLctx.getActiveUniforms(program,ids,pname);if(!result)return;var len=result.length;for(var i=0;i>>2>>>0]=result[i]}}_emscripten_glGetActiveUniformsiv.sig="viipip";function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){count>>>=0;shaders>>>=0;var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>>2>>>0]=len;for(var i=0;i>>2>>>0]=id}}_emscripten_glGetAttachedShaders.sig="viipp";function _emscripten_glGetAttribLocation(program,name){name>>>=0;return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}_emscripten_glGetAttribLocation.sig="iip";var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>>2>>>0]=num;var lower=HEAPU32[ptr>>>2>>>0];HEAPU32[ptr+4>>>2>>>0]=(num-lower)/4294967296};var webglGetExtensions=()=>{var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var 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 34814:case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break;case 33309:if(GL.currentContext.version<2){GL.recordError(1282);return}ret=webglGetExtensions().length;break;case 33307:case 33308:if(GL.currentContext.version<2){GL.recordError(1280);return}ret=name_==33307?3: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 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368: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>>>0]=result[i];break;case 2:HEAPF32[p+i*4>>>2>>>0]=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>>>0]=ret;break;case 2:HEAPF32[p>>>2>>>0]=ret;break;case 4:HEAP8[p>>>0]=ret?1:0;break}};function _emscripten_glGetBooleanv(name_,p){p>>>=0;return emscriptenWebGLGet(name_,p,4)}_emscripten_glGetBooleanv.sig="vip";function _emscripten_glGetBufferParameteri64v(target,value,data){data>>>=0;if(!data){GL.recordError(1281);return}writeI53ToI64(data,GLctx.getBufferParameter(target,value))}_emscripten_glGetBufferParameteri64v.sig="viip";function _emscripten_glGetBufferParameteriv(target,value,data){data>>>=0;if(!data){GL.recordError(1281);return}HEAP32[data>>>2>>>0]=GLctx.getBufferParameter(target,value)}_emscripten_glGetBufferParameteriv.sig="viip";var _emscripten_glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};_emscripten_glGetError.sig="i";function _emscripten_glGetFloatv(name_,p){p>>>=0;return emscriptenWebGLGet(name_,p,2)}_emscripten_glGetFloatv.sig="vip";function _emscripten_glGetFragDataLocation(program,name){name>>>=0;return GLctx.getFragDataLocation(GL.programs[program],UTF8ToString(name))}_emscripten_glGetFragDataLocation.sig="iip";function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){params>>>=0;var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>>2>>>0]=result}_emscripten_glGetFramebufferAttachmentParameteriv.sig="viiip";var emscriptenWebGLGetIndexed=(target,index,data,type)=>{if(!data){GL.recordError(1281);return}var result=GLctx.getIndexedParameter(target,index);var ret;switch(typeof result){case"boolean":ret=result?1:0;break;case"number":ret=result;break;case"object":if(result===null){switch(target){case 35983:case 35368:ret=0;break;default:{GL.recordError(1280);return}}}else if(result instanceof WebGLBuffer){ret=result.name|0}else{GL.recordError(1280);return}break;default:GL.recordError(1280);return}switch(type){case 1:writeI53ToI64(data,ret);break;case 0:HEAP32[data>>>2>>>0]=ret;break;case 2:HEAPF32[data>>>2>>>0]=ret;break;case 4:HEAP8[data>>>0]=ret?1:0;break;default:abort("internal emscriptenWebGLGetIndexed() error, bad type: "+type)}};function _emscripten_glGetInteger64i_v(target,index,data){data>>>=0;return emscriptenWebGLGetIndexed(target,index,data,1)}_emscripten_glGetInteger64i_v.sig="viip";function _emscripten_glGetInteger64v(name_,p){p>>>=0;emscriptenWebGLGet(name_,p,1)}_emscripten_glGetInteger64v.sig="vip";function _emscripten_glGetIntegeri_v(target,index,data){data>>>=0;return emscriptenWebGLGetIndexed(target,index,data,0)}_emscripten_glGetIntegeri_v.sig="viip";function _emscripten_glGetIntegerv(name_,p){p>>>=0;return emscriptenWebGLGet(name_,p,0)}_emscripten_glGetIntegerv.sig="vip";function _emscripten_glGetInternalformativ(target,internalformat,pname,bufSize,params){params>>>=0;if(bufSize<0){GL.recordError(1281);return}if(!params){GL.recordError(1281);return}var ret=GLctx.getInternalformatParameter(target,internalformat,pname);if(ret===null)return;for(var i=0;i>>2>>>0]=ret[i]}}_emscripten_glGetInternalformativ.sig="viiiip";function _emscripten_glGetProgramBinary(program,bufSize,length,binaryFormat,binary){length>>>=0;binaryFormat>>>=0;binary>>>=0;GL.recordError(1282)}_emscripten_glGetProgramBinary.sig="viippp";function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){length>>>=0;infoLog>>>=0;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>>>0]=numBytesWrittenExclNull}_emscripten_glGetProgramInfoLog.sig="viipp";function _emscripten_glGetProgramiv(program,pname,p){p>>>=0;if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>>2>>>0]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(var i=0;i>>2>>>0]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){var numActiveAttributes=GLctx.getProgramParameter(program,35721);for(var i=0;i>>2>>>0]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){var numActiveUniformBlocks=GLctx.getProgramParameter(program,35382);for(var i=0;i>>2>>>0]=program.maxUniformBlockNameLength}else{HEAP32[p>>>2>>>0]=GLctx.getProgramParameter(program,pname)}}_emscripten_glGetProgramiv.sig="viip";function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;if(GL.currentContext.version<2){param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}else{param=GLctx.getQueryParameter(query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}_emscripten_glGetQueryObjecti64vEXT.sig="viip";function _emscripten_glGetQueryObjectivEXT(id,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>>2>>>0]=ret}_emscripten_glGetQueryObjectivEXT.sig="viip";var _glGetQueryObjecti64vEXT=_emscripten_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;function _emscripten_glGetQueryObjectuiv(id,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.getQueryParameter(query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>>2>>>0]=ret}_emscripten_glGetQueryObjectuiv.sig="viip";var _glGetQueryObjectivEXT=_emscripten_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;function _emscripten_glGetQueryiv(target,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAP32[params>>>2>>>0]=GLctx.getQuery(target,pname)}_emscripten_glGetQueryiv.sig="viip";function _emscripten_glGetQueryivEXT(target,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAP32[params>>>2>>>0]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}_emscripten_glGetQueryivEXT.sig="viip";function _emscripten_glGetRenderbufferParameteriv(target,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAP32[params>>>2>>>0]=GLctx.getRenderbufferParameter(target,pname)}_emscripten_glGetRenderbufferParameteriv.sig="viip";function _emscripten_glGetSamplerParameterfv(sampler,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAPF32[params>>>2>>>0]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)}_emscripten_glGetSamplerParameterfv.sig="viip";function _emscripten_glGetSamplerParameteriv(sampler,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAP32[params>>>2>>>0]=GLctx.getSamplerParameter(GL.samplers[sampler],pname)}_emscripten_glGetSamplerParameteriv.sig="viip";function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){length>>>=0;infoLog>>>=0;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>>>0]=numBytesWrittenExclNull}_emscripten_glGetShaderInfoLog.sig="viipp";function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){range>>>=0;precision>>>=0;var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>>2>>>0]=result.rangeMin;HEAP32[range+4>>>2>>>0]=result.rangeMax;HEAP32[precision>>>2>>>0]=result.precision}_emscripten_glGetShaderPrecisionFormat.sig="viipp";function _emscripten_glGetShaderSource(shader,bufSize,length,source){length>>>=0;source>>>=0;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>>>0]=numBytesWrittenExclNull}_emscripten_glGetShaderSource.sig="viipp";function _emscripten_glGetShaderiv(shader,pname,p){p>>>=0;if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>>2>>>0]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>>2>>>0]=sourceLength}else{HEAP32[p>>>2>>>0]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}_emscripten_glGetShaderiv.sig="viip";var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};function _emscripten_glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var webGLVersion=GLctx.getParameter(7938);var glVersion=`OpenGL ES 2.0 (${webGLVersion})`;if(GL.currentContext.version>=2)glVersion=`OpenGL ES 3.0 (${webGLVersion})`;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)}GL.stringCache[name_]=ret}return ret}_emscripten_glGetString.sig="pi";function _emscripten_glGetStringi(name,index){if(GL.currentContext.version<2){GL.recordError(1282);return 0}var stringiCache=GL.stringiCache[name];if(stringiCache){if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index]}switch(name){case 7939:var exts=webglGetExtensions().map(stringToNewUTF8);stringiCache=GL.stringiCache[name]=exts;if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index];default:GL.recordError(1280);return 0}}_emscripten_glGetStringi.sig="pii";function _emscripten_glGetSynciv(sync,pname,bufSize,length,values){sync>>>=0;length>>>=0;values>>>=0;if(bufSize<0){GL.recordError(1281);return}if(!values){GL.recordError(1281);return}var ret=GLctx.getSyncParameter(GL.syncs[sync],pname);if(ret!==null){HEAP32[values>>>2>>>0]=ret;if(length)HEAP32[length>>>2>>>0]=1}}_emscripten_glGetSynciv.sig="vpiipp";function _emscripten_glGetTexParameterfv(target,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAPF32[params>>>2>>>0]=GLctx.getTexParameter(target,pname)}_emscripten_glGetTexParameterfv.sig="viip";function _emscripten_glGetTexParameteriv(target,pname,params){params>>>=0;if(!params){GL.recordError(1281);return}HEAP32[params>>>2>>>0]=GLctx.getTexParameter(target,pname)}_emscripten_glGetTexParameteriv.sig="viip";function _emscripten_glGetTransformFeedbackVarying(program,index,bufSize,length,size,type,name){length>>>=0;size>>>=0;type>>>=0;name>>>=0;program=GL.programs[program];var info=GLctx.getTransformFeedbackVarying(program,index);if(!info)return;if(name&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>>2>>>0]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>>2>>>0]=0}if(size)HEAP32[size>>>2>>>0]=info.size;if(type)HEAP32[type>>>2>>>0]=info.type}_emscripten_glGetTransformFeedbackVarying.sig="viiipppp";function _emscripten_glGetUniformBlockIndex(program,uniformBlockName){uniformBlockName>>>=0;return GLctx.getUniformBlockIndex(GL.programs[program],UTF8ToString(uniformBlockName))}_emscripten_glGetUniformBlockIndex.sig="iip";function _emscripten_glGetUniformIndices(program,uniformCount,uniformNames,uniformIndices){uniformNames>>>=0;uniformIndices>>>=0;if(!uniformIndices){GL.recordError(1281);return}if(uniformCount>0&&(uniformNames==0||uniformIndices==0)){GL.recordError(1281);return}program=GL.programs[program];var names=[];for(var i=0;i>>2>>>0]));var result=GLctx.getUniformIndices(program,names);if(!result)return;var len=result.length;for(var i=0;i>>2>>>0]=result[i]}}_emscripten_glGetUniformIndices.sig="viipp";var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j>>=0;name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>>2>>>0]=data;break;case 2:HEAPF32[params>>>2>>>0]=data;break}}else{for(var i=0;i>>2>>>0]=data[i];break;case 2:HEAPF32[params+i*4>>>2>>>0]=data[i];break}}}};function _emscripten_glGetUniformfv(program,location,params){params>>>=0;emscriptenWebGLGetUniform(program,location,params,2)}_emscripten_glGetUniformfv.sig="viip";function _emscripten_glGetUniformiv(program,location,params){params>>>=0;emscriptenWebGLGetUniform(program,location,params,0)}_emscripten_glGetUniformiv.sig="viip";function _emscripten_glGetUniformuiv(program,location,params){params>>>=0;return emscriptenWebGLGetUniform(program,location,params,0)}_emscripten_glGetUniformuiv.sig="viip";var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>>2>>>0]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>>2>>>0]=data;break;case 2:HEAPF32[params>>>2>>>0]=data;break;case 5:HEAP32[params>>>2>>>0]=Math.fround(data);break}}else{for(var i=0;i>>2>>>0]=data[i];break;case 2:HEAPF32[params+i*4>>>2>>>0]=data[i];break;case 5:HEAP32[params+i*4>>>2>>>0]=Math.fround(data[i]);break}}}};function _emscripten_glGetVertexAttribIiv(index,pname,params){params>>>=0;emscriptenWebGLGetVertexAttrib(index,pname,params,0)}_emscripten_glGetVertexAttribIiv.sig="viip";var _glGetVertexAttribIiv=_emscripten_glGetVertexAttribIiv;_glGetVertexAttribIiv.sig="viip";var _emscripten_glGetVertexAttribIuiv=_glGetVertexAttribIiv;_emscripten_glGetVertexAttribIuiv.sig="viip";function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){pointer>>>=0;if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>>2>>>0]=GLctx.getVertexAttribOffset(index,pname)}_emscripten_glGetVertexAttribPointerv.sig="viip";function _emscripten_glGetVertexAttribfv(index,pname,params){params>>>=0;emscriptenWebGLGetVertexAttrib(index,pname,params,2)}_emscripten_glGetVertexAttribfv.sig="viip";function _emscripten_glGetVertexAttribiv(index,pname,params){params>>>=0;emscriptenWebGLGetVertexAttrib(index,pname,params,5)}_emscripten_glGetVertexAttribiv.sig="viip";var _emscripten_glHint=(x0,x1)=>GLctx.hint(x0,x1);_emscripten_glHint.sig="vii";function _emscripten_glInvalidateFramebuffer(target,numAttachments,attachments){attachments>>>=0;var list=tempFixedLengthArray[numAttachments];for(var i=0;i>>2>>>0]}GLctx.invalidateFramebuffer(target,list)}_emscripten_glInvalidateFramebuffer.sig="viip";function _emscripten_glInvalidateSubFramebuffer(target,numAttachments,attachments,x,y,width,height){attachments>>>=0;var list=tempFixedLengthArray[numAttachments];for(var i=0;i>>2>>>0]}GLctx.invalidateSubFramebuffer(target,list,x,y,width,height)}_emscripten_glInvalidateSubFramebuffer.sig="viipiiii";var _emscripten_glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};_emscripten_glIsBuffer.sig="ii";var _emscripten_glIsEnabled=x0=>GLctx.isEnabled(x0);_emscripten_glIsEnabled.sig="ii";var _emscripten_glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};_emscripten_glIsFramebuffer.sig="ii";var _emscripten_glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};_emscripten_glIsProgram.sig="ii";var _emscripten_glIsQuery=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.isQuery(query)};_emscripten_glIsQuery.sig="ii";var _emscripten_glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};_emscripten_glIsQueryEXT.sig="ii";var _emscripten_glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};_emscripten_glIsRenderbuffer.sig="ii";var _emscripten_glIsSampler=id=>{var sampler=GL.samplers[id];if(!sampler)return 0;return GLctx.isSampler(sampler)};_emscripten_glIsSampler.sig="ii";var _emscripten_glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};_emscripten_glIsShader.sig="ii";function _emscripten_glIsSync(sync){sync>>>=0;return GLctx.isSync(GL.syncs[sync])}_emscripten_glIsSync.sig="ip";var _emscripten_glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};_emscripten_glIsTexture.sig="ii";var _emscripten_glIsTransformFeedback=id=>GLctx.isTransformFeedback(GL.transformFeedbacks[id]);_emscripten_glIsTransformFeedback.sig="ii";var _emscripten_glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};_emscripten_glIsVertexArray.sig="ii";var _glIsVertexArray=_emscripten_glIsVertexArray;_glIsVertexArray.sig="ii";var _emscripten_glIsVertexArrayOES=_glIsVertexArray;_emscripten_glIsVertexArrayOES.sig="ii";var _emscripten_glLineWidth=x0=>GLctx.lineWidth(x0);_emscripten_glLineWidth.sig="vf";var _emscripten_glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};_emscripten_glLinkProgram.sig="vi";var _emscripten_glPauseTransformFeedback=()=>GLctx.pauseTransformFeedback();_emscripten_glPauseTransformFeedback.sig="v";var _emscripten_glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}else if(pname==3314){GL.unpackRowLength=param}GLctx.pixelStorei(pname,param)};_emscripten_glPixelStorei.sig="vii";var _emscripten_glPolygonModeWEBGL=(face,mode)=>{GLctx.webglPolygonMode["polygonModeWEBGL"](face,mode)};_emscripten_glPolygonModeWEBGL.sig="vii";var _emscripten_glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);_emscripten_glPolygonOffset.sig="vff";var _emscripten_glPolygonOffsetClampEXT=(factor,units,clamp)=>{GLctx.extPolygonOffsetClamp["polygonOffsetClampEXT"](factor,units,clamp)};_emscripten_glPolygonOffsetClampEXT.sig="vfff";function _emscripten_glProgramBinary(program,binaryFormat,binary,length){binary>>>=0;GL.recordError(1280)}_emscripten_glProgramBinary.sig="viipi";var _emscripten_glProgramParameteri=(program,pname,value)=>{GL.recordError(1280)};_emscripten_glProgramParameteri.sig="viii";var _emscripten_glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};_emscripten_glQueryCounterEXT.sig="vii";var _emscripten_glReadBuffer=x0=>GLctx.readBuffer(x0);_emscripten_glReadBuffer.sig="vi";var computeUnpackAlignedImageSize=(width,height,sizePerPixel)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=(GL.unpackRowLength||width)*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,GL.unpackAlignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel);return heap.subarray(toTypedArrayIndex(pixels,heap)>>>0,toTypedArrayIndex(pixels+bytes,heap)>>>0)};function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){pixels>>>=0;if(GL.currentContext.version>=2){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels);return}}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}_emscripten_glReadPixels.sig="viiiiiip";var _emscripten_glReleaseShaderCompiler=()=>{};_emscripten_glReleaseShaderCompiler.sig="v";var _emscripten_glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);_emscripten_glRenderbufferStorage.sig="viiii";var _emscripten_glRenderbufferStorageMultisample=(x0,x1,x2,x3,x4)=>GLctx.renderbufferStorageMultisample(x0,x1,x2,x3,x4);_emscripten_glRenderbufferStorageMultisample.sig="viiiii";var _emscripten_glResumeTransformFeedback=()=>GLctx.resumeTransformFeedback();_emscripten_glResumeTransformFeedback.sig="v";var _emscripten_glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};_emscripten_glSampleCoverage.sig="vfi";var _emscripten_glSamplerParameterf=(sampler,pname,param)=>{GLctx.samplerParameterf(GL.samplers[sampler],pname,param)};_emscripten_glSamplerParameterf.sig="viif";function _emscripten_glSamplerParameterfv(sampler,pname,params){params>>>=0;var param=HEAPF32[params>>>2>>>0];GLctx.samplerParameterf(GL.samplers[sampler],pname,param)}_emscripten_glSamplerParameterfv.sig="viip";var _emscripten_glSamplerParameteri=(sampler,pname,param)=>{GLctx.samplerParameteri(GL.samplers[sampler],pname,param)};_emscripten_glSamplerParameteri.sig="viii";function _emscripten_glSamplerParameteriv(sampler,pname,params){params>>>=0;var param=HEAP32[params>>>2>>>0];GLctx.samplerParameteri(GL.samplers[sampler],pname,param)}_emscripten_glSamplerParameteriv.sig="viip";var _emscripten_glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);_emscripten_glScissor.sig="viiii";function _emscripten_glShaderBinary(count,shaders,binaryformat,binary,length){shaders>>>=0;binary>>>=0;GL.recordError(1280)}_emscripten_glShaderBinary.sig="vipipi";function _emscripten_glShaderSource(shader,count,string,length){string>>>=0;length>>>=0;var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}_emscripten_glShaderSource.sig="viipp";var _emscripten_glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);_emscripten_glStencilFunc.sig="viii";var _emscripten_glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);_emscripten_glStencilFuncSeparate.sig="viiii";var _emscripten_glStencilMask=x0=>GLctx.stencilMask(x0);_emscripten_glStencilMask.sig="vi";var _emscripten_glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);_emscripten_glStencilMaskSeparate.sig="vii";var _emscripten_glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);_emscripten_glStencilOp.sig="viii";var _emscripten_glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);_emscripten_glStencilOpSeparate.sig="viiii";function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){pixels>>>=0;if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels);return}}var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)}_emscripten_glTexImage2D.sig="viiiiiiiip";function _emscripten_glTexImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixels){pixels>>>=0;if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height*depth,pixels,internalFormat);GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixelData)}else{GLctx.texImage3D(target,level,internalFormat,width,height,depth,border,format,type,null)}}_emscripten_glTexImage3D.sig="viiiiiiiiip";var _emscripten_glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);_emscripten_glTexParameterf.sig="viif";function _emscripten_glTexParameterfv(target,pname,params){params>>>=0;var param=HEAPF32[params>>>2>>>0];GLctx.texParameterf(target,pname,param)}_emscripten_glTexParameterfv.sig="viip";var _emscripten_glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);_emscripten_glTexParameteri.sig="viii";function _emscripten_glTexParameteriv(target,pname,params){params>>>=0;var param=HEAP32[params>>>2>>>0];GLctx.texParameteri(target,pname,param)}_emscripten_glTexParameteriv.sig="viip";var _emscripten_glTexStorage2D=(x0,x1,x2,x3,x4)=>GLctx.texStorage2D(x0,x1,x2,x3,x4);_emscripten_glTexStorage2D.sig="viiiii";var _emscripten_glTexStorage3D=(x0,x1,x2,x3,x4,x5)=>GLctx.texStorage3D(x0,x1,x2,x3,x4,x5);_emscripten_glTexStorage3D.sig="viiiiii";function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){pixels>>>=0;if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels);return}}var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}_emscripten_glTexSubImage2D.sig="viiiiiiiip";function _emscripten_glTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels){pixels>>>=0;if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,heap,toTypedArrayIndex(pixels,heap))}else{GLctx.texSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}}_emscripten_glTexSubImage3D.sig="viiiiiiiiiip";function _emscripten_glTransformFeedbackVaryings(program,count,varyings,bufferMode){varyings>>>=0;program=GL.programs[program];var vars=[];for(var i=0;i>>2>>>0]));GLctx.transformFeedbackVaryings(program,vars,bufferMode)}_emscripten_glTransformFeedbackVaryings.sig="viipi";var _emscripten_glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};_emscripten_glUniform1f.sig="vif";var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){value>>>=0;if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>>2>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*4>>>2>>>0)}GLctx.uniform1fv(webglGetUniformLocation(location),view)}_emscripten_glUniform1fv.sig="viip";var _emscripten_glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};_emscripten_glUniform1i.sig="vii";var miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){value>>>=0;if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>>2>>>0]}}else{var view=HEAP32.subarray(value>>>2>>>0,value+count*4>>>2>>>0)}GLctx.uniform1iv(webglGetUniformLocation(location),view)}_emscripten_glUniform1iv.sig="viip";var _emscripten_glUniform1ui=(location,v0)=>{GLctx.uniform1ui(webglGetUniformLocation(location),v0)};_emscripten_glUniform1ui.sig="vii";function _emscripten_glUniform1uiv(location,count,value){value>>>=0;count&&GLctx.uniform1uiv(webglGetUniformLocation(location),HEAPU32,value>>>2,count)}_emscripten_glUniform1uiv.sig="viip";var _emscripten_glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};_emscripten_glUniform2f.sig="viff";function _emscripten_glUniform2fv(location,count,value){value>>>=0;if(count<=144){count*=2;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAPF32[value+(4*i+4)>>>2>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*8>>>2>>>0)}GLctx.uniform2fv(webglGetUniformLocation(location),view)}_emscripten_glUniform2fv.sig="viip";var _emscripten_glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};_emscripten_glUniform2i.sig="viii";function _emscripten_glUniform2iv(location,count,value){value>>>=0;if(count<=144){count*=2;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAP32[value+(4*i+4)>>>2>>>0]}}else{var view=HEAP32.subarray(value>>>2>>>0,value+count*8>>>2>>>0)}GLctx.uniform2iv(webglGetUniformLocation(location),view)}_emscripten_glUniform2iv.sig="viip";var _emscripten_glUniform2ui=(location,v0,v1)=>{GLctx.uniform2ui(webglGetUniformLocation(location),v0,v1)};_emscripten_glUniform2ui.sig="viii";function _emscripten_glUniform2uiv(location,count,value){value>>>=0;count&&GLctx.uniform2uiv(webglGetUniformLocation(location),HEAPU32,value>>>2,count*2)}_emscripten_glUniform2uiv.sig="viip";var _emscripten_glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};_emscripten_glUniform3f.sig="vifff";function _emscripten_glUniform3fv(location,count,value){value>>>=0;if(count<=96){count*=3;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAPF32[value+(4*i+4)>>>2>>>0];view[i+2]=HEAPF32[value+(4*i+8)>>>2>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*12>>>2>>>0)}GLctx.uniform3fv(webglGetUniformLocation(location),view)}_emscripten_glUniform3fv.sig="viip";var _emscripten_glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};_emscripten_glUniform3i.sig="viiii";function _emscripten_glUniform3iv(location,count,value){value>>>=0;if(count<=96){count*=3;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAP32[value+(4*i+4)>>>2>>>0];view[i+2]=HEAP32[value+(4*i+8)>>>2>>>0]}}else{var view=HEAP32.subarray(value>>>2>>>0,value+count*12>>>2>>>0)}GLctx.uniform3iv(webglGetUniformLocation(location),view)}_emscripten_glUniform3iv.sig="viip";var _emscripten_glUniform3ui=(location,v0,v1,v2)=>{GLctx.uniform3ui(webglGetUniformLocation(location),v0,v1,v2)};_emscripten_glUniform3ui.sig="viiii";function _emscripten_glUniform3uiv(location,count,value){value>>>=0;count&&GLctx.uniform3uiv(webglGetUniformLocation(location),HEAPU32,value>>>2,count*3)}_emscripten_glUniform3uiv.sig="viip";var _emscripten_glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};_emscripten_glUniform4f.sig="viffff";function _emscripten_glUniform4fv(location,count,value){value>>>=0;if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>>2;count*=4;for(var i=0;i>>0];view[i+1]=heap[dst+1>>>0];view[i+2]=heap[dst+2>>>0];view[i+3]=heap[dst+3>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*16>>>2>>>0)}GLctx.uniform4fv(webglGetUniformLocation(location),view)}_emscripten_glUniform4fv.sig="viip";var _emscripten_glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};_emscripten_glUniform4i.sig="viiiii";function _emscripten_glUniform4iv(location,count,value){value>>>=0;if(count<=72){count*=4;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAP32[value+(4*i+4)>>>2>>>0];view[i+2]=HEAP32[value+(4*i+8)>>>2>>>0];view[i+3]=HEAP32[value+(4*i+12)>>>2>>>0]}}else{var view=HEAP32.subarray(value>>>2>>>0,value+count*16>>>2>>>0)}GLctx.uniform4iv(webglGetUniformLocation(location),view)}_emscripten_glUniform4iv.sig="viip";var _emscripten_glUniform4ui=(location,v0,v1,v2,v3)=>{GLctx.uniform4ui(webglGetUniformLocation(location),v0,v1,v2,v3)};_emscripten_glUniform4ui.sig="viiiii";function _emscripten_glUniform4uiv(location,count,value){value>>>=0;count&&GLctx.uniform4uiv(webglGetUniformLocation(location),HEAPU32,value>>>2,count*4)}_emscripten_glUniform4uiv.sig="viip";var _emscripten_glUniformBlockBinding=(program,uniformBlockIndex,uniformBlockBinding)=>{program=GL.programs[program];GLctx.uniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding)};_emscripten_glUniformBlockBinding.sig="viii";function _emscripten_glUniformMatrix2fv(location,count,transpose,value){value>>>=0;if(count<=72){count*=4;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAPF32[value+(4*i+4)>>>2>>>0];view[i+2]=HEAPF32[value+(4*i+8)>>>2>>>0];view[i+3]=HEAPF32[value+(4*i+12)>>>2>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*16>>>2>>>0)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)}_emscripten_glUniformMatrix2fv.sig="viiip";function _emscripten_glUniformMatrix2x3fv(location,count,transpose,value){value>>>=0;count&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>>2,count*6)}_emscripten_glUniformMatrix2x3fv.sig="viiip";function _emscripten_glUniformMatrix2x4fv(location,count,transpose,value){value>>>=0;count&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>>2,count*8)}_emscripten_glUniformMatrix2x4fv.sig="viiip";function _emscripten_glUniformMatrix3fv(location,count,transpose,value){value>>>=0;if(count<=32){count*=9;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>>2>>>0];view[i+1]=HEAPF32[value+(4*i+4)>>>2>>>0];view[i+2]=HEAPF32[value+(4*i+8)>>>2>>>0];view[i+3]=HEAPF32[value+(4*i+12)>>>2>>>0];view[i+4]=HEAPF32[value+(4*i+16)>>>2>>>0];view[i+5]=HEAPF32[value+(4*i+20)>>>2>>>0];view[i+6]=HEAPF32[value+(4*i+24)>>>2>>>0];view[i+7]=HEAPF32[value+(4*i+28)>>>2>>>0];view[i+8]=HEAPF32[value+(4*i+32)>>>2>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*36>>>2>>>0)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)}_emscripten_glUniformMatrix3fv.sig="viiip";function _emscripten_glUniformMatrix3x2fv(location,count,transpose,value){value>>>=0;count&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>>2,count*6)}_emscripten_glUniformMatrix3x2fv.sig="viiip";function _emscripten_glUniformMatrix3x4fv(location,count,transpose,value){value>>>=0;count&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>>2,count*12)}_emscripten_glUniformMatrix3x4fv.sig="viiip";function _emscripten_glUniformMatrix4fv(location,count,transpose,value){value>>>=0;if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>>2;count*=16;for(var i=0;i>>0];view[i+1]=heap[dst+1>>>0];view[i+2]=heap[dst+2>>>0];view[i+3]=heap[dst+3>>>0];view[i+4]=heap[dst+4>>>0];view[i+5]=heap[dst+5>>>0];view[i+6]=heap[dst+6>>>0];view[i+7]=heap[dst+7>>>0];view[i+8]=heap[dst+8>>>0];view[i+9]=heap[dst+9>>>0];view[i+10]=heap[dst+10>>>0];view[i+11]=heap[dst+11>>>0];view[i+12]=heap[dst+12>>>0];view[i+13]=heap[dst+13>>>0];view[i+14]=heap[dst+14>>>0];view[i+15]=heap[dst+15>>>0]}}else{var view=HEAPF32.subarray(value>>>2>>>0,value+count*64>>>2>>>0)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)}_emscripten_glUniformMatrix4fv.sig="viiip";function _emscripten_glUniformMatrix4x2fv(location,count,transpose,value){value>>>=0;count&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>>2,count*8)}_emscripten_glUniformMatrix4x2fv.sig="viiip";function _emscripten_glUniformMatrix4x3fv(location,count,transpose,value){value>>>=0;count&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>>2,count*12)}_emscripten_glUniformMatrix4x3fv.sig="viiip";var _emscripten_glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};_emscripten_glUseProgram.sig="vi";var _emscripten_glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};_emscripten_glValidateProgram.sig="vi";var _emscripten_glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);_emscripten_glVertexAttrib1f.sig="vif";function _emscripten_glVertexAttrib1fv(index,v){v>>>=0;GLctx.vertexAttrib1f(index,HEAPF32[v>>>2])}_emscripten_glVertexAttrib1fv.sig="vip";var _emscripten_glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);_emscripten_glVertexAttrib2f.sig="viff";function _emscripten_glVertexAttrib2fv(index,v){v>>>=0;GLctx.vertexAttrib2f(index,HEAPF32[v>>>2],HEAPF32[v+4>>>2])}_emscripten_glVertexAttrib2fv.sig="vip";var _emscripten_glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);_emscripten_glVertexAttrib3f.sig="vifff";function _emscripten_glVertexAttrib3fv(index,v){v>>>=0;GLctx.vertexAttrib3f(index,HEAPF32[v>>>2],HEAPF32[v+4>>>2],HEAPF32[v+8>>>2])}_emscripten_glVertexAttrib3fv.sig="vip";var _emscripten_glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);_emscripten_glVertexAttrib4f.sig="viffff";function _emscripten_glVertexAttrib4fv(index,v){v>>>=0;GLctx.vertexAttrib4f(index,HEAPF32[v>>>2],HEAPF32[v+4>>>2],HEAPF32[v+8>>>2],HEAPF32[v+12>>>2])}_emscripten_glVertexAttrib4fv.sig="vip";var _emscripten_glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};_emscripten_glVertexAttribDivisor.sig="vii";var _glVertexAttribDivisor=_emscripten_glVertexAttribDivisor;_glVertexAttribDivisor.sig="vii";var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorARB=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorEXT=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorNV=_glVertexAttribDivisor;var _emscripten_glVertexAttribI4i=(x0,x1,x2,x3,x4)=>GLctx.vertexAttribI4i(x0,x1,x2,x3,x4);_emscripten_glVertexAttribI4i.sig="viiiii";function _emscripten_glVertexAttribI4iv(index,v){v>>>=0;GLctx.vertexAttribI4i(index,HEAP32[v>>>2],HEAP32[v+4>>>2],HEAP32[v+8>>>2],HEAP32[v+12>>>2])}_emscripten_glVertexAttribI4iv.sig="vip";var _emscripten_glVertexAttribI4ui=(x0,x1,x2,x3,x4)=>GLctx.vertexAttribI4ui(x0,x1,x2,x3,x4);_emscripten_glVertexAttribI4ui.sig="viiiii";function _emscripten_glVertexAttribI4uiv(index,v){v>>>=0;GLctx.vertexAttribI4ui(index,HEAPU32[v>>>2],HEAPU32[v+4>>>2],HEAPU32[v+8>>>2],HEAPU32[v+12>>>2])}_emscripten_glVertexAttribI4uiv.sig="vip";function _emscripten_glVertexAttribIPointer(index,size,type,stride,ptr){ptr>>>=0;GLctx.vertexAttribIPointer(index,size,type,stride,ptr)}_emscripten_glVertexAttribIPointer.sig="viiiip";function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){ptr>>>=0;GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}_emscripten_glVertexAttribPointer.sig="viiiiip";var _emscripten_glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);_emscripten_glViewport.sig="viiii";function _emscripten_glWaitSync(sync,flags,timeout){sync>>>=0;timeout=Number(timeout);GLctx.waitSync(GL.syncs[sync],flags,timeout)}_emscripten_glWaitSync.sig="vpij";function _emscripten_out(str){str>>>=0;return out(UTF8ToString(str))}_emscripten_out.sig="vp";class HandleAllocator{allocated=[undefined];freelist=[];get(id){return this.allocated[id]}has(id){return this.allocated[id]!==undefined}allocate(handle){var id=this.freelist.pop()||this.allocated.length;this.allocated[id]=handle;return id}free(id){this.allocated[id]=undefined;this.freelist.push(id)}}var promiseMap=new HandleAllocator;var makePromise=()=>{var promiseInfo={};promiseInfo.promise=new Promise((resolve,reject)=>{promiseInfo.reject=reject;promiseInfo.resolve=resolve});promiseInfo.id=promiseMap.allocate(promiseInfo);return promiseInfo};function _emscripten_promise_create(){return makePromise().id}_emscripten_promise_create.sig="p";function _emscripten_promise_destroy(id){id>>>=0;promiseMap.free(id)}_emscripten_promise_destroy.sig="vp";var getPromise=id=>promiseMap.get(id).promise;function _emscripten_promise_resolve(id,result,value){id>>>=0;value>>>=0;var info=promiseMap.get(id);switch(result){case 0:info.resolve(value);return;case 1:info.resolve(getPromise(value));return;case 2:info.resolve(getPromise(value));_emscripten_promise_destroy(value);return;case 3:info.reject(value);return}}_emscripten_promise_resolve.sig="vpip";var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}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,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}_emscripten_resize_heap.sig="ip";var _emscripten_runtime_keepalive_pop=runtimeKeepalivePop;_emscripten_runtime_keepalive_pop.sig="v";var _emscripten_runtime_keepalive_push=runtimeKeepalivePush;_emscripten_runtime_keepalive_push.sig="v";var ENV={};var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else 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){__environ>>>=0;environ_buf>>>=0;var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>>2>>>0]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0}_environ_get.sig="ipp";function _environ_sizes_get(penviron_count,penviron_buf_size){penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();HEAPU32[penviron_count>>>2>>>0]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>>2>>>0]=bufSize;return 0}_environ_sizes_get.sig="ipp";function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_close.sig="ii";function _fd_fdstat_get(fd,pbuf){pbuf>>>=0;try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf>>>0]=type;HEAP16[pbuf+2>>>1>>>0]=flags;HEAP64[pbuf+8>>>3>>>0]=BigInt(rightsBase);HEAP64[pbuf+16>>>3>>>0]=BigInt(rightsInheriting);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_fdstat_get.sig="iip";var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;offset=bigintToI53Checked(offset);pnum>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt,offset);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_pread.sig="iippjp";var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;offset=bigintToI53Checked(offset);pnum>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt,offset);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_pwrite.sig="iippjp";function _fd_read(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_read.sig="iippp";function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);newOffset>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>>3>>>0]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_seek.sig="iijip";function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);var rtn=stream.stream_ops?.fsync?.(stream);return rtn}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_sync.sig="ii";function _fd_write(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_fd_write.sig="iippp";function _getaddrinfo(node,service,hint,out){node>>>=0;service>>>=0;hint>>>=0;out>>>=0;var addrs=[];var canon=null;var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai,last;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;var errno;salen=family===10?28:16;addr=family===10?inetNtop6(addr):inetNtop4(addr);sa=_malloc(salen);errno=writeSockaddr(sa,family,addr,port);ai=_malloc(32);HEAP32[ai+4>>>2>>>0]=family;HEAP32[ai+8>>>2>>>0]=type;HEAP32[ai+12>>>2>>>0]=proto;HEAPU32[ai+24>>>2>>>0]=canon;HEAPU32[ai+20>>>2>>>0]=sa;if(family===10){HEAP32[ai+16>>>2>>>0]=28}else{HEAP32[ai+16>>>2>>>0]=16}HEAP32[ai+28>>>2>>>0]=0;return ai}if(hint){flags=HEAP32[hint>>>2>>>0];family=HEAP32[hint+4>>>2>>>0];type=HEAP32[hint+8>>>2>>>0];proto=HEAP32[hint+12>>>2>>>0]}if(type&&!proto){proto=type===2?17:6}if(!type&&proto){type=proto===17?2:1}if(proto===0){proto=6}if(type===0){type=1}if(!node&&!service){return-2}if(flags&~(1|2|4|1024|8|16|32)){return-1}if(hint!==0&&HEAP32[hint>>>2>>>0]&2&&!node){return-1}if(flags&32){return-2}if(type!==0&&type!==1&&type!==2){return-7}if(family!==0&&family!==2&&family!==10){return-6}if(service){service=UTF8ToString(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024){return-2}return-8}}if(!node){if(family===0){family=2}if((flags&1)===0){if(family===2){addr=_htonl(2130706433)}else{addr=[0,0,0,_htonl(1)]}}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>>2>>>0]=ai;return 0}node=UTF8ToString(node);addr=inetPton4(node);if(addr!==null){if(family===0||family===2){family=2}else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else{return-2}}else{addr=inetPton6(node);if(addr!==null){if(family===0||family===10){family=10}else{return-2}}}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAPU32[out>>>2>>>0]=ai;return 0}if(flags&4){return-2}node=DNS.lookup_name(node);addr=inetPton4(node);if(family===0){family=2}else if(family===10){addr=[0,0,_htonl(65535),addr]}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>>2>>>0]=ai;return 0}_getaddrinfo.sig="ipppp";function _getnameinfo(sa,salen,node,nodelen,serv,servlen,flags){sa>>>=0;node>>>=0;serv>>>=0;var info=readSockaddr(sa,salen);if(info.errno){return-6}var port=info.port;var addr=info.addr;var overflowed=false;if(node&&nodelen){var lookup;if(flags&1||!(lookup=DNS.lookup_addr(addr))){if(flags&8){return-2}}else{addr=lookup}var numBytesWrittenExclNull=stringToUTF8(addr,node,nodelen);if(numBytesWrittenExclNull+1>=nodelen){overflowed=true}}if(serv&&servlen){port=""+port;var numBytesWrittenExclNull=stringToUTF8(port,serv,servlen);if(numBytesWrittenExclNull+1>=servlen){overflowed=true}}if(overflowed){return-12}return 0}_getnameinfo.sig="ipipipii";var Protocols={list:[],map:{}};var stringToAscii=(str,buffer)=>{for(var i=0;i>>0]=str.charCodeAt(i)}HEAP8[buffer>>>0]=0};var _setprotoent=stayopen=>{function allocprotoent(name,proto,aliases){var nameBuf=_malloc(name.length+1);stringToAscii(name,nameBuf);var j=0;var length=aliases.length;var aliasListBuf=_malloc((length+1)*4);for(var i=0;i>>2>>>0]=aliasBuf}HEAPU32[aliasListBuf+j>>>2>>>0]=0;var pe=_malloc(12);HEAPU32[pe>>>2>>>0]=nameBuf;HEAPU32[pe+4>>>2>>>0]=aliasListBuf;HEAP32[pe+8>>>2>>>0]=proto;return pe}var list=Protocols.list;var map=Protocols.map;if(list.length===0){var entry=allocprotoent("tcp",6,["TCP"]);list.push(entry);map["tcp"]=map["6"]=entry;entry=allocprotoent("udp",17,["UDP"]);list.push(entry);map["udp"]=map["17"]=entry}_setprotoent.index=0};_setprotoent.sig="vi";function _getprotobyname(name){name>>>=0;name=UTF8ToString(name);_setprotoent(true);var result=Protocols.map[name];return result}_getprotobyname.sig="pp";function _random_get(buffer,size){buffer>>>=0;size>>>=0;try{randomFill(HEAPU8.subarray(buffer>>>0,buffer+size>>>0));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}_random_get.sig="ipp";var _stackAlloc=stackAlloc;var _stackRestore=stackSave;var _stackSave=stackSave;var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);var writeI53ToI64Clamped=(ptr,num)=>{if(num>0x8000000000000000){HEAPU32[ptr>>>2>>>0]=4294967295;HEAPU32[ptr+4>>>2>>>0]=2147483647}else if(num<-0x8000000000000000){HEAPU32[ptr>>>2>>>0]=0;HEAPU32[ptr+4>>>2>>>0]=2147483648}else{writeI53ToI64(ptr,num)}};var writeI53ToI64Signaling=(ptr,num)=>{if(num>0x8000000000000000||num<-0x8000000000000000){throw`RangeError: ${num}`}writeI53ToI64(ptr,num)};var writeI53ToU64Clamped=(ptr,num)=>{if(num>0x10000000000000000){HEAPU32[ptr>>>2>>>0]=4294967295;HEAPU32[ptr+4>>>2>>>0]=4294967295}else if(num<0){HEAPU32[ptr>>>2>>>0]=0;HEAPU32[ptr+4>>>2>>>0]=0}else{writeI53ToI64(ptr,num)}};var writeI53ToU64Signaling=(ptr,num)=>{if(num<0||num>0x10000000000000000){throw`RangeError: ${num}`}writeI53ToI64(ptr,num)};var readI53FromU64=ptr=>HEAPU32[ptr>>>2>>>0]+HEAPU32[ptr+4>>>2>>>0]*4294967296;var convertI32PairToI53=(lo,hi)=>(lo>>>0)+hi*4294967296;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;var convertU32PairToI53=(lo,hi)=>(lo>>>0)+(hi>>>0)*4294967296;var getTempRet0=val=>__emscripten_tempret_get();var setTempRet0=val=>__emscripten_tempret_set(val);var ptrToString=ptr=>{ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};function _emscripten_notify_memory_growth(memoryIndex){memoryIndex>>>=0;updateMemoryViews()}_emscripten_notify_memory_growth.sig="vp";var strError=errno=>UTF8ToString(_strerror(errno));var _endprotoent=()=>{};_endprotoent.sig="v";function _getprotoent(number){if(_setprotoent.index===Protocols.list.length){return 0}var result=Protocols.list[_setprotoent.index++];return result}_getprotoent.sig="p";function _getprotobynumber(number){_setprotoent(true);var result=Protocols.map[number];return result}_getprotobynumber.sig="pi";var Sockets={BUFFER_SIZE:10240,MAX_BUFFER_SIZE:10485760,nextFd:1,fds:{},nextport:1,maxport:65535,peer:null,connections:{},portmap:{},localAddr:4261412874,addrPool:[33554442,50331658,67108874,83886090,100663306,117440522,134217738,150994954,167772170,184549386,201326602,218103818,234881034]};function _emscripten_run_script(ptr){ptr>>>=0;eval(UTF8ToString(ptr))}_emscripten_run_script.sig="vp";function _emscripten_run_script_int(ptr){ptr>>>=0;return eval(UTF8ToString(ptr))|0}_emscripten_run_script_int.sig="ip";function _emscripten_run_script_string(ptr){ptr>>>=0;var s=eval(UTF8ToString(ptr));if(s==null){return 0}s+="";var me=_emscripten_run_script_string;me.bufferSize=lengthBytesUTF8(s)+1;me.buffer=_realloc(me.buffer??0,me.bufferSize);stringToUTF8(s,me.buffer,me.bufferSize);return me.buffer}_emscripten_run_script_string.sig="pp";var _emscripten_random=()=>Math.random();_emscripten_random.sig="f";var _emscripten_performance_now=()=>performance.now();_emscripten_performance_now.sig="d";var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;__emscripten_get_now_is_monotonic.sig="i";var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};function _emscripten_get_compiler_setting(name){name>>>=0;return abort("You must build with -sRETAIN_COMPILER_SETTINGS for getCompilerSetting or emscripten_get_compiler_setting to work")}_emscripten_get_compiler_setting.sig="pp";var _emscripten_has_asyncify=()=>0;_emscripten_has_asyncify.sig="i";function _emscripten_print_double(x,to,max){to>>>=0;var str=x+"";if(to)return stringToUTF8(str,to,max);else return lengthBytesUTF8(str)}_emscripten_print_double.sig="idpi";function _emscripten_asm_const_double(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}_emscripten_asm_const_double.sig="dppp";function _emscripten_asm_const_ptr(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}_emscripten_asm_const_ptr.sig="pppp";var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[emAsmAddr](...args)};function _emscripten_asm_const_int_sync_on_main_thread(emAsmAddr,sigPtr,argbuf){emAsmAddr>>>=0;sigPtr>>>=0;argbuf>>>=0;return runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1)}_emscripten_asm_const_int_sync_on_main_thread.sig="ippp";function _emscripten_asm_const_ptr_sync_on_main_thread(emAsmAddr,sigPtr,argbuf){emAsmAddr>>>=0;sigPtr>>>=0;argbuf>>>=0;return runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1)}_emscripten_asm_const_ptr_sync_on_main_thread.sig="pppp";function _emscripten_asm_const_double_sync_on_main_thread(a1,a2,a3){a1>>>=0;a2>>>=0;a3>>>=0;return _emscripten_asm_const_int_sync_on_main_thread(a1,a2,a3)}_emscripten_asm_const_double_sync_on_main_thread.sig="dppp";function _emscripten_asm_const_async_on_main_thread(emAsmAddr,sigPtr,argbuf){emAsmAddr>>>=0;sigPtr>>>=0;argbuf>>>=0;return runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,0)}_emscripten_asm_const_async_on_main_thread.sig="vppp";function __Unwind_Backtrace(func,arg){func>>>=0;arg>>>=0;var trace=getCallstack();var parts=trace.split("\n");for(var i=0;i>>=0;ipBefore>>>=0;return abort("Unwind_GetIPInfo")}__Unwind_GetIPInfo.sig="ppp";function __Unwind_FindEnclosingFunction(ip){ip>>>=0;return 0}__Unwind_FindEnclosingFunction.sig="pp";var autoResumeAudioContext=ctx=>{for(var event of["keydown","mousedown","touchstart"]){for(var element of[document,document.getElementById("canvas")]){element?.addEventListener(event,()=>{if(ctx.state==="suspended")ctx.resume()},{once:true})}}};var dynCall=(sig,ptr,args=[],promising=false)=>{var func=getWasmTableEntry(ptr);var rtn=func(...args);function convert(rtn){return sig[0]=="p"?rtn>>>0:rtn}return convert(rtn)};var getDynCaller=(sig,ptr,promising=false)=>(...args)=>dynCall(sig,ptr,args,promising);var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};_emscripten_exit_with_live_runtime.sig="v";var _emscripten_force_exit=status=>{__emscripten_runtime_keepalive_clear();_exit(status)};_emscripten_force_exit.sig="vi";function _emscripten_outn(str,len){str>>>=0;len>>>=0;return out(UTF8ToString(str,len))}_emscripten_outn.sig="vpp";function _emscripten_errn(str,len){str>>>=0;len>>>=0;return err(UTF8ToString(str,len))}_emscripten_errn.sig="vpp";var _emscripten_throw_number=number=>{throw number};_emscripten_throw_number.sig="vd";function _emscripten_throw_string(str){str>>>=0;throw UTF8ToString(str)}_emscripten_throw_string.sig="vp";var _emscripten_runtime_keepalive_check=keepRuntimeAlive;_emscripten_runtime_keepalive_check.sig="i";var asmjsMangle=x=>{if(x=="__main_argc_argv"){x="main"}return"_"+x};function __emscripten_fs_load_embedded_files(ptr){ptr>>>=0;do{var name_addr=HEAPU32[ptr>>>2>>>0];ptr+=4;var len=HEAPU32[ptr>>>2>>>0];ptr+=4;var content=HEAPU32[ptr>>>2>>>0];ptr+=4;var name=UTF8ToString(name_addr);FS.createPath("/",PATH.dirname(name),true,true);FS.createDataFile(name,null,HEAP8.subarray(content>>>0,content+len>>>0),true,true,true)}while(HEAPU32[ptr>>>2>>>0])}__emscripten_fs_load_embedded_files.sig="vp";var onInits=[];var addOnInit=cb=>onInits.push(cb);var onMains=[];var addOnPreMain=cb=>onMains.push(cb);var onExits=[];var addOnExit=cb=>onExits.push(cb);var STACK_SIZE=10485760;var STACK_ALIGN=16;var POINTER_SIZE=4;var ASSERTIONS=0;var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer>>>0)};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="pointer")return ret>>>0;if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var removeFunction=index=>{functionsInTableMap.delete(getWasmTableEntry(index));setWasmTableEntry(index,null);freeTableIndexes.push(index)};var _emscripten_math_cbrt=Math.cbrt;_emscripten_math_cbrt.sig="dd";var _emscripten_math_pow=Math.pow;_emscripten_math_pow.sig="ddd";var _emscripten_math_random=Math.random;_emscripten_math_random.sig="d";var _emscripten_math_sign=Math.sign;_emscripten_math_sign.sig="dd";var _emscripten_math_sqrt=Math.sqrt;_emscripten_math_sqrt.sig="dd";var _emscripten_math_exp=Math.exp;_emscripten_math_exp.sig="dd";var _emscripten_math_expm1=Math.expm1;_emscripten_math_expm1.sig="dd";var _emscripten_math_fmod=(x,y)=>x%y;_emscripten_math_fmod.sig="ddd";var _emscripten_math_log=Math.log;_emscripten_math_log.sig="dd";var _emscripten_math_log1p=Math.log1p;_emscripten_math_log1p.sig="dd";var _emscripten_math_log10=Math.log10;_emscripten_math_log10.sig="dd";var _emscripten_math_log2=Math.log2;_emscripten_math_log2.sig="dd";var _emscripten_math_round=Math.round;_emscripten_math_round.sig="dd";var _emscripten_math_acos=Math.acos;_emscripten_math_acos.sig="dd";var _emscripten_math_acosh=Math.acosh;_emscripten_math_acosh.sig="dd";var _emscripten_math_asin=Math.asin;_emscripten_math_asin.sig="dd";var _emscripten_math_asinh=Math.asinh;_emscripten_math_asinh.sig="dd";var _emscripten_math_atan=Math.atan;_emscripten_math_atan.sig="dd";var _emscripten_math_atanh=Math.atanh;_emscripten_math_atanh.sig="dd";var _emscripten_math_atan2=Math.atan2;_emscripten_math_atan2.sig="ddd";var _emscripten_math_cos=Math.cos;_emscripten_math_cos.sig="dd";var _emscripten_math_cosh=Math.cosh;_emscripten_math_cosh.sig="dd";function _emscripten_math_hypot(count,varargs){varargs>>>=0;var args=[];for(var i=0;i>>3>>>0])}return Math.hypot(...args)}_emscripten_math_hypot.sig="dip";var _emscripten_math_sin=Math.sin;_emscripten_math_sin.sig="dd";var _emscripten_math_sinh=Math.sinh;_emscripten_math_sinh.sig="dd";var _emscripten_math_tan=Math.tan;_emscripten_math_tan.sig="dd";var _emscripten_math_tanh=Math.tanh;_emscripten_math_tanh.sig="dd";var intArrayToString=array=>{var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")};var AsciiToString=ptr=>{ptr>>>=0;var str="";while(1){var ch=HEAPU8[ptr++>>>0];if(!ch)return str;str+=String.fromCharCode(ch)}};var UTF16Decoder=globalThis.TextDecoder?new TextDecoder("utf-16le"):undefined;var UTF16ToString=(ptr,maxBytesToRead,ignoreNul)=>{var idx=ptr>>>1;var endIdx=findStringEnd(HEAPU16,idx,maxBytesToRead/2,ignoreNul);if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx>>>0,endIdx>>>0));var str="";for(var i=idx;i>>0];str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>>1>>>0]=codeUnit;outPtr+=2}HEAP16[outPtr>>>1>>>0]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead,ignoreNul)=>{var str="";var startIdx=ptr>>>2;for(var i=0;!(i>=maxBytesToRead/4);i++){var utf32=HEAPU32[startIdx+i>>>0];if(!utf32&&!ignoreNul)break;str+=String.fromCodePoint(utf32)}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{outPtr>>>=0;maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i65535){i++}HEAP32[outPtr>>>2>>>0]=codePoint;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>>2>>>0]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i65535){i++}len+=4}return len};var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},registerRemoveEventListeners(){if(!JSEvents.removeEventListenersRegistered){addOnExit(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,globalThis.document??0,globalThis.window??0];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||globalThis.document?.querySelector(target);return domElement};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=160;JSEvents.keyEvent||=_malloc(eventSize);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>>3>>>0]=e.timeStamp;var idx=keyEventData>>>2;HEAP32[idx+2>>>0]=e.location;HEAP8[keyEventData+12>>>0]=e.ctrlKey;HEAP8[keyEventData+13>>>0]=e.shiftKey;HEAP8[keyEventData+14>>>0]=e.altKey;HEAP8[keyEventData+15>>>0]=e.metaKey;HEAP8[keyEventData+16>>>0]=e.repeat;HEAP32[idx+5>>>0]=e.charCode;HEAP32[idx+6>>>0]=e.keyCode;HEAP32[idx+7>>>0]=e.which;stringToUTF8(e.key||"",keyEventData+32,32);stringToUTF8(e.code||"",keyEventData+64,32);stringToUTF8(e.char||"",keyEventData+96,32);stringToUTF8(e.locale||"",keyEventData+128,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var findCanvasEventTarget=findEventTarget;function _emscripten_html5_remove_event_listener(target,userData,eventTypeId,callback){target>>>=0;userData>>>=0;callback>>>=0;var eventHandler={target:findEventTarget(target),userData,eventTypeId,callbackfunc:callback};return JSEvents.removeSingleHandler(eventHandler)}_emscripten_html5_remove_event_listener.sig="ippip";function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread)}_emscripten_set_keypress_callback_on_thread.sig="ippipp";function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}_emscripten_set_keydown_callback_on_thread.sig="ippipp";function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}_emscripten_set_keyup_callback_on_thread.sig="ippipp";var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>>3>>>0]=e.timeStamp;var idx=eventStruct>>>2;HEAP32[idx+2>>>0]=e.screenX;HEAP32[idx+3>>>0]=e.screenY;HEAP32[idx+4>>>0]=e.clientX;HEAP32[idx+5>>>0]=e.clientY;HEAP8[eventStruct+24>>>0]=e.ctrlKey;HEAP8[eventStruct+25>>>0]=e.shiftKey;HEAP8[eventStruct+26>>>0]=e.altKey;HEAP8[eventStruct+27>>>0]=e.metaKey;HEAP16[idx*2+14>>>0]=e.button;HEAP16[idx*2+15>>>0]=e.buttons;HEAP32[idx+8>>>0]=e["movementX"];HEAP32[idx+9>>>0]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+10>>>0]=e.clientX-(rect.left|0);HEAP32[idx+11>>>0]=e.clientY-(rect.top|0)};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=64;JSEvents.mouseEvent||=_malloc(eventSize);target=findEventTarget(target);var mouseEventHandlerFunc=e=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread)}_emscripten_set_click_callback_on_thread.sig="ippipp";function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}_emscripten_set_mousedown_callback_on_thread.sig="ippipp";function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}_emscripten_set_mouseup_callback_on_thread.sig="ippipp";function _emscripten_set_dblclick_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,7,"dblclick",targetThread)}_emscripten_set_dblclick_callback_on_thread.sig="ippipp";function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}_emscripten_set_mousemove_callback_on_thread.sig="ippipp";function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread)}_emscripten_set_mouseenter_callback_on_thread.sig="ippipp";function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread)}_emscripten_set_mouseleave_callback_on_thread.sig="ippipp";function _emscripten_set_mouseover_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,35,"mouseover",targetThread)}_emscripten_set_mouseover_callback_on_thread.sig="ippipp";function _emscripten_set_mouseout_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,36,"mouseout",targetThread)}_emscripten_set_mouseout_callback_on_thread.sig="ippipp";function __emscripten_get_last_mouse_event(){return JSEvents.mouseEvent}__emscripten_get_last_mouse_event.sig="p";var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=96;JSEvents.wheelEvent||=_malloc(eventSize);var wheelHandlerFunc=e=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+64>>>3>>>0]=e["deltaX"];HEAPF64[wheelEvent+72>>>3>>>0]=e["deltaY"];HEAPF64[wheelEvent+80>>>3>>>0]=e["deltaZ"];HEAP32[wheelEvent+88>>>2>>>0]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:wheelHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}_emscripten_set_wheel_callback_on_thread.sig="ippipp";var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=36;JSEvents.uiEvent||=_malloc(eventSize);target=findEventTarget(target);var uiEventHandlerFunc=e=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>>2>>>0]=0;HEAP32[uiEvent+4>>>2>>>0]=b.clientWidth;HEAP32[uiEvent+8>>>2>>>0]=b.clientHeight;HEAP32[uiEvent+12>>>2>>>0]=innerWidth;HEAP32[uiEvent+16>>>2>>>0]=innerHeight;HEAP32[uiEvent+20>>>2>>>0]=outerWidth;HEAP32[uiEvent+24>>>2>>>0]=outerHeight;HEAP32[uiEvent+28>>>2>>>0]=pageXOffset|0;HEAP32[uiEvent+32>>>2>>>0]=pageYOffset|0;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread)}_emscripten_set_resize_callback_on_thread.sig="ippipp";function _emscripten_set_scroll_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerUiEventCallback(target,userData,useCapture,callbackfunc,11,"scroll",targetThread)}_emscripten_set_scroll_callback_on_thread.sig="ippipp";var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=256;JSEvents.focusEvent||=_malloc(eventSize);var focusEventHandlerFunc=e=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}_emscripten_set_blur_callback_on_thread.sig="ippipp";function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}_emscripten_set_focus_callback_on_thread.sig="ippipp";function _emscripten_set_focusin_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,14,"focusin",targetThread)}_emscripten_set_focusin_callback_on_thread.sig="ippipp";function _emscripten_set_focusout_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,15,"focusout",targetThread)}_emscripten_set_focusout_callback_on_thread.sig="ippipp";var fillDeviceOrientationEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>>3>>>0]=e.alpha;HEAPF64[eventStruct+8>>>3>>>0]=e.beta;HEAPF64[eventStruct+16>>>3>>>0]=e.gamma;HEAP8[eventStruct+24>>>0]=e.absolute};var registerDeviceOrientationEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=32;JSEvents.deviceOrientationEvent||=_malloc(eventSize);var deviceOrientationEventHandlerFunc=e=>{fillDeviceOrientationEventData(JSEvents.deviceOrientationEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.deviceOrientationEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:deviceOrientationEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_deviceorientation_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerDeviceOrientationEventCallback(2,userData,useCapture,callbackfunc,16,"deviceorientation",targetThread)}_emscripten_set_deviceorientation_callback_on_thread.sig="ipipp";function __emscripten_get_last_deviceorientation_event(){return JSEvents.deviceOrientationEvent}__emscripten_get_last_deviceorientation_event.sig="p";var fillDeviceMotionEventData=(eventStruct,e,target)=>{var supportedFields=0;var a=e["acceleration"];supportedFields|=a&&1;var ag=e["accelerationIncludingGravity"];supportedFields|=ag&&2;var rr=e["rotationRate"];supportedFields|=rr&&4;a=a||{};ag=ag||{};rr=rr||{};HEAP32[eventStruct+72>>>2>>>0]=supportedFields;HEAPF64[eventStruct>>>3>>>0]=a["x"];HEAPF64[eventStruct+8>>>3>>>0]=a["y"];HEAPF64[eventStruct+16>>>3>>>0]=a["z"];HEAPF64[eventStruct+24>>>3>>>0]=ag["x"];HEAPF64[eventStruct+32>>>3>>>0]=ag["y"];HEAPF64[eventStruct+40>>>3>>>0]=ag["z"];HEAPF64[eventStruct+48>>>3>>>0]=rr["alpha"];HEAPF64[eventStruct+56>>>3>>>0]=rr["beta"];HEAPF64[eventStruct+64>>>3>>>0]=rr["gamma"]};var registerDeviceMotionEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=80;JSEvents.deviceMotionEvent||=_malloc(eventSize);var deviceMotionEventHandlerFunc=e=>{fillDeviceMotionEventData(JSEvents.deviceMotionEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.deviceMotionEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:deviceMotionEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_devicemotion_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerDeviceMotionEventCallback(2,userData,useCapture,callbackfunc,17,"devicemotion",targetThread)}_emscripten_set_devicemotion_callback_on_thread.sig="ipipp";function __emscripten_get_last_devicemotion_event(){return JSEvents.deviceMotionEvent}__emscripten_get_last_devicemotion_event.sig="p";var screenOrientation=()=>{if(!window.screen)return undefined;return screen.orientation||screen["mozOrientation"]||screen["webkitOrientation"]};var fillOrientationChangeEventData=eventStruct=>{var orientationsType1=["portrait-primary","portrait-secondary","landscape-primary","landscape-secondary"];var orientationsType2=["portrait","portrait","landscape","landscape"];var orientationIndex=0;var orientationAngle=0;var screenOrientObj=screenOrientation();if(typeof screenOrientObj==="object"){orientationIndex=orientationsType1.indexOf(screenOrientObj.type);if(orientationIndex<0){orientationIndex=orientationsType2.indexOf(screenOrientObj.type)}if(orientationIndex>=0){orientationIndex=1<>>2>>>0]=orientationIndex;HEAP32[eventStruct+4>>>2>>>0]=orientationAngle};var registerOrientationChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=8;JSEvents.orientationChangeEvent||=_malloc(eventSize);var orientationChangeEventHandlerFunc=e=>{var orientationChangeEvent=JSEvents.orientationChangeEvent;fillOrientationChangeEventData(orientationChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,orientationChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:orientationChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_orientationchange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!window.screen||!screen.orientation)return-1;return registerOrientationChangeEventCallback(screen.orientation,userData,useCapture,callbackfunc,18,"change",targetThread)}_emscripten_set_orientationchange_callback_on_thread.sig="ipipp";function _emscripten_get_orientation_status(orientationChangeEvent){orientationChangeEvent>>>=0;if(!screenOrientation()&&typeof orientation=="undefined")return-1;fillOrientationChangeEventData(orientationChangeEvent);return 0}_emscripten_get_orientation_status.sig="ip";var _emscripten_lock_orientation=allowedOrientations=>{var orientations=[];if(allowedOrientations&1)orientations.push("portrait-primary");if(allowedOrientations&2)orientations.push("portrait-secondary");if(allowedOrientations&4)orientations.push("landscape-primary");if(allowedOrientations&8)orientations.push("landscape-secondary");var succeeded;if(screen.lockOrientation){succeeded=screen.lockOrientation(orientations)}else if(screen.mozLockOrientation){succeeded=screen.mozLockOrientation(orientations)}else if(screen.webkitLockOrientation){succeeded=screen.webkitLockOrientation(orientations)}else{return-1}if(succeeded){return 0}return-6};_emscripten_lock_orientation.sig="ii";var _emscripten_unlock_orientation=()=>{if(screen.unlockOrientation){screen.unlockOrientation()}else if(screen.mozUnlockOrientation){screen.mozUnlockOrientation()}else if(screen.webkitUnlockOrientation){screen.webkitUnlockOrientation()}else{return-1}return 0};_emscripten_unlock_orientation.sig="i";var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=getFullscreenElement();var isFullscreen=!!fullscreenElement;HEAP8[eventStruct>>>0]=isFullscreen;HEAP8[eventStruct+1>>>0]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>>2>>>0]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+264>>>2>>>0]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+268>>>2>>>0]=screen.width;HEAP32[eventStruct+272>>>2>>>0]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=276;JSEvents.fullscreenChangeEvent||=_malloc(eventSize);var fullscreenChangeEventHandlerFunc=e=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:fullscreenChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)}_emscripten_set_fullscreenchange_callback_on_thread.sig="ippipp";function _emscripten_get_fullscreen_status(fullscreenStatus){fullscreenStatus>>>=0;if(!JSEvents.fullscreenEnabled())return-1;fillFullscreenChangeEventData(fullscreenStatus);return 0}_emscripten_get_fullscreen_status.sig="ip";function _emscripten_get_canvas_element_size(target,width,height){target>>>=0;width>>>=0;height>>>=0;var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>>2>>>0]=canvas.width;HEAP32[height>>>2>>>0]=canvas.height}_emscripten_get_canvas_element_size.sig="ippp";var getCanvasElementSize=target=>{var sp=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>>2>>>0],HEAP32[h>>>2>>>0]];stackRestore(sp);return size};function _emscripten_set_canvas_element_size(target,width,height){target>>>=0;var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}_emscripten_set_canvas_element_size.sig="ipii";var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var sp=stackSave();var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(sp)}};var currentFullscreenStrategy={};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){if(!getFullscreenElement()){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};var hideEverythingExceptGivenElement=onlyVisibleElement=>{var child=onlyVisibleElement;var parent=child.parentNode;var hiddenElements=[];while(child!=document.body){var children=parent.children;for(var currChild of children){if(currChild!=child){hiddenElements.push({node:currChild,displayState:currChild.style.display});currChild.style.display="none"}}child=parent;parent=parent.parentNode}return hiddenElements};var restoreHiddenElements=hiddenElements=>{for(var elem of hiddenElements){elem.node.style.display=elem.displayState}};var restoreOldWindowedStyle=null;var softFullscreenResizeWebGLRenderTarget=()=>{var dpr=devicePixelRatio;var inHiDPIFullscreenMode=currentFullscreenStrategy.canvasResolutionScaleMode==2;var inAspectRatioFixedFullscreenMode=currentFullscreenStrategy.scaleMode==2;var inPixelPerfectFullscreenMode=currentFullscreenStrategy.canvasResolutionScaleMode!=0;var inCenteredWithoutScalingFullscreenMode=currentFullscreenStrategy.scaleMode==3;var screenWidth=inHiDPIFullscreenMode?Math.round(innerWidth*dpr):innerWidth;var screenHeight=inHiDPIFullscreenMode?Math.round(innerHeight*dpr):innerHeight;var w=screenWidth;var h=screenHeight;var canvas=currentFullscreenStrategy.target;var canvasSize=getCanvasElementSize(canvas);var x=canvasSize[0];var y=canvasSize[1];var topMargin;if(inAspectRatioFixedFullscreenMode){if(w*yx*h)w=h*x/y|0;topMargin=(screenHeight-h)/2|0}if(inPixelPerfectFullscreenMode){setCanvasElementSize(canvas,w,h);if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,w,h)}if(inHiDPIFullscreenMode){topMargin/=dpr;w/=dpr;h/=dpr;w=Math.round(w*1e4)/1e4;h=Math.round(h*1e4)/1e4;topMargin=Math.round(topMargin*1e4)/1e4}if(inCenteredWithoutScalingFullscreenMode){var t=(innerHeight-jstoi_q(canvas.style.height))/2;var b=(innerWidth-jstoi_q(canvas.style.width))/2;setLetterbox(canvas,t,b)}else{canvas.style.width=w+"px";canvas.style.height=h+"px";var b=(innerWidth-w)/2;setLetterbox(canvas,topMargin,b)}if(!inCenteredWithoutScalingFullscreenMode&¤tFullscreenStrategy.canvasResizedCallback){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}};var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}if(!JSEvents.canPerformEventHandlerRequests()){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};function _emscripten_request_fullscreen(target,deferUntilInEventHandler){target>>>=0;var strategy={scaleMode:0,canvasResolutionScaleMode:0,filteringMode:0,deferUntilInEventHandler,canvasResizedCallbackTargetThread:2};return doRequestFullscreen(target,strategy)}_emscripten_request_fullscreen.sig="ipi";function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){target>>>=0;fullscreenStrategy>>>=0;var strategy={scaleMode:HEAP32[fullscreenStrategy>>>2>>>0],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>>2>>>0],filteringMode:HEAP32[fullscreenStrategy+8>>>2>>>0],deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>>2>>>0],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>>2>>>0]};return doRequestFullscreen(target,strategy)}_emscripten_request_fullscreen_strategy.sig="ipip";function _emscripten_enter_soft_fullscreen(target,fullscreenStrategy){target>>>=0;fullscreenStrategy>>>=0;target=findEventTarget(target);if(!target)return-4;var strategy={scaleMode:HEAP32[fullscreenStrategy>>>2>>>0],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>>2>>>0],filteringMode:HEAP32[fullscreenStrategy+8>>>2>>>0],canvasResizedCallback:HEAP32[fullscreenStrategy+12>>>2>>>0],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>>2>>>0],target,softFullscreen:true};var restoreOldStyle=JSEvents_resizeCanvasForFullscreen(target,strategy);document.documentElement.style.overflow="hidden";document.body.scroll="no";document.body.style.margin="0px";var hiddenElements=hideEverythingExceptGivenElement(target);function restoreWindowedState(){restoreOldStyle();restoreHiddenElements(hiddenElements);removeEventListener("resize",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}currentFullscreenStrategy=0}restoreOldWindowedStyle=restoreWindowedState;currentFullscreenStrategy=strategy;addEventListener("resize",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0}_emscripten_enter_soft_fullscreen.sig="ipp";var _emscripten_exit_soft_fullscreen=()=>{restoreOldWindowedStyle?.();restoreOldWindowedStyle=null;return 0};_emscripten_exit_soft_fullscreen.sig="i";var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};_emscripten_exit_fullscreen.sig="i";var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP8[eventStruct>>>0]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+1,128);stringToUTF8(id,eventStruct+129,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=257;JSEvents.pointerlockChangeEvent||=_malloc(eventSize);var pointerlockChangeEventHandlerFunc=e=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!document.body?.requestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)}_emscripten_set_pointerlockchange_callback_on_thread.sig="ippipp";var registerPointerlockErrorEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var pointerlockErrorEventHandlerFunc=e=>{if(getWasmTableEntry(callbackfunc)(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:pointerlockErrorEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_pointerlockerror_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!document.body?.requestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;return registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,"pointerlockerror",targetThread)}_emscripten_set_pointerlockerror_callback_on_thread.sig="ippipp";function _emscripten_get_pointerlock_status(pointerlockStatus){pointerlockStatus>>>=0;if(pointerlockStatus)fillPointerlockChangeEventData(pointerlockStatus);if(!document.body?.requestPointerLock){return-1}return 0}_emscripten_get_pointerlock_status.sig="ip";var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target>>>=0;target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}if(!JSEvents.canPerformEventHandlerRequests()){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)}_emscripten_request_pointerlock.sig="ipi";var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(!document.exitPointerLock)return-1;document.exitPointerLock();return 0};_emscripten_exit_pointerlock.sig="i";var _emscripten_vibrate=msecs=>{if(!navigator.vibrate)return-1;navigator.vibrate(msecs);return 0};_emscripten_vibrate.sig="ii";function _emscripten_vibrate_pattern(msecsArray,numEntries){msecsArray>>>=0;if(!navigator.vibrate)return-1;var vibrateList=[];for(var i=0;i>>2>>>0];vibrateList.push(msecs)}navigator.vibrate(vibrateList);return 0}_emscripten_vibrate_pattern.sig="ipi";var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP8[eventStruct>>>0]=document.hidden;HEAP32[eventStruct+4>>>2>>>0]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=8;JSEvents.visibilityChangeEvent||=_malloc(eventSize);var visibilityChangeEventHandlerFunc=e=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_visibilitychange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)}_emscripten_set_visibilitychange_callback_on_thread.sig="ipipp";function _emscripten_get_visibility_status(visibilityStatus){visibilityStatus>>>=0;if(typeof document.visibilityState=="undefined"&&typeof document.hidden=="undefined"){return-1}fillVisibilityChangeEventData(visibilityStatus);return 0}_emscripten_get_visibility_status.sig="ip";var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1552;JSEvents.touchEvent||=_malloc(eventSize);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(let t of et){t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(let t of e.changedTouches){t.isChanged=1;touches[t.identifier]=t}for(let t of e.targetTouches){touches[t.identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;HEAPF64[touchEvent>>>3>>>0]=e.timeStamp;HEAP8[touchEvent+12>>>0]=e.ctrlKey;HEAP8[touchEvent+13>>>0]=e.shiftKey;HEAP8[touchEvent+14>>>0]=e.altKey;HEAP8[touchEvent+15>>>0]=e.metaKey;var idx=touchEvent+16;var targetRect=getBoundingClientRect(target);var numTouches=0;for(let t of Object.values(touches)){var idx32=idx>>>2;HEAP32[idx32+0>>>0]=t.identifier;HEAP32[idx32+1>>>0]=t.screenX;HEAP32[idx32+2>>>0]=t.screenY;HEAP32[idx32+3>>>0]=t.clientX;HEAP32[idx32+4>>>0]=t.clientY;HEAP32[idx32+5>>>0]=t.pageX;HEAP32[idx32+6>>>0]=t.pageY;HEAP8[idx+28>>>0]=t.isChanged;HEAP8[idx+29>>>0]=t.onTarget;HEAP32[idx32+8>>>0]=t.clientX-(targetRect.left|0);HEAP32[idx32+9>>>0]=t.clientY-(targetRect.top|0);idx+=48;if(++numTouches>31){break}}HEAP32[touchEvent+8>>>2>>>0]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}_emscripten_set_touchstart_callback_on_thread.sig="ippipp";function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}_emscripten_set_touchend_callback_on_thread.sig="ippipp";function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}_emscripten_set_touchmove_callback_on_thread.sig="ippipp";function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread)}_emscripten_set_touchcancel_callback_on_thread.sig="ippipp";var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>>3>>>0]=e.timestamp;for(var i=0;i>>3>>>0]=e.axes[i]}for(var i=0;i>>3>>>0]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>>3>>>0]=e.buttons[i]}}for(var i=0;i>>0]=e.buttons[i].pressed}else{HEAP8[eventStruct+i+1040>>>0]=e.buttons[i]==1}}HEAP8[eventStruct+1104>>>0]=e.connected;HEAP32[eventStruct+1108>>>2>>>0]=e.index;HEAP32[eventStruct+8>>>2>>>0]=e.axes.length;HEAP32[eventStruct+12>>>2>>>0]=e.buttons.length;stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1240;JSEvents.gamepadEvent||=_malloc(eventSize);var gamepadEventHandlerFunc=e=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};_emscripten_sample_gamepad_data.sig="i";function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)}_emscripten_set_gamepadconnected_callback_on_thread.sig="ipipp";function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)}_emscripten_set_gamepaddisconnected_callback_on_thread.sig="ipipp";var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;_emscripten_get_num_gamepads.sig="i";function _emscripten_get_gamepad_status(index,gamepadState){gamepadState>>>=0;if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}_emscripten_get_gamepad_status.sig="iip";var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=e=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_beforeunload_callback_on_thread(userData,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")}_emscripten_set_beforeunload_callback_on_thread.sig="ippp";var fillBatteryEventData=(eventStruct,battery)=>{HEAPF64[eventStruct>>>3>>>0]=battery.chargingTime;HEAPF64[eventStruct+8>>>3>>>0]=battery.dischargingTime;HEAPF64[eventStruct+16>>>3>>>0]=battery.level;HEAP8[eventStruct+24>>>0]=battery.charging};var hasBatteryAPI=()=>globalThis.navigator?.getBattery;var registerBatteryEventCallback=(battery,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=32;JSEvents.batteryEvent||=_malloc(eventSize);var batteryEventHandlerFunc=e=>{var batteryEvent=JSEvents.batteryEvent;fillBatteryEventData(batteryEvent,battery);if(getWasmTableEntry(callbackfunc)(eventTypeId,batteryEvent,userData))e.preventDefault()};var eventHandler={target:battery,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:batteryEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_batterychargingchange_callback_on_thread=function(userData,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!hasBatteryAPI())return-1;navigator.getBattery().then(b=>{registerBatteryEventCallback(b,userData,true,callbackfunc,29,"chargingchange",targetThread)})};_emscripten_set_batterychargingchange_callback_on_thread.sig="ippp";var _emscripten_set_batterylevelchange_callback_on_thread=function(userData,callbackfunc,targetThread){userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;if(!hasBatteryAPI())return-1;navigator.getBattery().then(b=>{registerBatteryEventCallback(b,userData,true,callbackfunc,30,"levelchange",targetThread)})};_emscripten_set_batterylevelchange_callback_on_thread.sig="ippp";var batteryManager;var _emscripten_get_battery_status=function(batteryState){batteryState>>>=0;if(!hasBatteryAPI())return-1;if(!batteryManager){navigator.getBattery().then(b=>{batteryManager=b});return-7}fillBatteryEventData(batteryState,batteryManager);return 0};_emscripten_get_battery_status.sig="ip";function _emscripten_set_element_css_size(target,width,height){target>>>=0;target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0}_emscripten_set_element_css_size.sig="ipdd";function _emscripten_get_element_css_size(target,width,height){target>>>=0;width>>>=0;height>>>=0;target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>>3>>>0]=rect.width;HEAPF64[height>>>3>>>0]=rect.height;return 0}_emscripten_get_element_css_size.sig="ippp";var _emscripten_html5_remove_all_event_listeners=()=>JSEvents.removeAllEventListeners();_emscripten_html5_remove_all_event_listeners.sig="v";var _emscripten_request_animation_frame=function(cb,userData){cb>>>=0;userData>>>=0;return requestAnimationFrame(timeStamp=>getWasmTableEntry(cb)(timeStamp,userData))};_emscripten_request_animation_frame.sig="ipp";var _emscripten_cancel_animation_frame=id=>cancelAnimationFrame(id);_emscripten_cancel_animation_frame.sig="vi";function _emscripten_request_animation_frame_loop(cb,userData){cb>>>=0;userData>>>=0;function tick(timeStamp){if(getWasmTableEntry(cb)(timeStamp,userData)){requestAnimationFrame(tick)}}return requestAnimationFrame(tick)}_emscripten_request_animation_frame_loop.sig="vpp";var _emscripten_get_device_pixel_ratio=()=>globalThis.devicePixelRatio??1;_emscripten_get_device_pixel_ratio.sig="d";function _emscripten_get_callstack(flags,str,maxbytes){str>>>=0;var callstack=getCallstack(flags);if(!str||maxbytes<=0){return lengthBytesUTF8(callstack)+1}var bytesWrittenExcludingNull=stringToUTF8(callstack,str,maxbytes);return bytesWrittenExcludingNull+1}_emscripten_get_callstack.sig="iipi";var convertFrameToPC=frame=>{var match;if(match=/\bwasm-function\[\d+\]:(0x[0-9a-f]+)/.exec(frame)){return+match[1]}else if(match=/:(\d+):\d+(?:\)|$)/.exec(frame)){return 2147483648|+match[1]}return 0};function _emscripten_return_address(level){var callstack=jsStackTrace().split("\n");if(callstack[0]=="Error"){callstack.shift()}var caller=callstack[level+3];return convertFrameToPC(caller)}_emscripten_return_address.sig="pi";var UNWIND_CACHE={};var saveInUnwindCache=callstack=>{for(var line of callstack){var pc=convertFrameToPC(line);if(pc){UNWIND_CACHE[pc]=line}}};function _emscripten_stack_snapshot(){var callstack=jsStackTrace().split("\n");if(callstack[0]=="Error"){callstack.shift()}saveInUnwindCache(callstack);UNWIND_CACHE.last_addr=convertFrameToPC(callstack[3]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}_emscripten_stack_snapshot.sig="p";function _emscripten_stack_unwind_buffer(addr,buffer,count){addr>>>=0;buffer>>>=0;var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=jsStackTrace().split("\n");if(stack[0]=="Error"){stack.shift()}saveInUnwindCache(stack)}var offset=3;while(stack[offset]&&convertFrameToPC(stack[offset])!=addr){++offset}for(var i=0;i>>2>>>0]=convertFrameToPC(stack[i+offset])}return i}_emscripten_stack_unwind_buffer.sig="ippi";function _emscripten_pc_get_function(pc){pc>>>=0;var frame=UNWIND_CACHE[pc];if(!frame)return 0;var name;var match;if(match=/^\s+at .*\.wasm\.(.*) \(.*\)$/.exec(frame)){name=match[1]}else if(match=/^\s+at (.*) \(.*\)$/.exec(frame)){name=match[1]}else if(match=/^(.+?)@/.exec(frame)){name=match[1]}else{return 0}_free(_emscripten_pc_get_function.ret??0);_emscripten_pc_get_function.ret=stringToNewUTF8(name);return _emscripten_pc_get_function.ret}_emscripten_pc_get_function.sig="pp";var convertPCtoSourceLocation=pc=>{if(UNWIND_CACHE.last_get_source_pc==pc)return UNWIND_CACHE.last_source;var match;var source;if(!source){var frame=UNWIND_CACHE[pc];if(!frame)return null;if(match=/\((.*):(\d+):(\d+)\)$/.exec(frame)){source={file:match[1],line:match[2],column:match[3]}}else if(match=/@(.*):(\d+):(\d+)/.exec(frame)){source={file:match[1],line:match[2],column:match[3]}}}UNWIND_CACHE.last_get_source_pc=pc;UNWIND_CACHE.last_source=source;return source};function _emscripten_pc_get_file(pc){pc>>>=0;var result=convertPCtoSourceLocation(pc);if(!result)return 0;_free(_emscripten_pc_get_file.ret??0);_emscripten_pc_get_file.ret=stringToNewUTF8(result.file);return _emscripten_pc_get_file.ret}_emscripten_pc_get_file.sig="pp";function _emscripten_pc_get_line(pc){pc>>>=0;var result=convertPCtoSourceLocation(pc);return result?result.line:0}_emscripten_pc_get_line.sig="ip";function _emscripten_pc_get_column(pc){pc>>>=0;var result=convertPCtoSourceLocation(pc);return result?result.column||0:0}_emscripten_pc_get_column.sig="ip";var wasiRightsToMuslOFlags=rights=>{if(rights&2&&rights&64){return 2}if(rights&2){return 0}if(rights&64){return 1}throw new FS.ErrnoError(28)};var wasiOFlagsToMuslOFlags=oflags=>{var musl_oflags=0;if(oflags&1){musl_oflags|=64}if(oflags&8){musl_oflags|=512}if(oflags&2){musl_oflags|=65536}if(oflags&4){musl_oflags|=128}return musl_oflags};var _emscripten_unwind_to_js_event_loop=()=>{throw"unwind"};_emscripten_unwind_to_js_event_loop.sig="v";var safeSetTimeout=(func,timeout)=>{runtimeKeepalivePush();return setTimeout(()=>{runtimeKeepalivePop();callUserCallback(func)},timeout)};var setImmediateWrapped=func=>{setImmediateWrapped.mapping||=[];var id=setImmediateWrapped.mapping.length;setImmediateWrapped.mapping[id]=setImmediate(()=>{setImmediateWrapped.mapping[id]=undefined;func()});return id};var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){return 1}if(!MainLoop.running){runtimeKeepalivePush();MainLoop.running=true}if(mode==0){MainLoop.scheduler=function MainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)}}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)}}else{if(!MainLoop.setImmediate){if(globalThis.setImmediate){MainLoop.setImmediate=setImmediate}else{var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)}}return 0};_emscripten_set_main_loop_timing.sig="iii";var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){MainLoop.remainingBlockers=next}else{next=next+.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0){MainLoop.tickStartTime=_emscripten_get_now()}MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}MainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var MainLoop={running:false,scheduler:null,currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining){if(remaining=MainLoop.nextRAF){MainLoop.nextRAF+=1e3/60}}var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(globalThis.requestAnimationFrame){requestAnimationFrame(func)}else{MainLoop.fakeRequestAnimationFrame(func)}}};var safeRequestAnimationFrame=func=>{runtimeKeepalivePush();return MainLoop.requestAnimationFrame(()=>{runtimeKeepalivePop();callUserCallback(func)})};var clearImmediateWrapped=id=>{clearImmediate(setImmediateWrapped.mapping[id]);setImmediateWrapped.mapping[id]=undefined};var emClearImmediate;var emSetImmediate;var emClearImmediate_deps=["$emSetImmediate"];var _emscripten_set_immediate=function(cb,userData){cb>>>=0;userData>>>=0;runtimeKeepalivePush();return emSetImmediate(()=>{runtimeKeepalivePop();callUserCallback(()=>getWasmTableEntry(cb)(userData))})};_emscripten_set_immediate.sig="ipp";var _emscripten_clear_immediate=id=>{runtimeKeepalivePop();emClearImmediate(id)};_emscripten_clear_immediate.sig="vi";var _emscripten_set_immediate_loop=function(cb,userData){cb>>>=0;userData>>>=0;function tick(){callUserCallback(()=>{if(getWasmTableEntry(cb)(userData)){emSetImmediate(tick)}else{runtimeKeepalivePop()}})}runtimeKeepalivePush();emSetImmediate(tick)};_emscripten_set_immediate_loop.sig="vpp";var _emscripten_set_timeout=function(cb,msecs,userData){cb>>>=0;userData>>>=0;return safeSetTimeout(()=>getWasmTableEntry(cb)(userData),msecs)};_emscripten_set_timeout.sig="ipdp";var _emscripten_clear_timeout=clearTimeout;_emscripten_clear_timeout.sig="vi";var _emscripten_set_timeout_loop=function(cb,msecs,userData){cb>>>=0;userData>>>=0;function tick(){var t=_emscripten_get_now();var n=t+msecs;runtimeKeepalivePop();callUserCallback(()=>{if(getWasmTableEntry(cb)(t,userData)){runtimeKeepalivePush();var remaining=n-_emscripten_get_now();remaining=Math.max(0,remaining);setTimeout(tick,remaining)}})}runtimeKeepalivePush();return setTimeout(tick,0)};_emscripten_set_timeout_loop.sig="vpdp";var _emscripten_set_interval=function(cb,msecs,userData){cb>>>=0;userData>>>=0;runtimeKeepalivePush();return setInterval(()=>{callUserCallback(()=>getWasmTableEntry(cb)(userData))},msecs)};_emscripten_set_interval.sig="ipdp";var _emscripten_clear_interval=id=>{runtimeKeepalivePop();clearInterval(id)};_emscripten_clear_interval.sig="vi";var _emscripten_async_call=function(func,arg,millis){func>>>=0;arg>>>=0;var wrapper=()=>getWasmTableEntry(func)(arg);if(millis>=0||ENVIRONMENT_IS_NODE){safeSetTimeout(wrapper,millis)}else{safeRequestAnimationFrame(wrapper)}};_emscripten_async_call.sig="vppi";var registerPostMainLoop=f=>{typeof MainLoop!="undefined"&&MainLoop.postMainLoop.push(f)};var registerPreMainLoop=f=>{typeof MainLoop!="undefined"&&MainLoop.preMainLoop.push(f)};function _emscripten_get_main_loop_timing(mode,value){mode>>>=0;value>>>=0;if(mode)HEAP32[mode>>>2>>>0]=MainLoop.timingMode;if(value)HEAP32[value>>>2>>>0]=MainLoop.timingValue}_emscripten_get_main_loop_timing.sig="vpp";function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){func>>>=0;var iterFunc=getWasmTableEntry(func);setMainLoop(iterFunc,fps,simulateInfiniteLoop)}_emscripten_set_main_loop.sig="vpii";var _emscripten_set_main_loop_arg=function(func,arg,fps,simulateInfiniteLoop){func>>>=0;arg>>>=0;var iterFunc=()=>getWasmTableEntry(func)(arg);setMainLoop(iterFunc,fps,simulateInfiniteLoop,arg)};_emscripten_set_main_loop_arg.sig="vppii";var _emscripten_cancel_main_loop=()=>{MainLoop.pause();MainLoop.func=null};_emscripten_cancel_main_loop.sig="v";var _emscripten_pause_main_loop=()=>MainLoop.pause();_emscripten_pause_main_loop.sig="v";var _emscripten_resume_main_loop=()=>MainLoop.resume();_emscripten_resume_main_loop.sig="v";var __emscripten_push_main_loop_blocker=function(func,arg,name){func>>>=0;arg>>>=0;name>>>=0;MainLoop.queue.push({func:()=>{getWasmTableEntry(func)(arg)},name:UTF8ToString(name),counted:true});MainLoop.updateStatus()};__emscripten_push_main_loop_blocker.sig="vppp";var __emscripten_push_uncounted_main_loop_blocker=function(func,arg,name){func>>>=0;arg>>>=0;name>>>=0;MainLoop.queue.push({func:()=>{getWasmTableEntry(func)(arg)},name:UTF8ToString(name),counted:false});MainLoop.updateStatus()};__emscripten_push_uncounted_main_loop_blocker.sig="vppp";var _emscripten_set_main_loop_expected_blockers=num=>{MainLoop.expectedBlockers=num;MainLoop.remainingBlockers=num;MainLoop.updateStatus()};_emscripten_set_main_loop_expected_blockers.sig="vi";var idsToPromises=(idBuf,size)=>{var promises=[];for(var i=0;i>>2>>>0];promises[i]=getPromise(id)}return promises};var makePromiseCallback=(callback,userData)=>value=>{runtimeKeepalivePop();var stack=stackSave();var resultPtr=stackAlloc(POINTER_SIZE);HEAPU32[resultPtr>>>2>>>0]=0;try{var result=getWasmTableEntry(callback)(resultPtr,userData,value);var resultVal=HEAPU32[resultPtr>>>2>>>0]}catch(e){if(typeof e!="number"){throw 0}throw e}finally{stackRestore(stack)}switch(result){case 0:return resultVal;case 1:return getPromise(resultVal);case 2:var ret=getPromise(resultVal);_emscripten_promise_destroy(resultVal);return ret;case 3:throw resultVal}};function _emscripten_promise_then(id,onFulfilled,onRejected,userData){id>>>=0;onFulfilled>>>=0;onRejected>>>=0;userData>>>=0;runtimeKeepalivePush();var promise=getPromise(id);var newId=promiseMap.allocate({promise:promise.then(makePromiseCallback(onFulfilled,userData),makePromiseCallback(onRejected,userData))});return newId}_emscripten_promise_then.sig="ppppp";var _emscripten_promise_all=function(idBuf,resultBuf,size){idBuf>>>=0;resultBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.all(promises).then(results=>{if(resultBuf){for(var i=0;i>>2>>>0]=result}}return resultBuf})});return id};_emscripten_promise_all.sig="pppp";var setPromiseResult=(ptr,fulfill,value)=>{var result=fulfill?0:3;HEAP32[ptr>>>2>>>0]=result;HEAPU32[ptr+4>>>2>>>0]=value};var _emscripten_promise_all_settled=function(idBuf,resultBuf,size){idBuf>>>=0;resultBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.allSettled(promises).then(results=>{if(resultBuf){var offset=resultBuf;for(var i=0;i>>=0;errorBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.any(promises).catch(err=>{if(errorBuf){for(var i=0;i>>2>>>0]=err.errors[i]}}throw errorBuf})});return id};_emscripten_promise_any.sig="pppp";function _emscripten_promise_race(idBuf,size){idBuf>>>=0;size>>>=0;var promises=idsToPromises(idBuf,size);var id=promiseMap.allocate({promise:Promise.race(promises)});return id}_emscripten_promise_race.sig="ppp";function _emscripten_promise_await(returnValuePtr,id){returnValuePtr>>>=0;id>>>=0;abort("emscripten_promise_await is only available with ASYNCIFY")}_emscripten_promise_await.sig="vpp";var getExceptionMessageCommon=ptr=>{var sp=stackSave();var type_addr_addr=stackAlloc(4);var message_addr_addr=stackAlloc(4);___get_exception_message(ptr,type_addr_addr,message_addr_addr);var type_addr=HEAPU32[type_addr_addr>>>2>>>0];var message_addr=HEAPU32[message_addr_addr>>>2>>>0];var type=UTF8ToString(type_addr);_free(type_addr);var message;if(message_addr){message=UTF8ToString(message_addr);_free(message_addr)}stackRestore(sp);return[type,message]};var getCppExceptionTag=()=>___cpp_exception;var getCppExceptionThrownObjectFromWebAssemblyException=ex=>{var unwind_header=ex.getArg(getCppExceptionTag(),0);return ___thrown_object_from_unwind_exception(unwind_header)};var incrementExceptionRefcount=ex=>{var ptr=getCppExceptionThrownObjectFromWebAssemblyException(ex);___cxa_increment_exception_refcount(ptr)};var decrementExceptionRefcount=ex=>{var ptr=getCppExceptionThrownObjectFromWebAssemblyException(ex);___cxa_decrement_exception_refcount(ptr)};var getExceptionMessage=ex=>{var ptr=getCppExceptionThrownObjectFromWebAssemblyException(ex);return getExceptionMessageCommon(ptr)};var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},getCanvas:()=>Module["canvas"],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=name=>!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name);imagePlugin["handle"]=async(byteArray,name)=>{var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);return new Promise((resolve,reject)=>{var img=new Image;img.onload=()=>{var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Browser.preloadedImages[name]=canvas;URL.revokeObjectURL(url);resolve(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);reject()};img.src=url})};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=name=>!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1};audioPlugin["handle"]=async(byteArray,name)=>new Promise((resolve,reject)=>{var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;resolve(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=event=>{if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=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.slice(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)});preloadPlugins.push(audioPlugin);function pointerLockChange(){var canvas=Browser.getCanvas();Browser.pointerLock=document.pointerLockElement===canvas}var canvas=Browser.getCanvas();if(canvas){document.addEventListener("pointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Browser.getCanvas().requestPointerLock){Browser.getCanvas().requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Browser.getCanvas())return Module["ctx"];var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:typeof WebGL2RenderingContext!="undefined"?2: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){Module["ctx"]=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(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=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===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)}}Module["onFullScreen"]?.(Browser.isFullscreen);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"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.slice(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(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:abort("unrecognized mouse wheel delta mode: "+event.deltaMode)}break;default:abort("unrecognized mouse wheel event: "+event.type)}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var canvas=Browser.getCanvas();var rect=canvas.getBoundingClientRect();var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(canvas.width/rect.width);adjustedY=adjustedY*(canvas.height/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(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)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);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];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Browser.getCanvas();Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Browser.getCanvas();Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>>2>>>0];flags=flags|8388608;HEAP32[SDL.screen>>>2>>>0]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>>2>>>0];flags=flags&~8388608;HEAP32[SDL.screen>>>2>>>0]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},updateCanvasDimensions(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"]>0){if(w/h>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();var _file=UTF8ToString(file);var data=FS.analyzePath(_file);if(!data.exists)return-1;FS.createPreloadedFile(PATH.dirname(_file),PATH.basename(_file),data.object.contents,true,true,()=>{runtimeKeepalivePop();if(onload)getWasmTableEntry(onload)(file)},()=>{runtimeKeepalivePop();if(onerror)getWasmTableEntry(onerror)(file)},true);return 0};_emscripten_run_preload_plugins.sig="ippp";var Browser_asyncPrepareDataCounter=0;var _emscripten_run_preload_plugins_data=function(data,size,suffix,arg,onload,onerror){data>>>=0;suffix>>>=0;arg>>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();var _suffix=UTF8ToString(suffix);var name="prepare_data_"+Browser_asyncPrepareDataCounter+++"."+_suffix;var cname=stringToNewUTF8(name);FS.createPreloadedFile("/",name,HEAPU8.subarray(data>>>0,data+size>>>0),true,true,()=>{runtimeKeepalivePop();if(onload)getWasmTableEntry(onload)(arg,cname)},()=>{runtimeKeepalivePop();if(onerror)getWasmTableEntry(onerror)(arg)},true)};_emscripten_run_preload_plugins_data.sig="vpipppp";var _emscripten_async_run_script=function(script,millis){script>>>=0;safeSetTimeout(()=>_emscripten_run_script(script),millis)};_emscripten_async_run_script.sig="vpi";var _emscripten_async_load_script=async function(url,onload,onerror){url>>>=0;onload>>>=0;onerror>>>=0;url=UTF8ToString(url);runtimeKeepalivePush();var loadDone=()=>{runtimeKeepalivePop();if(onload){var onloadCallback=()=>callUserCallback(getWasmTableEntry(onload));if(runDependencies>0){dependenciesFulfilled=onloadCallback}else{onloadCallback()}}};var loadError=()=>{runtimeKeepalivePop();if(onerror){callUserCallback(getWasmTableEntry(onerror))}};if(ENVIRONMENT_IS_NODE){try{var data=await readAsync(url,false);eval(data);loadDone()}catch(e){err(e);loadError()}return}var script=document.createElement("script");script.onload=loadDone;script.onerror=loadError;script.src=url;document.body.appendChild(script)};_emscripten_async_load_script.sig="vppp";function _emscripten_get_window_title(){var buflen=256;if(!_emscripten_get_window_title.buffer){_emscripten_get_window_title.buffer=_malloc(buflen)}stringToUTF8(document.title,_emscripten_get_window_title.buffer,buflen);return _emscripten_get_window_title.buffer}_emscripten_get_window_title.sig="p";function _emscripten_set_window_title(title){title>>>=0;return document.title=UTF8ToString(title)}_emscripten_set_window_title.sig="vp";function _emscripten_get_screen_size(width,height){width>>>=0;height>>>=0;HEAP32[width>>>2>>>0]=screen.width;HEAP32[height>>>2>>>0]=screen.height}_emscripten_get_screen_size.sig="vpp";var _emscripten_hide_mouse=()=>{var styleSheet=document.styleSheets[0];var rules=styleSheet.cssRules;for(var i=0;iBrowser.setCanvasSize(width,height);_emscripten_set_canvas_size.sig="vii";function _emscripten_get_canvas_size(width,height,isFullscreen){width>>>=0;height>>>=0;isFullscreen>>>=0;var canvas=Browser.getCanvas();HEAP32[width>>>2>>>0]=canvas.width;HEAP32[height>>>2>>>0]=canvas.height;HEAP32[isFullscreen>>>2>>>0]=Browser.isFullscreen?1:0}_emscripten_get_canvas_size.sig="vppp";function _emscripten_create_worker(url){url>>>=0;url=UTF8ToString(url);var id=Browser.workers.length;var info={worker:new Worker(url),callbacks:[],awaited:0,buffer:0};info.worker.onmessage=msg=>{if(ABORT)return;var info=Browser.workers[id];if(!info)return;var callbackId=msg.data["callbackId"];var callbackInfo=info.callbacks[callbackId];if(!callbackInfo)return;if(msg.data["finalResponse"]){info.awaited--;info.callbacks[callbackId]=null;runtimeKeepalivePop()}var data=msg.data["data"];if(data){if(!data.byteLength)data=new Uint8Array(data);info.buffer=_realloc(info.buffer,data.length);HEAPU8.set(data,info.buffer>>>0);callbackInfo.func(info.buffer,data.length,callbackInfo.arg)}else{callbackInfo.func(0,0,callbackInfo.arg)}};Browser.workers.push(info);return id}_emscripten_create_worker.sig="ip";var _emscripten_destroy_worker=id=>{var info=Browser.workers[id];info.worker.terminate();_free(info.buffer);Browser.workers[id]=null};_emscripten_destroy_worker.sig="vi";function _emscripten_call_worker(id,funcName,data,size,callback,arg){funcName>>>=0;data>>>=0;callback>>>=0;arg>>>=0;funcName=UTF8ToString(funcName);var info=Browser.workers[id];var callbackId=-1;if(callback){runtimeKeepalivePush();callbackId=info.callbacks.length;info.callbacks.push({func:getWasmTableEntry(callback),arg});info.awaited++}var transferObject={funcName,callbackId,data:data?new Uint8Array(HEAPU8.subarray(data>>>0,data+size>>>0)):0};if(data){info.worker.postMessage(transferObject,[transferObject.data.buffer])}else{info.worker.postMessage(transferObject)}}_emscripten_call_worker.sig="vippipp";var _emscripten_get_worker_queue_size=id=>{var info=Browser.workers[id];if(!info)return-1;return info.awaited};_emscripten_get_worker_queue_size.sig="ii";var getPreloadedImageData=(path,w,h)=>{path=PATH_FS.resolve(path);var canvas=Browser.preloadedImages[path];if(!canvas)return 0;var ctx=canvas.getContext("2d");var image=ctx.getImageData(0,0,canvas.width,canvas.height);var buf=_malloc(canvas.width*canvas.height*4);HEAPU8.set(image.data,buf>>>0);HEAP32[w>>>2>>>0]=canvas.width;HEAP32[h>>>2>>>0]=canvas.height;return buf};function _emscripten_get_preloaded_image_data(path,w,h){path>>>=0;w>>>=0;h>>>=0;return getPreloadedImageData(UTF8ToString(path),w,h)}_emscripten_get_preloaded_image_data.sig="pppp";var getPreloadedImageData__data=["$PATH_FS","malloc"];function _emscripten_get_preloaded_image_data_from_FILE(file,w,h){file>>>=0;w>>>=0;h>>>=0;var fd=_fileno(file);var stream=FS.getStream(fd);if(stream){return getPreloadedImageData(stream.path,w,h)}return 0}_emscripten_get_preloaded_image_data_from_FILE.sig="pppp";var wget={wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle(){var handle=wget.nextWgetRequestHandle;wget.nextWgetRequestHandle++;return handle}};var FS_mkdirTree=(path,mode)=>FS.mkdirTree(path,mode);var _emscripten_async_wget=function(url,file,onload,onerror){url>>>=0;file>>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);function doCallback(callback){if(callback){runtimeKeepalivePop();callUserCallback(()=>withStackSave(()=>getWasmTableEntry(callback)(stringToUTF8OnStack(_file))))}}var destinationDirectory=PATH.dirname(_file);FS_preloadFile(destinationDirectory,PATH.basename(_file),_url,true,true,false,false,()=>{try{FS_unlink(_file)}catch(e){}FS_mkdirTree(destinationDirectory)}).then(()=>doCallback(onload)).catch(()=>doCallback(onerror))};_emscripten_async_wget.sig="vpppp";var _emscripten_async_wget_data=async function(url,userdata,onload,onerror){url>>>=0;userdata>>>=0;onload>>>=0;onerror>>>=0;runtimeKeepalivePush();try{var byteArray=await asyncLoad(UTF8ToString(url));runtimeKeepalivePop();callUserCallback(()=>{var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer>>>0);getWasmTableEntry(onload)(userdata,buffer,byteArray.length);_free(buffer)})}catch(e){if(onerror){runtimeKeepalivePop();callUserCallback(()=>{getWasmTableEntry(onerror)(userdata)})}}};_emscripten_async_wget_data.sig="vpppp";var _emscripten_async_wget2=function(url,file,request,param,userdata,onload,onerror,onprogress){url>>>=0;file>>>=0;request>>>=0;param>>>=0;userdata>>>=0;onload>>>=0;onerror>>>=0;onprogress>>>=0;runtimeKeepalivePush();var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);var _request=UTF8ToString(request);var _param=UTF8ToString(param);var index=_file.lastIndexOf("/");var http=new XMLHttpRequest;http.open(_request,_url,true);http.responseType="arraybuffer";var handle=wget.getNextWgetRequestHandle();var destinationDirectory=PATH.dirname(_file);http.onload=e=>{runtimeKeepalivePop();if(http.status>=200&&http.status<300){try{FS.unlink(_file)}catch(e){}FS.mkdirTree(destinationDirectory);FS.createDataFile(_file.slice(0,index),_file.slice(index+1),new Uint8Array(http.response),true,true,false);if(onload){var sp=stackSave();getWasmTableEntry(onload)(handle,userdata,stringToUTF8OnStack(_file));stackRestore(sp)}}else{if(onerror)getWasmTableEntry(onerror)(handle,userdata,http.status)}delete wget.wgetRequests[handle]};http.onerror=e=>{runtimeKeepalivePop();if(onerror)getWasmTableEntry(onerror)(handle,userdata,http.status);delete wget.wgetRequests[handle]};http.onprogress=e=>{if(e.lengthComputable||e.lengthComputable===undefined&&e.total!=0){var percentComplete=e.loaded/e.total*100;if(onprogress)getWasmTableEntry(onprogress)(handle,userdata,percentComplete)}};http.onabort=e=>{runtimeKeepalivePop();delete wget.wgetRequests[handle]};if(_request=="POST"){http.setRequestHeader("Content-type","application/x-www-form-urlencoded");http.send(_param)}else{http.send(null)}wget.wgetRequests[handle]=http;return handle};_emscripten_async_wget2.sig="ipppppppp";function _emscripten_async_wget2_data(url,request,param,userdata,free,onload,onerror,onprogress){url>>>=0;request>>>=0;param>>>=0;userdata>>>=0;onload>>>=0;onerror>>>=0;onprogress>>>=0;var _url=UTF8ToString(url);var _request=UTF8ToString(request);var _param=UTF8ToString(param);var http=new XMLHttpRequest;http.open(_request,_url,true);http.responseType="arraybuffer";var handle=wget.getNextWgetRequestHandle();function onerrorjs(){if(onerror){var sp=stackSave();var statusText=0;if(http.statusText){statusText=stringToUTF8OnStack(http.statusText)}getWasmTableEntry(onerror)(handle,userdata,http.status,statusText);stackRestore(sp)}}http.onload=e=>{if(http.status>=200&&http.status<300||http.status===0&&_url.slice(0,4).toLowerCase()!="http"){var byteArray=new Uint8Array(http.response);var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer>>>0);if(onload)getWasmTableEntry(onload)(handle,userdata,buffer,byteArray.length);if(free)_free(buffer)}else{onerrorjs()}delete wget.wgetRequests[handle]};http.onerror=e=>{onerrorjs();delete wget.wgetRequests[handle]};http.onprogress=e=>{if(onprogress)getWasmTableEntry(onprogress)(handle,userdata,e.loaded,e.lengthComputable||e.lengthComputable===undefined?e.total:0)};http.onabort=e=>{delete wget.wgetRequests[handle]};if(_request=="POST"){http.setRequestHeader("Content-type","application/x-www-form-urlencoded");http.send(_param)}else{http.send(null)}wget.wgetRequests[handle]=http;return handle}_emscripten_async_wget2_data.sig="ippppippp";var _emscripten_async_wget2_abort=handle=>{var http=wget.wgetRequests[handle];http?.abort()};_emscripten_async_wget2_abort.sig="vi";function ___asctime_r(tmPtr,buf){tmPtr>>>=0;buf>>>=0;var date={tm_sec:HEAP32[tmPtr>>>2>>>0],tm_min:HEAP32[tmPtr+4>>>2>>>0],tm_hour:HEAP32[tmPtr+8>>>2>>>0],tm_mday:HEAP32[tmPtr+12>>>2>>>0],tm_mon:HEAP32[tmPtr+16>>>2>>>0],tm_year:HEAP32[tmPtr+20>>>2>>>0],tm_wday:HEAP32[tmPtr+24>>>2>>>0]};var days=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var s=days[date.tm_wday]+" "+months[date.tm_mon]+(date.tm_mday<10?" ":" ")+date.tm_mday+(date.tm_hour<10?" 0":" ")+date.tm_hour+(date.tm_min<10?":0":":")+date.tm_min+(date.tm_sec<10?":0":":")+date.tm_sec+" "+(1900+date.tm_year)+"\n";stringToUTF8(s,buf,26);return buf}___asctime_r.sig="ppp";var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var 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 _strptime(buf,format,tm){buf>>>=0;format>>>=0;tm>>>=0;var pattern=UTF8ToString(format);var SPECIAL_CHARS="\\!@#$^&*()+=-[]/{}|:<>?,.";for(var i=0,ii=SPECIAL_CHARS.length;iEQUIVALENT_MATCHERS[c]||m).replace(/%(.)/g,(_,c)=>{let pat=DATE_PATTERNS[c];if(pat){capture.push(c);return`(${pat})`}else{return c}}).replace(/\s+/g,"\\s*");var matches=new RegExp("^"+pattern_out,"i").exec(UTF8ToString(buf));function initDate(){function fixup(value,min,max){return typeof value!="number"||isNaN(value)?min:value>=min?value<=max?value:max:min}return{year:fixup(HEAP32[tm+20>>>2>>>0]+1900,1970,9999),month:fixup(HEAP32[tm+16>>>2>>>0],0,11),day:fixup(HEAP32[tm+12>>>2>>>0],1,31),hour:fixup(HEAP32[tm+8>>>2>>>0],0,23),min:fixup(HEAP32[tm+4>>>2>>>0],0,59),sec:fixup(HEAP32[tm>>>2>>>0],0,59),gmtoff:0}}if(matches){var date=initDate();var value;var getMatch=symbol=>{var pos=capture.indexOf(symbol);if(pos>=0){return matches[pos+1]}return};if(value=getMatch("S")){date.sec=Number(value)}if(value=getMatch("M")){date.min=Number(value)}if(value=getMatch("H")){date.hour=Number(value)}else if(value=getMatch("I")){var hour=Number(value);if(value=getMatch("p")){hour+=value.toUpperCase()[0]==="P"?12:0}date.hour=hour}if(value=getMatch("Y")){date.year=Number(value)}else if(value=getMatch("y")){var year=Number(value);if(value=getMatch("C")){year+=Number(value)*100}else{year+=year<69?2e3:1900}date.year=year}if(value=getMatch("m")){date.month=Number(value)-1}else if(value=getMatch("b")){date.month=MONTH_NUMBERS[value.substring(0,3).toUpperCase()]||0}if(value=getMatch("d")){date.day=Number(value)}else if(value=getMatch("j")){var day=Number(value);var leapYear=isLeapYear(date.year);for(var month=0;month<12;++month){var daysUntilMonth=arraySum(leapYear?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,month-1);if(day<=daysUntilMonth+(leapYear?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[month]){date.day=day-daysUntilMonth}}}else if(value=getMatch("a")){var weekDay=value.substring(0,3).toUpperCase();if(value=getMatch("U")){var weekDayNumber=DAY_NUMBERS_SUN_FIRST[weekDay];var weekNumber=Number(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===0){endDate=addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=addDays(janFirst,7-janFirst.getDay()+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}else if(value=getMatch("W")){var weekDayNumber=DAY_NUMBERS_MON_FIRST[weekDay];var weekNumber=Number(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===1){endDate=addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=addDays(janFirst,7-janFirst.getDay()+1+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}}if(value=getMatch("z")){if(value.toLowerCase()==="z"){date.gmtoff=0}else{var match=value.match(/^((?:\-|\+)\d\d):?(\d\d)?/);date.gmtoff=match[1]*3600;if(match[2]){date.gmtoff+=date.gmtoff>0?match[2]*60:-match[2]*60}}}var fullDate=new Date(date.year,date.month,date.day,date.hour,date.min,date.sec,0);HEAP32[tm>>>2>>>0]=fullDate.getSeconds();HEAP32[tm+4>>>2>>>0]=fullDate.getMinutes();HEAP32[tm+8>>>2>>>0]=fullDate.getHours();HEAP32[tm+12>>>2>>>0]=fullDate.getDate();HEAP32[tm+16>>>2>>>0]=fullDate.getMonth();HEAP32[tm+20>>>2>>>0]=fullDate.getFullYear()-1900;HEAP32[tm+24>>>2>>>0]=fullDate.getDay();HEAP32[tm+28>>>2>>>0]=arraySum(isLeapYear(fullDate.getFullYear())?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,fullDate.getMonth()-1)+fullDate.getDate()-1;HEAP32[tm+32>>>2>>>0]=0;HEAP32[tm+36>>>2>>>0]=date.gmtoff;return buf+lengthBytesUTF8(matches[0])}return 0}_strptime.sig="pppp";function _strptime_l(buf,format,tm,locale){buf>>>=0;format>>>=0;tm>>>=0;locale>>>=0;return _strptime(buf,format,tm)}_strptime_l.sig="ppppp";function __dlsym_catchup_js(handle,symbolIndex){handle>>>=0;var lib=LDSO.loadedLibsByHandle[handle];var symDict=lib.exports;var symName=Object.keys(symDict)[symbolIndex];var sym=symDict[symName];var result=addFunction(sym,sym.sig);return result}__dlsym_catchup_js.sig="ppi";var FS_readFile=(...args)=>FS.readFile(...args);var FS_root=(...args)=>FS.root(...args);var FS_mounts=(...args)=>FS.mounts(...args);var FS_devices=(...args)=>FS.devices(...args);var FS_streams=(...args)=>FS.streams(...args);var FS_nextInode=(...args)=>FS.nextInode(...args);var FS_nameTable=(...args)=>FS.nameTable(...args);var FS_currentPath=(...args)=>FS.currentPath(...args);var FS_initialized=(...args)=>FS.initialized(...args);var FS_ignorePermissions=(...args)=>FS.ignorePermissions(...args);var FS_trackingDelegate=(...args)=>FS.trackingDelegate(...args);var FS_filesystems=(...args)=>FS.filesystems(...args);var FS_syncFSRequests=(...args)=>FS.syncFSRequests(...args);var FS_lookupPath=(...args)=>FS.lookupPath(...args);var FS_getPath=(...args)=>FS.getPath(...args);var FS_hashName=(...args)=>FS.hashName(...args);var FS_hashAddNode=(...args)=>FS.hashAddNode(...args);var FS_hashRemoveNode=(...args)=>FS.hashRemoveNode(...args);var FS_lookupNode=(...args)=>FS.lookupNode(...args);var FS_createNode=(...args)=>FS.createNode(...args);var FS_destroyNode=(...args)=>FS.destroyNode(...args);var FS_isRoot=(...args)=>FS.isRoot(...args);var FS_isMountpoint=(...args)=>FS.isMountpoint(...args);var FS_isFile=(...args)=>FS.isFile(...args);var FS_isDir=(...args)=>FS.isDir(...args);var FS_isLink=(...args)=>FS.isLink(...args);var FS_isChrdev=(...args)=>FS.isChrdev(...args);var FS_isBlkdev=(...args)=>FS.isBlkdev(...args);var FS_isFIFO=(...args)=>FS.isFIFO(...args);var FS_isSocket=(...args)=>FS.isSocket(...args);var FS_flagsToPermissionString=(...args)=>FS.flagsToPermissionString(...args);var FS_nodePermissions=(...args)=>FS.nodePermissions(...args);var FS_mayLookup=(...args)=>FS.mayLookup(...args);var FS_mayCreate=(...args)=>FS.mayCreate(...args);var FS_mayDelete=(...args)=>FS.mayDelete(...args);var FS_mayOpen=(...args)=>FS.mayOpen(...args);var FS_checkOpExists=(...args)=>FS.checkOpExists(...args);var FS_nextfd=(...args)=>FS.nextfd(...args);var FS_getStreamChecked=(...args)=>FS.getStreamChecked(...args);var FS_getStream=(...args)=>FS.getStream(...args);var FS_createStream=(...args)=>FS.createStream(...args);var FS_closeStream=(...args)=>FS.closeStream(...args);var FS_dupStream=(...args)=>FS.dupStream(...args);var FS_doSetAttr=(...args)=>FS.doSetAttr(...args);var FS_chrdev_stream_ops=(...args)=>FS.chrdev_stream_ops(...args);var FS_major=(...args)=>FS.major(...args);var FS_minor=(...args)=>FS.minor(...args);var FS_makedev=(...args)=>FS.makedev(...args);var FS_registerDevice=(...args)=>FS.registerDevice(...args);var FS_getDevice=(...args)=>FS.getDevice(...args);var FS_getMounts=(...args)=>FS.getMounts(...args);var FS_syncfs=(...args)=>FS.syncfs(...args);var FS_mount=(...args)=>FS.mount(...args);var FS_unmount=(...args)=>FS.unmount(...args);var FS_lookup=(...args)=>FS.lookup(...args);var FS_mknod=(...args)=>FS.mknod(...args);var FS_statfs=(...args)=>FS.statfs(...args);var FS_statfsStream=(...args)=>FS.statfsStream(...args);var FS_statfsNode=(...args)=>FS.statfsNode(...args);var FS_create=(...args)=>FS.create(...args);var FS_mkdir=(...args)=>FS.mkdir(...args);var FS_mkdev=(...args)=>FS.mkdev(...args);var FS_symlink=(...args)=>FS.symlink(...args);var FS_rename=(...args)=>FS.rename(...args);var FS_rmdir=(...args)=>FS.rmdir(...args);var FS_readdir=(...args)=>FS.readdir(...args);var FS_readlink=(...args)=>FS.readlink(...args);var FS_stat=(...args)=>FS.stat(...args);var FS_fstat=(...args)=>FS.fstat(...args);var FS_lstat=(...args)=>FS.lstat(...args);var FS_doChmod=(...args)=>FS.doChmod(...args);var FS_chmod=(...args)=>FS.chmod(...args);var FS_lchmod=(...args)=>FS.lchmod(...args);var FS_fchmod=(...args)=>FS.fchmod(...args);var FS_doChown=(...args)=>FS.doChown(...args);var FS_chown=(...args)=>FS.chown(...args);var FS_lchown=(...args)=>FS.lchown(...args);var FS_fchown=(...args)=>FS.fchown(...args);var FS_doTruncate=(...args)=>FS.doTruncate(...args);var FS_truncate=(...args)=>FS.truncate(...args);var FS_ftruncate=(...args)=>FS.ftruncate(...args);var FS_utime=(...args)=>FS.utime(...args);var FS_open=(...args)=>FS.open(...args);var FS_close=(...args)=>FS.close(...args);var FS_isClosed=(...args)=>FS.isClosed(...args);var FS_llseek=(...args)=>FS.llseek(...args);var FS_read=(...args)=>FS.read(...args);var FS_write=(...args)=>FS.write(...args);var FS_mmap=(...args)=>FS.mmap(...args);var FS_msync=(...args)=>FS.msync(...args);var FS_ioctl=(...args)=>FS.ioctl(...args);var FS_writeFile=(...args)=>FS.writeFile(...args);var FS_cwd=(...args)=>FS.cwd(...args);var FS_chdir=(...args)=>FS.chdir(...args);var FS_createDefaultDirectories=(...args)=>FS.createDefaultDirectories(...args);var FS_createDefaultDevices=(...args)=>FS.createDefaultDevices(...args);var FS_createSpecialDirectories=(...args)=>FS.createSpecialDirectories(...args);var FS_createStandardStreams=(...args)=>FS.createStandardStreams(...args);var FS_staticInit=(...args)=>FS.staticInit(...args);var FS_init=(...args)=>FS.init(...args);var FS_quit=(...args)=>FS.quit(...args);var FS_findObject=(...args)=>FS.findObject(...args);var FS_analyzePath=(...args)=>FS.analyzePath(...args);var FS_createFile=(...args)=>FS.createFile(...args);var FS_forceLoadFile=(...args)=>FS.forceLoadFile(...args);var _setNetworkCallback=(event,userData,callback)=>{function _callback(data){callUserCallback(()=>{if(event==="error"){withStackSave(()=>{var msg=stringToUTF8OnStack(data[2]);getWasmTableEntry(callback)(data[0],data[1],msg,userData)})}else{getWasmTableEntry(callback)(data,userData)}})}runtimeKeepalivePush();SOCKFS.on(event,callback?_callback:null)};function _emscripten_set_socket_error_callback(userData,callback){userData>>>=0;callback>>>=0;return _setNetworkCallback("error",userData,callback)}_emscripten_set_socket_error_callback.sig="vpp";function _emscripten_set_socket_open_callback(userData,callback){userData>>>=0;callback>>>=0;return _setNetworkCallback("open",userData,callback)}_emscripten_set_socket_open_callback.sig="vpp";function _emscripten_set_socket_listen_callback(userData,callback){userData>>>=0;callback>>>=0;return _setNetworkCallback("listen",userData,callback)}_emscripten_set_socket_listen_callback.sig="vpp";function _emscripten_set_socket_connection_callback(userData,callback){userData>>>=0;callback>>>=0;return _setNetworkCallback("connection",userData,callback)}_emscripten_set_socket_connection_callback.sig="vpp";function _emscripten_set_socket_message_callback(userData,callback){userData>>>=0;callback>>>=0;return _setNetworkCallback("message",userData,callback)}_emscripten_set_socket_message_callback.sig="vpp";function _emscripten_set_socket_close_callback(userData,callback){userData>>>=0;callback>>>=0;return _setNetworkCallback("close",userData,callback)}_emscripten_set_socket_close_callback.sig="vpp";function _emscripten_webgl_enable_ANGLE_instanced_arrays(ctx){ctx>>>=0;return webgl_enable_ANGLE_instanced_arrays(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_ANGLE_instanced_arrays.sig="ip";function _emscripten_webgl_enable_OES_vertex_array_object(ctx){ctx>>>=0;return webgl_enable_OES_vertex_array_object(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_OES_vertex_array_object.sig="ip";function _emscripten_webgl_enable_WEBGL_draw_buffers(ctx){ctx>>>=0;return webgl_enable_WEBGL_draw_buffers(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_WEBGL_draw_buffers.sig="ip";function _emscripten_webgl_enable_WEBGL_multi_draw(ctx){ctx>>>=0;return webgl_enable_WEBGL_multi_draw(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_WEBGL_multi_draw.sig="ip";function _emscripten_webgl_enable_EXT_polygon_offset_clamp(ctx){ctx>>>=0;return webgl_enable_EXT_polygon_offset_clamp(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_EXT_polygon_offset_clamp.sig="ip";function _emscripten_webgl_enable_EXT_clip_control(ctx){ctx>>>=0;return webgl_enable_EXT_clip_control(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_EXT_clip_control.sig="ip";function _emscripten_webgl_enable_WEBGL_polygon_mode(ctx){ctx>>>=0;return webgl_enable_WEBGL_polygon_mode(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_WEBGL_polygon_mode.sig="ip";var _glPixelStorei=_emscripten_glPixelStorei;_glPixelStorei.sig="vii";var _glGetString=_emscripten_glGetString;_glGetString.sig="pi";var _glGetIntegerv=_emscripten_glGetIntegerv;_glGetIntegerv.sig="vip";var _glGetFloatv=_emscripten_glGetFloatv;_glGetFloatv.sig="vip";var _glGetBooleanv=_emscripten_glGetBooleanv;_glGetBooleanv.sig="vip";var _glDeleteTextures=_emscripten_glDeleteTextures;_glDeleteTextures.sig="vip";var _glCompressedTexImage2D=_emscripten_glCompressedTexImage2D;_glCompressedTexImage2D.sig="viiiiiiip";var _glCompressedTexSubImage2D=_emscripten_glCompressedTexSubImage2D;_glCompressedTexSubImage2D.sig="viiiiiiiip";var _glTexImage2D=_emscripten_glTexImage2D;_glTexImage2D.sig="viiiiiiiip";var _glTexSubImage2D=_emscripten_glTexSubImage2D;_glTexSubImage2D.sig="viiiiiiiip";var _glReadPixels=_emscripten_glReadPixels;_glReadPixels.sig="viiiiiip";var _glBindTexture=_emscripten_glBindTexture;_glBindTexture.sig="vii";var _glGetTexParameterfv=_emscripten_glGetTexParameterfv;_glGetTexParameterfv.sig="viip";var _glGetTexParameteriv=_emscripten_glGetTexParameteriv;_glGetTexParameteriv.sig="viip";var _glTexParameterfv=_emscripten_glTexParameterfv;_glTexParameterfv.sig="viip";var _glTexParameteriv=_emscripten_glTexParameteriv;_glTexParameteriv.sig="viip";var _glIsTexture=_emscripten_glIsTexture;_glIsTexture.sig="ii";var _glGenBuffers=_emscripten_glGenBuffers;_glGenBuffers.sig="vip";var _glGenTextures=_emscripten_glGenTextures;_glGenTextures.sig="vip";var _glDeleteBuffers=_emscripten_glDeleteBuffers;_glDeleteBuffers.sig="vip";var _glGetBufferParameteriv=_emscripten_glGetBufferParameteriv;_glGetBufferParameteriv.sig="viip";var _glBufferData=_emscripten_glBufferData;_glBufferData.sig="vippi";var _glBufferSubData=_emscripten_glBufferSubData;_glBufferSubData.sig="vippp";var _glGenQueriesEXT=_emscripten_glGenQueriesEXT;var _glDeleteQueriesEXT=_emscripten_glDeleteQueriesEXT;var _glIsQueryEXT=_emscripten_glIsQueryEXT;var _glBeginQueryEXT=_emscripten_glBeginQueryEXT;var _glEndQueryEXT=_emscripten_glEndQueryEXT;var _glQueryCounterEXT=_emscripten_glQueryCounterEXT;var _glGetQueryivEXT=_emscripten_glGetQueryivEXT;var _glGetQueryObjectuivEXT=_emscripten_glGetQueryObjectuivEXT;var _glGetQueryObjectui64vEXT=_emscripten_glGetQueryObjectui64vEXT;var _glIsBuffer=_emscripten_glIsBuffer;_glIsBuffer.sig="ii";var _glGenRenderbuffers=_emscripten_glGenRenderbuffers;_glGenRenderbuffers.sig="vip";var _glDeleteRenderbuffers=_emscripten_glDeleteRenderbuffers;_glDeleteRenderbuffers.sig="vip";var _glBindRenderbuffer=_emscripten_glBindRenderbuffer;_glBindRenderbuffer.sig="vii";var _glGetRenderbufferParameteriv=_emscripten_glGetRenderbufferParameteriv;_glGetRenderbufferParameteriv.sig="viip";var _glIsRenderbuffer=_emscripten_glIsRenderbuffer;_glIsRenderbuffer.sig="ii";var _glGetUniformfv=_emscripten_glGetUniformfv;_glGetUniformfv.sig="viip";var _glGetUniformiv=_emscripten_glGetUniformiv;_glGetUniformiv.sig="viip";var _glGetUniformLocation=_emscripten_glGetUniformLocation;_glGetUniformLocation.sig="iip";var _glGetVertexAttribfv=_emscripten_glGetVertexAttribfv;_glGetVertexAttribfv.sig="viip";var _glGetVertexAttribiv=_emscripten_glGetVertexAttribiv;_glGetVertexAttribiv.sig="viip";var _glGetVertexAttribPointerv=_emscripten_glGetVertexAttribPointerv;_glGetVertexAttribPointerv.sig="viip";var _glUniform1f=_emscripten_glUniform1f;_glUniform1f.sig="vif";var _glUniform2f=_emscripten_glUniform2f;_glUniform2f.sig="viff";var _glUniform3f=_emscripten_glUniform3f;_glUniform3f.sig="vifff";var _glUniform4f=_emscripten_glUniform4f;_glUniform4f.sig="viffff";var _glUniform1i=_emscripten_glUniform1i;_glUniform1i.sig="vii";var _glUniform2i=_emscripten_glUniform2i;_glUniform2i.sig="viii";var _glUniform3i=_emscripten_glUniform3i;_glUniform3i.sig="viiii";var _glUniform4i=_emscripten_glUniform4i;_glUniform4i.sig="viiiii";var _glUniform1iv=_emscripten_glUniform1iv;_glUniform1iv.sig="viip";var _glUniform2iv=_emscripten_glUniform2iv;_glUniform2iv.sig="viip";var _glUniform3iv=_emscripten_glUniform3iv;_glUniform3iv.sig="viip";var _glUniform4iv=_emscripten_glUniform4iv;_glUniform4iv.sig="viip";var _glUniform1fv=_emscripten_glUniform1fv;_glUniform1fv.sig="viip";var _glUniform2fv=_emscripten_glUniform2fv;_glUniform2fv.sig="viip";var _glUniform3fv=_emscripten_glUniform3fv;_glUniform3fv.sig="viip";var _glUniform4fv=_emscripten_glUniform4fv;_glUniform4fv.sig="viip";var _glUniformMatrix2fv=_emscripten_glUniformMatrix2fv;_glUniformMatrix2fv.sig="viiip";var _glUniformMatrix3fv=_emscripten_glUniformMatrix3fv;_glUniformMatrix3fv.sig="viiip";var _glUniformMatrix4fv=_emscripten_glUniformMatrix4fv;_glUniformMatrix4fv.sig="viiip";var _glBindBuffer=_emscripten_glBindBuffer;_glBindBuffer.sig="vii";var _glVertexAttrib1fv=_emscripten_glVertexAttrib1fv;_glVertexAttrib1fv.sig="vip";var _glVertexAttrib2fv=_emscripten_glVertexAttrib2fv;_glVertexAttrib2fv.sig="vip";var _glVertexAttrib3fv=_emscripten_glVertexAttrib3fv;_glVertexAttrib3fv.sig="vip";var _glVertexAttrib4fv=_emscripten_glVertexAttrib4fv;_glVertexAttrib4fv.sig="vip";var _glGetAttribLocation=_emscripten_glGetAttribLocation;_glGetAttribLocation.sig="iip";var _glGetActiveAttrib=_emscripten_glGetActiveAttrib;_glGetActiveAttrib.sig="viiipppp";var _glGetActiveUniform=_emscripten_glGetActiveUniform;_glGetActiveUniform.sig="viiipppp";var _glCreateShader=_emscripten_glCreateShader;_glCreateShader.sig="ii";var _glDeleteShader=_emscripten_glDeleteShader;_glDeleteShader.sig="vi";var _glGetAttachedShaders=_emscripten_glGetAttachedShaders;_glGetAttachedShaders.sig="viipp";var _glShaderSource=_emscripten_glShaderSource;_glShaderSource.sig="viipp";var _glGetShaderSource=_emscripten_glGetShaderSource;_glGetShaderSource.sig="viipp";var _glCompileShader=_emscripten_glCompileShader;_glCompileShader.sig="vi";var _glGetShaderInfoLog=_emscripten_glGetShaderInfoLog;_glGetShaderInfoLog.sig="viipp";var _glGetShaderiv=_emscripten_glGetShaderiv;_glGetShaderiv.sig="viip";var _glGetProgramiv=_emscripten_glGetProgramiv;_glGetProgramiv.sig="viip";var _glIsShader=_emscripten_glIsShader;_glIsShader.sig="ii";var _glCreateProgram=_emscripten_glCreateProgram;_glCreateProgram.sig="i";var _glDeleteProgram=_emscripten_glDeleteProgram;_glDeleteProgram.sig="vi";var _glAttachShader=_emscripten_glAttachShader;_glAttachShader.sig="vii";var _glDetachShader=_emscripten_glDetachShader;_glDetachShader.sig="vii";var _glGetShaderPrecisionFormat=_emscripten_glGetShaderPrecisionFormat;_glGetShaderPrecisionFormat.sig="viipp";var _glLinkProgram=_emscripten_glLinkProgram;_glLinkProgram.sig="vi";var _glGetProgramInfoLog=_emscripten_glGetProgramInfoLog;_glGetProgramInfoLog.sig="viipp";var _glUseProgram=_emscripten_glUseProgram;_glUseProgram.sig="vi";var _glValidateProgram=_emscripten_glValidateProgram;_glValidateProgram.sig="vi";var _glIsProgram=_emscripten_glIsProgram;_glIsProgram.sig="ii";var _glBindAttribLocation=_emscripten_glBindAttribLocation;_glBindAttribLocation.sig="viip";var _glBindFramebuffer=_emscripten_glBindFramebuffer;_glBindFramebuffer.sig="vii";var _glGenFramebuffers=_emscripten_glGenFramebuffers;_glGenFramebuffers.sig="vip";var _glDeleteFramebuffers=_emscripten_glDeleteFramebuffers;_glDeleteFramebuffers.sig="vip";var _glFramebufferRenderbuffer=_emscripten_glFramebufferRenderbuffer;_glFramebufferRenderbuffer.sig="viiii";var _glFramebufferTexture2D=_emscripten_glFramebufferTexture2D;_glFramebufferTexture2D.sig="viiiii";var _glGetFramebufferAttachmentParameteriv=_emscripten_glGetFramebufferAttachmentParameteriv;_glGetFramebufferAttachmentParameteriv.sig="viiip";var _glIsFramebuffer=_emscripten_glIsFramebuffer;_glIsFramebuffer.sig="ii";function _emscripten_glVertexPointer(size,type,stride,ptr){ptr>>>=0;return abort("Legacy GL function (glVertexPointer) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation.")}_emscripten_glVertexPointer.sig="viiip";var _glVertexPointer=_emscripten_glVertexPointer;_glVertexPointer.sig="viiip";var _emscripten_glMatrixMode=()=>abort("Legacy GL function (glMatrixMode) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation.");_emscripten_glMatrixMode.sig="vi";var _glMatrixMode=_emscripten_glMatrixMode;_glMatrixMode.sig="vi";var _emscripten_glBegin=()=>abort("Legacy GL function (glBegin) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation.");_emscripten_glBegin.sig="vi";var _glBegin=_emscripten_glBegin;_glBegin.sig="vi";var _emscripten_glLoadIdentity=()=>abort("Legacy GL function (glLoadIdentity) called. If you want legacy GL emulation, you need to compile with -sLEGACY_GL_EMULATION to enable legacy GL emulation.");_emscripten_glLoadIdentity.sig="v";var _glLoadIdentity=_emscripten_glLoadIdentity;_glLoadIdentity.sig="v";var _glGenVertexArraysOES=_emscripten_glGenVertexArraysOES;_glGenVertexArraysOES.sig="vip";var _glDeleteVertexArraysOES=_emscripten_glDeleteVertexArraysOES;_glDeleteVertexArraysOES.sig="vip";var _glBindVertexArrayOES=_emscripten_glBindVertexArrayOES;_glBindVertexArrayOES.sig="vi";var _glIsVertexArrayOES=_emscripten_glIsVertexArrayOES;_glIsVertexArrayOES.sig="ii";var _glVertexAttribPointer=_emscripten_glVertexAttribPointer;_glVertexAttribPointer.sig="viiiiip";var _glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray;_glEnableVertexAttribArray.sig="vi";var _glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray;_glDisableVertexAttribArray.sig="vi";var _glDrawArrays=_emscripten_glDrawArrays;_glDrawArrays.sig="viii";var _glShaderBinary=_emscripten_glShaderBinary;_glShaderBinary.sig="vipipi";var _glReleaseShaderCompiler=_emscripten_glReleaseShaderCompiler;_glReleaseShaderCompiler.sig="v";var _glGetError=_emscripten_glGetError;_glGetError.sig="i";var _glVertexAttribDivisorNV=_emscripten_glVertexAttribDivisorNV;var _glDrawArraysInstancedNV=_emscripten_glDrawArraysInstancedNV;var _glDrawElementsInstancedNV=_emscripten_glDrawElementsInstancedNV;var _glVertexAttribDivisorEXT=_emscripten_glVertexAttribDivisorEXT;var _glDrawArraysInstancedEXT=_emscripten_glDrawArraysInstancedEXT;var _glDrawElementsInstancedEXT=_emscripten_glDrawElementsInstancedEXT;var _glVertexAttribDivisorARB=_emscripten_glVertexAttribDivisorARB;var _glDrawArraysInstancedARB=_emscripten_glDrawArraysInstancedARB;var _glDrawElementsInstancedARB=_emscripten_glDrawElementsInstancedARB;var _glVertexAttribDivisorANGLE=_emscripten_glVertexAttribDivisorANGLE;var _glDrawArraysInstancedANGLE=_emscripten_glDrawArraysInstancedANGLE;var _glDrawElementsInstancedANGLE=_emscripten_glDrawElementsInstancedANGLE;var _glDrawBuffersEXT=_emscripten_glDrawBuffersEXT;var _glDrawBuffersWEBGL=_emscripten_glDrawBuffersWEBGL;var _glColorMask=_emscripten_glColorMask;_glColorMask.sig="viiii";var _glDepthMask=_emscripten_glDepthMask;_glDepthMask.sig="vi";var _glSampleCoverage=_emscripten_glSampleCoverage;_glSampleCoverage.sig="vfi";function _emscripten_glMultiDrawArraysWEBGL(mode,firsts,counts,drawcount){firsts>>>=0;counts>>>=0;GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>>2,HEAP32,counts>>>2,drawcount)}_emscripten_glMultiDrawArraysWEBGL.sig="vippi";var _glMultiDrawArraysWEBGL=_emscripten_glMultiDrawArraysWEBGL;var _emscripten_glMultiDrawArrays=_glMultiDrawArraysWEBGL;_emscripten_glMultiDrawArrays.sig="vippi";var _glMultiDrawArrays=_emscripten_glMultiDrawArrays;_glMultiDrawArrays.sig="vippi";var _emscripten_glMultiDrawArraysANGLE=_glMultiDrawArraysWEBGL;var _glMultiDrawArraysANGLE=_emscripten_glMultiDrawArraysANGLE;function _emscripten_glMultiDrawArraysInstancedWEBGL(mode,firsts,counts,instanceCounts,drawcount){firsts>>>=0;counts>>>=0;instanceCounts>>>=0;GLctx.multiDrawWebgl["multiDrawArraysInstancedWEBGL"](mode,HEAP32,firsts>>>2,HEAP32,counts>>>2,HEAP32,instanceCounts>>>2,drawcount)}_emscripten_glMultiDrawArraysInstancedWEBGL.sig="vipppi";var _glMultiDrawArraysInstancedWEBGL=_emscripten_glMultiDrawArraysInstancedWEBGL;var _emscripten_glMultiDrawArraysInstancedANGLE=_glMultiDrawArraysInstancedWEBGL;var _glMultiDrawArraysInstancedANGLE=_emscripten_glMultiDrawArraysInstancedANGLE;function _emscripten_glMultiDrawElementsWEBGL(mode,counts,type,offsets,drawcount){counts>>>=0;offsets>>>=0;GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>>2,type,HEAP32,offsets>>>2,drawcount)}_emscripten_glMultiDrawElementsWEBGL.sig="vipipi";var _glMultiDrawElementsWEBGL=_emscripten_glMultiDrawElementsWEBGL;var _emscripten_glMultiDrawElements=_glMultiDrawElementsWEBGL;_emscripten_glMultiDrawElements.sig="vipipi";var _glMultiDrawElements=_emscripten_glMultiDrawElements;_glMultiDrawElements.sig="vipipi";var _emscripten_glMultiDrawElementsANGLE=_glMultiDrawElementsWEBGL;var _glMultiDrawElementsANGLE=_emscripten_glMultiDrawElementsANGLE;function _emscripten_glMultiDrawElementsInstancedWEBGL(mode,counts,type,offsets,instanceCounts,drawcount){counts>>>=0;offsets>>>=0;instanceCounts>>>=0;GLctx.multiDrawWebgl["multiDrawElementsInstancedWEBGL"](mode,HEAP32,counts>>>2,type,HEAP32,offsets>>>2,HEAP32,instanceCounts>>>2,drawcount)}_emscripten_glMultiDrawElementsInstancedWEBGL.sig="vipippi";var _glMultiDrawElementsInstancedWEBGL=_emscripten_glMultiDrawElementsInstancedWEBGL;var _emscripten_glMultiDrawElementsInstancedANGLE=_glMultiDrawElementsInstancedWEBGL;var _glMultiDrawElementsInstancedANGLE=_emscripten_glMultiDrawElementsInstancedANGLE;var _glPolygonOffsetClampEXT=_emscripten_glPolygonOffsetClampEXT;var _glClipControlEXT=_emscripten_glClipControlEXT;var _glPolygonModeWEBGL=_emscripten_glPolygonModeWEBGL;var _glFinish=_emscripten_glFinish;_glFinish.sig="v";var _glFlush=_emscripten_glFlush;_glFlush.sig="v";var _emscripten_glClearDepth=x0=>GLctx.clearDepth(x0);_emscripten_glClearDepth.sig="vd";var _glClearDepth=_emscripten_glClearDepth;_glClearDepth.sig="vd";var _glClearDepthf=_emscripten_glClearDepthf;_glClearDepthf.sig="vf";var _glDepthFunc=_emscripten_glDepthFunc;_glDepthFunc.sig="vi";var _glEnable=_emscripten_glEnable;_glEnable.sig="vi";var _glDisable=_emscripten_glDisable;_glDisable.sig="vi";var _glFrontFace=_emscripten_glFrontFace;_glFrontFace.sig="vi";var _glCullFace=_emscripten_glCullFace;_glCullFace.sig="vi";var _glClear=_emscripten_glClear;_glClear.sig="vi";var _glLineWidth=_emscripten_glLineWidth;_glLineWidth.sig="vf";var _glClearStencil=_emscripten_glClearStencil;_glClearStencil.sig="vi";var _glStencilMask=_emscripten_glStencilMask;_glStencilMask.sig="vi";var _glCheckFramebufferStatus=_emscripten_glCheckFramebufferStatus;_glCheckFramebufferStatus.sig="ii";var _glGenerateMipmap=_emscripten_glGenerateMipmap;_glGenerateMipmap.sig="vi";var _glActiveTexture=_emscripten_glActiveTexture;_glActiveTexture.sig="vi";var _glBlendEquation=_emscripten_glBlendEquation;_glBlendEquation.sig="vi";var _glIsEnabled=_emscripten_glIsEnabled;_glIsEnabled.sig="ii";var _glBlendFunc=_emscripten_glBlendFunc;_glBlendFunc.sig="vii";var _glBlendEquationSeparate=_emscripten_glBlendEquationSeparate;_glBlendEquationSeparate.sig="vii";var _emscripten_glDepthRange=(x0,x1)=>GLctx.depthRange(x0,x1);_emscripten_glDepthRange.sig="vdd";var _glDepthRange=_emscripten_glDepthRange;_glDepthRange.sig="vdd";var _glDepthRangef=_emscripten_glDepthRangef;_glDepthRangef.sig="vff";var _glStencilMaskSeparate=_emscripten_glStencilMaskSeparate;_glStencilMaskSeparate.sig="vii";var _glHint=_emscripten_glHint;_glHint.sig="vii";var _glPolygonOffset=_emscripten_glPolygonOffset;_glPolygonOffset.sig="vff";var _glVertexAttrib1f=_emscripten_glVertexAttrib1f;_glVertexAttrib1f.sig="vif";var _glTexParameteri=_emscripten_glTexParameteri;_glTexParameteri.sig="viii";var _glTexParameterf=_emscripten_glTexParameterf;_glTexParameterf.sig="viif";var _glVertexAttrib2f=_emscripten_glVertexAttrib2f;_glVertexAttrib2f.sig="viff";var _glStencilFunc=_emscripten_glStencilFunc;_glStencilFunc.sig="viii";var _glStencilOp=_emscripten_glStencilOp;_glStencilOp.sig="viii";var _glViewport=_emscripten_glViewport;_glViewport.sig="viiii";var _glClearColor=_emscripten_glClearColor;_glClearColor.sig="vffff";var _glScissor=_emscripten_glScissor;_glScissor.sig="viiii";var _glVertexAttrib3f=_emscripten_glVertexAttrib3f;_glVertexAttrib3f.sig="vifff";var _glRenderbufferStorage=_emscripten_glRenderbufferStorage;_glRenderbufferStorage.sig="viiii";var _glBlendFuncSeparate=_emscripten_glBlendFuncSeparate;_glBlendFuncSeparate.sig="viiii";var _glBlendColor=_emscripten_glBlendColor;_glBlendColor.sig="vffff";var _glStencilFuncSeparate=_emscripten_glStencilFuncSeparate;_glStencilFuncSeparate.sig="viiii";var _glStencilOpSeparate=_emscripten_glStencilOpSeparate;_glStencilOpSeparate.sig="viiii";var _glVertexAttrib4f=_emscripten_glVertexAttrib4f;_glVertexAttrib4f.sig="viffff";var _glCopyTexImage2D=_emscripten_glCopyTexImage2D;_glCopyTexImage2D.sig="viiiiiiii";var _glCopyTexSubImage2D=_emscripten_glCopyTexSubImage2D;_glCopyTexSubImage2D.sig="viiiiiiii";function _emscripten_webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){ctx>>>=0;return webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance.sig="ip";function _emscripten_webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){ctx>>>=0;return webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GL.contexts[ctx].GLctx)}_emscripten_webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance.sig="ip";var _glGetStringi=_emscripten_glGetStringi;_glGetStringi.sig="pii";var _glGetInteger64v=_emscripten_glGetInteger64v;_glGetInteger64v.sig="vip";var _glGetInternalformativ=_emscripten_glGetInternalformativ;_glGetInternalformativ.sig="viiiip";var _glCompressedTexImage3D=_emscripten_glCompressedTexImage3D;_glCompressedTexImage3D.sig="viiiiiiiip";var _glCompressedTexSubImage3D=_emscripten_glCompressedTexSubImage3D;_glCompressedTexSubImage3D.sig="viiiiiiiiiip";var _glGetBufferParameteri64v=_emscripten_glGetBufferParameteri64v;_glGetBufferParameteri64v.sig="viip";function _emscripten_glGetBufferSubData(target,offset,size,data){offset>>>=0;size>>>=0;data>>>=0;if(!data){GL.recordError(1281);return}size&&GLctx.getBufferSubData(target,offset,HEAPU8.subarray(data>>>0,data+size>>>0))}_emscripten_glGetBufferSubData.sig="vippp";var _glGetBufferSubData=_emscripten_glGetBufferSubData;_glGetBufferSubData.sig="vippp";var _glInvalidateFramebuffer=_emscripten_glInvalidateFramebuffer;_glInvalidateFramebuffer.sig="viip";var _glInvalidateSubFramebuffer=_emscripten_glInvalidateSubFramebuffer;_glInvalidateSubFramebuffer.sig="viipiiii";var _glTexImage3D=_emscripten_glTexImage3D;_glTexImage3D.sig="viiiiiiiiip";var _glTexSubImage3D=_emscripten_glTexSubImage3D;_glTexSubImage3D.sig="viiiiiiiiiip";var _glGenQueries=_emscripten_glGenQueries;_glGenQueries.sig="vip";var _glDeleteQueries=_emscripten_glDeleteQueries;_glDeleteQueries.sig="vip";var _glIsQuery=_emscripten_glIsQuery;_glIsQuery.sig="ii";var _glBeginQuery=_emscripten_glBeginQuery;_glBeginQuery.sig="vii";var _glGetQueryiv=_emscripten_glGetQueryiv;_glGetQueryiv.sig="viip";var _glGetQueryObjectuiv=_emscripten_glGetQueryObjectuiv;_glGetQueryObjectuiv.sig="viip";var _glGenSamplers=_emscripten_glGenSamplers;_glGenSamplers.sig="vip";var _glDeleteSamplers=_emscripten_glDeleteSamplers;_glDeleteSamplers.sig="vip";var _glIsSampler=_emscripten_glIsSampler;_glIsSampler.sig="ii";var _glBindSampler=_emscripten_glBindSampler;_glBindSampler.sig="vii";var _glSamplerParameterf=_emscripten_glSamplerParameterf;_glSamplerParameterf.sig="viif";var _glSamplerParameteri=_emscripten_glSamplerParameteri;_glSamplerParameteri.sig="viii";var _glSamplerParameterfv=_emscripten_glSamplerParameterfv;_glSamplerParameterfv.sig="viip";var _glSamplerParameteriv=_emscripten_glSamplerParameteriv;_glSamplerParameteriv.sig="viip";var _glGetSamplerParameterfv=_emscripten_glGetSamplerParameterfv;_glGetSamplerParameterfv.sig="viip";var _glGetSamplerParameteriv=_emscripten_glGetSamplerParameteriv;_glGetSamplerParameteriv.sig="viip";var _glGenTransformFeedbacks=_emscripten_glGenTransformFeedbacks;_glGenTransformFeedbacks.sig="vip";var _glDeleteTransformFeedbacks=_emscripten_glDeleteTransformFeedbacks;_glDeleteTransformFeedbacks.sig="vip";var _glIsTransformFeedback=_emscripten_glIsTransformFeedback;_glIsTransformFeedback.sig="ii";var _glBindTransformFeedback=_emscripten_glBindTransformFeedback;_glBindTransformFeedback.sig="vii";var _glTransformFeedbackVaryings=_emscripten_glTransformFeedbackVaryings;_glTransformFeedbackVaryings.sig="viipi";var _glGetTransformFeedbackVarying=_emscripten_glGetTransformFeedbackVarying;_glGetTransformFeedbackVarying.sig="viiipppp";var _glGetIntegeri_v=_emscripten_glGetIntegeri_v;_glGetIntegeri_v.sig="viip";var _glGetInteger64i_v=_emscripten_glGetInteger64i_v;_glGetInteger64i_v.sig="viip";var _glBindBufferBase=_emscripten_glBindBufferBase;_glBindBufferBase.sig="viii";var _glBindBufferRange=_emscripten_glBindBufferRange;_glBindBufferRange.sig="viiipp";var _glGetUniformIndices=_emscripten_glGetUniformIndices;_glGetUniformIndices.sig="viipp";var _glGetActiveUniformsiv=_emscripten_glGetActiveUniformsiv;_glGetActiveUniformsiv.sig="viipip";var _glGetUniformBlockIndex=_emscripten_glGetUniformBlockIndex;_glGetUniformBlockIndex.sig="iip";var _glGetActiveUniformBlockiv=_emscripten_glGetActiveUniformBlockiv;_glGetActiveUniformBlockiv.sig="viiip";var _glGetActiveUniformBlockName=_emscripten_glGetActiveUniformBlockName;_glGetActiveUniformBlockName.sig="viiipp";var _glUniformBlockBinding=_emscripten_glUniformBlockBinding;_glUniformBlockBinding.sig="viii";var _glClearBufferiv=_emscripten_glClearBufferiv;_glClearBufferiv.sig="viip";var _glClearBufferuiv=_emscripten_glClearBufferuiv;_glClearBufferuiv.sig="viip";var _glClearBufferfv=_emscripten_glClearBufferfv;_glClearBufferfv.sig="viip";var _glFenceSync=_emscripten_glFenceSync;_glFenceSync.sig="pii";var _glDeleteSync=_emscripten_glDeleteSync;_glDeleteSync.sig="vp";var _glClientWaitSync=_emscripten_glClientWaitSync;_glClientWaitSync.sig="ipij";var _glWaitSync=_emscripten_glWaitSync;_glWaitSync.sig="vpij";var _glGetSynciv=_emscripten_glGetSynciv;_glGetSynciv.sig="vpiipp";var _glIsSync=_emscripten_glIsSync;_glIsSync.sig="ip";var _glGetUniformuiv=_emscripten_glGetUniformuiv;_glGetUniformuiv.sig="viip";var _glGetFragDataLocation=_emscripten_glGetFragDataLocation;_glGetFragDataLocation.sig="iip";var _glGetVertexAttribIuiv=_emscripten_glGetVertexAttribIuiv;_glGetVertexAttribIuiv.sig="viip";var _glUniform1ui=_emscripten_glUniform1ui;_glUniform1ui.sig="vii";var _glUniform2ui=_emscripten_glUniform2ui;_glUniform2ui.sig="viii";var _glUniform3ui=_emscripten_glUniform3ui;_glUniform3ui.sig="viiii";var _glUniform4ui=_emscripten_glUniform4ui;_glUniform4ui.sig="viiiii";var _glUniform1uiv=_emscripten_glUniform1uiv;_glUniform1uiv.sig="viip";var _glUniform2uiv=_emscripten_glUniform2uiv;_glUniform2uiv.sig="viip";var _glUniform3uiv=_emscripten_glUniform3uiv;_glUniform3uiv.sig="viip";var _glUniform4uiv=_emscripten_glUniform4uiv;_glUniform4uiv.sig="viip";var _glUniformMatrix2x3fv=_emscripten_glUniformMatrix2x3fv;_glUniformMatrix2x3fv.sig="viiip";var _glUniformMatrix3x2fv=_emscripten_glUniformMatrix3x2fv;_glUniformMatrix3x2fv.sig="viiip";var _glUniformMatrix2x4fv=_emscripten_glUniformMatrix2x4fv;_glUniformMatrix2x4fv.sig="viiip";var _glUniformMatrix4x2fv=_emscripten_glUniformMatrix4x2fv;_glUniformMatrix4x2fv.sig="viiip";var _glUniformMatrix3x4fv=_emscripten_glUniformMatrix3x4fv;_glUniformMatrix3x4fv.sig="viiip";var _glUniformMatrix4x3fv=_emscripten_glUniformMatrix4x3fv;_glUniformMatrix4x3fv.sig="viiip";var _glVertexAttribI4iv=_emscripten_glVertexAttribI4iv;_glVertexAttribI4iv.sig="vip";var _glVertexAttribI4uiv=_emscripten_glVertexAttribI4uiv;_glVertexAttribI4uiv.sig="vip";var _glProgramParameteri=_emscripten_glProgramParameteri;_glProgramParameteri.sig="viii";var _glGetProgramBinary=_emscripten_glGetProgramBinary;_glGetProgramBinary.sig="viippp";var _glProgramBinary=_emscripten_glProgramBinary;_glProgramBinary.sig="viipi";var _glFramebufferTextureLayer=_emscripten_glFramebufferTextureLayer;_glFramebufferTextureLayer.sig="viiiii";var _glVertexAttribIPointer=_emscripten_glVertexAttribIPointer;_glVertexAttribIPointer.sig="viiiip";var _glDrawRangeElements=_emscripten_glDrawRangeElements;_glDrawRangeElements.sig="viiiiip";var _emscripten_glDrawArraysInstancedBaseInstanceWEBGL=(mode,first,count,instanceCount,baseInstance)=>{GLctx.dibvbi["drawArraysInstancedBaseInstanceWEBGL"](mode,first,count,instanceCount,baseInstance)};_emscripten_glDrawArraysInstancedBaseInstanceWEBGL.sig="viiiii";var _glDrawArraysInstancedBaseInstanceWEBGL=_emscripten_glDrawArraysInstancedBaseInstanceWEBGL;var _emscripten_glDrawArraysInstancedBaseInstance=_glDrawArraysInstancedBaseInstanceWEBGL;_emscripten_glDrawArraysInstancedBaseInstance.sig="viiiii";var _glDrawArraysInstancedBaseInstance=_emscripten_glDrawArraysInstancedBaseInstance;_glDrawArraysInstancedBaseInstance.sig="viiiii";var _emscripten_glDrawArraysInstancedBaseInstanceANGLE=_glDrawArraysInstancedBaseInstanceWEBGL;var _glDrawArraysInstancedBaseInstanceANGLE=_emscripten_glDrawArraysInstancedBaseInstanceANGLE;var _emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL=(mode,count,type,offset,instanceCount,baseVertex,baseinstance)=>{GLctx.dibvbi["drawElementsInstancedBaseVertexBaseInstanceWEBGL"](mode,count,type,offset,instanceCount,baseVertex,baseinstance)};_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL.sig="viiiiiii";var _glDrawElementsInstancedBaseVertexBaseInstanceWEBGL=_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL;var _emscripten_glDrawElementsInstancedBaseVertexBaseInstanceANGLE=_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL;var _glDrawElementsInstancedBaseVertexBaseInstanceANGLE=_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceANGLE;var _emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL=(mode,firsts,counts,instanceCounts,baseInstances,drawCount)=>{GLctx.mdibvbi["multiDrawArraysInstancedBaseInstanceWEBGL"](mode,HEAP32,firsts>>>2,HEAP32,counts>>>2,HEAP32,instanceCounts>>>2,HEAPU32,baseInstances>>>2,drawCount)};_emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL.sig="viiiiii";var _glMultiDrawArraysInstancedBaseInstanceWEBGL=_emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL;var _emscripten_glMultiDrawArraysInstancedBaseInstanceANGLE=_glMultiDrawArraysInstancedBaseInstanceWEBGL;var _glMultiDrawArraysInstancedBaseInstanceANGLE=_emscripten_glMultiDrawArraysInstancedBaseInstanceANGLE;var _emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL=(mode,counts,type,offsets,instanceCounts,baseVertices,baseInstances,drawCount)=>{GLctx.mdibvbi["multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL"](mode,HEAP32,counts>>>2,type,HEAP32,offsets>>>2,HEAP32,instanceCounts>>>2,HEAP32,baseVertices>>>2,HEAPU32,baseInstances>>>2,drawCount)};_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL.sig="viiiiiiii";var _glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL=_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL;var _emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE=_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL;var _glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE=_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE;var _glEndTransformFeedback=_emscripten_glEndTransformFeedback;_glEndTransformFeedback.sig="v";var _glPauseTransformFeedback=_emscripten_glPauseTransformFeedback;_glPauseTransformFeedback.sig="v";var _glResumeTransformFeedback=_emscripten_glResumeTransformFeedback;_glResumeTransformFeedback.sig="v";var _glBeginTransformFeedback=_emscripten_glBeginTransformFeedback;_glBeginTransformFeedback.sig="vi";var _glReadBuffer=_emscripten_glReadBuffer;_glReadBuffer.sig="vi";var _glEndQuery=_emscripten_glEndQuery;_glEndQuery.sig="vi";var _glClearBufferfi=_emscripten_glClearBufferfi;_glClearBufferfi.sig="viifi";var _glVertexAttribI4i=_emscripten_glVertexAttribI4i;_glVertexAttribI4i.sig="viiiii";var _glVertexAttribI4ui=_emscripten_glVertexAttribI4ui;_glVertexAttribI4ui.sig="viiiii";var _glCopyBufferSubData=_emscripten_glCopyBufferSubData;_glCopyBufferSubData.sig="viippp";var _glTexStorage2D=_emscripten_glTexStorage2D;_glTexStorage2D.sig="viiiii";var _glRenderbufferStorageMultisample=_emscripten_glRenderbufferStorageMultisample;_glRenderbufferStorageMultisample.sig="viiiii";var _glTexStorage3D=_emscripten_glTexStorage3D;_glTexStorage3D.sig="viiiiii";var _glCopyTexSubImage3D=_emscripten_glCopyTexSubImage3D;_glCopyTexSubImage3D.sig="viiiiiiiii";var _glBlitFramebuffer=_emscripten_glBlitFramebuffer;_glBlitFramebuffer.sig="viiiiiiiiii";var ALLOC_NORMAL=0;var ALLOC_STACK=1;var allocate=(slab,allocator)=>{var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(!slab.subarray&&!slab.slice){slab=new Uint8Array(slab)}HEAPU8.set(slab,ret>>>0);return ret};var writeStringToMemory=(string,buffer,dontAddNull)=>{warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end>>>0]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end>>>0]=lastChar};var writeAsciiToMemory=(str,buffer,dontAddNull)=>{for(var i=0;i>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>>0]=0};var allocateUTF8=(...args)=>stringToNewUTF8(...args);var allocateUTF8OnStack=(...args)=>stringToUTF8OnStack(...args);var demangle=func=>{demangle.recursionGuard=(demangle.recursionGuard|0)+1;if(demangle.recursionGuard>1)return func;return withStackSave(()=>{try{var s=func;if(s.startsWith("__Z"))s=s.slice(1);var buf=stringToUTF8OnStack(s);var status=stackAlloc(4);var ret=___cxa_demangle(buf,0,0,status);if(HEAP32[status>>>2>>>0]===0&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func})};var stackTrace=()=>{var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return js};var print=out;var printErr=err;var jstoi_s=Number;function getNativeTypeSize(type){switch(type){case"i1":case"i8":case"u8":return 1;case"i16":case"u16":return 2;case"i32":case"u32":return 4;case"i64":case"u64":return 8;case"float":return 4;case"double":return 8;default:{if(type.endsWith("*")){return POINTER_SIZE}if(type[0]==="i"){const bits=Number(type.slice(1));return bits/8}return 0}}}var _emscripten_is_main_browser_thread=()=>!ENVIRONMENT_IS_WORKER;var webSockets=new HandleAllocator;var WS={socketEvent:null,getSocket(socketId){if(!webSockets.has(socketId)){return 0}return webSockets.get(socketId)},getSocketEvent(socketId){this.socketEvent||=_malloc(520);HEAPU32[this.socketEvent>>>2>>>0]=socketId;return this.socketEvent}};function _emscripten_websocket_get_ready_state(socketId,readyState){readyState>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}HEAP16[readyState>>>1>>>0]=socket.readyState;return 0}_emscripten_websocket_get_ready_state.sig="iip";function _emscripten_websocket_get_buffered_amount(socketId,bufferedAmount){bufferedAmount>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}HEAPU32[bufferedAmount>>>2>>>0]=socket.bufferedAmount;return 0}_emscripten_websocket_get_buffered_amount.sig="iip";function _emscripten_websocket_get_extensions(socketId,extensions,extensionsLength){extensions>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}if(!extensions)return-5;stringToUTF8(socket.extensions,extensions,extensionsLength);return 0}_emscripten_websocket_get_extensions.sig="iipi";function _emscripten_websocket_get_extensions_length(socketId,extensionsLength){extensionsLength>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}if(!extensionsLength)return-5;HEAP32[extensionsLength>>>2>>>0]=lengthBytesUTF8(socket.extensions)+1;return 0}_emscripten_websocket_get_extensions_length.sig="iip";function _emscripten_websocket_get_protocol(socketId,protocol,protocolLength){protocol>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}if(!protocol)return-5;stringToUTF8(socket.protocol,protocol,protocolLength);return 0}_emscripten_websocket_get_protocol.sig="iipi";function _emscripten_websocket_get_protocol_length(socketId,protocolLength){protocolLength>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}if(!protocolLength)return-5;HEAP32[protocolLength>>>2>>>0]=lengthBytesUTF8(socket.protocol)+1;return 0}_emscripten_websocket_get_protocol_length.sig="iip";function _emscripten_websocket_get_url(socketId,url,urlLength){url>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}if(!url)return-5;stringToUTF8(socket.url,url,urlLength);return 0}_emscripten_websocket_get_url.sig="iipi";function _emscripten_websocket_get_url_length(socketId,urlLength){urlLength>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}if(!urlLength)return-5;HEAP32[urlLength>>>2>>>0]=lengthBytesUTF8(socket.url)+1;return 0}_emscripten_websocket_get_url_length.sig="iip";function _emscripten_websocket_set_onopen_callback_on_thread(socketId,userData,callbackFunc,thread){userData>>>=0;callbackFunc>>>=0;thread>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onopen=e=>{var eventPtr=WS.getSocketEvent(socketId);getWasmTableEntry(callbackFunc)(0,eventPtr,userData)};return 0}_emscripten_websocket_set_onopen_callback_on_thread.sig="iippp";function _emscripten_websocket_set_onerror_callback_on_thread(socketId,userData,callbackFunc,thread){userData>>>=0;callbackFunc>>>=0;thread>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onerror=e=>{var eventPtr=WS.getSocketEvent(socketId);getWasmTableEntry(callbackFunc)(0,eventPtr,userData)};return 0}_emscripten_websocket_set_onerror_callback_on_thread.sig="iippp";function _emscripten_websocket_set_onclose_callback_on_thread(socketId,userData,callbackFunc,thread){userData>>>=0;callbackFunc>>>=0;thread>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onclose=e=>{var eventPtr=WS.getSocketEvent(socketId);HEAP8[eventPtr+4>>>0]=e.wasClean,HEAP16[eventPtr+6>>>1>>>0]=e.code,stringToUTF8(e.reason,eventPtr+8,512);getWasmTableEntry(callbackFunc)(0,eventPtr,userData)};return 0}_emscripten_websocket_set_onclose_callback_on_thread.sig="iippp";function _emscripten_websocket_set_onmessage_callback_on_thread(socketId,userData,callbackFunc,thread){userData>>>=0;callbackFunc>>>=0;thread>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onmessage=e=>{var isText=typeof e.data=="string";if(isText){var buf=stringToNewUTF8(e.data);var len=lengthBytesUTF8(e.data)+1}else{var len=e.data.byteLength;var buf=_malloc(len);HEAP8.set(new Uint8Array(e.data),buf>>>0)}var eventPtr=WS.getSocketEvent(socketId);HEAPU32[eventPtr+4>>>2>>>0]=buf,HEAP32[eventPtr+8>>>2>>>0]=len,HEAP8[eventPtr+12>>>0]=isText,getWasmTableEntry(callbackFunc)(0,eventPtr,userData);_free(buf)};return 0}_emscripten_websocket_set_onmessage_callback_on_thread.sig="iippp";function _emscripten_websocket_new(createAttributes){createAttributes>>>=0;if(!globalThis.WebSocket){return-1}if(!createAttributes){return-5}var url=UTF8ToString(HEAPU32[createAttributes>>>2>>>0]);var protocols=HEAPU32[createAttributes+4>>>2>>>0];var socket=protocols?new WebSocket(url,UTF8ToString(protocols).split(",")):new WebSocket(url);socket.binaryType="arraybuffer";var socketId=webSockets.allocate(socket);return socketId}_emscripten_websocket_new.sig="ip";function _emscripten_websocket_send_utf8_text(socketId,textData){textData>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}var str=UTF8ToString(textData);socket.send(str);return 0}_emscripten_websocket_send_utf8_text.sig="iip";function _emscripten_websocket_send_binary(socketId,binaryData,dataLength){binaryData>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}socket.send(HEAPU8.subarray(binaryData>>>0,binaryData+dataLength>>>0));return 0}_emscripten_websocket_send_binary.sig="iipi";function _emscripten_websocket_close(socketId,code,reason){reason>>>=0;var socket=WS.getSocket(socketId);if(!socket){return-3}var reasonStr=reason?UTF8ToString(reason):undefined;if(reason)socket.close(code||undefined,UTF8ToString(reason));else if(code)socket.close(code);else socket.close();return 0}_emscripten_websocket_close.sig="iiip";var _emscripten_websocket_delete=socketId=>{var socket=WS.getSocket(socketId);if(!socket){return-3}socket.onopen=socket.onerror=socket.onclose=socket.onmessage=null;webSockets.free(socketId);return 0};_emscripten_websocket_delete.sig="ii";var _emscripten_websocket_is_supported=()=>typeof WebSocket!="undefined";_emscripten_websocket_is_supported.sig="i";var _emscripten_websocket_deinitialize=()=>{for(var i in webSockets.allocated){if(webSockets.has(i)){var socket=webSockets.get(i);socket.close();_emscripten_websocket_delete(i)}}};_emscripten_websocket_deinitialize.sig="v";var writeGLArray=(arr,dst,dstLength,heapType)=>{var len=arr.length;var writeLength=dstLength>>2;for(var i=0;i>>0]=arr[i]}return len};var webglPowerPreferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){target>>>=0;attributes>>>=0;var attr32=attributes>>>2;var powerPreference=HEAP32[attr32+(8>>2)>>>0];var contextAttributes={alpha:!!HEAP8[attributes+0>>>0],depth:!!HEAP8[attributes+1>>>0],stencil:!!HEAP8[attributes+2>>>0],antialias:!!HEAP8[attributes+3>>>0],premultipliedAlpha:!!HEAP8[attributes+4>>>0],preserveDrawingBuffer:!!HEAP8[attributes+5>>>0],powerPreference:webglPowerPreferences[powerPreference],failIfMajorPerformanceCaveat:!!HEAP8[attributes+12>>>0],majorVersion:HEAP32[attr32+(16>>2)>>>0],minorVersion:HEAP32[attr32+(20>>2)>>>0],enableExtensionsByDefault:HEAP8[attributes+24>>>0],explicitSwapControl:HEAP8[attributes+25>>>0],proxyContextToMainThread:HEAP32[attr32+(28>>2)>>>0],renderViaOffscreenBackBuffer:HEAP8[attributes+32>>>0]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}_emscripten_webgl_do_create_context.sig="ppp";var _emscripten_webgl_create_context=_emscripten_webgl_do_create_context;_emscripten_webgl_create_context.sig="ppp";function _emscripten_webgl_do_get_current_context(){return GL.currentContext?GL.currentContext.handle:0}_emscripten_webgl_do_get_current_context.sig="p";var _emscripten_webgl_get_current_context=_emscripten_webgl_do_get_current_context;_emscripten_webgl_get_current_context.sig="p";var _emscripten_webgl_do_commit_frame=()=>{if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.attributes.explicitSwapControl){return-3}return 0};_emscripten_webgl_do_commit_frame.sig="i";var _emscripten_webgl_commit_frame=_emscripten_webgl_do_commit_frame;_emscripten_webgl_commit_frame.sig="i";function _emscripten_webgl_make_context_current(contextHandle){contextHandle>>>=0;var success=GL.makeContextCurrent(contextHandle);return success?0:-5}_emscripten_webgl_make_context_current.sig="ip";function _emscripten_webgl_get_drawing_buffer_size(contextHandle,width,height){contextHandle>>>=0;width>>>=0;height>>>=0;var GLContext=GL.getContext(contextHandle);if(!GLContext||!GLContext.GLctx||!width||!height){return-5}HEAP32[width>>>2>>>0]=GLContext.GLctx.drawingBufferWidth;HEAP32[height>>>2>>>0]=GLContext.GLctx.drawingBufferHeight;return 0}_emscripten_webgl_get_drawing_buffer_size.sig="ippp";function _emscripten_webgl_get_context_attributes(c,a){c>>>=0;a>>>=0;if(!a)return-5;c=GL.contexts[c];if(!c)return-3;var t=c.GLctx?.getContextAttributes();if(!t)return-3;HEAP8[a>>>0]=t.alpha;HEAP8[a+1>>>0]=t.depth;HEAP8[a+2>>>0]=t.stencil;HEAP8[a+3>>>0]=t.antialias;HEAP8[a+4>>>0]=t.premultipliedAlpha;HEAP8[a+5>>>0]=t.preserveDrawingBuffer;var power=t["powerPreference"]&&webglPowerPreferences.indexOf(t["powerPreference"]);HEAP32[a+8>>>2>>>0]=power;HEAP8[a+12>>>0]=t.failIfMajorPerformanceCaveat;HEAP32[a+16>>>2>>>0]=c.version;HEAP32[a+20>>>2>>>0]=0;HEAP8[a+24>>>0]=c.attributes.enableExtensionsByDefault;return 0}_emscripten_webgl_get_context_attributes.sig="ipp";function _emscripten_webgl_destroy_context(contextHandle){contextHandle>>>=0;if(GL.currentContext==contextHandle)GL.currentContext=0;GL.deleteContext(contextHandle)}_emscripten_webgl_destroy_context.sig="ip";function _emscripten_webgl_enable_extension(contextHandle,extension){contextHandle>>>=0;extension>>>=0;var context=GL.getContext(contextHandle);var extString=UTF8ToString(extension);if(extString.startsWith("GL_"))extString=extString.slice(3);if(extString=="ANGLE_instanced_arrays")webgl_enable_ANGLE_instanced_arrays(GLctx);if(extString=="OES_vertex_array_object")webgl_enable_OES_vertex_array_object(GLctx);if(extString=="WEBGL_draw_buffers")webgl_enable_WEBGL_draw_buffers(GLctx);if(extString=="WEBGL_draw_instanced_base_vertex_base_instance")webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);if(extString=="WEBGL_multi_draw_instanced_base_vertex_base_instance")webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(extString=="WEBGL_multi_draw")webgl_enable_WEBGL_multi_draw(GLctx);if(extString=="EXT_polygon_offset_clamp")webgl_enable_EXT_polygon_offset_clamp(GLctx);if(extString=="EXT_clip_control")webgl_enable_EXT_clip_control(GLctx);if(extString=="WEBGL_polygon_mode")webgl_enable_WEBGL_polygon_mode(GLctx);var ext=context.GLctx.getExtension(extString);return!!ext}_emscripten_webgl_enable_extension.sig="ipp";var _emscripten_supports_offscreencanvas=()=>0;_emscripten_supports_offscreencanvas.sig="i";var registerWebGlEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var webGlEventHandlerFunc=e=>{if(getWasmTableEntry(callbackfunc)(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:webGlEventHandlerFunc,useCapture};JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_webglcontextlost_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;registerWebGlEventCallback(target,userData,useCapture,callbackfunc,31,"webglcontextlost",targetThread);return 0}_emscripten_set_webglcontextlost_callback_on_thread.sig="ippipp";function _emscripten_set_webglcontextrestored_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;registerWebGlEventCallback(target,userData,useCapture,callbackfunc,32,"webglcontextrestored",targetThread);return 0}_emscripten_set_webglcontextrestored_callback_on_thread.sig="ippipp";function _emscripten_is_webgl_context_lost(contextHandle){contextHandle>>>=0;return!GL.contexts[contextHandle]||GL.contexts[contextHandle].GLctx.isContextLost()}_emscripten_is_webgl_context_lost.sig="ip";function _emscripten_webgl_get_supported_extensions(){return stringToNewUTF8(GLctx.getSupportedExtensions().join(" "))}_emscripten_webgl_get_supported_extensions.sig="p";var _emscripten_webgl_get_program_parameter_d=(program,param)=>GLctx.getProgramParameter(GL.programs[program],param);_emscripten_webgl_get_program_parameter_d.sig="dii";function _emscripten_webgl_get_program_info_log_utf8(program){return stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs[program]))}_emscripten_webgl_get_program_info_log_utf8.sig="pi";var _emscripten_webgl_get_shader_parameter_d=(shader,param)=>GLctx.getShaderParameter(GL.shaders[shader],param);_emscripten_webgl_get_shader_parameter_d.sig="dii";function _emscripten_webgl_get_shader_info_log_utf8(shader){return stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders[shader]))}_emscripten_webgl_get_shader_info_log_utf8.sig="pi";function _emscripten_webgl_get_shader_source_utf8(shader){return stringToNewUTF8(GLctx.getShaderSource(GL.shaders[shader]))}_emscripten_webgl_get_shader_source_utf8.sig="pi";var _emscripten_webgl_get_vertex_attrib_d=(index,param)=>GLctx.getVertexAttrib(index,param);_emscripten_webgl_get_vertex_attrib_d.sig="dii";var _emscripten_webgl_get_vertex_attrib_o=(index,param)=>{var obj=GLctx.getVertexAttrib(index,param);return obj?.name};_emscripten_webgl_get_vertex_attrib_o.sig="iii";function _emscripten_webgl_get_vertex_attrib_v(index,param,dst,dstLength,dstType){dst>>>=0;return writeGLArray(GLctx.getVertexAttrib(index,param),dst,dstLength,dstType)}_emscripten_webgl_get_vertex_attrib_v.sig="iiipii";var _emscripten_webgl_get_uniform_d=(program,location)=>GLctx.getUniform(GL.programs[program],webglGetUniformLocation(location));_emscripten_webgl_get_uniform_d.sig="dii";function _emscripten_webgl_get_uniform_v(program,location,dst,dstLength,dstType){dst>>>=0;return writeGLArray(GLctx.getUniform(GL.programs[program],webglGetUniformLocation(location)),dst,dstLength,dstType)}_emscripten_webgl_get_uniform_v.sig="iiipii";function _emscripten_webgl_get_parameter_v(param,dst,dstLength,dstType){dst>>>=0;return writeGLArray(GLctx.getParameter(param),dst,dstLength,dstType)}_emscripten_webgl_get_parameter_v.sig="iipii";var _emscripten_webgl_get_parameter_d=param=>GLctx.getParameter(param);_emscripten_webgl_get_parameter_d.sig="di";var _emscripten_webgl_get_parameter_o=param=>{var obj=GLctx.getParameter(param);return obj?.name};_emscripten_webgl_get_parameter_o.sig="ii";function _emscripten_webgl_get_parameter_utf8(param){return stringToNewUTF8(GLctx.getParameter(param))}_emscripten_webgl_get_parameter_utf8.sig="pi";function _emscripten_webgl_get_parameter_i64v(param,dst){dst>>>=0;return writeI53ToI64(dst,GLctx.getParameter(param))}_emscripten_webgl_get_parameter_i64v.sig="vip";var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode(code){EGL.errorCode=code},chooseConfig(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>>2>>>0];if(param==12321){var alphaSize=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>>2>>>0];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>>>0]=1}if(config&&config_size>0){HEAPU32[config>>>2>>>0]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetDisplay(nativeDisplayType){nativeDisplayType>>>=0;EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3}_eglGetDisplay.sig="pp";function _eglInitialize(display,majorVersion,minorVersion){display>>>=0;majorVersion>>>=0;minorVersion>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>>2>>>0]=1}if(minorVersion){HEAP32[minorVersion>>>2>>>0]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}_eglInitialize.sig="ippp";function _eglTerminate(display){display>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}_eglTerminate.sig="ip";function _eglGetConfigs(display,configs,config_size,numConfigs){display>>>=0;configs>>>=0;numConfigs>>>=0;return EGL.chooseConfig(display,0,configs,config_size,numConfigs)}_eglGetConfigs.sig="ippip";function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){display>>>=0;attrib_list>>>=0;configs>>>=0;numConfigs>>>=0;return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}_eglChooseConfig.sig="ipppip";function _eglGetConfigAttrib(display,config,attribute,value){display>>>=0;config>>>=0;value>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>>2>>>0]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>>2>>>0]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>>2>>>0]=8;return 1;case 12323:HEAP32[value>>>2>>>0]=8;return 1;case 12324:HEAP32[value>>>2>>>0]=8;return 1;case 12325:HEAP32[value>>>2>>>0]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>>2>>>0]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>>2>>>0]=12344;return 1;case 12328:HEAP32[value>>>2>>>0]=62002;return 1;case 12329:HEAP32[value>>>2>>>0]=0;return 1;case 12330:HEAP32[value>>>2>>>0]=4096;return 1;case 12331:HEAP32[value>>>2>>>0]=16777216;return 1;case 12332:HEAP32[value>>>2>>>0]=4096;return 1;case 12333:HEAP32[value>>>2>>>0]=0;return 1;case 12334:HEAP32[value>>>2>>>0]=0;return 1;case 12335:HEAP32[value>>>2>>>0]=12344;return 1;case 12337:HEAP32[value>>>2>>>0]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>>2>>>0]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>>2>>>0]=4;return 1;case 12340:HEAP32[value>>>2>>>0]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>>2>>>0]=-1;return 1;case 12345:case 12346:HEAP32[value>>>2>>>0]=0;return 1;case 12347:HEAP32[value>>>2>>>0]=0;return 1;case 12348:HEAP32[value>>>2>>>0]=1;return 1;case 12349:case 12350:HEAP32[value>>>2>>>0]=0;return 1;case 12351:HEAP32[value>>>2>>>0]=12430;return 1;case 12352:HEAP32[value>>>2>>>0]=4;return 1;case 12354:HEAP32[value>>>2>>>0]=0;return 1;default:EGL.setErrorCode(12292);return 0}}_eglGetConfigAttrib.sig="ippip";function _eglCreateWindowSurface(display,config,win,attrib_list){display>>>=0;config>>>=0;attrib_list>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}_eglCreateWindowSurface.sig="pppip";function _eglDestroySurface(display,surface){display>>>=0;surface>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}_eglDestroySurface.sig="ipp";function _eglCreateContext(display,config,hmm,contextAttribs){display>>>=0;config>>>=0;hmm>>>=0;contextAttribs>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>>2>>>0];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>>2>>>0]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Browser.getCanvas(),EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Browser.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}_eglCreateContext.sig="ppppp";function _eglDestroyContext(display,context){display>>>=0;context>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}_eglDestroyContext.sig="ipp";function _eglQuerySurface(display,surface,attribute,value){display>>>=0;surface>>>=0;value>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12328:HEAP32[value>>>2>>>0]=62002;return 1;case 12376:return 1;case 12375:HEAP32[value>>>2>>>0]=Browser.getCanvas().width;return 1;case 12374:HEAP32[value>>>2>>>0]=Browser.getCanvas().height;return 1;case 12432:HEAP32[value>>>2>>>0]=-1;return 1;case 12433:HEAP32[value>>>2>>>0]=-1;return 1;case 12434:HEAP32[value>>>2>>>0]=-1;return 1;case 12422:HEAP32[value>>>2>>>0]=12420;return 1;case 12441:HEAP32[value>>>2>>>0]=12442;return 1;case 12435:HEAP32[value>>>2>>>0]=12437;return 1;case 12416:case 12417:case 12418:case 12419:return 1;default:EGL.setErrorCode(12292);return 0}}_eglQuerySurface.sig="ippip";function _eglQueryContext(display,context,attribute,value){display>>>=0;context>>>=0;value>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12328:HEAP32[value>>>2>>>0]=62002;return 1;case 12439:HEAP32[value>>>2>>>0]=12448;return 1;case 12440:HEAP32[value>>>2>>>0]=EGL.contextAttributes.majorVersion+1;return 1;case 12422:HEAP32[value>>>2>>>0]=12420;return 1;default:EGL.setErrorCode(12292);return 0}}_eglQueryContext.sig="ippip";var _eglGetError=()=>EGL.errorCode;_eglGetError.sig="i";function _eglQueryString(display,name){display>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret}_eglQueryString.sig="ppi";var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};_eglBindAPI.sig="ii";var _eglQueryAPI=()=>{EGL.setErrorCode(12288);return 12448};_eglQueryAPI.sig="i";var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};_eglWaitClient.sig="i";var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};_eglWaitNative.sig="ii";var _eglWaitGL=_eglWaitClient;_eglWaitGL.sig="i";function _eglSwapInterval(display,interval){display>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}_eglSwapInterval.sig="ipi";function _eglMakeCurrent(display,draw,read,context){display>>>=0;draw>>>=0;read>>>=0;context>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}_eglMakeCurrent.sig="ipppp";function _eglGetCurrentContext(){return EGL.currentContext}_eglGetCurrentContext.sig="p";function _eglGetCurrentSurface(readdraw){if(readdraw==12378){return EGL.currentReadSurface}else if(readdraw==12377){return EGL.currentDrawSurface}else{EGL.setErrorCode(12300);return 0}}_eglGetCurrentSurface.sig="pi";function _eglGetCurrentDisplay(){return EGL.currentContext?62e3:0}_eglGetCurrentDisplay.sig="p";function _eglSwapBuffers(dpy,surface){dpy>>>=0;surface>>>=0;if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!GLctx){EGL.setErrorCode(12290)}else if(GLctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}_eglSwapBuffers.sig="ipp";var _eglReleaseThread=()=>{EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.setErrorCode(12288);return 1};_eglReleaseThread.sig="i";var _SDL_GetTicks=()=>Date.now()-SDL.startTime|0;_SDL_GetTicks.sig="i";function _SDL_LockSurface(surf){surf>>>=0;var surfData=SDL.surfaces[surf];surfData.locked++;if(surfData.locked>1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAPU32[surf+20>>>2>>>0]=surfData.buffer}HEAPU32[surf+20>>>2>>>0]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;if(SDL.defaults.discardOnLock){if(!surfData.image){surfData.image=surfData.ctx.createImageData(surfData.width,surfData.height)}if(!SDL.defaults.opaqueFrontBuffer)return}else{surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height)}if(surf==SDL.screen&&SDL.defaults.opaqueFrontBuffer){var data=surfData.image.data;var num=data.length;for(var i=0;i>>0)}}return 0}_SDL_LockSurface.sig="ip";var SDL={defaults:{width:320,height:200,copyOnLock:true,discardOnLock:false,opaqueFrontBuffer:true},version:null,surfaces:{},canvasPool:[],events:[],fonts:[null],audios:[null],rwops:[null],music:{audio:null,volume:1},mixerFrequency:22050,mixerFormat:32784,mixerNumChannels:2,mixerChunkSize:1024,channelMinimumNumber:0,GL:false,glAttributes:{0:3,1:3,2:2,3:0,4:0,5:1,6:16,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:1,16:0,17:0,18:0},keyboardState:null,keyboardMap:{},canRequestFullscreen:false,isRequestingFullscreen:false,textInput:false,unicode:false,ttfContext:null,audio:null,startTime:null,initFlags:0,buttonState:0,modState:0,DOMButtons:[0,0,0],DOMEventToSDLEvent:{},TOUCH_DEFAULT_ID:0,eventHandler:null,eventHandlerContext:null,eventHandlerTemp:0,keyCodes:{16:1249,17:1248,18:1250,20:1081,33:1099,34:1102,35:1101,36:1098,37:1104,38:1106,39:1103,40:1105,44:316,45:1097,46:127,91:1251,93:1125,96:1122,97:1113,98:1114,99:1115,100:1116,101:1117,102:1118,103:1119,104:1120,105:1121,106:1109,107:1111,109:1110,110:1123,111:1108,112:1082,113:1083,114:1084,115:1085,116:1086,117:1087,118:1088,119:1089,120:1090,121:1091,122:1092,123:1093,124:1128,125:1129,126:1130,127:1131,128:1132,129:1133,130:1134,131:1135,132:1136,133:1137,134:1138,135:1139,144:1107,160:94,161:33,162:34,163:35,164:36,165:37,166:38,167:95,168:40,169:41,170:42,171:43,172:124,173:45,174:123,175:125,176:126,181:127,182:129,183:128,188:44,190:46,191:47,192:96,219:91,220:92,221:93,222:39,224:1251},scanCodes:{8:42,9:43,13:40,27:41,32:44,35:204,39:53,44:54,46:55,47:56,48:39,49:30,50:31,51:32,52:33,53:34,54:35,55:36,56:37,57:38,58:203,59:51,61:46,91:47,92:49,93:48,96:52,97:4,98:5,99:6,100:7,101:8,102:9,103:10,104:11,105:12,106:13,107:14,108:15,109:16,110:17,111:18,112:19,113:20,114:21,115:22,116:23,117:24,118:25,119:26,120:27,121:28,122:29,127:76,305:224,308:226,316:70},loadRect(rect){return{x:HEAP32[rect>>>2>>>0],y:HEAP32[rect+4>>>2>>>0],w:HEAP32[rect+8>>>2>>>0],h:HEAP32[rect+12>>>2>>>0]}},updateRect(rect,r){HEAP32[rect>>>2>>>0]=r.x;HEAP32[rect+4>>>2>>>0]=r.y;HEAP32[rect+8>>>2>>>0]=r.w;HEAP32[rect+12>>>2>>>0]=r.h},intersectionOfRects(first,second){var leftX=Math.max(first.x,second.x);var leftY=Math.max(first.y,second.y);var rightX=Math.min(first.x+first.w,second.x+second.w);var rightY=Math.min(first.y+first.h,second.y+second.h);return{x:leftX,y:leftY,w:Math.max(leftX,rightX)-leftX,h:Math.max(leftY,rightY)-leftY}},checkPixelFormat(fmt){},loadColorToCSSRGB(color){var rgba=HEAP32[color>>>2>>>0];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"},loadColorToCSSRGBA(color){var rgba=HEAP32[color>>>2>>>0];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"},translateColorToCSSRGBA:rgba=>"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")",translateRGBAToCSSRGBA:(r,g,b,a)=>"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")",translateRGBAToColor:(r,g,b,a)=>r|g<<8|b<<16|a<<24,makeSurface(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){var is_SDL_HWSURFACE=flags&134217729;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>>2>>>0]=flags;HEAPU32[surf+4>>>2>>>0]=pixelFormat;HEAP32[surf+8>>>2>>>0]=width;HEAP32[surf+12>>>2>>>0]=height;HEAP32[surf+16>>>2>>>0]=width*bpp;HEAPU32[surf+20>>>2>>>0]=buffer;var canvas=Browser.getCanvas();HEAP32[surf+36>>>2>>>0]=0;HEAP32[surf+40>>>2>>>0]=0;HEAP32[surf+44>>>2>>>0]=canvas.width;HEAP32[surf+48>>>2>>>0]=canvas.height;HEAP32[surf+56>>>2>>>0]=1;HEAP32[pixelFormat>>>2>>>0]=-2042224636;HEAP32[pixelFormat+4>>>2>>>0]=0;HEAP8[pixelFormat+8>>>0]=bpp*8;HEAP8[pixelFormat+9>>>0]=bpp;HEAP32[pixelFormat+12>>>2>>>0]=rmask||255;HEAP32[pixelFormat+16>>>2>>>0]=gmask||65280;HEAP32[pixelFormat+20>>>2>>>0]=bmask||16711680;HEAP32[pixelFormat+24>>>2>>>0]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0,alpha:SDL.glAttributes[3]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width,height,canvas,ctx,surf,buffer,pixelFormat,alpha:255,flags,locked:0,usePageCanvas,source,isFlagSet:flag=>flags&flag};return surf},copyIndexedColorData(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var canvas=Browser.getCanvas();var fullWidth=canvas.width;var fullHeight=canvas.height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;if(!surfData.image.data32){surfData.image.data32=new Uint32Array(surfData.image.data.buffer)}var data32=surfData.image.data32;var colors32=surfData.colors32;for(var y=startY;y>>0]]}}},freeSurface(surf){var refcountPointer=surf+56;var refcount=HEAP32[refcountPointer>>>2>>>0];if(refcount>1){HEAP32[refcountPointer>>>2>>>0]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}},blitSurface(src,srcrect,dst,dstrect,scale){var srcData=SDL.surfaces[src];var dstData=SDL.surfaces[dst];var sr,dr;if(srcrect){sr=SDL.loadRect(srcrect)}else{sr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstrect){dr=SDL.loadRect(dstrect)}else{dr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstData.clipRect){var widthScale=!scale||sr.w===0?1:sr.w/dr.w;var heightScale=!scale||sr.h===0?1:sr.h/dr.h;dr=SDL.intersectionOfRects(dstData.clipRect,dr);sr.w=dr.w*widthScale;sr.h=dr.h*heightScale;if(dstrect){SDL.updateRect(dstrect,dr)}}var blitw,blith;if(scale){blitw=dr.w;blith=dr.h}else{blitw=sr.w;blith=sr.h}if(sr.w===0||sr.h===0||blitw===0||blith===0){return 0}var oldAlpha=dstData.ctx.globalAlpha;dstData.ctx.globalAlpha=srcData.alpha/255;dstData.ctx.drawImage(srcData.canvas,sr.x,sr.y,sr.w,sr.h,dr.x,dr.y,blitw,blith);dstData.ctx.globalAlpha=oldAlpha;if(dst!=SDL.screen){warnOnce("WARNING: copying canvas data to memory for compatibility");_SDL_LockSurface(dst);dstData.locked--}return 0},downFingers:{},savedKeydown:null,receiveEvent(event){function unpressAllPressedKeys(){for(var keyCode of Object.values(SDL.keyboardMap)){SDL.events.push({type:"keyup",keyCode})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var touch of event.touches){if(SDL.downFingers[touch.identifier]!=true){SDL.downFingers[touch.identifier]=true;touches.push(touch)}}}else{touches=event.touches}var firstTouch=touches[0];if(firstTouch){if(event.type=="touchstart"){SDL.DOMButtons[0]=1}var mouseEventType;switch(event.type){case"touchstart":mouseEventType="mousedown";break;case"touchmove":mouseEventType="mousemove";break}var mouseEvent={type:mouseEventType,button:0,pageX:firstTouch.clientX,pageY:firstTouch.clientY};SDL.events.push(mouseEvent)}for(var touch of touches){SDL.events.push({type:event.type,touch})}break}case"touchend":{event.preventDefault();for(var touch of event.changedTouches){if(SDL.downFingers[touch.identifier]===true){delete SDL.downFingers[touch.identifier]}}var mouseEvent={type:"mouseup",button:0,pageX:event.changedTouches[0].clientX,pageY:event.changedTouches[0].clientY};SDL.DOMButtons[0]=0;SDL.events.push(mouseEvent);for(var touch of event.changedTouches){SDL.events.push({type:"touchend",touch})}break}case"DOMMouseScroll":case"mousewheel":case"wheel":var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);var button=(delta>0?4:5)-1;SDL.events.push({type:"mousedown",button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"mouseup",button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"wheel",deltaX:0,deltaY:delta});event.preventDefault();break;case"mousemove":if(SDL.DOMButtons[0]===1){SDL.events.push({type:"touchmove",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}if(Browser.pointerLock){if("mozMovementX"in event){event["movementX"]=event["mozMovementX"];event["movementY"]=event["mozMovementY"]}if(event["movementX"]==0&&event["movementY"]==0){event.preventDefault();return}}case"keydown":case"keyup":case"keypress":case"mousedown":case"mouseup":if(event.type!=="keydown"||!SDL.unicode&&!SDL.textInput||(event.key=="Backspace"||event.key=="Tab")){event.preventDefault()}if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullscreen"](true,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(MainLoop.runner){SDL.events.push(event);MainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){err("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return},lookupKeyCodeForEvent(event){var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[code]||(code<128?code:0);if(event.location===2&&code>=(224|1<<10)&&code<=(227|1<<10)){code+=4}}return code},handleEvent(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break}case"keydown":case"keyup":{var down=event.type==="keydown";var code=SDL.lookupKeyCodeForEvent(event);if(!code)return;HEAP8[SDL.keyboardState+code>>>0]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248>>>0]?64:0)|(HEAP8[SDL.keyboardState+1249>>>0]?1:0)|(HEAP8[SDL.keyboardState+1250>>>0]?256:0)|(HEAP8[SDL.keyboardState+1252>>>0]?128:0)|(HEAP8[SDL.keyboardState+1253>>>0]?2:0)|(HEAP8[SDL.keyboardState+1254>>>0]?512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break}case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}return SDL.events.length>0},makeCEvent(event,ptr){if(typeof event=="number"){_memcpy(ptr,event,28);_free(event);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=SDL.lookupKeyCodeForEvent(event);if(!key)return false;var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8>>>0]=down?1:0;HEAP8[ptr+9>>>0]=0;HEAP32[ptr+12>>>2>>>0]=scan;HEAP32[ptr+16>>>2>>>0]=key;HEAP16[ptr+20>>>1>>>0]=SDL.modState;HEAP32[ptr+24>>>2>>>0]=event.keypressCharCode||key;break}case"keypress":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];stringToUTF8(String.fromCharCode(event.charCode),ptr+8,4);break}case"mousedown":case"mouseup":case"mousemove":{if(event.type!="mousemove"){var down=event.type==="mousedown";HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=0;HEAP32[ptr+8>>>2>>>0]=0;HEAP32[ptr+12>>>2>>>0]=0;HEAP8[ptr+16>>>0]=event.button+1;HEAP8[ptr+17>>>0]=down?1:0;HEAP32[ptr+20>>>2>>>0]=Browser.mouseX;HEAP32[ptr+24>>>2>>>0]=Browser.mouseY}else{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=0;HEAP32[ptr+8>>>2>>>0]=0;HEAP32[ptr+12>>>2>>>0]=0;HEAP32[ptr+16>>>2>>>0]=SDL.buttonState;HEAP32[ptr+20>>>2>>>0]=Browser.mouseX;HEAP32[ptr+24>>>2>>>0]=Browser.mouseY;HEAP32[ptr+28>>>2>>>0]=Browser.mouseMovementX;HEAP32[ptr+32>>>2>>>0]=Browser.mouseMovementY}break}case"wheel":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>>2>>>0]=event.deltaX;HEAP32[ptr+20>>>2>>>0]=event.deltaY;break}case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var canvas=Browser.getCanvas();var x=Browser.touches[touch.identifier].x/canvas.width;var y=Browser.touches[touch.identifier].y/canvas.height;var lx=Browser.lastTouches[touch.identifier].x/canvas.width;var ly=Browser.lastTouches[touch.identifier].y/canvas.height;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=_SDL_GetTicks();HEAP64[ptr+8>>>3>>>0]=BigInt(touch.deviceID);HEAP64[ptr+16>>>3>>>0]=BigInt(touch.identifier);HEAPF32[ptr+24>>>2>>>0]=x;HEAPF32[ptr+28>>>2>>>0]=y;HEAPF32[ptr+32>>>2>>>0]=dx;HEAPF32[ptr+36>>>2>>>0]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>>2>>>0]=touch.force}else{HEAPF32[ptr+40>>>2>>>0]=event.type=="touchend"?0:1}break}case"unload":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];break}case"resize":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=event.w;HEAP32[ptr+8>>>2>>>0]=event.h;break}case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>>0]=event.index;HEAP8[ptr+5>>>0]=event.button;HEAP8[ptr+6>>>0]=state;break}case"joystick_axis_motion":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>>0]=event.index;HEAP8[ptr+5>>>0]=event.axis;HEAP32[ptr+8>>>2>>>0]=SDL.joystickAxisValueConversion(event.value);break}case"focus":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=0;HEAP8[ptr+8>>>0]=12;break}case"blur":{HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=0;HEAP8[ptr+8>>>0]=13;break}case"visibilitychange":{var visibilityEventID=event.visible?1:2;HEAP32[ptr>>>2>>>0]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>>2>>>0]=0;HEAP8[ptr+8>>>0]=visibilityEventID;break}default:abort("Unhandled SDL event: "+event.type)}},makeFontString(height,fontName){if(fontName.charAt(0)!="'"&&fontName.charAt(0)!='"'){fontName='"'+fontName+'"'}return height+"px "+fontName+", serif"},estimateTextWidth(fontData,text){var h=fontData.size;var fontString=SDL.makeFontString(h,fontData.name);var tempCtx=SDL.ttfContext;tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;return ret},allocateChannels(num){if(SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i{if(!audio.paused)SDL.playWebAudio(audio)});return}audio.webAudioNode=SDL.audioContext["createBufferSource"]();audio.webAudioNode["buffer"]=webAudio.decodedBuffer;audio.webAudioNode["loop"]=audio.loop;audio.webAudioNode["onended"]=audio["onended"];audio.webAudioPannerNode=SDL.audioContext["createPanner"]();audio.webAudioPannerNode["setPosition"](0,0,-.5);audio.webAudioPannerNode["panningModel"]="equalpower";audio.webAudioGainNode=SDL.audioContext["createGain"]();audio.webAudioGainNode["gain"]["value"]=audio.volume;audio.webAudioNode["connect"](audio.webAudioPannerNode);audio.webAudioPannerNode["connect"](audio.webAudioGainNode);audio.webAudioGainNode["connect"](SDL.audioContext["destination"]);audio.webAudioNode["start"](0,audio.currentPosition);audio.startTime=SDL.audioContext["currentTime"]-audio.currentPosition}catch(e){err(`playWebAudio failed: ${e}`)}},pauseWebAudio(audio){if(!audio)return;if(audio.webAudioNode){try{audio.currentPosition=(SDL.audioContext["currentTime"]-audio.startTime)%audio.resource.webAudio.decodedBuffer.duration;audio.webAudioNode["onended"]=undefined;audio.webAudioNode.stop(0);audio.webAudioNode=undefined}catch(e){err(`pauseWebAudio failed: ${e}`)}}audio.paused=true},openAudioContext(){if(!SDL.audioContext){if(typeof AudioContext!="undefined"){SDL.audioContext=new AudioContext}else if(typeof webkitAudioContext!="undefined"){SDL.audioContext=new webkitAudioContext}}},webAudioAvailable:()=>!!SDL.audioContext,fillWebAudioBufferFromHeap(heapPtr,sizeSamplesPerChannel,dstAudioBuffer){var audio=SDL.audio;var numChannels=audio.channels;for(var c=0;c>>1>>>0]/32768}}else if(audio.format==8){for(var j=0;j>>0];channelData[j]=(v>=0?v-128:v+128)/128}}else if(audio.format==33056){for(var j=0;j>>2>>>0]}}else{abort("Invalid SDL audio format "+audio.format+"!")}}},joystickEventState:1,lastJoystickState:{},joystickNamePool:{},recordJoystickState(joystick,state){var buttons=[];for(var button of state.buttons){buttons.push(SDL.getJoystickButtonState(button))}SDL.lastJoystickState[joystick]={buttons,axes:state.axes.slice(0),timestamp:state.timestamp,index:state.index,id:state.id}},getJoystickButtonState(button){if(typeof button=="object"){return button["pressed"]}return button>0},queryJoysticks(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state=="undefined")return;if(state===null)return;if(typeof state.timestamp!="number"||state.timestamp!=prevState.timestamp||!state.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null}};function _SDL_Linked_Version(){if(SDL.version===null){SDL.version=_malloc(3);HEAP8[SDL.version>>>0]=1;HEAP8[SDL.version+1>>>0]=3;HEAP8[SDL.version+2>>>0]=0}return SDL.version}_SDL_Linked_Version.sig="p";var _SDL_Init=initFlags=>{SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){var keyboardListeningElement=Module["keyboardListeningElement"]||document;keyboardListeningElement.addEventListener("keydown",SDL.receiveEvent);keyboardListeningElement.addEventListener("keyup",SDL.receiveEvent);keyboardListeningElement.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_calloc(65536,1);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0};_SDL_Init.sig="ii";var _SDL_WasInit=flags=>{if(SDL.startTime===null){_SDL_Init(0)}return 1};_SDL_WasInit.sig="ii";function _SDL_GetVideoInfo(){var ret=_calloc(20,1);var canvas=Browser.getCanvas();HEAP32[ret+12>>>2>>>0]=canvas.width;HEAP32[ret+16>>>2>>>0]=canvas.height;return ret}_SDL_GetVideoInfo.sig="p";function _SDL_ListModes(format,flags){format>>>=0;return-1}_SDL_ListModes.sig="ppi";var _SDL_VideoModeOK=(width,height,depth,flags)=>depth;_SDL_VideoModeOK.sig="iiiii";function _SDL_VideoDriverName(buf,max_size){buf>>>=0;if(SDL.startTime===null){return 0}var driverName=[101,109,115,99,114,105,112,116,101,110,95,115,100,108,95,100,114,105,118,101,114];var index=0;var size=driverName.length;if(max_size<=size){size=max_size-1}while(index>>0]=value;index++}HEAP8[buf+index>>>0]=0;return buf}_SDL_VideoDriverName.sig="ppi";var _SDL_AudioDriverName=_SDL_VideoDriverName;_SDL_AudioDriverName.sig="ppi";var _SDL_SetVideoMode=function(width,height,depth,flags){var canvas=Browser.getCanvas();["touchstart","touchend","touchmove","mousedown","mouseup","mousemove","mousewheel","wheel","mouseout","DOMMouseScroll"].forEach(e=>canvas.addEventListener(e,SDL.receiveEvent,true));if(width==0&&height==0){width=canvas.width;height=canvas.height}if(!SDL.addedResizeListener){SDL.addedResizeListener=true;Browser.resizeListeners.push((w,h)=>{if(!SDL.settingVideoMode){SDL.receiveEvent({type:"resize",w,h})}})}SDL.settingVideoMode=true;Browser.setCanvasSize(width,height);SDL.settingVideoMode=false;if(SDL.screen){SDL.freeSurface(SDL.screen)}if(SDL.GL)flags=flags|67108864;SDL.screen=SDL.makeSurface(width,height,flags,true,"screen");return SDL.screen};_SDL_SetVideoMode.sig="piiii";function _SDL_GetVideoSurface(){return SDL.screen}_SDL_GetVideoSurface.sig="p";var _SDL_AudioQuit=()=>{for(var i=0;iout("SDL_VideoQuit called (and ignored)");_SDL_VideoQuit.sig="v";var _SDL_QuitSubSystem=flags=>out("SDL_QuitSubSystem called (and ignored)");_SDL_QuitSubSystem.sig="vi";var _SDL_Quit=()=>{_SDL_AudioQuit();out("SDL_Quit called (and ignored)")};_SDL_Quit.sig="v";function _SDL_UnlockSurface(surf){surf>>>=0;var surfData=SDL.surfaces[surf];if(!surfData.locked||--surfData.locked>0){return}if(surfData.isFlagSet(2097152)){SDL.copyIndexedColorData(surfData)}else if(!surfData.colors){var data=surfData.image.data;var buffer=surfData.buffer;var src=buffer>>>2;var dst=0;var isScreen=surf==SDL.screen;var num;if(typeof CanvasPixelArray!="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>>0];data[dst]=val&255;data[dst+1]=val>>8&255;data[dst+2]=val>>16&255;data[dst+3]=isScreen?255:val>>24&255;src++;dst+=4}}else{var data32=new Uint32Array(data.buffer);if(isScreen&&SDL.defaults.opaqueFrontBuffer){num=data32.length;data32.set(HEAP32.subarray(src>>>0,src+num>>>0));var data8=new Uint8Array(data.buffer);var i=3;var j=i+4*num;if(num%8==0){while(i>>0,src+data32.length>>>0))}}}else{var canvas=Browser.getCanvas();var width=canvas.width;var height=canvas.height;var s=surfData.buffer;var data=surfData.image.data;var colors=surfData.colors;for(var y=0;y>>0]*4;var start=base+x*4;data[start]=colors[val];data[start+1]=colors[val+1];data[start+2]=colors[val+2]}s+=width*3}}surfData.ctx.putImageData(surfData.image,0,0)}_SDL_UnlockSurface.sig="vp";function _SDL_Flip(surf){surf>>>=0}_SDL_Flip.sig="ip";function _SDL_UpdateRect(surf,x,y,w,h){surf>>>=0}_SDL_UpdateRect.sig="vpiiii";function _SDL_UpdateRects(surf,numrects,rects){surf>>>=0;rects>>>=0}_SDL_UpdateRects.sig="vpip";var _SDL_Delay=delay=>{var now=Date.now();while(Date.now()-now>>=0;icon>>>=0;if(title){_emscripten_set_window_title(title)}icon&&=UTF8ToString(icon)}_SDL_WM_SetCaption.sig="vpp";var _SDL_EnableKeyRepeat=(delay,interval)=>{};_SDL_EnableKeyRepeat.sig="iii";function _SDL_GetKeyboardState(numKeys){numKeys>>>=0;if(numKeys){HEAP32[numKeys>>>2>>>0]=65536}return SDL.keyboardState}_SDL_GetKeyboardState.sig="pp";var _SDL_GetKeyState=()=>_SDL_GetKeyboardState(0);function _SDL_GetKeyName(key){var name="";if(key>=97&&key<=122||key>=48&&key<=57){name=String.fromCharCode(key)}var size=lengthBytesUTF8(name)+1;SDL.keyName=_realloc(SDL.keyName,size);stringToUTF8(name,SDL.keyName,size);return SDL.keyName}_SDL_GetKeyName.sig="pi";var _SDL_GetModState=()=>SDL.modState;_SDL_GetModState.sig="i";function _SDL_GetMouseState(x,y){x>>>=0;y>>>=0;if(x)HEAP32[x>>>2>>>0]=Browser.mouseX;if(y)HEAP32[y>>>2>>>0]=Browser.mouseY;return SDL.buttonState}_SDL_GetMouseState.sig="ipp";var _SDL_WarpMouse=(x,y)=>{};_SDL_WarpMouse.sig="vii";var _SDL_ShowCursor=toggle=>{switch(toggle){case 0:if(Browser.isFullscreen){Browser.getCanvas().requestPointerLock();return 0}return 1;case 1:document.exitPointerLock();return 1;case-1:return!Browser.pointerLock;default:err(`SDL_ShowCursor called with unknown toggle parameter value: ${toggle}`);break}};_SDL_ShowCursor.sig="ii";function _SDL_GetError(){SDL.errorMessage||=stringToNewUTF8("unknown SDL-emscripten error");return SDL.errorMessage}_SDL_GetError.sig="p";function _SDL_SetError(fmt,varargs){fmt>>>=0;varargs>>>=0}_SDL_SetError.sig="vpp";function _SDL_CreateRGBSurface(flags,width,height,depth,rmask,gmask,bmask,amask){return SDL.makeSurface(width,height,flags,false,"CreateRGBSurface",rmask,gmask,bmask,amask)}_SDL_CreateRGBSurface.sig="piiiiiiii";function _SDL_CreateRGBSurfaceFrom(pixels,width,height,depth,pitch,rmask,gmask,bmask,amask){pixels>>>=0;var surf=SDL.makeSurface(width,height,0,false,"CreateRGBSurfaceFrom",rmask,gmask,bmask,amask);if(depth!==32){err("TODO: Partially unimplemented SDL_CreateRGBSurfaceFrom called!");return surf}var data=SDL.surfaces[surf];var image=data.ctx.createImageData(width,height);var pitchOfDst=width*4;for(var row=0;row>>0]}}data.ctx.putImageData(image,0,0);return surf}_SDL_CreateRGBSurfaceFrom.sig="ppiiiiiiii";function _SDL_ConvertSurface(surf,format,flags){surf>>>=0;format>>>=0;if(format){SDL.checkPixelFormat(format)}var oldData=SDL.surfaces[surf];var ret=SDL.makeSurface(oldData.width,oldData.height,oldData.flags,false,"copy:"+oldData.source);var newData=SDL.surfaces[ret];newData.ctx.globalCompositeOperation="copy";newData.ctx.drawImage(oldData.canvas,0,0);newData.ctx.globalCompositeOperation=oldData.ctx.globalCompositeOperation;return ret}_SDL_ConvertSurface.sig="pppi";function _SDL_DisplayFormat(surf){surf>>>=0;return _SDL_ConvertSurface(surf,0,0)}_SDL_DisplayFormat.sig="pp";function _SDL_DisplayFormatAlpha(surf){surf>>>=0;return _SDL_ConvertSurface(surf,0,0)}_SDL_DisplayFormatAlpha.sig="pp";function _SDL_FreeSurface(surf){surf>>>=0;if(surf)SDL.freeSurface(surf)}_SDL_FreeSurface.sig="vp";function _SDL_UpperBlit(src,srcrect,dst,dstrect){src>>>=0;srcrect>>>=0;dst>>>=0;dstrect>>>=0;return SDL.blitSurface(src,srcrect,dst,dstrect,false)}_SDL_UpperBlit.sig="ipppp";function _SDL_UpperBlitScaled(src,srcrect,dst,dstrect){src>>>=0;srcrect>>>=0;dst>>>=0;dstrect>>>=0;return SDL.blitSurface(src,srcrect,dst,dstrect,true)}_SDL_UpperBlitScaled.sig="ipppp";var _SDL_LowerBlit=_SDL_UpperBlit;_SDL_LowerBlit.sig="ipppp";var _SDL_LowerBlitScaled=_SDL_UpperBlitScaled;_SDL_LowerBlitScaled.sig="ipppp";function _SDL_GetClipRect(surf,rect){surf>>>=0;rect>>>=0;var surfData=SDL.surfaces[surf];var r=surfData.clipRect||{x:0,y:0,w:surfData.width,h:surfData.height};SDL.updateRect(rect,r)}_SDL_GetClipRect.sig="vpp";function _SDL_SetClipRect(surf,rect){surf>>>=0;rect>>>=0;var surfData=SDL.surfaces[surf];if(rect){surfData.clipRect=SDL.intersectionOfRects({x:0,y:0,w:surfData.width,h:surfData.height},SDL.loadRect(rect))}else{delete surfData.clipRect}}_SDL_SetClipRect.sig="ipp";function _SDL_FillRect(surf,rect,color){surf>>>=0;rect>>>=0;var surfData=SDL.surfaces[surf];if(surfData.isFlagSet(2097152)){color=surfData.colors32[color]}var r=rect?SDL.loadRect(rect):{x:0,y:0,w:surfData.width,h:surfData.height};if(surfData.clipRect){r=SDL.intersectionOfRects(surfData.clipRect,r);if(rect){SDL.updateRect(rect,r)}}surfData.ctx.save();surfData.ctx.fillStyle=SDL.translateColorToCSSRGBA(color);surfData.ctx.fillRect(r.x,r.y,r.w,r.h);surfData.ctx.restore();return 0}_SDL_FillRect.sig="ippi";function _zoomSurface(src,x,y,smooth){src>>>=0;var srcData=SDL.surfaces[src];var w=srcData.width*x;var h=srcData.height*y;var ret=SDL.makeSurface(Math.abs(w),Math.abs(h),srcData.flags,false,"zoomSurface");var dstData=SDL.surfaces[ret];if(x>=0&&y>=0){dstData.ctx.drawImage(srcData.canvas,0,0,w,h)}else{dstData.ctx.save();dstData.ctx.scale(x<0?-1:1,y<0?-1:1);dstData.ctx.drawImage(srcData.canvas,w<0?w:0,h<0?h:0,Math.abs(w),Math.abs(h));dstData.ctx.restore()}return ret}_zoomSurface.sig="ppddi";function _rotozoomSurface(src,angle,zoom,smooth){src>>>=0;if(angle%360===0){return _zoomSurface(src,zoom,zoom,smooth)}var srcData=SDL.surfaces[src];var w=srcData.width*zoom;var h=srcData.height*zoom;var diagonal=Math.ceil(Math.sqrt(Math.pow(w,2)+Math.pow(h,2)));var ret=SDL.makeSurface(diagonal,diagonal,srcData.flags,false,"rotozoomSurface");var dstData=SDL.surfaces[ret];dstData.ctx.translate(diagonal/2,diagonal/2);dstData.ctx.rotate(-angle*Math.PI/180);dstData.ctx.drawImage(srcData.canvas,-w/2,-h/2,w,h);return ret}_rotozoomSurface.sig="ppddi";function _SDL_SetAlpha(surf,flag,alpha){surf>>>=0;var surfData=SDL.surfaces[surf];surfData.alpha=alpha;if(!(flag&65536)){surfData.alpha=255}}_SDL_SetAlpha.sig="ipii";function _SDL_SetColorKey(surf,flag,key){surf>>>=0;warnOnce("SDL_SetColorKey is a no-op for performance reasons");return 0}_SDL_SetColorKey.sig="ipii";function _SDL_PollEvent(ptr){ptr>>>=0;return SDL.pollEvent(ptr)}_SDL_PollEvent.sig="ip";function _SDL_PushEvent(ptr){ptr>>>=0;var copy=_malloc(28);_memcpy(copy,ptr,28);SDL.events.push(copy);return 0}_SDL_PushEvent.sig="ip";function _SDL_PeepEvents(events,requestedEventCount,action,from,to){events>>>=0;switch(action){case 2:{var index=0;var retrievedEventCount=0;while(indexSDL.events.forEach(SDL.handleEvent);_SDL_PumpEvents.sig="v";function _emscripten_SDL_SetEventHandler(handler,userdata){handler>>>=0;userdata>>>=0;SDL.eventHandler=handler;SDL.eventHandlerContext=userdata;SDL.eventHandlerTemp||=_malloc(28)}_emscripten_SDL_SetEventHandler.sig="vpp";function _SDL_SetColors(surf,colors,firstColor,nColors){surf>>>=0;colors>>>=0;var surfData=SDL.surfaces[surf];if(!surfData.colors){var buffer=new ArrayBuffer(256*4);surfData.colors=new Uint8Array(buffer);surfData.colors32=new Uint32Array(buffer)}for(var i=0;i>>0];surfData.colors[index+1]=HEAPU8[colors+(i*4+1)>>>0];surfData.colors[index+2]=HEAPU8[colors+(i*4+2)>>>0];surfData.colors[index+3]=255}return 1}_SDL_SetColors.sig="ippii";function _SDL_SetPalette(surf,flags,colors,firstColor,nColors){surf>>>=0;colors>>>=0;return _SDL_SetColors(surf,colors,firstColor,nColors)}_SDL_SetPalette.sig="ipipii";function _SDL_MapRGB(fmt,r,g,b){fmt>>>=0;SDL.checkPixelFormat(fmt);return r&255|(g&255)<<8|(b&255)<<16|4278190080}_SDL_MapRGB.sig="ipiii";function _SDL_MapRGBA(fmt,r,g,b,a){fmt>>>=0;SDL.checkPixelFormat(fmt);return r&255|(g&255)<<8|(b&255)<<16|(a&255)<<24}_SDL_MapRGBA.sig="ipiiii";function _SDL_GetRGB(pixel,fmt,r,g,b){fmt>>>=0;r>>>=0;g>>>=0;b>>>=0;SDL.checkPixelFormat(fmt);if(r){HEAP8[r>>>0]=pixel&255}if(g){HEAP8[g>>>0]=pixel>>8&255}if(b){HEAP8[b>>>0]=pixel>>16&255}}_SDL_GetRGB.sig="vipppp";function _SDL_GetRGBA(pixel,fmt,r,g,b,a){fmt>>>=0;r>>>=0;g>>>=0;b>>>=0;a>>>=0;SDL.checkPixelFormat(fmt);if(r){HEAP8[r>>>0]=pixel&255}if(g){HEAP8[g>>>0]=pixel>>8&255}if(b){HEAP8[b>>>0]=pixel>>16&255}if(a){HEAP8[a>>>0]=pixel>>24&255}}_SDL_GetRGBA.sig="vippppp";var _SDL_GetAppState=()=>{var state=0;if(Browser.pointerLock){state|=1}if(document.hasFocus()){state|=2}state|=4;return state};_SDL_GetAppState.sig="i";var _SDL_WM_GrabInput=()=>{};_SDL_WM_GrabInput.sig="ii";function _SDL_WM_ToggleFullScreen(surf){surf>>>=0;if(Browser.exitFullscreen()){return 1}if(!SDL.canRequestFullscreen){return 0}SDL.isRequestingFullscreen=true;return 1}_SDL_WM_ToggleFullScreen.sig="ip";var _IMG_Init=flags=>flags;_IMG_Init.sig="ii";function _SDL_FreeRW(rwopsID){rwopsID>>>=0;SDL.rwops[rwopsID]=null;while(SDL.rwops.length>0&&SDL.rwops[SDL.rwops.length-1]===null){SDL.rwops.pop()}}_SDL_FreeRW.sig="vp";var _IMG_Load_RW=function(rwopsID,freeSrc){rwopsID>>>=0;var sp=stackSave();try{var cleanup=()=>{stackRestore(sp);if(rwops&&freeSrc)_SDL_FreeRW(rwopsID)};var addCleanup=func=>{var old=cleanup;cleanup=()=>{old();func()}};var callStbImage=(func,params)=>{var x=stackAlloc(4);var y=stackAlloc(4);var comp=stackAlloc(4);var data=Module["_"+func](...params,x,y,comp,0);if(!data)return null;addCleanup(()=>Module["_stbi_image_free"](data));return{rawData:true,data,width:HEAP32[x>>>2>>>0],height:HEAP32[y>>>2>>>0],size:HEAP32[x>>>2>>>0]*HEAP32[y>>>2>>>0]*HEAP32[comp>>>2>>>0],bpp:HEAP32[comp>>>2>>>0]}};var rwops=SDL.rwops[rwopsID];if(rwops===undefined){return 0}var raw;var filename=rwops.filename;if(filename===undefined){warnOnce("Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins");return 0}if(!raw){filename=PATH_FS.resolve(filename);raw=Browser.preloadedImages[filename];if(!raw){if(raw===null)err("Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!");warnOnce("Cannot find preloaded image "+filename);warnOnce("Cannot find preloaded image "+filename+". Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins");return 0}else if(Module["freePreloadedMediaOnUse"]){Browser.preloadedImages[filename]=null}}var surf=SDL.makeSurface(raw.width,raw.height,0,false,"load:"+filename);var surfData=SDL.surfaces[surf];surfData.ctx.globalCompositeOperation="copy";if(!raw.rawData){surfData.ctx.drawImage(raw,0,0,raw.width,raw.height,0,0,raw.width,raw.height)}else{var imageData=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);if(raw.bpp==4){imageData.data.set(HEAPU8.subarray(raw.data>>>0,raw.data+raw.size>>>0))}else if(raw.bpp==3){var pixels=raw.size/3;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>>0];data[destPtr++]=HEAPU8[sourcePtr++>>>0];data[destPtr++]=HEAPU8[sourcePtr++>>>0];data[destPtr++]=255}}else if(raw.bpp==2){var pixels=raw.size;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>>0];var alpha=HEAPU8[sourcePtr++>>>0];data[destPtr++]=gray;data[destPtr++]=gray;data[destPtr++]=gray;data[destPtr++]=alpha}}else if(raw.bpp==1){var pixels=raw.size;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>>0];data[destPtr++]=value;data[destPtr++]=value;data[destPtr++]=value;data[destPtr++]=255}}else{err(`cannot handle bpp ${raw.bpp}`);return 0}surfData.ctx.putImageData(imageData,0,0)}surfData.ctx.globalCompositeOperation="source-over";_SDL_LockSurface(surf);surfData.locked--;if(SDL.GL){surfData.canvas=surfData.ctx=null}return surf}finally{cleanup()}};_IMG_Load_RW.sig="ppi";var _SDL_LoadBMP_RW=_IMG_Load_RW;_SDL_LoadBMP_RW.sig="ppi";function _SDL_RWFromFile(_name,mode){_name>>>=0;mode>>>=0;var id=SDL.rwops.length;var filename=UTF8ToString(_name);SDL.rwops.push({filename,mimetype:Browser.getMimetype(filename)});return id}_SDL_RWFromFile.sig="ppp";function _IMG_Load(filename){filename>>>=0;var rwops=_SDL_RWFromFile(filename,0);var result=_IMG_Load_RW(rwops,1);return result}_IMG_Load.sig="pp";var _IMG_Quit=()=>out("IMG_Quit called (and ignored)");_IMG_Quit.sig="v";function _SDL_OpenAudio(desired,obtained){desired>>>=0;obtained>>>=0;try{SDL.audio={freq:HEAPU32[desired>>>2>>>0],format:HEAPU16[desired+4>>>1>>>0],channels:HEAPU8[desired+6>>>0],samples:HEAPU16[desired+8>>>1>>>0],callback:HEAPU32[desired+16>>>2>>>0],userdata:HEAPU32[desired+20>>>2>>>0],paused:true,timer:null};if(SDL.audio.format==8){SDL.audio.silence=128}else if(SDL.audio.format==32784){SDL.audio.silence=0}else if(SDL.audio.format==33056){SDL.audio.silence=0}else{abort("Invalid SDL audio format "+SDL.audio.format+"!")}if(SDL.audio.freq<=0){abort("Unsupported sound frequency "+SDL.audio.freq+"!")}else if(SDL.audio.freq<=22050){SDL.audio.freq=22050}else if(SDL.audio.freq<=32e3){SDL.audio.freq=32e3}else if(SDL.audio.freq<=44100){SDL.audio.freq=44100}else if(SDL.audio.freq<=48e3){SDL.audio.freq=48e3}else if(SDL.audio.freq<=96e3){SDL.audio.freq=96e3}else{abort(`Unsupported sound frequency ${SDL.audio.freq}!`)}if(SDL.audio.channels==0){SDL.audio.channels=1}else if(SDL.audio.channels<0||SDL.audio.channels>32){abort(`Unsupported number of audio channels for SDL audio: ${SDL.audio.channels}!`)}else if(SDL.audio.channels!=1&&SDL.audio.channels!=2){out(`Warning: Using untested number of audio channels ${SDL.audio.channels}`)}if(SDL.audio.samples<128||SDL.audio.samples>524288){abort(`Unsupported audio callback buffer size ${SDL.audio.samples}!`)}else if((SDL.audio.samples&SDL.audio.samples-1)!=0){abort(`Audio callback buffer size ${SDL.audio.samples} must be a power-of-two!`)}var totalSamples=SDL.audio.samples*SDL.audio.channels;if(SDL.audio.format==8){SDL.audio.bytesPerSample=1}else if(SDL.audio.format==32784){SDL.audio.bytesPerSample=2}else if(SDL.audio.format==33056){SDL.audio.bytesPerSample=4}else{abort(`Invalid SDL audio format ${SDL.audio.format}!`)}SDL.audio.bufferSize=totalSamples*SDL.audio.bytesPerSample;SDL.audio.bufferDurationSecs=SDL.audio.bufferSize/SDL.audio.bytesPerSample/SDL.audio.channels/SDL.audio.freq;SDL.audio.bufferingDelay=50/1e3;SDL.audio.buffer=_malloc(SDL.audio.bufferSize);SDL.audio.numSimultaneouslyQueuedBuffers=Module["SDL_numSimultaneouslyQueuedBuffers"]||5;SDL.audio.queueNewAudioData=()=>{if(!SDL.audio)return;for(var i=0;i=SDL.audio.bufferingDelay+SDL.audio.bufferDurationSecs*SDL.audio.numSimultaneouslyQueuedBuffers)return;getWasmTableEntry(SDL.audio.callback)(SDL.audio.userdata,SDL.audio.buffer,SDL.audio.bufferSize);SDL.audio.pushAudio(SDL.audio.buffer,SDL.audio.bufferSize)}};SDL.audio.caller=()=>{if(!SDL.audio)return;--SDL.audio.numAudioTimersPending;SDL.audio.queueNewAudioData();var secsUntilNextPlayStart=SDL.audio.nextPlayTime-SDL.audioContext["currentTime"];var preemptBufferFeedSecs=SDL.audio.bufferDurationSecs/2;if(SDL.audio.numAudioTimersPending{try{if(SDL.audio.paused)return;var sizeSamples=sizeBytes/SDL.audio.bytesPerSample;var sizeSamplesPerChannel=sizeSamples/SDL.audio.channels;if(sizeSamplesPerChannel!=SDL.audio.samples){abort("Received mismatching audio buffer size!")}var source=SDL.audioContext["createBufferSource"]();var soundBuffer=SDL.audioContext["createBuffer"](SDL.audio.channels,sizeSamplesPerChannel,SDL.audio.freq);source["connect"](SDL.audioContext["destination"]);SDL.fillWebAudioBufferFromHeap(ptr,sizeSamplesPerChannel,soundBuffer);source["buffer"]=soundBuffer;var curtime=SDL.audioContext["currentTime"];var playtime=Math.max(curtime+SDL.audio.bufferingDelay,SDL.audio.nextPlayTime);if(typeof source["start"]!="undefined"){source["start"](playtime)}else if(typeof source["noteOn"]!="undefined"){source["noteOn"](playtime)}SDL.audio.nextPlayTime=playtime+SDL.audio.bufferDurationSecs}catch(e){err(`Web Audio API error playing back audio: ${e.toString()}`)}};if(obtained){HEAP32[obtained>>>2>>>0]=SDL.audio.freq;HEAP16[obtained+4>>>1>>>0]=SDL.audio.format;HEAP8[obtained+6>>>0]=SDL.audio.channels;HEAP8[obtained+7>>>0]=SDL.audio.silence;HEAP16[obtained+8>>>1>>>0]=SDL.audio.samples;HEAPU32[obtained+16>>>2>>>0]=SDL.audio.callback;HEAPU32[obtained+20>>>2>>>0]=SDL.audio.userdata}SDL.allocateChannels(32)}catch(e){err(`Initializing SDL audio threw an exception: "${e.toString()}"! Continuing without audio`);SDL.audio=null;SDL.allocateChannels(0);if(obtained){HEAP32[obtained>>>2>>>0]=0;HEAP16[obtained+4>>>1>>>0]=0;HEAP8[obtained+6>>>0]=0;HEAP8[obtained+7>>>0]=0;HEAP16[obtained+8>>>1>>>0]=0;HEAPU32[obtained+16>>>2>>>0]=0;HEAPU32[obtained+20>>>2>>>0]=0}}if(!SDL.audio){return-1}return 0}_SDL_OpenAudio.sig="ipp";var _SDL_PauseAudio=pauseOn=>{if(!SDL.audio){return}if(pauseOn){if(SDL.audio.timer!==undefined){clearTimeout(SDL.audio.timer);SDL.audio.numAudioTimersPending=0;SDL.audio.timer=undefined}}else if(!SDL.audio.timer){SDL.audio.numAudioTimersPending=1;SDL.audio.timer=safeSetTimeout(SDL.audio.caller,1)}SDL.audio.paused=pauseOn};_SDL_PauseAudio.sig="vi";var _SDL_CloseAudio=()=>{if(SDL.audio){if(SDL.audio.callbackRemover){SDL.audio.callbackRemover();SDL.audio.callbackRemover=null}_SDL_PauseAudio(1);_free(SDL.audio.buffer);SDL.audio=null;SDL.allocateChannels(0)}};_SDL_CloseAudio.sig="v";var _SDL_LockAudio=()=>{};_SDL_LockAudio.sig="v";var _SDL_UnlockAudio=()=>{};_SDL_UnlockAudio.sig="v";function _SDL_CreateMutex(){return 0}_SDL_CreateMutex.sig="p";function _SDL_mutexP(mutex){mutex>>>=0;return 0}_SDL_mutexP.sig="ip";function _SDL_mutexV(mutex){mutex>>>=0;return 0}_SDL_mutexV.sig="ip";function _SDL_DestroyMutex(mutex){mutex>>>=0}_SDL_DestroyMutex.sig="vp";function _SDL_CreateCond(){return 0}_SDL_CreateCond.sig="p";function _SDL_CondSignal(cond){cond>>>=0}_SDL_CondSignal.sig="ip";function _SDL_CondWait(cond,mutex){cond>>>=0;mutex>>>=0}_SDL_CondWait.sig="ipp";function _SDL_DestroyCond(cond){cond>>>=0}_SDL_DestroyCond.sig="vp";var _SDL_StartTextInput=()=>{SDL.textInput=true};_SDL_StartTextInput.sig="v";var _SDL_StopTextInput=()=>{SDL.textInput=false};_SDL_StopTextInput.sig="v";var _Mix_Init=flags=>{if(!flags)return 0;return 8};_Mix_Init.sig="ii";var _Mix_Quit=()=>{};_Mix_Quit.sig="v";var _Mix_OpenAudio=(frequency,format,channels,chunksize)=>{SDL.openAudioContext();autoResumeAudioContext(SDL.audioContext);SDL.allocateChannels(32);SDL.mixerFrequency=frequency;SDL.mixerFormat=format;SDL.mixerNumChannels=channels;SDL.mixerChunkSize=chunksize;return 0};_Mix_OpenAudio.sig="iiiii";var _Mix_CloseAudio=_SDL_CloseAudio;_Mix_CloseAudio.sig="v";var _Mix_AllocateChannels=num=>{SDL.allocateChannels(num);return num};_Mix_AllocateChannels.sig="ii";function _Mix_ChannelFinished(func){func>>>=0;SDL.channelFinished=func}_Mix_ChannelFinished.sig="vp";var _Mix_Volume=(channel,volume)=>{if(channel==-1){for(var i=0;i{left/=255;right/=255;SDL.setPannerPosition(SDL.channels[channel],right-left,0,.1);return 1};_Mix_SetPanning.sig="iiii";function _Mix_LoadWAV_RW(rwopsID,freesrc){rwopsID>>>=0;var rwops=SDL.rwops[rwopsID];if(rwops===undefined)return 0;var filename="";var audio;var webAudio;var bytes;if(rwops.filename!==undefined){filename=PATH_FS.resolve(rwops.filename);var raw=Browser.preloadedAudios[filename];if(!raw){if(raw===null)err("Trying to reuse preloaded audio, but freePreloadedMediaOnUse is set!");if(!Module["noAudioDecoding"])warnOnce("Cannot find preloaded audio "+filename);try{bytes=FS.readFile(filename)}catch(e){err(`Couldn't find file for: ${filename}`);return 0}}if(Module["freePreloadedMediaOnUse"]){Browser.preloadedAudios[filename]=null}audio=raw}else if(rwops.bytes!==undefined){if(SDL.webAudioAvailable()){bytes=HEAPU8.buffer.slice(rwops.bytes,rwops.bytes+rwops.count)}else{bytes=HEAPU8.subarray(rwops.bytes>>>0,rwops.bytes+rwops.count>>>0)}}else{return 0}var arrayBuffer=bytes?bytes.buffer||bytes:bytes;var canPlayWithWebAudio=Module["SDL_canPlayWithWebAudio"]===undefined||Module["SDL_canPlayWithWebAudio"](filename,arrayBuffer);if(bytes!==undefined&&SDL.webAudioAvailable()&&canPlayWithWebAudio){audio=undefined;webAudio={onDecodeComplete:[]};SDL.audioContext["decodeAudioData"](arrayBuffer,data=>{webAudio.decodedBuffer=data;webAudio.onDecodeComplete.forEach(e=>e());delete webAudio.onDecodeComplete})}else if(audio===undefined&&bytes){var blob=new Blob([bytes],{type:rwops.mimetype});var url=URL.createObjectURL(blob);audio=new Audio;audio.src=url;audio.mozAudioChannelType="content"}var id=SDL.audios.length;SDL.audios.push({source:filename,audio,webAudio});return id}_Mix_LoadWAV_RW.sig="ppi";function _Mix_LoadWAV(filename){filename>>>=0;var rwops=_SDL_RWFromFile(filename,0);var result=_Mix_LoadWAV_RW(rwops,0);_SDL_FreeRW(rwops);return result}_Mix_LoadWAV.sig="pp";function _Mix_QuickLoad_RAW(mem,len){mem>>>=0;var audio;var webAudio;var numSamples=len>>1;var buffer=new Float32Array(numSamples);for(var i=0;i>>1>>>0]/32768}if(SDL.webAudioAvailable()){webAudio={decodedBuffer:buffer}}else{audio=new Audio;audio.mozAudioChannelType="content";audio.numChannels=SDL.mixerNumChannels;audio.frequency=SDL.mixerFrequency}var id=SDL.audios.length;SDL.audios.push({source:"",audio,webAudio,buffer});return id}_Mix_QuickLoad_RAW.sig="ppi";function _Mix_FreeChunk(id){id>>>=0;SDL.audios[id]=null}_Mix_FreeChunk.sig="vp";var _Mix_ReserveChannels=num=>{SDL.channelMinimumNumber=num};_Mix_ReserveChannels.sig="ii";var _Mix_HaltChannel=channel=>{function halt(channel){var info=SDL.channels[channel];if(info.audio){info.audio.pause();info.audio=null}if(SDL.channelFinished){getWasmTableEntry(SDL.channelFinished)(channel)}}if(channel!=-1){halt(channel)}else{for(var i=0;i>>=0;var info=SDL.audios[id];if(!info)return-1;if(!info.audio&&!info.webAudio)return-1;if(channel==-1){for(var i=SDL.channelMinimumNumber;i0;_Mix_FadingChannel.sig="ii";var _Mix_HaltMusic=()=>{var audio=SDL.music.audio;if(audio){audio.src=audio.src;audio.currentPosition=0;audio.pause()}SDL.music.audio=null;if(SDL.hookMusicFinished){getWasmTableEntry(SDL.hookMusicFinished)()}return 0};_Mix_HaltMusic.sig="i";function _Mix_HookMusicFinished(func){func>>>=0;SDL.hookMusicFinished=func;if(SDL.music.audio){SDL.music.audio["onended"]=_Mix_HaltMusic}}_Mix_HookMusicFinished.sig="vp";var _Mix_VolumeMusic=volume=>SDL.setGetVolume(SDL.music,volume);_Mix_VolumeMusic.sig="ii";function _Mix_LoadMUS_RW(filename){filename>>>=0;return _Mix_LoadWAV_RW(filename,0)}_Mix_LoadMUS_RW.sig="pp";function _Mix_LoadMUS(filename){filename>>>=0;var rwops=_SDL_RWFromFile(filename,0);var result=_Mix_LoadMUS_RW(rwops);_SDL_FreeRW(rwops);return result}_Mix_LoadMUS.sig="pp";var _Mix_FreeMusic=_Mix_FreeChunk;_Mix_FreeMusic.sig="vp";function _Mix_PlayMusic(id,loops){id>>>=0;if(SDL.music.audio){if(!SDL.music.audio.paused)err(`Music is already playing. ${SDL.music.source}`);SDL.music.audio.pause()}var info=SDL.audios[id];var audio;if(info.webAudio){audio={resource:info,paused:false,currentPosition:0,play(){SDL.playWebAudio(this)},pause(){SDL.pauseWebAudio(this)}}}else if(info.audio){audio=info.audio}audio["onended"]=function(){if(SDL.music.audio===this||SDL.music.audio?.webAudioNode===this){_Mix_HaltMusic()}};audio.loop=loops!=0&&loops!=1;audio.volume=SDL.music.volume;SDL.music.audio=audio;audio.play();return 0}_Mix_PlayMusic.sig="ipi";var _Mix_PauseMusic=()=>{var audio=SDL.music.audio;audio?.pause()};_Mix_PauseMusic.sig="v";var _Mix_ResumeMusic=()=>{var audio=SDL.music.audio;audio?.play()};_Mix_ResumeMusic.sig="v";function _Mix_FadeInMusicPos(a1,a2,a3,a4){a1>>>=0;return _Mix_PlayMusic(a1,a2)}_Mix_FadeInMusicPos.sig="ipiid";var _Mix_FadeOutMusic=a1=>_Mix_HaltMusic();_Mix_FadeOutMusic.sig="ii";var _Mix_PlayingMusic=()=>SDL.music.audio&&!SDL.music.audio.paused;_Mix_PlayingMusic.sig="i";var _Mix_Playing=channel=>{if(channel===-1){var count=0;for(var i=0;i{if(channel===-1){for(var i=0;i{if(channel===-1){var pausedCount=0;for(var i=0;iSDL.music.audio?.paused?1:0;_Mix_PausedMusic.sig="i";var _Mix_Resume=channel=>{if(channel===-1){for(var i=0;i{try{var offscreenCanvas=new OffscreenCanvas(0,0);SDL.ttfContext=offscreenCanvas.getContext("2d");if(!SDL.ttfContext.measureText){throw 1}}catch(ex){var canvas=document.createElement("canvas");SDL.ttfContext=canvas.getContext("2d")}return 0};_TTF_Init.sig="i";function _TTF_OpenFont(name,size){name>>>=0;name=PATH.normalize(UTF8ToString(name));var id=SDL.fonts.length;SDL.fonts.push({name,size});return id}_TTF_OpenFont.sig="ppi";function _TTF_CloseFont(font){font>>>=0;SDL.fonts[font]=null}_TTF_CloseFont.sig="vp";function _TTF_RenderText_Solid(font,text,color){font>>>=0;text>>>=0;color>>>=0;text=UTF8ToString(text)||" ";var fontData=SDL.fonts[font];var w=SDL.estimateTextWidth(fontData,text);var h=fontData.size;color=SDL.loadColorToCSSRGB(color);var fontString=SDL.makeFontString(h,fontData.name);var surf=SDL.makeSurface(w,h,0,false,"text:"+text);var surfData=SDL.surfaces[surf];surfData.ctx.save();surfData.ctx.fillStyle=color;surfData.ctx.font=fontString;surfData.ctx.textBaseline="bottom";surfData.ctx.fillText(text,0,h|0);surfData.ctx.restore();return surf}_TTF_RenderText_Solid.sig="pppp";var _TTF_RenderText_Blended=_TTF_RenderText_Solid;_TTF_RenderText_Blended.sig="pppp";function _TTF_RenderText_Shaded(a1,a2,a3,a4){a1>>>=0;a2>>>=0;a3>>>=0;a4>>>=0;return _TTF_RenderText_Solid(a1,a2,a3)}_TTF_RenderText_Shaded.sig="ppppp";var _TTF_RenderUTF8_Solid=_TTF_RenderText_Solid;_TTF_RenderUTF8_Solid.sig="pppp";function _TTF_SizeText(font,text,w,h){font>>>=0;text>>>=0;w>>>=0;h>>>=0;var fontData=SDL.fonts[font];if(w){HEAP32[w>>>2>>>0]=SDL.estimateTextWidth(fontData,UTF8ToString(text))}if(h){HEAP32[h>>>2>>>0]=fontData.size}return 0}_TTF_SizeText.sig="ipppp";var _TTF_SizeUTF8=_TTF_SizeText;_TTF_SizeUTF8.sig="ipppp";function _TTF_GlyphMetrics(font,ch,minx,maxx,miny,maxy,advance){font>>>=0;minx>>>=0;maxx>>>=0;miny>>>=0;maxy>>>=0;advance>>>=0;var fontData=SDL.fonts[font];var width=SDL.estimateTextWidth(fontData,String.fromCharCode(ch));if(advance){HEAP32[advance>>>2>>>0]=width}if(minx){HEAP32[minx>>>2>>>0]=0}if(maxx){HEAP32[maxx>>>2>>>0]=width}if(miny){HEAP32[miny>>>2>>>0]=0}if(maxy){HEAP32[maxy>>>2>>>0]=fontData.size}}_TTF_GlyphMetrics.sig="ipippppp";function _TTF_FontAscent(font){font>>>=0;var fontData=SDL.fonts[font];return fontData.size*.98|0}_TTF_FontAscent.sig="ip";function _TTF_FontDescent(font){font>>>=0;var fontData=SDL.fonts[font];return fontData.size*.02|0}_TTF_FontDescent.sig="ip";function _TTF_FontHeight(font){font>>>=0;var fontData=SDL.fonts[font];return fontData.size}_TTF_FontHeight.sig="ip";var _TTF_FontLineSkip=_TTF_FontHeight;_TTF_FontLineSkip.sig="ip";var _TTF_Quit=()=>out("TTF_Quit called (and ignored)");_TTF_Quit.sig="v";var SDL_gfx={drawRectangle:(surf,x1,y1,x2,y2,action,cssColor)=>{x1=x1<<16>>16;y1=y1<<16>>16;x2=x2<<16>>16;y2=y2<<16>>16;var surfData=SDL.surfaces[surf];var x=x1{x1=x1<<16>>16;y1=y1<<16>>16;x2=x2<<16>>16;y2=y2<<16>>16;var surfData=SDL.surfaces[surf];surfData.ctx.save();surfData.ctx.strokeStyle=cssColor;surfData.ctx.beginPath();surfData.ctx.moveTo(x1,y1);surfData.ctx.lineTo(x2,y2);surfData.ctx.stroke();surfData.ctx.restore()},drawEllipse:(surf,x,y,rx,ry,action,cssColor)=>{x=x<<16>>16;y=y<<16>>16;rx=rx<<16>>16;ry=ry<<16>>16;var surfData=SDL.surfaces[surf];surfData.ctx.save();surfData.ctx.beginPath();surfData.ctx.translate(x,y);surfData.ctx.scale(rx,ry);surfData.ctx.arc(0,0,1,0,2*Math.PI);surfData.ctx.restore();surfData.ctx.save();surfData.ctx[action+"Style"]=cssColor;surfData.ctx[action]();surfData.ctx.restore()},translateColorToCSSRGBA:rgba=>`rgba(${rgba>>>24},${rgba>>16&255},${rgba>>8&255},${rgba&255})`};function _boxColor(surf,x1,y1,x2,y2,color){surf>>>=0;return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"fill",SDL_gfx.translateColorToCSSRGBA(color))}_boxColor.sig="ipiiiii";function _boxRGBA(surf,x1,y1,x2,y2,r,g,b,a){surf>>>=0;return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"fill",SDL.translateRGBAToCSSRGBA(r,g,b,a))}_boxRGBA.sig="ipiiiiiiii";function _rectangleColor(surf,x1,y1,x2,y2,color){surf>>>=0;return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"stroke",SDL_gfx.translateColorToCSSRGBA(color))}_rectangleColor.sig="ipiiiii";function _rectangleRGBA(surf,x1,y1,x2,y2,r,g,b,a){surf>>>=0;return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"stroke",SDL.translateRGBAToCSSRGBA(r,g,b,a))}_rectangleRGBA.sig="ipiiiiiiii";function _ellipseColor(surf,x,y,rx,ry,color){surf>>>=0;return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"stroke",SDL_gfx.translateColorToCSSRGBA(color))}_ellipseColor.sig="ipiiiii";function _ellipseRGBA(surf,x,y,rx,ry,r,g,b,a){surf>>>=0;return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"stroke",SDL.translateRGBAToCSSRGBA(r,g,b,a))}_ellipseRGBA.sig="ipiiiiiiii";function _filledEllipseColor(surf,x,y,rx,ry,color){surf>>>=0;return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"fill",SDL_gfx.translateColorToCSSRGBA(color))}_filledEllipseColor.sig="ipiiiii";function _filledEllipseRGBA(surf,x,y,rx,ry,r,g,b,a){surf>>>=0;return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"fill",SDL.translateRGBAToCSSRGBA(r,g,b,a))}_filledEllipseRGBA.sig="ipiiiiiiii";function _lineColor(surf,x1,y1,x2,y2,color){surf>>>=0;return SDL_gfx.drawLine(surf,x1,y1,x2,y2,SDL_gfx.translateColorToCSSRGBA(color))}_lineColor.sig="ipiiiii";function _lineRGBA(surf,x1,y1,x2,y2,r,g,b,a){surf>>>=0;return SDL_gfx.drawLine(surf,x1,y1,x2,y2,SDL.translateRGBAToCSSRGBA(r,g,b,a))}_lineRGBA.sig="ipiiiiiiii";function _pixelRGBA(surf,x1,y1,r,g,b,a){surf>>>=0;return _boxRGBA(surf,x1,y1,x1,y1,r,g,b,a)}_pixelRGBA.sig="ipiiiiii";var _SDL_GL_SetAttribute=(attr,value)=>{if(!(attr in SDL.glAttributes)){abort("Unknown SDL GL attribute ("+attr+"). Please check if your SDL version is supported.")}SDL.glAttributes[attr]=value};_SDL_GL_SetAttribute.sig="iii";function _SDL_GL_GetAttribute(attr,value){value>>>=0;if(!(attr in SDL.glAttributes)){abort("Unknown SDL GL attribute ("+attr+"). Please check if your SDL version is supported.")}if(value)HEAP32[value>>>2>>>0]=SDL.glAttributes[attr];return 0}_SDL_GL_GetAttribute.sig="iip";var _SDL_GL_SwapBuffers=()=>Browser.doSwapBuffers?.();_SDL_GL_SwapBuffers.sig="v";function _SDL_GL_ExtensionSupported(extension){extension>>>=0;return GLctx?.getExtension(UTF8ToString(extension))?1:0}_SDL_GL_ExtensionSupported.sig="ip";function _SDL_DestroyWindow(window){window>>>=0}_SDL_DestroyWindow.sig="vp";function _SDL_DestroyRenderer(renderer){renderer>>>=0}_SDL_DestroyRenderer.sig="vp";function _SDL_GetWindowFlags(window){window>>>=0;if(Browser.isFullscreen){return 1}return 0}_SDL_GetWindowFlags.sig="ip";function _SDL_GL_SwapWindow(window){window>>>=0}_SDL_GL_SwapWindow.sig="vp";function _SDL_GL_MakeCurrent(window,context){window>>>=0;context>>>=0}_SDL_GL_MakeCurrent.sig="ipp";function _SDL_GL_DeleteContext(context){context>>>=0}_SDL_GL_DeleteContext.sig="vp";var _SDL_GL_GetSwapInterval=()=>{if(MainLoop.timingMode==1){return MainLoop.timingValue}else{return 0}};_SDL_GL_GetSwapInterval.sig="i";var _SDL_GL_SetSwapInterval=state=>_emscripten_set_main_loop_timing(1,state);_SDL_GL_SetSwapInterval.sig="ii";function _SDL_SetWindowTitle(window,title){window>>>=0;title>>>=0;if(title)document.title=UTF8ToString(title)}_SDL_SetWindowTitle.sig="vpp";function _SDL_GetWindowSize(window,width,height){window>>>=0;width>>>=0;height>>>=0;var canvas=Browser.getCanvas();if(width)HEAP32[width>>>2>>>0]=canvas.width;if(height)HEAP32[height>>>2>>>0]=canvas.height}_SDL_GetWindowSize.sig="vppp";function _SDL_LogSetOutputFunction(callback,userdata){callback>>>=0;userdata>>>=0}_SDL_LogSetOutputFunction.sig="vpp";function _SDL_SetWindowFullscreen(window,fullscreen){window>>>=0;if(Browser.isFullscreen){Browser.getCanvas().exitFullscreen();return 1}return 0}_SDL_SetWindowFullscreen.sig="ipi";var _SDL_ClearError=()=>{};_SDL_ClearError.sig="v";var _SDL_SetGamma=(r,g,b)=>-1;_SDL_SetGamma.sig="ifff";function _SDL_SetGammaRamp(redTable,greenTable,blueTable){redTable>>>=0;greenTable>>>=0;blueTable>>>=0;return-1}_SDL_SetGammaRamp.sig="ippp";var _SDL_NumJoysticks=()=>{var count=0;var gamepads=SDL.getGamepads();for(var gamepad of gamepads){if(gamepad!==undefined)count++}return count};_SDL_NumJoysticks.sig="i";function _SDL_JoystickName(deviceIndex){var gamepad=SDL.getGamepad(deviceIndex);if(gamepad){var name=gamepad.id;if(SDL.joystickNamePool.hasOwnProperty(name)){return SDL.joystickNamePool[name]}return SDL.joystickNamePool[name]=stringToNewUTF8(name)}return 0}_SDL_JoystickName.sig="pi";function _SDL_JoystickOpen(deviceIndex){var gamepad=SDL.getGamepad(deviceIndex);if(gamepad){var joystick=deviceIndex+1;SDL.recordJoystickState(joystick,gamepad);return joystick}return 0}_SDL_JoystickOpen.sig="pi";var _SDL_JoystickOpened=deviceIndex=>SDL.lastJoystickState.hasOwnProperty(deviceIndex+1)?1:0;_SDL_JoystickOpened.sig="ii";function _SDL_JoystickIndex(joystick){joystick>>>=0;return joystick-1}_SDL_JoystickIndex.sig="ip";function _SDL_JoystickNumAxes(joystick){joystick>>>=0;var gamepad=SDL.getGamepad(joystick-1);if(gamepad){return gamepad.axes.length}return 0}_SDL_JoystickNumAxes.sig="ip";function _SDL_JoystickNumBalls(joystick){joystick>>>=0;return 0}_SDL_JoystickNumBalls.sig="ip";function _SDL_JoystickNumHats(joystick){joystick>>>=0;return 0}_SDL_JoystickNumHats.sig="ip";function _SDL_JoystickNumButtons(joystick){joystick>>>=0;var gamepad=SDL.getGamepad(joystick-1);if(gamepad){return gamepad.buttons.length}return 0}_SDL_JoystickNumButtons.sig="ip";var _SDL_JoystickUpdate=()=>SDL.queryJoysticks();_SDL_JoystickUpdate.sig="v";var _SDL_JoystickEventState=state=>{if(state<0){return SDL.joystickEventState}return SDL.joystickEventState=state};_SDL_JoystickEventState.sig="ii";function _SDL_JoystickGetAxis(joystick,axis){joystick>>>=0;var gamepad=SDL.getGamepad(joystick-1);if(gamepad?.axes.length>axis){return SDL.joystickAxisValueConversion(gamepad.axes[axis])}return 0}_SDL_JoystickGetAxis.sig="ipi";function _SDL_JoystickGetHat(joystick,hat){joystick>>>=0;return 0}_SDL_JoystickGetHat.sig="ipi";function _SDL_JoystickGetBall(joystick,ball,dxptr,dyptr){joystick>>>=0;dxptr>>>=0;dyptr>>>=0;return-1}_SDL_JoystickGetBall.sig="ipipp";function _SDL_JoystickGetButton(joystick,button){joystick>>>=0;var gamepad=SDL.getGamepad(joystick-1);if(gamepad?.buttons.length>button){return SDL.getJoystickButtonState(gamepad.buttons[button])?1:0}return 0}_SDL_JoystickGetButton.sig="ipi";function _SDL_JoystickClose(joystick){joystick>>>=0;delete SDL.lastJoystickState[joystick]}_SDL_JoystickClose.sig="vp";var _SDL_InitSubSystem=flags=>0;_SDL_InitSubSystem.sig="ii";function _SDL_RWFromConstMem(mem,size){mem>>>=0;var id=SDL.rwops.length;SDL.rwops.push({bytes:mem,count:size});return id}_SDL_RWFromConstMem.sig="ppi";var _SDL_RWFromMem=_SDL_RWFromConstMem;_SDL_RWFromMem.sig="ppi";var _SDL_GetNumAudioDrivers=()=>1;_SDL_GetNumAudioDrivers.sig="i";function _SDL_GetCurrentAudioDriver(){return stringToNewUTF8("Emscripten Audio")}_SDL_GetCurrentAudioDriver.sig="p";var _SDL_GetScancodeFromKey=key=>SDL.scanCodes[key];_SDL_GetScancodeFromKey.sig="ii";function _SDL_GetAudioDriver(index){return _SDL_GetCurrentAudioDriver()}_SDL_GetAudioDriver.sig="pi";var _SDL_EnableUNICODE=on=>{var ret=SDL.unicode||0;SDL.unicode=on;return ret};_SDL_EnableUNICODE.sig="ii";var _SDL_AddTimer=function(interval,callback,param){callback>>>=0;param>>>=0;return safeSetTimeout(()=>getWasmTableEntry(callback)(interval,param),interval)};_SDL_AddTimer.sig="iipp";var _SDL_RemoveTimer=id=>{clearTimeout(id);return true};_SDL_RemoveTimer.sig="ii";function _SDL_CreateThread(fs,data,pfnBeginThread,pfnEndThread){fs>>>=0;data>>>=0;return abort("SDL threads cannot be supported in the web platform because they assume shared state. See emscripten_create_worker etc. for a message-passing concurrency model that does let you run code in another thread.")}_SDL_CreateThread.sig="ppp";function _SDL_WaitThread(thread,status){thread>>>=0;status>>>=0;return abort("SDL_WaitThread: TODO")}_SDL_WaitThread.sig="vpp";function _SDL_GetThreadID(thread){thread>>>=0;return abort("SDL_GetThreadID: TODO")}_SDL_GetThreadID.sig="pp";function _SDL_ThreadID(){return 0}_SDL_ThreadID.sig="p";function _SDL_AllocRW(){return abort("SDL_AllocRW: TODO")}_SDL_AllocRW.sig="p";function _SDL_CondBroadcast(cond){cond>>>=0;return abort("SDL_CondBroadcast: TODO")}_SDL_CondBroadcast.sig="ip";function _SDL_CondWaitTimeout(cond,mutex,ms){cond>>>=0;mutex>>>=0;return abort("SDL_CondWaitTimeout: TODO")}_SDL_CondWaitTimeout.sig="ippi";var _SDL_WM_IconifyWindow=()=>abort("SDL_WM_IconifyWindow TODO");_SDL_WM_IconifyWindow.sig="i";function _Mix_SetPostMix(func,arg){func>>>=0;arg>>>=0;return warnOnce("Mix_SetPostMix: TODO")}_Mix_SetPostMix.sig="vpp";function _Mix_VolumeChunk(chunk,volume){chunk>>>=0;return abort("Mix_VolumeChunk: TODO")}_Mix_VolumeChunk.sig="ipi";var _Mix_SetPosition=(channel,angle,distance)=>abort("Mix_SetPosition: TODO");_Mix_SetPosition.sig="iiii";function _Mix_QuerySpec(frequency,format,channels){frequency>>>=0;format>>>=0;channels>>>=0;return abort("Mix_QuerySpec: TODO")}_Mix_QuerySpec.sig="ippp";function _Mix_FadeInChannelTimed(channel,chunk,loop,ms,ticks){chunk>>>=0;return abort("Mix_FadeInChannelTimed")}_Mix_FadeInChannelTimed.sig="iipiii";var _Mix_FadeOutChannel=()=>abort("Mix_FadeOutChannel");_Mix_FadeOutChannel.sig="iii";function _Mix_Linked_Version(){return abort("Mix_Linked_Version: TODO")}_Mix_Linked_Version.sig="p";function _SDL_SaveBMP_RW(surface,dst,freedst){surface>>>=0;dst>>>=0;return abort("SDL_SaveBMP_RW: TODO")}_SDL_SaveBMP_RW.sig="ippi";function _SDL_WM_SetIcon(icon,mask){icon>>>=0;mask>>>=0}_SDL_WM_SetIcon.sig="vpp";var _SDL_HasRDTSC=()=>0;_SDL_HasRDTSC.sig="i";var _SDL_HasMMX=()=>0;_SDL_HasMMX.sig="i";var _SDL_HasMMXExt=()=>0;_SDL_HasMMXExt.sig="i";var _SDL_Has3DNow=()=>0;_SDL_Has3DNow.sig="i";var _SDL_Has3DNowExt=()=>0;_SDL_Has3DNowExt.sig="i";var _SDL_HasSSE=()=>0;_SDL_HasSSE.sig="i";var _SDL_HasSSE2=()=>0;_SDL_HasSSE2.sig="i";var _SDL_HasAltiVec=()=>0;_SDL_HasAltiVec.sig="i";registerWasmPlugin();FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();for(var base64ReverseLookup=new Uint8Array(123),__b64i=25;__b64i>=0;--__b64i){base64ReverseLookup[48+__b64i]=52+__b64i;base64ReverseLookup[65+__b64i]=__b64i;base64ReverseLookup[97+__b64i]=26+__b64i}base64ReverseLookup[43]=62;base64ReverseLookup[47]=63;if(ENVIRONMENT_IS_NODE){NODEFS.staticInit()}for(let i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<=288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<=288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();if(globalThis.setImmediate){emSetImmediate=setImmediateWrapped;emClearImmediate=clearImmediateWrapped}else if(globalThis.addEventListener){var __setImmediate_id_counter=0;var __setImmediate_queue=[];var __setImmediate_message_id="_si";var __setImmediate_cb=e=>{if(e.data===__setImmediate_message_id){e.stopPropagation();__setImmediate_queue.shift()();++__setImmediate_id_counter}};addEventListener("message",__setImmediate_cb,true);emSetImmediate=func=>{postMessage(__setImmediate_message_id,"*");return __setImmediate_id_counter+__setImmediate_queue.push(func)-1};emClearImmediate=id=>{var index=id-__setImmediate_id_counter;if(index>=0&&index<__setImmediate_queue.length)__setImmediate_queue[index]=()=>{}}}registerPostMainLoop(()=>SDL.audio?.queueNewAudioData?.());{if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["dynamicLibraries"])dynamicLibraries=Module["dynamicLibraries"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["ERRNO_CODES"]=ERRNO_CODES;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;Module["LZ4"]=LZ4;Module["ExitStatus"]=ExitStatus;Module["GOTHandler"]=GOTHandler;Module["GOT"]=GOT;Module["addOnPostRun"]=addOnPostRun;Module["onPostRuns"]=onPostRuns;Module["callRuntimeCallbacks"]=callRuntimeCallbacks;Module["addOnPreRun"]=addOnPreRun;Module["onPreRuns"]=onPreRuns;Module["getDylinkMetadata"]=getDylinkMetadata;Module["UTF8ArrayToString"]=UTF8ArrayToString;Module["UTF8Decoder"]=UTF8Decoder;Module["findStringEnd"]=findStringEnd;Module["getValue"]=getValue;Module["loadDylibs"]=loadDylibs;Module["loadDynamicLibrary"]=loadDynamicLibrary;Module["LDSO"]=LDSO;Module["newDSO"]=newDSO;Module["loadWebAssemblyModule"]=loadWebAssemblyModule;Module["getMemory"]=getMemory;Module["alignMemory"]=alignMemory;Module["updateGOT"]=updateGOT;Module["isInternalSym"]=isInternalSym;Module["addFunction"]=addFunction;Module["getFunctionAddress"]=getFunctionAddress;Module["updateTableMap"]=updateTableMap;Module["getWasmTableEntry"]=getWasmTableEntry;Module["wasmTableMirror"]=wasmTableMirror;Module["functionsInTableMap"]=functionsInTableMap;Module["getEmptyTableSlot"]=getEmptyTableSlot;Module["freeTableIndexes"]=freeTableIndexes;Module["setWasmTableEntry"]=setWasmTableEntry;Module["convertJsFunctionToWasm"]=convertJsFunctionToWasm;Module["uleb128EncodeWithLen"]=uleb128EncodeWithLen;Module["generateTypePack"]=generateTypePack;Module["wasmTypeCodes"]=wasmTypeCodes;Module["relocateExports"]=relocateExports;Module["isImmutableGlobal"]=isImmutableGlobal;Module["resolveGlobalSymbol"]=resolveGlobalSymbol;Module["isSymbolDefined"]=isSymbolDefined;Module["createNamedFunction"]=createNamedFunction;Module["addOnPostCtor"]=addOnPostCtor;Module["onPostCtors"]=onPostCtors;Module["UTF8ToString"]=UTF8ToString;Module["mergeLibSymbols"]=mergeLibSymbols;Module["asyncLoad"]=asyncLoad;Module["preloadedWasm"]=preloadedWasm;Module["registerWasmPlugin"]=registerWasmPlugin;Module["preloadPlugins"]=preloadPlugins;Module["findLibraryFS"]=findLibraryFS;Module["replaceORIGIN"]=replaceORIGIN;Module["PATH"]=PATH;Module["withStackSave"]=withStackSave;Module["stackSave"]=stackSave;Module["stackRestore"]=stackRestore;Module["stackAlloc"]=stackAlloc;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["stringToUTF8OnStack"]=stringToUTF8OnStack;Module["stringToUTF8"]=stringToUTF8;Module["stringToUTF8Array"]=stringToUTF8Array;Module["FS"]=FS;Module["randomFill"]=randomFill;Module["initRandomFill"]=initRandomFill;Module["base64Decode"]=base64Decode;Module["PATH_FS"]=PATH_FS;Module["TTY"]=TTY;Module["FS_stdin_getChar"]=FS_stdin_getChar;Module["FS_stdin_getChar_buffer"]=FS_stdin_getChar_buffer;Module["intArrayFromString"]=intArrayFromString;Module["MEMFS"]=MEMFS;Module["mmapAlloc"]=mmapAlloc;Module["zeroMemory"]=zeroMemory;Module["FS_modeStringToFlags"]=FS_modeStringToFlags;Module["FS_fileDataToTypedArray"]=FS_fileDataToTypedArray;Module["FS_getMode"]=FS_getMode;Module["IDBFS"]=IDBFS;Module["NODEFS"]=NODEFS;Module["ERRNO_CODES"]=ERRNO_CODES;Module["WORKERFS"]=WORKERFS;Module["PROXYFS"]=PROXYFS;Module["FS_createPreloadedFile"]=FS_createPreloadedFile;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_createDataFile"]=FS_createDataFile;Module["getUniqueRunDependency"]=getUniqueRunDependency;Module["addRunDependency"]=addRunDependency;Module["runDependencies"]=runDependencies;Module["removeRunDependency"]=removeRunDependency;Module["dependenciesFulfilled"]=dependenciesFulfilled;Module["FS_handledByPreloadPlugin"]=FS_handledByPreloadPlugin;Module["LZ4"]=LZ4;Module["reportUndefinedSymbols"]=reportUndefinedSymbols;Module["noExitRuntime"]=noExitRuntime;Module["setValue"]=setValue;Module["_JsvError_Check"]=_JsvError_Check;Module["_Jsv_GetError_import"]=_Jsv_GetError_import;Module["___assert_fail"]=___assert_fail;Module["bigintToI53Checked"]=bigintToI53Checked;Module["INT53_MAX"]=INT53_MAX;Module["INT53_MIN"]=INT53_MIN;Module["___call_sighandler"]=___call_sighandler;Module["___syscall_accept4"]=___syscall_accept4;Module["getSocketFromFD"]=getSocketFromFD;Module["SOCKFS"]=SOCKFS;Module["writeSockaddr"]=writeSockaddr;Module["inetPton4"]=inetPton4;Module["inetPton6"]=inetPton6;Module["DNS"]=DNS;Module["___syscall_bind"]=___syscall_bind;Module["getSocketAddress"]=getSocketAddress;Module["readSockaddr"]=readSockaddr;Module["inetNtop4"]=inetNtop4;Module["inetNtop6"]=inetNtop6;Module["___syscall_chdir"]=___syscall_chdir;Module["SYSCALLS"]=SYSCALLS;Module["___syscall_chmod"]=___syscall_chmod;Module["___syscall_connect"]=___syscall_connect;Module["___syscall_dup"]=___syscall_dup;Module["___syscall_dup3"]=___syscall_dup3;Module["___syscall_faccessat"]=___syscall_faccessat;Module["___syscall_fadvise64"]=___syscall_fadvise64;Module["___syscall_fallocate"]=___syscall_fallocate;Module["___syscall_fchdir"]=___syscall_fchdir;Module["___syscall_fchmod"]=___syscall_fchmod;Module["___syscall_fchmodat2"]=___syscall_fchmodat2;Module["___syscall_fchown32"]=___syscall_fchown32;Module["___syscall_fchownat"]=___syscall_fchownat;Module["___syscall_fcntl64"]=___syscall_fcntl64;Module["syscallGetVarargP"]=syscallGetVarargP;Module["syscallGetVarargI"]=syscallGetVarargI;Module["___syscall_fdatasync"]=___syscall_fdatasync;Module["___syscall_fstat64"]=___syscall_fstat64;Module["___syscall_fstatfs64"]=___syscall_fstatfs64;Module["___syscall_ftruncate64"]=___syscall_ftruncate64;Module["___syscall_getcwd"]=___syscall_getcwd;Module["___syscall_getdents64"]=___syscall_getdents64;Module["___syscall_getpeername"]=___syscall_getpeername;Module["___syscall_getsockname"]=___syscall_getsockname;Module["___syscall_getsockopt"]=___syscall_getsockopt;Module["___syscall_ioctl"]=___syscall_ioctl;Module["___syscall_listen"]=___syscall_listen;Module["___syscall_lstat64"]=___syscall_lstat64;Module["___syscall_mkdirat"]=___syscall_mkdirat;Module["___syscall_mknodat"]=___syscall_mknodat;Module["___syscall_newfstatat"]=___syscall_newfstatat;Module["___syscall_openat"]=___syscall_openat;Module["___syscall_pipe"]=___syscall_pipe;Module["PIPEFS"]=PIPEFS;Module["___syscall_poll"]=___syscall_poll;Module["___syscall_readlinkat"]=___syscall_readlinkat;Module["___syscall_recvfrom"]=___syscall_recvfrom;Module["___syscall_recvmsg"]=___syscall_recvmsg;Module["___syscall_renameat"]=___syscall_renameat;Module["___syscall_rmdir"]=___syscall_rmdir;Module["___syscall_sendmsg"]=___syscall_sendmsg;Module["___syscall_sendto"]=___syscall_sendto;Module["___syscall_socket"]=___syscall_socket;Module["___syscall_stat64"]=___syscall_stat64;Module["___syscall_statfs64"]=___syscall_statfs64;Module["___syscall_symlinkat"]=___syscall_symlinkat;Module["___syscall_truncate64"]=___syscall_truncate64;Module["___syscall_unlinkat"]=___syscall_unlinkat;Module["___syscall_utimensat"]=___syscall_utimensat;Module["readI53FromI64"]=readI53FromI64;Module["__abort_js"]=__abort_js;Module["__dlopen_js"]=__dlopen_js;Module["dlopenInternal"]=dlopenInternal;Module["dlSetError"]=dlSetError;Module["__dlsym_js"]=__dlsym_js;Module["__emscripten_dlopen_js"]=__emscripten_dlopen_js;Module["callUserCallback"]=callUserCallback;Module["handleException"]=handleException;Module["maybeExit"]=maybeExit;Module["_exit"]=_exit;Module["exitJS"]=exitJS;Module["_proc_exit"]=_proc_exit;Module["keepRuntimeAlive"]=keepRuntimeAlive;Module["runtimeKeepaliveCounter"]=runtimeKeepaliveCounter;Module["runtimeKeepalivePush"]=runtimeKeepalivePush;Module["runtimeKeepalivePop"]=runtimeKeepalivePop;Module["__emscripten_get_progname"]=__emscripten_get_progname;Module["getExecutableName"]=getExecutableName;Module["__emscripten_log_formatted"]=__emscripten_log_formatted;Module["getCallstack"]=getCallstack;Module["jsStackTrace"]=jsStackTrace;Module["__emscripten_lookup_name"]=__emscripten_lookup_name;Module["__emscripten_runtime_keepalive_clear"]=__emscripten_runtime_keepalive_clear;Module["__emscripten_system"]=__emscripten_system;Module["__gmtime_js"]=__gmtime_js;Module["__localtime_js"]=__localtime_js;Module["ydayFromDate"]=ydayFromDate;Module["isLeapYear"]=isLeapYear;Module["MONTH_DAYS_LEAP_CUMULATIVE"]=MONTH_DAYS_LEAP_CUMULATIVE;Module["MONTH_DAYS_REGULAR_CUMULATIVE"]=MONTH_DAYS_REGULAR_CUMULATIVE;Module["__mktime_js"]=__mktime_js;Module["__mmap_js"]=__mmap_js;Module["__msync_js"]=__msync_js;Module["__munmap_js"]=__munmap_js;Module["__setitimer_js"]=__setitimer_js;Module["timers"]=timers;Module["_emscripten_get_now"]=_emscripten_get_now;Module["__timegm_js"]=__timegm_js;Module["__tzset_js"]=__tzset_js;Module["_clock_res_get"]=_clock_res_get;Module["_emscripten_get_now_res"]=_emscripten_get_now_res;Module["nowIsMonotonic"]=nowIsMonotonic;Module["checkWasiClock"]=checkWasiClock;Module["_clock_time_get"]=_clock_time_get;Module["_emscripten_date_now"]=_emscripten_date_now;Module["_emscripten_asm_const_int"]=_emscripten_asm_const_int;Module["runEmAsmFunction"]=runEmAsmFunction;Module["readEmAsmArgs"]=readEmAsmArgs;Module["readEmAsmArgsArray"]=readEmAsmArgsArray;Module["_emscripten_console_error"]=_emscripten_console_error;Module["_emscripten_console_log"]=_emscripten_console_log;Module["_emscripten_console_trace"]=_emscripten_console_trace;Module["_emscripten_console_warn"]=_emscripten_console_warn;Module["_emscripten_debugger"]=_emscripten_debugger;Module["_emscripten_err"]=_emscripten_err;Module["_emscripten_get_heap_max"]=_emscripten_get_heap_max;Module["getHeapMax"]=getHeapMax;Module["_emscripten_glActiveTexture"]=_emscripten_glActiveTexture;Module["GL"]=GL;Module["GLctx"]=GLctx;Module["webgl_enable_ANGLE_instanced_arrays"]=webgl_enable_ANGLE_instanced_arrays;Module["webgl_enable_OES_vertex_array_object"]=webgl_enable_OES_vertex_array_object;Module["webgl_enable_WEBGL_draw_buffers"]=webgl_enable_WEBGL_draw_buffers;Module["webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance"]=webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance;Module["webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance"]=webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance;Module["webgl_enable_EXT_polygon_offset_clamp"]=webgl_enable_EXT_polygon_offset_clamp;Module["webgl_enable_EXT_clip_control"]=webgl_enable_EXT_clip_control;Module["webgl_enable_WEBGL_polygon_mode"]=webgl_enable_WEBGL_polygon_mode;Module["webgl_enable_WEBGL_multi_draw"]=webgl_enable_WEBGL_multi_draw;Module["getEmscriptenSupportedExtensions"]=getEmscriptenSupportedExtensions;Module["_emscripten_glAttachShader"]=_emscripten_glAttachShader;Module["_emscripten_glBeginQuery"]=_emscripten_glBeginQuery;Module["_emscripten_glBeginQueryEXT"]=_emscripten_glBeginQueryEXT;Module["_emscripten_glBeginTransformFeedback"]=_emscripten_glBeginTransformFeedback;Module["_emscripten_glBindAttribLocation"]=_emscripten_glBindAttribLocation;Module["_emscripten_glBindBuffer"]=_emscripten_glBindBuffer;Module["_emscripten_glBindBufferBase"]=_emscripten_glBindBufferBase;Module["_emscripten_glBindBufferRange"]=_emscripten_glBindBufferRange;Module["_emscripten_glBindFramebuffer"]=_emscripten_glBindFramebuffer;Module["_emscripten_glBindRenderbuffer"]=_emscripten_glBindRenderbuffer;Module["_emscripten_glBindSampler"]=_emscripten_glBindSampler;Module["_emscripten_glBindTexture"]=_emscripten_glBindTexture;Module["_emscripten_glBindTransformFeedback"]=_emscripten_glBindTransformFeedback;Module["_emscripten_glBindVertexArray"]=_emscripten_glBindVertexArray;Module["_emscripten_glBindVertexArrayOES"]=_emscripten_glBindVertexArrayOES;Module["_glBindVertexArray"]=_glBindVertexArray;Module["_emscripten_glBlendColor"]=_emscripten_glBlendColor;Module["_emscripten_glBlendEquation"]=_emscripten_glBlendEquation;Module["_emscripten_glBlendEquationSeparate"]=_emscripten_glBlendEquationSeparate;Module["_emscripten_glBlendFunc"]=_emscripten_glBlendFunc;Module["_emscripten_glBlendFuncSeparate"]=_emscripten_glBlendFuncSeparate;Module["_emscripten_glBlitFramebuffer"]=_emscripten_glBlitFramebuffer;Module["_emscripten_glBufferData"]=_emscripten_glBufferData;Module["_emscripten_glBufferSubData"]=_emscripten_glBufferSubData;Module["_emscripten_glCheckFramebufferStatus"]=_emscripten_glCheckFramebufferStatus;Module["_emscripten_glClear"]=_emscripten_glClear;Module["_emscripten_glClearBufferfi"]=_emscripten_glClearBufferfi;Module["_emscripten_glClearBufferfv"]=_emscripten_glClearBufferfv;Module["_emscripten_glClearBufferiv"]=_emscripten_glClearBufferiv;Module["_emscripten_glClearBufferuiv"]=_emscripten_glClearBufferuiv;Module["_emscripten_glClearColor"]=_emscripten_glClearColor;Module["_emscripten_glClearDepthf"]=_emscripten_glClearDepthf;Module["_emscripten_glClearStencil"]=_emscripten_glClearStencil;Module["_emscripten_glClientWaitSync"]=_emscripten_glClientWaitSync;Module["_emscripten_glClipControlEXT"]=_emscripten_glClipControlEXT;Module["_emscripten_glColorMask"]=_emscripten_glColorMask;Module["_emscripten_glCompileShader"]=_emscripten_glCompileShader;Module["_emscripten_glCompressedTexImage2D"]=_emscripten_glCompressedTexImage2D;Module["_emscripten_glCompressedTexImage3D"]=_emscripten_glCompressedTexImage3D;Module["_emscripten_glCompressedTexSubImage2D"]=_emscripten_glCompressedTexSubImage2D;Module["_emscripten_glCompressedTexSubImage3D"]=_emscripten_glCompressedTexSubImage3D;Module["_emscripten_glCopyBufferSubData"]=_emscripten_glCopyBufferSubData;Module["_emscripten_glCopyTexImage2D"]=_emscripten_glCopyTexImage2D;Module["_emscripten_glCopyTexSubImage2D"]=_emscripten_glCopyTexSubImage2D;Module["_emscripten_glCopyTexSubImage3D"]=_emscripten_glCopyTexSubImage3D;Module["_emscripten_glCreateProgram"]=_emscripten_glCreateProgram;Module["_emscripten_glCreateShader"]=_emscripten_glCreateShader;Module["_emscripten_glCullFace"]=_emscripten_glCullFace;Module["_emscripten_glDeleteBuffers"]=_emscripten_glDeleteBuffers;Module["_emscripten_glDeleteFramebuffers"]=_emscripten_glDeleteFramebuffers;Module["_emscripten_glDeleteProgram"]=_emscripten_glDeleteProgram;Module["_emscripten_glDeleteQueries"]=_emscripten_glDeleteQueries;Module["_emscripten_glDeleteQueriesEXT"]=_emscripten_glDeleteQueriesEXT;Module["_emscripten_glDeleteRenderbuffers"]=_emscripten_glDeleteRenderbuffers;Module["_emscripten_glDeleteSamplers"]=_emscripten_glDeleteSamplers;Module["_emscripten_glDeleteShader"]=_emscripten_glDeleteShader;Module["_emscripten_glDeleteSync"]=_emscripten_glDeleteSync;Module["_emscripten_glDeleteTextures"]=_emscripten_glDeleteTextures;Module["_emscripten_glDeleteTransformFeedbacks"]=_emscripten_glDeleteTransformFeedbacks;Module["_emscripten_glDeleteVertexArrays"]=_emscripten_glDeleteVertexArrays;Module["_emscripten_glDeleteVertexArraysOES"]=_emscripten_glDeleteVertexArraysOES;Module["_glDeleteVertexArrays"]=_glDeleteVertexArrays;Module["_emscripten_glDepthFunc"]=_emscripten_glDepthFunc;Module["_emscripten_glDepthMask"]=_emscripten_glDepthMask;Module["_emscripten_glDepthRangef"]=_emscripten_glDepthRangef;Module["_emscripten_glDetachShader"]=_emscripten_glDetachShader;Module["_emscripten_glDisable"]=_emscripten_glDisable;Module["_emscripten_glDisableVertexAttribArray"]=_emscripten_glDisableVertexAttribArray;Module["_emscripten_glDrawArrays"]=_emscripten_glDrawArrays;Module["_emscripten_glDrawArraysInstanced"]=_emscripten_glDrawArraysInstanced;Module["_emscripten_glDrawArraysInstancedANGLE"]=_emscripten_glDrawArraysInstancedANGLE;Module["_glDrawArraysInstanced"]=_glDrawArraysInstanced;Module["_emscripten_glDrawArraysInstancedARB"]=_emscripten_glDrawArraysInstancedARB;Module["_emscripten_glDrawArraysInstancedEXT"]=_emscripten_glDrawArraysInstancedEXT;Module["_emscripten_glDrawArraysInstancedNV"]=_emscripten_glDrawArraysInstancedNV;Module["_emscripten_glDrawBuffers"]=_emscripten_glDrawBuffers;Module["tempFixedLengthArray"]=tempFixedLengthArray;Module["_emscripten_glDrawBuffersEXT"]=_emscripten_glDrawBuffersEXT;Module["_glDrawBuffers"]=_glDrawBuffers;Module["_emscripten_glDrawBuffersWEBGL"]=_emscripten_glDrawBuffersWEBGL;Module["_emscripten_glDrawElements"]=_emscripten_glDrawElements;Module["_emscripten_glDrawElementsInstanced"]=_emscripten_glDrawElementsInstanced;Module["_emscripten_glDrawElementsInstancedANGLE"]=_emscripten_glDrawElementsInstancedANGLE;Module["_glDrawElementsInstanced"]=_glDrawElementsInstanced;Module["_emscripten_glDrawElementsInstancedARB"]=_emscripten_glDrawElementsInstancedARB;Module["_emscripten_glDrawElementsInstancedEXT"]=_emscripten_glDrawElementsInstancedEXT;Module["_emscripten_glDrawElementsInstancedNV"]=_emscripten_glDrawElementsInstancedNV;Module["_emscripten_glDrawRangeElements"]=_emscripten_glDrawRangeElements;Module["_glDrawElements"]=_glDrawElements;Module["_emscripten_glEnable"]=_emscripten_glEnable;Module["_emscripten_glEnableVertexAttribArray"]=_emscripten_glEnableVertexAttribArray;Module["_emscripten_glEndQuery"]=_emscripten_glEndQuery;Module["_emscripten_glEndQueryEXT"]=_emscripten_glEndQueryEXT;Module["_emscripten_glEndTransformFeedback"]=_emscripten_glEndTransformFeedback;Module["_emscripten_glFenceSync"]=_emscripten_glFenceSync;Module["_emscripten_glFinish"]=_emscripten_glFinish;Module["_emscripten_glFlush"]=_emscripten_glFlush;Module["_emscripten_glFramebufferRenderbuffer"]=_emscripten_glFramebufferRenderbuffer;Module["_emscripten_glFramebufferTexture2D"]=_emscripten_glFramebufferTexture2D;Module["_emscripten_glFramebufferTextureLayer"]=_emscripten_glFramebufferTextureLayer;Module["_emscripten_glFrontFace"]=_emscripten_glFrontFace;Module["_emscripten_glGenBuffers"]=_emscripten_glGenBuffers;Module["_emscripten_glGenFramebuffers"]=_emscripten_glGenFramebuffers;Module["_emscripten_glGenQueries"]=_emscripten_glGenQueries;Module["_emscripten_glGenQueriesEXT"]=_emscripten_glGenQueriesEXT;Module["_emscripten_glGenRenderbuffers"]=_emscripten_glGenRenderbuffers;Module["_emscripten_glGenSamplers"]=_emscripten_glGenSamplers;Module["_emscripten_glGenTextures"]=_emscripten_glGenTextures;Module["_emscripten_glGenTransformFeedbacks"]=_emscripten_glGenTransformFeedbacks;Module["_emscripten_glGenVertexArrays"]=_emscripten_glGenVertexArrays;Module["_emscripten_glGenVertexArraysOES"]=_emscripten_glGenVertexArraysOES;Module["_glGenVertexArrays"]=_glGenVertexArrays;Module["_emscripten_glGenerateMipmap"]=_emscripten_glGenerateMipmap;Module["_emscripten_glGetActiveAttrib"]=_emscripten_glGetActiveAttrib;Module["__glGetActiveAttribOrUniform"]=__glGetActiveAttribOrUniform;Module["_emscripten_glGetActiveUniform"]=_emscripten_glGetActiveUniform;Module["_emscripten_glGetActiveUniformBlockName"]=_emscripten_glGetActiveUniformBlockName;Module["_emscripten_glGetActiveUniformBlockiv"]=_emscripten_glGetActiveUniformBlockiv;Module["_emscripten_glGetActiveUniformsiv"]=_emscripten_glGetActiveUniformsiv;Module["_emscripten_glGetAttachedShaders"]=_emscripten_glGetAttachedShaders;Module["_emscripten_glGetAttribLocation"]=_emscripten_glGetAttribLocation;Module["_emscripten_glGetBooleanv"]=_emscripten_glGetBooleanv;Module["emscriptenWebGLGet"]=emscriptenWebGLGet;Module["writeI53ToI64"]=writeI53ToI64;Module["webglGetExtensions"]=webglGetExtensions;Module["_emscripten_glGetBufferParameteri64v"]=_emscripten_glGetBufferParameteri64v;Module["_emscripten_glGetBufferParameteriv"]=_emscripten_glGetBufferParameteriv;Module["_emscripten_glGetError"]=_emscripten_glGetError;Module["_emscripten_glGetFloatv"]=_emscripten_glGetFloatv;Module["_emscripten_glGetFragDataLocation"]=_emscripten_glGetFragDataLocation;Module["_emscripten_glGetFramebufferAttachmentParameteriv"]=_emscripten_glGetFramebufferAttachmentParameteriv;Module["_emscripten_glGetInteger64i_v"]=_emscripten_glGetInteger64i_v;Module["emscriptenWebGLGetIndexed"]=emscriptenWebGLGetIndexed;Module["_emscripten_glGetInteger64v"]=_emscripten_glGetInteger64v;Module["_emscripten_glGetIntegeri_v"]=_emscripten_glGetIntegeri_v;Module["_emscripten_glGetIntegerv"]=_emscripten_glGetIntegerv;Module["_emscripten_glGetInternalformativ"]=_emscripten_glGetInternalformativ;Module["_emscripten_glGetProgramBinary"]=_emscripten_glGetProgramBinary;Module["_emscripten_glGetProgramInfoLog"]=_emscripten_glGetProgramInfoLog;Module["_emscripten_glGetProgramiv"]=_emscripten_glGetProgramiv;Module["_emscripten_glGetQueryObjecti64vEXT"]=_emscripten_glGetQueryObjecti64vEXT;Module["_emscripten_glGetQueryObjectivEXT"]=_emscripten_glGetQueryObjectivEXT;Module["_emscripten_glGetQueryObjectui64vEXT"]=_emscripten_glGetQueryObjectui64vEXT;Module["_glGetQueryObjecti64vEXT"]=_glGetQueryObjecti64vEXT;Module["_emscripten_glGetQueryObjectuiv"]=_emscripten_glGetQueryObjectuiv;Module["_emscripten_glGetQueryObjectuivEXT"]=_emscripten_glGetQueryObjectuivEXT;Module["_glGetQueryObjectivEXT"]=_glGetQueryObjectivEXT;Module["_emscripten_glGetQueryiv"]=_emscripten_glGetQueryiv;Module["_emscripten_glGetQueryivEXT"]=_emscripten_glGetQueryivEXT;Module["_emscripten_glGetRenderbufferParameteriv"]=_emscripten_glGetRenderbufferParameteriv;Module["_emscripten_glGetSamplerParameterfv"]=_emscripten_glGetSamplerParameterfv;Module["_emscripten_glGetSamplerParameteriv"]=_emscripten_glGetSamplerParameteriv;Module["_emscripten_glGetShaderInfoLog"]=_emscripten_glGetShaderInfoLog;Module["_emscripten_glGetShaderPrecisionFormat"]=_emscripten_glGetShaderPrecisionFormat;Module["_emscripten_glGetShaderSource"]=_emscripten_glGetShaderSource;Module["_emscripten_glGetShaderiv"]=_emscripten_glGetShaderiv;Module["_emscripten_glGetString"]=_emscripten_glGetString;Module["stringToNewUTF8"]=stringToNewUTF8;Module["_emscripten_glGetStringi"]=_emscripten_glGetStringi;Module["_emscripten_glGetSynciv"]=_emscripten_glGetSynciv;Module["_emscripten_glGetTexParameterfv"]=_emscripten_glGetTexParameterfv;Module["_emscripten_glGetTexParameteriv"]=_emscripten_glGetTexParameteriv;Module["_emscripten_glGetTransformFeedbackVarying"]=_emscripten_glGetTransformFeedbackVarying;Module["_emscripten_glGetUniformBlockIndex"]=_emscripten_glGetUniformBlockIndex;Module["_emscripten_glGetUniformIndices"]=_emscripten_glGetUniformIndices;Module["_emscripten_glGetUniformLocation"]=_emscripten_glGetUniformLocation;Module["jstoi_q"]=jstoi_q;Module["webglPrepareUniformLocationsBeforeFirstUse"]=webglPrepareUniformLocationsBeforeFirstUse;Module["webglGetLeftBracePos"]=webglGetLeftBracePos;Module["_emscripten_glGetUniformfv"]=_emscripten_glGetUniformfv;Module["emscriptenWebGLGetUniform"]=emscriptenWebGLGetUniform;Module["webglGetUniformLocation"]=webglGetUniformLocation;Module["_emscripten_glGetUniformiv"]=_emscripten_glGetUniformiv;Module["_emscripten_glGetUniformuiv"]=_emscripten_glGetUniformuiv;Module["_emscripten_glGetVertexAttribIiv"]=_emscripten_glGetVertexAttribIiv;Module["emscriptenWebGLGetVertexAttrib"]=emscriptenWebGLGetVertexAttrib;Module["_emscripten_glGetVertexAttribIuiv"]=_emscripten_glGetVertexAttribIuiv;Module["_glGetVertexAttribIiv"]=_glGetVertexAttribIiv;Module["_emscripten_glGetVertexAttribPointerv"]=_emscripten_glGetVertexAttribPointerv;Module["_emscripten_glGetVertexAttribfv"]=_emscripten_glGetVertexAttribfv;Module["_emscripten_glGetVertexAttribiv"]=_emscripten_glGetVertexAttribiv;Module["_emscripten_glHint"]=_emscripten_glHint;Module["_emscripten_glInvalidateFramebuffer"]=_emscripten_glInvalidateFramebuffer;Module["_emscripten_glInvalidateSubFramebuffer"]=_emscripten_glInvalidateSubFramebuffer;Module["_emscripten_glIsBuffer"]=_emscripten_glIsBuffer;Module["_emscripten_glIsEnabled"]=_emscripten_glIsEnabled;Module["_emscripten_glIsFramebuffer"]=_emscripten_glIsFramebuffer;Module["_emscripten_glIsProgram"]=_emscripten_glIsProgram;Module["_emscripten_glIsQuery"]=_emscripten_glIsQuery;Module["_emscripten_glIsQueryEXT"]=_emscripten_glIsQueryEXT;Module["_emscripten_glIsRenderbuffer"]=_emscripten_glIsRenderbuffer;Module["_emscripten_glIsSampler"]=_emscripten_glIsSampler;Module["_emscripten_glIsShader"]=_emscripten_glIsShader;Module["_emscripten_glIsSync"]=_emscripten_glIsSync;Module["_emscripten_glIsTexture"]=_emscripten_glIsTexture;Module["_emscripten_glIsTransformFeedback"]=_emscripten_glIsTransformFeedback;Module["_emscripten_glIsVertexArray"]=_emscripten_glIsVertexArray;Module["_emscripten_glIsVertexArrayOES"]=_emscripten_glIsVertexArrayOES;Module["_glIsVertexArray"]=_glIsVertexArray;Module["_emscripten_glLineWidth"]=_emscripten_glLineWidth;Module["_emscripten_glLinkProgram"]=_emscripten_glLinkProgram;Module["_emscripten_glPauseTransformFeedback"]=_emscripten_glPauseTransformFeedback;Module["_emscripten_glPixelStorei"]=_emscripten_glPixelStorei;Module["_emscripten_glPolygonModeWEBGL"]=_emscripten_glPolygonModeWEBGL;Module["_emscripten_glPolygonOffset"]=_emscripten_glPolygonOffset;Module["_emscripten_glPolygonOffsetClampEXT"]=_emscripten_glPolygonOffsetClampEXT;Module["_emscripten_glProgramBinary"]=_emscripten_glProgramBinary;Module["_emscripten_glProgramParameteri"]=_emscripten_glProgramParameteri;Module["_emscripten_glQueryCounterEXT"]=_emscripten_glQueryCounterEXT;Module["_emscripten_glReadBuffer"]=_emscripten_glReadBuffer;Module["_emscripten_glReadPixels"]=_emscripten_glReadPixels;Module["emscriptenWebGLGetTexPixelData"]=emscriptenWebGLGetTexPixelData;Module["computeUnpackAlignedImageSize"]=computeUnpackAlignedImageSize;Module["colorChannelsInGlTextureFormat"]=colorChannelsInGlTextureFormat;Module["heapObjectForWebGLType"]=heapObjectForWebGLType;Module["toTypedArrayIndex"]=toTypedArrayIndex;Module["_emscripten_glReleaseShaderCompiler"]=_emscripten_glReleaseShaderCompiler;Module["_emscripten_glRenderbufferStorage"]=_emscripten_glRenderbufferStorage;Module["_emscripten_glRenderbufferStorageMultisample"]=_emscripten_glRenderbufferStorageMultisample;Module["_emscripten_glResumeTransformFeedback"]=_emscripten_glResumeTransformFeedback;Module["_emscripten_glSampleCoverage"]=_emscripten_glSampleCoverage;Module["_emscripten_glSamplerParameterf"]=_emscripten_glSamplerParameterf;Module["_emscripten_glSamplerParameterfv"]=_emscripten_glSamplerParameterfv;Module["_emscripten_glSamplerParameteri"]=_emscripten_glSamplerParameteri;Module["_emscripten_glSamplerParameteriv"]=_emscripten_glSamplerParameteriv;Module["_emscripten_glScissor"]=_emscripten_glScissor;Module["_emscripten_glShaderBinary"]=_emscripten_glShaderBinary;Module["_emscripten_glShaderSource"]=_emscripten_glShaderSource;Module["_emscripten_glStencilFunc"]=_emscripten_glStencilFunc;Module["_emscripten_glStencilFuncSeparate"]=_emscripten_glStencilFuncSeparate;Module["_emscripten_glStencilMask"]=_emscripten_glStencilMask;Module["_emscripten_glStencilMaskSeparate"]=_emscripten_glStencilMaskSeparate;Module["_emscripten_glStencilOp"]=_emscripten_glStencilOp;Module["_emscripten_glStencilOpSeparate"]=_emscripten_glStencilOpSeparate;Module["_emscripten_glTexImage2D"]=_emscripten_glTexImage2D;Module["_emscripten_glTexImage3D"]=_emscripten_glTexImage3D;Module["_emscripten_glTexParameterf"]=_emscripten_glTexParameterf;Module["_emscripten_glTexParameterfv"]=_emscripten_glTexParameterfv;Module["_emscripten_glTexParameteri"]=_emscripten_glTexParameteri;Module["_emscripten_glTexParameteriv"]=_emscripten_glTexParameteriv;Module["_emscripten_glTexStorage2D"]=_emscripten_glTexStorage2D;Module["_emscripten_glTexStorage3D"]=_emscripten_glTexStorage3D;Module["_emscripten_glTexSubImage2D"]=_emscripten_glTexSubImage2D;Module["_emscripten_glTexSubImage3D"]=_emscripten_glTexSubImage3D;Module["_emscripten_glTransformFeedbackVaryings"]=_emscripten_glTransformFeedbackVaryings;Module["_emscripten_glUniform1f"]=_emscripten_glUniform1f;Module["_emscripten_glUniform1fv"]=_emscripten_glUniform1fv;Module["miniTempWebGLFloatBuffers"]=miniTempWebGLFloatBuffers;Module["_emscripten_glUniform1i"]=_emscripten_glUniform1i;Module["_emscripten_glUniform1iv"]=_emscripten_glUniform1iv;Module["miniTempWebGLIntBuffers"]=miniTempWebGLIntBuffers;Module["_emscripten_glUniform1ui"]=_emscripten_glUniform1ui;Module["_emscripten_glUniform1uiv"]=_emscripten_glUniform1uiv;Module["_emscripten_glUniform2f"]=_emscripten_glUniform2f;Module["_emscripten_glUniform2fv"]=_emscripten_glUniform2fv;Module["_emscripten_glUniform2i"]=_emscripten_glUniform2i;Module["_emscripten_glUniform2iv"]=_emscripten_glUniform2iv;Module["_emscripten_glUniform2ui"]=_emscripten_glUniform2ui;Module["_emscripten_glUniform2uiv"]=_emscripten_glUniform2uiv;Module["_emscripten_glUniform3f"]=_emscripten_glUniform3f;Module["_emscripten_glUniform3fv"]=_emscripten_glUniform3fv;Module["_emscripten_glUniform3i"]=_emscripten_glUniform3i;Module["_emscripten_glUniform3iv"]=_emscripten_glUniform3iv;Module["_emscripten_glUniform3ui"]=_emscripten_glUniform3ui;Module["_emscripten_glUniform3uiv"]=_emscripten_glUniform3uiv;Module["_emscripten_glUniform4f"]=_emscripten_glUniform4f;Module["_emscripten_glUniform4fv"]=_emscripten_glUniform4fv;Module["_emscripten_glUniform4i"]=_emscripten_glUniform4i;Module["_emscripten_glUniform4iv"]=_emscripten_glUniform4iv;Module["_emscripten_glUniform4ui"]=_emscripten_glUniform4ui;Module["_emscripten_glUniform4uiv"]=_emscripten_glUniform4uiv;Module["_emscripten_glUniformBlockBinding"]=_emscripten_glUniformBlockBinding;Module["_emscripten_glUniformMatrix2fv"]=_emscripten_glUniformMatrix2fv;Module["_emscripten_glUniformMatrix2x3fv"]=_emscripten_glUniformMatrix2x3fv;Module["_emscripten_glUniformMatrix2x4fv"]=_emscripten_glUniformMatrix2x4fv;Module["_emscripten_glUniformMatrix3fv"]=_emscripten_glUniformMatrix3fv;Module["_emscripten_glUniformMatrix3x2fv"]=_emscripten_glUniformMatrix3x2fv;Module["_emscripten_glUniformMatrix3x4fv"]=_emscripten_glUniformMatrix3x4fv;Module["_emscripten_glUniformMatrix4fv"]=_emscripten_glUniformMatrix4fv;Module["_emscripten_glUniformMatrix4x2fv"]=_emscripten_glUniformMatrix4x2fv;Module["_emscripten_glUniformMatrix4x3fv"]=_emscripten_glUniformMatrix4x3fv;Module["_emscripten_glUseProgram"]=_emscripten_glUseProgram;Module["_emscripten_glValidateProgram"]=_emscripten_glValidateProgram;Module["_emscripten_glVertexAttrib1f"]=_emscripten_glVertexAttrib1f;Module["_emscripten_glVertexAttrib1fv"]=_emscripten_glVertexAttrib1fv;Module["_emscripten_glVertexAttrib2f"]=_emscripten_glVertexAttrib2f;Module["_emscripten_glVertexAttrib2fv"]=_emscripten_glVertexAttrib2fv;Module["_emscripten_glVertexAttrib3f"]=_emscripten_glVertexAttrib3f;Module["_emscripten_glVertexAttrib3fv"]=_emscripten_glVertexAttrib3fv;Module["_emscripten_glVertexAttrib4f"]=_emscripten_glVertexAttrib4f;Module["_emscripten_glVertexAttrib4fv"]=_emscripten_glVertexAttrib4fv;Module["_emscripten_glVertexAttribDivisor"]=_emscripten_glVertexAttribDivisor;Module["_emscripten_glVertexAttribDivisorANGLE"]=_emscripten_glVertexAttribDivisorANGLE;Module["_glVertexAttribDivisor"]=_glVertexAttribDivisor;Module["_emscripten_glVertexAttribDivisorARB"]=_emscripten_glVertexAttribDivisorARB;Module["_emscripten_glVertexAttribDivisorEXT"]=_emscripten_glVertexAttribDivisorEXT;Module["_emscripten_glVertexAttribDivisorNV"]=_emscripten_glVertexAttribDivisorNV;Module["_emscripten_glVertexAttribI4i"]=_emscripten_glVertexAttribI4i;Module["_emscripten_glVertexAttribI4iv"]=_emscripten_glVertexAttribI4iv;Module["_emscripten_glVertexAttribI4ui"]=_emscripten_glVertexAttribI4ui;Module["_emscripten_glVertexAttribI4uiv"]=_emscripten_glVertexAttribI4uiv;Module["_emscripten_glVertexAttribIPointer"]=_emscripten_glVertexAttribIPointer;Module["_emscripten_glVertexAttribPointer"]=_emscripten_glVertexAttribPointer;Module["_emscripten_glViewport"]=_emscripten_glViewport;Module["_emscripten_glWaitSync"]=_emscripten_glWaitSync;Module["_emscripten_out"]=_emscripten_out;Module["_emscripten_promise_create"]=_emscripten_promise_create;Module["makePromise"]=makePromise;Module["promiseMap"]=promiseMap;Module["HandleAllocator"]=HandleAllocator;Module["_emscripten_promise_destroy"]=_emscripten_promise_destroy;Module["_emscripten_promise_resolve"]=_emscripten_promise_resolve;Module["getPromise"]=getPromise;Module["_emscripten_resize_heap"]=_emscripten_resize_heap;Module["growMemory"]=growMemory;Module["_emscripten_runtime_keepalive_pop"]=_emscripten_runtime_keepalive_pop;Module["_emscripten_runtime_keepalive_push"]=_emscripten_runtime_keepalive_push;Module["_environ_get"]=_environ_get;Module["getEnvStrings"]=getEnvStrings;Module["ENV"]=ENV;Module["_environ_sizes_get"]=_environ_sizes_get;Module["_fd_close"]=_fd_close;Module["_fd_fdstat_get"]=_fd_fdstat_get;Module["_fd_pread"]=_fd_pread;Module["doReadv"]=doReadv;Module["_fd_pwrite"]=_fd_pwrite;Module["doWritev"]=doWritev;Module["_fd_read"]=_fd_read;Module["_fd_seek"]=_fd_seek;Module["_fd_sync"]=_fd_sync;Module["_fd_write"]=_fd_write;Module["_getaddrinfo"]=_getaddrinfo;Module["_getnameinfo"]=_getnameinfo;Module["_getprotobyname"]=_getprotobyname;Module["_setprotoent"]=_setprotoent;Module["Protocols"]=Protocols;Module["stringToAscii"]=stringToAscii;Module["_random_get"]=_random_get;Module["_stackAlloc"]=_stackAlloc;Module["_stackRestore"]=_stackRestore;Module["_stackSave"]=_stackSave;Module["FS_createPath"]=FS_createPath;Module["FS_unlink"]=FS_unlink;Module["FS_createLazyFile"]=FS_createLazyFile;Module["FS_createDevice"]=FS_createDevice;Module["writeI53ToI64Clamped"]=writeI53ToI64Clamped;Module["writeI53ToI64Signaling"]=writeI53ToI64Signaling;Module["writeI53ToU64Clamped"]=writeI53ToU64Clamped;Module["writeI53ToU64Signaling"]=writeI53ToU64Signaling;Module["readI53FromU64"]=readI53FromU64;Module["convertI32PairToI53"]=convertI32PairToI53;Module["convertI32PairToI53Checked"]=convertI32PairToI53Checked;Module["convertU32PairToI53"]=convertU32PairToI53;Module["getTempRet0"]=getTempRet0;Module["setTempRet0"]=setTempRet0;Module["ptrToString"]=ptrToString;Module["_emscripten_notify_memory_growth"]=_emscripten_notify_memory_growth;Module["strError"]=strError;Module["_endprotoent"]=_endprotoent;Module["_getprotoent"]=_getprotoent;Module["_getprotobynumber"]=_getprotobynumber;Module["Sockets"]=Sockets;Module["_emscripten_run_script"]=_emscripten_run_script;Module["_emscripten_run_script_int"]=_emscripten_run_script_int;Module["_emscripten_run_script_string"]=_emscripten_run_script_string;Module["_emscripten_random"]=_emscripten_random;Module["_emscripten_performance_now"]=_emscripten_performance_now;Module["__emscripten_get_now_is_monotonic"]=__emscripten_get_now_is_monotonic;Module["warnOnce"]=warnOnce;Module["_emscripten_get_compiler_setting"]=_emscripten_get_compiler_setting;Module["_emscripten_has_asyncify"]=_emscripten_has_asyncify;Module["_emscripten_print_double"]=_emscripten_print_double;Module["_emscripten_asm_const_double"]=_emscripten_asm_const_double;Module["_emscripten_asm_const_ptr"]=_emscripten_asm_const_ptr;Module["runMainThreadEmAsm"]=runMainThreadEmAsm;Module["_emscripten_asm_const_int_sync_on_main_thread"]=_emscripten_asm_const_int_sync_on_main_thread;Module["_emscripten_asm_const_ptr_sync_on_main_thread"]=_emscripten_asm_const_ptr_sync_on_main_thread;Module["_emscripten_asm_const_double_sync_on_main_thread"]=_emscripten_asm_const_double_sync_on_main_thread;Module["_emscripten_asm_const_async_on_main_thread"]=_emscripten_asm_const_async_on_main_thread;Module["__Unwind_Backtrace"]=__Unwind_Backtrace;Module["__Unwind_GetIPInfo"]=__Unwind_GetIPInfo;Module["__Unwind_FindEnclosingFunction"]=__Unwind_FindEnclosingFunction;Module["autoResumeAudioContext"]=autoResumeAudioContext;Module["getDynCaller"]=getDynCaller;Module["dynCall"]=dynCall;Module["_emscripten_exit_with_live_runtime"]=_emscripten_exit_with_live_runtime;Module["_emscripten_force_exit"]=_emscripten_force_exit;Module["_emscripten_outn"]=_emscripten_outn;Module["_emscripten_errn"]=_emscripten_errn;Module["_emscripten_throw_number"]=_emscripten_throw_number;Module["_emscripten_throw_string"]=_emscripten_throw_string;Module["_emscripten_runtime_keepalive_check"]=_emscripten_runtime_keepalive_check;Module["asmjsMangle"]=asmjsMangle;Module["__emscripten_fs_load_embedded_files"]=__emscripten_fs_load_embedded_files;Module["onInits"]=onInits;Module["addOnInit"]=addOnInit;Module["onMains"]=onMains;Module["addOnPreMain"]=addOnPreMain;Module["onExits"]=onExits;Module["addOnExit"]=addOnExit;Module["STACK_SIZE"]=STACK_SIZE;Module["STACK_ALIGN"]=STACK_ALIGN;Module["POINTER_SIZE"]=POINTER_SIZE;Module["ASSERTIONS"]=ASSERTIONS;Module["getCFunc"]=getCFunc;Module["ccall"]=ccall;Module["writeArrayToMemory"]=writeArrayToMemory;Module["cwrap"]=cwrap;Module["removeFunction"]=removeFunction;Module["_emscripten_math_cbrt"]=_emscripten_math_cbrt;Module["_emscripten_math_pow"]=_emscripten_math_pow;Module["_emscripten_math_random"]=_emscripten_math_random;Module["_emscripten_math_sign"]=_emscripten_math_sign;Module["_emscripten_math_sqrt"]=_emscripten_math_sqrt;Module["_emscripten_math_exp"]=_emscripten_math_exp;Module["_emscripten_math_expm1"]=_emscripten_math_expm1;Module["_emscripten_math_fmod"]=_emscripten_math_fmod;Module["_emscripten_math_log"]=_emscripten_math_log;Module["_emscripten_math_log1p"]=_emscripten_math_log1p;Module["_emscripten_math_log10"]=_emscripten_math_log10;Module["_emscripten_math_log2"]=_emscripten_math_log2;Module["_emscripten_math_round"]=_emscripten_math_round;Module["_emscripten_math_acos"]=_emscripten_math_acos;Module["_emscripten_math_acosh"]=_emscripten_math_acosh;Module["_emscripten_math_asin"]=_emscripten_math_asin;Module["_emscripten_math_asinh"]=_emscripten_math_asinh;Module["_emscripten_math_atan"]=_emscripten_math_atan;Module["_emscripten_math_atanh"]=_emscripten_math_atanh;Module["_emscripten_math_atan2"]=_emscripten_math_atan2;Module["_emscripten_math_cos"]=_emscripten_math_cos;Module["_emscripten_math_cosh"]=_emscripten_math_cosh;Module["_emscripten_math_hypot"]=_emscripten_math_hypot;Module["_emscripten_math_sin"]=_emscripten_math_sin;Module["_emscripten_math_sinh"]=_emscripten_math_sinh;Module["_emscripten_math_tan"]=_emscripten_math_tan;Module["_emscripten_math_tanh"]=_emscripten_math_tanh;Module["intArrayToString"]=intArrayToString;Module["AsciiToString"]=AsciiToString;Module["UTF16Decoder"]=UTF16Decoder;Module["UTF16ToString"]=UTF16ToString;Module["stringToUTF16"]=stringToUTF16;Module["lengthBytesUTF16"]=lengthBytesUTF16;Module["UTF32ToString"]=UTF32ToString;Module["stringToUTF32"]=stringToUTF32;Module["lengthBytesUTF32"]=lengthBytesUTF32;Module["JSEvents"]=JSEvents;Module["getFullscreenElement"]=getFullscreenElement;Module["registerKeyEventCallback"]=registerKeyEventCallback;Module["findEventTarget"]=findEventTarget;Module["maybeCStringToJsString"]=maybeCStringToJsString;Module["specialHTMLTargets"]=specialHTMLTargets;Module["findCanvasEventTarget"]=findCanvasEventTarget;Module["_emscripten_html5_remove_event_listener"]=_emscripten_html5_remove_event_listener;Module["_emscripten_set_keypress_callback_on_thread"]=_emscripten_set_keypress_callback_on_thread;Module["_emscripten_set_keydown_callback_on_thread"]=_emscripten_set_keydown_callback_on_thread;Module["_emscripten_set_keyup_callback_on_thread"]=_emscripten_set_keyup_callback_on_thread;Module["getBoundingClientRect"]=getBoundingClientRect;Module["fillMouseEventData"]=fillMouseEventData;Module["registerMouseEventCallback"]=registerMouseEventCallback;Module["_emscripten_set_click_callback_on_thread"]=_emscripten_set_click_callback_on_thread;Module["_emscripten_set_mousedown_callback_on_thread"]=_emscripten_set_mousedown_callback_on_thread;Module["_emscripten_set_mouseup_callback_on_thread"]=_emscripten_set_mouseup_callback_on_thread;Module["_emscripten_set_dblclick_callback_on_thread"]=_emscripten_set_dblclick_callback_on_thread;Module["_emscripten_set_mousemove_callback_on_thread"]=_emscripten_set_mousemove_callback_on_thread;Module["_emscripten_set_mouseenter_callback_on_thread"]=_emscripten_set_mouseenter_callback_on_thread;Module["_emscripten_set_mouseleave_callback_on_thread"]=_emscripten_set_mouseleave_callback_on_thread;Module["_emscripten_set_mouseover_callback_on_thread"]=_emscripten_set_mouseover_callback_on_thread;Module["_emscripten_set_mouseout_callback_on_thread"]=_emscripten_set_mouseout_callback_on_thread;Module["__emscripten_get_last_mouse_event"]=__emscripten_get_last_mouse_event;Module["registerWheelEventCallback"]=registerWheelEventCallback;Module["_emscripten_set_wheel_callback_on_thread"]=_emscripten_set_wheel_callback_on_thread;Module["registerUiEventCallback"]=registerUiEventCallback;Module["_emscripten_set_resize_callback_on_thread"]=_emscripten_set_resize_callback_on_thread;Module["_emscripten_set_scroll_callback_on_thread"]=_emscripten_set_scroll_callback_on_thread;Module["registerFocusEventCallback"]=registerFocusEventCallback;Module["_emscripten_set_blur_callback_on_thread"]=_emscripten_set_blur_callback_on_thread;Module["_emscripten_set_focus_callback_on_thread"]=_emscripten_set_focus_callback_on_thread;Module["_emscripten_set_focusin_callback_on_thread"]=_emscripten_set_focusin_callback_on_thread;Module["_emscripten_set_focusout_callback_on_thread"]=_emscripten_set_focusout_callback_on_thread;Module["fillDeviceOrientationEventData"]=fillDeviceOrientationEventData;Module["registerDeviceOrientationEventCallback"]=registerDeviceOrientationEventCallback;Module["_emscripten_set_deviceorientation_callback_on_thread"]=_emscripten_set_deviceorientation_callback_on_thread;Module["__emscripten_get_last_deviceorientation_event"]=__emscripten_get_last_deviceorientation_event;Module["fillDeviceMotionEventData"]=fillDeviceMotionEventData;Module["registerDeviceMotionEventCallback"]=registerDeviceMotionEventCallback;Module["_emscripten_set_devicemotion_callback_on_thread"]=_emscripten_set_devicemotion_callback_on_thread;Module["__emscripten_get_last_devicemotion_event"]=__emscripten_get_last_devicemotion_event;Module["screenOrientation"]=screenOrientation;Module["fillOrientationChangeEventData"]=fillOrientationChangeEventData;Module["registerOrientationChangeEventCallback"]=registerOrientationChangeEventCallback;Module["_emscripten_set_orientationchange_callback_on_thread"]=_emscripten_set_orientationchange_callback_on_thread;Module["_emscripten_get_orientation_status"]=_emscripten_get_orientation_status;Module["_emscripten_lock_orientation"]=_emscripten_lock_orientation;Module["_emscripten_unlock_orientation"]=_emscripten_unlock_orientation;Module["fillFullscreenChangeEventData"]=fillFullscreenChangeEventData;Module["registerFullscreenChangeEventCallback"]=registerFullscreenChangeEventCallback;Module["_emscripten_set_fullscreenchange_callback_on_thread"]=_emscripten_set_fullscreenchange_callback_on_thread;Module["_emscripten_get_fullscreen_status"]=_emscripten_get_fullscreen_status;Module["JSEvents_requestFullscreen"]=JSEvents_requestFullscreen;Module["JSEvents_resizeCanvasForFullscreen"]=JSEvents_resizeCanvasForFullscreen;Module["registerRestoreOldStyle"]=registerRestoreOldStyle;Module["getCanvasElementSize"]=getCanvasElementSize;Module["_emscripten_get_canvas_element_size"]=_emscripten_get_canvas_element_size;Module["setCanvasElementSize"]=setCanvasElementSize;Module["_emscripten_set_canvas_element_size"]=_emscripten_set_canvas_element_size;Module["currentFullscreenStrategy"]=currentFullscreenStrategy;Module["setLetterbox"]=setLetterbox;Module["hideEverythingExceptGivenElement"]=hideEverythingExceptGivenElement;Module["restoreHiddenElements"]=restoreHiddenElements;Module["restoreOldWindowedStyle"]=restoreOldWindowedStyle;Module["softFullscreenResizeWebGLRenderTarget"]=softFullscreenResizeWebGLRenderTarget;Module["doRequestFullscreen"]=doRequestFullscreen;Module["_emscripten_request_fullscreen"]=_emscripten_request_fullscreen;Module["_emscripten_request_fullscreen_strategy"]=_emscripten_request_fullscreen_strategy;Module["_emscripten_enter_soft_fullscreen"]=_emscripten_enter_soft_fullscreen;Module["_emscripten_exit_soft_fullscreen"]=_emscripten_exit_soft_fullscreen;Module["_emscripten_exit_fullscreen"]=_emscripten_exit_fullscreen;Module["fillPointerlockChangeEventData"]=fillPointerlockChangeEventData;Module["registerPointerlockChangeEventCallback"]=registerPointerlockChangeEventCallback;Module["_emscripten_set_pointerlockchange_callback_on_thread"]=_emscripten_set_pointerlockchange_callback_on_thread;Module["registerPointerlockErrorEventCallback"]=registerPointerlockErrorEventCallback;Module["_emscripten_set_pointerlockerror_callback_on_thread"]=_emscripten_set_pointerlockerror_callback_on_thread;Module["_emscripten_get_pointerlock_status"]=_emscripten_get_pointerlock_status;Module["requestPointerLock"]=requestPointerLock;Module["_emscripten_request_pointerlock"]=_emscripten_request_pointerlock;Module["_emscripten_exit_pointerlock"]=_emscripten_exit_pointerlock;Module["_emscripten_vibrate"]=_emscripten_vibrate;Module["_emscripten_vibrate_pattern"]=_emscripten_vibrate_pattern;Module["fillVisibilityChangeEventData"]=fillVisibilityChangeEventData;Module["registerVisibilityChangeEventCallback"]=registerVisibilityChangeEventCallback;Module["_emscripten_set_visibilitychange_callback_on_thread"]=_emscripten_set_visibilitychange_callback_on_thread;Module["_emscripten_get_visibility_status"]=_emscripten_get_visibility_status;Module["registerTouchEventCallback"]=registerTouchEventCallback;Module["_emscripten_set_touchstart_callback_on_thread"]=_emscripten_set_touchstart_callback_on_thread;Module["_emscripten_set_touchend_callback_on_thread"]=_emscripten_set_touchend_callback_on_thread;Module["_emscripten_set_touchmove_callback_on_thread"]=_emscripten_set_touchmove_callback_on_thread;Module["_emscripten_set_touchcancel_callback_on_thread"]=_emscripten_set_touchcancel_callback_on_thread;Module["fillGamepadEventData"]=fillGamepadEventData;Module["registerGamepadEventCallback"]=registerGamepadEventCallback;Module["_emscripten_set_gamepadconnected_callback_on_thread"]=_emscripten_set_gamepadconnected_callback_on_thread;Module["_emscripten_sample_gamepad_data"]=_emscripten_sample_gamepad_data;Module["_emscripten_set_gamepaddisconnected_callback_on_thread"]=_emscripten_set_gamepaddisconnected_callback_on_thread;Module["_emscripten_get_num_gamepads"]=_emscripten_get_num_gamepads;Module["_emscripten_get_gamepad_status"]=_emscripten_get_gamepad_status;Module["registerBeforeUnloadEventCallback"]=registerBeforeUnloadEventCallback;Module["_emscripten_set_beforeunload_callback_on_thread"]=_emscripten_set_beforeunload_callback_on_thread;Module["fillBatteryEventData"]=fillBatteryEventData;Module["hasBatteryAPI"]=hasBatteryAPI;Module["registerBatteryEventCallback"]=registerBatteryEventCallback;Module["_emscripten_set_batterychargingchange_callback_on_thread"]=_emscripten_set_batterychargingchange_callback_on_thread;Module["_emscripten_set_batterylevelchange_callback_on_thread"]=_emscripten_set_batterylevelchange_callback_on_thread;Module["batteryManager"]=batteryManager;Module["_emscripten_get_battery_status"]=_emscripten_get_battery_status;Module["_emscripten_set_element_css_size"]=_emscripten_set_element_css_size;Module["_emscripten_get_element_css_size"]=_emscripten_get_element_css_size;Module["_emscripten_html5_remove_all_event_listeners"]=_emscripten_html5_remove_all_event_listeners;Module["_emscripten_request_animation_frame"]=_emscripten_request_animation_frame;Module["_emscripten_cancel_animation_frame"]=_emscripten_cancel_animation_frame;Module["_emscripten_request_animation_frame_loop"]=_emscripten_request_animation_frame_loop;Module["_emscripten_get_device_pixel_ratio"]=_emscripten_get_device_pixel_ratio;Module["_emscripten_get_callstack"]=_emscripten_get_callstack;Module["convertFrameToPC"]=convertFrameToPC;Module["_emscripten_return_address"]=_emscripten_return_address;Module["UNWIND_CACHE"]=UNWIND_CACHE;Module["_emscripten_stack_snapshot"]=_emscripten_stack_snapshot;Module["saveInUnwindCache"]=saveInUnwindCache;Module["_emscripten_stack_unwind_buffer"]=_emscripten_stack_unwind_buffer;Module["_emscripten_pc_get_function"]=_emscripten_pc_get_function;Module["convertPCtoSourceLocation"]=convertPCtoSourceLocation;Module["_emscripten_pc_get_file"]=_emscripten_pc_get_file;Module["_emscripten_pc_get_line"]=_emscripten_pc_get_line;Module["_emscripten_pc_get_column"]=_emscripten_pc_get_column;Module["wasiRightsToMuslOFlags"]=wasiRightsToMuslOFlags;Module["wasiOFlagsToMuslOFlags"]=wasiOFlagsToMuslOFlags;Module["_emscripten_unwind_to_js_event_loop"]=_emscripten_unwind_to_js_event_loop;Module["safeSetTimeout"]=safeSetTimeout;Module["setImmediateWrapped"]=setImmediateWrapped;Module["safeRequestAnimationFrame"]=safeRequestAnimationFrame;Module["MainLoop"]=MainLoop;Module["setMainLoop"]=setMainLoop;Module["_emscripten_set_main_loop_timing"]=_emscripten_set_main_loop_timing;Module["clearImmediateWrapped"]=clearImmediateWrapped;Module["emSetImmediate"]=emSetImmediate;Module["emClearImmediate"]=emClearImmediate;Module["emClearImmediate_deps"]=emClearImmediate_deps;Module["_emscripten_set_immediate"]=_emscripten_set_immediate;Module["_emscripten_clear_immediate"]=_emscripten_clear_immediate;Module["_emscripten_set_immediate_loop"]=_emscripten_set_immediate_loop;Module["_emscripten_set_timeout"]=_emscripten_set_timeout;Module["_emscripten_clear_timeout"]=_emscripten_clear_timeout;Module["_emscripten_set_timeout_loop"]=_emscripten_set_timeout_loop;Module["_emscripten_set_interval"]=_emscripten_set_interval;Module["_emscripten_clear_interval"]=_emscripten_clear_interval;Module["_emscripten_async_call"]=_emscripten_async_call;Module["registerPostMainLoop"]=registerPostMainLoop;Module["registerPreMainLoop"]=registerPreMainLoop;Module["_emscripten_get_main_loop_timing"]=_emscripten_get_main_loop_timing;Module["_emscripten_set_main_loop"]=_emscripten_set_main_loop;Module["_emscripten_set_main_loop_arg"]=_emscripten_set_main_loop_arg;Module["_emscripten_cancel_main_loop"]=_emscripten_cancel_main_loop;Module["_emscripten_pause_main_loop"]=_emscripten_pause_main_loop;Module["_emscripten_resume_main_loop"]=_emscripten_resume_main_loop;Module["__emscripten_push_main_loop_blocker"]=__emscripten_push_main_loop_blocker;Module["__emscripten_push_uncounted_main_loop_blocker"]=__emscripten_push_uncounted_main_loop_blocker;Module["_emscripten_set_main_loop_expected_blockers"]=_emscripten_set_main_loop_expected_blockers;Module["idsToPromises"]=idsToPromises;Module["makePromiseCallback"]=makePromiseCallback;Module["_emscripten_promise_then"]=_emscripten_promise_then;Module["_emscripten_promise_all"]=_emscripten_promise_all;Module["setPromiseResult"]=setPromiseResult;Module["_emscripten_promise_all_settled"]=_emscripten_promise_all_settled;Module["_emscripten_promise_any"]=_emscripten_promise_any;Module["_emscripten_promise_race"]=_emscripten_promise_race;Module["_emscripten_promise_await"]=_emscripten_promise_await;Module["getExceptionMessageCommon"]=getExceptionMessageCommon;Module["getCppExceptionTag"]=getCppExceptionTag;Module["getCppExceptionThrownObjectFromWebAssemblyException"]=getCppExceptionThrownObjectFromWebAssemblyException;Module["incrementExceptionRefcount"]=incrementExceptionRefcount;Module["decrementExceptionRefcount"]=decrementExceptionRefcount;Module["getExceptionMessage"]=getExceptionMessage;Module["Browser"]=Browser;Module["requestFullscreen"]=requestFullscreen;Module["setCanvasSize"]=setCanvasSize;Module["getUserMedia"]=getUserMedia;Module["createContext"]=createContext;Module["_emscripten_run_preload_plugins"]=_emscripten_run_preload_plugins;Module["Browser_asyncPrepareDataCounter"]=Browser_asyncPrepareDataCounter;Module["_emscripten_run_preload_plugins_data"]=_emscripten_run_preload_plugins_data;Module["_emscripten_async_run_script"]=_emscripten_async_run_script;Module["_emscripten_async_load_script"]=_emscripten_async_load_script;Module["_emscripten_get_window_title"]=_emscripten_get_window_title;Module["_emscripten_set_window_title"]=_emscripten_set_window_title;Module["_emscripten_get_screen_size"]=_emscripten_get_screen_size;Module["_emscripten_hide_mouse"]=_emscripten_hide_mouse;Module["_emscripten_set_canvas_size"]=_emscripten_set_canvas_size;Module["_emscripten_get_canvas_size"]=_emscripten_get_canvas_size;Module["_emscripten_create_worker"]=_emscripten_create_worker;Module["_emscripten_destroy_worker"]=_emscripten_destroy_worker;Module["_emscripten_call_worker"]=_emscripten_call_worker;Module["_emscripten_get_worker_queue_size"]=_emscripten_get_worker_queue_size;Module["_emscripten_get_preloaded_image_data"]=_emscripten_get_preloaded_image_data;Module["getPreloadedImageData"]=getPreloadedImageData;Module["getPreloadedImageData__data"]=getPreloadedImageData__data;Module["_emscripten_get_preloaded_image_data_from_FILE"]=_emscripten_get_preloaded_image_data_from_FILE;Module["wget"]=wget;Module["_emscripten_async_wget"]=_emscripten_async_wget;Module["FS_mkdirTree"]=FS_mkdirTree;Module["_emscripten_async_wget_data"]=_emscripten_async_wget_data;Module["_emscripten_async_wget2"]=_emscripten_async_wget2;Module["_emscripten_async_wget2_data"]=_emscripten_async_wget2_data;Module["_emscripten_async_wget2_abort"]=_emscripten_async_wget2_abort;Module["___asctime_r"]=___asctime_r;Module["MONTH_DAYS_REGULAR"]=MONTH_DAYS_REGULAR;Module["MONTH_DAYS_LEAP"]=MONTH_DAYS_LEAP;Module["arraySum"]=arraySum;Module["addDays"]=addDays;Module["_strptime"]=_strptime;Module["_strptime_l"]=_strptime_l;Module["__dlsym_catchup_js"]=__dlsym_catchup_js;Module["FS_readFile"]=FS_readFile;Module["FS_root"]=FS_root;Module["FS_mounts"]=FS_mounts;Module["FS_devices"]=FS_devices;Module["FS_streams"]=FS_streams;Module["FS_nextInode"]=FS_nextInode;Module["FS_nameTable"]=FS_nameTable;Module["FS_currentPath"]=FS_currentPath;Module["FS_initialized"]=FS_initialized;Module["FS_ignorePermissions"]=FS_ignorePermissions;Module["FS_trackingDelegate"]=FS_trackingDelegate;Module["FS_filesystems"]=FS_filesystems;Module["FS_syncFSRequests"]=FS_syncFSRequests;Module["FS_lookupPath"]=FS_lookupPath;Module["FS_getPath"]=FS_getPath;Module["FS_hashName"]=FS_hashName;Module["FS_hashAddNode"]=FS_hashAddNode;Module["FS_hashRemoveNode"]=FS_hashRemoveNode;Module["FS_lookupNode"]=FS_lookupNode;Module["FS_createNode"]=FS_createNode;Module["FS_destroyNode"]=FS_destroyNode;Module["FS_isRoot"]=FS_isRoot;Module["FS_isMountpoint"]=FS_isMountpoint;Module["FS_isFile"]=FS_isFile;Module["FS_isDir"]=FS_isDir;Module["FS_isLink"]=FS_isLink;Module["FS_isChrdev"]=FS_isChrdev;Module["FS_isBlkdev"]=FS_isBlkdev;Module["FS_isFIFO"]=FS_isFIFO;Module["FS_isSocket"]=FS_isSocket;Module["FS_flagsToPermissionString"]=FS_flagsToPermissionString;Module["FS_nodePermissions"]=FS_nodePermissions;Module["FS_mayLookup"]=FS_mayLookup;Module["FS_mayCreate"]=FS_mayCreate;Module["FS_mayDelete"]=FS_mayDelete;Module["FS_mayOpen"]=FS_mayOpen;Module["FS_checkOpExists"]=FS_checkOpExists;Module["FS_nextfd"]=FS_nextfd;Module["FS_getStreamChecked"]=FS_getStreamChecked;Module["FS_getStream"]=FS_getStream;Module["FS_createStream"]=FS_createStream;Module["FS_closeStream"]=FS_closeStream;Module["FS_dupStream"]=FS_dupStream;Module["FS_doSetAttr"]=FS_doSetAttr;Module["FS_chrdev_stream_ops"]=FS_chrdev_stream_ops;Module["FS_major"]=FS_major;Module["FS_minor"]=FS_minor;Module["FS_makedev"]=FS_makedev;Module["FS_registerDevice"]=FS_registerDevice;Module["FS_getDevice"]=FS_getDevice;Module["FS_getMounts"]=FS_getMounts;Module["FS_syncfs"]=FS_syncfs;Module["FS_mount"]=FS_mount;Module["FS_unmount"]=FS_unmount;Module["FS_lookup"]=FS_lookup;Module["FS_mknod"]=FS_mknod;Module["FS_statfs"]=FS_statfs;Module["FS_statfsStream"]=FS_statfsStream;Module["FS_statfsNode"]=FS_statfsNode;Module["FS_create"]=FS_create;Module["FS_mkdir"]=FS_mkdir;Module["FS_mkdev"]=FS_mkdev;Module["FS_symlink"]=FS_symlink;Module["FS_rename"]=FS_rename;Module["FS_rmdir"]=FS_rmdir;Module["FS_readdir"]=FS_readdir;Module["FS_readlink"]=FS_readlink;Module["FS_stat"]=FS_stat;Module["FS_fstat"]=FS_fstat;Module["FS_lstat"]=FS_lstat;Module["FS_doChmod"]=FS_doChmod;Module["FS_chmod"]=FS_chmod;Module["FS_lchmod"]=FS_lchmod;Module["FS_fchmod"]=FS_fchmod;Module["FS_doChown"]=FS_doChown;Module["FS_chown"]=FS_chown;Module["FS_lchown"]=FS_lchown;Module["FS_fchown"]=FS_fchown;Module["FS_doTruncate"]=FS_doTruncate;Module["FS_truncate"]=FS_truncate;Module["FS_ftruncate"]=FS_ftruncate;Module["FS_utime"]=FS_utime;Module["FS_open"]=FS_open;Module["FS_close"]=FS_close;Module["FS_isClosed"]=FS_isClosed;Module["FS_llseek"]=FS_llseek;Module["FS_read"]=FS_read;Module["FS_write"]=FS_write;Module["FS_mmap"]=FS_mmap;Module["FS_msync"]=FS_msync;Module["FS_ioctl"]=FS_ioctl;Module["FS_writeFile"]=FS_writeFile;Module["FS_cwd"]=FS_cwd;Module["FS_chdir"]=FS_chdir;Module["FS_createDefaultDirectories"]=FS_createDefaultDirectories;Module["FS_createDefaultDevices"]=FS_createDefaultDevices;Module["FS_createSpecialDirectories"]=FS_createSpecialDirectories;Module["FS_createStandardStreams"]=FS_createStandardStreams;Module["FS_staticInit"]=FS_staticInit;Module["FS_init"]=FS_init;Module["FS_quit"]=FS_quit;Module["FS_findObject"]=FS_findObject;Module["FS_analyzePath"]=FS_analyzePath;Module["FS_createFile"]=FS_createFile;Module["FS_forceLoadFile"]=FS_forceLoadFile;Module["_setNetworkCallback"]=_setNetworkCallback;Module["_emscripten_set_socket_error_callback"]=_emscripten_set_socket_error_callback;Module["_emscripten_set_socket_open_callback"]=_emscripten_set_socket_open_callback;Module["_emscripten_set_socket_listen_callback"]=_emscripten_set_socket_listen_callback;Module["_emscripten_set_socket_connection_callback"]=_emscripten_set_socket_connection_callback;Module["_emscripten_set_socket_message_callback"]=_emscripten_set_socket_message_callback;Module["_emscripten_set_socket_close_callback"]=_emscripten_set_socket_close_callback;Module["_emscripten_webgl_enable_ANGLE_instanced_arrays"]=_emscripten_webgl_enable_ANGLE_instanced_arrays;Module["_emscripten_webgl_enable_OES_vertex_array_object"]=_emscripten_webgl_enable_OES_vertex_array_object;Module["_emscripten_webgl_enable_WEBGL_draw_buffers"]=_emscripten_webgl_enable_WEBGL_draw_buffers;Module["_emscripten_webgl_enable_WEBGL_multi_draw"]=_emscripten_webgl_enable_WEBGL_multi_draw;Module["_emscripten_webgl_enable_EXT_polygon_offset_clamp"]=_emscripten_webgl_enable_EXT_polygon_offset_clamp;Module["_emscripten_webgl_enable_EXT_clip_control"]=_emscripten_webgl_enable_EXT_clip_control;Module["_emscripten_webgl_enable_WEBGL_polygon_mode"]=_emscripten_webgl_enable_WEBGL_polygon_mode;Module["_glPixelStorei"]=_glPixelStorei;Module["_glGetString"]=_glGetString;Module["_glGetIntegerv"]=_glGetIntegerv;Module["_glGetFloatv"]=_glGetFloatv;Module["_glGetBooleanv"]=_glGetBooleanv;Module["_glDeleteTextures"]=_glDeleteTextures;Module["_glCompressedTexImage2D"]=_glCompressedTexImage2D;Module["_glCompressedTexSubImage2D"]=_glCompressedTexSubImage2D;Module["_glTexImage2D"]=_glTexImage2D;Module["_glTexSubImage2D"]=_glTexSubImage2D;Module["_glReadPixels"]=_glReadPixels;Module["_glBindTexture"]=_glBindTexture;Module["_glGetTexParameterfv"]=_glGetTexParameterfv;Module["_glGetTexParameteriv"]=_glGetTexParameteriv;Module["_glTexParameterfv"]=_glTexParameterfv;Module["_glTexParameteriv"]=_glTexParameteriv;Module["_glIsTexture"]=_glIsTexture;Module["_glGenBuffers"]=_glGenBuffers;Module["_glGenTextures"]=_glGenTextures;Module["_glDeleteBuffers"]=_glDeleteBuffers;Module["_glGetBufferParameteriv"]=_glGetBufferParameteriv;Module["_glBufferData"]=_glBufferData;Module["_glBufferSubData"]=_glBufferSubData;Module["_glGenQueriesEXT"]=_glGenQueriesEXT;Module["_glDeleteQueriesEXT"]=_glDeleteQueriesEXT;Module["_glIsQueryEXT"]=_glIsQueryEXT;Module["_glBeginQueryEXT"]=_glBeginQueryEXT;Module["_glEndQueryEXT"]=_glEndQueryEXT;Module["_glQueryCounterEXT"]=_glQueryCounterEXT;Module["_glGetQueryivEXT"]=_glGetQueryivEXT;Module["_glGetQueryObjectuivEXT"]=_glGetQueryObjectuivEXT;Module["_glGetQueryObjectui64vEXT"]=_glGetQueryObjectui64vEXT;Module["_glIsBuffer"]=_glIsBuffer;Module["_glGenRenderbuffers"]=_glGenRenderbuffers;Module["_glDeleteRenderbuffers"]=_glDeleteRenderbuffers;Module["_glBindRenderbuffer"]=_glBindRenderbuffer;Module["_glGetRenderbufferParameteriv"]=_glGetRenderbufferParameteriv;Module["_glIsRenderbuffer"]=_glIsRenderbuffer;Module["_glGetUniformfv"]=_glGetUniformfv;Module["_glGetUniformiv"]=_glGetUniformiv;Module["_glGetUniformLocation"]=_glGetUniformLocation;Module["_glGetVertexAttribfv"]=_glGetVertexAttribfv;Module["_glGetVertexAttribiv"]=_glGetVertexAttribiv;Module["_glGetVertexAttribPointerv"]=_glGetVertexAttribPointerv;Module["_glUniform1f"]=_glUniform1f;Module["_glUniform2f"]=_glUniform2f;Module["_glUniform3f"]=_glUniform3f;Module["_glUniform4f"]=_glUniform4f;Module["_glUniform1i"]=_glUniform1i;Module["_glUniform2i"]=_glUniform2i;Module["_glUniform3i"]=_glUniform3i;Module["_glUniform4i"]=_glUniform4i;Module["_glUniform1iv"]=_glUniform1iv;Module["_glUniform2iv"]=_glUniform2iv;Module["_glUniform3iv"]=_glUniform3iv;Module["_glUniform4iv"]=_glUniform4iv;Module["_glUniform1fv"]=_glUniform1fv;Module["_glUniform2fv"]=_glUniform2fv;Module["_glUniform3fv"]=_glUniform3fv;Module["_glUniform4fv"]=_glUniform4fv;Module["_glUniformMatrix2fv"]=_glUniformMatrix2fv;Module["_glUniformMatrix3fv"]=_glUniformMatrix3fv;Module["_glUniformMatrix4fv"]=_glUniformMatrix4fv;Module["_glBindBuffer"]=_glBindBuffer;Module["_glVertexAttrib1fv"]=_glVertexAttrib1fv;Module["_glVertexAttrib2fv"]=_glVertexAttrib2fv;Module["_glVertexAttrib3fv"]=_glVertexAttrib3fv;Module["_glVertexAttrib4fv"]=_glVertexAttrib4fv;Module["_glGetAttribLocation"]=_glGetAttribLocation;Module["_glGetActiveAttrib"]=_glGetActiveAttrib;Module["_glGetActiveUniform"]=_glGetActiveUniform;Module["_glCreateShader"]=_glCreateShader;Module["_glDeleteShader"]=_glDeleteShader;Module["_glGetAttachedShaders"]=_glGetAttachedShaders;Module["_glShaderSource"]=_glShaderSource;Module["_glGetShaderSource"]=_glGetShaderSource;Module["_glCompileShader"]=_glCompileShader;Module["_glGetShaderInfoLog"]=_glGetShaderInfoLog;Module["_glGetShaderiv"]=_glGetShaderiv;Module["_glGetProgramiv"]=_glGetProgramiv;Module["_glIsShader"]=_glIsShader;Module["_glCreateProgram"]=_glCreateProgram;Module["_glDeleteProgram"]=_glDeleteProgram;Module["_glAttachShader"]=_glAttachShader;Module["_glDetachShader"]=_glDetachShader;Module["_glGetShaderPrecisionFormat"]=_glGetShaderPrecisionFormat;Module["_glLinkProgram"]=_glLinkProgram;Module["_glGetProgramInfoLog"]=_glGetProgramInfoLog;Module["_glUseProgram"]=_glUseProgram;Module["_glValidateProgram"]=_glValidateProgram;Module["_glIsProgram"]=_glIsProgram;Module["_glBindAttribLocation"]=_glBindAttribLocation;Module["_glBindFramebuffer"]=_glBindFramebuffer;Module["_glGenFramebuffers"]=_glGenFramebuffers;Module["_glDeleteFramebuffers"]=_glDeleteFramebuffers;Module["_glFramebufferRenderbuffer"]=_glFramebufferRenderbuffer;Module["_glFramebufferTexture2D"]=_glFramebufferTexture2D;Module["_glGetFramebufferAttachmentParameteriv"]=_glGetFramebufferAttachmentParameteriv;Module["_glIsFramebuffer"]=_glIsFramebuffer;Module["_emscripten_glVertexPointer"]=_emscripten_glVertexPointer;Module["_glVertexPointer"]=_glVertexPointer;Module["_emscripten_glMatrixMode"]=_emscripten_glMatrixMode;Module["_glMatrixMode"]=_glMatrixMode;Module["_emscripten_glBegin"]=_emscripten_glBegin;Module["_glBegin"]=_glBegin;Module["_emscripten_glLoadIdentity"]=_emscripten_glLoadIdentity;Module["_glLoadIdentity"]=_glLoadIdentity;Module["_glGenVertexArraysOES"]=_glGenVertexArraysOES;Module["_glDeleteVertexArraysOES"]=_glDeleteVertexArraysOES;Module["_glBindVertexArrayOES"]=_glBindVertexArrayOES;Module["_glIsVertexArrayOES"]=_glIsVertexArrayOES;Module["_glVertexAttribPointer"]=_glVertexAttribPointer;Module["_glEnableVertexAttribArray"]=_glEnableVertexAttribArray;Module["_glDisableVertexAttribArray"]=_glDisableVertexAttribArray;Module["_glDrawArrays"]=_glDrawArrays;Module["_glShaderBinary"]=_glShaderBinary;Module["_glReleaseShaderCompiler"]=_glReleaseShaderCompiler;Module["_glGetError"]=_glGetError;Module["_glVertexAttribDivisorNV"]=_glVertexAttribDivisorNV;Module["_glDrawArraysInstancedNV"]=_glDrawArraysInstancedNV;Module["_glDrawElementsInstancedNV"]=_glDrawElementsInstancedNV;Module["_glVertexAttribDivisorEXT"]=_glVertexAttribDivisorEXT;Module["_glDrawArraysInstancedEXT"]=_glDrawArraysInstancedEXT;Module["_glDrawElementsInstancedEXT"]=_glDrawElementsInstancedEXT;Module["_glVertexAttribDivisorARB"]=_glVertexAttribDivisorARB;Module["_glDrawArraysInstancedARB"]=_glDrawArraysInstancedARB;Module["_glDrawElementsInstancedARB"]=_glDrawElementsInstancedARB;Module["_glVertexAttribDivisorANGLE"]=_glVertexAttribDivisorANGLE;Module["_glDrawArraysInstancedANGLE"]=_glDrawArraysInstancedANGLE;Module["_glDrawElementsInstancedANGLE"]=_glDrawElementsInstancedANGLE;Module["_glDrawBuffersEXT"]=_glDrawBuffersEXT;Module["_glDrawBuffersWEBGL"]=_glDrawBuffersWEBGL;Module["_glColorMask"]=_glColorMask;Module["_glDepthMask"]=_glDepthMask;Module["_glSampleCoverage"]=_glSampleCoverage;Module["_emscripten_glMultiDrawArrays"]=_emscripten_glMultiDrawArrays;Module["_glMultiDrawArraysWEBGL"]=_glMultiDrawArraysWEBGL;Module["_emscripten_glMultiDrawArraysWEBGL"]=_emscripten_glMultiDrawArraysWEBGL;Module["_glMultiDrawArrays"]=_glMultiDrawArrays;Module["_emscripten_glMultiDrawArraysANGLE"]=_emscripten_glMultiDrawArraysANGLE;Module["_glMultiDrawArraysANGLE"]=_glMultiDrawArraysANGLE;Module["_emscripten_glMultiDrawArraysInstancedANGLE"]=_emscripten_glMultiDrawArraysInstancedANGLE;Module["_glMultiDrawArraysInstancedWEBGL"]=_glMultiDrawArraysInstancedWEBGL;Module["_emscripten_glMultiDrawArraysInstancedWEBGL"]=_emscripten_glMultiDrawArraysInstancedWEBGL;Module["_glMultiDrawArraysInstancedANGLE"]=_glMultiDrawArraysInstancedANGLE;Module["_emscripten_glMultiDrawElements"]=_emscripten_glMultiDrawElements;Module["_glMultiDrawElementsWEBGL"]=_glMultiDrawElementsWEBGL;Module["_emscripten_glMultiDrawElementsWEBGL"]=_emscripten_glMultiDrawElementsWEBGL;Module["_glMultiDrawElements"]=_glMultiDrawElements;Module["_emscripten_glMultiDrawElementsANGLE"]=_emscripten_glMultiDrawElementsANGLE;Module["_glMultiDrawElementsANGLE"]=_glMultiDrawElementsANGLE;Module["_emscripten_glMultiDrawElementsInstancedANGLE"]=_emscripten_glMultiDrawElementsInstancedANGLE;Module["_glMultiDrawElementsInstancedWEBGL"]=_glMultiDrawElementsInstancedWEBGL;Module["_emscripten_glMultiDrawElementsInstancedWEBGL"]=_emscripten_glMultiDrawElementsInstancedWEBGL;Module["_glMultiDrawElementsInstancedANGLE"]=_glMultiDrawElementsInstancedANGLE;Module["_glPolygonOffsetClampEXT"]=_glPolygonOffsetClampEXT;Module["_glClipControlEXT"]=_glClipControlEXT;Module["_glPolygonModeWEBGL"]=_glPolygonModeWEBGL;Module["_glFinish"]=_glFinish;Module["_glFlush"]=_glFlush;Module["_emscripten_glClearDepth"]=_emscripten_glClearDepth;Module["_glClearDepth"]=_glClearDepth;Module["_glClearDepthf"]=_glClearDepthf;Module["_glDepthFunc"]=_glDepthFunc;Module["_glEnable"]=_glEnable;Module["_glDisable"]=_glDisable;Module["_glFrontFace"]=_glFrontFace;Module["_glCullFace"]=_glCullFace;Module["_glClear"]=_glClear;Module["_glLineWidth"]=_glLineWidth;Module["_glClearStencil"]=_glClearStencil;Module["_glStencilMask"]=_glStencilMask;Module["_glCheckFramebufferStatus"]=_glCheckFramebufferStatus;Module["_glGenerateMipmap"]=_glGenerateMipmap;Module["_glActiveTexture"]=_glActiveTexture;Module["_glBlendEquation"]=_glBlendEquation;Module["_glIsEnabled"]=_glIsEnabled;Module["_glBlendFunc"]=_glBlendFunc;Module["_glBlendEquationSeparate"]=_glBlendEquationSeparate;Module["_emscripten_glDepthRange"]=_emscripten_glDepthRange;Module["_glDepthRange"]=_glDepthRange;Module["_glDepthRangef"]=_glDepthRangef;Module["_glStencilMaskSeparate"]=_glStencilMaskSeparate;Module["_glHint"]=_glHint;Module["_glPolygonOffset"]=_glPolygonOffset;Module["_glVertexAttrib1f"]=_glVertexAttrib1f;Module["_glTexParameteri"]=_glTexParameteri;Module["_glTexParameterf"]=_glTexParameterf;Module["_glVertexAttrib2f"]=_glVertexAttrib2f;Module["_glStencilFunc"]=_glStencilFunc;Module["_glStencilOp"]=_glStencilOp;Module["_glViewport"]=_glViewport;Module["_glClearColor"]=_glClearColor;Module["_glScissor"]=_glScissor;Module["_glVertexAttrib3f"]=_glVertexAttrib3f;Module["_glRenderbufferStorage"]=_glRenderbufferStorage;Module["_glBlendFuncSeparate"]=_glBlendFuncSeparate;Module["_glBlendColor"]=_glBlendColor;Module["_glStencilFuncSeparate"]=_glStencilFuncSeparate;Module["_glStencilOpSeparate"]=_glStencilOpSeparate;Module["_glVertexAttrib4f"]=_glVertexAttrib4f;Module["_glCopyTexImage2D"]=_glCopyTexImage2D;Module["_glCopyTexSubImage2D"]=_glCopyTexSubImage2D;Module["_emscripten_webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance"]=_emscripten_webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance;Module["_emscripten_webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance"]=_emscripten_webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance;Module["_glGetStringi"]=_glGetStringi;Module["_glGetInteger64v"]=_glGetInteger64v;Module["_glGetInternalformativ"]=_glGetInternalformativ;Module["_glCompressedTexImage3D"]=_glCompressedTexImage3D;Module["_glCompressedTexSubImage3D"]=_glCompressedTexSubImage3D;Module["_glGetBufferParameteri64v"]=_glGetBufferParameteri64v;Module["_emscripten_glGetBufferSubData"]=_emscripten_glGetBufferSubData;Module["_glGetBufferSubData"]=_glGetBufferSubData;Module["_glInvalidateFramebuffer"]=_glInvalidateFramebuffer;Module["_glInvalidateSubFramebuffer"]=_glInvalidateSubFramebuffer;Module["_glTexImage3D"]=_glTexImage3D;Module["_glTexSubImage3D"]=_glTexSubImage3D;Module["_glGenQueries"]=_glGenQueries;Module["_glDeleteQueries"]=_glDeleteQueries;Module["_glIsQuery"]=_glIsQuery;Module["_glBeginQuery"]=_glBeginQuery;Module["_glGetQueryiv"]=_glGetQueryiv;Module["_glGetQueryObjectuiv"]=_glGetQueryObjectuiv;Module["_glGenSamplers"]=_glGenSamplers;Module["_glDeleteSamplers"]=_glDeleteSamplers;Module["_glIsSampler"]=_glIsSampler;Module["_glBindSampler"]=_glBindSampler;Module["_glSamplerParameterf"]=_glSamplerParameterf;Module["_glSamplerParameteri"]=_glSamplerParameteri;Module["_glSamplerParameterfv"]=_glSamplerParameterfv;Module["_glSamplerParameteriv"]=_glSamplerParameteriv;Module["_glGetSamplerParameterfv"]=_glGetSamplerParameterfv;Module["_glGetSamplerParameteriv"]=_glGetSamplerParameteriv;Module["_glGenTransformFeedbacks"]=_glGenTransformFeedbacks;Module["_glDeleteTransformFeedbacks"]=_glDeleteTransformFeedbacks;Module["_glIsTransformFeedback"]=_glIsTransformFeedback;Module["_glBindTransformFeedback"]=_glBindTransformFeedback;Module["_glTransformFeedbackVaryings"]=_glTransformFeedbackVaryings;Module["_glGetTransformFeedbackVarying"]=_glGetTransformFeedbackVarying;Module["_glGetIntegeri_v"]=_glGetIntegeri_v;Module["_glGetInteger64i_v"]=_glGetInteger64i_v;Module["_glBindBufferBase"]=_glBindBufferBase;Module["_glBindBufferRange"]=_glBindBufferRange;Module["_glGetUniformIndices"]=_glGetUniformIndices;Module["_glGetActiveUniformsiv"]=_glGetActiveUniformsiv;Module["_glGetUniformBlockIndex"]=_glGetUniformBlockIndex;Module["_glGetActiveUniformBlockiv"]=_glGetActiveUniformBlockiv;Module["_glGetActiveUniformBlockName"]=_glGetActiveUniformBlockName;Module["_glUniformBlockBinding"]=_glUniformBlockBinding;Module["_glClearBufferiv"]=_glClearBufferiv;Module["_glClearBufferuiv"]=_glClearBufferuiv;Module["_glClearBufferfv"]=_glClearBufferfv;Module["_glFenceSync"]=_glFenceSync;Module["_glDeleteSync"]=_glDeleteSync;Module["_glClientWaitSync"]=_glClientWaitSync;Module["_glWaitSync"]=_glWaitSync;Module["_glGetSynciv"]=_glGetSynciv;Module["_glIsSync"]=_glIsSync;Module["_glGetUniformuiv"]=_glGetUniformuiv;Module["_glGetFragDataLocation"]=_glGetFragDataLocation;Module["_glGetVertexAttribIuiv"]=_glGetVertexAttribIuiv;Module["_glUniform1ui"]=_glUniform1ui;Module["_glUniform2ui"]=_glUniform2ui;Module["_glUniform3ui"]=_glUniform3ui;Module["_glUniform4ui"]=_glUniform4ui;Module["_glUniform1uiv"]=_glUniform1uiv;Module["_glUniform2uiv"]=_glUniform2uiv;Module["_glUniform3uiv"]=_glUniform3uiv;Module["_glUniform4uiv"]=_glUniform4uiv;Module["_glUniformMatrix2x3fv"]=_glUniformMatrix2x3fv;Module["_glUniformMatrix3x2fv"]=_glUniformMatrix3x2fv;Module["_glUniformMatrix2x4fv"]=_glUniformMatrix2x4fv;Module["_glUniformMatrix4x2fv"]=_glUniformMatrix4x2fv;Module["_glUniformMatrix3x4fv"]=_glUniformMatrix3x4fv;Module["_glUniformMatrix4x3fv"]=_glUniformMatrix4x3fv;Module["_glVertexAttribI4iv"]=_glVertexAttribI4iv;Module["_glVertexAttribI4uiv"]=_glVertexAttribI4uiv;Module["_glProgramParameteri"]=_glProgramParameteri;Module["_glGetProgramBinary"]=_glGetProgramBinary;Module["_glProgramBinary"]=_glProgramBinary;Module["_glFramebufferTextureLayer"]=_glFramebufferTextureLayer;Module["_glVertexAttribIPointer"]=_glVertexAttribIPointer;Module["_glDrawRangeElements"]=_glDrawRangeElements;Module["_emscripten_glDrawArraysInstancedBaseInstanceWEBGL"]=_emscripten_glDrawArraysInstancedBaseInstanceWEBGL;Module["_glDrawArraysInstancedBaseInstanceWEBGL"]=_glDrawArraysInstancedBaseInstanceWEBGL;Module["_emscripten_glDrawArraysInstancedBaseInstance"]=_emscripten_glDrawArraysInstancedBaseInstance;Module["_glDrawArraysInstancedBaseInstance"]=_glDrawArraysInstancedBaseInstance;Module["_emscripten_glDrawArraysInstancedBaseInstanceANGLE"]=_emscripten_glDrawArraysInstancedBaseInstanceANGLE;Module["_glDrawArraysInstancedBaseInstanceANGLE"]=_glDrawArraysInstancedBaseInstanceANGLE;Module["_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL"]=_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL;Module["_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL"]=_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL;Module["_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceANGLE"]=_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceANGLE;Module["_glDrawElementsInstancedBaseVertexBaseInstanceANGLE"]=_glDrawElementsInstancedBaseVertexBaseInstanceANGLE;Module["_emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL"]=_emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL;Module["_glMultiDrawArraysInstancedBaseInstanceWEBGL"]=_glMultiDrawArraysInstancedBaseInstanceWEBGL;Module["_emscripten_glMultiDrawArraysInstancedBaseInstanceANGLE"]=_emscripten_glMultiDrawArraysInstancedBaseInstanceANGLE;Module["_glMultiDrawArraysInstancedBaseInstanceANGLE"]=_glMultiDrawArraysInstancedBaseInstanceANGLE;Module["_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL"]=_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL;Module["_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL"]=_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL;Module["_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE"]=_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE;Module["_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE"]=_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE;Module["_glEndTransformFeedback"]=_glEndTransformFeedback;Module["_glPauseTransformFeedback"]=_glPauseTransformFeedback;Module["_glResumeTransformFeedback"]=_glResumeTransformFeedback;Module["_glBeginTransformFeedback"]=_glBeginTransformFeedback;Module["_glReadBuffer"]=_glReadBuffer;Module["_glEndQuery"]=_glEndQuery;Module["_glClearBufferfi"]=_glClearBufferfi;Module["_glVertexAttribI4i"]=_glVertexAttribI4i;Module["_glVertexAttribI4ui"]=_glVertexAttribI4ui;Module["_glCopyBufferSubData"]=_glCopyBufferSubData;Module["_glTexStorage2D"]=_glTexStorage2D;Module["_glRenderbufferStorageMultisample"]=_glRenderbufferStorageMultisample;Module["_glTexStorage3D"]=_glTexStorage3D;Module["_glCopyTexSubImage3D"]=_glCopyTexSubImage3D;Module["_glBlitFramebuffer"]=_glBlitFramebuffer;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["allocate"]=allocate;Module["writeStringToMemory"]=writeStringToMemory;Module["writeAsciiToMemory"]=writeAsciiToMemory;Module["allocateUTF8"]=allocateUTF8;Module["allocateUTF8OnStack"]=allocateUTF8OnStack;Module["demangle"]=demangle;Module["stackTrace"]=stackTrace;Module["print"]=print;Module["printErr"]=printErr;Module["jstoi_s"]=jstoi_s;Module["getNativeTypeSize"]=getNativeTypeSize;Module["_emscripten_is_main_browser_thread"]=_emscripten_is_main_browser_thread;Module["webSockets"]=webSockets;Module["WS"]=WS;Module["_emscripten_websocket_get_ready_state"]=_emscripten_websocket_get_ready_state;Module["_emscripten_websocket_get_buffered_amount"]=_emscripten_websocket_get_buffered_amount;Module["_emscripten_websocket_get_extensions"]=_emscripten_websocket_get_extensions;Module["_emscripten_websocket_get_extensions_length"]=_emscripten_websocket_get_extensions_length;Module["_emscripten_websocket_get_protocol"]=_emscripten_websocket_get_protocol;Module["_emscripten_websocket_get_protocol_length"]=_emscripten_websocket_get_protocol_length;Module["_emscripten_websocket_get_url"]=_emscripten_websocket_get_url;Module["_emscripten_websocket_get_url_length"]=_emscripten_websocket_get_url_length;Module["_emscripten_websocket_set_onopen_callback_on_thread"]=_emscripten_websocket_set_onopen_callback_on_thread;Module["_emscripten_websocket_set_onerror_callback_on_thread"]=_emscripten_websocket_set_onerror_callback_on_thread;Module["_emscripten_websocket_set_onclose_callback_on_thread"]=_emscripten_websocket_set_onclose_callback_on_thread;Module["_emscripten_websocket_set_onmessage_callback_on_thread"]=_emscripten_websocket_set_onmessage_callback_on_thread;Module["_emscripten_websocket_new"]=_emscripten_websocket_new;Module["_emscripten_websocket_send_utf8_text"]=_emscripten_websocket_send_utf8_text;Module["_emscripten_websocket_send_binary"]=_emscripten_websocket_send_binary;Module["_emscripten_websocket_close"]=_emscripten_websocket_close;Module["_emscripten_websocket_delete"]=_emscripten_websocket_delete;Module["_emscripten_websocket_is_supported"]=_emscripten_websocket_is_supported;Module["_emscripten_websocket_deinitialize"]=_emscripten_websocket_deinitialize;Module["writeGLArray"]=writeGLArray;Module["webglPowerPreferences"]=webglPowerPreferences;Module["_emscripten_webgl_create_context"]=_emscripten_webgl_create_context;Module["_emscripten_webgl_do_create_context"]=_emscripten_webgl_do_create_context;Module["_emscripten_webgl_get_current_context"]=_emscripten_webgl_get_current_context;Module["_emscripten_webgl_do_get_current_context"]=_emscripten_webgl_do_get_current_context;Module["_emscripten_webgl_commit_frame"]=_emscripten_webgl_commit_frame;Module["_emscripten_webgl_do_commit_frame"]=_emscripten_webgl_do_commit_frame;Module["_emscripten_webgl_make_context_current"]=_emscripten_webgl_make_context_current;Module["_emscripten_webgl_get_drawing_buffer_size"]=_emscripten_webgl_get_drawing_buffer_size;Module["_emscripten_webgl_get_context_attributes"]=_emscripten_webgl_get_context_attributes;Module["_emscripten_webgl_destroy_context"]=_emscripten_webgl_destroy_context;Module["_emscripten_webgl_enable_extension"]=_emscripten_webgl_enable_extension;Module["_emscripten_supports_offscreencanvas"]=_emscripten_supports_offscreencanvas;Module["registerWebGlEventCallback"]=registerWebGlEventCallback;Module["_emscripten_set_webglcontextlost_callback_on_thread"]=_emscripten_set_webglcontextlost_callback_on_thread;Module["_emscripten_set_webglcontextrestored_callback_on_thread"]=_emscripten_set_webglcontextrestored_callback_on_thread;Module["_emscripten_is_webgl_context_lost"]=_emscripten_is_webgl_context_lost;Module["_emscripten_webgl_get_supported_extensions"]=_emscripten_webgl_get_supported_extensions;Module["_emscripten_webgl_get_program_parameter_d"]=_emscripten_webgl_get_program_parameter_d;Module["_emscripten_webgl_get_program_info_log_utf8"]=_emscripten_webgl_get_program_info_log_utf8;Module["_emscripten_webgl_get_shader_parameter_d"]=_emscripten_webgl_get_shader_parameter_d;Module["_emscripten_webgl_get_shader_info_log_utf8"]=_emscripten_webgl_get_shader_info_log_utf8;Module["_emscripten_webgl_get_shader_source_utf8"]=_emscripten_webgl_get_shader_source_utf8;Module["_emscripten_webgl_get_vertex_attrib_d"]=_emscripten_webgl_get_vertex_attrib_d;Module["_emscripten_webgl_get_vertex_attrib_o"]=_emscripten_webgl_get_vertex_attrib_o;Module["_emscripten_webgl_get_vertex_attrib_v"]=_emscripten_webgl_get_vertex_attrib_v;Module["_emscripten_webgl_get_uniform_d"]=_emscripten_webgl_get_uniform_d;Module["_emscripten_webgl_get_uniform_v"]=_emscripten_webgl_get_uniform_v;Module["_emscripten_webgl_get_parameter_v"]=_emscripten_webgl_get_parameter_v;Module["_emscripten_webgl_get_parameter_d"]=_emscripten_webgl_get_parameter_d;Module["_emscripten_webgl_get_parameter_o"]=_emscripten_webgl_get_parameter_o;Module["_emscripten_webgl_get_parameter_utf8"]=_emscripten_webgl_get_parameter_utf8;Module["_emscripten_webgl_get_parameter_i64v"]=_emscripten_webgl_get_parameter_i64v;Module["EGL"]=EGL;Module["_eglGetDisplay"]=_eglGetDisplay;Module["_eglInitialize"]=_eglInitialize;Module["_eglTerminate"]=_eglTerminate;Module["_eglGetConfigs"]=_eglGetConfigs;Module["_eglChooseConfig"]=_eglChooseConfig;Module["_eglGetConfigAttrib"]=_eglGetConfigAttrib;Module["_eglCreateWindowSurface"]=_eglCreateWindowSurface;Module["_eglDestroySurface"]=_eglDestroySurface;Module["_eglCreateContext"]=_eglCreateContext;Module["_eglDestroyContext"]=_eglDestroyContext;Module["_eglQuerySurface"]=_eglQuerySurface;Module["_eglQueryContext"]=_eglQueryContext;Module["_eglGetError"]=_eglGetError;Module["_eglQueryString"]=_eglQueryString;Module["_eglBindAPI"]=_eglBindAPI;Module["_eglQueryAPI"]=_eglQueryAPI;Module["_eglWaitClient"]=_eglWaitClient;Module["_eglWaitNative"]=_eglWaitNative;Module["_eglWaitGL"]=_eglWaitGL;Module["_eglSwapInterval"]=_eglSwapInterval;Module["_eglMakeCurrent"]=_eglMakeCurrent;Module["_eglGetCurrentContext"]=_eglGetCurrentContext;Module["_eglGetCurrentSurface"]=_eglGetCurrentSurface;Module["_eglGetCurrentDisplay"]=_eglGetCurrentDisplay;Module["_eglSwapBuffers"]=_eglSwapBuffers;Module["_eglReleaseThread"]=_eglReleaseThread;Module["SDL"]=SDL;Module["_SDL_GetTicks"]=_SDL_GetTicks;Module["_SDL_LockSurface"]=_SDL_LockSurface;Module["_SDL_Linked_Version"]=_SDL_Linked_Version;Module["_SDL_Init"]=_SDL_Init;Module["_SDL_WasInit"]=_SDL_WasInit;Module["_SDL_GetVideoInfo"]=_SDL_GetVideoInfo;Module["_SDL_ListModes"]=_SDL_ListModes;Module["_SDL_VideoModeOK"]=_SDL_VideoModeOK;Module["_SDL_AudioDriverName"]=_SDL_AudioDriverName;Module["_SDL_VideoDriverName"]=_SDL_VideoDriverName;Module["_SDL_SetVideoMode"]=_SDL_SetVideoMode;Module["_SDL_GetVideoSurface"]=_SDL_GetVideoSurface;Module["_SDL_AudioQuit"]=_SDL_AudioQuit;Module["_SDL_VideoQuit"]=_SDL_VideoQuit;Module["_SDL_QuitSubSystem"]=_SDL_QuitSubSystem;Module["_SDL_Quit"]=_SDL_Quit;Module["_SDL_UnlockSurface"]=_SDL_UnlockSurface;Module["_SDL_Flip"]=_SDL_Flip;Module["_SDL_UpdateRect"]=_SDL_UpdateRect;Module["_SDL_UpdateRects"]=_SDL_UpdateRects;Module["_SDL_Delay"]=_SDL_Delay;Module["_SDL_WM_SetCaption"]=_SDL_WM_SetCaption;Module["_SDL_EnableKeyRepeat"]=_SDL_EnableKeyRepeat;Module["_SDL_GetKeyboardState"]=_SDL_GetKeyboardState;Module["_SDL_GetKeyState"]=_SDL_GetKeyState;Module["_SDL_GetKeyName"]=_SDL_GetKeyName;Module["_SDL_GetModState"]=_SDL_GetModState;Module["_SDL_GetMouseState"]=_SDL_GetMouseState;Module["_SDL_WarpMouse"]=_SDL_WarpMouse;Module["_SDL_ShowCursor"]=_SDL_ShowCursor;Module["_SDL_GetError"]=_SDL_GetError;Module["_SDL_SetError"]=_SDL_SetError;Module["_SDL_CreateRGBSurface"]=_SDL_CreateRGBSurface;Module["_SDL_CreateRGBSurfaceFrom"]=_SDL_CreateRGBSurfaceFrom;Module["_SDL_ConvertSurface"]=_SDL_ConvertSurface;Module["_SDL_DisplayFormat"]=_SDL_DisplayFormat;Module["_SDL_DisplayFormatAlpha"]=_SDL_DisplayFormatAlpha;Module["_SDL_FreeSurface"]=_SDL_FreeSurface;Module["_SDL_UpperBlit"]=_SDL_UpperBlit;Module["_SDL_UpperBlitScaled"]=_SDL_UpperBlitScaled;Module["_SDL_LowerBlit"]=_SDL_LowerBlit;Module["_SDL_LowerBlitScaled"]=_SDL_LowerBlitScaled;Module["_SDL_GetClipRect"]=_SDL_GetClipRect;Module["_SDL_SetClipRect"]=_SDL_SetClipRect;Module["_SDL_FillRect"]=_SDL_FillRect;Module["_zoomSurface"]=_zoomSurface;Module["_rotozoomSurface"]=_rotozoomSurface;Module["_SDL_SetAlpha"]=_SDL_SetAlpha;Module["_SDL_SetColorKey"]=_SDL_SetColorKey;Module["_SDL_PollEvent"]=_SDL_PollEvent;Module["_SDL_PushEvent"]=_SDL_PushEvent;Module["_SDL_PeepEvents"]=_SDL_PeepEvents;Module["_SDL_PumpEvents"]=_SDL_PumpEvents;Module["_emscripten_SDL_SetEventHandler"]=_emscripten_SDL_SetEventHandler;Module["_SDL_SetColors"]=_SDL_SetColors;Module["_SDL_SetPalette"]=_SDL_SetPalette;Module["_SDL_MapRGB"]=_SDL_MapRGB;Module["_SDL_MapRGBA"]=_SDL_MapRGBA;Module["_SDL_GetRGB"]=_SDL_GetRGB;Module["_SDL_GetRGBA"]=_SDL_GetRGBA;Module["_SDL_GetAppState"]=_SDL_GetAppState;Module["_SDL_WM_GrabInput"]=_SDL_WM_GrabInput;Module["_SDL_WM_ToggleFullScreen"]=_SDL_WM_ToggleFullScreen;Module["_IMG_Init"]=_IMG_Init;Module["_IMG_Load_RW"]=_IMG_Load_RW;Module["_SDL_FreeRW"]=_SDL_FreeRW;Module["_SDL_LoadBMP_RW"]=_SDL_LoadBMP_RW;Module["_IMG_Load"]=_IMG_Load;Module["_SDL_RWFromFile"]=_SDL_RWFromFile;Module["_IMG_Quit"]=_IMG_Quit;Module["_SDL_OpenAudio"]=_SDL_OpenAudio;Module["_SDL_PauseAudio"]=_SDL_PauseAudio;Module["_SDL_CloseAudio"]=_SDL_CloseAudio;Module["_SDL_LockAudio"]=_SDL_LockAudio;Module["_SDL_UnlockAudio"]=_SDL_UnlockAudio;Module["_SDL_CreateMutex"]=_SDL_CreateMutex;Module["_SDL_mutexP"]=_SDL_mutexP;Module["_SDL_mutexV"]=_SDL_mutexV;Module["_SDL_DestroyMutex"]=_SDL_DestroyMutex;Module["_SDL_CreateCond"]=_SDL_CreateCond;Module["_SDL_CondSignal"]=_SDL_CondSignal;Module["_SDL_CondWait"]=_SDL_CondWait;Module["_SDL_DestroyCond"]=_SDL_DestroyCond;Module["_SDL_StartTextInput"]=_SDL_StartTextInput;Module["_SDL_StopTextInput"]=_SDL_StopTextInput;Module["_Mix_Init"]=_Mix_Init;Module["_Mix_Quit"]=_Mix_Quit;Module["_Mix_OpenAudio"]=_Mix_OpenAudio;Module["_Mix_CloseAudio"]=_Mix_CloseAudio;Module["_Mix_AllocateChannels"]=_Mix_AllocateChannels;Module["_Mix_ChannelFinished"]=_Mix_ChannelFinished;Module["_Mix_Volume"]=_Mix_Volume;Module["_Mix_SetPanning"]=_Mix_SetPanning;Module["_Mix_LoadWAV_RW"]=_Mix_LoadWAV_RW;Module["_Mix_LoadWAV"]=_Mix_LoadWAV;Module["_Mix_QuickLoad_RAW"]=_Mix_QuickLoad_RAW;Module["_Mix_FreeChunk"]=_Mix_FreeChunk;Module["_Mix_ReserveChannels"]=_Mix_ReserveChannels;Module["_Mix_PlayChannelTimed"]=_Mix_PlayChannelTimed;Module["_Mix_HaltChannel"]=_Mix_HaltChannel;Module["_Mix_FadingChannel"]=_Mix_FadingChannel;Module["_Mix_HookMusicFinished"]=_Mix_HookMusicFinished;Module["_Mix_HaltMusic"]=_Mix_HaltMusic;Module["_Mix_VolumeMusic"]=_Mix_VolumeMusic;Module["_Mix_LoadMUS_RW"]=_Mix_LoadMUS_RW;Module["_Mix_LoadMUS"]=_Mix_LoadMUS;Module["_Mix_FreeMusic"]=_Mix_FreeMusic;Module["_Mix_PlayMusic"]=_Mix_PlayMusic;Module["_Mix_PauseMusic"]=_Mix_PauseMusic;Module["_Mix_ResumeMusic"]=_Mix_ResumeMusic;Module["_Mix_FadeInMusicPos"]=_Mix_FadeInMusicPos;Module["_Mix_FadeOutMusic"]=_Mix_FadeOutMusic;Module["_Mix_PlayingMusic"]=_Mix_PlayingMusic;Module["_Mix_Playing"]=_Mix_Playing;Module["_Mix_Pause"]=_Mix_Pause;Module["_Mix_Paused"]=_Mix_Paused;Module["_Mix_PausedMusic"]=_Mix_PausedMusic;Module["_Mix_Resume"]=_Mix_Resume;Module["_TTF_Init"]=_TTF_Init;Module["_TTF_OpenFont"]=_TTF_OpenFont;Module["_TTF_CloseFont"]=_TTF_CloseFont;Module["_TTF_RenderText_Solid"]=_TTF_RenderText_Solid;Module["_TTF_RenderText_Blended"]=_TTF_RenderText_Blended;Module["_TTF_RenderText_Shaded"]=_TTF_RenderText_Shaded;Module["_TTF_RenderUTF8_Solid"]=_TTF_RenderUTF8_Solid;Module["_TTF_SizeUTF8"]=_TTF_SizeUTF8;Module["_TTF_SizeText"]=_TTF_SizeText;Module["_TTF_GlyphMetrics"]=_TTF_GlyphMetrics;Module["_TTF_FontAscent"]=_TTF_FontAscent;Module["_TTF_FontDescent"]=_TTF_FontDescent;Module["_TTF_FontHeight"]=_TTF_FontHeight;Module["_TTF_FontLineSkip"]=_TTF_FontLineSkip;Module["_TTF_Quit"]=_TTF_Quit;Module["SDL_gfx"]=SDL_gfx;Module["_boxColor"]=_boxColor;Module["_boxRGBA"]=_boxRGBA;Module["_rectangleColor"]=_rectangleColor;Module["_rectangleRGBA"]=_rectangleRGBA;Module["_ellipseColor"]=_ellipseColor;Module["_ellipseRGBA"]=_ellipseRGBA;Module["_filledEllipseColor"]=_filledEllipseColor;Module["_filledEllipseRGBA"]=_filledEllipseRGBA;Module["_lineColor"]=_lineColor;Module["_lineRGBA"]=_lineRGBA;Module["_pixelRGBA"]=_pixelRGBA;Module["_SDL_GL_SetAttribute"]=_SDL_GL_SetAttribute;Module["_SDL_GL_GetAttribute"]=_SDL_GL_GetAttribute;Module["_SDL_GL_SwapBuffers"]=_SDL_GL_SwapBuffers;Module["_SDL_GL_ExtensionSupported"]=_SDL_GL_ExtensionSupported;Module["_SDL_DestroyWindow"]=_SDL_DestroyWindow;Module["_SDL_DestroyRenderer"]=_SDL_DestroyRenderer;Module["_SDL_GetWindowFlags"]=_SDL_GetWindowFlags;Module["_SDL_GL_SwapWindow"]=_SDL_GL_SwapWindow;Module["_SDL_GL_MakeCurrent"]=_SDL_GL_MakeCurrent;Module["_SDL_GL_DeleteContext"]=_SDL_GL_DeleteContext;Module["_SDL_GL_GetSwapInterval"]=_SDL_GL_GetSwapInterval;Module["_SDL_GL_SetSwapInterval"]=_SDL_GL_SetSwapInterval;Module["_SDL_SetWindowTitle"]=_SDL_SetWindowTitle;Module["_SDL_GetWindowSize"]=_SDL_GetWindowSize;Module["_SDL_LogSetOutputFunction"]=_SDL_LogSetOutputFunction;Module["_SDL_SetWindowFullscreen"]=_SDL_SetWindowFullscreen;Module["_SDL_ClearError"]=_SDL_ClearError;Module["_SDL_SetGamma"]=_SDL_SetGamma;Module["_SDL_SetGammaRamp"]=_SDL_SetGammaRamp;Module["_SDL_NumJoysticks"]=_SDL_NumJoysticks;Module["_SDL_JoystickName"]=_SDL_JoystickName;Module["_SDL_JoystickOpen"]=_SDL_JoystickOpen;Module["_SDL_JoystickOpened"]=_SDL_JoystickOpened;Module["_SDL_JoystickIndex"]=_SDL_JoystickIndex;Module["_SDL_JoystickNumAxes"]=_SDL_JoystickNumAxes;Module["_SDL_JoystickNumBalls"]=_SDL_JoystickNumBalls;Module["_SDL_JoystickNumHats"]=_SDL_JoystickNumHats;Module["_SDL_JoystickNumButtons"]=_SDL_JoystickNumButtons;Module["_SDL_JoystickUpdate"]=_SDL_JoystickUpdate;Module["_SDL_JoystickEventState"]=_SDL_JoystickEventState;Module["_SDL_JoystickGetAxis"]=_SDL_JoystickGetAxis;Module["_SDL_JoystickGetHat"]=_SDL_JoystickGetHat;Module["_SDL_JoystickGetBall"]=_SDL_JoystickGetBall;Module["_SDL_JoystickGetButton"]=_SDL_JoystickGetButton;Module["_SDL_JoystickClose"]=_SDL_JoystickClose;Module["_SDL_InitSubSystem"]=_SDL_InitSubSystem;Module["_SDL_RWFromConstMem"]=_SDL_RWFromConstMem;Module["_SDL_RWFromMem"]=_SDL_RWFromMem;Module["_SDL_GetNumAudioDrivers"]=_SDL_GetNumAudioDrivers;Module["_SDL_GetCurrentAudioDriver"]=_SDL_GetCurrentAudioDriver;Module["_SDL_GetScancodeFromKey"]=_SDL_GetScancodeFromKey;Module["_SDL_GetAudioDriver"]=_SDL_GetAudioDriver;Module["_SDL_EnableUNICODE"]=_SDL_EnableUNICODE;Module["_SDL_AddTimer"]=_SDL_AddTimer;Module["_SDL_RemoveTimer"]=_SDL_RemoveTimer;Module["_SDL_CreateThread"]=_SDL_CreateThread;Module["_SDL_WaitThread"]=_SDL_WaitThread;Module["_SDL_GetThreadID"]=_SDL_GetThreadID;Module["_SDL_ThreadID"]=_SDL_ThreadID;Module["_SDL_AllocRW"]=_SDL_AllocRW;Module["_SDL_CondBroadcast"]=_SDL_CondBroadcast;Module["_SDL_CondWaitTimeout"]=_SDL_CondWaitTimeout;Module["_SDL_WM_IconifyWindow"]=_SDL_WM_IconifyWindow;Module["_Mix_SetPostMix"]=_Mix_SetPostMix;Module["_Mix_VolumeChunk"]=_Mix_VolumeChunk;Module["_Mix_SetPosition"]=_Mix_SetPosition;Module["_Mix_QuerySpec"]=_Mix_QuerySpec;Module["_Mix_FadeInChannelTimed"]=_Mix_FadeInChannelTimed;Module["_Mix_FadeOutChannel"]=_Mix_FadeOutChannel;Module["_Mix_Linked_Version"]=_Mix_Linked_Version;Module["_SDL_SaveBMP_RW"]=_SDL_SaveBMP_RW;Module["_SDL_WM_SetIcon"]=_SDL_WM_SetIcon;Module["_SDL_HasRDTSC"]=_SDL_HasRDTSC;Module["_SDL_HasMMX"]=_SDL_HasMMX;Module["_SDL_HasMMXExt"]=_SDL_HasMMXExt;Module["_SDL_Has3DNow"]=_SDL_Has3DNow;Module["_SDL_Has3DNowExt"]=_SDL_Has3DNowExt;Module["_SDL_HasSSE"]=_SDL_HasSSE;Module["_SDL_HasSSE2"]=_SDL_HasSSE2;Module["_SDL_HasAltiVec"]=_SDL_HasAltiVec;var ASM_CONSTS={3964040:()=>{throw new Error("intentionally triggered fatal error!")},3964097:()=>{wasmImports["open64"]=wasmImports["open"]},3964146:()=>jspiSupported};function console_error(msg){let jsmsg=UTF8ToString(msg);console.error(jsmsg)}function console_error_obj(obj){console.error(obj)}function new_error(type,msg,err){return new API.PythonError(UTF8ToString(type),msg,err)}new_error.sig="eiei";function fail_test(){API.fail_test=true}fail_test.sig="v";function capture_stderr(){API.capture_stderr()}capture_stderr.sig="v";function restore_stderr(){return API.restore_stderr()}restore_stderr.sig="e";function raw_call_js(func){func()}raw_call_js.sig="ve";function hiwire_invalid_ref_js(type,ref){API.fail_test=!!1;if(type===1&&!ref){if(_PyErr_Occurred()){const e=_wrap_exception();console.error("Pyodide internal error: Argument to hiwire_get is falsy. This was "+"probably because the Python error indicator was set when get_value was "+"called. The Python error that caused this was:",e);throw e}else{const msg="Pyodide internal error: Argument to hiwire_get is falsy (but error "+"indicator is not set).";console.error(msg);throw new Error(msg)}}const typestr={[1]:"get",[2]:"incref",[3]:"decref"}[type];const msg=`hiwire_${typestr} on invalid reference ${ref}. This is most likely due `+"to use after free. It may also be due to memory corruption.";console.error(msg);throw new Error(msg)}hiwire_invalid_ref_js.sig="vii";function set_pyodide_module(mod){API._pyodide=mod}set_pyodide_module.sig="ve";function js2python_immutable_js(value){try{let result=Module.js2python_convertImmutable(value);if(result!==undefined){return result}return 0}catch(e){Module.handle_js_error(e);return 0}errNoRet()}js2python_immutable_js.sig="ie";function js2python_js(value){try{let result=Module.js2python_convertImmutable(value);if(result!==undefined){return result}return _JsProxy_create(value)}catch(e){Module.handle_js_error(e);return 0}errNoRet()}js2python_js.sig="ie";function js2python_convert(v,depth,defaultConverter){try{return Module.js2python_convert(v,{depth,defaultConverter})}catch(e){Module.handle_js_error(e);return 0}errNoRet()}js2python_convert.sig="ieie";function JsProxy_GetAttr_js(jsobj,ptrkey){try{const jskey=normalizeReservedWords(UTF8ToString(ptrkey));const result=jsobj[jskey];if(result===undefined&&!(jskey in jsobj)){return Module.error}return result}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsProxy_GetAttr_js.sig="eei";function JsProxy_SetAttr_js(jsobj,ptrkey,jsval){try{let jskey=normalizeReservedWords(UTF8ToString(ptrkey));jsobj[jskey]=jsval}catch(e){Module.handle_js_error(e);return-1}return 0}JsProxy_SetAttr_js.sig="ieie";function JsProxy_DelAttr_js(jsobj,ptrkey){try{let jskey=normalizeReservedWords(UTF8ToString(ptrkey));delete jsobj[jskey]}catch(e){Module.handle_js_error(e);return-1}return 0}JsProxy_DelAttr_js.sig="iei";function JsProxy_GetIter_js(obj){try{return obj[Symbol.iterator]()}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsProxy_GetIter_js.sig="ee";function handle_next_result_js(res,done,msg){try{let errmsg;if(typeof res!=="object"){errmsg=`Result should have type "object" not "${typeof res}"`}else if(typeof res.done==="undefined"){if(typeof res.then==="function"){errmsg=`Result was a promise, use anext() / asend() / athrow() instead.`}else{errmsg=`Result has no "done" field.`}}if(errmsg){HEAPU32[(msg>>>2)+0>>>0]=stringToNewUTF8(errmsg);HEAPU32[(done>>>2)+0>>>0]=-1}HEAPU32[(done>>>2)+0>>>0]=res.done;return res.value}catch(e){Module.handle_js_error(e);return-1}return 0}handle_next_result_js.sig="eeii";function JsException_new_helper(name_ptr,message_ptr,stack_ptr){try{let name=UTF8ToString(name_ptr);let message=UTF8ToString(message_ptr);let stack=UTF8ToString(stack_ptr);return API.deserializeError(name,message,stack)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsException_new_helper.sig="eiii";function JsProxy_GetAsyncIter_js(obj){try{return obj[Symbol.asyncIterator]()}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsProxy_GetAsyncIter_js.sig="ee";function _agen_handle_result_js(p,msg,set_result,set_exception,closing){try{let errmsg;if(typeof p!=="object"){errmsg=`Result of anext() should be object not ${typeof p}`}else if(typeof p.then!=="function"){if(typeof p.done==="boolean"){errmsg=`Result of anext() was not a promise, use next() instead.`}else{errmsg=`Result of anext() was not a promise.`}}if(errmsg){HEAPU32[(msg>>>2)+0>>>0]=stringToNewUTF8(errmsg);return-1}_Py_IncRef(set_result);_Py_IncRef(set_exception);p.then(({done,value})=>{__agen_handle_result_js_c(set_result,set_exception,done,value,closing)},err=>{__agen_handle_result_js_c(set_result,set_exception,-1,err,closing)}).finally(()=>{_Py_DecRef(set_result);_Py_DecRef(set_exception)});return 0}catch(e){Module.handle_js_error(e);return-1}return 0}_agen_handle_result_js.sig="ieiiii";function get_length_helper(val){try{let result;if(typeof val.size==="number"){result=val.size}else if(typeof val.length==="number"){result=val.length}else{return-2}if(result<0){return-3}if(result>2147483647){return-4}return result}catch(e){Module.handle_js_error(e);return-1}return 0}get_length_helper.sig="ie";function get_length_string(val){try{let result;if(typeof val.size==="number"){result=val.size}else if(typeof val.length==="number"){result=val.length}return stringToNewUTF8(" "+result.toString())}catch(e){Module.handle_js_error(e);return 0}errNoRet()}get_length_string.sig="ie";function destroy_jsarray_entries(array){for(let v of array){try{if(typeof v.destroy==="function"){v.destroy()}}catch(e){console.warn("Weird error:",e)}}}destroy_jsarray_entries.sig="ve";function JsArray_repeat_js(o,count){try{if(!Array.isArray(o)){o=Array.from(o)}return Array.from({length:count},()=>o).flat()}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsArray_repeat_js.sig="eei";function JsArray_inplace_repeat_js(o,count){try{o.splice(0,o.length,...Array.from({length:count},()=>o).flat())}catch(e){Module.handle_js_error(e);return-1}return 0}JsArray_inplace_repeat_js.sig="iei";function JsArray_reversed_iterator(array){return new ReversedIterator(array)}class ReversedIterator{constructor(array){this._array=array;this._i=array.length-1}__length_hint__(){return this._array.length}[Symbol.toStringTag](){return"ReverseIterator"}next(){const i=this._i;const a=this._array;const done=i<0;const value=done?undefined:a[i];this._i--;return{done,value}}}JsArray_reversed_iterator.sig="ee";function JsArray_index_js(o,v,start,stop){try{for(let i=start;i{let c=s.charCodeAt(0);return c<48||c>57}).map(word=>isReservedWord(word.replace(/_*$/,""))?word+"_":word))}while(jsobj=Object.getPrototypeOf(jsobj));return result}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsProxy_Dir_js.sig="ee";function JsProxy_Bool_js(val){try{if(!val){return!!0}if(val.size===0){if(/HTML[A-Za-z]*Element/.test(getTypeTag(val))){return!!1}return!!0}if(val.length===0&&JsvArray_Check(val)){return!!0}if(val.byteLength===0){return!!0}return!!1}catch(e){return!!0}}JsProxy_Bool_js.sig="ie";function JsObjMap_GetIter_js(obj){try{return Module.iterObject(obj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsObjMap_GetIter_js.sig="ee";function JsObjMap_length_js(obj){try{let length=0;for(let _ of Module.iterObject(obj)){length++}return length}catch(e){Module.handle_js_error(e);return-1}return 0}JsObjMap_length_js.sig="ie";function JsObjMap_subscript_js(obj,key){try{if(!Object.prototype.hasOwnProperty.call(obj,key)){return Module.error}return obj[key]}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsObjMap_subscript_js.sig="eee";function JsObjMap_ass_subscript_js(obj,key,value){try{if(value===Module.error){if(!Object.prototype.hasOwnProperty.call(obj,key)){return-1}delete obj[key]}else{obj[key]=value}return 0}catch(e){Module.handle_js_error(e);return-1}return 0}JsObjMap_ass_subscript_js.sig="ieee";function JsObjMap_contains_js(obj,key){try{return Object.prototype.hasOwnProperty.call(obj,key)}catch(e){Module.handle_js_error(e);return-1}return 0}JsObjMap_contains_js.sig="iee";function JsModule_GetAll_js(o){try{return Object.getOwnPropertyNames(o)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsModule_GetAll_js.sig="ee";function JsBuffer_DecodeString_js(buffer,encoding){try{let encoding_js;if(encoding){encoding_js=UTF8ToString(encoding)}const decoder=new TextDecoder(encoding_js,{fatal:!!1,ignoreBOM:!!1});let res;try{res=decoder.decode(buffer)}catch(e){if(e instanceof TypeError){return Module.error}throw e}return res}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsBuffer_DecodeString_js.sig="eei";function JsBuffer_get_info(jsobj,byteLength_ptr,format_ptr,size_ptr,checked_ptr){const[format_utf8,size,checked]=Module.get_buffer_datatype(jsobj);HEAPU32[(byteLength_ptr>>>2)+0>>>0]=jsobj.byteLength;HEAPU32[(format_ptr>>>2)+0>>>0]=format_utf8;HEAPU32[(size_ptr>>>2)+0>>>0]=size;HEAPU8[(checked_ptr>>>0)+0>>>0]=checked}JsBuffer_get_info.sig="veiiii";function JsDoubleProxy_unwrap_js(id){try{return Module.PyProxy_getPtr(id)}catch(e){Module.handle_js_error(e);return 0}errNoRet()}JsDoubleProxy_unwrap_js.sig="ie";function JsProxy_to_weakref_js(pyproxy){try{return new WeakRef(pyproxy)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsProxy_to_weakref_js.sig="ee";function JsProxy_compute_typeflags(obj,is_py_json){try{let type_flags=0;if(API.isPyProxy(obj)&&!pyproxyIsAlive(obj)){return 0}const typeTag=getTypeTag(obj);function safeBool(cb){try{return cb()}catch(e){return!!0}}const isBufferView=safeBool(()=>ArrayBuffer.isView(obj));const isArray=safeBool(()=>Array.isArray(obj));const constructorName=safeBool(()=>obj.constructor.name)||"";const hasLength=isArray||hasProperty(obj,"length")&&typeof obj!=="function";if(typeof obj==="function"){type_flags|=1<<11}if(hasMethod(obj,"then")){type_flags|=1<<9}if(hasMethod(obj,Symbol.iterator)){type_flags|=1<<0}if(hasMethod(obj,Symbol.asyncIterator)){type_flags|=1<<17}if(hasMethod(obj,"next")&&(hasMethod(obj,Symbol.iterator)||!hasMethod(obj,Symbol.asyncIterator))){type_flags|=1<<1}if(hasMethod(obj,"next")&&(!hasMethod(obj,Symbol.iterator)||hasMethod(obj,Symbol.asyncIterator))){type_flags|=1<<20}if(hasLength||hasProperty(obj,"size")){type_flags|=1<<2}if(hasMethod(obj,"get")){type_flags|=1<<3}if(hasMethod(obj,"set")){type_flags|=1<<4}if(hasMethod(obj,"has")){type_flags|=1<<5}if(hasMethod(obj,"includes")){type_flags|=1<<6}if(Symbol.asyncDispose){if(hasMethod(obj,Symbol.dispose)){type_flags|=1<<7}if(hasMethod(obj,Symbol.asyncDispose)){type_flags|=1<<8}}if((isBufferView||typeTag==="[object ArrayBuffer]")&&!(type_flags&1<<11)){type_flags|=1<<10}if(API.isPyProxy(obj)){type_flags|=1<<15}if(isArray){type_flags|=1<<12}if(isBufferView&&typeTag!=="[object DataView]"){type_flags|=1<<14}if(!isArray&&hasLength&&type_flags&1<<0&&!(type_flags&(1<<1|1<<14))){type_flags|=1<<13}if(typeTag==="[object Generator]"){type_flags|=1<<18}if(typeTag==="[object AsyncGenerator]"){type_flags|=1<<19}if(hasProperty(obj,"name")&&hasProperty(obj,"message")&&(hasProperty(obj,"stack")||constructorName==="DOMException")&&!(type_flags&(1<<11|1<<10))){type_flags|=1<<21}if(is_py_json&&type_flags&(1<<12|1<<13|1<<1)){type_flags|=1<<23}if(is_py_json&&!(type_flags&(1<<12|1<<14|1<<13|1<<10|1<<15|1<<1|1<<11|1<<21))){type_flags|=1<<22}return type_flags}catch(e){Module.handle_js_error(e);return-1}return 0}JsProxy_compute_typeflags.sig="iei";function is_comlink_proxy(obj){try{return!!(API.Comlink&&value[API.Comlink.createEndpoint])}catch(e){return!!0}}is_comlink_proxy.sig="ie";function can_run_sync_js(){return!!validSuspender.value}can_run_sync_js.sig="i";function my_dict_converter(){return Object.fromEntries}my_dict_converter.sig="e";function get_async_js_call_done_callback(proxies){try{return function(result){let msg="This borrowed proxy was automatically destroyed "+"at the end of an asynchronous function call. Try "+"using create_proxy or create_once_callable.";for(let px of proxies){Module.pyproxy_destroy(px,msg,!!0)}if(API.isPyProxy(result)){Module.pyproxy_destroy(result,msg,!!0)}}}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}get_async_js_call_done_callback.sig="ee";function wrap_generator(gen,proxies){try{proxies=new Set(proxies);const msg="This borrowed proxy was automatically destroyed "+"when a generator completed execution. Try "+"using create_proxy or create_once_callable.";function cleanup(){proxies.forEach(px=>Module.pyproxy_destroy(px,msg))}function wrap(funcname){return function(val){if(API.isPyProxy(val)){val=val.copy();proxies.add(val)}let res;try{res=gen[funcname](val)}catch(e){cleanup();throw e}if(res.done){proxies.delete(res.value);cleanup()}return res}}return{get[Symbol.toStringTag](){return"Generator"},[Symbol.iterator](){return this},next:wrap("next"),throw:wrap("throw"),return:wrap("return")}}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}wrap_generator.sig="eee";function wrap_async_generator(gen,proxies){try{proxies=new Set(proxies);const msg="This borrowed proxy was automatically destroyed "+"when an asynchronous generator completed execution. Try "+"using create_proxy or create_once_callable.";function cleanup(){proxies.forEach(px=>Module.pyproxy_destroy(px,msg))}function wrap(funcname){return async function(val){if(API.isPyProxy(val)){val=val.copy();proxies.add(val)}let res;try{res=await gen[funcname](val)}catch(e){cleanup();throw e}if(res.done){proxies.delete(res.value);cleanup()}return res}}return{get[Symbol.toStringTag](){return"AsyncGenerator"},[Symbol.asyncIterator](){return this},next:wrap("next"),throw:wrap("throw"),return:wrap("return")}}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}wrap_async_generator.sig="eee";function throw_no_gil(){throw new API.NoGilError("Attempted to use PyProxy when Python GIL not held")}throw_no_gil.sig="v";function pyproxy_Check(val){return API.isPyProxy(val)}pyproxy_Check.sig="ie";function pyproxy_AsPyObject(val){if(!API.isPyProxy(val)||!pyproxyIsAlive(val)){return 0}return Module.PyProxy_getPtr(val)}pyproxy_AsPyObject.sig="ie";function destroy_proxies(proxies,msg_ptr){let msg=undefined;if(msg_ptr){msg=_JsvString_FromId(msg_ptr)}for(let px of proxies){Module.pyproxy_destroy(px,msg,false)}}destroy_proxies.sig="vei";function gc_register_proxies(proxies){for(let px of proxies){Module.gc_register_proxy(Module.PyProxy_getAttrs(px).shared)}}gc_register_proxies.sig="ve";function destroy_proxy(px,msg_ptr){const{shared,props}=Module.PyProxy_getAttrsQuiet(px);if(!shared.ptr){return}if(props.roundtrip){return}let msg=undefined;if(msg_ptr){msg=_JsvString_FromId(msg_ptr)}Module.pyproxy_destroy(px,msg,false)}destroy_proxy.sig="vei";function proxy_cache_get(proxyCache,descr){const proxy=proxyCache.get(descr);if(!proxy){return Module.error}if(pyproxyIsAlive(proxy)){return proxy}else{proxyCache.delete(descr);return Module.error}}proxy_cache_get.sig="eei";function proxy_cache_set(proxyCache,descr,proxy){proxyCache.set(descr,proxy)}proxy_cache_set.sig="veie";function _pyproxyGen_make_result(done,value){return{done:!!done,value}}_pyproxyGen_make_result.sig="eie";function array_to_js(array,len){return Array.from(HEAP32.subarray(array/4>>>0,array/4+len>>>0))}array_to_js.sig="eii";function _pyproxy_get_buffer_result(start_ptr,smallest_ptr,largest_ptr,readonly,format,itemsize,shape,strides,view,c_contiguous,f_contiguous,sentinel){format=UTF8ToString(format);return{start_ptr,smallest_ptr,largest_ptr,readonly,format,itemsize,shape,strides,view,c_contiguous,f_contiguous}}_pyproxy_get_buffer_result.sig="eiiiiiieeiiii";function pyproxy_new_ex(ptrobj,capture_this,roundtrip,gcRegister,jsonAdaptor){try{return Module.pyproxy_new(ptrobj,{props:{captureThis:!!capture_this,roundtrip:!!roundtrip},gcRegister,jsonAdaptor})}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}pyproxy_new_ex.sig="eiiiii";function pyproxy_new(ptrobj){try{return Module.pyproxy_new(ptrobj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}pyproxy_new.sig="ei";function create_once_callable(obj,may_syncify){try{_Py_IncRef(obj);let alreadyCalled=!!0;function wrapper(...args){if(alreadyCalled){throw new Error("OnceProxy can only be called once")}try{if(may_syncify){return Module.callPyObjectMaybePromising(obj,args)}else{return Module.callPyObject(obj,args)}}finally{wrapper.destroy()}}wrapper.destroy=function(){if(alreadyCalled){throw new Error("OnceProxy has already been destroyed")}alreadyCalled=!!1;Module.finalizationRegistry.unregister(wrapper);_Py_DecRef(obj)};Module.finalizationRegistry.register(wrapper,{ptr:obj},wrapper);return wrapper}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}create_once_callable.sig="eii";function create_promise_handles(handle_result,handle_exception,done_callback,js2py_converter){try{if(handle_result){_Py_IncRef(handle_result)}if(handle_exception){_Py_IncRef(handle_exception)}if(js2py_converter){_Py_IncRef(js2py_converter)}if(!done_callback){done_callback=x=>{}}let used=!!0;function checkUsed(){if(used){throw new Error("One of the promise handles has already been called.")}}function destroy(){checkUsed();used=!!1;if(handle_result){_Py_DecRef(handle_result)}if(handle_exception){_Py_DecRef(handle_exception)}if(js2py_converter){_Py_DecRef(js2py_converter)}}function onFulfilled(res){checkUsed();try{if(handle_result){return _create_promise_handles_result_helper(handle_result,js2py_converter,res)}}finally{done_callback(res);destroy()}}function onRejected(err){checkUsed();try{if(handle_exception){return Module.callPyObjectMaybePromising(handle_exception,[err])}}finally{done_callback(undefined);destroy()}}onFulfilled.destroy=destroy;onRejected.destroy=destroy;return[onFulfilled,onRejected]}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}create_promise_handles.sig="eiiei";function _python2js_buffer_inner(buf,itemsize,ndim,format,shape,strides,suboffsets){try{let converter=Module.get_converter(format,itemsize);return Module._python2js_buffer_recursive(buf,0,{ndim,format,itemsize,shape,strides,suboffsets,converter})}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}_python2js_buffer_inner.sig="eiiiiiii";function jslib_init_js(){try{HEAP32[_Jsr_undefined/4>>>0]=_hiwire_intern(undefined);HEAP32[_Jsr_true/4>>>0]=_hiwire_intern(true);HEAP32[_Jsr_false/4>>>0]=_hiwire_intern(false);HEAP32[_Jsr_error/4>>>0]=_hiwire_intern(_Jsv_GetError());HEAP32[_Jsr_novalue/4>>>0]=_hiwire_intern({noValueMarker:1});Module.novalue=_hiwire_get(HEAP32[_Jsr_novalue/4>>>0]);Module.error=_hiwire_get(HEAP32[_Jsr_error/4>>>0]);Hiwire.num_keys=_hiwire_num_refs;return 0}catch(e){Module.handle_js_error(e);return-1}return 0}jslib_init_js.sig="i";function JsvNoValue_Check(v){return v===Module.novalue}JsvNoValue_Check.sig="ie";function JsvBigInt_fromInt(x){return BigInt(x)}JsvBigInt_fromInt.sig="ei";function JsvNum_fromInt(x){return x}JsvNum_fromInt.sig="ei";function JsvNum_fromDouble(val){return val}JsvNum_fromDouble.sig="ed";function JsvNum_toInt(v){return v}JsvNum_toInt.sig="ie";function JsvBigInt_fromDigits(digits,ndigits){let result=BigInt(0);for(let i=0;i>>2)+i>>>0])<>>2)+ndigits-1>>>0]&2147483648)<=arr.length){return Module.error}return arr.splice(idx,1)[0]}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvArray_Delete.sig="eei";function JsvArray_Push(arr,obj){return arr.push(obj)}JsvArray_Push.sig="iee";function JsvArray_Extend(arr,vals){arr.push(...vals)}JsvArray_Extend.sig="vee";function JsvArray_Insert(arr,idx,value){try{arr.splice(idx,0,value)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvArray_Insert.sig="ieie";function JsvArray_ShallowCopy(arr){try{return"slice"in arr?arr.slice():Array.from(arr)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvArray_ShallowCopy.sig="ee";function JsvArray_slice(obj,length,start,stop,step){try{let result;if(step===1&&obj.slice){result=obj.slice(start,stop)}else{result=Array.from({length},(_,i)=>obj[start+i*step])}return result}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvArray_slice.sig="eeiiii";function JsvArray_slice_assign(obj,slicelength,start,stop,step,values_length,values){try{let jsvalues=[];for(let i=0;i>>2)+i>>>0]);if(ref===Module.error){return-1}jsvalues.push(ref)}if(step===1){obj.splice(start,slicelength,...jsvalues)}else{if(values!==0){for(let i=0;i=0;i--){obj.splice(start+i*step,1)}}}}catch(e){Module.handle_js_error(e);return-1}return 0}JsvArray_slice_assign.sig="ieiiiiii";function JsvObject_New(){return{}}JsvObject_New.sig="e";function JsvObject_SetAttr(obj,attr,value){try{obj[attr]=value}catch(e){Module.handle_js_error(e);return-1}return 0}JsvObject_SetAttr.sig="ieee";function JsvObject_Entries(obj){try{return Object.entries(obj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_Entries.sig="ee";function JsvObject_Keys(obj){try{return Object.keys(obj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_Keys.sig="ee";function JsvObject_Values(obj){try{return Object.values(obj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_Values.sig="ee";function JsvObject_toString(obj){try{if(hasMethod(obj,"toString")){return obj.toString()}return Object.prototype.toString.call(obj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_toString.sig="ee";function JsvObject_CallMethod(obj,meth,args){try{return obj[meth](...args)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_CallMethod.sig="eeee";function JsvObject_CallMethod_NoArgs(obj,meth){try{return obj[meth]()}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_CallMethod_NoArgs.sig="eee";function JsvObject_CallMethod_OneArg(obj,meth,arg){try{return obj[meth](arg)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_CallMethod_OneArg.sig="eeee";function JsvObject_CallMethod_TwoArgs(obj,meth,arg1,arg2){try{return obj[meth](arg1,arg2)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvObject_CallMethod_TwoArgs.sig="eeeee";function JsvFunction_Check(obj){try{return typeof obj==="function"}catch(e){return false}}JsvFunction_Check.sig="ie";function JsvFunction_CallBound(func,this_,args){try{return Function.prototype.apply.apply(func,[this_,args])}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvFunction_CallBound.sig="eeee";function JsvFunction_Call_OneArg(func,arg){try{return func(arg)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvFunction_Call_OneArg.sig="eee";function JsvFunction_Construct(func,args){try{return Reflect.construct(func,args)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvFunction_Construct.sig="eee";function JsvPromise_Check(obj){try{return isPromise(obj)}catch(e){return false}}JsvPromise_Check.sig="ie";function JsvPromise_Resolve(obj){try{return Promise.resolve(obj)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvPromise_Resolve.sig="ee";function jslib_init_buffers_js(){try{const dtypes_str=Array.from("bBhHiIqQfd").join(String.fromCharCode(0));const dtypes_ptr=stringToNewUTF8(dtypes_str);const dtypes_map=Object.fromEntries(Object.entries(dtypes_str).map(([idx,val])=>[val,dtypes_ptr+ +idx]));const buffer_datatype_map=new Map([["Int8Array",[dtypes_map["b"],1,true]],["Uint8Array",[dtypes_map["B"],1,true]],["Uint8ClampedArray",[dtypes_map["B"],1,true]],["Int16Array",[dtypes_map["h"],2,true]],["Uint16Array",[dtypes_map["H"],2,true]],["Int32Array",[dtypes_map["i"],4,true]],["Uint32Array",[dtypes_map["I"],4,true]],["Float32Array",[dtypes_map["f"],4,true]],["Float64Array",[dtypes_map["d"],8,true]],["BigInt64Array",[dtypes_map["q"],8,true]],["BigUint64Array",[dtypes_map["Q"],8,true]],["DataView",[dtypes_map["B"],1,false]],["ArrayBuffer",[dtypes_map["B"],1,false]]]);Module.get_buffer_datatype=function(jsobj){return buffer_datatype_map.get(jsobj.constructor.name)||[0,0,false]}}catch(e){Module.handle_js_error(e);return-1}return 0}jslib_init_buffers_js.sig="i";function JsvBuffer_assignToPtr(buf,ptr){try{Module.HEAPU8.set(bufferAsUint8Array(buf),ptr)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_assignToPtr.sig="iei";function JsvBuffer_assignFromPtr(buf,ptr){try{bufferAsUint8Array(buf).set(Module.HEAPU8.subarray(ptr,ptr+buf.byteLength))}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_assignFromPtr.sig="iei";function JsvBuffer_readFromFile(buf,fd){try{let uint8_buf=bufferAsUint8Array(buf);let stream=Module.FS.streams[fd];Module.FS.read(stream,uint8_buf,0,uint8_buf.byteLength)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_readFromFile.sig="iei";function JsvBuffer_writeToFile(buf,fd){try{let uint8_buf=bufferAsUint8Array(buf);let stream=Module.FS.streams[fd];Module.FS.write(stream,uint8_buf,0,uint8_buf.byteLength)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_writeToFile.sig="iei";function JsvBuffer_intoFile(buf,fd){try{let uint8_buf=bufferAsUint8Array(buf);let stream=Module.FS.streams[fd];Module.FS.write(stream,uint8_buf,0,uint8_buf.byteLength,undefined,true)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvBuffer_intoFile.sig="iei";function JsvGenerator_Check(obj){try{return getTypeTag(obj)==="[object Generator]"}catch(e){return false}}JsvGenerator_Check.sig="ie";function JsvAsyncGenerator_Check(obj){try{return getTypeTag(obj)==="[object AsyncGenerator]"}catch(e){return false}}JsvAsyncGenerator_Check.sig="ie";function JsvError_Throw(e){throw e}JsvError_Throw.sig="ve";function Jsv_less_than(a,b){try{return!!(ab)}catch(e){return false}}Jsv_greater_than.sig="iee";function Jsv_greater_than_equal(a,b){try{return!!(a>=b)}catch(e){return false}}Jsv_greater_than_equal.sig="iee";function JsvMap_New(){try{return new Map}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvMap_New.sig="e";function JsvLiteralMap_New(){try{return new API.LiteralMap}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvLiteralMap_New.sig="e";function JsvMap_Set(map,key,val){try{map.set(key,val)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvMap_Set.sig="ieee";function JsvSet_New(){try{return new Set}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}JsvSet_New.sig="e";function JsvSet_Add(set,val){try{set.add(val)}catch(e){Module.handle_js_error(e);return-1}return 0}JsvSet_Add.sig="iee";function _python2js_addto_postprocess_list(list,parent,key,value){list.push([parent,key,value])}_python2js_addto_postprocess_list.sig="veeei";function _python2js_handle_postprocess_list(list,cache){for(const[parent,key,ptr]of list){let val=cache.get(ptr);if(parent.constructor.name==="LiteralMap"){parent.set(key,val)}else{parent[key]=val}}}_python2js_handle_postprocess_list.sig="vee";function _python2js_ascii(ptr,len){try{if(len>=64){let decoder=Module._asciiTextDecoder;if(!decoder){decoder=Module._asciiTextDecoder=new TextDecoder("latin1")}return decoder.decode(Module.HEAPU8.subarray(ptr,ptr+len))}let jsstr="";for(let i=0;i>>0)+i>>>0])}return jsstr}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}_python2js_ascii.sig="eii";function _python2js_ucs1(ptr,len){try{let jsstr="";for(let i=0;i>>0)+i>>>0])}return jsstr}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}_python2js_ucs1.sig="eii";function _python2js_ucs2(ptr,len){try{let jsstr="";for(let i=0;i>>1)+i>>>0])}return jsstr}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}_python2js_ucs2.sig="eii";function _python2js_ucs4(ptr,len){try{let jsstr="";for(let i=0;i>>2)+i>>>0])}return jsstr}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}_python2js_ucs4.sig="eii";function _python2js_add_to_cache(cache,pyparent,jsparent){try{cache.set(pyparent,jsparent)}catch(e){Module.handle_js_error(e);return-1}return 0}_python2js_add_to_cache.sig="ieie";function _python2js_cache_lookup(cache,pyparent){return cache.get(pyparent)||Module.error}_python2js_cache_lookup.sig="eei";function _JsObject_Set_js(obj,key,value){try{if(key in obj){return-2}obj[key]=value}catch(e){Module.handle_js_error(e);return-1}return 0}_JsObject_Set_js.sig="ieee";function _JsArray_PushEntry_helper(array,key,value){try{array.push([key,value])}catch(e){Module.handle_js_error(e);return-1}return 0}_JsArray_PushEntry_helper.sig="ieee";function _JsArray_PostProcess_helper(jscontext,array){try{return jscontext.dict_converter(array)}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}_JsArray_PostProcess_helper.sig="eee";function python2js__default_converter_js(jscontext,object){try{let proxy=Module.pyproxy_new(object);try{return jscontext.default_converter(proxy,jscontext.converter,jscontext.cacheConversion)}finally{proxy.destroy()}}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}python2js__default_converter_js.sig="eei";function python2js__eager_converter_js(jscontext,object){try{if(jscontext.eager_visited.has(object)){return Module.novalue}jscontext.eager_visited.add(object);const proxy=Module.pyproxy_new(object);try{return jscontext.eager_converter(proxy,jscontext.converter,jscontext.cacheConversion)}finally{proxy.destroy()}}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}python2js__eager_converter_js.sig="eei";function python2js_custom__create_jscontext(context,cache,dict_converter,default_converter,eager_converter){try{const jscontext={};if(dict_converter){jscontext.dict_converter=dict_converter}if(default_converter){jscontext.default_converter=default_converter;jscontext.cacheConversion=function(input,output){if(!API.isPyProxy(input)){throw new TypeError("The first argument to cacheConversion must be a PyProxy.")}const input_ptr=Module.PyProxy_getPtr(input);cache.set(input_ptr,output)}}if(eager_converter){jscontext.eager_converter=eager_converter;jscontext.eager_visited=new Set}if(default_converter||eager_converter){jscontext.converter=function(x){if(!API.isPyProxy(x)){return x}const ptr=Module.PyProxy_getPtr(x);let res;try{res=__python2js(context,ptr)}catch(e){API.fatal_error(e)}if(res===Module.error){_pythonexc2js()}return res}}return jscontext}catch(e){Module.handle_js_error(e);return Module.error}errNoRet()}python2js_custom__create_jscontext.sig="eieeee";function destroy_proxies_js(proxies_id){try{for(const proxy of proxies_id){proxy.destroy()}}catch(e){Module.handle_js_error(e);return-1}return 0}destroy_proxies_js.sig="ie";function pyodide_js_init(){"use strict";(()=>{var Qr=Object.create;var tt=Object.defineProperty;var Xr=Object.getOwnPropertyDescriptor;var Zr=Object.getOwnPropertyNames;var en=Object.getPrototypeOf,tn=Object.prototype.hasOwnProperty;var a=(t,e)=>tt(t,"name",{value:e,configurable:!0}),x=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var rn=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Zr(e))!tn.call(t,o)&&o!==r&&tt(t,o,{get:()=>e[o],enumerable:!(n=Xr(e,o))||n.enumerable});return t};var M=(t,e,r)=>(r=t!=null?Qr(en(t)):{},rn(e||!t||!t.__esModule?tt(r,"default",{value:t,enumerable:!0}):r,t));function nn(t){return!isNaN(parseFloat(t))&&isFinite(t)}a(nn,"_isNumber");function j(t){return t.charAt(0).toUpperCase()+t.substring(1)}a(j,"_capitalize");function rt(t){return function(){return this[t]}}a(rt,"_getter");var K=["isConstructor","isEval","isNative","isToplevel"],V=["columnNumber","lineNumber"],J=["fileName","functionName","source"],on=["args"],an=["evalOrigin"],he=K.concat(V,J,on,an);function T(t){if(t)for(var e=0;e-1&&(i=i.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var s=i.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),l=s.match(/ (\(.+\)$)/);s=l?s.replace(l[0],""):s;var u=this.extractLocation(l?l[1]:s),d=l&&s||void 0,p=["eval",""].indexOf(u[0])>-1?void 0:u[0];return new be({functionName:d,fileName:p,lineNumber:u[1],columnNumber:u[2],source:i})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:a(function(n){var o=n.stack.split(`\n`).filter(function(i){return!i.match(e)},this);return o.map(function(i){if(i.indexOf(" > eval")>-1&&(i=i.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),i.indexOf("@")===-1&&i.indexOf(":")===-1)return new be({functionName:i});var s=/((.*".+"[^@]*)?[^@]*)(?:@)/,l=i.match(s),u=l&&l[1]?l[1]:void 0,d=this.extractLocation(i.replace(s,""));return new be({functionName:u,fileName:d[0],lineNumber:d[1],columnNumber:d[2],source:i})},this)},"ErrorStackParser$$parseFFOrSafari")}}a(sn,"ErrorStackParser");var ln=new sn;var nt=ln;function jt(t){if(typeof t=="string")t=new Error(t);else if(t&&typeof t=="object"&&t.name==="ExitStatus"){let e=t.status;t=new te(t.message),t.status=e}else if(typeof t!="object"||t===null||typeof t.stack!="string"||typeof t.message!="string"){let e=API.getTypeTag(t),r=`A value of type ${typeof t} with tag ${e} was thrown as an error!`;try{r+=`\nString interpolation of the thrown value gives """${t}""".`}catch{r+=`\nString interpolation of the thrown value fails.`}try{r+=`\nThe thrown value's toString method returns """${t.toString()}""".`}catch{r+=`\nThe thrown value's toString method fails.`}t=new Error(r)}return t}a(jt,"ensureCaughtObjectIsError");var ot=class extends Error{static{a(this,"CppException")}constructor(e,r,n){let o=Module.getCppExceptionThrownObjectFromWebAssemblyException(n);r||(r=`The exception is an object of type ${e} at address ${o} which does not inherit from std::exception`),super(r),this.ty=e}get name(){return`${this.constructor.name} ${this.ty}`}},cn=WebAssembly.Exception,un=a(t=>t instanceof cn,"isWasmException");function zt(t){let[e,r]=Module.getExceptionMessage(t);return new ot(e,r,t)}a(zt,"convertCppException");Tests.convertCppException=zt;var Wt=!1;API.fatal_error=function(t){if(t&&t.pyodide_fatal_error)return;if(Wt){console.error("Recursive call to fatal_error. Inner error was:"),console.error(t);return}if(t instanceof re)throw t;typeof t=="number"||un(t)?t=zt(t):t=jt(t),t.pyodide_fatal_error=!0,Wt=!0;let e=t instanceof te;e||(console.error("Pyodide has suffered a fatal error. Please report this to the Pyodide maintainers."),console.error("The cause of the fatal error was:"),API.inTestHoist?(console.error(t.toString()),console.error(t.stack)):console.error(t));try{e||_dump_traceback();let n=`Pyodide already ${e?"exited":"fatally failed"} and can no longer be used.`;for(let o of Reflect.ownKeys(API.public_api))typeof o=="string"&&o.startsWith("_")||o==="version"||Object.defineProperty(API.public_api,o,{enumerable:!0,configurable:!0,get:a(()=>{throw new Error(n)},"get")});API.on_fatal&&API.on_fatal(t)}catch(r){console.error("Another error occurred while handling the fatal error:"),console.error(r)}throw t};API.maybe_fatal_error=function(t){API._skip_unwind_fatal_error&&t==="unwind"||API.fatal_error(t)};var at=[];API.capture_stderr=function(){at=[],Module.FS.createDevice("/dev","capture_stderr",null,t=>at.push(t)),Module.FS.closeStream(2),Module.FS.open("/dev/capture_stderr",1)};API.restore_stderr=function(){return Module.FS.closeStream(2),Module.FS.unlink("/dev/capture_stderr"),Module.FS.open("/dev/stderr",1),UTF8ArrayToString(new Uint8Array(at))};API.fatal_loading_error=function(...t){let e=t.join(" ");if(_PyErr_Occurred()){API.capture_stderr(),_PyErr_Print();let r=API.restore_stderr();e+=`\n`+r}throw new Pe(e)};function it(t){if(!t)return!1;let e=t.fileName||"";if(e.includes("wasm-function"))return!0;if(!e.includes("pyodide.asm.mjs"))return!1;let r=t.functionName||"";return r.startsWith("Object.")&&(r=r.slice(7)),API.public_api&&r in API.public_api&&r!=="PythonError"?(t.functionName=r,!1):!0}a(it,"isPyodideFrame");function Ht(t){return it(t)&&t.functionName==="new_error"}a(Ht,"isErrorStart");Module.handle_js_error=function(t){if(t&&t.pyodide_fatal_error)throw t;if(t instanceof R)return;let e=!1;t instanceof z&&(e=_restore_sys_last_exception(t.__error_address));let r,n;try{r=nt.parse(t)}catch{n=!0}if(n&&(t=jt(t)),!e){let o=_JsProxy_create(t);_set_error(o),_Py_DecRef(o)}if(!n){if(Ht(r[0])||Ht(r[1]))for(;it(r[0]);)r.shift();for(let o of r){if(it(o))break;let i=stringToNewUTF8(o.functionName||"???"),s=stringToNewUTF8(o.fileName||"???.js");__PyTraceback_Add(i,s,o.lineNumber),_free(i),_free(s)}}};var z=class extends Error{static{a(this,"PythonError")}constructor(e,r,n){let o=Error.stackTraceLimit;Error.stackTraceLimit=1/0,super(r),Error.stackTraceLimit=o,this.type=e,this.__error_address=n}};API.PythonError=z;var R=class extends Error{static{a(this,"_PropagatePythonError")}constructor(){super("If you are seeing this message, an internal Pyodide error has occurred. Please report it to the Pyodide maintainers.")}};Module._PropagatePythonError=R;function dn(t){Object.defineProperty(t.prototype,"name",{value:t.name})}a(dn,"setName");var Pe=class extends Error{static{a(this,"FatalPyodideError")}},te=class extends Error{static{a(this,"Exit")}},re=class extends Error{static{a(this,"NoGilError")}};[R,Pe,te,z,re].forEach(dn);API.NoGilError=re;API.errorConstructors=new Map([EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,globalThis.DOMException,globalThis.AssertionError,globalThis.SystemError].filter(t=>t).map(t=>[t.name,t]));API.deserializeError=function(t,e,r){let n=API.errorConstructors.get(t)||Error,o=new n(e);return API.errorConstructors.has(t)||(o.name=t),o.message=e,o.stack=r,o};function yn(t){let e=0,r=t.length,n=new Uint32Array(r),o=0;for(let l=0;l=55296&&u<=56319){let p=t.charCodeAt(l+1);p>=56320&&p<=57343?(d=(u-55296)*1024+(p-56320)+65536,l++):d=u}else d=u;n[o++]=d,e=d>e?d:e}let i=_PyUnicode_New(o,e);if(i===0)throw new R;let s=_PyUnicode_Data(i);if(e>65535)for(let l=0;l>>2)+l>>>0]=n[l];else if(e>255)for(let l=0;l>>1)+l>>>0]=n[l];else for(let l=0;l>>0)+l>>>0]=n[l];return i}a(yn,"js2python_string");function pn(t){let e=t,r=0;for(t<0&&(t=-t),t<<=BigInt(1);t;)r++,t>>=BigInt(32);let n=stackSave(),o=stackAlloc(r*4);t=e;for(let l=0;l>>2)+l>>>0]=Number(t&BigInt(4294967295)),t>>=BigInt(32);let i=__PyLong_FromByteArray(o,r*4,!0,!0);stackRestore(n);let s=__js2python_bigint(i);return _Py_DecRef(i),s}a(pn,"js2python_bigint");function ne(t){let e=fn(t);if(e===0)throw new R;return e}a(ne,"js2python_convertImmutable");Module.js2python_convertImmutable=ne;function fn(t){let e=typeof t;if(e==="string")return yn(t);if(e==="number")return Number.isSafeInteger(t)?_PyLong_FromDouble(t):_PyFloat_FromDouble(t);if(e==="bigint")return pn(t);if(t===void 0)return __js2python_none();if(t===null)return __js2python_null();if(t===!0)return __js2python_true();if(t===!1)return __js2python_false();if(API.isPyProxy(t)){let{props:r,shared:n}=Module.PyProxy_getAttrs(t);return r.roundtrip?_JsProxy_create(t):__js2python_pyproxy(n.ptr)}}a(fn,"js2python_convertImmutableInner");function mn(t,e){let r=_PyList_New(t.length);if(r===0)return 0;let n=0;try{e.cache.set(t,r);for(let o=0;oModule.pyproxy_new(Se(o,n)),"converter"),cacheConversion(o,i){if(API.isPyProxy(i))n.cache.set(o,Module.PyProxy_getPtr(i));else throw new Error("Second argument should be a PyProxy!")}};return Se(t,n)}a(hn,"js2python_convert");Module.js2python_convert=hn;Module.processBufferFormatString=function(t,e=""){if(t.length>2)throw new Error(`Expected format string to have length <= 2, got '${t}'.`+e);let r=t.slice(-1),n=t.slice(0,-1),o;switch(n){case"!":case">":o=!0;break;case"<":case"@":case"=":case"":o=!1;break;default:throw new Error(`Unrecognized alignment character ${n}.`+e)}let i;switch(r){case"b":i=Int8Array;break;case"s":case"p":case"c":case"B":case"?":i=Uint8Array;break;case"h":i=Int16Array;break;case"H":i=Uint16Array;break;case"i":case"l":case"n":i=Int32Array;break;case"I":case"L":case"N":case"P":i=Uint32Array;break;case"q":if(globalThis.BigInt64Array===void 0)throw new Error("BigInt64Array is not supported on this browser."+e);i=BigInt64Array;break;case"Q":if(globalThis.BigUint64Array===void 0)throw new Error("BigUint64Array is not supported on this browser."+e);i=BigUint64Array;break;case"f":i=Float32Array;break;case"d":i=Float64Array;break;case"e":throw new Error("Javascript has no Float16 support.");default:throw new Error(`Unrecognized format character '${r}'.`+e)}return[i,o]};Module.python2js_buffer_1d_contiguous=function(t,e,r){let n=e*r;return HEAP8.slice(t,t+n).buffer};Module.python2js_buffer_1d_noncontiguous=function(t,e,r,n,o){let i=o*n,s=new Uint8Array(i);for(let l=0;l=0&&(u=HEAPU32[(u>>>2)+0>>>0]+r),s.set(HEAP8.subarray(u>>>0,u+o>>>0),l*o)}return s.buffer};Module._python2js_buffer_recursive=function(t,e,r){let{shape:n,strides:o,ndim:i,converter:s,itemsize:l,suboffsets:u}=r,d=HEAPU32[(n>>>2)+e>>>0],p=HEAP32[(o>>>2)+e>>>0],v=-1;if(i===0)return s(Module.python2js_buffer_1d_contiguous(t,l,1));if(u!==0&&(v=HEAP32[(u>>>2)+e>>>0]),e===i-1){let g;return p===l&&v<0?g=Module.python2js_buffer_1d_contiguous(t,p,d):g=Module.python2js_buffer_1d_noncontiguous(t,p,v,d,l),s(g)}let P=[];for(let g=0;g=0&&(curptr=HEAPU32[(curptr>>>2)+0>>>0]+v),P.push(Module._python2js_buffer_recursive(E,e+1,r))}return P};Module.get_converter=function(t,e){let r=UTF8ToString(t),[n,o]=Module.processBufferFormatString(r);switch(r.slice(-1)){case"s":let d=new TextDecoder("utf8",{ignoreBOM:!0});return p=>d.decode(p);case"?":return p=>Array.from(new Uint8Array(p),v=>!!v)}if(!o)return d=>new n(d);let s,l;switch(e){case 2:s="getUint16",l="setUint16";break;case 4:s="getUint32",l="setUint32";break;case 8:s="getFloat64",l="setFloat64";break;default:throw new Error(`Unexpected size ${e}`)}function u(d){let p=new DataView(d),v=p[s].bind(p),P=p[l].bind(p);for(let g=0;gnew n(u(d))};function bn(t){try{return t instanceof S}catch{return!1}}a(bn,"isPyProxy");API.isPyProxy=bn;globalThis.FinalizationRegistry?Module.finalizationRegistry=new FinalizationRegistry(({ptr:t,cache:e})=>{e&&(e.leaked=!0,er(e));try{_check_gil();let r=validSuspender.value;validSuspender.value=!1,_Py_DecRef(t),validSuspender.value=r}catch(r){API.fatal_error(r)}}):Module.finalizationRegistry={register(){},unregister(){}};var st=new Map;Module.pyproxy_alloc_map=st;var Pt,St;Module.enable_pyproxy_allocation_tracing=function(){Pt=a(function(t){st.set(t,Error().stack)},"trace_pyproxy_alloc"),St=a(function(t){st.delete(t)},"trace_pyproxy_dealloc")};Module.disable_pyproxy_allocation_tracing=function(){Pt=a(function(t){},"trace_pyproxy_alloc"),St=a(function(t){},"trace_pyproxy_dealloc")};Module.disable_pyproxy_allocation_tracing();var Qt=Symbol("pyproxy.attrs");function Pn(t,e){_check_gil();let r=validSuspender.value;validSuspender.value=!1;try{return _pyproxy_getflags(t,e)}finally{validSuspender.value=r}}a(Pn,"pyproxy_getflags");function ae(t,{flags:e,cache:r,props:n,shared:o,gcRegister:i,jsonAdaptor:s}={}){i===void 0&&(i=!0);let l=e!==void 0?e:Pn(t,!!s);l===-1&&_pythonexc2js();let u=l&8192,d=l&32768,p=l&1<<17,v=Module.getPyProxyClass(l),P;l&256?(P=a(function(){},"target"),Object.setPrototypeOf(P,v.prototype),delete P.length,delete P.name,P.prototype=void 0):P=Object.create(v.prototype);let g=!!o;o||(r||(r={map:new Map,json_adaptor_map:new Map,refcnt:0}),r.refcnt++,o={ptr:t,cache:r,flags:l,promise:void 0,destroyed_msg:void 0,gcRegistered:!1},_Py_IncRef(t)),n={isBound:!!n?.isBound,captureThis:!!n?.captureThis,boundArgs:n?.boundArgs??[],boundThis:n?.boundThis,roundtrip:!!n?.roundtrip};let E;d?E=C:u?E=Tn:p?E=Mn:E=I;let B=new Proxy(P,E);!g&&i&&Xt(o),g||Pt(B);let k={shared:o,props:n};return P[Qt]=k,B}a(ae,"pyproxy_new");Module.pyproxy_new=ae;function Xt(t){let{ptr:e,cache:r}=t,n={ptr:e,cache:r};t.gcRegistered=!0,Module.finalizationRegistry.register(t,n,t)}a(Xt,"gc_register_proxy");Module.gc_register_proxy=Xt;function He(t){return t[Qt]}a(He,"_getAttrsQuiet");Module.PyProxy_getAttrsQuiet=He;function F(t){let e=He(t);if(!e.shared.ptr)throw new Error(e.shared.destroyed_msg);return e}a(F,"_getAttrs");Module.PyProxy_getAttrs=F;function h(t){return F(t).shared.ptr}a(h,"_getPtr");function w(t){return Object.getPrototypeOf(t).$$flags}a(w,"_getFlags");function Zt(t){return!!(w(t)&98304)}a(Zt,"isJsonAdaptor");function Vt(t,e,r){let{captureThis:n,boundArgs:o,boundThis:i,isBound:s}=F(t).props;return n?s?[i].concat(o,r):[e].concat(r):s?o.concat(r):r}a(Vt,"_adjustArgs");var Jt=new Map;Module.getPyProxyClass=function(t){let e=[[1,lt],[2,q],[4,G],[8,U],[16,ut],[32,yt],[2048,pt],[512,dt],[1024,ft],[4096,mt],[64,ht],[128,bt],[256,Be],[8192,gt],[16384,_t]],r=Jt.get(t);if(r)return r;let n={};for(let[l,u]of e)t&l&&Object.assign(n,Object.getOwnPropertyDescriptors(u.prototype));(t&8192||t&2)&&Object.assign(n,Object.getOwnPropertyDescriptors(ct.prototype)),n.constructor=Object.getOwnPropertyDescriptor(S.prototype,"constructor"),Object.assign(n,Object.getOwnPropertyDescriptors({$$flags:t}));let o=t&256?nr:rr,i=Object.create(o,n);function s(){}return a(s,"NewPyProxyClass"),s.prototype=i,Jt.set(t,s),s};Module.PyProxy_getPtr=h;var qt="This borrowed attribute proxy was automatically destroyed in the process of destroying the proxy it was borrowed from. Try using the 'copy' method.";function er(t){if(t&&(t.refcnt--,!t.leaked&&t.refcnt===0)){for(let e of t.map.values())Module.pyproxy_destroy(e,qt,!0);for(let e of t.json_adaptor_map.values())Module.pyproxy_destroy(e,qt,!0)}}a(er,"pyproxy_decref_cache");function Sn(t,e){if(e=e||"Object has already been destroyed",API.debug_ffi){let r=t.type,n;try{n=t.toString()}catch(o){if(o.pyodide_fatal_error)throw o}e+=`\nThe object was of type "${r}" and `,n?e+=`had repr "${n}"`:e+="an error was raised when trying to generate its repr"}else e+="\nFor more information about the cause of this error, use `pyodide.setDebug(true)`";return e}a(Sn,"generateDestroyedMessage");Module.pyproxy_destroy=function(t,e,r){let{shared:n,props:o}=He(t);if(!n.ptr||!r&&o.roundtrip)return;n.destroyed_msg=Sn(t,e);let i=n.ptr;n.ptr=0,n.gcRegistered&&Module.finalizationRegistry.unregister(n),er(n.cache);try{_check_gil();let s=validSuspender.value;validSuspender.value=!1,_Py_DecRef(i),St(t),validSuspender.value=s}catch(s){API.fatal_error(s)}};function xe(t,e,r){let n=e.length,o=Object.keys(r),i=Object.values(r),s=o.length;e.push(...i);let l;try{_check_gil();let u=validSuspender.value;validSuspender.value=!1,l=__pyproxy_apply(t,e,n,o,s),validSuspender.value=u}catch(u){API.maybe_fatal_error(u);return}if(l===Module.error&&_pythonexc2js(),l&&l.type==="coroutine"&&l._ensure_future){_check_gil();let u=validSuspender.value;validSuspender.value=!1;let d=__iscoroutinefunction(t);validSuspender.value=u,d&&l._ensure_future()}return l}a(xe,"callPyObjectKwargs");async function we(t,e,r){if(!Module.jspiSupported)throw new Error("WebAssembly stack switching not supported in this JavaScript runtime");let n=e.length,o=Object.keys(r),i=Object.values(r),s=o.length;e.push(...i),_Py_IncRef(t),await new Promise(d=>API.scheduleCallback(d,0));let l,u=_malloc(4);try{enterTask(),_check_gil();let d=validSuspender.value;validSuspender.value=!1,l=await Module.promisingApply(t,e,n,o,s,u),validSuspender.value=d}catch(d){API.fatal_error(d)}try{if(l=l[0],l===Module.error&&(_PyErr_SetRaisedException(HEAPU32[u/4>>>0]),_pythonexc2js()),l&&l.type==="coroutine"&&l._ensure_future){_check_gil();let d=validSuspender.value;validSuspender.value=!1;let p=__iscoroutinefunction(t);validSuspender.value=d,p&&l._ensure_future()}return l}finally{_free(u),_Py_DecRef(t)}}a(we,"callPyObjectKwargsPromising");Module.callPyObjectMaybePromising=async function(t,e){return Module.jspiSupported?await we(t,e,{}):xe(t,e,{})};Module.callPyObject=function(t,e){return xe(t,e,{})};var tr=Symbol.dispose??Symbol("dispose"),S=class t{static{a(this,"PyProxy")}static[Symbol.hasInstance](e){return[t,or].some(r=>Function.prototype[Symbol.hasInstance].call(r,e))}constructor(){throw new TypeError("PyProxy is not a constructor")}get[Symbol.toStringTag](){return"PyProxy"}get type(){let e=h(this);return __pyproxy_type(e)}toString(){let e=h(this),r;try{_check_gil();let n=validSuspender.value;validSuspender.value=!1,r=__pyproxy_repr(e),validSuspender.value=n}catch(n){API.fatal_error(n)}return r===Module.error&&_pythonexc2js(),r}destroy(e={}){e=Object.assign({message:"",destroyRoundtrip:!0},e);let{message:r,destroyRoundtrip:n}=e;Module.pyproxy_destroy(this,r,n)}[tr](){this.destroy()}copy(){let e=F(this);return ae(e.shared.ptr,{flags:w(this),cache:e.shared.cache,props:e.props})}toJs({depth:e=-1,pyproxies:r=void 0,create_pyproxies:n=!0,dict_converter:o=void 0,default_converter:i=void 0,eager_converter:s=void 0}={}){let l=h(this),u,d;n?r?d=r:d=[]:d=Module.error;try{_check_gil();let p=validSuspender.value;validSuspender.value=!1,u=_python2js_custom(l,e,d,o??Module.error,i??Module.error,s??Module.error),validSuspender.value=p}catch(p){API.fatal_error(p)}return u===Module.error&&_pythonexc2js(),u}},rr=S.prototype;Tests.Function=Function;var nr=Object.create(Function.prototype,Object.getOwnPropertyDescriptors(rr));function or(){}a(or,"PyProxyFunction");or.prototype=nr;var Ae=class extends S{static{a(this,"PyProxyWithLength")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&1)}},lt=class{static{a(this,"PyLengthMethods")}get length(){let e=h(this),r;try{_check_gil();let n=validSuspender.value;validSuspender.value=!1,r=_PyObject_Size(e),validSuspender.value=n}catch(n){API.fatal_error(n)}return r===-1&&_pythonexc2js(),r}},Ie=class extends S{static{a(this,"PyProxyWithGet")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&2)}},ct=class{static{a(this,"PyAsJsonAdaptorMethods")}asJsJson(){let{shared:e,props:r}=F(this),n=w(this);return n&8192?n|=65536:n|=32768,ae(e.ptr,{shared:e,flags:n,props:r})}},q=class{static{a(this,"PyGetItemMethods")}get(e){let{shared:r}=F(this),n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,n=__pyproxy_getitem(r.ptr,e,r.cache.json_adaptor_map,Zt(this)),validSuspender.value=o}catch(o){API.fatal_error(o)}if(n===Module.error)if(_PyErr_Occurred())_pythonexc2js();else return;return n}asJsJson(){throw new Error("Should not happen")}},Ee=class extends S{static{a(this,"PyProxyWithSet")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&4)}},G=class{static{a(this,"PySetItemMethods")}set(e,r){let n=h(this),o;try{_check_gil();let i=validSuspender.value;validSuspender.value=!1,o=__pyproxy_setitem(n,e,r),validSuspender.value=i}catch(i){API.fatal_error(i)}o===-1&&_pythonexc2js()}delete(e){let r=h(this),n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,n=__pyproxy_delitem(r,e),validSuspender.value=o}catch(o){API.fatal_error(o)}n===-1&&_pythonexc2js()}},ke=class extends S{static{a(this,"PyProxyWithHas")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&8)}},U=class{static{a(this,"PyContainsMethods")}has(e){let r=h(this),n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,n=__pyproxy_contains(r,e),validSuspender.value=o}catch(o){API.fatal_error(o)}return n===-1&&_pythonexc2js(),n===1}};function*vn(t,e,r,n){let o=[];try{for(;;){_check_gil();let i=validSuspender.value;validSuspender.value=!1;let s=__pyproxy_iter_next(t,r,n);if(validSuspender.value=i,s===Module.error)break;yield s,!n&&API.isPyProxy(s)&&o.push(s)}}catch(i){API.fatal_error(i)}finally{Module.finalizationRegistry.unregister(e),_Py_DecRef(t)}try{o.forEach(i=>Module.pyproxy_destroy(i,"This borrowed proxy was automatically destroyed when an iterator was exhausted."))}catch{}_PyErr_Occurred()&&_pythonexc2js()}a(vn,"iter_helper");var Ne=class extends S{static{a(this,"PyIterable")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&48)}},ut=class{static{a(this,"PyIterableMethods")}[Symbol.iterator](){let{shared:e}=F(this),r={},n;try{_check_gil();let i=validSuspender.value;validSuspender.value=!1,n=_PyObject_GetIter(e.ptr),validSuspender.value=i}catch(i){API.fatal_error(i)}n===0&&_pythonexc2js();let o=vn(n,r,e.cache.json_adaptor_map,Zt(this));return Module.finalizationRegistry.register(o,{ptr:n},r),o}};async function*wn(t,e){try{for(;;){let r;try{_check_gil();let n=validSuspender.value;if(validSuspender.value=!1,r=__pyproxy_aiter_next(t),validSuspender.value=n,r===Module.error)break}catch(n){API.fatal_error(n)}try{yield await r}catch(n){if(n&&typeof n=="object"&&n.type==="StopAsyncIteration")return;throw n}finally{r.destroy()}}}finally{Module.finalizationRegistry.unregister(e),_Py_DecRef(t)}_PyErr_Occurred()&&_pythonexc2js()}a(wn,"aiter_helper");var Oe=class extends S{static{a(this,"PyAsyncIterable")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&1536)}},dt=class{static{a(this,"PyAsyncIterableMethods")}[Symbol.asyncIterator](){let e=h(this),r={},n;try{_check_gil();let i=validSuspender.value;validSuspender.value=!1,n=_PyObject_GetAIter(e),validSuspender.value=i}catch(i){API.fatal_error(i)}n===0&&_pythonexc2js();let o=wn(n,r);return Module.finalizationRegistry.register(o,{ptr:n},r),o}},Te=class extends S{static{a(this,"PyIterator")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&32)}},yt=class{static{a(this,"PyIteratorMethods")}[Symbol.iterator](){return this}next(e=void 0){let r,n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,r=__pyproxyGen_Send(h(this),e),validSuspender.value=o}catch(o){API.fatal_error(o)}return r===Module.error&&_pythonexc2js(),r}},De=class extends S{static{a(this,"PyGenerator")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&2048)}},pt=class{static{a(this,"PyGeneratorMethods")}throw(e){let r;try{_check_gil();let n=validSuspender.value;validSuspender.value=!1,r=__pyproxyGen_throw(h(this),e),validSuspender.value=n}catch(n){API.fatal_error(n)}return r===Module.error&&_pythonexc2js(),r}return(e){let r;try{_check_gil();let n=validSuspender.value;validSuspender.value=!1,r=__pyproxyGen_return(h(this),e),validSuspender.value=n}catch(n){API.fatal_error(n)}return r===Module.error&&_pythonexc2js(),r}},Me=class extends S{static{a(this,"PyAsyncIterator")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&1024)}},ft=class{static{a(this,"PyAsyncIteratorMethods")}[Symbol.asyncIterator](){return this}async next(e=void 0){let r;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,r=__pyproxyGen_asend(h(this),e),validSuspender.value=o}catch(o){API.fatal_error(o)}r===Module.error&&_pythonexc2js();let n;try{n=await r}catch(o){if(o&&typeof o=="object"&&o.type==="StopAsyncIteration")return{done:!0,value:n};throw o}finally{r.destroy()}return{done:!1,value:n}}},Re=class extends S{static{a(this,"PyAsyncGenerator")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&4096)}},mt=class{static{a(this,"PyAsyncGeneratorMethods")}async throw(e){let r;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,r=__pyproxyGen_athrow(h(this),e),validSuspender.value=o}catch(o){API.fatal_error(o)}r===Module.error&&_pythonexc2js();let n;try{n=await r}catch(o){if(o&&typeof o=="object"){if(o.type==="StopAsyncIteration")return{done:!0,value:n};if(o.type==="GeneratorExit")return{done:!0,value:n}}throw o}finally{r.destroy()}return{done:!1,value:n}}async return(e){let r;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,r=__pyproxyGen_areturn(h(this)),validSuspender.value=o}catch(o){API.fatal_error(o)}r===Module.error&&_pythonexc2js();let n;try{n=await r}catch(o){if(o&&typeof o=="object"){if(o.type==="StopAsyncIteration")return{done:!0,value:n};if(o.type==="GeneratorExit")return{done:!0,value:e}}throw o}finally{r.destroy()}return{done:!1,value:n}}},Fe=class extends S{static{a(this,"PySequence")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&8192)}};function xn(t,e){let r=t.toString(),n=e.toString();return r===n?0:r{this.insert(n,r)}),this.length}copyWithin(...e){return Array.prototype.copyWithin.apply(this,e),this}fill(...e){return Array.prototype.fill.apply(this,e),this}};function An(t,e){let r=h(t),n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,n=__pyproxy_hasattr(r,e),validSuspender.value=o}catch(o){API.fatal_error(o)}return n===-1&&_pythonexc2js(),n!==0}a(An,"python_hasattr");function In(t,e){let{shared:r}=F(t),n=r.cache.map,o;try{_check_gil();let i=validSuspender.value;validSuspender.value=!1,o=__pyproxy_getattr(r.ptr,e,n),validSuspender.value=i}catch(i){API.fatal_error(i)}if(o===Module.error){_PyErr_Occurred()&&_pythonexc2js();return}return o}a(In,"python_getattr");function En(t,e,r){let n=h(t),o;try{_check_gil();let i=validSuspender.value;validSuspender.value=!1,o=__pyproxy_setattr(n,e,r),validSuspender.value=i}catch(i){API.fatal_error(i)}o===-1&&_pythonexc2js()}a(En,"python_setattr");function kn(t,e){let r=h(t),n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,n=__pyproxy_delattr(r,e),validSuspender.value=o}catch(o){API.fatal_error(o)}n===-1&&_pythonexc2js()}a(kn,"python_delattr");function Nn(t,e,r,n){let o=h(t),i;try{_check_gil();let s=validSuspender.value;validSuspender.value=!1,i=__pyproxy_slice_assign(o,e,r,n),validSuspender.value=s}catch(s){API.fatal_error(s)}return i===Module.error&&_pythonexc2js(),i}a(Nn,"python_slice_assign");function Yt(t,e){let r=h(t),n;try{_check_gil();let o=validSuspender.value;validSuspender.value=!1,n=__pyproxy_pop(r,e),validSuspender.value=o}catch(o){API.fatal_error(o)}return n===Module.error&&_pythonexc2js(),n}a(Yt,"python_pop");var On=new Set(["name","length","caller","arguments"]);function ve(t,e,r){return t instanceof Function?e in t&&!(On.has(e)||r&&e==="prototype"):e in t}a(ve,"filteredHasKey");var I={isExtensible(){return!0},has(t,e){return ve(t,e,!1)?!0:typeof e=="symbol"?!1:(e.startsWith("$")&&(e=e.slice(1)),An(t,e))},get(t,e){return typeof e=="symbol"||ve(t,e,!0)?Reflect.get(t,e):(e.startsWith("$")&&(e=e.slice(1)),In(t,e))},set(t,e,r){let n=Object.getOwnPropertyDescriptor(t,e);return n&&!n.writable&&!n.set?!1:typeof e=="symbol"||ve(t,e,!0)?Reflect.set(t,e,r):(e.startsWith("$")&&(e=e.slice(1)),En(t,e,r),!0)},deleteProperty(t,e){let r=Object.getOwnPropertyDescriptor(t,e);return r&&!r.configurable?!1:typeof e=="symbol"||ve(t,e,!0)?Reflect.deleteProperty(t,e):(e.startsWith("$")&&(e=e.slice(1)),kn(t,e),!0)},ownKeys(t){let e=h(t),r;try{_check_gil();let n=validSuspender.value;validSuspender.value=!1,r=__pyproxy_ownKeys(e),validSuspender.value=n}catch(n){API.fatal_error(n)}return r===Module.error&&_pythonexc2js(),r.push(...Reflect.ownKeys(t)),r},apply(t,e,r){return t.apply(e,r)}};function oe(t){return t&&typeof t=="object"&&t.constructor&&t.constructor.name==="PythonError"}a(oe,"isPythonError");var Tn={isExtensible(){return!0},has(t,e){return typeof e=="string"&&/^[0-9]+$/.test(e)?Number(e)n.toString())),e.push("length"),e}},Dn=new Set(["copy","constructor","$$flags","toString","destroy"]),C={isExtensible(){return!0},has(t,e){return U.prototype.has.call(t,e)?!0:typeof e=="string"&&/^[0-9]+$/.test(e)?U.prototype.has.call(t,Number(e)):!1},get(t,e){if(typeof e=="symbol"||Dn.has(e))return Reflect.get(...arguments);let r=q.prototype.get.call(t,e);return r!==void 0||U.prototype.has.call(t,e)?r:typeof e=="string"&&/^[0-9]+$/.test(e)?q.prototype.get.call(t,Number(e)):Reflect.get(...arguments)},set(t,e,r){if(typeof e=="symbol")return!1;!U.prototype.has.call(t,e)&&typeof e=="string"&&/^[0-9]+$/.test(e)&&(e=Number(e));try{return G.prototype.set.call(t,e,r),!0}catch(n){if(oe(n)&&n.type==="KeyError")return!1;throw n}},deleteProperty(t,e){if(typeof e=="symbol")return!1;!U.prototype.has.call(t,e)&&typeof e=="string"&&/^[0-9]+$/.test(e)&&(e=Number(e));try{return G.prototype.delete.call(t,e),!0}catch(r){if(oe(r)&&r.type==="KeyError")return!1;throw r}},getOwnPropertyDescriptor(t,e){return C.has(t,e)?{configurable:!0,enumerable:!0,value:C.get(t,e),writable:!0}:void 0},ownKeys(t){let e=new Set;return ar(t,e),Array.from(e)}};function ar(t,e){let r=I.get(t,"keys")();for(let n of r)typeof n=="string"?e.add(n):typeof n=="number"&&e.add(n.toString());r.destroy()}a(ar,"dictOwnKeysHelper");var Mn={isExtensible(){return!0},has(t,e){return I.has(t,e)?!0:C.has(t,e)},get(t,e){let r=I.get(t,e);return r!==void 0||I.has(t,e)?r:C.get(t,e)},set(t,e,r){return I.has(t,e)?I.set(t,e,r):C.set(t,e,r)},deleteProperty(t,e){return I.has(t,e)?I.deleteProperty(t,e):C.deleteProperty(t,e)},getOwnPropertyDescriptor(t,e){return Reflect.getOwnPropertyDescriptor(t,e)??C.getOwnPropertyDescriptor(t,e)},ownKeys(t){let e=new Set(I.ownKeys(t));return ar(t,e),Array.from(e)}},Ue=class extends S{static{a(this,"PyAwaitable")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&64)}},ht=class{static{a(this,"PyAwaitableMethods")}_ensure_future(){let{shared:e}=He(this);if(e.promise)return e.promise;let r=e.ptr;r||F(this);let n,o,i=new Promise((l,u)=>{n=l,o=u}),s;try{_check_gil();let l=validSuspender.value;validSuspender.value=!1,s=__pyproxy_ensure_future(r,n,o),validSuspender.value=l}catch(l){API.fatal_error(l)}return s===-1&&_pythonexc2js(),e.promise=i,this.destroy(),i}then(e,r){return this._ensure_future().then(e,r)}catch(e){return this._ensure_future().catch(e)}finally(e){return this._ensure_future().finally(e)}},Ce=class extends S{static{a(this,"PyCallable")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&256)}},Be=class{static{a(this,"PyCallableMethods")}apply(e,r){return r=function(...n){return n}.apply(void 0,r),r=Vt(this,e,r),Module.callPyObject(h(this),r)}call(e,...r){return r=Vt(this,e,r),Module.callPyObject(h(this),r)}callWithOptions({relaxed:e,kwargs:r,promising:n},...o){let i={};if(r){if(o.length===0)throw new TypeError("callWithOptions with 'kwargs: true' requires at least one argument (the key word argument object)");if(i=o.pop(),i.constructor!==void 0&&i.constructor.name!=="Object")throw new TypeError("kwargs argument is not an object")}let s=e?API.pyodide_code.relaxed_call:this;return e&&o.unshift(this),(n?we:xe)(h(s),o,i)}callKwargs(...e){if(e.length===0)throw new TypeError("callKwargs requires at least one argument (the key word argument object)");let r=e.pop();if(r.constructor!==void 0&&r.constructor.name!=="Object")throw new TypeError("kwargs argument is not an object");return xe(h(this),e,r)}callRelaxed(...e){return API.pyodide_code.relaxed_call(this,...e)}callKwargsRelaxed(...e){return API.pyodide_code.relaxed_call.callKwargs(this,...e)}callPromising(...e){return we(h(this),e,{})}callPromisingKwargs(...e){if(e.length===0)throw new TypeError("callKwargs requires at least one argument (the key word argument object)");let r=e.pop();if(r.constructor!==void 0&&r.constructor.name!=="Object")throw new TypeError("kwargs argument is not an object");return we(h(this),e,r)}bind(e,...r){let{shared:n,props:o}=F(this),{boundArgs:i,boundThis:s,isBound:l}=o,u=e;l&&(u=s);let d=i.concat(r);return o=Object.assign({},o,{boundArgs:d,isBound:!0,boundThis:u}),ae(n.ptr,{shared:n,flags:w(this),props:o})}captureThis(){let{props:e,shared:r}=F(this);return e=Object.assign({},e,{captureThis:!0}),ae(r.ptr,{shared:r,flags:w(this),props:e})}};Be.prototype.prototype=Function.prototype;var Rn=new Map([["i8",Int8Array],["u8",Uint8Array],["u8clamped",Uint8ClampedArray],["i16",Int16Array],["u16",Uint16Array],["i32",Int32Array],["u32",Uint32Array],["i32",Int32Array],["u32",Uint32Array],["i64",globalThis.BigInt64Array],["u64",globalThis.BigUint64Array],["f32",Float32Array],["f64",Float64Array],["dataview",DataView]]),$e=class extends S{static{a(this,"PyBuffer")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&!!(w(e)&128)}},bt=class{static{a(this,"PyBufferMethods")}getBuffer(e){let r;if(e&&(r=Rn.get(e),r===void 0))throw new Error(`Unknown type ${e}`);let n=h(this),o;try{_check_gil();let N=validSuspender.value;validSuspender.value=!1,o=__pyproxy_get_buffer(n),validSuspender.value=N}catch(N){API.fatal_error(N)}o===Module.error&&_pythonexc2js();let{start_ptr:i,smallest_ptr:s,largest_ptr:l,readonly:u,format:d,itemsize:p,shape:v,strides:P,view:g,c_contiguous:E,f_contiguous:B}=o,k=!1;try{let N=!1;r===void 0&&([r,N]=Module.processBufferFormatString(d," In this case, you can pass an explicit type argument."));let L=parseInt(r.name.replace(/[^0-9]/g,""))/8||1;if(N&&L>1)throw new Error("JavaScript has no native support for big endian buffers. In this case, you can pass an explicit type argument. For instance, `getBuffer('dataview')` will return a `DataView`which has native support for reading big endian data. Alternatively, toJs will automatically convert the buffer to little endian.");let A=l-s;if(A!==0&&(i%L!==0||s%L!==0||l%L!==0))throw new Error(`Buffer does not have valid alignment for a ${r.name}`);let c=A/L,y=(i-s)/L,f;A===0?f=new r:f=new r(HEAPU32.buffer,s,c);for(let _ of P.keys())P[_]/=L;return k=!0,Object.create(ie.prototype,Object.getOwnPropertyDescriptors({offset:y,readonly:u,format:d,itemsize:p,ndim:v.length,nbytes:A,shape:v,strides:P,data:f,c_contiguous:E,f_contiguous:B,_view_ptr:g,_released:!1}))}finally{if(!k)try{_check_gil();let N=validSuspender.value;validSuspender.value=!1,_PyBuffer_Release(g),_PyMem_Free(g),validSuspender.value=N}catch(N){API.fatal_error(N)}}}},We=class extends S{static{a(this,"PyDict")}static[Symbol.hasInstance](e){return API.isPyProxy(e)&&e.type==="dict"}},ie=class{static{a(this,"PyBufferView")}constructor(){throw new TypeError("PyBufferView is not a constructor")}release(){if(!this._released){try{_check_gil();let e=validSuspender.value;validSuspender.value=!1,_PyBuffer_Release(this._view_ptr),_PyMem_Free(this._view_ptr),validSuspender.value=e}catch(e){API.fatal_error(e)}this._released=!0,this.data=Module.error}}[tr](){this.release()}};var ir={PyProxy:S,PyProxyWithLength:Ae,PyProxyWithGet:Ie,PyProxyWithSet:Ee,PyProxyWithHas:ke,PyDict:We,PyIterable:Ne,PyAsyncIterable:Oe,PyIterator:Te,PyAsyncIterator:Me,PyGenerator:De,PyAsyncGenerator:Re,PyAwaitable:Ue,PyCallable:Ce,PyBuffer:$e,PyBufferView:ie,PythonError:z,PySequence:Fe,PyMutableSequence:Le};function sr(t){t.id!=="canvas"&&console.warn("If you are using canvas element for SDL library, it should have id 'canvas' to work properly."),Module.canvas=t}a(sr,"setCanvas2D");function lr(){return Module.canvas}a(lr,"getCanvas2D");function Fn(t){sr(t)}a(Fn,"setCanvas3D");function Ln(){return lr()}a(Ln,"getCanvas3D");var cr={setCanvas2D:sr,getCanvas2D:lr,setCanvas3D:Fn,getCanvas3D:Ln};var ur=new Map([["INSTALLER","pyodide.unpackArchive"]]);function Un(){if(typeof API<"u"&&API!==globalThis.API)return API.runtimeEnv;let t=typeof Bun<"u",e=typeof Deno<"u",r=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&!process.browser,n=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Chrome")===-1&&navigator.userAgent.indexOf("Safari")>-1,o=typeof read=="function"&&typeof load=="function",i=typeof navigator=="object"&&navigator.userAgent?.includes("Cloudflare-Workers");return Cn({IN_BUN:t,IN_DENO:e,IN_NODE:r,IN_SAFARI:n,IN_SHELL:o,IN_WORKERD:i})}a(Un,"getGlobalRuntimeEnv");var b=Un();function Cn(t){let e=t.IN_NODE&&typeof module<"u"&&module.exports&&typeof x=="function"&&typeof __dirname=="string",r=t.IN_NODE&&!e,n=!t.IN_NODE&&!t.IN_DENO&&!t.IN_BUN,o=n&&typeof window<"u"&&typeof window.document<"u"&&typeof document.createElement=="function"&&"sessionStorage"in window&&typeof globalThis.importScripts!="function",i=n&&typeof globalThis.WorkerGlobalScope<"u"&&typeof globalThis.self<"u"&&globalThis.self instanceof globalThis.WorkerGlobalScope;if(i&&Bn())throw new Error("Classic web workers are not supported");let s={...t,IN_BROWSER:n,IN_BROWSER_MAIN_THREAD:o,IN_BROWSER_WEB_WORKER:i,IN_NODE_COMMONJS:e,IN_NODE_ESM:r};if(!(s.IN_BROWSER_MAIN_THREAD||s.IN_BROWSER_WEB_WORKER||s.IN_NODE||s.IN_SHELL||s.IN_WORKERD))throw new Error(`Cannot determine runtime environment: ${JSON.stringify(s)}`);return s}a(Cn,"calculateDerivedFlags");function Bn(){try{return globalThis.importScripts("data:text/javascript,"),!0}catch{return!1}}a(Bn,"isClassicWorker");function se(){let t=a(()=>{},"_resolve"),e=a(()=>{},"_reject"),r=new Promise((n,o)=>{t=n,e=o});return r.resolve=t,r.reject=e,r}a(se,"createResolvable");function je(){let t=Promise.resolve();async function e(){let r=t,n;return t=new Promise(o=>n=o),await r,n}return a(e,"acquireLock"),e}a(je,"createLock");var $n=/[-_.]+/g;function dr(t){return t.replace($n,"-").toLowerCase()}a(dr,"canonicalizePackageName");var Wn=/^.*?([^\/]*)\.whl$/;function yr(t){let e=Wn.exec(t);if(e){let r=e[1].toLowerCase().split("-");return{name:r[0],version:r[1],fileName:r.join("-")+".whl"}}}a(yr,"uriToPackageData");function pr(t){return btoa(t.match(/\w{2}/g).map(function(e){return String.fromCharCode(parseInt(e,16))}).join(""))}a(pr,"base16ToBase64");var mr,vt,Hn,Ge,Y;async function gr(){if(!b.IN_NODE||(mr=(await import("node:url")).default,Ge=await import("node:fs"),Y=await import("node:fs/promises"),Hn=(await import("node:vm")).default,vt=await import("node:path"),hr=vt.sep,typeof x<"u"))return;let t=Ge,e=await import("node:crypto"),r=await import("ws"),n=await import("node:child_process"),o={fs:t,crypto:e,ws:r,child_process:n};globalThis.require=function(i){return o[i]}}a(gr,"initNodeModules");function _r(t){return t.includes("://")||t.startsWith("/")}a(_r,"isAbsolute");function jn(t,e){return vt.resolve(e||".",t)}a(jn,"node_resolvePath");function zn(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}a(zn,"browser_resolvePath");var le;b.IN_NODE?le=jn:b.IN_SHELL?le=a(t=>t,"resolvePath"):le=zn;var hr;b.IN_NODE||(hr="/");function Gn(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:fetch(t)}:{binary:Y.readFile(t).then(r=>new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}}a(Gn,"node_getBinaryResponse");function Kn(t,e){if(t.startsWith("file://")&&(t=t.slice(7)),t.includes("://"))throw new Error("Shell cannot fetch urls");return{binary:Promise.resolve(new Uint8Array(readbuffer(t)))}}a(Kn,"shell_getBinaryResponse");function Vn(t,e){let r=new URL(t,location);return{response:fetch(r,e?{integrity:e}:{})}}a(Vn,"browser_getBinaryResponse");var ze;b.IN_NODE?ze=Gn:b.IN_SHELL?ze=Kn:ze=Vn;async function ce(t,e){let{response:r,binary:n}=ze(t,e);if(n)return n;let o=await r;if(!o.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await o.arrayBuffer())}a(ce,"loadBinaryFile");var fr;b.IN_NODE?fr=Jn:fr=a(async t=>await import(t),"loadScript");async function Jn(t){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?await import(t):await import(mr.pathToFileURL(t).href)}a(Jn,"nodeLoadScript");async function br(t){if(b.IN_NODE&&t)try{await Y.stat(t)}catch{await Y.mkdir(t,{recursive:!0})}}a(br,"ensureDirNode");var ue=class{constructor(e,r){this._lock=je();this.#t=e,this.#e=r}static{a(this,"DynlibLoader")}#t;#e;async loadDynlib(e){let r=await this._lock();try{let n=this.#e.stackSave(),o=this.#e.stringToUTF8OnStack(e);try{let i=this.#e._emscripten_dlopen_promise(o,2);this.#e.stackRestore(n);let s=this.#e.getPromise(i);this.#e.promiseMap.free(i),await s}catch(i){let s=this.getDLError();throw new Error(`Failed to load dynamic library ${e}: ${s??i}`)}}catch(n){throw n&&n.message&&n.message.includes("need to see wasm magic number")?new Error(`Failed to load dynamic library ${e} $. We probably just tried to load a linux .so file or something.`):n}finally{r()}}getDLError(){let e=this.#e._dlerror();return e===0?void 0:this.#e.UTF8ToString(e,512).trim()}async loadDynlibsFromPackage(e,r){for(let n of r)await this.loadDynlib(n)}};if(typeof API<"u"&&typeof Module<"u"){let t=new ue(API,Module);API.loadDynlib=t.loadDynlib.bind(t)}var de=class{static{a(this,"Installer")}#t;#e;constructor(e,r){this.#t=e,this.#e=new ue(e,r)}async install(e,r,n,o){let i=this.#t.package_loader.unpack_buffer.callKwargs({buffer:e,filename:r,extract_dir:n,metadata:o,calculate_dynlibs:!0});await this.#e.loadDynlibsFromPackage({file_name:r},i)}},Pr;if(typeof API<"u"&&typeof Module<"u"){let t=new de(API,Module);Pr=t.install.bind(t),API.install=Pr}function qn(t,e,r){t();let n;try{n=r()}catch(o){throw e(),o}return n instanceof Promise?n.finally(()=>e()):(e(),n)}a(qn,"withContext");function Sr(t,e){return function(r){return function(...n){return qn(t,e,()=>r.apply(this,n))}}}a(Sr,"createContextWrapper");async function Yn(t){await gr();let e=await t,r=typeof e=="string"?JSON.parse(e):e;if(!r.packages)throw new Error("Loaded pyodide lock file does not contain the expected key 'packages'.");if(r.info.abi_version!==API.abiVersion)throw new Error(`Lock file ABI version doesn't match Pyodide ABI version.\n lockfile version: ${r.info.abi_version}\n pyodide version: ${API.abiVersion}`);API.lockfile=r,API.lockfile_info=r.info,API.lockfile_packages=r.packages,API.lockfile_unvendored_stdlibs_and_test=[],API._import_name_to_package_name=new Map;for(let i of Object.keys(API.lockfile_packages)){let s=API.lockfile_packages[i];for(let l of s.imports)API._import_name_to_package_name.set(l,i)}let n=API.config.packages;await pe(n,{messageCallback(){}}),await API.bootstrapFinalizedPromise,API.flushPackageManagerBuffers(),API._pyodide._importhook.register_module_not_found_hook(API._import_name_to_package_name),API.package_loader.init_loaded_packages()}a(Yn,"initializePackageIndex");var Qn="default channel",Xn="pyodide.loadPackage",wt=class{constructor(e,r){this.cdnURL="";this.loadedPackages={};this._lock=je();this.streamReady=!1;this.stdoutBuffer=[];this.stderrBuffer=[];this.defaultChannel=Qn;this.#t=e,this.#e=r,this.#r=new de(e,r),b.IN_NODE?(this.installBaseUrl=this.#t.config.packageCacheDir??this.#t.config.packageBaseUrl,this.cdnURL=this.#t.config.cdnUrl):this.installBaseUrl=this.#t.config.packageBaseUrl,this.stdout=n=>{if(!this.streamReady){this.stdoutBuffer.push(n);return}let o=this.#e.stackSave();try{let i=this.#e.stringToUTF8OnStack(n);this.#e._print_stdout(i)}finally{this.#e.stackRestore(o)}},this.stderr=n=>{if(!this.streamReady){this.stderrBuffer.push(n);return}let o=this.#e.stackSave();try{let i=this.#e.stringToUTF8OnStack(n);this.#e._print_stderr(i)}finally{this.#e.stackRestore(o)}}}static{a(this,"PackageManager")}#t;#e;#r;async loadPackage(e,r={checkIntegrity:!0}){return this.setCallbacks(r.messageCallback,r.errorCallback)(this.loadPackageInner.bind(this))(e,r)}async loadPackageInner(e,r={checkIntegrity:!0}){let n=new Set,o=eo(e),i=this.recursiveDependencies(o);for(let[d,{name:p,normalizedName:v,channel:P}]of i){let g=this.getLoadedPackageChannel(p);g&&(i.delete(v),g===P||P===this.defaultChannel?this.logStdout(`${p} already loaded from ${g}`):this.logStderr(`URI mismatch, attempting to load package ${p} from ${P} while it is already loaded from ${g}. To override a dependency, load the custom package first.`))}if(i.size===0)return this.logStdout("No new packages to load"),[];let s=Array.from(i.values(),({name:d})=>d).sort().join(", "),l=new Map,u=await this._lock();try{this.logStdout(`Loading ${s}`);for(let[d,p]of i){if(this.getLoadedPackageChannel(p.name)){i.delete(p.normalizedName);continue}p.installPromise=this.downloadAndInstall(p,i,n,l,r.checkIntegrity)}if(await Promise.all(Array.from(i.values(),({installPromise:d})=>d)),n.size>0){let d=Array.from(n,p=>p.name).sort().join(", ");this.logStdout(`Loaded ${d}`)}if(l.size>0){let d=Array.from(l.keys()).sort().join(", ");this.logStdout(`Failed to load ${d}`);for(let[p,v]of l)this.logStderr(`The following error occurred while loading ${p}:`),this.logStderr(v.message)}return await this.#t.bootstrapFinalizedPromise,this.#t.importlib.invalidate_caches(),Array.from(n,Zn)}finally{u()}}addPackageToLoad(e,r){let n=dr(e);if(r.has(n))return;let o=this.#t.lockfile_packages[n];if(!o)throw new Error(`No known package with name '${e}'`);if(r.set(n,{name:o.name,normalizedName:n,channel:this.defaultChannel,depends:o.depends,installPromise:void 0,done:se(),packageData:o}),!this.getLoadedPackageChannel(o.name))for(let i of o.depends)this.addPackageToLoad(i,r)}recursiveDependencies(e){let r=new Map;for(let n of e){let o=yr(n);if(o===void 0){this.addPackageToLoad(n,r);continue}let{name:i,version:s,fileName:l}=o,u=n;if(r.has(i)&&r.get(i).channel!==u){this.logStderr(`Loading same package ${i} from ${u} and ${r.get(i).channel}`);continue}r.set(i,{name:i,normalizedName:i,channel:u,depends:[],installPromise:void 0,done:se(),packageData:{name:i,version:s,file_name:l,install_dir:"site",sha256:"",package_type:"package",imports:[],depends:[]}})}return r}async downloadPackage(e,r=!0){await br(this.installBaseUrl);let n,o,i;if(e.channel===this.defaultChannel){if(!(e.normalizedName in this.#t.lockfile_packages))throw new Error(`Internal error: no entry for package named ${name}`);let l=this.#t.lockfile_packages[e.normalizedName];if(n=l.file_name,!_r(n)&&!this.installBaseUrl)throw new Error(`Lock file file_name for package "${e.name}" is relative path "${n}" but no packageBaseUrl provided to loadPyodide.`);o=le(n,this.installBaseUrl),i="sha256-"+pr(l.sha256)}else o=e.channel,i=void 0;r||(i=void 0);try{return await ce(o,i)}catch(l){if(!b.IN_NODE||e.channel!==this.defaultChannel||!n||n.startsWith("/"))throw l}this.logStdout(`Didn't find package ${n} locally, attempting to load from ${this.cdnURL}`);let s=await ce(this.cdnURL+n);return this.logStdout(`Package ${n} loaded from ${this.cdnURL}, caching the wheel in node_modules for future use.`),await Y.writeFile(o,s),s}async installPackage(e,r){let n=this.#t.lockfile_packages[e.normalizedName];n||(n=e.packageData);let o=n.file_name,i=this.#t.package_loader.get_install_dir(n.install_dir);await this.#r.install(r,o,i,new Map([["INSTALLER",Xn],["PYODIDE_SOURCE",e.channel===this.defaultChannel?"pyodide":e.channel]]))}async downloadAndInstall(e,r,n,o,i=!0){if(ye[e.name]===void 0)try{let s=await this.downloadPackage(e,i),l=e.depends.map(u=>r.has(u)?r.get(u).done:Promise.resolve());await this.#t.bootstrapFinalizedPromise,await Promise.all(l),await this.installPackage(e,s),n.add(e.packageData),ye[e.name]=e.channel}catch(s){o.set(e.name,s)}finally{e.done.resolve()}}flushBuffers(){this.streamReady=!0;for(let e of this.stdoutBuffer)this.stdout(e);for(let e of this.stderrBuffer)this.stderr(e);this.stdoutBuffer=[],this.stderrBuffer=[]}getLoadedPackageChannel(e){let r=this.loadedPackages[e];return r===void 0?null:r}setCallbacks(e,r){let n=this.stdout,o=this.stderr;return Sr(()=>{this.stdout=e||n,this.stderr=r||o},()=>{this.stdout=n,this.stderr=o})}logStdout(e){this.stdout(e)}logStderr(e){this.stderr(e)}};function Zn({name:t,version:e,file_name:r,package_type:n}){return{name:t,version:e,fileName:r,packageType:n}}a(Zn,"filterPackageData");function eo(t){return typeof t.toJs=="function"&&(t=t.toJs()),Array.isArray(t)||(t=[t]),t}a(eo,"toStringArray");var pe,ye;if(typeof API<"u"&&typeof Module<"u"){let t=new wt(API,Module);pe=t.loadPackage.bind(t),ye=t.loadedPackages,API.flushPackageManagerBuffers=t.flushBuffers.bind(t),API.lockFilePromise&&(API.packageIndexReady=Yn(API.lockFilePromise)),API.packageManager=t}var vr="314.0.3";var Tt=b.IN_NODE?x("node:fs"):void 0,Ar=b.IN_NODE?x("node:tty"):void 0;function Ir(t){try{Tt.fsyncSync(t)}catch(e){if(e?.code==="EINVAL"||(t===0||t===1||t===2)&&(e?.code==="ENOTSUP"||e?.code==="EBADF"||e?.code==="EPERM"))return;throw e}}a(Ir,"nodeFsync");var Er=!1,Ve={},D={};function At(t){Ve[D.stdin]=t}a(At,"_setStdinOps");function to(t){Ve[D.stdout]=t}a(to,"_setStdoutOps");function ro(t){Ve[D.stderr]=t}a(ro,"_setStderrOps");function no(t){return t&&typeof t=="object"&&"errno"in t}a(no,"isErrnoError");var oo=new Int32Array(new WebAssembly.Memory({shared:!0,initial:1,maximum:1}).buffer);function ao(t){try{return Atomics.wait(oo,0,0,t),!0}catch{return!1}}a(ao,"syncSleep");function io(t){for(;;)try{return t()}catch(e){if(e&&e.code==="EAGAIN"&&ao(100))continue;throw e}}a(io,"handleEAGAIN");function wr(t,e,r){let n;try{n=io(e)}catch(o){throw o&&o.code&&Module.ERRNO_CODES[o.code]?new FS.ErrnoError(Module.ERRNO_CODES[o.code]):no(o)?o:(console.error(`Error thrown in ${r}:`),console.error(o),new FS.ErrnoError(29))}if(n===void 0)throw console.warn(`${r} returned undefined; a correct implementation must return a number`),new FS.ErrnoError(29);return n!==0&&(t.node.timestamp=Date.now()),n}a(wr,"readWriteHelper");var xr=a((t,e,r)=>API.typedArrayAsUint8Array(t).subarray(e,e+r),"prepareBuffer"),so={ioctl_tiocgwinsz(t){let{rows:e=24,columns:r=80}=t.devops.getTerminalSize?.()??{};return[e,r]}},xt={open:a(function(t){let e=Ve[t.node.rdev];if(!e)throw new FS.ErrnoError(43);t.devops=e,t.tty=t.devops.isatty?{ops:so,devops:e}:void 0,t.seekable=!1},"open"),close:a(function(t){t.stream_ops.fsync(t)},"close"),fsync:a(function(t){let e=t.devops;e.fsync&&e.fsync()},"fsync"),read:a(function(t,e,r,n,o){return e=xr(e,r,n),wr(t,()=>t.devops.read(e),"read")},"read"),write:a(function(t,e,r,n,o){return e=xr(e,r,n),wr(t,()=>t.devops.write(e),"write")},"write")};function Je(){Er&&(FS.closeStream(0),FS.closeStream(1),FS.closeStream(2),FS.open("/dev/stdin",0),FS.open("/dev/stdout",1),FS.open("/dev/stderr",1))}a(Je,"refreshStreams");API.initializeStreams=function(t,e,r){let n=FS.createDevice.major++;D.stdin=FS.makedev(n,0),D.stdout=FS.makedev(n,1),D.stderr=FS.makedev(n,2),FS.registerDevice(D.stdin,xt),FS.registerDevice(D.stdout,xt),FS.registerDevice(D.stderr,xt),FS.unlink("/dev/stdin"),FS.unlink("/dev/stdout"),FS.unlink("/dev/stderr"),FS.mkdev("/dev/stdin",D.stdin),FS.mkdev("/dev/stdout",D.stdout),FS.mkdev("/dev/stderr",D.stderr),fe({stdin:t}),Dt({batched:e}),Mt({batched:r}),Er=!0,Je()};function lo(){b.IN_NODE?fe(new Et(process.stdin)):fe({stdin:a(()=>prompt(),"stdin")})}a(lo,"setDefaultStdin");function co(){At(new It),Je()}a(co,"setStdinError");function fe(t={}){let{stdin:e,error:r,isatty:n,autoEOF:o,read:i}=t,s=+!!e+ +!!r+ +!!i;if(s>1)throw new TypeError("At most one of stdin, read, and error must be provided.");if(!e&&o!==void 0)throw new TypeError("The 'autoEOF' option can only be used with the 'stdin' option");if(s===0){lo();return}r&&co(),e&&(o=o===void 0?!0:o,At(new kt(e.bind(t),!!n,o))),i&&At(t),Je()}a(fe,"setStdin");function kr(t,e,r){let n=t,{raw:o,isatty:i,batched:s,write:l}=n;if(!o&&!l&&i)throw new TypeError("Cannot set 'isatty' to true unless 'raw' or 'write' is provided");let u=+!!o+ +!!s+ +!!l;if(u>1)throw new TypeError("At most one of 'raw', 'batched', and 'write' must be passed");u===0&&(n=r(),({raw:o,isatty:i,batched:s,write:l}=n)),o&&e(new Nt(n)),s&&e(new Ot(s.bind(n))),l&&e(n),Je()}a(kr,"_setStdwrite");function uo(){return b.IN_NODE?new Ke(process.stdout):{batched:a(t=>console.log(t),"batched")}}a(uo,"_getStdoutDefaults");function yo(){return b.IN_NODE?new Ke(process.stderr):{batched:a(t=>console.warn(t),"batched")}}a(yo,"_getStderrDefaults");function Dt(t){kr(t??{},to,uo)}a(Dt,"setStdout");function Mt(t){kr(t??{},ro,yo)}a(Mt,"setStderr");var po=globalThis.TextEncoder??function(){},fo=new po,It=class{static{a(this,"ErrorReader")}read(e){throw new FS.ErrnoError(29)}},Et=class{static{a(this,"NodeReader")}constructor(e){this.stream=e,this.isatty=Ar.isatty(e.fd)}read(e){try{return Tt.readSync(this.stream.fd,e)}catch(r){if(r.toString().includes("EOF"))return 0;throw r}}fsync(){Ir(this.stream.fd)}},kt=class{static{a(this,"LegacyReader")}constructor(e,r,n){this.infunc=e,this.isatty=r,this.autoEOF=n,this.index=0,this.saved=void 0,this.insertEOF=!1}_getInput(){if(this.saved)return this.saved;let e=this.infunc();if(typeof e=="number")return e;if(e!=null){if(ArrayBuffer.isView(e)){if(e.BYTES_PER_ELEMENT!==1)throw console.warn(`Expected BYTES_PER_ELEMENT to be 1, infunc gave ${e.constructor}`),new FS.ErrnoError(29);return e}if(typeof e=="string")return e.endsWith(`\n`)||(e+=`\n`),e;if(Object.prototype.toString.call(e)==="[object ArrayBuffer]")return new Uint8Array(e);throw console.warn("Expected result to be undefined, null, string, array buffer, or array buffer view"),new FS.ErrnoError(29)}}read(e){if(this.insertEOF)return this.insertEOF=!1,0;let r=0;for(;;){let n=this._getInput();if(typeof n=="number"){e[0]=n,e=e.subarray(1),r++;continue}let o;if(n&&n.length>0)if(typeof n=="string"){let{read:i,written:s}=fo.encodeInto(n,e);this.saved=n.slice(i),r+=s,o=e[s-1],e=e.subarray(s)}else{let i;n.length>e.length?(e.set(n.subarray(0,e.length)),this.saved=n.subarray(e.length),i=e.length):(e.set(n),this.saved=void 0,i=n.length),r+=i,o=e[i-1],e=e.subarray(i)}if(!(n&&n.length>0)||this.autoEOF||e.length===0)return this.insertEOF=r>0&&this.autoEOF&&o!==10,r}}fsync(){}},Nt=class{static{a(this,"CharacterCodeWriter")}constructor(e){this.options=e,this.isatty=!!e.isatty}write(e){for(let r of e)this.options.raw(r);return e.length}getTerminalSize(){return this.options.getTerminalSize?.()}},Ot=class{constructor(e){this.isatty=!1;this.out=e,this.output=[]}static{a(this,"StringWriter")}write(e){for(let r of e)r===10?(this.out(UTF8ArrayToString(new Uint8Array(this.output))),this.output=[]):r!==0&&this.output.push(r);return e.length}fsync(){this.output&&this.output.length>0&&(this.out(UTF8ArrayToString(new Uint8Array(this.output))),this.output=[])}},Ke=class{static{a(this,"NodeWriter")}constructor(e){this.stream=e,this.isatty=Ar.isatty(e.fd)}write(e){return Tt.writeSync(this.stream.fd,e)}fsync(){Ir(this.stream.fd)}getTerminalSize(){return this.stream}};var Rt="sched$"+Math.random().toString(36).slice(2)+"$",X={},Nr=0,Q=null,Ft=[];function mo(){if(!b.IN_BROWSER_MAIN_THREAD)return;let t=a(e=>{if(typeof e.data=="string"&&e.data.indexOf(Rt)===0){let r=+e.data.slice(Rt.length),n=X[r];if(!n)return;try{n()}finally{delete X[r]}}},"onGlobalMessage");globalThis.addEventListener("message",t,!1)}a(mo,"installPostMessageHandler");mo();function go(){Q||b.IN_SAFARI||b.IN_DENO||b.IN_NODE||typeof globalThis.MessageChannel=="function"&&(Q=new MessageChannel,Q.port1.onmessage=()=>{let t=Ft.length;for(let e=0;eme(e,t))}a(Or,"sleep");var{get:ho,getOwnPropertyDescriptor:bo,ownKeys:Po}=Reflect,So=a(t=>({value:t,enumerable:!0,writable:!0,configurable:!0}),"getPropertyDescriptor"),Dr=Symbol(),Tr="prototype",vo={deleteProperty:a((t,e)=>t.has(e)?t.delete(e):delete t[e],"deleteProperty"),get(t,e,r){if(e===Dr)return t;let n=t[e];return typeof n=="function"&&e!=="constructor"&&(n=n.bind(t)),n||=t.get(e),n},getOwnPropertyDescriptor(t,e){if(t.has(e))return So(t.get(e));if(e in t)return bo(t,e)},has:a((t,e)=>t.has(e)||e in t,"has"),ownKeys:a(t=>[...t.keys(),...Po(t)].filter(e=>["string","symbol"].includes(typeof e)),"ownKeys"),set:a((t,e,r)=>(t.set(e,r),!0),"set")},wo=new Proxy(class extends Map{static{a(this,"LiteralMap")}constructor(...e){return new Proxy(super(...e),vo)}},{get(t,e,...r){return e!==Tr&&e in t[Tr]?(n,...o)=>{let i=n[Dr],s=i[e];return typeof s=="function"&&(s=s.apply(i,o)),s===i?n:s}:ho(t,e,...r)}}),Mr=wo;var qe=new FinalizationRegistry(t=>void t());function xo(t){let e=new AbortController;for(let l of t)if(l.aborted)return e.abort(l.reason),e.signal;let r=new WeakRef(e),n=[],o=t.length;t.forEach(l=>{let u=new WeakRef(l);function d(){r.deref()?.abort(u.deref()?.reason)}a(d,"abort"),l.addEventListener("abort",d),n.push([u,d]),qe.register(l,()=>!--o&&i(),l)});function i(){n.forEach(([l,u])=>{let d=l.deref();d&&(d.removeEventListener("abort",u),qe.unregister(d));let p=r.deref();p&&(qe.unregister(p.signal),delete p.signal.__controller)})}a(i,"clear");let{signal:s}=e;return qe.register(s,i,s),s.addEventListener("abort",i),s.__controller=e,s}a(xo,"abortSignalAny");var Rr=xo;API.getExpectedKeys=function(){return[null,API.config.jsglobals,API.public_api,API,me,API,{}]};var Cr=Symbol("getAccessorList"),Fr=Symbol("getObject");function Ye(t,e=[]){return new Proxy(t,{get(r,n,o){if(n===Cr)return e;if(n===Fr)return r;let i=Reflect.get(...arguments),s=Reflect.getOwnPropertyDescriptor(r,n);return s&&s.writable===!1&&!s.configurable||s&&s.set&&!s.get||!["object","function"].includes(typeof i)?i:Ye(i,[...e,n])},apply(r,n,o){return n=n?.[Fr]??n,Reflect.apply(r,n,o)},getPrototypeOf(){return Ye(Reflect.getPrototypeOf(...arguments),[...e,"[getProtoTypeOf]"])}})}a(Ye,"makeGlobalsProxy");var Br=1886286592,Qe=48;function Ao(t,e){if(e.length!==8)throw new Error("Expected 256 bit buffer");for(let r=0;r<32;r++)e[r]=parseInt(t.slice(r*8,(r+1)*8),16)}a(Ao,"encodeBuildId");function Io(t){if(t.length!==8)throw new Error("Expected 256 bit buffer");return Array.from(t,e=>e.toString(16).padStart(8,"0")).join("")}a(Io,"decodeBuildId");function Lr(t,e,r){if(e===r)return;if(typeof r=="function"&&typeof e!="function")throw console.warn(r,e),new Error(`Expected function at index ${t}`);let n=!1;try{n=JSON.stringify(e)===JSON.stringify(r)}catch(o){console.warn(o)}if(!n)throw console.warn(r,e),new Error(`Unexpected hiwire entry at index ${t}`)}a(Lr,"checkEntry");var ge=6;API.serializeHiwireState=function(t,e){e||(e=Lr);let r=[],n=API.getExpectedKeys();for(let s=0;sUr(i,o)),e.hiwireKeys.forEach((o,i)=>{let s;if(!o)s=o;else if("path"in o)s=o.path.reduce((l,u)=>l[u],t)||null;else if("abortSignalAny"in o)s=API.abortSignalAny;else if("API"in o)s=API;else{if(!r)throw new Error("You must pass an appropriate deserializer as _snapshotDeserializer");s=r(o.serialized)}Ur(n.length+i,s)}),e.immortalKeys.forEach(o=>Module.__hiwire_immortal_add(o))}a(Wr,"syncUpSnapshotLoad2");async function Hr(t,e){return new Promise((r,n)=>{t.FS.syncfs(e,o=>{o?n(o):r()})})}a(Hr,"syncfs");async function jr(t){return await Hr(t,!1)}a(jr,"syncLocalToRemote");async function zr(t){return await Hr(t,!0)}a(zr,"syncRemoteToLocal");function Eo(t){return typeof t=="object"&&t!==null&&Object.hasOwn(t,"hostname")&&Object.hasOwn(t,"port")}a(Eo,"isSocketAddress");var Xe=null,Lt=null,Ut=null;async function Gr(){if(Xe)return;let[t,e,r]=await Promise.all([import("node:net"),import("node:tls"),import("node:stream")]);Xe=t,Lt=e,Ut=a(n=>r.Duplex.toWeb(n),"_duplexToWeb")}a(Gr,"init");function ko(){if(!Xe)throw new Error("wintercg-sockets: call init() first");return Xe}a(ko,"getNet");function No(){if(!Lt)throw new Error("wintercg-sockets: call init() first");return Lt}a(No,"getTls");function Oo(){if(!Ut)throw new Error("wintercg-sockets: call init() first");return Ut}a(Oo,"getDuplexToWeb");var _e=class extends TypeError{static{a(this,"SocketError")}constructor(e){super(`SocketError: ${e}`)}};function Kr(t,e){if(typeof t=="string"){let r=new URL(`https://${t}`);t={hostname:r.hostname,port:parseInt(r.port===""?"443":r.port)}}return new Ct(t,e)}a(Kr,"connect");var Ct=class t{constructor(e,r){this.startTlsCalled=!1;let n=ko(),o=No(),i=Oo();if(this.secureTransport=r?.secureTransport??"off",this.allowHalfOpen=r?.allowHalfOpen??!0,this.openedIsResolved=!1,this.opened=new Promise((u,d)=>{this.openedResolve=p=>{this.openedIsResolved=!0,u(p)},this.openedReject=(...p)=>{this.openedIsResolved=!0,d(...p)}}),this.closed=new Promise((u,d)=>{this.closedResolve=(...p)=>{u(...p)},this.closedReject=(...p)=>{d(...p)}}),Eo(e)){let u={host:e.hostname,port:e.port,allowHalfOpen:this.allowHalfOpen};this.secureTransport==="on"?this._socket=o.connect(u):this._socket=n.connect(u)}else this._socket=new o.TLSSocket(e);this._socket instanceof o.TLSSocket?this._socket.on("secureConnect",()=>{this.openedResolve({remoteAddress:this._socket.remoteAddress,localAddress:this._socket.localAddress})}):this._socket.on("connect",()=>{this.openedResolve({remoteAddress:this._socket.remoteAddress,localAddress:this._socket.localAddress})}),this._socket.on("close",u=>{u||this.closedResolve()}),this._socket.on("error",u=>{let d=new _e(u instanceof Error?u.message:u);this.openedIsResolved||this.openedReject(d),this.closedReject(d)});let{readable:s,writable:l}=i(this._socket);this.readable=s,this.writable=l}static{a(this,"Socket")}close(){return this._socket.end(()=>{this.closedResolve()}),this.closed}startTls(){if(this.secureTransport!=="starttls")throw new _e("secureTransport must be set to 'starttls'");if(this.startTlsCalled)throw new _e("can only call startTls once");return this.startTlsCalled=!0,new t(this._socket,{secureTransport:"on"})}};async function Vr(t){t||(await Gr(),t=Kr);let e=Module,r=e.FS,n=e.API,o=16895,i=0,s=1,l=2,u=0,d=4,p=6,v=8;function P(c){let y=c.reader;if(c.readPending||c.eof||!y)return;c.readPending=!0;let f=(async()=>{try{let m;try{m=await y.read()}catch{c.reader===y&&(c.eof=!0,g(c));return}if(c.reader!==y)return;if(m.done){c.eof=!0,g(c);return}c.recvBuffer.push(m.value),c.recvBufferBytes+=m.value.length,g(c)}finally{c.readPending=!1}})();c.readSettled=f,f.finally(()=>{c.readSettled===f&&(c.readSettled=null)})}a(P,"startRead");function g(c){c.dataAvailable&&(c.dataAvailable.resolve(),c.dataAvailable=null)}a(g,"notifyDataAvailable");function E(c){return c.recvBufferBytes>0||c.eof||!c.reader?Promise.resolve():(c.dataAvailable??=se(),P(c),c.dataAvailable)}a(E,"waitForData");function B(c,y){if(c.recvBufferBytes===0)return new Uint8Array(0);if(c.recvBuffer.length===1&&c.recvBuffer[0].length<=y){let _=c.recvBuffer.shift();return c.recvBufferBytes=0,_}let f=new Uint8Array(Math.min(y,c.recvBufferBytes)),m=0;for(;m0;){let _=c.recvBuffer[0],O=f.length-m;_.length<=O?(f.set(_,m),m+=_.length,c.recvBuffer.shift()):(f.set(_.subarray(0,O),m),c.recvBuffer[0]=_.subarray(O),m+=O)}return c.recvBufferBytes-=f.length,f}a(B,"drainBuffer");let k={poll(c){let y=0;return(c.recvBufferBytes>0||c.eof)&&(y|=65),c.connected&&c.writer&&(y|=4),c.closed&&(y|=16),y},async pollAsync(c,y,f){let m=a(()=>k.poll(c)&(y|8|16),"getRequestedEvents"),_=m();return _||f===0?_:(f<0?await E(c):await Promise.race([E(c),Or(f)]),m())},ioctl(c,y){return y===21531?c.recvBufferBytes:-28},fcntl64(c,y,f){return y===3?c.stream.flags:y===4?(c.stream.flags=e.HEAP32[f/4],0):-28},close(c){return c.closed=!0,g(c),c.wcgSocket&&(c.reader=null,c.writer=null,c.wcgSocket.close().catch(()=>{}),c.wcgSocket=null),c.recvBuffer=[],c.recvBufferBytes=0,c.connected=!1,c.connecting=!1,0},async connectAsync(c,y,f,m){if(c.wcgSocket)return-30;c.connecting=!0,c.daddr=y,c.dport=f;let _=t({hostname:y,port:f},{secureTransport:m?.secureTransport??"starttls",allowHalfOpen:!1});c.wcgSocket=_;try{return await _.opened,c.connected=!0,c.connecting=!1,c.reader=_.readable.getReader(),c.writer=_.writable.getWriter(),_.closed.then(()=>{c.closed=!0},()=>{c.closed=!0}),0}catch{return c.error=14,c.connecting=!1,-c.error}},async sendmsgAsync(c,y){if(!c.writer)return-53;try{return await c.writer.write(y),y.length}catch(f){let m=f instanceof Error?f.message:String(f);return m.includes("EPIPE")||m.includes("ECONNRESET")?-64:-29}},async recvmsgAsync(c,y){let f=a(()=>{let _=B(c,y);return _.length>0?_:c.eof?0:null},"tryDrain"),m=f();if(m!==null)return m;if(c.stream.flags&2048)return P(c),f()??-6;for(;c.recvBufferBytes===0&&!c.eof&&c.reader;)await E(c);return f()??-6},shutdown(c,y){return y!==i&&y!==s&&y!==l?-28:((y===i||y===l)&&c.reader&&(c.reader=null,c.recvBuffer=[],c.recvBufferBytes=0,c.eof=!0,g(c)),(y===s||y===l)&&c.writer&&(c.writer=null),c.reader===null&&c.writer===null&&c.wcgSocket&&(c.wcgSocket.close().catch(()=>{}),c.wcgSocket=null,c.connected=!1,c.closed=!0),0)},async startTls(c){if(!c.wcgSocket)return-53;for(;c.readPending&&c.readSettled;)await c.readSettled;c.reader&&(c.reader.releaseLock(),c.reader=null),c.writer&&(c.writer.releaseLock(),c.writer=null);let y=c.wcgSocket.startTls();return c.wcgSocket=y,c.reader=y.readable.getReader(),c.writer=y.writable.getWriter(),c.recvBuffer=[],c.recvBufferBytes=0,c.eof=!1,y.closed.then(()=>{c.closed=!0},()=>{c.closed=!0}),P(c),0},bind(c,y,f){throw new r.ErrnoError(138)},listen(c,y){throw new r.ErrnoError(138)},accept(c){throw new r.ErrnoError(138)}},N={poll(c){let y=c.node.sock;return k.poll(y)},ioctl(c,y){let f=c.node.sock;return k.ioctl(f,y)},write(){throw new r.ErrnoError(138)},close(c){let y=c.node.sock;k.close(y)}},L=0,A={root:null,mount(){return r.createNode(null,"/",o,0)},createSocket(c,y,f){if(c!==2)throw new r.ErrnoError(5);if(y&=-526337,y!==1)throw y===2?new r.ErrnoError(138):new r.ErrnoError(28);if(f&&f!==6)throw new r.ErrnoError(66);let m={family:c,type:y,protocol:f,error:null,wcgSocket:null,reader:null,writer:null,recvBuffer:[],recvBufferBytes:0,eof:!1,dataAvailable:null,readPending:!1,readSettled:null,connected:!1,connecting:!1,closed:!1,sock_ops:k},_=`socket[${L++}]`,O=r.createNode(A.root,_,49152,0);O.sock=m;let Z=r.createStream({path:_,node:O,flags:2,seekable:!1,stream_ops:N});return m.stream=Z,m},getSocket(c){let y=r.getStream(c);return!y||!r.isSocket(y.node.mode)?null:y.node.sock},async pollAsync(c,y,f){let m=0,_=[];for(let O=0;O>2],$t=e.HEAP16[Z+d>>1],Ze=a(et=>{et&=$t|8|16,e.HEAP16[Z+p>>1]=et,et&&m++},"setRevents"),ee=A.getSocket(Yr);ee?f===0?Ze(ee.sock_ops.poll(ee)):_.push(ee.sock_ops.pollAsync(ee,$t,f).then(Ze)):Ze(32)}return await Promise.all(_),m}};n._nodeSock={async connect(c,y,f){let m=A.getSocket(c);if(!m)throw new r.ErrnoError(8);let _=await k.connectAsync(m,y,f);if(_<0)throw new r.ErrnoError(-_)},async recv(c,y){let f=A.getSocket(c);if(!f)throw new r.ErrnoError(8);for(;f.recvBufferBytes===0&&!f.eof&&f.reader;)await E(f);return B(f,y)},async send(c,y){let f=A.getSocket(c);if(!f)throw new r.ErrnoError(8);let m;return y instanceof Uint8Array?m=y:y.toJs?m=y.toJs():m=new Uint8Array(y),await k.sendmsgAsync(f,m)},async startTls(c){let y=A.getSocket(c);return y?await k.startTls(y):-8}},e.FS.filesystems.NODESOCKFS=A,A.root=e.FS.mount(A,{},null),e.SOCKFS.createSocket=A.createSocket,e.SOCKFS.pollAsync=A.pollAsync}a(Vr,"initializeNodeSockFS");API.loadBinaryFile=ce;API.rawRun=a(function(e){let r=Module.stringToNewUTF8(e);Module.API.capture_stderr();let n=_PyRun_SimpleString(r);_free(r);let o=Module.API.restore_stderr().trim();return[n,o]},"rawRun");API.runPythonInternal=function(t){return API._pyodide._base.eval_code(t,API.runPythonInternal_dict)};API.setPyProxyToStringMethod=function(t){Module.HEAP8[Module._compat_to_string_repr]=+t};API.setCompatToJsLiteralMap=function(t){Module.HEAP8[Module._compat_dict_to_literalmap]=+t};API.setCompatNullToNone=function(t){Module.HEAP8[Module._compat_null_to_none]=+t};API.saveState=()=>API.pyodide_py._state.save_state();API.restoreState=t=>API.pyodide_py._state.restore_state(t);API.scheduleCallback=me;API.initializeNodeSockFS=Vr;typeof AbortSignal<"u"&&AbortSignal.any?API.abortSignalAny=AbortSignal.any:API.abortSignalAny=Rr;API.LiteralMap=Mr;function Jr(t){Module.FS.mkdirTree(t);let{node:e}=Module.FS.lookupPath(t,{follow_mount:!1});if(Module.FS.isMountpoint(e))throw new Error(`path '${t}' is already a file system mount point`);if(!Module.FS.isDir(e.mode))throw new Error(`path '${t}' points to a file not a directory`);for(let r in e.contents)throw new Error(`directory '${t}' is not empty`)}a(Jr,"ensureMountPathExists");var Bt=class{static{a(this,"PyodideAPI_")}static{this.version=vr}static{this.loadPackage=pe}static{this.loadedPackages=ye}static{this.ffi=ir}static{this.setStdin=fe}static{this.setStdout=Dt}static{this.setStderr=Mt}static{this.globals={}}static{this.FS={}}static{this.PATH={}}static{this.canvas=cr}static{this.ERRNO_CODES={}}static{this.pyodide_py={}}static async loadPackagesFromImports(e,r={checkIntegrity:!0}){let n=API.pyodide_code.find_imports(e),o;try{o=n.toJs()}finally{n.destroy()}if(o.length===0)return[];let i=API._import_name_to_package_name,s=new Set;for(let l of o)i.has(l)&&s.add(i.get(l));return s.size?await pe(Array.from(s),r):[]}static runPython(e,r={}){return r.globals||(r.globals=API.globals),API.pyodide_code.eval_code.callKwargs(e,r)}static async runPythonAsync(e,r={}){return r.globals||(r.globals=API.globals),await API.pyodide_code.eval_code_async.callKwargs(e,r)}static registerJsModule(e,r){API.pyodide_ffi.register_js_module(e,r)}static unregisterJsModule(e){API.pyodide_ffi.unregister_js_module(e)}static toPy(e,{depth:r,defaultConverter:n}={depth:-1}){switch(typeof e){case"string":case"number":case"boolean":case"bigint":case"undefined":return e}if(!e||API.isPyProxy(e))return e;let o=0,i=0;try{o=Module.js2python_convert(e,{depth:r,defaultConverter:n})}catch(s){throw s instanceof Module._PropagatePythonError&&_pythonexc2js(),s}try{if(_JsProxy_Check(o))return e;i=_python2js(o),i===null&&_pythonexc2js()}finally{_Py_DecRef(o)}return i}static pyimport(e){return API.pyodide_base.pyimport_impl(e)}static unpackArchive(e,r,n={}){if(!ArrayBuffer.isView(e)&&API.getTypeTag(e)!=="[object ArrayBuffer]")throw new TypeError("Expected argument 'buffer' to be an ArrayBuffer or an ArrayBuffer view");API.typedArrayAsUint8Array(e);let o=n.extractDir;API.package_loader.unpack_buffer.callKwargs({buffer:e,format:r,extract_dir:o,metadata:ur})}static async mountNativeFS(e,r){if(r.constructor.name!=="FileSystemDirectoryHandle")throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return Jr(e),Module.FS.mount(Module.FS.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:r},e),await zr(Module),{syncfs:a(async()=>await jr(Module),"syncfs")}}static mountNodeFS(e,r){if(!b.IN_NODE)throw new Error("mountNodeFS only works in Node");Jr(e);let n;try{n=Ge.lstatSync(r)}catch{throw new Error(`hostPath '${r}' does not exist`)}if(!n.isDirectory())throw new Error(`hostPath '${r}' is not a directory`);Module.FS.mount(Module.FS.filesystems.NODEFS,{root:r},e)}static async useNodeSockFS(e){if(!b.IN_NODE)throw new Error("useNodeSockFS only works in Node");await API.initializeNodeSockFS(e?.connect)}static registerComlink(e){API._Comlink=e}static setInterruptBuffer(e){Module.HEAP8[Module._Py_EMSCRIPTEN_SIGNAL_HANDLING]=+!!e,Module.Py_EmscriptenSignalBuffer=e}static checkInterrupt(){if(_PyGILState_Check()){__PyErr_CheckSignals()&&_pythonexc2js();return}else{let e=Module.Py_EmscriptenSignalBuffer;if(e&&e[0]===2)throw new Module.FS.ErrnoError(27)}}static setDebug(e){let r=!!API.debug_ffi;return API.debug_ffi=e,r}static makeMemorySnapshot({serializer:e}={}){if(!API.config._makeSnapshot)throw new Error("Can only use pyodide.makeMemorySnapshot if the _makeSnapshot option is passed to loadPyodide");return API.makeSnapshot(e)}static get lockfile(){return API.lockfile}static get lockfileBaseUrl(){return API.config.packageCacheDir??API.config.packageBaseUrl}};function To(){let t=Object.getOwnPropertyDescriptors(Bt);delete t.prototype;let e=Object.create({},t);return API.public_api=e,e.FS=Module.FS,e.PATH=Module.PATH,e.ERRNO_CODES=Module.ERRNO_CODES,e._module=Module,e._api=API,e}a(To,"makePublicAPI");function Do(t,e){return new Proxy(t,{get(r,n){return n==="get"?o=>{let i=r.get(o);return i===void 0&&(i=e.get(o)),i}:n==="has"?o=>r.has(o)||e.has(o):Reflect.get(r,n)}})}a(Do,"wrapPythonGlobals");var qr;API.bootstrapFinalizedPromise=new Promise(t=>qr=t);API.finalizeBootstrap=function(t,e){t&&$r();let[r,n]=API.rawRun("import _pyodide_core");r&&API.fatal_loading_error(`Failed to import _pyodide_core\n`,n),API.runPythonInternal_dict=API._pyodide._base.eval_code("{}"),API.importlib=API.runPythonInternal("import importlib; importlib");let o=API.importlib.import_module;API.sys=o("sys"),API.os=o("os");let i=API.runPythonInternal("import __main__; __main__.__dict__"),s=API.runPythonInternal("import builtins; builtins.__dict__");API.globals=Do(i,s);let l=API._pyodide._importhook,u=To();API.config._makeSnapshot&&(API.config.jsglobals=Ye(API.config.jsglobals));let d=API.config.jsglobals;return t?Wr(d,t,e):(l.register_js_finder(),l.register_js_module("js",d),l.register_js_module("pyodide_js",u),l.register_windows_finder()),API.pyodide_py=o("pyodide"),API.pyodide_code=o("pyodide.code"),API.pyodide_ffi=o("pyodide.ffi"),API.package_loader=o("pyodide._package_loader"),API.pyodide_base=o("_pyodide._base"),API.sitepackages=API.package_loader.SITE_PACKAGES.__str__(),API.dsodir=API.package_loader.DSO_DIR.__str__(),API.defaultLdLibraryPath=[API.dsodir,API.sitepackages],API.os.environ.__setitem__("LD_LIBRARY_PATH",API.defaultLdLibraryPath.join(":")),u.pyodide_py=API.pyodide_py,u.globals=API.globals,qr(),u}})()}var StackSwitching=(()=>{var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var stack_switching_exports={};__export(stack_switching_exports,{StackState:()=>StackState,createPromising:()=>createPromising,enterTask:()=>enterTask,jspiSupported:()=>jspiSupported,newJspiSupported:()=>newJspiSupported,oldJspiSupported:()=>oldJspiSupported,promisingApply:()=>promisingApply,promisingRunMain:()=>promisingRunMain,suspenderGlobal:()=>suspenderGlobal,validSuspender:()=>validSuspender});var suspenderGlobal={value:null};var validSuspender={value:false};var promisingApplyHandler;function promisingApply(...args){validSuspender.value=true;Module.stackStop=stackSave();return promisingApplyHandler(...args)}var promisingRunMainHandler;function promisingRunMain(...args){validSuspender.value=true;Module.stackStop=stackSave();return promisingRunMainHandler(...args)}function createPromising(wasm_func){if(Module.newJspiSupported){const promisingFunc=WebAssembly.promising(wasm_func);async function wrapper(...args){const orig=validSuspender.value;validSuspender.value=true;try{return await promisingFunc(null,...args)}finally{validSuspender.value=orig}}return wrapper}const{parameters}=wasmFunctionType(wasm_func);parameters.shift();return new WebAssembly.Function({parameters,results:["externref"]},wasm_func,{promising:"first"})}function initSuspenders(){promisingApplyHandler=createPromising(wasmExports._pyproxy_apply_promising);if(wasmExports.run_main_promising){promisingRunMainHandler=createPromising(wasmExports.run_main_promising)}}var stackStates=[];var taskSizeTotal=500;var taskSizeCount=1;function setStackPosition(stackPosition){evictStackUpTo(stackPosition);stackRestore(stackPosition)}var stackTop;function enterTask(){if(stackTop===void 0){stackTop=stackSave();return}const threshold=taskSizeTotal/taskSizeCount*.8;let lastStop=stackStates.at(-1)?.stop;for(let idx=stackStates.length-2;idx>=-1;idx--){const state=idx>=0?stackStates[idx]:{start:stackTop,stop:stackTop};if(state.start-lastStop>threshold){setStackPosition(state.start);return}lastStop=state.stop}const bottomUsed=stackStates.at(-1)?.start??stackTop;if(bottomUsed>stackSave()){setStackPosition(bottomUsed);return}}function evictStackUpTo(stop){let total=0;while(stackStates.length>0&&stackStates.at(-1).stop>>0,this.start+sz2>>>0);const c=new Uint8Array(sz2);c.set(this._copy);c.set(new_segment,sz1);this._copy=c;return sz2}_save(){return this._save_up_to(this.stop)}};var canConstructWasm=true;try{new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0]))}catch(e){canConstructWasm=false}var newJspiSupported=canConstructWasm&&"Suspending"in WebAssembly;var oldJspiSupported=canConstructWasm&&"Suspender"in WebAssembly;var jspiSupported=newJspiSupported||oldJspiSupported;Module.newJspiSupported=newJspiSupported;Module.oldJspiSupported=oldJspiSupported;Module.jspiSupported=jspiSupported;if(jspiSupported){Module.preRun.push(initSuspenders)}return __toCommonJS(stack_switching_exports)})();const{StackState,createPromising,enterTask,jspiSupported,newJspiSupported,oldJspiSupported,promisingApply,promisingRunMain,suspenderGlobal,validSuspender}=StackSwitching;Object.assign(Module,StackSwitching);const API=Module.API;const Hiwire={};const Tests={};API.tests=Tests;API.version="314.0.3";API.abiVersion="2026_0";Module.hiwire=Hiwire;function getTypeTag(x){try{return Object.prototype.toString.call(x)}catch(e){return""}}API.getTypeTag=getTypeTag;function hasProperty(obj,prop){try{while(obj){if(Object.hasOwn(obj,prop)){return true}obj=Object.getPrototypeOf(obj)}}catch(e){}return false}function hasMethod(obj,prop){try{return typeof obj[prop]==="function"}catch(e){return false}}const pyproxyIsAlive=px=>!!Module.PyProxy_getAttrsQuiet(px).shared.ptr;API.pyproxyIsAlive=pyproxyIsAlive;const errNoRet=()=>{throw new Error("Assertion error: control reached end of function without return")};function isPromise(obj){try{return typeof obj?.then==="function"}catch(e){return false}}API.isPromise=isPromise;function bufferAsUint8Array(arg){if(ArrayBuffer.isView(arg)){return new Uint8Array(arg.buffer,arg.byteOffset,arg.byteLength)}else{return new Uint8Array(arg)}}API.typedArrayAsUint8Array=bufferAsUint8Array;Module.iterObject=function*(object){for(let k in object){if(Object.hasOwn(object,k)){yield k}}};function wasmFunctionType(wasm_func){if(!WebAssembly.Function){throw new Error("No type reflection")}if(WebAssembly.Function.type){return WebAssembly.Function.type(wasm_func)}return wasm_func.type()}const pythonReservedWords=new Set(["False","await","else","import","pass","None","break","except","in","raise","True","class","finally","is","return","and","continue","for","lambda","try","as","def","from","nonlocal","while","assert","del","global","not","with","async","elif","if","or","yield"]);function isReservedWord(word){return pythonReservedWords.has(word)}function normalizeReservedWords(word){const noTrailing_=word.replace(/_*$/,"");if(!isReservedWord(noTrailing_)){return word}if(noTrailing_!==word){return word.slice(0,-1)}return word}pyodide_js_init();pyodide_js_init.sig="v";function set_suspender(suspender){suspenderGlobal.value=suspender}set_suspender.sig="ve";function get_suspender(){return suspenderGlobal.value}get_suspender.sig="e";function syncifyHandler(x,y){return Module.error}async function inner(x,y){try{return await(x??y)}catch(e){if(e&&e.pyodide_fatal_error){throw e}Module.syncify_error=e;return Module.error}}if(newJspiSupported){syncifyHandler=new WebAssembly.Suspending(inner)}else if(oldJspiSupported){syncifyHandler=new WebAssembly.Function({parameters:["externref","externref"],results:["externref"]},inner,{suspending:"first"})}syncifyHandler.sig="eee";function JsvPromise_Syncify_handleError(){if(!Module.syncify_error){return}Module.handle_js_error(Module.syncify_error);delete Module.syncify_error}JsvPromise_Syncify_handleError.sig="v";function saveState(){if(!validSuspender.value){return Module.error}const stackState=new StackState;const threadState=_captureThreadState();if(threadState===0){return Module.error}return{threadState,stackState,suspender:suspenderGlobal.value}}saveState.sig="e";function restoreState(state){state.stackState.restore();_restoreThreadState(state.threadState);suspenderGlobal.value=state.suspender;validSuspender.value=true}restoreState.sig="ve";function _maybe_connect_async(fd,addr,addrlen){var sock=Module.SOCKFS.getSocket(fd);if(!sock?.sock_ops?.connectAsync)return null;var info=Module.getSocketAddress(addr,addrlen);return sock.sock_ops.connectAsync(sock,info.addr,info.port)}_maybe_connect_async.sig="eiii";function _maybe_recvfrom_async(fd,buf,len){var sock=Module.SOCKFS.getSocket(fd);if(!sock?.sock_ops?.recvmsgAsync)return null;return async function(){var result=await sock.sock_ops.recvmsgAsync(sock,len);if(typeof result==="number")return result;Module.HEAPU8.set(result,buf);return result.length}()}_maybe_recvfrom_async.sig="eiii";function _maybe_sendto_async(fd,message,length){var sock=Module.SOCKFS.getSocket(fd);if(!sock?.sock_ops?.sendmsgAsync)return null;var data=Module.HEAPU8.slice(message,message+length);return sock.sock_ops.sendmsgAsync(sock,data)}_maybe_sendto_async.sig="eiii";function _try_fcntl64(fd,cmd,arg,result){var sock=Module.SOCKFS.getSocket(fd);if(!sock?.sock_ops?.fcntl64)return false;Module.HEAP32[result>>2]=sock.sock_ops.fcntl64(sock,cmd,arg);if(Module.HEAP32[result>>2]<0)return false;return true}_try_fcntl64.sig="iiiii";function _maybe_poll_async(fds,nfds,timeout){if(!Module.SOCKFS.pollAsync){return null}for(var i=0;i>2];var stream=Module.FS.getStream(fd);if(!stream){continue}var sock=Module.SOCKFS.getSocket(fd);if(!sock?.sock_ops?.pollAsync){return null}}return Module.SOCKFS.pollAsync(fds,nfds,timeout)}_maybe_poll_async.sig="eiii";function _try_shutdown(fd,how,result){var sock=Module.SOCKFS.getSocket(fd);if(!sock?.sock_ops?.shutdown)return false;Module.HEAP32[result>>2]=sock.sock_ops.shutdown(sock,how);return true}_try_shutdown.sig="iiii";function _Py_emscripten_runtime(){var info;if(typeof navigator=="object"){info=navigator.userAgent}else if(typeof process=="object"){info="Node.js ".concat(process.version)}else{info="UNKNOWN"}var len=lengthBytesUTF8(info)+1;var res=_malloc(len);if(res)stringToUTF8(info,res,len);return res}_Py_emscripten_runtime.sig="i";function _Py_CheckEmscriptenSignals_Helper(){if(!Module.Py_EmscriptenSignalBuffer){return 0}try{let result=Module.Py_EmscriptenSignalBuffer[0];Module.Py_EmscriptenSignalBuffer[0]=0;return result}catch(e){return 0}}_Py_CheckEmscriptenSignals_Helper.sig="i";function _PyEM_TrampolineCall_JS(func,arg1,arg2,arg3){return wasmTable.get(func)(arg1,arg2,arg3)}function getPyEMTrampolinePtr(){let isIOS=globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints!=="undefined"&&navigator.maxTouchPoints>1);if(isIOS){return 0}let trampolineModule;try{trampolineModule=getWasmTrampolineModule()}catch(e){return 0}const trampolineInstance=new WebAssembly.Instance(trampolineModule,{env:{__indirect_function_table:wasmTable,memory:wasmMemory}});return addFunction(trampolineInstance.exports.trampoline_call)}addOnPreRun(function setEmscriptenTrampoline(){const ptr=getPyEMTrampolinePtr();const offset=HEAP32[__PyEM_EMSCRIPTEN_TRAMPOLINE_OFFSET/4>>>0];HEAP32[(__PyRuntime+offset)/4>>>0]=ptr});_PyEM_TrampolineCall_JS.sig="iiiii";function getWasmTrampolineModule(){return new WebAssembly.Module(hexStringToUTF8Array("0061736d0100000001200560037f7f7f017f60027f7f017f60017f017f6000017f60057f7f7f7f7f017f02310203656e76066d656d6f727902000103656e76195f5f696e6469726563745f66756e6374696f6e5f7461626c6501700001030201040713010f7472616d706f6c696e655f63616c6c00000a60015e002000410136020020012500fb1400044020022003200420011100000f0b20012500fb140104402002200320011101000f0b20012500fb14020440200220011102000f0b20012500fb1403044020011103000f0b2000410036020041000b00780970726f647563657273010c70726f6365737365642d62790105636c616e675832332e302e30676974202868747470733a2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a6563742065353932376665636638613663653839653161346561633562383238653764343236373634353261290098010f7461726765745f6665617475726573092b0f6d757461626c652d676c6f62616c732b136e6f6e7472617070696e672d6670746f696e742b0b62756c6b2d6d656d6f72792b087369676e2d6578742b0f7265666572656e63652d74797065732b0a6d756c746976616c75652b0267632b0f62756c6b2d6d656d6f72792d6f70742b1663616c6c2d696e6469726563742d6f7665726c6f6e67"))}function hexStringToUTF8Array(hex){const bytes=[];for(let i=0;isetTimeout(res,t))}FS.createAsyncInputDevice("/dev","blah",async()=>{await sleep(5);return bufs[idx++%3]});return!!WebAssembly.promising}emscripten_set_up_async_input_device_js.sig="i";function emscripten_log_impl_js(arg){console.warn(UTF8ToString(arg))}emscripten_log_impl_js.sig="vi";function unbox_small_structs(type_ptr){var type_id=HEAPU16[(type_ptr+6>>1)+0>>>0];while(type_id===13){var elements=HEAPU32[(type_ptr+8>>2)+0>>>0];var first_element=HEAPU32[(elements>>2)+0>>>0];if(first_element===0){type_id=0;break}else if(HEAPU32[(elements>>2)+1>>>0]===0){type_ptr=first_element;type_id=HEAPU16[(first_element+6>>1)+0>>>0]}else{break}}return[type_ptr,type_id]}function ffi_call_js(cif,fn,rvalue,avalue){var abi=HEAPU32[(cif>>2)+0>>>0];var nargs=HEAPU32[(cif>>2)+1>>>0];var nfixedargs=HEAPU32[(cif>>2)+6>>>0];var arg_types_ptr=HEAPU32[(cif>>2)+2>>>0];var rtype_unboxed=unbox_small_structs(HEAPU32[(cif>>2)+3>>>0]);var rtype_ptr=rtype_unboxed[0];var rtype_id=rtype_unboxed[1];var orig_stack_ptr=stackSave();var cur_stack_ptr=orig_stack_ptr;var args=[];var ret_by_arg=!!0;if(rtype_id===15){throw new Error("complex ret marshalling nyi")}if(rtype_id<0||rtype_id>15){throw new Error("Unexpected rtype "+rtype_id)}if(rtype_id===4||rtype_id===13){args.push(rvalue);ret_by_arg=!!1}for(var i=0;i>2)+i>>>0];var arg_unboxed=unbox_small_structs(HEAPU32[(arg_types_ptr>>2)+i>>>0]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];switch(arg_type_id){case 1:case 10:case 9:case 14:args.push(HEAPU32[(arg_ptr>>2)+0>>>0]);break;case 2:args.push(HEAPF32[(arg_ptr>>2)+0>>>0]);break;case 3:args.push(HEAPF64[(arg_ptr>>3)+0>>>0]);break;case 5:args.push(HEAPU8[arg_ptr+0>>>0]);break;case 6:args.push(HEAP8[arg_ptr+0>>>0]);break;case 7:args.push(HEAPU16[(arg_ptr>>1)+0>>>0]);break;case 8:args.push(HEAP16[(arg_ptr>>1)+0>>>0]);break;case 11:case 12:args.push(HEAPU64[(arg_ptr>>3)+0>>>0]);break;case 4:args.push(HEAPU64[(arg_ptr>>3)+0>>>0]);args.push(HEAPU64[(arg_ptr>>3)+1>>>0]);break;case 13:var size=HEAPU32[(arg_type_ptr>>2)+0>>>0];var align=HEAPU16[(arg_type_ptr+4>>1)+0>>>0];cur_stack_ptr-=size,cur_stack_ptr&=~(align-1);HEAP8.subarray(cur_stack_ptr>>>0,cur_stack_ptr+size>>>0).set(HEAP8.subarray(arg_ptr>>>0,arg_ptr+size>>>0));args.push(cur_stack_ptr);break;case 15:throw new Error("complex marshalling nyi");default:throw new Error("Unexpected type "+arg_type_id)}}if(nfixedargs!=nargs){var struct_arg_info=[];for(var i=nargs-1;i>=nfixedargs;i--){var arg_ptr=HEAPU32[(avalue>>2)+i>>>0];var arg_unboxed=unbox_small_structs(HEAPU32[(arg_types_ptr>>2)+i>>>0]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];switch(arg_type_id){case 5:case 6:cur_stack_ptr-=1,cur_stack_ptr&=~(1-1);HEAPU8[cur_stack_ptr+0>>>0]=HEAPU8[arg_ptr+0>>>0];break;case 7:case 8:cur_stack_ptr-=2,cur_stack_ptr&=~(2-1);HEAPU16[(cur_stack_ptr>>1)+0>>>0]=HEAPU16[(arg_ptr>>1)+0>>>0];break;case 1:case 9:case 10:case 14:case 2:cur_stack_ptr-=4,cur_stack_ptr&=~(4-1);HEAPU32[(cur_stack_ptr>>2)+0>>>0]=HEAPU32[(arg_ptr>>2)+0>>>0];break;case 3:case 11:case 12:cur_stack_ptr-=8,cur_stack_ptr&=~(8-1);HEAPU32[(cur_stack_ptr>>2)+0>>>0]=HEAPU32[(arg_ptr>>2)+0>>>0];HEAPU32[(cur_stack_ptr>>2)+1>>>0]=HEAPU32[(arg_ptr>>2)+1>>>0];break;case 4:cur_stack_ptr-=16,cur_stack_ptr&=~(8-1);HEAPU32[(cur_stack_ptr>>2)+0>>>0]=HEAPU32[(arg_ptr>>2)+0>>>0];HEAPU32[(cur_stack_ptr>>2)+1>>>0]=HEAPU32[(arg_ptr>>2)+1>>>0];HEAPU32[(cur_stack_ptr>>2)+2>>>0]=HEAPU32[(arg_ptr>>2)+2>>>0];HEAPU32[(cur_stack_ptr>>2)+3>>>0]=HEAPU32[(arg_ptr>>2)+3>>>0];break;case 13:cur_stack_ptr-=4,cur_stack_ptr&=~(4-1);struct_arg_info.push([cur_stack_ptr,arg_ptr,HEAPU32[(arg_type_ptr>>2)+0>>>0],HEAPU16[(arg_type_ptr+4>>1)+0>>>0]]);break;case 15:throw new Error("complex arg marshalling nyi");default:throw new Error("Unexpected argtype "+arg_type_id)}}args.push(cur_stack_ptr);for(var i=0;i>>0,cur_stack_ptr+size>>>0).set(HEAP8.subarray(arg_ptr>>>0,arg_ptr+size>>>0));HEAPU32[(arg_target>>2)+0>>>0]=cur_stack_ptr}}stackRestore(cur_stack_ptr);stackAlloc(0);var result=(0,getWasmTableEntry(fn).apply(null,args));stackRestore(orig_stack_ptr);if(ret_by_arg){return}switch(rtype_id){case 0:break;case 1:case 9:case 10:case 14:HEAPU32[(rvalue>>2)+0>>>0]=result;break;case 2:HEAPF32[(rvalue>>2)+0>>>0]=result;break;case 3:HEAPF64[(rvalue>>3)+0>>>0]=result;break;case 5:case 6:HEAPU8[rvalue+0>>>0]=result;break;case 7:case 8:HEAPU16[(rvalue>>1)+0>>>0]=result;break;case 11:case 12:HEAPU64[(rvalue>>3)+0>>>0]=result;break;case 15:throw new Error("complex ret marshalling nyi");default:throw new Error("Unexpected rtype "+rtype_id)}}ffi_call_js.sig="viiii";function ffi_closure_alloc_js(size,code){var closure=_malloc(size);var index=getEmptyTableSlot();HEAPU32[(code>>2)+0>>>0]=index;HEAPU32[(closure>>2)+0>>>0]=index;return closure}ffi_closure_alloc_js.sig="iii";function ffi_closure_free_js(closure){var index=HEAPU32[(closure>>2)+0>>>0];freeTableIndexes.push(index);_free(closure)}ffi_closure_free_js.sig="vi";function ffi_prep_closure_loc_js(closure,cif,fun,user_data,codeloc){var abi=HEAPU32[(cif>>2)+0>>>0];var nargs=HEAPU32[(cif>>2)+1>>>0];var nfixedargs=HEAPU32[(cif>>2)+6>>>0];var arg_types_ptr=HEAPU32[(cif>>2)+2>>>0];var rtype_unboxed=unbox_small_structs(HEAPU32[(cif>>2)+3>>>0]);var rtype_ptr=rtype_unboxed[0];var rtype_id=rtype_unboxed[1];var sig;var ret_by_arg=!!0;switch(rtype_id){case 0:sig="v";break;case 13:case 4:sig="vi";ret_by_arg=!!1;break;case 1:case 5:case 6:case 7:case 8:case 9:case 10:case 14:sig="i";break;case 2:sig="f";break;case 3:sig="d";break;case 11:case 12:sig="j";break;case 15:throw new Error("complex ret marshalling nyi");default:throw new Error("Unexpected rtype "+rtype_id)}var unboxed_arg_type_id_list=[];var unboxed_arg_type_info_list=[];for(var i=0;i>2)+i>>>0]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];unboxed_arg_type_id_list.push(arg_type_id);unboxed_arg_type_info_list.push([HEAPU32[(arg_type_ptr>>2)+0>>>0],HEAPU16[(arg_type_ptr+4>>1)+0>>>0]])}for(var i=0;i>2)+carg_idx>>>0]=cur_ptr;HEAPU8[cur_ptr+0>>>0]=cur_arg;break;case 7:case 8:cur_ptr-=2,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;HEAPU16[(cur_ptr>>1)+0>>>0]=cur_arg;break;case 1:case 9:case 10:case 14:cur_ptr-=4,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;HEAPU32[(cur_ptr>>2)+0>>>0]=cur_arg;break;case 13:cur_ptr-=arg_size,cur_ptr&=~(arg_align-1);HEAP8.subarray(cur_ptr>>>0,cur_ptr+arg_size>>>0).set(HEAP8.subarray(cur_arg>>>0,cur_arg+arg_size>>>0));HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;break;case 2:cur_ptr-=4,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;HEAPF32[(cur_ptr>>2)+0>>>0]=cur_arg;break;case 3:cur_ptr-=8,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;HEAPF64[(cur_ptr>>3)+0>>>0]=cur_arg;break;case 11:case 12:cur_ptr-=8,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;HEAPU64[(cur_ptr>>3)+0>>>0]=cur_arg;break;case 4:cur_ptr-=16,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr;HEAPU64[(cur_ptr>>3)+0>>>0]=cur_arg;cur_arg=args[jsarg_idx++];HEAPU64[(cur_ptr>>3)+1>>>0]=cur_arg;break}}var varargs=args[args.length-1];for(;carg_idx>2)+0>>>0];cur_ptr-=arg_size,cur_ptr&=~(arg_align-1);HEAP8.subarray(cur_ptr>>>0,cur_ptr+arg_size>>>0).set(HEAP8.subarray(struct_ptr>>>0,struct_ptr+arg_size>>>0));HEAPU32[(args_ptr>>2)+carg_idx>>>0]=cur_ptr}else{HEAPU32[(args_ptr>>2)+carg_idx>>>0]=varargs}varargs+=4}stackRestore(cur_ptr);stackAlloc(0);0;getWasmTableEntry(HEAPU32[(closure>>2)+2>>>0])(HEAPU32[(closure>>2)+1>>>0],ret_ptr,args_ptr,HEAPU32[(closure>>2)+3>>>0]);stackRestore(orig_stack_ptr);if(!ret_by_arg){switch(sig[0]){case"i":return HEAPU32[(ret_ptr>>2)+0>>>0];case"j":return HEAPU64[(ret_ptr>>3)+0>>>0];case"d":return HEAPF64[(ret_ptr>>3)+0>>>0];case"f":return HEAPF32[(ret_ptr>>2)+0>>>0]}}}try{var wasm_trampoline=convertJsFunctionToWasm(trampoline,sig)}catch(e){return 1}setWasmTableEntry(codeloc,wasm_trampoline);HEAPU32[(closure>>2)+1>>>0]=cif;HEAPU32[(closure>>2)+2>>>0]=fun;HEAPU32[(closure>>2)+3>>>0]=user_data;return 0}ffi_prep_closure_loc_js.sig="iiiiii";function __hiwire_deduplicate_new(){return new Map}__hiwire_deduplicate_new.sig="e";function __hiwire_deduplicate_get(map,value){return map.get(value)}__hiwire_deduplicate_get.sig="iee";function __hiwire_deduplicate_set(map,value,ref){map.set(value,ref)}__hiwire_deduplicate_set.sig="veei";function __hiwire_deduplicate_delete(map,value){map.delete(value)}__hiwire_deduplicate_delete.sig="vee";var _set_method_docstring,_PyObject_GetAttrString,__PyUnicode_FromId,_PyObject_VectorcallMethod,_PyUnicode_AsUTF8AndSize,_malloc,__Py_Dealloc,_PyErr_Format,_add_methods_and_set_docstrings,_PyModule_AddFunctions,_docstring_init,_PyImport_ImportModule,_dump_traceback,_fileno,_PyGILState_GetThisThreadState,_set_error,_PyErr_SetObject,_restore_sys_last_exception,_PySys_GetObject,_PyErr_SetRaisedException,_wrap_exception,_PyErr_GetRaisedException,_hiwire_get,_PyErr_GivenExceptionMatches,_PyErr_Print,__PyObject_GetAttrId,_PyUnicode_AsUTF8,_PySys_WriteStderr,_PyErr_DisplayException,_JsvString_FromId,_pythonexc2js,_trigger_fatal_error,_raw_call,_JsProxy_Val,_error_handling_init,_hiwire_invalid_ref,_init_pyodide_proxy,_python2js,_PyInit__pyodide_core,_PyErr_Occurred,__PyErr_FormatFromCause,_PyModule_Create2,_PyImport_GetModuleDict,_PyDict_SetItemString,_jslib_init,_python2js_init,_jsproxy_init,_jsproxy_call_init,_pyproxy_init,_jsbind_init,_pyodide_export,_PyUnicode_Data,__js2python_none,__js2python_null,__js2python_true,__js2python_false,__js2python_pyproxy,__js2python_bigint,_PyObject_CallOneArg,_js2python_immutable,_js2python,_JsProxy_getflags,_PyLong_AsLong,_JsProxy_is_py_json,_js2python_as_py_json,_JsProxy_create_with_type,_JsProxy_bind_sig,_JsRef_toVal,_PyErr_SetString,_JsProxy_create_with_this,_JsProxy_bind_class,_clear_method_call_singleton,_hiwire_decref,_JsProxy_GetMethod,__PyObject_GenericGetAttrWithDict,_strcmp,_PyArg_ParseTuple,_Js2PyConverter_convert,_hiwire_new,_hiwire_incref,_JsProxy_GetAttr,_handle_next_result,_free,_JsProxy_create_objmap,_JsProxy_am_send,_python2js_track_proxies,_JsvObject_CallMethodId_OneArg,_JsProxy_IterNext,__PyGen_SetStopIterationValue,_JsGenerator_send,_PyErr_SetNone,_JsException_js_error_getter,_process_throw_args,_PyErr_NormalizeException,_PyException_GetTraceback,_PyException_SetTraceback,_PyErr_Restore,_PyErr_ExceptionMatches,_PyErr_Clear,_JsvObject_CallMethodId_NoArgs,_PyErr_Fetch,__agen_handle_result_js_c,__agen_handle_result,_JsArray_sq_item,_JsArray_sq_ass_item,_JsTypedArray_sq_ass_item,_JsMap_update,_wrap_promise,_PyTuple_GetItem,_JsvObject_CallMethodId,_JsModule_GetAll,_PyType_IsSubtype,_JsProxy_Check,_JsBuffer_CopyIntoMemoryView,_PyMem_Malloc,_PyMemoryView_FromObject,_JsBuffer_cinit,_hiwire_new_deduplicate,_JsRef_new,_PyTuple_Pack,_PyLong_FromLong,_PyDict_GetItemWithError,_PyObject_SelfIter,_PyVectorcall_Call,_PyErr_NoMemory,_PyType_FromSpecWithBases,_PyObject_SetAttr,_PyMem_Free,_PyDict_SetItem,_JsProxy_create,_JsProxy_init_docstrings,_run_sync_not_supported,_run_sync,_py_is_awaitable,_JsvPromise_Syncify,_can_run_sync,_PyDict_New,_PyObject_SetAttrString,_PyModule_AddObject,_PyType_Ready,_JsMethod_Vectorcall_impl,_JsvObject_CallMethodId_TwoArgs,_PyObject_Repr,_PyIndex_Check,_PyNumber_AsSsize_t,_PySlice_Unpack,_PySlice_AdjustIndices,_PySequence_Fast,_PyArg_ParseTupleAndKeywords,_PySet_New,__PySet_Update,_PyUnicode_FromString,_PySet_Discard,_PyList_New,_PyList_Extend,_PyList_Sort,__PyArg_ParseStack,__PyArg_CheckPositional,_PyObject_GetIter,_PyObject_RichCompareBool,_PyErr_WarnEx,__PyArg_ParseStackAndKeywords,_hiwire_pop,_puts,_PyObject_GenericSetAttr,_Py_HashBuffer,_JsMethod_Construct_impl,_PyNumber_Index,_PyLong_AsSsize_t,_PyLong_FromSsize_t,_PyObject_GetItem,_PyObject_DelItem,_PyObject_SetItem,_PyObject_GetBuffer,_PyBuffer_Release,_PyBytes_FromStringAndSize,_PyObject_Vectorcall,_Py_EnterRecursiveCall,_Py_LeaveRecursiveCall,_Py2JsConverter_convert,_PyUnicode_Equal,_PyObject_GC_UnTrack,_PyUnicode_FromFormat,_PyType_GenericNew,_PyObject_IsInstance,_python2js_inner,_python2js_custom,_check_gil,_PyGILState_Check,_PyGen_GetCode,_pyproxy_getflags,_PyObject_HasAttr,_PyObject_IsSubclass,__pyproxy_repr,_PyObject_Str,__pyproxy_type,__pyproxy_hasattr,_python2js_json_adaptor,__pyproxy_getattr,__PyObject_GetMethod,__pyproxy_setattr,__pyproxy_delattr,_PyObject_DelAttr,__pyproxy_getitem,__pyproxy_setitem,__pyproxy_delitem,__pyproxy_slice_assign,_PySequence_Size,_PySequence_GetSlice,_PySequence_SetSlice,_python2js_with_depth,__pyproxy_pop,__pyproxy_contains,_PySequence_Contains,__pyproxy_ownKeys,_PyObject_Dir,_PyList_Size,_PyList_GetItem,__pyproxy_apply,_PyTuple_New,__pyproxy_apply_promising,__iscoroutinefunction,__pyproxy_iter_next,_PyIter_Next,__pyproxyGen_Send,_PyIter_Send,__pyproxyGen_return,__PyGen_FetchStopIterationValue,__pyproxyGen_throw,__pyproxyGen_asend,__pyproxyGen_areturn,__pyproxyGen_athrow,__pyproxy_aiter_next,_FutureDoneCallback_call_resolve,_FutureDoneCallback_call_reject,_FutureDoneCallback_call,_PyArg_UnpackTuple,__pyproxy_ensure_future,__pyproxy_get_buffer,_PyBuffer_FillContiguousStrides,_PyBuffer_IsContiguous,_create_promise_handles_result_helper,__python2js_buffer,_Jsv_GetError,_jslib_init_buffers,_JsRef_pop,_JsrString_FromId,_hiwire_intern,__python2js,_PySequence_GetItem,_PyObject_CheckBuffer,_PyLong_AsLongAndOverflow,_python2js__default_converter,_python2js__eager_converter,__PyLong_NumBits,__PyLong_AsByteArray,_PyFloat_AsDouble,_restoreThreadState,_PyThreadState_Swap,_PyThreadState_Delete,_captureThreadState,_PyInterpreterState_Get,_PyThreadState_New,_syscall_syncify,_PyGILState_Ensure,_PyGILState_Release,_print_stdout,_fiprintf,_print_stderr,___wrap___syscall_connect,___wrap___syscall_recvfrom,___wrap___syscall_sendto,___wrap___syscall_fcntl64,___wrap___syscall_poll,___wrap___syscall_shutdown,___syscall_setsockopt,_main,_PyImport_AppendInittab,_PyPreConfig_InitPythonConfig,_Py_PreInitializeFromBytesArgs,_PyStatus_Exception,_PyConfig_InitPythonConfig,_PyConfig_SetBytesArgv,_PyConfig_SetBytesString,_Py_InitializeFromConfig,_PyConfig_Clear,_Py_ExitStatusException,_run_main,_run_main_promising,_Py_GetBuildInfo,_PyOS_snprintf,__PyToken_OneChar,__PyToken_TwoChars,__PyToken_ThreeChars,_strlen,_PyUnicode_DecodeUTF8,__PyArena_Malloc,_strncpy,_PyMem_Realloc,_PyMem_Calloc,_strncmp,__PyArena_AddPyObject,_PyBytes_AsString,_PyImport_ImportModuleAttrString,_PyUnicode_InternFromString,__PyType_Name,__PyUnicode_EqualToASCIIString,__PyUnicode_InternImmortal,_PyBytes_AsStringAndSize,_strchr,_PyUnicode_Decode,_Py_BuildValue,_PyUnicode_CompareWithASCIIString,___errno_location,_PyOS_strtoul,_PyLong_FromString,_PyOS_strtol,_PyOS_string_to_double,_PyComplex_FromCComplex,_PyFloat_FromDouble,_PyUnicode_FromFormatV,__PyErr_ProgramDecodedTextObject,_Py_GetConstant,_PyBytes_Concat,_PyUnicodeWriter_Create,_PyUnicodeWriter_WriteStr,_PyUnicodeWriter_Discard,_PyUnicodeWriter_Finish,_strpbrk,__PyUnicode_IsWhitespace,_PyUnicode_Substring,_PyThreadState_Get,__Py_ReachedRecursionLimitWithMargin,_PyUnicode_DecodeUTF8Stateful,_siprintf,__PyUnicode_DecodeUnicodeEscapeInternal2,__PyErr_BadInternalCall,__PyBytes_DecodeEscape2,_PyBytes_Size,_PyErr_WarnExplicitObject,_PySys_Audit,_memchr,__Py_FatalErrorFunc,__PyUnicode_ScanIdentifier,_PyUnicode_AsUTF8String,__PyUnicode_IsPrintable,_PyOS_Readline,_strcpy,_PyObject_CallNoArgs,__Py_UniversalNewlineFgetsWithSize,_fopencookie,_fclose,_getc,_ungetc,_ftell,_lseek,_PyErr_SetFromErrnoWithFilename,_PyObject_CallFunction,_PyObject_GetAttr,__PyObject_MakeTpCall,__Py_CheckFunctionResult,_read,_strcspn,_fflush,_fputs,_PyMem_RawFree,_PyEval_RestoreThread,_PyEval_SaveThread,_PyMem_RawRealloc,__PyInterpreterState_Main,_clearerr,_fgets,_feof,_PyErr_CheckSignals,_PyMutex_Lock,_isatty,_PyMutex_Unlock,_PyObject_Type,__PyErr_SetString,_PyObject_Size,_PyMapping_Size,_PyObject_Length,_PyObject_LengthHint,__PyErr_ExceptionMatches,__PyErr_Clear,__PyObject_LookupSpecial,_Py_GenericAlias,_PyObject_GetOptionalAttr,__PyNumber_Index,__PyErr_Format,_PyMapping_GetOptionalItem,_PyDict_GetItemRef,_PySequence_SetItem,_PySequence_DelItem,_PyObject_DelItemString,_PyObject_CheckReadBuffer,_PyObject_AsCharBuffer,_PyObject_AsReadBuffer,_PyObject_AsWriteBuffer,_PyBuffer_GetPointer,_PyBuffer_SizeFromFormat,_PyObject_CallFunctionObjArgs,_PyBuffer_FromContiguous,_PyObject_CopyData,_PyBuffer_FillInfo,__PyBuffer_ReleaseInInterpreter,__PyBuffer_ReleaseInInterpreterAndRawFree,_PyObject_Format,_PyNumber_Check,_PyNumber_Or,_PyNumber_Xor,_PyNumber_And,_PyNumber_Lshift,_PyNumber_Rshift,_PyNumber_Subtract,_PyNumber_Divmod,_PyNumber_Add,_PyNumber_Multiply,_PyNumber_MatrixMultiply,_PyNumber_FloorDivide,_PyNumber_TrueDivide,_PyNumber_Remainder,_PyNumber_Power,_PyNumber_InPlaceOr,_PyNumber_InPlaceXor,_PyNumber_InPlaceAnd,_PyNumber_InPlaceLshift,_PyNumber_InPlaceRshift,_PyNumber_InPlaceSubtract,_PyNumber_InPlaceMatrixMultiply,_PyNumber_InPlaceFloorDivide,_PyNumber_InPlaceTrueDivide,_PyNumber_InPlaceRemainder,_PyNumber_InPlaceAdd,_PyNumber_InPlaceMultiply,_PyNumber_InPlacePower,_PyNumber_Negative,_PyNumber_Positive,_PyNumber_Invert,_PyNumber_Absolute,_PyErr_WarnFormat,__PyLong_Copy,_PyNumber_Long,_PyLong_FromUnicodeObject,_PyNumber_Float,_PyLong_AsDouble,_PyFloat_FromString,_PyNumber_ToBase,__PyLong_Format,_PySequence_Check,_PySequence_Length,_PySequence_Concat,_PySequence_Repeat,_PySequence_InPlaceConcat,_PySequence_InPlaceRepeat,__PySlice_FromIndices,_PySequence_DelSlice,_PySequence_Tuple,_PyList_AsTuple,__PyList_AppendTakeRefListResize,__PyList_AsTupleAndClear,__PyTuple_FromArraySteal,_PySeqIter_New,_PySequence_List,__PyList_Extend,_PySequence_Count,_PySequence_In,_PySequence_Index,_PyMapping_Check,_PyMapping_Length,_PyMapping_GetItemString,_PyMapping_GetOptionalItemString,_PyMapping_SetItemString,_PyMapping_HasKeyStringWithError,_PyMapping_HasKeyWithError,_PyMapping_HasKeyString,_PyErr_FormatUnraisable,_PyMapping_HasKey,_PyMapping_Keys,_PyDict_Keys,_PyMapping_Items,_PyDict_Items,_PyMapping_Values,_PyDict_Values,__Py_CheckRecursiveCall,_PyObject_IsTrue,_PyIter_Check,_PyObject_GetAIter,_PyAIter_Check,_PyIter_NextItem,_PyBool_FromLong,__Py_SetImmortal,__PyArg_NoKeywords,_memrchr,_memcmp,_PyByteArray_FromObject,_PyByteArray_FromStringAndSize,__PyObject_New,_PyByteArray_Size,_PyByteArray_AsString,_PyByteArray_Resize,_PyByteArray_Concat,_PyUnicode_FromStringAndSize,__Py_GetConfig,__PyObject_GC_New,__PyArg_UnpackKeywords,__PyArg_BadArgument,_PyUnicode_AsEncodedString,_PyBuffer_ToContiguous,_PyObject_GC_Del,__PyBytes_Repeat,__PyObject_GetState,_PyUnicode_DecodeLatin1,_PyLong_AsInt,_PyLong_FromSize_t,__PyEval_SliceIndex,_PyUnicode_GetDefaultEncoding,_PyUnicode_FromEncodedObject,_PyList_Append,_PyList_Reverse,__PyEval_GetBuiltin,_PyObject_GenericGetAttr,_PyType_GenericAlloc,_PyObject_Free,_PyObject_Malloc,__Py_NewReference,_PyObject_Calloc,_PyBytes_FromString,_PyBytes_FromFormatV,__PyBytesWriter_Resize,__PyBytesWriter_Finish,__PyBytesWriter_Init,__PyBytesWriter_Alloc,__PyBytesWriter_WriteBytes,__PyBytes_Resize,__PyBytesWriter_Dealloc,_PyBytes_FromFormat,_PyObject_ASCII,_PyOS_double_to_string,__PyBytesWriter_Prepare,_PyBytes_DecodeEscape,__PyBytes_Find,__PyBytes_ReverseFind,_PyBytes_Repr,_PyUnicode_New,_PyBytes_Join,_PyBytes_FromObject,_PyErr_BadArgument,_PyObject_Realloc,__Py_NewReferenceNoTotal,_PyBytes_ConcatAndDel,_PyVectorcall_Function,__PyTuple_FromArray,__PyDict_FromItems,_PyDict_Next,_PyObject_VectorcallDict,_PyModule_GetNameObject,_PyCallable_Check,__PyStack_AsDict,_PyObject_Call,_PyCFunction_Call,_PyEval_CallObjectWithKeywords,_PyObject_CallObject,_PyEval_CallFunction,__PyObject_CallFunction_SizeT,_PyObject_CallMethod,_PyEval_CallMethod,__PyObject_CallMethod,__PyObject_CallMethodId,__PyObject_CallMethod_SizeT,_PyObject_CallMethodObjArgs,_PyVectorcall_NARGS,_PyCapsule_New,_PyCapsule_IsValid,_PyCapsule_GetPointer,_PyCapsule_GetName,_PyCapsule_GetDestructor,_PyCapsule_GetContext,_PyCapsule_SetPointer,_PyCapsule_SetName,_PyCapsule_SetDestructor,_PyCapsule_SetContext,__PyCapsule_SetTraverse,_PyCapsule_Import,_PyCell_New,_PyCell_Get,_PyCell_Set,_PyObject_RichCompare,_PyMethod_Function,_PyMethod_Self,_PyMethod_New,_PyObject_ClearWeakRefs,_PyObject_GenericHash,_PyObject_Hash,__PyType_GetDict,__PyType_LookupRef,_PyInstanceMethod_New,_PyInstanceMethod_Function,_PyCode_AddWatcher,_PyCode_ClearWatcher,__PyObject_NewVar,__PyUnicode_InternMortal,_PyUnstable_Code_NewWithPosOnlyArgs,_PyUnicode_Compare,__PyTuple_Resize,_PyUnstable_Code_New,_PyCode_NewEmpty,_PyUnicode_DecodeFSDefault,__PyCode_CheckLineNumber,_PyCode_Addr2Line,_PyCode_Addr2Location,_PyUnstable_Code_GetExtra,_PyUnstable_Code_SetExtra,_PyCode_GetVarnames,_PyCode_GetCellvars,_PyCode_GetFreevars,__PyCode_GetVarCounts,__PyCode_SetUnboundVarCounts,_PySet_Contains,_PySet_Add,_PyDict_Contains,__PyCode_CheckNoInternalState,__PyCode_CheckNoExternalState,__PyCode_VerifyStateless,__PyCode_CheckPureFunction,__PyCode_ReturnsOnlyNone,_PyTuple_Size,_PyCode_GetCode,__PyCode_ConstantKey,_PyComplex_AsCComplex,__PySet_NextEntry,_PyFrozenSet_New,_PySlice_New,_PyLong_FromVoidPtr,__PyUnicode_Copy,__Py_c_sum,__Py_cr_sum,__Py_c_diff,__Py_cr_diff,__Py_rc_diff,__Py_c_neg,__Py_c_prod,__Py_cr_prod,__Py_c_quot,__Py_cr_quot,__Py_rc_quot,__Py_c_pow,_atan2,_hypot,_pow,_log,_exp,_sin,_cos,__Py_c_abs,_PyComplex_FromDoubles,_PyComplex_RealAsDouble,_PyComplex_ImagAsDouble,__Py_HashDouble,__PyUnicode_TransformDecimalAndSpaceToASCII,__PyUnicodeWriter_Init,__PyUnicodeWriter_Dealloc,__PyUnicodeWriter_Finish,_PyCMethod_New,_PyMember_GetOne,_PyMember_SetOne,_PyTuple_GetSlice,_PyWrapper_New,_PyDescr_NewMethod,__PyObject_FunctionStr,_PyDescr_NewClassMethod,_PyDescr_NewMember,_PyDescr_NewGetSet,_PyDescr_NewWrapper,_PyDescr_IsData,_PyDictProxy_New,_Py_HashPointer,_PyType_GetQualName,_PyException_GetCause,_PyException_SetCause,_PyException_GetContext,_PyException_SetContext,_PyException_GetArgs,_PyException_SetArgs,_PyExceptionClass_Name,_PyUnstable_Exc_PrepReraiseStar,_PyUnicodeEncodeError_GetEncoding,_PyUnicodeDecodeError_GetEncoding,_PyUnicodeEncodeError_GetObject,_PyUnicodeDecodeError_GetObject,_PyUnicodeTranslateError_GetObject,_PyUnicodeEncodeError_GetStart,_PyUnicodeDecodeError_GetStart,_PyUnicodeTranslateError_GetStart,_PyUnicodeEncodeError_SetStart,_PyUnicodeDecodeError_SetStart,_PyUnicodeTranslateError_SetStart,_PyUnicodeEncodeError_GetEnd,_PyUnicodeDecodeError_GetEnd,_PyUnicodeTranslateError_GetEnd,_PyUnicodeEncodeError_SetEnd,_PyUnicodeDecodeError_SetEnd,_PyUnicodeTranslateError_SetEnd,_PyUnicodeEncodeError_GetReason,_PyUnicodeDecodeError_GetReason,_PyUnicodeTranslateError_GetReason,_PyUnicodeEncodeError_SetReason,_PyUnicodeDecodeError_SetReason,_PyUnicodeTranslateError_SetReason,_PyUnicodeDecodeError_Create,__PyErr_SetRaisedException,_PyModule_GetDict,_PyErr_NewException,_PyDict_Copy,_PyUnicode_ReadChar,_PyObject_GenericGetDict,_PyObject_GenericSetDict,_PyObject_HasAttrWithError,_PyList_SetSlice,_PyUnicodeWriter_WriteChar,_PyUnicodeWriter_WriteASCII,_PyObject_GC_Track,__Py_union_type_or,__PyEval_NoToolsForUnwind,__PyGen_yf,_PyObject_CallFinalizerFromDealloc,__Py_MakeCoro,__PyObject_GC_NewVar,_PyUnstable_InterpreterFrame_GetLine,_PyGen_NewWithQualName,_PyGen_New,__PyCoro_GetAwaitableIter,_PyCoro_New,_PyAsyncGen_New,__PyEval_EvalFrameDefault,_PyFile_FromFd,_PyFile_GetLine,_PyFile_WriteObject,_PyFile_WriteString,_PyObject_AsFileDescriptor,__PyLong_FileDescriptor_Converter,_flockfile,_getc_unlocked,_funlockfile,_Py_UniversalNewlineFgets,_PyFile_NewStdPrinter,_PyFile_SetOpenCodeHook,_Py_IsInitialized,_PyFile_OpenCodeObject,_PyFile_OpenCode,__PyUnicode_AsUTF8String,__Py_write,_PyFloat_GetMax,_PyFloat_GetMin,_PyFloat_GetInfo,_PyStructSequence_New,_PyStructSequence_SetItem,__PyFloat_ExactDealloc,_PyLong_GetSign,_frexp,_modf,_PyLong_FromDouble,__PyLong_Lshift,_PyFloat_Pack2,_ldexp,_PyFloat_Pack4,_PyFloat_Pack8,_PyFloat_Unpack2,_PyFloat_Unpack4,_PyFloat_Unpack8,_fmod,_PyErr_SetFromErrno,_round,_strtol,_Py_ReprEnter,_PyDict_Update,_Py_ReprLeave,_PyDict_Size,_PyFrame_GetLineNumber,_PyFrame_New,_PyFrame_GetVar,__PyUnicode_Equal,_PyFrame_GetVarString,_PyFrame_FastToLocalsWithError,_PyFrame_FastToLocals,_PyFrame_LocalsToFast,__PyFrame_IsEntryFrame,_PyFrame_GetCode,_PyFrame_GetBack,_PyFrame_GetLocals,_PyFrame_GetGlobals,_PyFrame_GetBuiltins,_PyFrame_GetLasti,_PyFrame_GetGenerator,__PyErr_SetKeyError,_PyDict_DelItem,_PyDict_Pop,_PyCompile_OpcodeStackEffect,_PyFunction_AddWatcher,_PyFunction_ClearWatcher,_PyFunction_NewWithQualName,__PyFunction_SetVersion,_PyFunction_New,_PyFunction_GetCode,_PyFunction_GetGlobals,_PyFunction_GetModule,_PyFunction_GetDefaults,_PyFunction_SetDefaults,__PyEval_StopTheWorld,__PyEval_StartTheWorld,_PyFunction_SetVectorcall,_PyFunction_GetKwDefaults,_PyFunction_SetKwDefaults,_PyFunction_GetClosure,_PyFunction_SetClosure,_PyFunction_GetAnnotations,_PyFunction_SetAnnotations,__PyFunction_VerifyStateless,_PyClassMethod_New,_PyStaticMethod_New,__PyInterpolation_Build,_PyCallIter_New,_PyList_GetItemRef,_PyList_SetItem,_PyList_Insert,_PyList_GetSlice,__PySet_NextEntryRef,_PyList_Clear,__PyList_FromStackRefStealOnSuccess,__PyList_SliceSubscript,_PyUnicodeWriter_WriteRepr,__PyEval_SliceIndexNotNone,_PyObject_HashNotImplemented,__PyLong_New,__PyLong_FromDigits,_PyLong_FromUnsignedLong,_PyLong_FromUnsignedLongLong,_PyLong_AsUnsignedLong,_PyLong_AsSize_t,_PyLong_AsUnsignedLongMask,_PyLong_IsPositive,_PyLong_IsNegative,_PyLong_IsZero,__PyLong_Sign,__PyLong_FromByteArray,_PyLong_AsNativeBytes,_PyLong_FromNativeBytes,_PyLong_FromUnsignedNativeBytes,_PyLong_AsVoidPtr,_PyLong_FromLongLong,_PyLong_AsLongLong,_PyLong_AsUnsignedLongLong,_PyLong_AsUnsignedLongLongMask,_PyLong_AsLongLongAndOverflow,__PyLong_UnsignedShort_Converter,__PyLong_UnsignedInt_Converter,__PyLong_UnsignedLong_Converter,__PyLong_UnsignedLongLong_Converter,__PyLong_Size_t_Converter,__PyLong_UInt8_Converter,__PyLong_UInt16_Converter,__PyLong_UInt32_Converter,__PyLong_UInt64_Converter,__PyUnicodeWriter_PrepareInternal,__PyUnicodeWriter_WriteStr,__PyLong_Frexp,__PyLong_ExactDealloc,__PyLong_Add,__PyLong_Subtract,__PyLong_Multiply,__PyLong_Rshift,__PyLong_GCD,__PyLong_DivmodNear,_PyLong_GetInfo,_PyUnstable_Long_IsCompact,_PyUnstable_Long_CompactValue,_PyLong_FromInt32,_PyLong_FromUInt32,_PyLong_FromInt64,_PyLong_FromUInt64,_PyLong_AsInt32,_PyLong_AsInt64,_PyLong_AsUInt32,_PyLong_AsUInt64,_PyLong_GetNativeLayout,_PyLong_Export,_PyLong_FreeExport,_PyLongWriter_Create,_PyLongWriter_Discard,_PyLongWriter_Finish,_PyObject_Bytes,__PyObject_AssertFailed,__PyDict_NewPresized,_PyDict_GetItem,__PyErr_GetRaisedException,__PyDict_GetItem_KnownHash,__PyDict_GetItemRef_KnownHash_LockHeld,__PyDict_GetItemStringWithError,__PyDict_LoadGlobal,__PyDict_LoadGlobalStackRef,_PyEval_GetBuiltins,__PyDict_SetItem_Take2,__PyDict_SetItem_KnownHash_LockHeld,__PyDict_SetItem_KnownHash,__PyDict_DelItem_KnownHash,__PyDict_DelItemIf,_PyDict_Clear,_PyDict_PopString,__PyDict_Pop,_PyDict_MergeFromSeq2,__PyErr_FormatNote,_PyDict_Merge,__PyDict_MergeEx,_PyDict_SetDefaultRef,_PyDict_SetDefault,__PyDict_SizeOf,_PyDict_ContainsString,_PyDict_GetItemString,_PyDict_GetItemStringRef,_PyDict_DelItemString,_PyObject_VisitManagedDict,__PyObject_SetManagedDict,_PyObject_ClearManagedDict,_PyDict_Watch,_PyDict_Unwatch,_PyDict_AddWatcher,_PyDict_ClearWatcher,__PyDict_SendEvent,_PyArg_ValidateKeywordArguments,_PyODict_New,_PyODict_SetItem,_PyODict_DelItem,__PyErr_ChainExceptions1,_PyMemoryView_FromMemory,_PyMemoryView_FromBuffer,_PyMemoryView_GetContiguous,_PyUnicode_AsASCIIString,_PyCFunction_New,_PyCFunction_NewEx,_PyCFunction_GetFunction,_PyCFunction_GetSelf,_PyCFunction_GetFlags,_PyModuleDef_Init,_PyModule_NewObject,_PyModule_New,_PyModule_SetDocString,_PyModule_FromDefAndSpec2,_PyModule_ExecDef,_PyModule_GetName,_PyModule_GetFilenameObject,_PyModule_GetFilename,_PyModule_GetDef,_PyModule_GetState,_PyUnicode_AsWideChar,_wcsrchr,_wcscmp,__PySys_GetOptionalAttrString,_PySys_FormatStderr,_PyUnicode_Join,__PyNamespace_New,__PyArg_NoPositional,__PyUnicode_CheckConsistency,__PyObject_IsFreed,_fwrite,_fputc,__PyObject_Dump,_Py_IncRef,_Py_DecRef,__Py_IncRef,__Py_DecRef,_PyObject_Init,_PyObject_InitVar,_PyObject_CallFinalizer,_PyObject_Print,_ferror,__Py_BreakPoint,_PyUnicode_DecodeASCII,_PyObject_HasAttrStringWithError,_PyObject_GetOptionalAttrString,_PyObject_HasAttrString,_PyObject_DelAttrString,__PyObject_GetDictPtr,__PyObject_GenericSetAttrWithDict,_PyObject_Not,_PyObject_IS_GC,__Py_SetImmortalUntracked,_PyUnstable_Object_EnableDeferredRefcount,_PyUnstable_Object_IsUniqueReferencedTemporary,_PyUnstable_TryIncRef,_PyUnstable_EnableTryIncRef,__Py_ResurrectReference,__Py_ForgetReference,_PyThreadState_GetDict,__PyTrash_thread_deposit_object,__PyTrash_thread_destroy_chain,_PyObject_GET_WEAKREFS_LISTPTR,_Py_NewRef,_Py_XNewRef,_Py_Is,_Py_IsNone,_Py_IsTrue,_Py_IsFalse,__Py_SetRefcnt,_PyRefTracer_SetTracer,_PyRefTracer_GetTracer,_Py_GetConstantBorrowed,_Py_TYPE,_Py_REFCNT,_PyUnstable_IsImmortal,_PyUnstable_Object_IsUniquelyReferenced,_sleep,_abort,_getenv,_sbrk,_clock_gettime,_vsnprintf,_atexit,_strstr,_snprintf,_calloc,_realloc,_wcslen,__PyMem_GetCurrentAllocatorName,_PyMem_SetupDebugHooks,_PyMem_GetAllocator,_PyMem_SetAllocator,_PyObject_GetArenaAllocator,_PyObject_SetArenaAllocator,_PyMem_RawMalloc,_PyMem_RawCalloc,__PyMem_Strdup,__PyMutex_LockTimed,_PyPickleBuffer_FromObject,_PyPickleBuffer_GetBuffer,_PyPickleBuffer_Release,__PySlice_GetLongIndices,__PySet_AddTakeRef,__PySet_Contains,_PySet_Size,_PySet_Clear,_PySet_Pop,_PySlice_GetIndices,_PySlice_GetIndicesEx,_PyStructSequence_GetItem,_PyStructSequence_InitType2,_PyStructSequence_InitType,__PyStructSequence_NewType,_PyUnicodeWriter_WriteUTF8,_PyStructSequence_NewType,_PyUnicode_Concat,__PyTemplate_Build,_PyTuple_SetItem,__PyTuple_FromStackRefStealOnSuccess,__PyObject_GC_Resize,__PyStaticType_GetBuiltins,_PyType_GetDict,_strrchr,_PyType_ClearCache,_PyType_AddWatcher,_PyType_ClearWatcher,_PyType_Watch,_PyType_Unwatch,_PyType_Modified,__PyType_SetVersion,_PyUnstable_Type_AssignVersionTag,_PyType_GetFullyQualifiedName,__PyType_NewManagedObject,__PyObject_LookupSpecialMethod,__PyObject_MaybeCallSpecialNoArgs,__PyObject_MaybeCallSpecialOneArg,_PyType_GetFlags,_PyType_SUPPORTS_WEAKREFS,_PyType_FromMetaclass,_PyType_FromModuleAndSpec,_PyType_FromSpec,_PyType_GetName,_PyType_GetModuleName,_PyType_GetSlot,_PyType_GetModule,_PyType_GetModuleState,_PyType_GetModuleByDef,_PyType_GetBaseByToken,_PyObject_GetTypeData,_PyType_GetTypeDataSize,_PyObject_GetItemData,__PyType_Lookup,_PyUnicode_IsIdentifier,_PyEval_GetGlobals,__PyStaticType_InitForExtension,__PyType_GetSlotWrapperNames,_PyType_Freeze,__PySuper_Lookup,_PyWeakref_NewRef,_PyImport_GetModule,_PyImport_Import,__Py_hashtable_len,__Py_GetErrorHandler,_PyUnicode_CopyCharacters,_PyUnicode_Resize,_PyUnicode_FromWideChar,_PyUnicodeWriter_WriteWideChar,_PyUnicodeWriter_WriteUCS4,_PyUnicode_FromKindAndData,_PyUnicode_AsUCS4,_PyUnicode_AsUCS4Copy,__PyUnicodeWriter_WriteASCIIString,_PyUnicode_Fill,_PyUnicodeWriter_Format,_PyUnicode_AsWideCharString,_PyUnicode_FromOrdinal,_PyUnicode_FromObject,_PyCodec_LookupError,_PyUnicode_DecodeUTF16Stateful,_PyUnicode_DecodeUTF32Stateful,_PyUnicode_DecodeUTF16,_PyUnicode_DecodeUTF32,_PyUnicode_AsDecodedObject,_PyCodec_Decode,_PyUnicode_AsDecodedUnicode,_PyUnicode_AsEncodedObject,_PyCodec_Encode,_PyUnicode_EncodeLocale,__Py_EncodeLocaleEx,_PyCodec_StrictErrors,_PyUnicode_EncodeFSDefault,__PyUnicode_EncodeUTF16,__PyUnicode_EncodeUTF32,_PyUnicode_AsEncodedUnicode,_PyUnicode_DecodeLocaleAndSize,__Py_DecodeLocaleEx,_PyUnicode_DecodeLocale,_PyUnicode_DecodeFSDefaultAndSize,_PyUnicode_FSConverter,_PyOS_FSPath,_PyUnicode_FSDecoder,_wmemchr,__PyUnicode_AsUTF8NoNUL,_PyUnicode_GetSize,_PyUnicode_GetLength,_PyUnicode_WriteChar,_PyUnicode_DecodeUTF7,_PyUnicode_DecodeUTF7Stateful,_PyUnicode_AsUTF32String,_PyUnicode_AsUTF16String,_PyUnicode_DecodeUnicodeEscape,_PyUnicode_AsUnicodeEscapeString,_PyUnicode_DecodeRawUnicodeEscape,_PyUnicode_AsRawUnicodeEscapeString,_PyUnicode_AsLatin1String,__PyUnicodeWriter_PrepareKindInternal,_PyUnicode_DecodeCharmap,_PyUnicode_BuildEncodingMap,_PyUnicode_AsCharmapString,_PyUnicode_Translate,__PyUnicode_ToDecimalDigit,_PyUnicode_Count,_PyUnicode_Find,_PyUnicode_FindChar,_PyUnicode_Tailmatch,__PyUnicode_JoinArray,_PyUnicode_Splitlines,__PyUnicode_IsLinebreak,_wmemcmp,_PyUnicode_EqualToUTF8,_PyUnicode_EqualToUTF8AndSize,_PyUnicode_RichCompare,_PyUnicode_Contains,_PyUnicode_Append,_PyUnicode_AppendAndDel,_PyUnicode_Replace,_PyUnicode_Split,_PyUnicode_Partition,_PyUnicode_RPartition,_PyUnicode_RSplit,__PyUnicodeWriter_WriteChar,__PyUnicodeWriter_WriteSubstring,_PyUnicodeWriter_WriteSubstring,_PyUnicodeWriter_DecodeUTF8Stateful,__PyUnicodeWriter_WriteLatin1String,_PyUnicode_Format,__PyUnicode_ExactDealloc,__Py_hashtable_new_full,__Py_hashtable_get,__Py_hashtable_set,__PyUnicode_InternInPlace,_PyUnicode_InternInPlace,_PyUnicode_InternImmortal,__Py_hashtable_destroy,_PyInit__string,_PyUnicode_KIND,_PyUnicode_DATA,__PyUnicode_IsLowercase,__PyUnicode_IsUppercase,__PyUnicode_IsTitlecase,__PyUnicode_IsDecimalDigit,__PyUnicode_IsDigit,__PyUnicode_IsNumeric,__PyUnicode_IsAlpha,__PyUnicode_ToNumeric,__PyUnicode_ToTitlecase,__PyUnicode_ToDigit,__PyUnicode_ToUppercase,__PyUnicode_ToLowercase,__PyWeakref_ClearRef,_PyWeakref_NewProxy,_PyWeakref_IsDead,_PyWeakref_GetRef,_PyWeakref_GetObject,_PyUnstable_Object_ClearWeakRefsNoCallbacks,__PyWeakref_IsDead,_PyInit__contextvars,_PyContext_CopyCurrent,_PyModule_AddType,_PyContextVar_New,_PyErr_ResourceWarning,__PyRecursiveMutex_Lock,_PyContextVar_Get,_PyErr_WarnExplicit,_PyErr_WarnExplicitFormat,__Py_IsInterpreterFinalizing,__PyWarnings_Init,_PyThreadState_GetFrame,__PySys_GetOptionalAttr,__Py_DisplaySourceLine,_PyModule_AddObjectRef,_PyInit__ast,__PyOnceFlag_CallOnceSlow,_PyModule_AddIntConstant,_PyInit__tokenize,_PyErr_SyntaxLocationObject,_PyImport_ImportModuleLevelObject,__PySys_GetRequiredAttrString,_PyEval_MergeCompilerFlags,__PyArena_New,__PyArena_Free,__PyAST_Compile,_Py_CompileStringObject,_PyEval_EvalCode,_PyRun_StringFlags,_PyEval_EvalCodeEx,__PySys_GetRequiredAttr,_Py_GetRecursionLimit,_Py_SetRecursionLimit,_emscripten_stack_get_base,_emscripten_stack_get_end,__Py_InitializeRecursionLimits,_PyUnstable_ThreadState_SetStackProtection,_PyUnstable_ThreadState_ResetStackProtection,__PyEval_MatchKeys,__PyEval_MatchClass,__PyEvalFramePushAndInit,_PyEval_EvalFrame,_PyEval_EvalFrameEx,__PyObjectArray_FromStackRefArray,__PyObjectArray_Free,__PyEval_FrameClearAndPop,_PyTraceBack_Here,__PyEval_MonitorRaise,__Py_HandlePending,__Py_Check_ArgsIterable,__PyEval_CheckExceptStarTypeValid,__PyEval_ExceptionGroupMatch,_PyErr_SetHandledException,__PyEval_FormatExcCheckArg,__PyEval_FormatKwargsError,__PyEval_GetANext,__PyEval_GetAwaitable,__PyEval_ImportFrom,__PyEval_ImportName,__PyEval_FormatExcUnbound,__PyEval_LoadGlobalStackRef,__PyEval_LoadName,__PyEval_SpecialMethodCanSuggest,__PyThreadState_PopFrame,__PyEval_UnpackIterableStackRef,__PyEval_CheckExceptTypeValid,_PyThreadState_EnterTracing,_PyThreadState_LeaveTracing,_PyEval_SetProfile,__PyEval_SetProfile,_PyEval_SetProfileAllThreads,_PyEval_SetTrace,_PyEval_SetTraceAllThreads,_PyEval_GetFrame,_PyEval_GetLocals,__PyInterpreterState_IsRunningMain,_PyImport_ImportModuleLevel,_PyEval_GetFrameLocals,_PyEval_GetFrameGlobals,_PyEval_GetFrameBuiltins,_PyEval_GetFuncName,_PyEval_GetFuncDesc,__PyEval_FormatAwaitableError,_PyUnstable_Eval_RequestCodeExtraIndex,_PyCodec_Register,_PyCodec_Unregister,_PyCodec_KnownEncoding,_PyCodec_Encoder,_PyCodec_Decoder,_PyCodec_IncrementalEncoder,_PyCodec_IncrementalDecoder,_PyCodec_StreamReader,_PyCodec_StreamWriter,_PyCodec_RegisterError,_PyCodec_IgnoreErrors,_PyCodec_ReplaceErrors,_PyCodec_XMLCharRefReplaceErrors,_PyCodec_BackslashReplaceErrors,_PyCodec_NameReplaceErrors,_PyStatus_NoMemory,_PyStatus_Error,_PyStatus_Ok,__PyCompile_CleanDoc,__PyInstructionSequence_New,__PyCompile_CodeGen,__PyCompile_Assemble,_PyCode_Optimize,__PyContext_NewHamtForTests,_PyContext_New,_PyContext_Copy,_PyContext_AddWatcher,_PyContext_ClearWatcher,_PyContext_Enter,_PyContext_Exit,_PyContextVar_Set,_PyContextVar_Reset,__PyCriticalSection_BeginSlow,__PyCriticalSection2_BeginSlow,__PyCriticalSection_SuspendAll,__PyCriticalSection_Resume,_PyCriticalSection_Begin,_PyCriticalSection_BeginMutex,_PyCriticalSection_End,_PyCriticalSection2_Begin,_PyCriticalSection2_BeginMutex,_PyCriticalSection2_End,__PyEval_AddPendingCall,__PyXIData_GetNotShareableErrorType,__PyXIData_SetNotShareableError,__PyXIData_FormatNotShareableError,__PyXI_UnwrapNotShareableError,__PyXI_InitFailure,__PyXIData_Lookup,__PyXIData_RegisterClass,__PyXIData_UnregisterClass,__PyBytes_GetData,__PyBytes_FromData,__PyBytes_FromXIData,__PyBytes_GetXIData,_PyInterpreterState_GetID,__PyBytes_GetXIDataWrapped,__PyCode_FromXIData,__PyMarshal_ReadObjectFromXIData,_PyMarshal_ReadObjectFromString,__PyCode_GetXIData,__PyMarshal_GetXIData,_PyMarshal_WriteObjectToString,__PyFunction_FromXIData,__PyFunction_GetXIData,__PyXIData_New,__PyXIData_Free,__PyXIData_Clear,__PyXIData_Init,__PyXIData_InitWithSize,__PyObject_CheckXIData,__PyObject_GetXIDataNoFallback,__PyObject_GetXIData,__PyPickle_GetXIData,__PyPickle_LoadFromXIData,_PyInterpreterState_GetDict,__PyImport_SetModule,__PyCode_GetScriptXIData,_Py_CompileStringExFlags,__PyCode_GetPureScriptXIData,__PyXIData_NewObject,__PyXIData_Release,__PyInterpreterState_LookUpID,__PyXIData_ReleaseAndRawFree,__PyXI_NewExcInfo,__PyXI_FreeExcInfo,__PyXI_FormatExcInfo,__PyXI_ExcInfoAsObject,__PyXI_NewFailure,__PyXI_FreeFailure,__PyXI_GetFailureCode,__PyXI_InitFailureUTF8,__PyXI_NewSession,__PyXI_FreeSession,__PyXI_Enter,__PyThreadState_NewBound,__PyInterpreterState_SetRunningMain,__PyInterpreterState_SetNotRunningMain,_PyThreadState_Clear,__PyErr_SetInterpreterAlreadyRunning,__PyXI_Exit,__PyXI_ClearResult,__PyXI_GetMainNamespace,__PyXI_Preserve,__PyXI_GetPreserved,_PyErr_PrintEx,__PyXI_NewInterpreter,_Py_NewInterpreterFromConfig,__PyErr_SetFromPyStatus,_PyThreadState_GetInterpreter,__PyXI_EndInterpreter,__PyInterpreterState_IsReady,_PyInterpreterState_Delete,_Py_EndInterpreter,__PyErr_SetLocaleString,_PyErr_GetHandledException,_PyErr_GetExcInfo,_PyErr_SetExcInfo,_PyErr_SetFromErrnoWithFilenameObject,_PyErr_SetFromErrnoWithFilenameObjects,_strerror,_PyErr_SetImportErrorSubclass,_PyErr_SetImportError,_PyErr_BadInternalCall,__PyErr_FormatV,_PyErr_FormatV,_PyErr_NewExceptionWithDoc,_PyTraceBack_Print,_PyErr_WriteUnraisable,_PyErr_SyntaxLocation,_PyErr_SyntaxLocationEx,_PyErr_RangedSyntaxLocationObject,_PyErr_ProgramTextObject,_PyErr_ProgramText,_Py_fopen,_PyCompile_OpcodeStackEffectWithJump,__PyCompile_OptimizeCfg,_PyUnstable_InterpreterFrame_GetCode,_PyUnstable_InterpreterFrame_GetLasti,_Py_FrozenMain,_Py_GETENV,_Py_GetVersion,_Py_GetCopyright,_PyImport_ImportFrozenModule,_PyRun_AnyFileExFlags,_Py_FinalizeEx,_PyGC_Enable,_PyGC_Disable,_PyGC_IsEnabled,_PyTime_PerfCounterRaw,_PyTime_AsSecondsDouble,_PyGC_Collect,_PyUnstable_Object_GC_NewWithExtraData,_PyObject_GC_IsTracked,_PyObject_GC_IsFinalized,_PyUnstable_GC_VisitObjects,_PyInterpreterState_ThreadHead,_PyThreadState_Next,_PyArg_Parse,__PyArg_Parse_SizeT,__PyArg_ParseTuple_SizeT,_PyArg_VaParse,__PyArg_VaParse_SizeT,__PyArg_ParseTupleAndKeywords_SizeT,_PyArg_VaParseTupleAndKeywords,__PyArg_VaParseTupleAndKeywords_SizeT,__PyArg_ParseTupleAndKeywordsFast,_Py_GetCompiler,_Py_GetPlatform,_PyEval_ThreadsInitialized,_PyThread_init_thread,_pthread_cond_destroy,_pthread_mutex_destroy,_PyEval_InitThreads,_PyEval_AcquireLock,_pthread_mutex_lock,_pthread_cond_timedwait,_pthread_mutex_unlock,_pthread_cond_signal,_PyEval_ReleaseLock,_pthread_cond_wait,_PyEval_AcquireThread,_PyEval_ReleaseThread,_Py_AddPendingCall,__PyEval_MakePendingCalls,_Py_MakePendingCalls,_pthread_mutex_init,__Py_hashtable_hash_ptr,__Py_hashtable_compare_direct,__Py_hashtable_size,__Py_hashtable_steal,__Py_hashtable_foreach,__Py_hashtable_new,__Py_hashtable_clear,__PyRecursiveMutex_Unlock,_PyThread_get_thread_ident_ex,_PyImport_AddModuleRef,_PyImport_AddModuleObject,_PyImport_AddModule,_PyState_FindModule,__PyState_AddModule,_PyState_AddModule,_PyState_RemoveModule,__PyImport_ClearExtension,_PyImport_ExtendInittab,_PyImport_GetMagicNumber,_PyImport_GetMagicTag,_PyImport_ExecCodeModule,_PyImport_ExecCodeModuleObject,_PyImport_ExecCodeModuleWithPathnames,_PyImport_ExecCodeModuleEx,_PyImport_ImportFrozenModuleObject,_PyImport_GetImporter,_PyImport_ImportModuleNoBlock,__PyTime_AsMicroseconds,_PyImport_ReloadModule,_PyImport_ImportModuleAttr,_PyInit__imp,__PyRecursiveMutex_IsLockedByCurrentThread,_PyModule_Add,_PyStatus_Exit,_PyStatus_IsError,_PyStatus_IsExit,_PyWideStringList_Insert,_PyWideStringList_Append,_Py_GetArgcArgv,__PyConfig_InitCompatConfig,_PyConfig_InitIsolatedConfig,_PyConfig_SetString,_Py_DecodeLocale,__PyConfig_AsDict,__PyConfig_FromDict,_wcschr,_setvbuf,_PyConfig_SetArgv,_PyConfig_SetWideStringList,_putchar,_iprintf,_wcstok,_strtoul,_wcstol,_setlocale,_PyConfig_Read,__Py_GetConfigsAsDict,_PyInitConfig_Create,_PyPreConfig_InitIsolatedConfig,_PyInitConfig_Free,_PyInitConfig_GetError,_strdup,_PyInitConfig_GetExitCode,_PyInitConfig_HasOption,_PyInitConfig_GetInt,_PyInitConfig_GetStr,_PyInitConfig_GetStrList,_PyInitConfig_FreeStrList,_PyInitConfig_SetInt,_PyInitConfig_SetStr,_PyInitConfig_SetStrList,_PyInitConfig_AddModule,_Py_InitializeFromInitConfig,_Py_PreInitializeFromArgs,_PyConfig_Get,_PyConfig_GetInt,_PyConfig_Names,_PyConfig_Set,_PySys_SetObject,__PyInterpreterConfig_AsDict,__PyInterpreterConfig_InitFromDict,__PyInterpreterConfig_UpdateFromDict,__PyInterpreterConfig_InitFromState,_PyMonitoring_EnterScope,_PyMonitoring_ExitScope,__PyMonitoring_FirePyStartEvent,__PyMonitoring_FirePyResumeEvent,__PyMonitoring_FirePyReturnEvent,__PyMonitoring_FirePyYieldEvent,__PyMonitoring_FireCallEvent,__PyMonitoring_FireLineEvent,__PyMonitoring_FireJumpEvent,__PyMonitoring_FireBranchEvent,__PyMonitoring_FireBranchRightEvent,__PyMonitoring_FireBranchLeftEvent,__PyMonitoring_FireCReturnEvent,__PyMonitoring_FirePyThrowEvent,__PyMonitoring_FireRaiseEvent,__PyMonitoring_FireCRaiseEvent,__PyMonitoring_FireReraiseEvent,__PyMonitoring_FireExceptionHandledEvent,__PyMonitoring_FirePyUnwindEvent,__PyMonitoring_FireStopIterationEvent,__PyCompile_GetUnaryIntrinsicName,__PyCompile_GetBinaryIntrinsicName,_PyTime_MonotonicRaw,__PyParkingLot_Park,__PyDeadline_Get,__PyParkingLot_Unpark,__PySemaphore_Init,__PySemaphore_Wait,__PySemaphore_Destroy,__PySemaphore_Wakeup,__PyEvent_IsSet,__PyEvent_Notify,__PyParkingLot_UnparkAll,_PyEvent_Wait,_PyEvent_WaitTimed,__PyRWMutex_RLock,__PyRWMutex_RUnlock,__PyRWMutex_Lock,__PyRWMutex_Unlock,__PySeqLock_LockWrite,_sched_yield,__PySeqLock_AbandonWrite,__PySeqLock_UnlockWrite,__PySeqLock_BeginRead,__PySeqLock_EndRead,__PySeqLock_AfterFork,_PyMutex_IsLocked,_PyMarshal_WriteLongToFile,_PyMarshal_WriteObjectToFile,_PyMarshal_ReadShortFromFile,_PyMarshal_ReadLongFromFile,_PyMarshal_ReadLastObjectFromFile,__Py_fstat_noraise,_fread,_PyMarshal_ReadObjectFromFile,_PyMarshal_Init,__Py_convert_optional_to_ssize_t,__Py_BuildValue_SizeT,_Py_VaBuildValue,__Py_VaBuildValue_SizeT,_PyModule_AddStringConstant,_Py_PACK_FULL_VERSION,_Py_PACK_VERSION,_PyOS_vsnprintf,_pthread_cond_init,_PyTime_TimeRaw,__PyTime_AsTimespec_clamp,__PyParkingLot_AfterFork,__PyPathConfig_ClearGlobal,_wcscpy,_Py_SetPath,_Py_SetPythonHome,_Py_SetProgramName,_Py_GetPath,_Py_GetPrefix,_Py_GetExecPrefix,_Py_GetProgramFullPath,_Py_GetPythonHome,_Py_GetProgramName,_wcsncpy,_wcsncmp,__PyPreConfig_InitCompatConfig,__Py_SetLocaleFromEnv,_PyHash_GetFuncDef,_Py_IsFinalizing,_nl_langinfo,_setenv,_Py_PreInitialize,_Py_InitializeEx,_Py_FatalError,_Py_Initialize,__PyThreadState_New,_Py_Finalize,__PyInterpreterState_New,_Py_NewInterpreter,__Py_write_noraise,_vfprintf,__Py_FatalRefcountErrorFunc,_Py_AtExit,_Py_Exit,_Py_FdIsInteractive,_PyOS_getsig,_signal,_PyOS_setsig,_siginterrupt,__Py_IsValidFD,_PyOS_mystrnicmp,__PyThreadState_GetCurrent,_PyThread_tss_create,_PyThread_tss_is_created,_PyThread_tss_delete,_PyThread_get_thread_ident,_PyThread_tss_get,_PyThread_tss_set,_PyInterpreterState_New,_PyInterpreterState_Clear,__PyInterpreterState_GetWhence,__PyInterpreterState_ObjectToID,__PyInterpreterState_GetIDObject,__PyInterpreterState_IDIncref,__PyInterpreterState_IDDecref,__PyInterpreterState_RequiresIDRef,__PyInterpreterState_RequireIDRef,__PyInterpreterState_LookUpIDObject,__PyThreadState_Prealloc,__PyThreadState_Init,_PyThreadState_DeleteCurrent,__PyThreadState_GetDict,_PyThreadState_GetID,_PyThreadState_SetAsyncExc,_PyThreadState_GetUnchecked,_PyInterpreterState_Head,_PyInterpreterState_Main,_PyInterpreterState_Next,__PyThread_CurrentFrames,__PyInterpreterState_GetEvalFrameFunc,__PyInterpreterState_SetEvalFrameFunc,_rewind,_PyRun_InteractiveLoopFlags,_PyRun_InteractiveOneObject,_PyRun_InteractiveOneFlags,_PyRun_SimpleFileExFlags,_PyRun_SimpleStringFlags,_PyErr_Display,_PyRun_FileExFlags,_PyRun_AnyFile,_PyRun_AnyFileEx,_PyRun_AnyFileFlags,_PyRun_File,_PyRun_FileEx,_PyRun_FileFlags,_PyRun_SimpleFile,_PyRun_SimpleFileEx,_PyRun_String,_PyRun_SimpleString,_Py_CompileString,_Py_CompileStringFlags,_PyRun_InteractiveOne,_PyRun_InteractiveLoop,__PyLong_AsTime_t,__PyLong_FromTime_t,__PyTime_ObjectToTime_t,__PyTime_ObjectToTimespec,__PyTime_ObjectToTimeval,__PyTime_FromSeconds,__PyTime_FromLong,__PyTime_FromSecondsObject,__PyTime_FromMillisecondsObject,__PyTime_AsLong,__PyTime_AsMilliseconds,__PyTime_AsTimeval,__PyTime_AsTimeval_clamp,__PyTime_AsTimevalTime_t,__PyTime_AsTimespec,_PyTime_Time,_clock_getres,_PyTime_Monotonic,__PyTime_MonotonicWithInfo,_PyTime_PerfCounter,__PyTime_localtime,_localtime_r,__PyTime_gmtime,_gmtime_r,__PyDeadline_Init,_getentropy,__Py_open,_close,__Py_fstat,__Py_open_noraise,__PyOS_URandomNonblock,_PySys_AuditTuple,_PySys_AddAuditHook,__PySys_GetSizeOf,_PyUnstable_PerfMapState_Init,_getpid,_open,_fdopen,_PyThread_allocate_lock,_PyUnstable_WritePerfMapEntry,_PyThread_acquire_lock,_PyThread_release_lock,_PyUnstable_PerfMapState_Fini,_PyThread_free_lock,_PyUnstable_CopyPerfMapFile,_fopen,_PySys_ResetWarnOptions,_PySys_AddWarnOptionUnicode,_PySys_AddWarnOption,_PySys_HasWarnOptions,_PySys_AddXOption,_PySys_GetXOptions,_PyThread_GetInfo,_PySys_SetPath,_PySys_SetArgvEx,_PySys_SetArgv,_PySys_WriteStdout,_PySys_FormatStdout,_access,_pthread_condattr_init,_pthread_condattr_setclock,_PyThread_start_joinable_thread,_pthread_attr_init,_pthread_attr_setstacksize,_pthread_attr_destroy,_pthread_create,_PyThread_start_new_thread,_pthread_detach,_PyThread_join_thread,_pthread_join,_PyThread_detach_thread,_pthread_self,_PyThread_exit_thread,_PyThread_acquire_lock_timed,_pthread_mutex_trylock,_PyThread_create_key,_pthread_key_create,_pthread_key_delete,_PyThread_delete_key,_PyThread_delete_key_value,_pthread_setspecific,_PyThread_set_key_value,_PyThread_get_key_value,_pthread_getspecific,_PyThread_ReInitTLS,_PyThread_get_stacksize,_PyThread_set_stacksize,_PyThread_ParseTimeoutArg,_PyThread_acquire_lock_timed_with_retries,_PyThread_tss_alloc,_PyThread_tss_free,_confstr,__PyTraceback_Add,__Py_DumpStack,__Py_InitDumpStack,_PyTraceMalloc_Track,_PyTraceMalloc_Untrack,__PyTraceMalloc_GetTraceback,_PyOS_mystricmp,__Py_strhex,__Py_strhex_bytes_with_sep,_localeconv,_mbstowcs,_mbrtowc,_Py_EncodeLocale,_fstat,_stat,__Py_stat,_fcntl,__Py_set_inheritable,_ioctl,__Py_set_inheritable_async_safe,_wcstombs,_Py_fclose,_write,_readlink,_realpath,_getcwd,__Py_normpath,__Py_dup,__Py_closerange,_sysconf,__Py_UTF8_Edit_Cost,_PyUnstable_PerfTrampoline_CompileCode,_PyUnstable_PerfTrampoline_SetPersistAfterFork,_dlopen,_dlerror,_dlsym,_PyErr_SetInterruptEx,_PyInit__ctypes,_PyInit__posixsubprocess,_PyInit__bz2,_PyInit_zlib,_PyInit__hmac,_PyInit__sqlite3,_PyInit__lzma,_PyInit__zstd,_PyInit_array,_PyInit__asyncio,_PyInit__bisect,_PyInit__csv,_PyInit__heapq,_PyInit__json,_PyInit__lsprof,_PyInit__pickle,_PyInit__queue,_PyInit__random,_PyInit__remote_debugging,_PyInit__struct,_PyInit__zoneinfo,_PyInit_math,_PyInit_cmath,_PyInit__statistics,_PyInit__decimal,_PyInit_binascii,_PyInit__md5,_PyInit__sha1,_PyInit__sha2,_PyInit__sha3,_PyInit__blake2,_PyInit_pyexpat,_PyInit__elementtree,_PyInit__codecs_cn,_PyInit__codecs_hk,_PyInit__codecs_iso2022,_PyInit__codecs_jp,_PyInit__codecs_kr,_PyInit__codecs_tw,_PyInit__multibytecodec,_PyInit_unicodedata,_PyInit_fcntl,_PyInit_mmap,_PyInit_select,_PyInit__socket,_PyInit_termios,_PyInit_xxsubtype,_PyInit__xxtestfuzz,_PyInit__testbuffer,_PyInit__testinternalcapi,_PyInit__testcapi,_PyInit__testlimitedcapi,_PyInit__testclinic,_PyInit__testclinic_limited,_PyInit_atexit,_PyInit_faulthandler,_PyInit_posix,_PyInit__signal,_PyInit__tracemalloc,_PyInit__suggestions,_PyInit__datetime,_PyInit__codecs,_PyInit__collections,_PyInit_errno,_PyInit__io,_PyInit_itertools,_PyInit__sre,_PyInit__sysconfig,_PyInit__thread,_PyInit_time,_PyInit__types,_PyInit__typing,_PyInit__weakref,_PyInit__abc,_PyInit__functools,_PyInit__locale,_PyInit__opcode,_PyInit__operator,_PyInit__stat,_PyInit__symtable,_PyInit_gc,_Py_RunMain,_perror,_kill,_Py_Main,_Py_BytesMain,_ffi_closure_alloc,_ffi_closure_free,_memmove,_memset,_strcat,_ffi_prep_cif,_ffi_prep_closure_loc,_ffi_prep_cif_var,_ffi_call,_dlclose,___extenddftf2,___trunctfdf2,__Py_Gid_Converter,__Py_Uid_Converter,_PyOS_BeforeFork,_PyOS_AfterFork_Parent,_fork,_PyOS_AfterFork_Child,__exit,_dup,_dup2,_chdir,_umask,__Py_RestoreSignals,_setsid,_setpgid,_setregid,_setreuid,_execve,_execv,_opendir,_dirfd,_readdir,_closedir,_BZ2_bzCompressEnd,_BZ2_bzCompressInit,_BZ2_bzCompress,_BZ2_bzDecompressEnd,_BZ2_bzDecompressInit,_BZ2_bzDecompress,_adler32,_deflateInit2_,_deflateEnd,_deflate,_deflateSetDictionary,_crc32,_inflateInit2_,_inflateEnd,_inflate,_inflateSetDictionary,_zlibVersion,_deflateCopy,_inflateCopy,_sqlite3_blob_close,_sqlite3_blob_bytes,_sqlite3_blob_read,_sqlite3_blob_write,_sqlite3_trace_v2,_sqlite3_progress_handler,_sqlite3_set_authorizer,_sqlite3_open_v2,_sqlite3_busy_timeout,_sqlite3_close,_sqlite3_get_autocommit,_sqlite3_prepare_v2,_sqlite3_step,_sqlite3_finalize,_sqlite3_close_v2,_sqlite3_backup_init,_sqlite3_backup_step,_sqlite3_backup_remaining,_sqlite3_backup_pagecount,_sqlite3_sleep,_sqlite3_backup_finish,_sqlite3_limit,_sqlite3_create_function_v2,_sqlite3_create_collation_v2,_sqlite3_interrupt,_sqlite3_serialize,_sqlite3_free,_sqlite3_malloc64,_sqlite3_deserialize,_sqlite3_libversion_number,_sqlite3_create_window_function,_sqlite3_db_config,_sqlite3_user_data,_sqlite3_aggregate_context,_sqlite3_result_error_nomem,_sqlite3_result_error_toobig,_sqlite3_result_error,_sqlite3_value_type,_sqlite3_value_double,_sqlite3_context_db_handle,_sqlite3_value_text,_sqlite3_errcode,_sqlite3_value_bytes,_sqlite3_value_blob,_sqlite3_value_int64,_sqlite3_result_null,_sqlite3_result_int64,_sqlite3_result_double,_sqlite3_result_text,_sqlite3_result_blob,_sqlite3_expanded_sql,_sqlite3_db_handle,_sqlite3_blob_open,_sqlite3_total_changes,_sqlite3_stricmp,_sqlite3_reset,_sqlite3_stmt_readonly,_sqlite3_stmt_busy,_sqlite3_bind_parameter_count,_sqlite3_bind_parameter_name,_sqlite3_column_count,_sqlite3_column_name,_sqlite3_column_decltype,_sqlite3_changes,_sqlite3_last_insert_rowid,_sqlite3_bind_null,_sqlite3_bind_int64,_sqlite3_bind_double,_sqlite3_bind_text,_sqlite3_bind_blob,_sqlite3_data_count,_sqlite3_column_blob,_sqlite3_column_bytes,_sqlite3_column_type,_sqlite3_column_double,_sqlite3_column_text,_sqlite3_column_int64,_sqlite3_exec,_sqlite3_complete,_sqlite3_initialize,_sqlite3_errstr,_sqlite3_libversion,_sqlite3_threadsafe,_sqlite3_extended_errcode,_sqlite3_errmsg,_lzma_check_is_supported,_lzma_properties_size,_lzma_properties_encode,_lzma_properties_decode,_lzma_lzma_preset,_lzma_end,_lzma_code,_lzma_easy_encoder,_lzma_stream_encoder,_lzma_alone_encoder,_lzma_raw_encoder,_lzma_auto_decoder,_lzma_stream_decoder,_lzma_alone_decoder,_lzma_get_check,_lzma_raw_decoder,_ZSTD_getErrorName,_ZSTD_cParam_getBounds,_ZSTD_dParam_getBounds,_ZSTD_isError,_ZDICT_trainFromBuffer,_ZDICT_isError,_ZDICT_finalizeDictionary,_ZSTD_findFrameCompressedSize,_ZSTD_getFrameContentSize,_ZSTD_getDictID_fromFrame,_ZSTD_versionNumber,_ZSTD_versionString,_ZSTD_defaultCLevel,_ZSTD_DStreamOutSize,_ZSTD_createCDict,_ZSTD_freeCDict,_ZSTD_createCCtx,_ZSTD_minCLevel,_ZSTD_maxCLevel,_ZSTD_CCtx_setParameter,_ZSTD_CCtx_refCDict,_ZSTD_CCtx_loadDictionary,_ZSTD_CCtx_refPrefix,_ZSTD_freeCCtx,_ZSTD_compressStream2,_ZSTD_CCtx_reset,_ZSTD_CCtx_setPledgedSrcSize,_ZSTD_compressBound,_ZSTD_createDCtx,_ZSTD_createDDict,_ZSTD_DCtx_refDDict,_ZSTD_DCtx_loadDictionary,_ZSTD_DCtx_refPrefix,_ZSTD_DCtx_setParameter,_ZSTD_freeDCtx,_ZSTD_decompressStream,_ZSTD_DCtx_reset,_ZSTD_getDictID_fromDict,_ZSTD_freeDDict,_getpagesize,_acos,_acosh,_asin,_asinh,_atan,_atanh,_cbrt,_copysign,_cosh,_erf,_erfc,_exp2,_expm1,_fabs,_fma,_log10,_log2,_sinh,_sqrt,_tan,_tanh,_nextafter,_log1p,_strncat,_flock,_mmap,_munmap,_msync,_madvise,_ftruncate,_mremap,_select,_poll,_inet_ntop,_gethostbyname,_gethostbyaddr,_gethostname,_getservbyname,_ntohs,_htons,_getservbyport,_ntohl,_htonl,_inet_aton,_inet_ntoa,_inet_pton,_gai_strerror,_freeaddrinfo,_if_nameindex,_if_freenameindex,_if_nametoindex,_if_indextoname,___h_errno_location,_hstrerror,_getsockname,_socket,_getsockopt,_bind,_getpeername,_listen,_setsockopt,_shutdown,_accept4,_accept,_connect,_recv,_recvfrom,_send,_sendto,_recvmsg,_sendmsg,_tcgetattr,_cfgetispeed,_cfgetospeed,_cfsetispeed,_cfsetospeed,_tcsetattr,_tcsendbreak,_tcdrain,_tcflush,_tcflow,_clock,__Py_Get_Getpath_CodeObject,_usleep,_raise,__pthread_cleanup_push,_PyUnstable_AtExit,_PyInit__testcapi_datetime,_getrlimit,_setrlimit,_sigfillset,_pthread_sigmask,_PyOS_AfterFork,__PyLong_FromGid,_sigemptyset,_sigaddset,_ttyname_r,_fchdir,_fchmod,_fchmodat,_chmod,_fchown,_fchownat,_chown,_chroot,_ctermid,_fdopendir,_rewinddir,_mkdirat,_mkdir,_getpriority,_readlinkat,_unlinkat,_rmdir,_symlink,_system,_uname,_futimesat,_futimens,_times,_fexecve,_posix_openpt,_grantpt,_unlockpt,_ptsname_r,_login_tty,_getgid,_getpgrp,_getppid,_getuid,_getlogin_r,_killpg,_setuid,_setgid,_getpgid,_setpgrp,_wait,_wait3,_wait4,_waitid,_waitpid,_getsid,_tcgetpgrp,_tcsetpgrp,_openat,_dup3,_lockf,_readv,_pread,_writev,_pwrite,_pipe,_truncate,_posix_fadvise,_unsetenv,_fsync,_sync,_fdatasync,_fstatvfs,_statvfs,_fpathconf,_pathconf,_getloadavg,_lstat,_fstatat,_renameat,_rename,_unlink,_utimes,_PySignal_SetWakeupFd,__PyErr_CheckSignals,_PyErr_SetInterrupt,_PyOS_InterruptOccurred,__PyOS_IsMainThread,_getitimer,_strsignal,_pause,_sigpending,_sigwait,_sigwaitinfo,_sigtimedwait,_sigismember,___libc_current_sigrtmin,___libc_current_sigrtmax,_strftime,_isalnum,_tolower,_toupper,_clock_settime,_pthread_getcpuclockid,_clock_nanosleep,_time,_mktime,_wcsftime,_wcscoll,_wcsxfrm,_gettext,_dgettext,_dcgettext,_textdomain,_bindtextdomain,_bind_textdomain_codeset,_gettimeofday,___small_fprintf,_ffi_prep_closure,_ffi_get_struct_offsets,_ffi_java_raw_size,_ffi_java_raw_to_ptrarray,_ffi_java_ptrarray_to_raw,_ffi_java_raw_call,_ffi_prep_java_raw_closure_loc,_ffi_prep_java_raw_closure,_ffi_tramp_is_supported,_ffi_tramp_alloc,_ffi_tramp_set_parms,_ffi_tramp_get_addr,_ffi_tramp_free,_lzma_version_number,_lzma_version_string,_lzma_get_progress,_lzma_memusage,_lzma_memlimit_get,_lzma_memlimit_set,_lzma_block_compressed_size,_lzma_block_unpadded_size,_lzma_check_size,_lzma_block_total_size,_lzma_filters_copy,_lzma_physmem,_lzma_index_init,_lzma_index_end,_lzma_index_memusage,_lzma_index_memused,_lzma_index_block_count,_lzma_index_stream_count,_lzma_index_size,_lzma_vli_size,_lzma_index_total_size,_lzma_index_stream_size,_lzma_index_file_size,_lzma_index_uncompressed_size,_lzma_index_checks,_lzma_index_stream_flags,_lzma_stream_flags_compare,_lzma_index_stream_padding,_lzma_index_append,_lzma_index_cat,_lzma_index_dup,_lzma_index_iter_init,_lzma_index_iter_rewind,_lzma_index_iter_next,_lzma_index_iter_locate,_lzma_block_buffer_bound,_lzma_block_buffer_encode,_lzma_block_uncomp_encode,_lzma_block_header_size,_lzma_block_header_encode,_lzma_block_encoder,_lzma_filter_flags_size,_lzma_vli_encode,_lzma_filter_flags_encode,_lzma_crc32,_lzma_easy_buffer_encode,_lzma_stream_buffer_encode,_lzma_easy_encoder_memusage,_lzma_raw_encoder_memusage,_lzma_raw_buffer_encode,_lzma_filter_encoder_is_supported,_lzma_filters_update,_lzma_index_encoder,_lzma_index_buffer_encode,_lzma_stream_buffer_bound,_lzma_stream_header_encode,_lzma_stream_footer_encode,_lzma_cputhreads,_lzma_stream_encoder_mt,_lzma_stream_encoder_mt_memusage,_pthread_condattr_destroy,_lzma_block_buffer_decode,_lzma_block_decoder,_lzma_block_header_decode,_lzma_vli_decode,_lzma_filter_flags_decode,_lzma_easy_decoder_memusage,_lzma_raw_decoder_memusage,_lzma_raw_buffer_decode,_lzma_filter_decoder_is_supported,_lzma_index_decoder,_lzma_index_buffer_decode,_lzma_index_hash_init,_lzma_index_hash_end,_lzma_index_hash_size,_lzma_index_hash_append,_lzma_index_hash_decode,_lzma_stream_buffer_decode,_lzma_stream_header_decode,_lzma_stream_footer_decode,_lzma_crc64,_lzma_mf_is_supported,_lzma_mode_is_supported,_sqlite3_status64,_sqlite3_log,_sqlite3_status,_sqlite3_db_status,_sqlite3_msize,_sqlite3_vfs_find,_sqlite3_config,_sqlite3_os_init,_sqlite3_vfs_register,_sqlite3_vfs_unregister,_sqlite3_release_memory,_sqlite3_memory_alarm,_sqlite3_soft_heap_limit64,_sqlite3_memory_used,_sqlite3_soft_heap_limit,_sqlite3_hard_heap_limit64,_sqlite3_memory_highwater,_sqlite3_malloc,_sqlite3_realloc,_sqlite3_realloc64,_sqlite3_str_vappendf,_sqlite3_str_append,___multf3,___addtf3,___gttf2,___getf2,___divtf3,___lttf2,_sqlite3_str_appendf,_sqlite3_str_appendchar,_sqlite3_str_reset,___fixtfsi,___floatsitf,___subtf3,_sqlite3_str_appendall,_sqlite3_str_finish,_sqlite3_str_errcode,_sqlite3_str_length,_sqlite3_str_value,_sqlite3_str_new,_sqlite3_vmprintf,_sqlite3_mprintf,_sqlite3_vsnprintf,_sqlite3_snprintf,_sqlite3_randomness,_sqlite3_strnicmp,_sqlite3_uri_parameter,_sqlite3_uri_boolean,_sqlite3_os_end,_sqlite3_column_int,_sqlite3_file_control,_sqlite3_database_file_object,_sqlite3_enable_shared_cache,_sqlite3_expired,_sqlite3_clear_bindings,_sqlite3_value_bytes16,_sqlite3_value_int,_sqlite3_value_subtype,_sqlite3_value_pointer,_sqlite3_value_text16,_sqlite3_value_text16be,_sqlite3_value_text16le,_sqlite3_value_nochange,_sqlite3_value_frombind,_sqlite3_value_dup,_sqlite3_value_free,_sqlite3_result_blob64,_sqlite3_result_error16,_sqlite3_result_int,_sqlite3_result_pointer,_sqlite3_result_subtype,_sqlite3_result_text64,_sqlite3_result_text16,_sqlite3_result_text16be,_sqlite3_result_text16le,_sqlite3_result_value,_sqlite3_result_zeroblob,_sqlite3_result_zeroblob64,_sqlite3_result_error_code,_sqlite3_vtab_nochange,_sqlite3_vtab_in_first,_sqlite3_vtab_in_next,_sqlite3_get_auxdata,_sqlite3_set_auxdata,_sqlite3_aggregate_count,_sqlite3_column_bytes16,_sqlite3_column_value,_sqlite3_column_text16,_sqlite3_column_name16,_sqlite3_column_decltype16,_sqlite3_bind_blob64,_sqlite3_bind_int,_sqlite3_bind_pointer,_sqlite3_bind_text64,_sqlite3_bind_text16,_sqlite3_bind_value,_sqlite3_bind_zeroblob,_sqlite3_bind_zeroblob64,_sqlite3_bind_parameter_index,_sqlite3_transfer_bindings,_sqlite3_stmt_isexplain,_sqlite3_next_stmt,_sqlite3_stmt_status,_sqlite3_sql,_sqlite3_value_numeric_type,_sqlite3_blob_reopen,_sqlite3_strglob,_sqlite3_strlike,_sqlite3_load_extension,_sqlite3_enable_load_extension,_sqlite3_auto_extension,_sqlite3_cancel_auto_extension,_sqlite3_reset_auto_extension,_sqlite3_prepare,_sqlite3_prepare_v3,_sqlite3_prepare16,_sqlite3_prepare16_v2,_sqlite3_prepare16_v3,_sqlite3_get_table,_sqlite3_free_table,_sqlite3_create_module,_sqlite3_create_module_v2,_sqlite3_drop_modules,_sqlite3_declare_vtab,_sqlite3_vtab_on_conflict,_sqlite3_vtab_config,_sqlite3_vtab_collation,_sqlite3_vtab_in,_sqlite3_vtab_rhs_value,_sqlite3_vtab_distinct,_sqlite3_keyword_name,_sqlite3_keyword_count,_sqlite3_keyword_check,_sqlite3_complete16,_sqlite3_shutdown,_sqlite3_db_mutex,_sqlite3_db_release_memory,_sqlite3_db_cacheflush,_sqlite3_set_last_insert_rowid,_sqlite3_changes64,_sqlite3_total_changes64,_sqlite3_txn_state,_sqlite3_busy_handler,_sqlite3_create_function,_sqlite3_create_function16,_sqlite3_overload_function,_sqlite3_trace,_sqlite3_profile,_sqlite3_commit_hook,_sqlite3_update_hook,_sqlite3_rollback_hook,_sqlite3_autovacuum_pages,_sqlite3_wal_autocheckpoint,_sqlite3_wal_hook,_sqlite3_wal_checkpoint_v2,_sqlite3_wal_checkpoint,_sqlite3_error_offset,_sqlite3_errmsg16,_sqlite3_system_errno,_sqlite3_open,_sqlite3_free_filename,_sqlite3_open16,_sqlite3_create_collation,_sqlite3_create_collation16,_sqlite3_collation_needed,_sqlite3_collation_needed16,_sqlite3_global_recover,_sqlite3_thread_cleanup,_sqlite3_table_column_metadata,_sqlite3_extended_result_codes,_sqlite3_test_control,_sqlite3_create_filename,_sqlite3_uri_key,_sqlite3_uri_int64,_sqlite3_filename_database,_sqlite3_filename_journal,_sqlite3_filename_wal,_sqlite3_db_name,_sqlite3_db_filename,_sqlite3_db_readonly,_sqlite3_compileoption_used,_sqlite3_compileoption_get,_sqlite3_rtree_geometry_callback,_sqlite3_rtree_query_callback,_sqlite3_sourceid,___floatditf,_qsort,_posix_fallocate,_geteuid,_trunc,_FSE_versionNumber,_FSE_isError,_FSE_getErrorName,_ERR_getErrorString,_HUF_isError,_HUF_getErrorName,_FSE_readNCount_bmi2,_FSE_readNCount,_HUF_readStats,_HUF_readStats_wksp,_FSE_decompress_wksp_bmi2,_FSE_buildDTable_wksp,_POOL_create,_POOL_create_advanced,_POOL_free,_POOL_joinJobs,_POOL_resize,_POOL_add,_POOL_tryAdd,_POOL_sizeof,_ZSTD_XXH_versionNumber,_ZSTD_XXH32,_ZSTD_XXH32_createState,_ZSTD_XXH32_freeState,_ZSTD_XXH32_copyState,_ZSTD_XXH32_reset,_ZSTD_XXH32_update,_ZSTD_XXH32_digest,_ZSTD_XXH32_canonicalFromHash,_ZSTD_XXH32_hashFromCanonical,_ZSTD_XXH64,_ZSTD_XXH64_createState,_ZSTD_XXH64_freeState,_ZSTD_XXH64_copyState,_ZSTD_XXH64_reset,_ZSTD_XXH64_update,_ZSTD_XXH64_digest,_ZSTD_XXH64_canonicalFromHash,_ZSTD_XXH64_hashFromCanonical,_ZSTD_getErrorCode,_ZSTD_getErrorString,_FSE_buildCTable_wksp,_FSE_NCountWriteBound,_FSE_writeNCount,_FSE_optimalTableLog_internal,_FSE_optimalTableLog,_FSE_normalizeCount,_FSE_buildCTable_rle,_FSE_compress_usingCTable,_FSE_compressBound,_HIST_isError,_HIST_add,_HIST_count_simple,_HIST_countFast_wksp,_HIST_count_wksp,_HIST_countFast,_HIST_count,_HUF_readCTableHeader,_HUF_writeCTable_wksp,_HUF_readCTable,_HUF_getNbBitsFromCTable,_HUF_buildCTable_wksp,_HUF_estimateCompressedSize,_HUF_validateCTable,_HUF_compressBound,_HUF_compress1X_usingCTable,_HUF_compress4X_usingCTable,_HUF_cardinality,_HUF_minTableLog,_HUF_optimalTableLog,_HUF_compress1X_repeat,_HUF_compress4X_repeat,_ZSTD_createCCtx_advanced,_ZSTD_initStaticCCtx,_ZSTD_sizeof_CCtx,_ZSTD_sizeof_CStream,_ZSTD_getSeqStore,_ZSTD_createCCtxParams,_ZSTD_freeCCtxParams,_ZSTD_CCtxParams_reset,_ZSTD_CCtxParams_init,_ZSTD_CCtxParams_init_advanced,_ZSTD_checkCParams,_ZSTD_CCtxParams_setParameter,_ZSTD_CCtx_getParameter,_ZSTD_CCtxParams_getParameter,_ZSTD_CCtx_setParametersUsingCCtxParams,_ZSTD_CCtx_setCParams,_ZSTD_CCtx_setFParams,_ZSTD_CCtx_setParams,_ZSTD_CCtx_loadDictionary_advanced,_ZSTD_CCtx_loadDictionary_byReference,_ZSTD_CCtx_refThreadPool,_ZSTD_CCtx_refPrefix_advanced,_ZSTD_cycleLog,_ZSTD_adjustCParams,_ZSTD_getCParamsFromCCtxParams,_ZSTD_estimateCCtxSize_usingCCtxParams,_ZSTD_ldm_getTableSize,_ZSTD_ldm_getMaxNbSeq,_ZSTD_estimateCCtxSize_usingCParams,_ZSTD_ldm_adjustParameters,_ZSTD_estimateCCtxSize,_ZSTD_estimateCStreamSize_usingCCtxParams,_ZSTD_estimateCStreamSize_usingCParams,_ZSTD_estimateCStreamSize,_ZSTD_getFrameProgression,_ZSTD_toFlushNow,_ZSTD_reset_compressedBlockState,_ZSTD_invalidateRepCodes,_ZSTD_copyCCtx,_ZSTD_seqToCodes,_ZSTD_selectBlockCompressor,_ZSTD_resetSeqStore,_ZSTD_sequenceBound,_ZSTD_generateSequences,_ZSTD_compress2,_ZSTD_mergeBlockDelimiters,_ZSTD_buildBlockEntropyStats,_ZSTD_writeSkippableFrame,_ZSTD_writeLastEmptyBlock,_ZSTD_referenceExternalSequences,_ZSTD_compressContinue_public,_ZSTD_splitBlock,_ZSTD_compressSuperBlock,_ZSTD_compressContinue,_ZSTD_getBlockSize,_ZSTD_compressBlock_deprecated,_ZSTD_compressBlock,_ZSTD_loadCEntropy,_ZSTD_compressBegin_advanced_internal,_ZSTD_compressBegin_advanced,_ZSTD_compressBegin_usingDict,_ZSTD_compressBegin,_ZSTD_CCtx_trace,_ZSTD_compressEnd_public,_ZSTD_compressEnd,_ZSTD_compress_advanced,_ZSTD_compress_advanced_internal,_ZSTD_compress_usingDict,_ZSTD_compressCCtx,_ZSTD_compress,_ZSTD_estimateCDictSize_advanced,_ZSTD_estimateCDictSize,_ZSTD_sizeof_CDict,_ZSTD_createCDict_advanced,_ZSTD_createCDict_advanced2,_ZSTD_createCDict_byReference,_ZSTD_initStaticCDict,_ZSTD_getCParamsFromCDict,_ZSTD_getDictID_fromCDict,_ZSTD_compressBegin_usingCDict_advanced,_ZSTD_compressBegin_usingCDict_deprecated,_ZSTD_compressBegin_usingCDict,_ZSTD_compress_usingCDict_advanced,_ZSTD_compress_usingCDict,_ZSTD_createCStream,_ZSTD_createCStream_advanced,_ZSTD_initStaticCStream,_ZSTD_freeCStream,_ZSTD_CStreamInSize,_ZSTD_CStreamOutSize,_ZSTD_resetCStream,_ZSTD_initCStream_internal,_ZSTD_initCStream_usingCDict_advanced,_ZSTD_initCStream_usingCDict,_ZSTD_initCStream_advanced,_ZSTD_initCStream_usingDict,_ZSTD_initCStream_srcSize,_ZSTD_initCStream,_ZSTD_compressStream,_ZSTD_compressStream2_simpleArgs,_ZSTD_compressSequences,_ZSTD_convertBlockSequences,_ZSTD_get1BlockSummary,_ZSTD_compressSequencesAndLiterals,_ZSTD_flushStream,_ZSTD_endStream,_ZSTD_getCParams,_ZSTD_getParams,_ZSTD_registerSequenceProducer,_ZSTD_CCtxParams_registerSequenceProducer,_ZSTD_selectEncodingType,_ZSTD_buildCTable,_ZSTD_ldm_skipRawSeqStoreBytes,_ZSTD_ldm_skipSequences,_ZSTD_ldm_blockCompress,_ZSTD_ldm_generateSequences,_ZSTD_crossEntropyCost,_ZSTD_fseBitCost,_ZSTD_compressLiterals,_ZSTD_encodeSequences,_ZSTD_ldm_fillHashTable,_ZSTD_fillHashTable,_ZSTD_fillDoubleHashTable,_ZSTD_dedicatedDictSearch_lazy_loadDictionary,_ZSTD_row_update,_ZSTD_insertAndFindFirstIndex,_ZSTD_updateTree,_ZSTD_compressBlock_fast,_ZSTD_compressBlock_doubleFast,_ZSTD_compressBlock_greedy,_ZSTD_compressBlock_lazy,_ZSTD_compressBlock_lazy2,_ZSTD_compressBlock_btlazy2,_ZSTD_compressBlock_btopt,_ZSTD_compressBlock_btultra,_ZSTD_compressBlock_btultra2,_ZSTD_compressBlock_fast_extDict,_ZSTD_compressBlock_doubleFast_extDict,_ZSTD_compressBlock_greedy_extDict,_ZSTD_compressBlock_lazy_extDict,_ZSTD_compressBlock_lazy2_extDict,_ZSTD_compressBlock_btlazy2_extDict,_ZSTD_compressBlock_btopt_extDict,_ZSTD_compressBlock_btultra_extDict,_ZSTD_compressBlock_fast_dictMatchState,_ZSTD_compressBlock_doubleFast_dictMatchState,_ZSTD_compressBlock_greedy_dictMatchState,_ZSTD_compressBlock_lazy_dictMatchState,_ZSTD_compressBlock_lazy2_dictMatchState,_ZSTD_compressBlock_btlazy2_dictMatchState,_ZSTD_compressBlock_btopt_dictMatchState,_ZSTD_compressBlock_btultra_dictMatchState,_ZSTD_compressBlock_greedy_dedicatedDictSearch,_ZSTD_compressBlock_lazy_dedicatedDictSearch,_ZSTD_compressBlock_lazy2_dedicatedDictSearch,_ZSTD_compressBlock_greedy_row,_ZSTD_compressBlock_lazy_row,_ZSTD_compressBlock_lazy2_row,_ZSTD_compressBlock_greedy_extDict_row,_ZSTD_compressBlock_lazy_extDict_row,_ZSTD_compressBlock_lazy2_extDict_row,_ZSTD_compressBlock_greedy_dictMatchState_row,_ZSTD_compressBlock_lazy_dictMatchState_row,_ZSTD_compressBlock_lazy2_dictMatchState_row,_ZSTD_compressBlock_greedy_dedicatedDictSearch_row,_ZSTD_compressBlock_lazy_dedicatedDictSearch_row,_ZSTD_compressBlock_lazy2_dedicatedDictSearch_row,_ZSTD_noCompressLiterals,_ZSTD_compressRleLiteralsBlock,_ZSTDMT_createCCtx_advanced,_ZSTDMT_freeCCtx,_ZSTDMT_sizeof_CCtx,_ZSTDMT_updateCParams_whileCompressing,_ZSTDMT_getFrameProgression,_ZSTDMT_toFlushNow,_ZSTDMT_initCStream_internal,_ZSTDMT_nextInputSizeHint,_ZSTDMT_compressStream_generic,_HUF_readDTableX1_wksp,_HUF_readDTableX2_wksp,_HUF_decompress1X2_DCtx_wksp,_HUF_selectDecoder,_HUF_decompress1X_DCtx_wksp,_HUF_decompress1X1_DCtx_wksp,_HUF_decompress1X_usingDTable,_HUF_decompress4X_usingDTable,_HUF_decompress4X_hufOnly_wksp,_ZSTD_DDict_dictContent,_ZSTD_DDict_dictSize,_ZSTD_copyDDictParameters,_ZSTD_createDDict_advanced,_ZSTD_loadDEntropy,_ZSTD_createDDict_byReference,_ZSTD_initStaticDDict,_ZSTD_estimateDDictSize,_ZSTD_sizeof_DDict,_ZSTD_getDictID_fromDDict,_ZSTD_sizeof_DCtx,_ZSTD_estimateDCtxSize,_ZSTD_initStaticDCtx,_ZSTD_createDCtx_advanced,_ZSTD_copyDCtx,_ZSTD_isFrame,_ZSTD_isSkippableFrame,_ZSTD_frameHeaderSize,_ZSTD_getFrameHeader_advanced,_ZSTD_getFrameHeader,_ZSTD_readSkippableFrame,_ZSTD_findDecompressedSize,_ZSTD_getDecompressedSize,_ZSTD_decompressBound,_ZSTD_getcBlockSize,_ZSTD_decompressionMargin,_ZSTD_insertBlock,_ZSTD_checkContinuity,_ZSTD_decompress_usingDict,_ZSTD_decompressBegin_usingDDict,_ZSTD_decompressBegin_usingDict,_ZSTD_decompressBlock_internal,_ZSTD_decompressDCtx,_ZSTD_decompress_usingDDict,_ZSTD_decompress,_ZSTD_nextSrcSizeToDecompress,_ZSTD_nextInputType,_ZSTD_decompressContinue,_ZSTD_buildFSETable,_ZSTD_decompressBegin,_ZSTD_createDStream,_ZSTD_initStaticDStream,_ZSTD_createDStream_advanced,_ZSTD_freeDStream,_ZSTD_DStreamInSize,_ZSTD_DCtx_loadDictionary_advanced,_ZSTD_DCtx_loadDictionary_byReference,_ZSTD_DCtx_refPrefix_advanced,_ZSTD_initDStream_usingDict,_ZSTD_initDStream,_ZSTD_initDStream_usingDDict,_ZSTD_resetDStream,_ZSTD_DCtx_setMaxWindowSize,_ZSTD_DCtx_setFormat,_ZSTD_DCtx_getParameter,_ZSTD_sizeof_DStream,_ZSTD_decodingBufferSize_min,_ZSTD_estimateDStreamSize,_ZSTD_estimateDStreamSize_fromFrame,_ZSTD_decompressStream_simpleArgs,_ZSTD_decodeLiteralsBlock_wrapper,_ZSTD_decodeSeqHeaders,_ZSTD_decompressBlock_deprecated,_ZSTD_decompressBlock,_COVER_sum,_COVER_warnOnSmallCorpus,_COVER_computeEpochs,_ZDICT_trainFromBuffer_cover,_COVER_checkTotalCompressedSize,_COVER_best_init,_COVER_best_wait,_COVER_best_destroy,_COVER_best_start,_COVER_best_finish,_COVER_dictSelectionError,_COVER_dictSelectionIsError,_COVER_dictSelectionFree,_COVER_selectDict,_ZDICT_optimizeTrainFromBuffer_cover,_divsufsort,_divbwt,_ZDICT_trainFromBuffer_fastCover,_ZDICT_optimizeTrainFromBuffer_fastCover,_ZDICT_getErrorName,_ZDICT_getDictID,_ZDICT_getDictHeaderSize,_ZDICT_trainFromBuffer_legacy,_ZDICT_addEntropyTablesFromBuffer,__hiwire_immortal_add,__hiwire_immortal_get,__hiwire_get,__hiwire_set,_hiwire_num_refs,__hiwire_slot_info,__hiwire_delete,__hiwire_immortal_table_init,_emscripten_GetProcAddress,_emscripten_webgl1_get_proc_address,__webgl1_match_ext_proc_address_without_suffix,_emscripten_webgl2_get_proc_address,__webgl2_match_ext_proc_address_without_suffix,_emscripten_webgl_get_proc_address,_SDL_GL_GetProcAddress,_eglGetProcAddress,_glfwGetProcAddress,_emscripten_webgl_init_context_attributes,_emscripten_is_main_runtime_thread,_BZ2_blockSort,_BZ2_bz__AssertH__fail,_BZ2_bzlibVersion,_BZ2_compressBlock,_BZ2_indexIntoF,_BZ2_decompress,_BZ2_bzWriteOpen,_BZ2_bzWrite,_BZ2_bzWriteClose,_BZ2_bzWriteClose64,_BZ2_bzReadOpen,_BZ2_bzReadClose,_BZ2_bzRead,_fgetc,_BZ2_bzReadGetUnused,_BZ2_bzBuffToBuffCompress,_BZ2_bzBuffToBuffDecompress,_BZ2_bzopen,_BZ2_bzdopen,_BZ2_bzread,_BZ2_bzwrite,_BZ2_bzflush,_BZ2_bzclose,_BZ2_bzerror,_BZ2_bsInitWrite,_BZ2_hbMakeCodeLengths,_BZ2_hbAssignCodes,_BZ2_hbCreateDecodeTables,_adler32_z,_adler32_combine,_adler32_combine64,_compress2,_deflateInit_,_compress,_compressBound,_get_crc_table,_crc32_z,_crc32_combine64,_crc32_combine,_crc32_combine_gen64,_crc32_combine_gen,_crc32_combine_op,_zcalloc,_zcfree,_deflateReset,_deflateResetKeep,_deflateGetDictionary,__tr_init,_deflateSetHeader,_deflatePending,_deflatePrime,__tr_flush_bits,_deflateParams,__tr_align,__tr_stored_block,_deflateTune,_deflateBound,__tr_flush_block,_gzclose,_gzclose_r,_gzclose_w,_gzopen,_gzopen64,_gzdopen,_gzbuffer,_gzrewind,_gzseek64,_gz_error,_gzseek,_gztell64,_gztell,_gzoffset64,_gzoffset,_gzeof,_gzerror,_gzclearerr,_gz_intmax,_gzread,_gzfread,_gzgetc,_gzgetc_,_gzungetc,_inflateReset,_gzgets,_gzdirect,_gzwrite,_gzfwrite,_gzputc,_gzputs,_gzvprintf,_gzprintf,_gzflush,_gzsetparams,_inflateBackInit_,_inflateBack,_inflate_table,_inflate_fast,_inflateBackEnd,_inflateResetKeep,_inflateReset2,_inflateInit_,_inflatePrime,_inflateGetDictionary,_inflateGetHeader,_inflateSync,_inflateSyncPoint,_inflateUndermine,_inflateValidate,_inflateMark,_inflateCodesUsed,__tr_tally,_uncompress2,_uncompress,_zlibCompileFlags,_zError,_getdate,_stime,_clock_getcpuclockid,_getpwnam,_getpwuid,_getpwnam_r,_getpwuid_r,_setpwent,_endpwent,_getpwent,_getgrnam,_getgrgid,_getgrnam_r,_getgrgid_r,_getgrent,_endgrent,_setgrent,_vfork,_posix_spawn,_popen,_pclose,_setgroups,_sigaltstack,___syscall_uname,___syscall_setpgid,___syscall_sync,___syscall_getsid,___syscall_getpgid,___syscall_getpid,___syscall_getppid,___syscall_linkat,___syscall_getgroups32,___syscall_setsid,___syscall_getrusage,___syscall_getpriority,___syscall_setpriority,___syscall_setdomainname,___syscall_getgid32,___syscall_geteuid32,___syscall_getegid32,___syscall_getresuid32,___syscall_getresgid32,___syscall_pause,___syscall_madvise,___syscall_mlock,___syscall_munlock,___syscall_mprotect,___syscall_mremap,___syscall_mlockall,___syscall_munlockall,___syscall_prlimit64,___syscall_acct,___syscall_mincore,___syscall_pipe2,___syscall_pselect6,___syscall_ppoll,___syscall_recvmmsg,___syscall_sendmmsg,___syscall_shutdown,___syscall_socketpair,___syscall_wait4,__Exit,_cosf,_sinf,_expf,___ctype_b_loc,___ctype_get_mb_cur_max,___get_tp,___ctype_tolower_loc,___ctype_toupper_loc,___emscripten_environ_constructor,_emscripten_builtin_malloc,___flt_rounds,_fegetround,___fmodeflags,___fpclassify,___fpclassifyf,___fpclassifyl,___mo_lookup,___month_to_secs,___overflow,_scalbn,_floor,___fixtfdi,___signbit,___signbitf,___signbitl,_memcpy,___stack_chk_fail,___wasi_syscall_ret,___synccall,_fabsl,___year_to_secs,___lock,___unlock,_tzset,___uflow,___fxstat,___fxstatat,___lxstat,___xstat,___xmknod,_mknod,___xmknodat,_mknodat,_a64l,_l64a,_abs,_acct,_acosf,_sqrtf,_acoshf,_log1pf,_logf,_acoshl,_acosl,___eqtf2,___netf2,_sqrtl,_alarm,_setitimer,_aligned_alloc,_posix_memalign,_alphasort,_strcoll,_asctime,___nl_langinfo_l,_asctime_r,_asinf,_fabsf,_asinhf,_asinhl,_asinl,_asprintf,_vasprintf,_at_quick_exit,_atan2f,_atanf,_atan2l,_atanl,_atanhf,_atanhl,_log1pl,___funcs_on_exit,____cxa_finalize,____cxa_atexit,___libc_calloc,___atexit,___cxa_atexit,___cxa_finalize,_atof,_strtod,_atoi,_atol,_atoll,_basename,___xpg_basename,_bcmp,_bcopy,_strcasecmp,_bsearch,_btowc,_bzero,_c16rtomb,_wcrtomb,_c32rtomb,_cabs,_cabsf,_hypotf,_cabsl,_hypotl,_cacos,_casin,_cacosf,_casinf,_cacosh,_cacoshf,_cacoshl,_cacosl,_casinl,_call_once,_carg,_cargf,_cargl,_csqrt,_clog,_csqrtf,_clogf,_casinh,_casinhf,_casinhl,_csqrtl,_clogl,_catan,_catanf,_catanh,_catanhf,_catanhl,_catanl,_logl,___trunctfsf2,___extendsftf2,_catclose,_catgets,_catopen,_cbrtf,_cbrtl,_ccos,_ccosh,_ccosf,_ccoshf,_coshf,_sinhf,_copysignf,_ccoshl,_ccosl,_ceil,_ceilf,_ceill,_cexp,_cexpf,_cexpl,_cfmakeraw,_cfsetspeed,_cimag,_cimagf,_cimagl,_clearenv,_clearerr_unlocked,___wasi_timestamp_to_timespec,_emscripten_thread_sleep,_cnd_broadcast,_cnd_destroy,_cnd_init,_cnd_signal,_cnd_timedwait,_cnd_wait,_conj,_conjf,_conjl,_copysignl,_expm1f,_coshl,_cosl,_cpow,___muldc3,_cpowf,___mulsc3,_cpowl,___unordtf2,___multc3,_cproj,_cprojf,_cprojl,_creal,_crealf,_creall,_creat,_crypt,___crypt_blowfish,___crypt_des,___crypt_md5,_strnlen,___crypt_sha256,___crypt_sha512,_crypt_r,_sprintf,_csin,_csinh,_csinf,_csinhf,_csinhl,_csinl,_ctan,_ctanh,_ctanf,_ctanhf,_tanf,_ctanhl,_ctanl,_ctime,_localtime,_ctime_r,_dcngettext,___gettextdomain,_dngettext,_difftime,_dirname,_div,_dladdr,___libc_free,___libc_malloc,___dl_seterr,_dn_comp,_dn_expand,_dn_skipname,_dprintf,_vdprintf,_erand48,_drand48,___wasi_fd_is_valid,___duplocale,_duplocale,_new_dlevent,__emscripten_find_dylib,_strspn,_pthread_setcancelstate,_emscripten_dlopen,_emscripten_dlopen_promise,_ecvt,_emscripten_console_logf,_emscripten_console_errorf,_emscripten_console_warnf,_emscripten_console_tracef,_emscripten_outf,_emscripten_errf,_emscripten_log,_emscripten_fiber_init,_emscripten_fiber_init_from_current_context,_emscripten_get_heap_size,__emscripten_memcpy_bulkmem,_emscripten_builtin_memcpy,___memset,_emscripten_builtin_memset,__emscripten_memset_bulkmem,___syscall_munmap,_emscripten_builtin_free,___syscall_msync,___syscall_mmap2,_emscripten_builtin_memalign,_emscripten_scan_stack,_emscripten_stack_get_current,_dysize,__emscripten_yield,__emscripten_check_timers,_setkey,_encrypt,_sethostent,_gethostent,_getnetent,_endhostent,_setnetent,_endnetent,_erff,_erfcf,_erfl,_erfcl,_vwarn,_fprintf,_vwarnx,_putc,_verr,_verrx,_warn,_warnx,_err,_errx,_ether_aton_r,_ether_aton,_ether_ntoa_r,_ether_ntoa,_ether_line,_ether_ntohost,_ether_hostton,_euidaccess,_faccessat,_eaccess,_execl,_execle,_execlp,_execvp,_execvpe,_exp10,_pow10,_exp10f,_modff,_exp2f,_pow10f,_exp10l,_modfl,_exp2l,_powl,_pow10l,___letf2,_scalbnl,_expl,_explicit_bzero,_expm1l,__flushlbf,___fsetlocking,___fwriting,___freading,___freadable,___fwritable,___flbf,___fbufsize,___fpending,___fpurge,_fpurge,___freadahead,___freadptr,___freadptrinc,___fseterr,_fcvt,_fdim,_fdimf,_fdiml,_fegetexceptflag,_fetestexcept,_feholdexcept,_fegetenv,_feclearexcept,_feraiseexcept,___fesetround,_fesetenv,_feof_unlocked,__IO_feof_unlocked,_ferror_unlocked,__IO_ferror_unlocked,_fesetexceptflag,_fesetround,_feupdateenv,_fflush_unlocked,_ffs,_ffsl,_ffsll,_emscripten_futex_wake,_fgetln,_getline,_fgetpos,_fgets_unlocked,___fgetwc_unlocked,_fwide,_mbtowc,_fgetwc,_fgetwc_unlocked,_getwc_unlocked,_fgetws,_fgetws_unlocked,_fileno_unlocked,_finite,_finitef,___floatunsitf,_fmodl,_ftrylockfile,_floorf,_floorl,_fmaf,_fmal,_frexpl,_nextafterl,_ilogbl,_fmax,_fmaxf,_fmaxl,_fmemopen,_fmin,_fminf,_fminl,_fmodf,_fmtmsg,_fnmatch,_towupper,_towlower,_wctype,_iswctype,_forkpty,_openpty,_pipe2,_vfiprintf,___small_vfprintf,_fputs_unlocked,___fputwc_unlocked,_wctomb,_fputwc,_fputwc_unlocked,_putwc_unlocked,_fputws,_wcsrtombs,_fputws_unlocked,_fread_unlocked,_freelocale,___freelocale,_freopen,_frexpf,_fscanf,_vfscanf,___isoc99_fscanf,_fseek,_fseeko,_fsetpos,_ftello,_ftime,_utimensat,_fwprintf,_vfwprintf,_fwrite_unlocked,_fwscanf,_vfwscanf,___isoc99_fwscanf,_gcvt,_get_current_dir_name,__IO_getc,_fgetc_unlocked,__IO_getc_unlocked,_getchar,_getchar_unlocked,_getdelim,___getdelim,_getdents,_getdomainname,_getegid,_getgroups,_gethostid,_freeifaddrs,_getifaddrs,___getitimer,_getlogin,_getopt,___posix_getopt,_getopt_long,_getopt_long_only,_mblen,_getresgid,_getresuid,_getrusage,_gets,_getservbyname_r,_getservbyport_r,_getsubopt,_gettid,_getw,_getwc,_getwchar,_getwchar_unlocked,_glob,_globfree,_gmtime,_herror,_hcreate,_hdestroy,_hsearch,_hcreate_r,_hdestroy_r,_hsearch_r,_iconv_open,_iconv,_iconv_close,_ilogb,_ilogbf,_imaxabs,_imaxdiv,_index,_inet_addr,_inet_network,_inet_makeaddr,_inet_lnaof,_inet_netof,_insque,_remque,___intscan,___multi3,___isalnum_l,_isalnum_l,_isalpha,___isalpha_l,_isalpha_l,_isascii,_isblank,___isblank_l,_isblank_l,_iscntrl,___iscntrl_l,_iscntrl_l,_isdigit,___isdigit_l,_isdigit_l,_isgraph,___isgraph_l,_isgraph_l,_islower,___islower_l,_islower_l,_isprint,___isprint_l,_isprint_l,_ispunct,___ispunct_l,_ispunct_l,_issetugid,_isspace,___isspace_l,_isspace_l,_isupper,___isupper_l,_isupper_l,_iswalnum,_iswalpha,___iswalnum_l,_iswalnum_l,___iswalpha_l,_iswalpha_l,_iswblank,___iswblank_l,_iswblank_l,_iswcntrl,___iswcntrl_l,_iswcntrl_l,_iswgraph,_iswlower,_iswprint,_iswpunct,_iswspace,_iswupper,_iswxdigit,___iswctype_l,___wctype_l,_iswctype_l,_wctype_l,_iswdigit,___iswdigit_l,_iswdigit_l,___iswgraph_l,_iswgraph_l,___iswlower_l,_iswlower_l,___iswprint_l,_iswprint_l,___iswpunct_l,_iswpunct_l,___iswspace_l,_iswspace_l,___iswupper_l,_iswupper_l,___iswxdigit_l,_iswxdigit_l,_isxdigit,___isxdigit_l,_isxdigit_l,_j0,_y0,_j0f,_y0f,_j1,_y1,_j1f,_y1f,_jn,_yn,_jnf,_ynf,_labs,___nl_langinfo,_nl_langinfo_l,_lchmod,_lchown,_lcong48,_ldexpf,_scalbnf,_ldexpl,_ldiv,_get_nprocs_conf,_get_nprocs,_get_phys_pages,_get_avphys_pages,_lgamma,_lgamma_r,_lgammaf,_lgammaf_r,___lgammal_r,_lgammal,_lgammal_r,_emscripten_has_threading_support,_emscripten_num_logical_cores,_emscripten_futex_wait,_emscripten_main_thread_process_queued_calls,_emscripten_current_thread_process_queued_calls,_pthread_mutex_consistent,_pthread_barrier_init,_pthread_barrier_destroy,_pthread_barrier_wait,_pthread_cond_broadcast,_pthread_atfork,_pthread_cancel,_pthread_testcancel,___pthread_detach,_pthread_equal,_pthread_mutexattr_init,_pthread_mutexattr_setprotocol,_pthread_mutexattr_settype,_pthread_mutexattr_destroy,_pthread_mutexattr_setpshared,_pthread_condattr_setpshared,_pthread_setcanceltype,_pthread_rwlock_init,_pthread_rwlock_destroy,_pthread_rwlock_rdlock,_pthread_rwlock_tryrdlock,_pthread_rwlock_timedrdlock,_pthread_rwlock_wrlock,_pthread_rwlock_trywrlock,_pthread_rwlock_timedwrlock,_pthread_rwlock_unlock,_pthread_rwlockattr_init,_pthread_rwlockattr_destroy,_pthread_rwlockattr_setpshared,_pthread_spin_init,_pthread_spin_destroy,_pthread_spin_lock,_pthread_spin_trylock,_pthread_spin_unlock,_sem_init,_sem_post,_sem_wait,_sem_trywait,_sem_destroy,_pthread_mutex_timedlock,_emscripten_builtin_pthread_create,_emscripten_builtin_pthread_join,_pthread_once,_emscripten_builtin_pthread_exit,_pthread_exit,_emscripten_builtin_pthread_detach,_thrd_detach,_link,_linkat,_llabs,_lldiv,_llrint,_rint,_llrintf,_rintf,_llrintl,_rintl,_llround,_llroundf,_roundf,_llroundl,_roundl,_log10f,_log10l,_log2f,_log2l,_logb,_logbf,_logbl,_strtoull,_nrand48,_lrand48,_lrint,_lrintf,_lrintl,_lround,_lroundf,_lroundl,_lsearch,_lfind,_mbrlen,_mbrtoc16,_mbrtoc32,_mbsinit,_mbsnrtowcs,_mbsrtowcs,_memccpy,_memmem,_mempcpy,_mincore,_mkdtemp,_mkfifo,_mkfifoat,_mkostemp,_mkostemps,_mkstemp,_mkstemps,_mktemp,_timegm,_mlock,_mlockall,_emscripten_builtin_mmap,_setmntent,_endmntent,_getmntent_r,_sscanf,_getmntent,_addmntent,_hasmntopt,_mprotect,_jrand48,_mrand48,_mtx_destroy,_mtx_init,_mtx_lock,_mtx_timedlock,_mtx_trylock,_mtx_unlock,_munlock,_munlockall,_emscripten_builtin_munmap,_nan,_nanf,_nanl,_nanosleep,_nearbyint,_nearbyintf,_nearbyintl,_getnetbyaddr,_getnetbyname,___newlocale,_newlocale,_nextafterf,_nexttoward,_nexttowardf,_nexttowardl,_nftw,_nice,_setpriority,_ns_get16,_ns_get32,_ns_put16,_ns_put32,_ns_skiprr,_ns_initparse,_ns_name_uncompress,_ns_parserr,_open_memstream,_open_wmemstream,_posix_close,_posix_madvise,_posix_spawn_file_actions_addchdir_np,_posix_spawn_file_actions_addclose,_posix_spawn_file_actions_adddup2,_posix_spawn_file_actions_addfchdir_np,_posix_spawn_file_actions_addopen,_posix_spawn_file_actions_destroy,_posix_spawn_file_actions_init,_posix_spawnattr_destroy,_posix_spawnattr_getflags,_posix_spawnattr_getpgroup,_posix_spawnattr_getsigdefault,_posix_spawnattr_getsigmask,_posix_spawnattr_init,_posix_spawnattr_getschedparam,_posix_spawnattr_setschedparam,_posix_spawnattr_getschedpolicy,_posix_spawnattr_setschedpolicy,_posix_spawnattr_setflags,_posix_spawnattr_setpgroup,_posix_spawnattr_setsigdefault,_posix_spawnattr_setsigmask,_powf,_ppoll,_preadv,_printf,___small_printf,_em_proxying_queue_create,_em_proxying_queue_destroy,_emscripten_proxy_get_system_queue,_emscripten_proxy_execute_queue,_emscripten_proxy_finish,_emscripten_proxy_async,_emscripten_proxy_sync,_emscripten_proxy_sync_with_ctx,_pselect,_pthread_attr_getdetachstate,_pthread_attr_getguardsize,_pthread_attr_getinheritsched,_pthread_attr_getschedparam,_pthread_attr_getschedpolicy,_pthread_attr_getscope,_pthread_attr_getstack,_pthread_attr_getstacksize,_pthread_barrierattr_getpshared,_pthread_condattr_getclock,_pthread_condattr_getpshared,_pthread_mutexattr_getprotocol,_pthread_mutexattr_getpshared,_pthread_mutexattr_getrobust,_pthread_mutexattr_gettype,_pthread_rwlockattr_getpshared,_pthread_attr_setdetachstate,_pthread_attr_setguardsize,_pthread_attr_setinheritsched,_pthread_attr_setschedparam,_pthread_attr_setschedpolicy,_pthread_attr_setscope,_pthread_attr_setstack,__pthread_cleanup_pop,_pthread_getattr_np,_pthread_getconcurrency,_pthread_getschedparam,_thrd_current,_emscripten_main_runtime_thread_id,_pthread_setconcurrency,_pthread_setschedprio,___sig_is_blocked,_sigorset,_sigandset,_sigdelset,_ptsname,__IO_putc,_putc_unlocked,_fputc_unlocked,__IO_putc_unlocked,_putchar_unlocked,_putenv,_putw,_putwc,_putwchar,_putwchar_unlocked,_pwritev,_qsort_r,_quick_exit,_action_abort,_action_terminate,_srand,_rand,_rand_r,_srandom,_initstate,_setstate,_random,_readdir_r,_reallocarray,_recvmmsg,_regcomp,_regfree,_regerror,_regexec,_remainder,_remquo,_drem,_remainderf,_remquof,_dremf,_remainderl,_remquol,_remove,_res_init,_res_mkquery,___res_msend,_res_send,___res_state,_rindex,_scalb,_scalbf,_scalbln,_scalblnf,_scalblnl,_scandir,_scanf,_vscanf,___isoc99_scanf,_secure_getenv,_seed48,_seekdir,_sendmmsg,_endservent,_setservent,_getservent,_setbuf,_setbuffer,_setdomainname,_setegid,_seteuid,__emscripten_timeout,_setlinebuf,_setresgid,_setresuid,_shm_open,_shm_unlink,_sigaction,_sigisemptyset,_bsd_signal,___sysv_signal,_significand,_significandf,_sigprocmask,_sincos,_sincosf,_sincosl,_sinhl,_sinl,_sockatmark,_vsprintf,_vsiprintf,___small_sprintf,___small_vsprintf,_srand48,_vsscanf,___isoc99_sscanf,_statfs,_fstatfs,_statx,_stpcpy,_stpncpy,___strcasecmp_l,_strcasecmp_l,_strcasestr,_strncasecmp,_strchrnul,___strcoll_l,_strcoll_l,___strerror_l,_strerror_l,_strerror_r,___xpg_strerror_r,_strfmon_l,_strfmon,_strftime_l,_strlcat,_strlcpy,_strlwr,___strncasecmp_l,_strncasecmp_l,_strndup,_strsep,_strtof,_strtold,_strtof_l,_strtod_l,_strtold_l,___strtof_l,___strtod_l,___strtold_l,_strtok,_strtok_r,_strtoll,_strtoimax,_strtoumax,___strtol_internal,___strtoul_internal,___strtoll_internal,___strtoull_internal,___strtoimax_internal,___strtoumax_internal,_strtoull_l,_strtoll_l,_strtoul_l,_strtol_l,_strupr,_strverscmp,___strxfrm_l,_strxfrm,_strxfrm_l,_swab,_swprintf,_vswprintf,_swscanf,_vswscanf,___isoc99_swscanf,_symlinkat,_setlogmask,_closelog,_openlog,_syslog,_vsyslog,_tanhf,_tanhl,_tanl,_tcgetsid,_tcgetwinsize,_tcsetwinsize,_tdelete,_tdestroy,_telldir,_tempnam,_ngettext,_tfind,_tgamma,_tgammaf,_tgammal,_thrd_create,_thrd_exit,_thrd_join,_thrd_sleep,_thrd_yield,_emscripten_set_thread_name,_timespec_get,_tmpfile,_tmpnam,_toascii,___tolower_l,_tolower_l,___toupper_l,_toupper_l,___towupper_l,___towlower_l,_towupper_l,_towlower_l,_truncf,_truncl,_tsearch,_tss_create,_tss_delete,_tss_set,_ttyname,_twalk,_ualarm,_ungetwc,___uselocale,_uselocale,_utime,_versionsort,___vfprintf_internal,___isoc99_vfscanf,_wcsnlen,___isoc99_vfwscanf,_vprintf,___isoc99_vscanf,_vsniprintf,___small_vsnprintf,___isoc99_vsscanf,___isoc99_vswscanf,_vwprintf,_vwscanf,___isoc99_vwscanf,_wcpcpy,_wcpncpy,_wcscasecmp,_wcsncasecmp,_wcscasecmp_l,_wcscat,___wcscoll_l,_wcscoll_l,_wcscspn,_wcsdup,_wmemcpy,___wcsftime_l,_wcstoul,_wcsftime_l,_wcsncasecmp_l,_wcsncat,_wmemset,_wcsnrtombs,_wcspbrk,_wcsspn,_wcsstr,_wcstof,_wcstod,_wcstold,_wcstoull,_wcstoll,_wcstoimax,_wcstoumax,_wcswcs,_wcswidth,_wcwidth,___wcsxfrm_l,_wcsxfrm_l,_wctob,_wctrans,_towctrans,___wctrans_l,___towctrans_l,_wctrans_l,_towctrans_l,_wmemmove,_wprintf,_wscanf,___isoc99_wscanf,___libc_realloc,_realloc_in_place,_memalign,_valloc,_pvalloc,_mallinfo,_mallopt,_malloc_trim,_malloc_usable_size,_malloc_footprint,_malloc_max_footprint,_malloc_footprint_limit,_malloc_set_footprint_limit,_independent_calloc,_independent_comalloc,_bulk_free,_emscripten_builtin_realloc,_emscripten_builtin_calloc,_emscripten_get_sbrk_ptr,__sbrk64,_brk,___trap,___absvdi2,___absvsi2,___absvti2,___adddf3,___fe_getround,___fe_raise_inexact,___addsf3,___ashlti3,___lshrti3,___addvdi3,___addvsi3,___addvti3,___ashldi3,___ashrdi3,___ashrti3,___atomic_is_lock_free,___atomic_load,___atomic_store,___atomic_compare_exchange,___atomic_exchange,___atomic_load_1,___atomic_load_2,___atomic_load_4,___atomic_load_8,___atomic_load_16,___atomic_store_1,___atomic_store_2,___atomic_store_4,___atomic_store_8,___atomic_store_16,___atomic_exchange_1,___atomic_exchange_2,___atomic_exchange_4,___atomic_exchange_8,___atomic_exchange_16,___atomic_compare_exchange_1,___atomic_compare_exchange_2,___atomic_compare_exchange_4,___atomic_compare_exchange_8,___atomic_compare_exchange_16,___atomic_fetch_add_1,___atomic_fetch_add_2,___atomic_fetch_add_4,___atomic_fetch_add_8,___atomic_fetch_add_16,___atomic_fetch_sub_1,___atomic_fetch_sub_2,___atomic_fetch_sub_4,___atomic_fetch_sub_8,___atomic_fetch_sub_16,___atomic_fetch_and_1,___atomic_fetch_and_2,___atomic_fetch_and_4,___atomic_fetch_and_8,___atomic_fetch_and_16,___atomic_fetch_or_1,___atomic_fetch_or_2,___atomic_fetch_or_4,___atomic_fetch_or_8,___atomic_fetch_or_16,___atomic_fetch_xor_1,___atomic_fetch_xor_2,___atomic_fetch_xor_4,___atomic_fetch_xor_8,___atomic_fetch_xor_16,___atomic_fetch_nand_1,___atomic_fetch_nand_2,___atomic_fetch_nand_4,___atomic_fetch_nand_8,___atomic_fetch_nand_16,_atomic_flag_clear,_atomic_flag_clear_explicit,_atomic_flag_test_and_set,_atomic_flag_test_and_set_explicit,_atomic_signal_fence,_atomic_thread_fence,___bswapdi2,___bswapsi2,___clear_cache,___clzdi2,___clzsi2,___clzti2,___cmpdi2,___cmpti2,___ledf2,___gedf2,___unorddf2,___eqdf2,___ltdf2,___nedf2,___gtdf2,___lesf2,___gesf2,___unordsf2,___eqsf2,___ltsf2,___nesf2,___gtsf2,___ctzdi2,___ctzsi2,___ctzti2,___divdc3,___divdf3,___divdi3,___udivmoddi4,___divmoddi4,___divmodsi4,___udivmodsi4,___divmodti4,___udivmodti4,___divsc3,___divsf3,___divsi3,___divtc3,___divti3,_setThrew,___wasm_setjmp,___wasm_setjmp_test,___wasm_longjmp,__emscripten_tempret_set,__emscripten_tempret_get,___get_temp_ret,___set_temp_ret,_getTempRet0,_setTempRet0,___emutls_get_address,___enable_execute_stack,___extendhfdf2,___extendhfsf2,___gnu_h2f_ieee,___extendsfdf2,___ffsdi2,___ffssi2,___ffsti2,___fixdfdi,___fixunsdfdi,___fixdfsi,___fixdfti,___fixsfdi,___fixunssfdi,___fixsfsi,___fixsfti,___fixtfti,___fixunsdfsi,___fixunsdfti,___fixunssfsi,___fixunssfti,___fixunstfdi,___fixunstfsi,___fixunstfti,___floatdidf,___floatdisf,___floatsidf,___floatsisf,___floattidf,___floattisf,___floattitf,___floatundidf,___floatundisf,___floatunditf,___floatunsidf,___floatunsisf,___floatuntidf,___floatuntisf,___floatuntitf,___lshrdi3,___moddi3,___modsi3,___modti3,___muldf3,___muldi3,___mulodi4,___mulosi4,___muloti4,___udivti3,___mulsf3,___mulvdi3,___mulvsi3,___mulvti3,___negdf2,___negdi2,___negsf2,___negti2,___negvdi2,___negvsi2,___negvti2,___paritydi2,___paritysi2,___parityti2,___popcountdi2,___popcountsi2,___popcountti2,___powidf2,___powisf2,___powitf2,_emscripten_stack_init,_emscripten_stack_set_limits,_emscripten_stack_get_free,__emscripten_stack_restore,__emscripten_stack_alloc,___subdf3,___subsf3,___subvdi3,___subvsi3,___subvti3,___truncdfhf2,___truncdfsf2,___truncsfhf2,___gnu_f2h_ieee,___ucmpdi2,___ucmpti2,___udivdi3,___udivsi3,___umoddi3,___umodsi3,___umodti3,___cxa_begin_catch,___cxa_rethrow,___cxa_end_catch,___cxa_allocate_exception,___cxa_free_exception,___cxa_throw,___cxa_pure_virtual,___cxa_uncaught_exceptions,___cxa_decrement_exception_refcount,___cxa_increment_exception_refcount,___cxa_current_primary_exception,___cxa_rethrow_primary_exception,___cxa_init_primary_exception,___dynamic_cast,___cxa_bad_cast,___cxa_bad_typeid,___cxa_throw_bad_array_new_length,___cxa_get_globals_fast,___cxa_demangle,___cxa_allocate_dependent_exception,___cxa_free_dependent_exception,___cxa_get_globals,__Unwind_RaiseException,___cxa_get_exception_ptr,__Unwind_DeleteException,___cxa_call_terminate,___cxa_current_exception_type,___cxa_uncaught_exception,___thrown_object_from_unwind_exception,___get_exception_message,___get_exception_terminate_message,___cxa_guard_acquire,___cxa_guard_release,___cxa_guard_abort,___gxx_personality_wasm0,__Unwind_GetLanguageSpecificData,__Unwind_GetIP,__Unwind_GetRegionStart,__Unwind_SetGR,__Unwind_SetIP,___cxa_call_unexpected,___cxa_thread_atexit,___cxa_deleted_virtual,__Unwind_CallPersonality,_gethostbyaddr_r,_gethostbyname2,_gethostbyname2_r,_gethostbyname_r,_socketpair,memory,___stack_pointer,_py_docstring_mod,_PyExc_AttributeError,_stdout,_Jsr_error,_PyExc_ModuleNotFoundError,__Py_NoneStruct,_internal_error,_conversion_error,__indirect_function_table,_PyExc_ImportError,_pyodide_export_,_pystate_keepalive_,_pystate_keepalive,_compat_null_to_none,_py_jsnull,__Py_TrueStruct,__Py_FalseStruct,_py_JsBigInt,_Jsr_undefined,_jsbind,_PyExc_TypeError,_PyExc_StopIteration,_PyTraceBack_Type,_PyExc_GeneratorExit,_PyExc_StopAsyncIteration,_PyExc_RuntimeError,_PyExc_IndexError,_PyExc_Exception,_PyExc_BaseException,_methods,_PyExc_SystemError,_PyExc_KeyError,_PySlice_Type,_PyLong_Type,_PyBool_Type,_PyExc_ValueError,_PyExc_NotImplementedError,_PyBaseObject_Type,_PyExc_OverflowError,_PyList_Type,_PyTuple_Type,_PyExc_RuntimeWarning,__Py_NotImplementedStruct,_default_signature,_no_default,_PyCoro_Type,_PyGen_Type,_PyDict_Type,_compat_to_string_repr,_PyMethod_Type,_PyFunction_Type,_py_buffer_len_offset,_py_buffer_shape_offset,_Jsr_true,_Jsr_false,_Jsr_novalue,_PySet_Type,_PyFloat_Type,_compat_dict_to_literalmap,_stderr,__PyParser_TokenNames,_PyExc_SyntaxError,__PyExc_IncompleteInputError,_PyExc_LookupError,_PyExc_UnicodeDecodeError,__PyRuntime,_PyExc_IndentationError,_PyExc_KeyboardInterrupt,_PyExc_TabError,_PyExc_UnicodeError,_stdin,_PyExc_MemoryError,_PyComplex_Type,_PyUnicode_Type,_PyBytes_Type,__Py_EllipsisObject,__Py_ctype_table,_PyExc_DeprecationWarning,_PyExc_SyntaxWarning,__Py_ctype_tolower,_PyExc_OSError,__PyOS_ReadlineTState,_PyOS_InputHook,_PyOS_ReadlineFunctionPointer,_PyType_Type,_PyExc_BufferError,_PyByteArray_Type,__PyByteArray_empty_string,__PyUnion_Type,__Py_ctype_toupper,_Py_hexdigits,_PyExc_BytesWarning,_PyByteArrayIter_Type,__PyLong_DigitValue,_PyBytesIter_Type,_PyModule_Type,_PyCapsule_Type,_PyCell_Type,_PyInstanceMethod_Type,_PyCode_Type,_PyFrozenSet_Type,_PyExc_ZeroDivisionError,_PyMethodDescr_Type,_PyClassMethodDescr_Type,_PyMemberDescr_Type,_PyGetSetDescr_Type,_PyWrapperDescr_Type,_PyDictProxy_Type,_PyProperty_Type,_PyReversed_Type,_PyEnum_Type,_PyExc_BaseExceptionGroup,_PyExc_UnicodeTranslateError,_PyExc_BlockingIOError,_PyExc_BrokenPipeError,_PyExc_ChildProcessError,_PyExc_ConnectionAbortedError,_PyExc_ConnectionRefusedError,_PyExc_ConnectionResetError,_PyExc_FileExistsError,_PyExc_FileNotFoundError,_PyExc_IsADirectoryError,_PyExc_NotADirectoryError,_PyExc_InterruptedError,_PyExc_PermissionError,_PyExc_ProcessLookupError,_PyExc_TimeoutError,_PyExc_EnvironmentError,_PyExc_IOError,_PyExc_SystemExit,_PyExc_ConnectionError,_PyExc_EOFError,_PyExc_RecursionError,_PyExc_PythonFinalizationError,_PyExc_NameError,_PyExc_UnboundLocalError,_PyExc_UnicodeEncodeError,_PyExc_AssertionError,_PyExc_ArithmeticError,_PyExc_FloatingPointError,_PyExc_ReferenceError,_PyExc_Warning,_PyExc_UserWarning,_PyExc_PendingDeprecationWarning,_PyExc_FutureWarning,_PyExc_ImportWarning,_PyExc_UnicodeWarning,_PyExc_EncodingWarning,_PyExc_ResourceWarning,_Py_GenericAliasType,_PyAsyncGen_Type,__PyAsyncGenASend_Type,_PyStdPrinter_Type,__Py_SwappedOp,_PyFrameLocalsProxy_Type,_PyFrame_Type,_PyClassMethod_Type,_PyStaticMethod_Type,_PySeqIter_Type,_PyCallIter_Type,_PyDictKeys_Type,_PyDictValues_Type,_PyDictItems_Type,_PyListIter_Type,_PyListRevIter_Type,_PyDictIterKey_Type,_PyDictRevIterKey_Type,_PyDictRevIterValue_Type,_PyDictIterItem_Type,_PyDictIterValue_Type,_PyDictRevIterItem_Type,_PyODict_Type,_PyODictIter_Type,_PyODictKeys_Type,_PyODictValues_Type,_PyODictItems_Type,_PyMemoryView_Type,_PyCMethod_Type,_PyCFunction_Type,_PyModuleDef_Type,__PyNone_Type,__PyNotImplemented_Type,_PyContextToken_Type,_PyContextVar_Type,_PyContext_Type,_PyEllipsis_Type,_PyFilter_Type,_PyLongRangeIter_Type,_PyMap_Type,_PyPickleBuffer_Type,_PyRangeIter_Type,_PyRange_Type,_PySetIter_Type,_PySuper_Type,_PyTupleIter_Type,_PyUnicodeIter_Type,_PyZip_Type,__PyWeakref_CallableProxyType,__PyWeakref_ProxyType,__PyWeakref_RefType,__PySet_Dummy,_PyStructSequence_UnnamedField,__Py_ascii_whitespace,__Py_InitCleanup,__PyEval_BinaryOps,__PyIntrinsics_UnaryFunctions,__PyIntrinsics_BinaryFunctions,__PyEval_ConversionFuncs,__Py_SpecialMethods,__Py_emscripten_signal_clock,_Py_EMSCRIPTEN_SIGNAL_HANDLING,__Py_FunctionAttributeOffsets,_PyExc_InterpreterError,_PyExc_InterpreterNotFoundError,_PyUnstable_ExecutableKinds,_Py_Version,_PyImport_Inittab,__PyImport_FrozenBootstrap,_PyImport_FrozenModules,__PyImport_FrozenStdlib,__PyImport_FrozenTest,_Py_IgnoreEnvironmentFlag,_Py_IsolatedFlag,_Py_BytesWarningFlag,_Py_InspectFlag,_Py_InteractiveFlag,_Py_OptimizeFlag,_Py_DebugFlag,_Py_VerboseFlag,_Py_QuietFlag,_Py_FrozenFlag,_Py_UnbufferedStdioFlag,_Py_NoSiteFlag,_Py_DontWriteBytecodeFlag,_Py_NoUserSiteDirectory,_Py_HashRandomizationFlag,_Py_FileSystemDefaultEncoding,_Py_HasFileSystemDefaultEncoding,_Py_FileSystemDefaultEncodeErrors,_Py_UTF8Mode,__Py_HashSecret,_PY_TIMEOUT_MAX,__Py_emscripten_signal_in_memory,__PyEM_EMSCRIPTEN_TRAMPOLINE_OFFSET,_ffi_type_pointer,_ffi_type_void,_ffi_type_sint32,_ffi_type_uint64,_ffi_type_sint64,_ffi_type_uint32,_ffi_type_uint16,_ffi_type_sint16,_ffi_type_uint8,_ffi_type_sint8,_ffi_type_double,_ffi_type_longdouble,_ffi_type_float,_environ,_sqlite3_version,_sqlite3_data_directory,_sqlite3_temp_directory,_sqlite3one,_g_debuglevel,_g_ZSTD_threading_useless_symbol,__deduplicate_map,_BZ2_crc32Table,_BZ2_rNums,_z_errmsg,__length_code,__dist_code,_deflate_copyright,_inflate_copyright,___environ,____environ,__environ,___stack_chk_guard,___tzname,_daylight,_timezone,___timezone,___daylight,_tzname,___progname,___optreset,_optind,___optpos,_optarg,_optopt,_opterr,_optreset,_h_errno,___signgam,__ns_flagdata,___progname_full,_program_invocation_short_name,_program_invocation_name,___stack_low,___stack_high,___sig_pending,___sig_actions,_signgam,___heap_base,___c_longjmp,___THREW__,___threwValue,___cpp_exception,___cxa_unexpected_handler,___cxa_terminate_handler,___cxa_new_handler,___wasm_lpad_context,_in6addr_any,_in6addr_loopback,wasmTable,wasmMemory;function assignWasmExports(wasmExports){_set_method_docstring=Module["_set_method_docstring"]=wasmExports["set_method_docstring"];_PyObject_GetAttrString=Module["_PyObject_GetAttrString"]=wasmExports["PyObject_GetAttrString"];__PyUnicode_FromId=Module["__PyUnicode_FromId"]=wasmExports["_PyUnicode_FromId"];_PyObject_VectorcallMethod=Module["_PyObject_VectorcallMethod"]=wasmExports["PyObject_VectorcallMethod"];_PyUnicode_AsUTF8AndSize=Module["_PyUnicode_AsUTF8AndSize"]=wasmExports["PyUnicode_AsUTF8AndSize"];_malloc=Module["_malloc"]=wasmExports["malloc"];__Py_Dealloc=Module["__Py_Dealloc"]=wasmExports["_Py_Dealloc"];_PyErr_Format=Module["_PyErr_Format"]=wasmExports["PyErr_Format"];_add_methods_and_set_docstrings=Module["_add_methods_and_set_docstrings"]=wasmExports["add_methods_and_set_docstrings"];_PyModule_AddFunctions=Module["_PyModule_AddFunctions"]=wasmExports["PyModule_AddFunctions"];_docstring_init=Module["_docstring_init"]=wasmExports["docstring_init"];_PyImport_ImportModule=Module["_PyImport_ImportModule"]=wasmExports["PyImport_ImportModule"];_dump_traceback=Module["_dump_traceback"]=wasmExports["dump_traceback"];_fileno=Module["_fileno"]=wasmExports["fileno"];_PyGILState_GetThisThreadState=Module["_PyGILState_GetThisThreadState"]=wasmExports["PyGILState_GetThisThreadState"];_set_error=Module["_set_error"]=wasmExports["set_error"];_PyErr_SetObject=Module["_PyErr_SetObject"]=wasmExports["PyErr_SetObject"];_restore_sys_last_exception=Module["_restore_sys_last_exception"]=wasmExports["restore_sys_last_exception"];_PySys_GetObject=Module["_PySys_GetObject"]=wasmExports["PySys_GetObject"];_PyErr_SetRaisedException=Module["_PyErr_SetRaisedException"]=wasmExports["PyErr_SetRaisedException"];_wrap_exception=Module["_wrap_exception"]=wasmExports["wrap_exception"];_PyErr_GetRaisedException=Module["_PyErr_GetRaisedException"]=wasmExports["PyErr_GetRaisedException"];_hiwire_get=Module["_hiwire_get"]=wasmExports["hiwire_get"];_PyErr_GivenExceptionMatches=Module["_PyErr_GivenExceptionMatches"]=wasmExports["PyErr_GivenExceptionMatches"];_PyErr_Print=Module["_PyErr_Print"]=wasmExports["PyErr_Print"];__PyObject_GetAttrId=Module["__PyObject_GetAttrId"]=wasmExports["_PyObject_GetAttrId"];_PyUnicode_AsUTF8=Module["_PyUnicode_AsUTF8"]=wasmExports["PyUnicode_AsUTF8"];_PySys_WriteStderr=Module["_PySys_WriteStderr"]=wasmExports["PySys_WriteStderr"];_PyErr_DisplayException=Module["_PyErr_DisplayException"]=wasmExports["PyErr_DisplayException"];_JsvString_FromId=Module["_JsvString_FromId"]=wasmExports["JsvString_FromId"];_pythonexc2js=Module["_pythonexc2js"]=wasmExports["pythonexc2js"];_trigger_fatal_error=Module["_trigger_fatal_error"]=wasmExports["trigger_fatal_error"];_raw_call=Module["_raw_call"]=wasmExports["raw_call"];_JsProxy_Val=Module["_JsProxy_Val"]=wasmExports["JsProxy_Val"];_error_handling_init=Module["_error_handling_init"]=wasmExports["error_handling_init"];_hiwire_invalid_ref=Module["_hiwire_invalid_ref"]=wasmExports["hiwire_invalid_ref"];_init_pyodide_proxy=Module["_init_pyodide_proxy"]=wasmExports["init_pyodide_proxy"];_python2js=Module["_python2js"]=wasmExports["python2js"];_PyInit__pyodide_core=Module["_PyInit__pyodide_core"]=wasmExports["PyInit__pyodide_core"];_PyErr_Occurred=Module["_PyErr_Occurred"]=wasmExports["PyErr_Occurred"];__PyErr_FormatFromCause=Module["__PyErr_FormatFromCause"]=wasmExports["_PyErr_FormatFromCause"];_PyModule_Create2=Module["_PyModule_Create2"]=wasmExports["PyModule_Create2"];_PyImport_GetModuleDict=Module["_PyImport_GetModuleDict"]=wasmExports["PyImport_GetModuleDict"];_PyDict_SetItemString=Module["_PyDict_SetItemString"]=wasmExports["PyDict_SetItemString"];_jslib_init=Module["_jslib_init"]=wasmExports["jslib_init"];_python2js_init=Module["_python2js_init"]=wasmExports["python2js_init"];_jsproxy_init=Module["_jsproxy_init"]=wasmExports["jsproxy_init"];_jsproxy_call_init=Module["_jsproxy_call_init"]=wasmExports["jsproxy_call_init"];_pyproxy_init=Module["_pyproxy_init"]=wasmExports["pyproxy_init"];_jsbind_init=Module["_jsbind_init"]=wasmExports["jsbind_init"];_pyodide_export=Module["_pyodide_export"]=wasmExports["pyodide_export"];_PyUnicode_Data=Module["_PyUnicode_Data"]=wasmExports["PyUnicode_Data"];__js2python_none=Module["__js2python_none"]=wasmExports["_js2python_none"];__js2python_null=Module["__js2python_null"]=wasmExports["_js2python_null"];__js2python_true=Module["__js2python_true"]=wasmExports["_js2python_true"];__js2python_false=Module["__js2python_false"]=wasmExports["_js2python_false"];__js2python_pyproxy=Module["__js2python_pyproxy"]=wasmExports["_js2python_pyproxy"];__js2python_bigint=Module["__js2python_bigint"]=wasmExports["_js2python_bigint"];_PyObject_CallOneArg=Module["_PyObject_CallOneArg"]=wasmExports["PyObject_CallOneArg"];_js2python_immutable=Module["_js2python_immutable"]=wasmExports["js2python_immutable"];_js2python=Module["_js2python"]=wasmExports["js2python"];_JsProxy_getflags=Module["_JsProxy_getflags"]=wasmExports["JsProxy_getflags"];_PyLong_AsLong=Module["_PyLong_AsLong"]=wasmExports["PyLong_AsLong"];_JsProxy_is_py_json=Module["_JsProxy_is_py_json"]=wasmExports["JsProxy_is_py_json"];_js2python_as_py_json=Module["_js2python_as_py_json"]=wasmExports["js2python_as_py_json"];_JsProxy_create_with_type=Module["_JsProxy_create_with_type"]=wasmExports["JsProxy_create_with_type"];_JsProxy_bind_sig=Module["_JsProxy_bind_sig"]=wasmExports["JsProxy_bind_sig"];_JsRef_toVal=Module["_JsRef_toVal"]=wasmExports["JsRef_toVal"];_PyErr_SetString=Module["_PyErr_SetString"]=wasmExports["PyErr_SetString"];_JsProxy_create_with_this=Module["_JsProxy_create_with_this"]=wasmExports["JsProxy_create_with_this"];_JsProxy_bind_class=Module["_JsProxy_bind_class"]=wasmExports["JsProxy_bind_class"];_clear_method_call_singleton=Module["_clear_method_call_singleton"]=wasmExports["clear_method_call_singleton"];_hiwire_decref=Module["_hiwire_decref"]=wasmExports["hiwire_decref"];_JsProxy_GetMethod=Module["_JsProxy_GetMethod"]=wasmExports["JsProxy_GetMethod"];__PyObject_GenericGetAttrWithDict=Module["__PyObject_GenericGetAttrWithDict"]=wasmExports["_PyObject_GenericGetAttrWithDict"];_strcmp=Module["_strcmp"]=wasmExports["strcmp"];_PyArg_ParseTuple=Module["_PyArg_ParseTuple"]=wasmExports["PyArg_ParseTuple"];_Js2PyConverter_convert=Module["_Js2PyConverter_convert"]=wasmExports["Js2PyConverter_convert"];_hiwire_new=Module["_hiwire_new"]=wasmExports["hiwire_new"];_hiwire_incref=Module["_hiwire_incref"]=wasmExports["hiwire_incref"];_JsProxy_GetAttr=Module["_JsProxy_GetAttr"]=wasmExports["JsProxy_GetAttr"];_handle_next_result=Module["_handle_next_result"]=wasmExports["handle_next_result"];_free=Module["_free"]=wasmExports["free"];_JsProxy_create_objmap=Module["_JsProxy_create_objmap"]=wasmExports["JsProxy_create_objmap"];_JsProxy_am_send=Module["_JsProxy_am_send"]=wasmExports["JsProxy_am_send"];_python2js_track_proxies=Module["_python2js_track_proxies"]=wasmExports["python2js_track_proxies"];_JsvObject_CallMethodId_OneArg=Module["_JsvObject_CallMethodId_OneArg"]=wasmExports["JsvObject_CallMethodId_OneArg"];_JsProxy_IterNext=Module["_JsProxy_IterNext"]=wasmExports["JsProxy_IterNext"];__PyGen_SetStopIterationValue=Module["__PyGen_SetStopIterationValue"]=wasmExports["_PyGen_SetStopIterationValue"];_JsGenerator_send=Module["_JsGenerator_send"]=wasmExports["JsGenerator_send"];_PyErr_SetNone=Module["_PyErr_SetNone"]=wasmExports["PyErr_SetNone"];_JsException_js_error_getter=Module["_JsException_js_error_getter"]=wasmExports["JsException_js_error_getter"];_process_throw_args=Module["_process_throw_args"]=wasmExports["process_throw_args"];_PyErr_NormalizeException=Module["_PyErr_NormalizeException"]=wasmExports["PyErr_NormalizeException"];_PyException_GetTraceback=Module["_PyException_GetTraceback"]=wasmExports["PyException_GetTraceback"];_PyException_SetTraceback=Module["_PyException_SetTraceback"]=wasmExports["PyException_SetTraceback"];_PyErr_Restore=Module["_PyErr_Restore"]=wasmExports["PyErr_Restore"];_PyErr_ExceptionMatches=Module["_PyErr_ExceptionMatches"]=wasmExports["PyErr_ExceptionMatches"];_PyErr_Clear=Module["_PyErr_Clear"]=wasmExports["PyErr_Clear"];_JsvObject_CallMethodId_NoArgs=Module["_JsvObject_CallMethodId_NoArgs"]=wasmExports["JsvObject_CallMethodId_NoArgs"];_PyErr_Fetch=Module["_PyErr_Fetch"]=wasmExports["PyErr_Fetch"];__agen_handle_result_js_c=Module["__agen_handle_result_js_c"]=wasmExports["_agen_handle_result_js_c"];__agen_handle_result=Module["__agen_handle_result"]=wasmExports["_agen_handle_result"];_JsArray_sq_item=Module["_JsArray_sq_item"]=wasmExports["JsArray_sq_item"];_JsArray_sq_ass_item=Module["_JsArray_sq_ass_item"]=wasmExports["JsArray_sq_ass_item"];_JsTypedArray_sq_ass_item=Module["_JsTypedArray_sq_ass_item"]=wasmExports["JsTypedArray_sq_ass_item"];_JsMap_update=Module["_JsMap_update"]=wasmExports["JsMap_update"];_wrap_promise=Module["_wrap_promise"]=wasmExports["wrap_promise"];_PyTuple_GetItem=Module["_PyTuple_GetItem"]=wasmExports["PyTuple_GetItem"];_JsvObject_CallMethodId=Module["_JsvObject_CallMethodId"]=wasmExports["JsvObject_CallMethodId"];_JsModule_GetAll=Module["_JsModule_GetAll"]=wasmExports["JsModule_GetAll"];_PyType_IsSubtype=Module["_PyType_IsSubtype"]=wasmExports["PyType_IsSubtype"];_JsProxy_Check=Module["_JsProxy_Check"]=wasmExports["JsProxy_Check"];_JsBuffer_CopyIntoMemoryView=Module["_JsBuffer_CopyIntoMemoryView"]=wasmExports["JsBuffer_CopyIntoMemoryView"];_PyMem_Malloc=Module["_PyMem_Malloc"]=wasmExports["PyMem_Malloc"];_PyMemoryView_FromObject=Module["_PyMemoryView_FromObject"]=wasmExports["PyMemoryView_FromObject"];_JsBuffer_cinit=Module["_JsBuffer_cinit"]=wasmExports["JsBuffer_cinit"];_hiwire_new_deduplicate=Module["_hiwire_new_deduplicate"]=wasmExports["hiwire_new_deduplicate"];_JsRef_new=Module["_JsRef_new"]=wasmExports["JsRef_new"];_PyTuple_Pack=Module["_PyTuple_Pack"]=wasmExports["PyTuple_Pack"];_PyLong_FromLong=Module["_PyLong_FromLong"]=wasmExports["PyLong_FromLong"];_PyDict_GetItemWithError=Module["_PyDict_GetItemWithError"]=wasmExports["PyDict_GetItemWithError"];_PyObject_SelfIter=Module["_PyObject_SelfIter"]=wasmExports["PyObject_SelfIter"];_PyVectorcall_Call=Module["_PyVectorcall_Call"]=wasmExports["PyVectorcall_Call"];_PyErr_NoMemory=Module["_PyErr_NoMemory"]=wasmExports["PyErr_NoMemory"];_PyType_FromSpecWithBases=Module["_PyType_FromSpecWithBases"]=wasmExports["PyType_FromSpecWithBases"];_PyObject_SetAttr=Module["_PyObject_SetAttr"]=wasmExports["PyObject_SetAttr"];_PyMem_Free=Module["_PyMem_Free"]=wasmExports["PyMem_Free"];_PyDict_SetItem=Module["_PyDict_SetItem"]=wasmExports["PyDict_SetItem"];_JsProxy_create=Module["_JsProxy_create"]=wasmExports["JsProxy_create"];_JsProxy_init_docstrings=Module["_JsProxy_init_docstrings"]=wasmExports["JsProxy_init_docstrings"];_run_sync_not_supported=Module["_run_sync_not_supported"]=wasmExports["run_sync_not_supported"];_run_sync=Module["_run_sync"]=wasmExports["run_sync"];_py_is_awaitable=Module["_py_is_awaitable"]=wasmExports["py_is_awaitable"];_JsvPromise_Syncify=Module["_JsvPromise_Syncify"]=wasmExports["JsvPromise_Syncify"];_can_run_sync=Module["_can_run_sync"]=wasmExports["can_run_sync"];_PyDict_New=Module["_PyDict_New"]=wasmExports["PyDict_New"];_PyObject_SetAttrString=Module["_PyObject_SetAttrString"]=wasmExports["PyObject_SetAttrString"];_PyModule_AddObject=Module["_PyModule_AddObject"]=wasmExports["PyModule_AddObject"];_PyType_Ready=Module["_PyType_Ready"]=wasmExports["PyType_Ready"];_JsMethod_Vectorcall_impl=Module["_JsMethod_Vectorcall_impl"]=wasmExports["JsMethod_Vectorcall_impl"];_JsvObject_CallMethodId_TwoArgs=Module["_JsvObject_CallMethodId_TwoArgs"]=wasmExports["JsvObject_CallMethodId_TwoArgs"];_PyObject_Repr=Module["_PyObject_Repr"]=wasmExports["PyObject_Repr"];_PyIndex_Check=Module["_PyIndex_Check"]=wasmExports["PyIndex_Check"];_PyNumber_AsSsize_t=Module["_PyNumber_AsSsize_t"]=wasmExports["PyNumber_AsSsize_t"];_PySlice_Unpack=Module["_PySlice_Unpack"]=wasmExports["PySlice_Unpack"];_PySlice_AdjustIndices=Module["_PySlice_AdjustIndices"]=wasmExports["PySlice_AdjustIndices"];_PySequence_Fast=Module["_PySequence_Fast"]=wasmExports["PySequence_Fast"];_PyArg_ParseTupleAndKeywords=Module["_PyArg_ParseTupleAndKeywords"]=wasmExports["PyArg_ParseTupleAndKeywords"];_PySet_New=Module["_PySet_New"]=wasmExports["PySet_New"];__PySet_Update=Module["__PySet_Update"]=wasmExports["_PySet_Update"];_PyUnicode_FromString=Module["_PyUnicode_FromString"]=wasmExports["PyUnicode_FromString"];_PySet_Discard=Module["_PySet_Discard"]=wasmExports["PySet_Discard"];_PyList_New=Module["_PyList_New"]=wasmExports["PyList_New"];_PyList_Extend=Module["_PyList_Extend"]=wasmExports["PyList_Extend"];_PyList_Sort=Module["_PyList_Sort"]=wasmExports["PyList_Sort"];__PyArg_ParseStack=Module["__PyArg_ParseStack"]=wasmExports["_PyArg_ParseStack"];__PyArg_CheckPositional=Module["__PyArg_CheckPositional"]=wasmExports["_PyArg_CheckPositional"];_PyObject_GetIter=Module["_PyObject_GetIter"]=wasmExports["PyObject_GetIter"];_PyObject_RichCompareBool=Module["_PyObject_RichCompareBool"]=wasmExports["PyObject_RichCompareBool"];_PyErr_WarnEx=Module["_PyErr_WarnEx"]=wasmExports["PyErr_WarnEx"];__PyArg_ParseStackAndKeywords=Module["__PyArg_ParseStackAndKeywords"]=wasmExports["_PyArg_ParseStackAndKeywords"];_hiwire_pop=Module["_hiwire_pop"]=wasmExports["hiwire_pop"];_puts=Module["_puts"]=wasmExports["puts"];_PyObject_GenericSetAttr=Module["_PyObject_GenericSetAttr"]=wasmExports["PyObject_GenericSetAttr"];_Py_HashBuffer=Module["_Py_HashBuffer"]=wasmExports["Py_HashBuffer"];_JsMethod_Construct_impl=Module["_JsMethod_Construct_impl"]=wasmExports["JsMethod_Construct_impl"];_PyNumber_Index=Module["_PyNumber_Index"]=wasmExports["PyNumber_Index"];_PyLong_AsSsize_t=Module["_PyLong_AsSsize_t"]=wasmExports["PyLong_AsSsize_t"];_PyLong_FromSsize_t=Module["_PyLong_FromSsize_t"]=wasmExports["PyLong_FromSsize_t"];_PyObject_GetItem=Module["_PyObject_GetItem"]=wasmExports["PyObject_GetItem"];_PyObject_DelItem=Module["_PyObject_DelItem"]=wasmExports["PyObject_DelItem"];_PyObject_SetItem=Module["_PyObject_SetItem"]=wasmExports["PyObject_SetItem"];_PyObject_GetBuffer=Module["_PyObject_GetBuffer"]=wasmExports["PyObject_GetBuffer"];_PyBuffer_Release=Module["_PyBuffer_Release"]=wasmExports["PyBuffer_Release"];_PyBytes_FromStringAndSize=Module["_PyBytes_FromStringAndSize"]=wasmExports["PyBytes_FromStringAndSize"];_PyObject_Vectorcall=Module["_PyObject_Vectorcall"]=wasmExports["PyObject_Vectorcall"];_Py_EnterRecursiveCall=Module["_Py_EnterRecursiveCall"]=wasmExports["Py_EnterRecursiveCall"];_Py_LeaveRecursiveCall=Module["_Py_LeaveRecursiveCall"]=wasmExports["Py_LeaveRecursiveCall"];_Py2JsConverter_convert=Module["_Py2JsConverter_convert"]=wasmExports["Py2JsConverter_convert"];_PyUnicode_Equal=Module["_PyUnicode_Equal"]=wasmExports["PyUnicode_Equal"];_PyObject_GC_UnTrack=Module["_PyObject_GC_UnTrack"]=wasmExports["PyObject_GC_UnTrack"];_PyUnicode_FromFormat=Module["_PyUnicode_FromFormat"]=wasmExports["PyUnicode_FromFormat"];_PyType_GenericNew=Module["_PyType_GenericNew"]=wasmExports["PyType_GenericNew"];_PyObject_IsInstance=Module["_PyObject_IsInstance"]=wasmExports["PyObject_IsInstance"];_python2js_inner=Module["_python2js_inner"]=wasmExports["python2js_inner"];_python2js_custom=Module["_python2js_custom"]=wasmExports["python2js_custom"];_check_gil=Module["_check_gil"]=wasmExports["check_gil"];_PyGILState_Check=Module["_PyGILState_Check"]=wasmExports["PyGILState_Check"];_PyGen_GetCode=Module["_PyGen_GetCode"]=wasmExports["PyGen_GetCode"];_pyproxy_getflags=Module["_pyproxy_getflags"]=wasmExports["pyproxy_getflags"];_PyObject_HasAttr=Module["_PyObject_HasAttr"]=wasmExports["PyObject_HasAttr"];_PyObject_IsSubclass=Module["_PyObject_IsSubclass"]=wasmExports["PyObject_IsSubclass"];__pyproxy_repr=Module["__pyproxy_repr"]=wasmExports["_pyproxy_repr"];_PyObject_Str=Module["_PyObject_Str"]=wasmExports["PyObject_Str"];__pyproxy_type=Module["__pyproxy_type"]=wasmExports["_pyproxy_type"];__pyproxy_hasattr=Module["__pyproxy_hasattr"]=wasmExports["_pyproxy_hasattr"];_python2js_json_adaptor=Module["_python2js_json_adaptor"]=wasmExports["python2js_json_adaptor"];__pyproxy_getattr=Module["__pyproxy_getattr"]=wasmExports["_pyproxy_getattr"];__PyObject_GetMethod=Module["__PyObject_GetMethod"]=wasmExports["_PyObject_GetMethod"];__pyproxy_setattr=Module["__pyproxy_setattr"]=wasmExports["_pyproxy_setattr"];__pyproxy_delattr=Module["__pyproxy_delattr"]=wasmExports["_pyproxy_delattr"];_PyObject_DelAttr=Module["_PyObject_DelAttr"]=wasmExports["PyObject_DelAttr"];__pyproxy_getitem=Module["__pyproxy_getitem"]=wasmExports["_pyproxy_getitem"];__pyproxy_setitem=Module["__pyproxy_setitem"]=wasmExports["_pyproxy_setitem"];__pyproxy_delitem=Module["__pyproxy_delitem"]=wasmExports["_pyproxy_delitem"];__pyproxy_slice_assign=Module["__pyproxy_slice_assign"]=wasmExports["_pyproxy_slice_assign"];_PySequence_Size=Module["_PySequence_Size"]=wasmExports["PySequence_Size"];_PySequence_GetSlice=Module["_PySequence_GetSlice"]=wasmExports["PySequence_GetSlice"];_PySequence_SetSlice=Module["_PySequence_SetSlice"]=wasmExports["PySequence_SetSlice"];_python2js_with_depth=Module["_python2js_with_depth"]=wasmExports["python2js_with_depth"];__pyproxy_pop=Module["__pyproxy_pop"]=wasmExports["_pyproxy_pop"];__pyproxy_contains=Module["__pyproxy_contains"]=wasmExports["_pyproxy_contains"];_PySequence_Contains=Module["_PySequence_Contains"]=wasmExports["PySequence_Contains"];__pyproxy_ownKeys=Module["__pyproxy_ownKeys"]=wasmExports["_pyproxy_ownKeys"];_PyObject_Dir=Module["_PyObject_Dir"]=wasmExports["PyObject_Dir"];_PyList_Size=Module["_PyList_Size"]=wasmExports["PyList_Size"];_PyList_GetItem=Module["_PyList_GetItem"]=wasmExports["PyList_GetItem"];__pyproxy_apply=Module["__pyproxy_apply"]=wasmExports["_pyproxy_apply"];_PyTuple_New=Module["_PyTuple_New"]=wasmExports["PyTuple_New"];__pyproxy_apply_promising=Module["__pyproxy_apply_promising"]=wasmExports["_pyproxy_apply_promising"];__iscoroutinefunction=Module["__iscoroutinefunction"]=wasmExports["_iscoroutinefunction"];__pyproxy_iter_next=Module["__pyproxy_iter_next"]=wasmExports["_pyproxy_iter_next"];_PyIter_Next=Module["_PyIter_Next"]=wasmExports["PyIter_Next"];__pyproxyGen_Send=Module["__pyproxyGen_Send"]=wasmExports["_pyproxyGen_Send"];_PyIter_Send=Module["_PyIter_Send"]=wasmExports["PyIter_Send"];__pyproxyGen_return=Module["__pyproxyGen_return"]=wasmExports["_pyproxyGen_return"];__PyGen_FetchStopIterationValue=Module["__PyGen_FetchStopIterationValue"]=wasmExports["_PyGen_FetchStopIterationValue"];__pyproxyGen_throw=Module["__pyproxyGen_throw"]=wasmExports["_pyproxyGen_throw"];__pyproxyGen_asend=Module["__pyproxyGen_asend"]=wasmExports["_pyproxyGen_asend"];__pyproxyGen_areturn=Module["__pyproxyGen_areturn"]=wasmExports["_pyproxyGen_areturn"];__pyproxyGen_athrow=Module["__pyproxyGen_athrow"]=wasmExports["_pyproxyGen_athrow"];__pyproxy_aiter_next=Module["__pyproxy_aiter_next"]=wasmExports["_pyproxy_aiter_next"];_FutureDoneCallback_call_resolve=Module["_FutureDoneCallback_call_resolve"]=wasmExports["FutureDoneCallback_call_resolve"];_FutureDoneCallback_call_reject=Module["_FutureDoneCallback_call_reject"]=wasmExports["FutureDoneCallback_call_reject"];_FutureDoneCallback_call=Module["_FutureDoneCallback_call"]=wasmExports["FutureDoneCallback_call"];_PyArg_UnpackTuple=Module["_PyArg_UnpackTuple"]=wasmExports["PyArg_UnpackTuple"];__pyproxy_ensure_future=Module["__pyproxy_ensure_future"]=wasmExports["_pyproxy_ensure_future"];__pyproxy_get_buffer=Module["__pyproxy_get_buffer"]=wasmExports["_pyproxy_get_buffer"];_PyBuffer_FillContiguousStrides=Module["_PyBuffer_FillContiguousStrides"]=wasmExports["PyBuffer_FillContiguousStrides"];_PyBuffer_IsContiguous=Module["_PyBuffer_IsContiguous"]=wasmExports["PyBuffer_IsContiguous"];_create_promise_handles_result_helper=Module["_create_promise_handles_result_helper"]=wasmExports["create_promise_handles_result_helper"];__python2js_buffer=Module["__python2js_buffer"]=wasmExports["_python2js_buffer"];_Jsv_GetError=Module["_Jsv_GetError"]=wasmExports["Jsv_GetError"];_jslib_init_buffers=Module["_jslib_init_buffers"]=wasmExports["jslib_init_buffers"];_JsRef_pop=Module["_JsRef_pop"]=wasmExports["JsRef_pop"];_JsrString_FromId=Module["_JsrString_FromId"]=wasmExports["JsrString_FromId"];_hiwire_intern=Module["_hiwire_intern"]=wasmExports["hiwire_intern"];__python2js=Module["__python2js"]=wasmExports["_python2js"];_PySequence_GetItem=Module["_PySequence_GetItem"]=wasmExports["PySequence_GetItem"];_PyObject_CheckBuffer=Module["_PyObject_CheckBuffer"]=wasmExports["PyObject_CheckBuffer"];_PyLong_AsLongAndOverflow=Module["_PyLong_AsLongAndOverflow"]=wasmExports["PyLong_AsLongAndOverflow"];_python2js__default_converter=Module["_python2js__default_converter"]=wasmExports["python2js__default_converter"];_python2js__eager_converter=Module["_python2js__eager_converter"]=wasmExports["python2js__eager_converter"];__PyLong_NumBits=Module["__PyLong_NumBits"]=wasmExports["_PyLong_NumBits"];__PyLong_AsByteArray=Module["__PyLong_AsByteArray"]=wasmExports["_PyLong_AsByteArray"];_PyFloat_AsDouble=Module["_PyFloat_AsDouble"]=wasmExports["PyFloat_AsDouble"];_restoreThreadState=Module["_restoreThreadState"]=wasmExports["restoreThreadState"];_PyThreadState_Swap=Module["_PyThreadState_Swap"]=wasmExports["PyThreadState_Swap"];_PyThreadState_Delete=Module["_PyThreadState_Delete"]=wasmExports["PyThreadState_Delete"];_captureThreadState=Module["_captureThreadState"]=wasmExports["captureThreadState"];_PyInterpreterState_Get=Module["_PyInterpreterState_Get"]=wasmExports["PyInterpreterState_Get"];_PyThreadState_New=Module["_PyThreadState_New"]=wasmExports["PyThreadState_New"];_syscall_syncify=Module["_syscall_syncify"]=wasmExports["syscall_syncify"];_PyGILState_Ensure=Module["_PyGILState_Ensure"]=wasmExports["PyGILState_Ensure"];_PyGILState_Release=Module["_PyGILState_Release"]=wasmExports["PyGILState_Release"];_print_stdout=Module["_print_stdout"]=wasmExports["print_stdout"];_fiprintf=Module["_fiprintf"]=wasmExports["fiprintf"];_print_stderr=Module["_print_stderr"]=wasmExports["print_stderr"];___wrap___syscall_connect=Module["___wrap___syscall_connect"]=wasmExports["__wrap___syscall_connect"];___wrap___syscall_recvfrom=Module["___wrap___syscall_recvfrom"]=wasmExports["__wrap___syscall_recvfrom"];___wrap___syscall_sendto=Module["___wrap___syscall_sendto"]=wasmExports["__wrap___syscall_sendto"];___wrap___syscall_fcntl64=Module["___wrap___syscall_fcntl64"]=wasmExports["__wrap___syscall_fcntl64"];___wrap___syscall_poll=Module["___wrap___syscall_poll"]=wasmExports["__wrap___syscall_poll"];___wrap___syscall_shutdown=Module["___wrap___syscall_shutdown"]=wasmExports["__wrap___syscall_shutdown"];___syscall_setsockopt=Module["___syscall_setsockopt"]=wasmExports["__syscall_setsockopt"];_main=Module["_main"]=wasmExports["__main_argc_argv"];_PyImport_AppendInittab=Module["_PyImport_AppendInittab"]=wasmExports["PyImport_AppendInittab"];_PyPreConfig_InitPythonConfig=Module["_PyPreConfig_InitPythonConfig"]=wasmExports["PyPreConfig_InitPythonConfig"];_Py_PreInitializeFromBytesArgs=Module["_Py_PreInitializeFromBytesArgs"]=wasmExports["Py_PreInitializeFromBytesArgs"];_PyStatus_Exception=Module["_PyStatus_Exception"]=wasmExports["PyStatus_Exception"];_PyConfig_InitPythonConfig=Module["_PyConfig_InitPythonConfig"]=wasmExports["PyConfig_InitPythonConfig"];_PyConfig_SetBytesArgv=Module["_PyConfig_SetBytesArgv"]=wasmExports["PyConfig_SetBytesArgv"];_PyConfig_SetBytesString=Module["_PyConfig_SetBytesString"]=wasmExports["PyConfig_SetBytesString"];_Py_InitializeFromConfig=Module["_Py_InitializeFromConfig"]=wasmExports["Py_InitializeFromConfig"];_PyConfig_Clear=Module["_PyConfig_Clear"]=wasmExports["PyConfig_Clear"];_Py_ExitStatusException=Module["_Py_ExitStatusException"]=wasmExports["Py_ExitStatusException"];_run_main=Module["_run_main"]=wasmExports["run_main"];_run_main_promising=Module["_run_main_promising"]=wasmExports["run_main_promising"];_Py_GetBuildInfo=Module["_Py_GetBuildInfo"]=wasmExports["Py_GetBuildInfo"];_PyOS_snprintf=Module["_PyOS_snprintf"]=wasmExports["PyOS_snprintf"];__PyToken_OneChar=Module["__PyToken_OneChar"]=wasmExports["_PyToken_OneChar"];__PyToken_TwoChars=Module["__PyToken_TwoChars"]=wasmExports["_PyToken_TwoChars"];__PyToken_ThreeChars=Module["__PyToken_ThreeChars"]=wasmExports["_PyToken_ThreeChars"];_strlen=Module["_strlen"]=wasmExports["strlen"];_PyUnicode_DecodeUTF8=Module["_PyUnicode_DecodeUTF8"]=wasmExports["PyUnicode_DecodeUTF8"];__PyArena_Malloc=Module["__PyArena_Malloc"]=wasmExports["_PyArena_Malloc"];_strncpy=Module["_strncpy"]=wasmExports["strncpy"];_PyMem_Realloc=Module["_PyMem_Realloc"]=wasmExports["PyMem_Realloc"];_PyMem_Calloc=Module["_PyMem_Calloc"]=wasmExports["PyMem_Calloc"];_strncmp=Module["_strncmp"]=wasmExports["strncmp"];__PyArena_AddPyObject=Module["__PyArena_AddPyObject"]=wasmExports["_PyArena_AddPyObject"];_PyBytes_AsString=Module["_PyBytes_AsString"]=wasmExports["PyBytes_AsString"];_PyImport_ImportModuleAttrString=Module["_PyImport_ImportModuleAttrString"]=wasmExports["PyImport_ImportModuleAttrString"];_PyUnicode_InternFromString=Module["_PyUnicode_InternFromString"]=wasmExports["PyUnicode_InternFromString"];__PyType_Name=Module["__PyType_Name"]=wasmExports["_PyType_Name"];__PyUnicode_EqualToASCIIString=Module["__PyUnicode_EqualToASCIIString"]=wasmExports["_PyUnicode_EqualToASCIIString"];__PyUnicode_InternImmortal=Module["__PyUnicode_InternImmortal"]=wasmExports["_PyUnicode_InternImmortal"];_PyBytes_AsStringAndSize=Module["_PyBytes_AsStringAndSize"]=wasmExports["PyBytes_AsStringAndSize"];_strchr=Module["_strchr"]=wasmExports["strchr"];_PyUnicode_Decode=Module["_PyUnicode_Decode"]=wasmExports["PyUnicode_Decode"];_Py_BuildValue=Module["_Py_BuildValue"]=wasmExports["Py_BuildValue"];_PyUnicode_CompareWithASCIIString=Module["_PyUnicode_CompareWithASCIIString"]=wasmExports["PyUnicode_CompareWithASCIIString"];___errno_location=Module["___errno_location"]=wasmExports["__errno_location"];_PyOS_strtoul=Module["_PyOS_strtoul"]=wasmExports["PyOS_strtoul"];_PyLong_FromString=Module["_PyLong_FromString"]=wasmExports["PyLong_FromString"];_PyOS_strtol=Module["_PyOS_strtol"]=wasmExports["PyOS_strtol"];_PyOS_string_to_double=Module["_PyOS_string_to_double"]=wasmExports["PyOS_string_to_double"];_PyComplex_FromCComplex=Module["_PyComplex_FromCComplex"]=wasmExports["PyComplex_FromCComplex"];_PyFloat_FromDouble=Module["_PyFloat_FromDouble"]=wasmExports["PyFloat_FromDouble"];_PyUnicode_FromFormatV=Module["_PyUnicode_FromFormatV"]=wasmExports["PyUnicode_FromFormatV"];__PyErr_ProgramDecodedTextObject=Module["__PyErr_ProgramDecodedTextObject"]=wasmExports["_PyErr_ProgramDecodedTextObject"];_Py_GetConstant=Module["_Py_GetConstant"]=wasmExports["Py_GetConstant"];_PyBytes_Concat=Module["_PyBytes_Concat"]=wasmExports["PyBytes_Concat"];_PyUnicodeWriter_Create=Module["_PyUnicodeWriter_Create"]=wasmExports["PyUnicodeWriter_Create"];_PyUnicodeWriter_WriteStr=Module["_PyUnicodeWriter_WriteStr"]=wasmExports["PyUnicodeWriter_WriteStr"];_PyUnicodeWriter_Discard=Module["_PyUnicodeWriter_Discard"]=wasmExports["PyUnicodeWriter_Discard"];_PyUnicodeWriter_Finish=Module["_PyUnicodeWriter_Finish"]=wasmExports["PyUnicodeWriter_Finish"];_strpbrk=Module["_strpbrk"]=wasmExports["strpbrk"];__PyUnicode_IsWhitespace=Module["__PyUnicode_IsWhitespace"]=wasmExports["_PyUnicode_IsWhitespace"];_PyUnicode_Substring=Module["_PyUnicode_Substring"]=wasmExports["PyUnicode_Substring"];_PyThreadState_Get=Module["_PyThreadState_Get"]=wasmExports["PyThreadState_Get"];__Py_ReachedRecursionLimitWithMargin=Module["__Py_ReachedRecursionLimitWithMargin"]=wasmExports["_Py_ReachedRecursionLimitWithMargin"];_PyUnicode_DecodeUTF8Stateful=Module["_PyUnicode_DecodeUTF8Stateful"]=wasmExports["PyUnicode_DecodeUTF8Stateful"];_siprintf=Module["_siprintf"]=wasmExports["siprintf"];__PyUnicode_DecodeUnicodeEscapeInternal2=Module["__PyUnicode_DecodeUnicodeEscapeInternal2"]=wasmExports["_PyUnicode_DecodeUnicodeEscapeInternal2"];__PyErr_BadInternalCall=Module["__PyErr_BadInternalCall"]=wasmExports["_PyErr_BadInternalCall"];__PyBytes_DecodeEscape2=Module["__PyBytes_DecodeEscape2"]=wasmExports["_PyBytes_DecodeEscape2"];_PyBytes_Size=Module["_PyBytes_Size"]=wasmExports["PyBytes_Size"];_PyErr_WarnExplicitObject=Module["_PyErr_WarnExplicitObject"]=wasmExports["PyErr_WarnExplicitObject"];_PySys_Audit=Module["_PySys_Audit"]=wasmExports["PySys_Audit"];_memchr=Module["_memchr"]=wasmExports["memchr"];__Py_FatalErrorFunc=Module["__Py_FatalErrorFunc"]=wasmExports["_Py_FatalErrorFunc"];__PyUnicode_ScanIdentifier=Module["__PyUnicode_ScanIdentifier"]=wasmExports["_PyUnicode_ScanIdentifier"];_PyUnicode_AsUTF8String=Module["_PyUnicode_AsUTF8String"]=wasmExports["PyUnicode_AsUTF8String"];__PyUnicode_IsPrintable=Module["__PyUnicode_IsPrintable"]=wasmExports["_PyUnicode_IsPrintable"];_PyOS_Readline=Module["_PyOS_Readline"]=wasmExports["PyOS_Readline"];_strcpy=Module["_strcpy"]=wasmExports["strcpy"];_PyObject_CallNoArgs=Module["_PyObject_CallNoArgs"]=wasmExports["PyObject_CallNoArgs"];__Py_UniversalNewlineFgetsWithSize=Module["__Py_UniversalNewlineFgetsWithSize"]=wasmExports["_Py_UniversalNewlineFgetsWithSize"];_fopencookie=Module["_fopencookie"]=wasmExports["fopencookie"];_fclose=Module["_fclose"]=wasmExports["fclose"];_getc=Module["_getc"]=wasmExports["getc"];_ungetc=Module["_ungetc"]=wasmExports["ungetc"];_ftell=Module["_ftell"]=wasmExports["ftell"];_lseek=Module["_lseek"]=wasmExports["lseek"];_PyErr_SetFromErrnoWithFilename=Module["_PyErr_SetFromErrnoWithFilename"]=wasmExports["PyErr_SetFromErrnoWithFilename"];_PyObject_CallFunction=Module["_PyObject_CallFunction"]=wasmExports["PyObject_CallFunction"];_PyObject_GetAttr=Module["_PyObject_GetAttr"]=wasmExports["PyObject_GetAttr"];__PyObject_MakeTpCall=Module["__PyObject_MakeTpCall"]=wasmExports["_PyObject_MakeTpCall"];__Py_CheckFunctionResult=Module["__Py_CheckFunctionResult"]=wasmExports["_Py_CheckFunctionResult"];_read=Module["_read"]=wasmExports["read"];_strcspn=Module["_strcspn"]=wasmExports["strcspn"];_fflush=Module["_fflush"]=wasmExports["fflush"];_fputs=Module["_fputs"]=wasmExports["fputs"];_PyMem_RawFree=Module["_PyMem_RawFree"]=wasmExports["PyMem_RawFree"];_PyEval_RestoreThread=Module["_PyEval_RestoreThread"]=wasmExports["PyEval_RestoreThread"];_PyEval_SaveThread=Module["_PyEval_SaveThread"]=wasmExports["PyEval_SaveThread"];_PyMem_RawRealloc=Module["_PyMem_RawRealloc"]=wasmExports["PyMem_RawRealloc"];__PyInterpreterState_Main=Module["__PyInterpreterState_Main"]=wasmExports["_PyInterpreterState_Main"];_clearerr=Module["_clearerr"]=wasmExports["clearerr"];_fgets=Module["_fgets"]=wasmExports["fgets"];_feof=Module["_feof"]=wasmExports["feof"];_PyErr_CheckSignals=Module["_PyErr_CheckSignals"]=wasmExports["PyErr_CheckSignals"];_PyMutex_Lock=Module["_PyMutex_Lock"]=wasmExports["PyMutex_Lock"];_isatty=Module["_isatty"]=wasmExports["isatty"];_PyMutex_Unlock=Module["_PyMutex_Unlock"]=wasmExports["PyMutex_Unlock"];_PyObject_Type=Module["_PyObject_Type"]=wasmExports["PyObject_Type"];__PyErr_SetString=Module["__PyErr_SetString"]=wasmExports["_PyErr_SetString"];_PyObject_Size=Module["_PyObject_Size"]=wasmExports["PyObject_Size"];_PyMapping_Size=Module["_PyMapping_Size"]=wasmExports["PyMapping_Size"];_PyObject_Length=Module["_PyObject_Length"]=wasmExports["PyObject_Length"];_PyObject_LengthHint=Module["_PyObject_LengthHint"]=wasmExports["PyObject_LengthHint"];__PyErr_ExceptionMatches=Module["__PyErr_ExceptionMatches"]=wasmExports["_PyErr_ExceptionMatches"];__PyErr_Clear=Module["__PyErr_Clear"]=wasmExports["_PyErr_Clear"];__PyObject_LookupSpecial=Module["__PyObject_LookupSpecial"]=wasmExports["_PyObject_LookupSpecial"];_Py_GenericAlias=Module["_Py_GenericAlias"]=wasmExports["Py_GenericAlias"];_PyObject_GetOptionalAttr=Module["_PyObject_GetOptionalAttr"]=wasmExports["PyObject_GetOptionalAttr"];__PyNumber_Index=Module["__PyNumber_Index"]=wasmExports["_PyNumber_Index"];__PyErr_Format=Module["__PyErr_Format"]=wasmExports["_PyErr_Format"];_PyMapping_GetOptionalItem=Module["_PyMapping_GetOptionalItem"]=wasmExports["PyMapping_GetOptionalItem"];_PyDict_GetItemRef=Module["_PyDict_GetItemRef"]=wasmExports["PyDict_GetItemRef"];_PySequence_SetItem=Module["_PySequence_SetItem"]=wasmExports["PySequence_SetItem"];_PySequence_DelItem=Module["_PySequence_DelItem"]=wasmExports["PySequence_DelItem"];_PyObject_DelItemString=Module["_PyObject_DelItemString"]=wasmExports["PyObject_DelItemString"];_PyObject_CheckReadBuffer=Module["_PyObject_CheckReadBuffer"]=wasmExports["PyObject_CheckReadBuffer"];_PyObject_AsCharBuffer=Module["_PyObject_AsCharBuffer"]=wasmExports["PyObject_AsCharBuffer"];_PyObject_AsReadBuffer=Module["_PyObject_AsReadBuffer"]=wasmExports["PyObject_AsReadBuffer"];_PyObject_AsWriteBuffer=Module["_PyObject_AsWriteBuffer"]=wasmExports["PyObject_AsWriteBuffer"];_PyBuffer_GetPointer=Module["_PyBuffer_GetPointer"]=wasmExports["PyBuffer_GetPointer"];_PyBuffer_SizeFromFormat=Module["_PyBuffer_SizeFromFormat"]=wasmExports["PyBuffer_SizeFromFormat"];_PyObject_CallFunctionObjArgs=Module["_PyObject_CallFunctionObjArgs"]=wasmExports["PyObject_CallFunctionObjArgs"];_PyBuffer_FromContiguous=Module["_PyBuffer_FromContiguous"]=wasmExports["PyBuffer_FromContiguous"];_PyObject_CopyData=Module["_PyObject_CopyData"]=wasmExports["PyObject_CopyData"];_PyBuffer_FillInfo=Module["_PyBuffer_FillInfo"]=wasmExports["PyBuffer_FillInfo"];__PyBuffer_ReleaseInInterpreter=Module["__PyBuffer_ReleaseInInterpreter"]=wasmExports["_PyBuffer_ReleaseInInterpreter"];__PyBuffer_ReleaseInInterpreterAndRawFree=Module["__PyBuffer_ReleaseInInterpreterAndRawFree"]=wasmExports["_PyBuffer_ReleaseInInterpreterAndRawFree"];_PyObject_Format=Module["_PyObject_Format"]=wasmExports["PyObject_Format"];_PyNumber_Check=Module["_PyNumber_Check"]=wasmExports["PyNumber_Check"];_PyNumber_Or=Module["_PyNumber_Or"]=wasmExports["PyNumber_Or"];_PyNumber_Xor=Module["_PyNumber_Xor"]=wasmExports["PyNumber_Xor"];_PyNumber_And=Module["_PyNumber_And"]=wasmExports["PyNumber_And"];_PyNumber_Lshift=Module["_PyNumber_Lshift"]=wasmExports["PyNumber_Lshift"];_PyNumber_Rshift=Module["_PyNumber_Rshift"]=wasmExports["PyNumber_Rshift"];_PyNumber_Subtract=Module["_PyNumber_Subtract"]=wasmExports["PyNumber_Subtract"];_PyNumber_Divmod=Module["_PyNumber_Divmod"]=wasmExports["PyNumber_Divmod"];_PyNumber_Add=Module["_PyNumber_Add"]=wasmExports["PyNumber_Add"];_PyNumber_Multiply=Module["_PyNumber_Multiply"]=wasmExports["PyNumber_Multiply"];_PyNumber_MatrixMultiply=Module["_PyNumber_MatrixMultiply"]=wasmExports["PyNumber_MatrixMultiply"];_PyNumber_FloorDivide=Module["_PyNumber_FloorDivide"]=wasmExports["PyNumber_FloorDivide"];_PyNumber_TrueDivide=Module["_PyNumber_TrueDivide"]=wasmExports["PyNumber_TrueDivide"];_PyNumber_Remainder=Module["_PyNumber_Remainder"]=wasmExports["PyNumber_Remainder"];_PyNumber_Power=Module["_PyNumber_Power"]=wasmExports["PyNumber_Power"];_PyNumber_InPlaceOr=Module["_PyNumber_InPlaceOr"]=wasmExports["PyNumber_InPlaceOr"];_PyNumber_InPlaceXor=Module["_PyNumber_InPlaceXor"]=wasmExports["PyNumber_InPlaceXor"];_PyNumber_InPlaceAnd=Module["_PyNumber_InPlaceAnd"]=wasmExports["PyNumber_InPlaceAnd"];_PyNumber_InPlaceLshift=Module["_PyNumber_InPlaceLshift"]=wasmExports["PyNumber_InPlaceLshift"];_PyNumber_InPlaceRshift=Module["_PyNumber_InPlaceRshift"]=wasmExports["PyNumber_InPlaceRshift"];_PyNumber_InPlaceSubtract=Module["_PyNumber_InPlaceSubtract"]=wasmExports["PyNumber_InPlaceSubtract"];_PyNumber_InPlaceMatrixMultiply=Module["_PyNumber_InPlaceMatrixMultiply"]=wasmExports["PyNumber_InPlaceMatrixMultiply"];_PyNumber_InPlaceFloorDivide=Module["_PyNumber_InPlaceFloorDivide"]=wasmExports["PyNumber_InPlaceFloorDivide"];_PyNumber_InPlaceTrueDivide=Module["_PyNumber_InPlaceTrueDivide"]=wasmExports["PyNumber_InPlaceTrueDivide"];_PyNumber_InPlaceRemainder=Module["_PyNumber_InPlaceRemainder"]=wasmExports["PyNumber_InPlaceRemainder"];_PyNumber_InPlaceAdd=Module["_PyNumber_InPlaceAdd"]=wasmExports["PyNumber_InPlaceAdd"];_PyNumber_InPlaceMultiply=Module["_PyNumber_InPlaceMultiply"]=wasmExports["PyNumber_InPlaceMultiply"];_PyNumber_InPlacePower=Module["_PyNumber_InPlacePower"]=wasmExports["PyNumber_InPlacePower"];_PyNumber_Negative=Module["_PyNumber_Negative"]=wasmExports["PyNumber_Negative"];_PyNumber_Positive=Module["_PyNumber_Positive"]=wasmExports["PyNumber_Positive"];_PyNumber_Invert=Module["_PyNumber_Invert"]=wasmExports["PyNumber_Invert"];_PyNumber_Absolute=Module["_PyNumber_Absolute"]=wasmExports["PyNumber_Absolute"];_PyErr_WarnFormat=Module["_PyErr_WarnFormat"]=wasmExports["PyErr_WarnFormat"];__PyLong_Copy=Module["__PyLong_Copy"]=wasmExports["_PyLong_Copy"];_PyNumber_Long=Module["_PyNumber_Long"]=wasmExports["PyNumber_Long"];_PyLong_FromUnicodeObject=Module["_PyLong_FromUnicodeObject"]=wasmExports["PyLong_FromUnicodeObject"];_PyNumber_Float=Module["_PyNumber_Float"]=wasmExports["PyNumber_Float"];_PyLong_AsDouble=Module["_PyLong_AsDouble"]=wasmExports["PyLong_AsDouble"];_PyFloat_FromString=Module["_PyFloat_FromString"]=wasmExports["PyFloat_FromString"];_PyNumber_ToBase=Module["_PyNumber_ToBase"]=wasmExports["PyNumber_ToBase"];__PyLong_Format=Module["__PyLong_Format"]=wasmExports["_PyLong_Format"];_PySequence_Check=Module["_PySequence_Check"]=wasmExports["PySequence_Check"];_PySequence_Length=Module["_PySequence_Length"]=wasmExports["PySequence_Length"];_PySequence_Concat=Module["_PySequence_Concat"]=wasmExports["PySequence_Concat"];_PySequence_Repeat=Module["_PySequence_Repeat"]=wasmExports["PySequence_Repeat"];_PySequence_InPlaceConcat=Module["_PySequence_InPlaceConcat"]=wasmExports["PySequence_InPlaceConcat"];_PySequence_InPlaceRepeat=Module["_PySequence_InPlaceRepeat"]=wasmExports["PySequence_InPlaceRepeat"];__PySlice_FromIndices=Module["__PySlice_FromIndices"]=wasmExports["_PySlice_FromIndices"];_PySequence_DelSlice=Module["_PySequence_DelSlice"]=wasmExports["PySequence_DelSlice"];_PySequence_Tuple=Module["_PySequence_Tuple"]=wasmExports["PySequence_Tuple"];_PyList_AsTuple=Module["_PyList_AsTuple"]=wasmExports["PyList_AsTuple"];__PyList_AppendTakeRefListResize=Module["__PyList_AppendTakeRefListResize"]=wasmExports["_PyList_AppendTakeRefListResize"];__PyList_AsTupleAndClear=Module["__PyList_AsTupleAndClear"]=wasmExports["_PyList_AsTupleAndClear"];__PyTuple_FromArraySteal=Module["__PyTuple_FromArraySteal"]=wasmExports["_PyTuple_FromArraySteal"];_PySeqIter_New=Module["_PySeqIter_New"]=wasmExports["PySeqIter_New"];_PySequence_List=Module["_PySequence_List"]=wasmExports["PySequence_List"];__PyList_Extend=Module["__PyList_Extend"]=wasmExports["_PyList_Extend"];_PySequence_Count=Module["_PySequence_Count"]=wasmExports["PySequence_Count"];_PySequence_In=Module["_PySequence_In"]=wasmExports["PySequence_In"];_PySequence_Index=Module["_PySequence_Index"]=wasmExports["PySequence_Index"];_PyMapping_Check=Module["_PyMapping_Check"]=wasmExports["PyMapping_Check"];_PyMapping_Length=Module["_PyMapping_Length"]=wasmExports["PyMapping_Length"];_PyMapping_GetItemString=Module["_PyMapping_GetItemString"]=wasmExports["PyMapping_GetItemString"];_PyMapping_GetOptionalItemString=Module["_PyMapping_GetOptionalItemString"]=wasmExports["PyMapping_GetOptionalItemString"];_PyMapping_SetItemString=Module["_PyMapping_SetItemString"]=wasmExports["PyMapping_SetItemString"];_PyMapping_HasKeyStringWithError=Module["_PyMapping_HasKeyStringWithError"]=wasmExports["PyMapping_HasKeyStringWithError"];_PyMapping_HasKeyWithError=Module["_PyMapping_HasKeyWithError"]=wasmExports["PyMapping_HasKeyWithError"];_PyMapping_HasKeyString=Module["_PyMapping_HasKeyString"]=wasmExports["PyMapping_HasKeyString"];_PyErr_FormatUnraisable=Module["_PyErr_FormatUnraisable"]=wasmExports["PyErr_FormatUnraisable"];_PyMapping_HasKey=Module["_PyMapping_HasKey"]=wasmExports["PyMapping_HasKey"];_PyMapping_Keys=Module["_PyMapping_Keys"]=wasmExports["PyMapping_Keys"];_PyDict_Keys=Module["_PyDict_Keys"]=wasmExports["PyDict_Keys"];_PyMapping_Items=Module["_PyMapping_Items"]=wasmExports["PyMapping_Items"];_PyDict_Items=Module["_PyDict_Items"]=wasmExports["PyDict_Items"];_PyMapping_Values=Module["_PyMapping_Values"]=wasmExports["PyMapping_Values"];_PyDict_Values=Module["_PyDict_Values"]=wasmExports["PyDict_Values"];__Py_CheckRecursiveCall=Module["__Py_CheckRecursiveCall"]=wasmExports["_Py_CheckRecursiveCall"];_PyObject_IsTrue=Module["_PyObject_IsTrue"]=wasmExports["PyObject_IsTrue"];_PyIter_Check=Module["_PyIter_Check"]=wasmExports["PyIter_Check"];_PyObject_GetAIter=Module["_PyObject_GetAIter"]=wasmExports["PyObject_GetAIter"];_PyAIter_Check=Module["_PyAIter_Check"]=wasmExports["PyAIter_Check"];_PyIter_NextItem=Module["_PyIter_NextItem"]=wasmExports["PyIter_NextItem"];_PyBool_FromLong=Module["_PyBool_FromLong"]=wasmExports["PyBool_FromLong"];__Py_SetImmortal=Module["__Py_SetImmortal"]=wasmExports["_Py_SetImmortal"];__PyArg_NoKeywords=Module["__PyArg_NoKeywords"]=wasmExports["_PyArg_NoKeywords"];_memrchr=Module["_memrchr"]=wasmExports["memrchr"];_memcmp=Module["_memcmp"]=wasmExports["memcmp"];_PyByteArray_FromObject=Module["_PyByteArray_FromObject"]=wasmExports["PyByteArray_FromObject"];_PyByteArray_FromStringAndSize=Module["_PyByteArray_FromStringAndSize"]=wasmExports["PyByteArray_FromStringAndSize"];__PyObject_New=Module["__PyObject_New"]=wasmExports["_PyObject_New"];_PyByteArray_Size=Module["_PyByteArray_Size"]=wasmExports["PyByteArray_Size"];_PyByteArray_AsString=Module["_PyByteArray_AsString"]=wasmExports["PyByteArray_AsString"];_PyByteArray_Resize=Module["_PyByteArray_Resize"]=wasmExports["PyByteArray_Resize"];_PyByteArray_Concat=Module["_PyByteArray_Concat"]=wasmExports["PyByteArray_Concat"];_PyUnicode_FromStringAndSize=Module["_PyUnicode_FromStringAndSize"]=wasmExports["PyUnicode_FromStringAndSize"];__Py_GetConfig=Module["__Py_GetConfig"]=wasmExports["_Py_GetConfig"];__PyObject_GC_New=Module["__PyObject_GC_New"]=wasmExports["_PyObject_GC_New"];__PyArg_UnpackKeywords=Module["__PyArg_UnpackKeywords"]=wasmExports["_PyArg_UnpackKeywords"];__PyArg_BadArgument=Module["__PyArg_BadArgument"]=wasmExports["_PyArg_BadArgument"];_PyUnicode_AsEncodedString=Module["_PyUnicode_AsEncodedString"]=wasmExports["PyUnicode_AsEncodedString"];_PyBuffer_ToContiguous=Module["_PyBuffer_ToContiguous"]=wasmExports["PyBuffer_ToContiguous"];_PyObject_GC_Del=Module["_PyObject_GC_Del"]=wasmExports["PyObject_GC_Del"];__PyBytes_Repeat=Module["__PyBytes_Repeat"]=wasmExports["_PyBytes_Repeat"];__PyObject_GetState=Module["__PyObject_GetState"]=wasmExports["_PyObject_GetState"];_PyUnicode_DecodeLatin1=Module["_PyUnicode_DecodeLatin1"]=wasmExports["PyUnicode_DecodeLatin1"];_PyLong_AsInt=Module["_PyLong_AsInt"]=wasmExports["PyLong_AsInt"];_PyLong_FromSize_t=Module["_PyLong_FromSize_t"]=wasmExports["PyLong_FromSize_t"];__PyEval_SliceIndex=Module["__PyEval_SliceIndex"]=wasmExports["_PyEval_SliceIndex"];_PyUnicode_GetDefaultEncoding=Module["_PyUnicode_GetDefaultEncoding"]=wasmExports["PyUnicode_GetDefaultEncoding"];_PyUnicode_FromEncodedObject=Module["_PyUnicode_FromEncodedObject"]=wasmExports["PyUnicode_FromEncodedObject"];_PyList_Append=Module["_PyList_Append"]=wasmExports["PyList_Append"];_PyList_Reverse=Module["_PyList_Reverse"]=wasmExports["PyList_Reverse"];__PyEval_GetBuiltin=Module["__PyEval_GetBuiltin"]=wasmExports["_PyEval_GetBuiltin"];_PyObject_GenericGetAttr=Module["_PyObject_GenericGetAttr"]=wasmExports["PyObject_GenericGetAttr"];_PyType_GenericAlloc=Module["_PyType_GenericAlloc"]=wasmExports["PyType_GenericAlloc"];_PyObject_Free=Module["_PyObject_Free"]=wasmExports["PyObject_Free"];_PyObject_Malloc=Module["_PyObject_Malloc"]=wasmExports["PyObject_Malloc"];__Py_NewReference=Module["__Py_NewReference"]=wasmExports["_Py_NewReference"];_PyObject_Calloc=Module["_PyObject_Calloc"]=wasmExports["PyObject_Calloc"];_PyBytes_FromString=Module["_PyBytes_FromString"]=wasmExports["PyBytes_FromString"];_PyBytes_FromFormatV=Module["_PyBytes_FromFormatV"]=wasmExports["PyBytes_FromFormatV"];__PyBytesWriter_Resize=Module["__PyBytesWriter_Resize"]=wasmExports["_PyBytesWriter_Resize"];__PyBytesWriter_Finish=Module["__PyBytesWriter_Finish"]=wasmExports["_PyBytesWriter_Finish"];__PyBytesWriter_Init=Module["__PyBytesWriter_Init"]=wasmExports["_PyBytesWriter_Init"];__PyBytesWriter_Alloc=Module["__PyBytesWriter_Alloc"]=wasmExports["_PyBytesWriter_Alloc"];__PyBytesWriter_WriteBytes=Module["__PyBytesWriter_WriteBytes"]=wasmExports["_PyBytesWriter_WriteBytes"];__PyBytes_Resize=Module["__PyBytes_Resize"]=wasmExports["_PyBytes_Resize"];__PyBytesWriter_Dealloc=Module["__PyBytesWriter_Dealloc"]=wasmExports["_PyBytesWriter_Dealloc"];_PyBytes_FromFormat=Module["_PyBytes_FromFormat"]=wasmExports["PyBytes_FromFormat"];_PyObject_ASCII=Module["_PyObject_ASCII"]=wasmExports["PyObject_ASCII"];_PyOS_double_to_string=Module["_PyOS_double_to_string"]=wasmExports["PyOS_double_to_string"];__PyBytesWriter_Prepare=Module["__PyBytesWriter_Prepare"]=wasmExports["_PyBytesWriter_Prepare"];_PyBytes_DecodeEscape=Module["_PyBytes_DecodeEscape"]=wasmExports["PyBytes_DecodeEscape"];__PyBytes_Find=Module["__PyBytes_Find"]=wasmExports["_PyBytes_Find"];__PyBytes_ReverseFind=Module["__PyBytes_ReverseFind"]=wasmExports["_PyBytes_ReverseFind"];_PyBytes_Repr=Module["_PyBytes_Repr"]=wasmExports["PyBytes_Repr"];_PyUnicode_New=Module["_PyUnicode_New"]=wasmExports["PyUnicode_New"];_PyBytes_Join=Module["_PyBytes_Join"]=wasmExports["PyBytes_Join"];_PyBytes_FromObject=Module["_PyBytes_FromObject"]=wasmExports["PyBytes_FromObject"];_PyErr_BadArgument=Module["_PyErr_BadArgument"]=wasmExports["PyErr_BadArgument"];_PyObject_Realloc=Module["_PyObject_Realloc"]=wasmExports["PyObject_Realloc"];__Py_NewReferenceNoTotal=Module["__Py_NewReferenceNoTotal"]=wasmExports["_Py_NewReferenceNoTotal"];_PyBytes_ConcatAndDel=Module["_PyBytes_ConcatAndDel"]=wasmExports["PyBytes_ConcatAndDel"];_PyVectorcall_Function=Module["_PyVectorcall_Function"]=wasmExports["PyVectorcall_Function"];__PyTuple_FromArray=Module["__PyTuple_FromArray"]=wasmExports["_PyTuple_FromArray"];__PyDict_FromItems=Module["__PyDict_FromItems"]=wasmExports["_PyDict_FromItems"];_PyDict_Next=Module["_PyDict_Next"]=wasmExports["PyDict_Next"];_PyObject_VectorcallDict=Module["_PyObject_VectorcallDict"]=wasmExports["PyObject_VectorcallDict"];_PyModule_GetNameObject=Module["_PyModule_GetNameObject"]=wasmExports["PyModule_GetNameObject"];_PyCallable_Check=Module["_PyCallable_Check"]=wasmExports["PyCallable_Check"];__PyStack_AsDict=Module["__PyStack_AsDict"]=wasmExports["_PyStack_AsDict"];_PyObject_Call=Module["_PyObject_Call"]=wasmExports["PyObject_Call"];_PyCFunction_Call=Module["_PyCFunction_Call"]=wasmExports["PyCFunction_Call"];_PyEval_CallObjectWithKeywords=Module["_PyEval_CallObjectWithKeywords"]=wasmExports["PyEval_CallObjectWithKeywords"];_PyObject_CallObject=Module["_PyObject_CallObject"]=wasmExports["PyObject_CallObject"];_PyEval_CallFunction=Module["_PyEval_CallFunction"]=wasmExports["PyEval_CallFunction"];__PyObject_CallFunction_SizeT=Module["__PyObject_CallFunction_SizeT"]=wasmExports["_PyObject_CallFunction_SizeT"];_PyObject_CallMethod=Module["_PyObject_CallMethod"]=wasmExports["PyObject_CallMethod"];_PyEval_CallMethod=Module["_PyEval_CallMethod"]=wasmExports["PyEval_CallMethod"];__PyObject_CallMethod=Module["__PyObject_CallMethod"]=wasmExports["_PyObject_CallMethod"];__PyObject_CallMethodId=Module["__PyObject_CallMethodId"]=wasmExports["_PyObject_CallMethodId"];__PyObject_CallMethod_SizeT=Module["__PyObject_CallMethod_SizeT"]=wasmExports["_PyObject_CallMethod_SizeT"];_PyObject_CallMethodObjArgs=Module["_PyObject_CallMethodObjArgs"]=wasmExports["PyObject_CallMethodObjArgs"];_PyVectorcall_NARGS=Module["_PyVectorcall_NARGS"]=wasmExports["PyVectorcall_NARGS"];_PyCapsule_New=Module["_PyCapsule_New"]=wasmExports["PyCapsule_New"];_PyCapsule_IsValid=Module["_PyCapsule_IsValid"]=wasmExports["PyCapsule_IsValid"];_PyCapsule_GetPointer=Module["_PyCapsule_GetPointer"]=wasmExports["PyCapsule_GetPointer"];_PyCapsule_GetName=Module["_PyCapsule_GetName"]=wasmExports["PyCapsule_GetName"];_PyCapsule_GetDestructor=Module["_PyCapsule_GetDestructor"]=wasmExports["PyCapsule_GetDestructor"];_PyCapsule_GetContext=Module["_PyCapsule_GetContext"]=wasmExports["PyCapsule_GetContext"];_PyCapsule_SetPointer=Module["_PyCapsule_SetPointer"]=wasmExports["PyCapsule_SetPointer"];_PyCapsule_SetName=Module["_PyCapsule_SetName"]=wasmExports["PyCapsule_SetName"];_PyCapsule_SetDestructor=Module["_PyCapsule_SetDestructor"]=wasmExports["PyCapsule_SetDestructor"];_PyCapsule_SetContext=Module["_PyCapsule_SetContext"]=wasmExports["PyCapsule_SetContext"];__PyCapsule_SetTraverse=Module["__PyCapsule_SetTraverse"]=wasmExports["_PyCapsule_SetTraverse"];_PyCapsule_Import=Module["_PyCapsule_Import"]=wasmExports["PyCapsule_Import"];_PyCell_New=Module["_PyCell_New"]=wasmExports["PyCell_New"];_PyCell_Get=Module["_PyCell_Get"]=wasmExports["PyCell_Get"];_PyCell_Set=Module["_PyCell_Set"]=wasmExports["PyCell_Set"];_PyObject_RichCompare=Module["_PyObject_RichCompare"]=wasmExports["PyObject_RichCompare"];_PyMethod_Function=Module["_PyMethod_Function"]=wasmExports["PyMethod_Function"];_PyMethod_Self=Module["_PyMethod_Self"]=wasmExports["PyMethod_Self"];_PyMethod_New=Module["_PyMethod_New"]=wasmExports["PyMethod_New"];_PyObject_ClearWeakRefs=Module["_PyObject_ClearWeakRefs"]=wasmExports["PyObject_ClearWeakRefs"];_PyObject_GenericHash=Module["_PyObject_GenericHash"]=wasmExports["PyObject_GenericHash"];_PyObject_Hash=Module["_PyObject_Hash"]=wasmExports["PyObject_Hash"];__PyType_GetDict=Module["__PyType_GetDict"]=wasmExports["_PyType_GetDict"];__PyType_LookupRef=Module["__PyType_LookupRef"]=wasmExports["_PyType_LookupRef"];_PyInstanceMethod_New=Module["_PyInstanceMethod_New"]=wasmExports["PyInstanceMethod_New"];_PyInstanceMethod_Function=Module["_PyInstanceMethod_Function"]=wasmExports["PyInstanceMethod_Function"];_PyCode_AddWatcher=Module["_PyCode_AddWatcher"]=wasmExports["PyCode_AddWatcher"];_PyCode_ClearWatcher=Module["_PyCode_ClearWatcher"]=wasmExports["PyCode_ClearWatcher"];__PyObject_NewVar=Module["__PyObject_NewVar"]=wasmExports["_PyObject_NewVar"];__PyUnicode_InternMortal=Module["__PyUnicode_InternMortal"]=wasmExports["_PyUnicode_InternMortal"];_PyUnstable_Code_NewWithPosOnlyArgs=Module["_PyUnstable_Code_NewWithPosOnlyArgs"]=wasmExports["PyUnstable_Code_NewWithPosOnlyArgs"];_PyUnicode_Compare=Module["_PyUnicode_Compare"]=wasmExports["PyUnicode_Compare"];__PyTuple_Resize=Module["__PyTuple_Resize"]=wasmExports["_PyTuple_Resize"];_PyUnstable_Code_New=Module["_PyUnstable_Code_New"]=wasmExports["PyUnstable_Code_New"];_PyCode_NewEmpty=Module["_PyCode_NewEmpty"]=wasmExports["PyCode_NewEmpty"];_PyUnicode_DecodeFSDefault=Module["_PyUnicode_DecodeFSDefault"]=wasmExports["PyUnicode_DecodeFSDefault"];__PyCode_CheckLineNumber=Module["__PyCode_CheckLineNumber"]=wasmExports["_PyCode_CheckLineNumber"];_PyCode_Addr2Line=Module["_PyCode_Addr2Line"]=wasmExports["PyCode_Addr2Line"];_PyCode_Addr2Location=Module["_PyCode_Addr2Location"]=wasmExports["PyCode_Addr2Location"];_PyUnstable_Code_GetExtra=Module["_PyUnstable_Code_GetExtra"]=wasmExports["PyUnstable_Code_GetExtra"];_PyUnstable_Code_SetExtra=Module["_PyUnstable_Code_SetExtra"]=wasmExports["PyUnstable_Code_SetExtra"];_PyCode_GetVarnames=Module["_PyCode_GetVarnames"]=wasmExports["PyCode_GetVarnames"];_PyCode_GetCellvars=Module["_PyCode_GetCellvars"]=wasmExports["PyCode_GetCellvars"];_PyCode_GetFreevars=Module["_PyCode_GetFreevars"]=wasmExports["PyCode_GetFreevars"];__PyCode_GetVarCounts=Module["__PyCode_GetVarCounts"]=wasmExports["_PyCode_GetVarCounts"];__PyCode_SetUnboundVarCounts=Module["__PyCode_SetUnboundVarCounts"]=wasmExports["_PyCode_SetUnboundVarCounts"];_PySet_Contains=Module["_PySet_Contains"]=wasmExports["PySet_Contains"];_PySet_Add=Module["_PySet_Add"]=wasmExports["PySet_Add"];_PyDict_Contains=Module["_PyDict_Contains"]=wasmExports["PyDict_Contains"];__PyCode_CheckNoInternalState=Module["__PyCode_CheckNoInternalState"]=wasmExports["_PyCode_CheckNoInternalState"];__PyCode_CheckNoExternalState=Module["__PyCode_CheckNoExternalState"]=wasmExports["_PyCode_CheckNoExternalState"];__PyCode_VerifyStateless=Module["__PyCode_VerifyStateless"]=wasmExports["_PyCode_VerifyStateless"];__PyCode_CheckPureFunction=Module["__PyCode_CheckPureFunction"]=wasmExports["_PyCode_CheckPureFunction"];__PyCode_ReturnsOnlyNone=Module["__PyCode_ReturnsOnlyNone"]=wasmExports["_PyCode_ReturnsOnlyNone"];_PyTuple_Size=Module["_PyTuple_Size"]=wasmExports["PyTuple_Size"];_PyCode_GetCode=Module["_PyCode_GetCode"]=wasmExports["PyCode_GetCode"];__PyCode_ConstantKey=Module["__PyCode_ConstantKey"]=wasmExports["_PyCode_ConstantKey"];_PyComplex_AsCComplex=Module["_PyComplex_AsCComplex"]=wasmExports["PyComplex_AsCComplex"];__PySet_NextEntry=Module["__PySet_NextEntry"]=wasmExports["_PySet_NextEntry"];_PyFrozenSet_New=Module["_PyFrozenSet_New"]=wasmExports["PyFrozenSet_New"];_PySlice_New=Module["_PySlice_New"]=wasmExports["PySlice_New"];_PyLong_FromVoidPtr=Module["_PyLong_FromVoidPtr"]=wasmExports["PyLong_FromVoidPtr"];__PyUnicode_Copy=Module["__PyUnicode_Copy"]=wasmExports["_PyUnicode_Copy"];__Py_c_sum=Module["__Py_c_sum"]=wasmExports["_Py_c_sum"];__Py_cr_sum=Module["__Py_cr_sum"]=wasmExports["_Py_cr_sum"];__Py_c_diff=Module["__Py_c_diff"]=wasmExports["_Py_c_diff"];__Py_cr_diff=Module["__Py_cr_diff"]=wasmExports["_Py_cr_diff"];__Py_rc_diff=Module["__Py_rc_diff"]=wasmExports["_Py_rc_diff"];__Py_c_neg=Module["__Py_c_neg"]=wasmExports["_Py_c_neg"];__Py_c_prod=Module["__Py_c_prod"]=wasmExports["_Py_c_prod"];__Py_cr_prod=Module["__Py_cr_prod"]=wasmExports["_Py_cr_prod"];__Py_c_quot=Module["__Py_c_quot"]=wasmExports["_Py_c_quot"];__Py_cr_quot=Module["__Py_cr_quot"]=wasmExports["_Py_cr_quot"];__Py_rc_quot=Module["__Py_rc_quot"]=wasmExports["_Py_rc_quot"];__Py_c_pow=Module["__Py_c_pow"]=wasmExports["_Py_c_pow"];_atan2=Module["_atan2"]=wasmExports["atan2"];_hypot=Module["_hypot"]=wasmExports["hypot"];_pow=Module["_pow"]=wasmExports["pow"];_log=Module["_log"]=wasmExports["log"];_exp=Module["_exp"]=wasmExports["exp"];_sin=Module["_sin"]=wasmExports["sin"];_cos=Module["_cos"]=wasmExports["cos"];__Py_c_abs=Module["__Py_c_abs"]=wasmExports["_Py_c_abs"];_PyComplex_FromDoubles=Module["_PyComplex_FromDoubles"]=wasmExports["PyComplex_FromDoubles"];_PyComplex_RealAsDouble=Module["_PyComplex_RealAsDouble"]=wasmExports["PyComplex_RealAsDouble"];_PyComplex_ImagAsDouble=Module["_PyComplex_ImagAsDouble"]=wasmExports["PyComplex_ImagAsDouble"];__Py_HashDouble=Module["__Py_HashDouble"]=wasmExports["_Py_HashDouble"];__PyUnicode_TransformDecimalAndSpaceToASCII=Module["__PyUnicode_TransformDecimalAndSpaceToASCII"]=wasmExports["_PyUnicode_TransformDecimalAndSpaceToASCII"];__PyUnicodeWriter_Init=Module["__PyUnicodeWriter_Init"]=wasmExports["_PyUnicodeWriter_Init"];__PyUnicodeWriter_Dealloc=Module["__PyUnicodeWriter_Dealloc"]=wasmExports["_PyUnicodeWriter_Dealloc"];__PyUnicodeWriter_Finish=Module["__PyUnicodeWriter_Finish"]=wasmExports["_PyUnicodeWriter_Finish"];_PyCMethod_New=Module["_PyCMethod_New"]=wasmExports["PyCMethod_New"];_PyMember_GetOne=Module["_PyMember_GetOne"]=wasmExports["PyMember_GetOne"];_PyMember_SetOne=Module["_PyMember_SetOne"]=wasmExports["PyMember_SetOne"];_PyTuple_GetSlice=Module["_PyTuple_GetSlice"]=wasmExports["PyTuple_GetSlice"];_PyWrapper_New=Module["_PyWrapper_New"]=wasmExports["PyWrapper_New"];_PyDescr_NewMethod=Module["_PyDescr_NewMethod"]=wasmExports["PyDescr_NewMethod"];__PyObject_FunctionStr=Module["__PyObject_FunctionStr"]=wasmExports["_PyObject_FunctionStr"];_PyDescr_NewClassMethod=Module["_PyDescr_NewClassMethod"]=wasmExports["PyDescr_NewClassMethod"];_PyDescr_NewMember=Module["_PyDescr_NewMember"]=wasmExports["PyDescr_NewMember"];_PyDescr_NewGetSet=Module["_PyDescr_NewGetSet"]=wasmExports["PyDescr_NewGetSet"];_PyDescr_NewWrapper=Module["_PyDescr_NewWrapper"]=wasmExports["PyDescr_NewWrapper"];_PyDescr_IsData=Module["_PyDescr_IsData"]=wasmExports["PyDescr_IsData"];_PyDictProxy_New=Module["_PyDictProxy_New"]=wasmExports["PyDictProxy_New"];_Py_HashPointer=Module["_Py_HashPointer"]=wasmExports["Py_HashPointer"];_PyType_GetQualName=Module["_PyType_GetQualName"]=wasmExports["PyType_GetQualName"];_PyException_GetCause=Module["_PyException_GetCause"]=wasmExports["PyException_GetCause"];_PyException_SetCause=Module["_PyException_SetCause"]=wasmExports["PyException_SetCause"];_PyException_GetContext=Module["_PyException_GetContext"]=wasmExports["PyException_GetContext"];_PyException_SetContext=Module["_PyException_SetContext"]=wasmExports["PyException_SetContext"];_PyException_GetArgs=Module["_PyException_GetArgs"]=wasmExports["PyException_GetArgs"];_PyException_SetArgs=Module["_PyException_SetArgs"]=wasmExports["PyException_SetArgs"];_PyExceptionClass_Name=Module["_PyExceptionClass_Name"]=wasmExports["PyExceptionClass_Name"];_PyUnstable_Exc_PrepReraiseStar=Module["_PyUnstable_Exc_PrepReraiseStar"]=wasmExports["PyUnstable_Exc_PrepReraiseStar"];_PyUnicodeEncodeError_GetEncoding=Module["_PyUnicodeEncodeError_GetEncoding"]=wasmExports["PyUnicodeEncodeError_GetEncoding"];_PyUnicodeDecodeError_GetEncoding=Module["_PyUnicodeDecodeError_GetEncoding"]=wasmExports["PyUnicodeDecodeError_GetEncoding"];_PyUnicodeEncodeError_GetObject=Module["_PyUnicodeEncodeError_GetObject"]=wasmExports["PyUnicodeEncodeError_GetObject"];_PyUnicodeDecodeError_GetObject=Module["_PyUnicodeDecodeError_GetObject"]=wasmExports["PyUnicodeDecodeError_GetObject"];_PyUnicodeTranslateError_GetObject=Module["_PyUnicodeTranslateError_GetObject"]=wasmExports["PyUnicodeTranslateError_GetObject"];_PyUnicodeEncodeError_GetStart=Module["_PyUnicodeEncodeError_GetStart"]=wasmExports["PyUnicodeEncodeError_GetStart"];_PyUnicodeDecodeError_GetStart=Module["_PyUnicodeDecodeError_GetStart"]=wasmExports["PyUnicodeDecodeError_GetStart"];_PyUnicodeTranslateError_GetStart=Module["_PyUnicodeTranslateError_GetStart"]=wasmExports["PyUnicodeTranslateError_GetStart"];_PyUnicodeEncodeError_SetStart=Module["_PyUnicodeEncodeError_SetStart"]=wasmExports["PyUnicodeEncodeError_SetStart"];_PyUnicodeDecodeError_SetStart=Module["_PyUnicodeDecodeError_SetStart"]=wasmExports["PyUnicodeDecodeError_SetStart"];_PyUnicodeTranslateError_SetStart=Module["_PyUnicodeTranslateError_SetStart"]=wasmExports["PyUnicodeTranslateError_SetStart"];_PyUnicodeEncodeError_GetEnd=Module["_PyUnicodeEncodeError_GetEnd"]=wasmExports["PyUnicodeEncodeError_GetEnd"];_PyUnicodeDecodeError_GetEnd=Module["_PyUnicodeDecodeError_GetEnd"]=wasmExports["PyUnicodeDecodeError_GetEnd"];_PyUnicodeTranslateError_GetEnd=Module["_PyUnicodeTranslateError_GetEnd"]=wasmExports["PyUnicodeTranslateError_GetEnd"];_PyUnicodeEncodeError_SetEnd=Module["_PyUnicodeEncodeError_SetEnd"]=wasmExports["PyUnicodeEncodeError_SetEnd"];_PyUnicodeDecodeError_SetEnd=Module["_PyUnicodeDecodeError_SetEnd"]=wasmExports["PyUnicodeDecodeError_SetEnd"];_PyUnicodeTranslateError_SetEnd=Module["_PyUnicodeTranslateError_SetEnd"]=wasmExports["PyUnicodeTranslateError_SetEnd"];_PyUnicodeEncodeError_GetReason=Module["_PyUnicodeEncodeError_GetReason"]=wasmExports["PyUnicodeEncodeError_GetReason"];_PyUnicodeDecodeError_GetReason=Module["_PyUnicodeDecodeError_GetReason"]=wasmExports["PyUnicodeDecodeError_GetReason"];_PyUnicodeTranslateError_GetReason=Module["_PyUnicodeTranslateError_GetReason"]=wasmExports["PyUnicodeTranslateError_GetReason"];_PyUnicodeEncodeError_SetReason=Module["_PyUnicodeEncodeError_SetReason"]=wasmExports["PyUnicodeEncodeError_SetReason"];_PyUnicodeDecodeError_SetReason=Module["_PyUnicodeDecodeError_SetReason"]=wasmExports["PyUnicodeDecodeError_SetReason"];_PyUnicodeTranslateError_SetReason=Module["_PyUnicodeTranslateError_SetReason"]=wasmExports["PyUnicodeTranslateError_SetReason"];_PyUnicodeDecodeError_Create=Module["_PyUnicodeDecodeError_Create"]=wasmExports["PyUnicodeDecodeError_Create"];__PyErr_SetRaisedException=Module["__PyErr_SetRaisedException"]=wasmExports["_PyErr_SetRaisedException"];_PyModule_GetDict=Module["_PyModule_GetDict"]=wasmExports["PyModule_GetDict"];_PyErr_NewException=Module["_PyErr_NewException"]=wasmExports["PyErr_NewException"];_PyDict_Copy=Module["_PyDict_Copy"]=wasmExports["PyDict_Copy"];_PyUnicode_ReadChar=Module["_PyUnicode_ReadChar"]=wasmExports["PyUnicode_ReadChar"];_PyObject_GenericGetDict=Module["_PyObject_GenericGetDict"]=wasmExports["PyObject_GenericGetDict"];_PyObject_GenericSetDict=Module["_PyObject_GenericSetDict"]=wasmExports["PyObject_GenericSetDict"];_PyObject_HasAttrWithError=Module["_PyObject_HasAttrWithError"]=wasmExports["PyObject_HasAttrWithError"];_PyList_SetSlice=Module["_PyList_SetSlice"]=wasmExports["PyList_SetSlice"];_PyUnicodeWriter_WriteChar=Module["_PyUnicodeWriter_WriteChar"]=wasmExports["PyUnicodeWriter_WriteChar"];_PyUnicodeWriter_WriteASCII=Module["_PyUnicodeWriter_WriteASCII"]=wasmExports["PyUnicodeWriter_WriteASCII"];_PyObject_GC_Track=Module["_PyObject_GC_Track"]=wasmExports["PyObject_GC_Track"];__Py_union_type_or=Module["__Py_union_type_or"]=wasmExports["_Py_union_type_or"];__PyEval_NoToolsForUnwind=Module["__PyEval_NoToolsForUnwind"]=wasmExports["_PyEval_NoToolsForUnwind"];__PyGen_yf=Module["__PyGen_yf"]=wasmExports["_PyGen_yf"];_PyObject_CallFinalizerFromDealloc=Module["_PyObject_CallFinalizerFromDealloc"]=wasmExports["PyObject_CallFinalizerFromDealloc"];__Py_MakeCoro=Module["__Py_MakeCoro"]=wasmExports["_Py_MakeCoro"];__PyObject_GC_NewVar=Module["__PyObject_GC_NewVar"]=wasmExports["_PyObject_GC_NewVar"];_PyUnstable_InterpreterFrame_GetLine=Module["_PyUnstable_InterpreterFrame_GetLine"]=wasmExports["PyUnstable_InterpreterFrame_GetLine"];_PyGen_NewWithQualName=Module["_PyGen_NewWithQualName"]=wasmExports["PyGen_NewWithQualName"];_PyGen_New=Module["_PyGen_New"]=wasmExports["PyGen_New"];__PyCoro_GetAwaitableIter=Module["__PyCoro_GetAwaitableIter"]=wasmExports["_PyCoro_GetAwaitableIter"];_PyCoro_New=Module["_PyCoro_New"]=wasmExports["PyCoro_New"];_PyAsyncGen_New=Module["_PyAsyncGen_New"]=wasmExports["PyAsyncGen_New"];__PyEval_EvalFrameDefault=Module["__PyEval_EvalFrameDefault"]=wasmExports["_PyEval_EvalFrameDefault"];_PyFile_FromFd=Module["_PyFile_FromFd"]=wasmExports["PyFile_FromFd"];_PyFile_GetLine=Module["_PyFile_GetLine"]=wasmExports["PyFile_GetLine"];_PyFile_WriteObject=Module["_PyFile_WriteObject"]=wasmExports["PyFile_WriteObject"];_PyFile_WriteString=Module["_PyFile_WriteString"]=wasmExports["PyFile_WriteString"];_PyObject_AsFileDescriptor=Module["_PyObject_AsFileDescriptor"]=wasmExports["PyObject_AsFileDescriptor"];__PyLong_FileDescriptor_Converter=Module["__PyLong_FileDescriptor_Converter"]=wasmExports["_PyLong_FileDescriptor_Converter"];_flockfile=Module["_flockfile"]=wasmExports["flockfile"];_getc_unlocked=Module["_getc_unlocked"]=wasmExports["getc_unlocked"];_funlockfile=Module["_funlockfile"]=wasmExports["funlockfile"];_Py_UniversalNewlineFgets=Module["_Py_UniversalNewlineFgets"]=wasmExports["Py_UniversalNewlineFgets"];_PyFile_NewStdPrinter=Module["_PyFile_NewStdPrinter"]=wasmExports["PyFile_NewStdPrinter"];_PyFile_SetOpenCodeHook=Module["_PyFile_SetOpenCodeHook"]=wasmExports["PyFile_SetOpenCodeHook"];_Py_IsInitialized=Module["_Py_IsInitialized"]=wasmExports["Py_IsInitialized"];_PyFile_OpenCodeObject=Module["_PyFile_OpenCodeObject"]=wasmExports["PyFile_OpenCodeObject"];_PyFile_OpenCode=Module["_PyFile_OpenCode"]=wasmExports["PyFile_OpenCode"];__PyUnicode_AsUTF8String=Module["__PyUnicode_AsUTF8String"]=wasmExports["_PyUnicode_AsUTF8String"];__Py_write=Module["__Py_write"]=wasmExports["_Py_write"];_PyFloat_GetMax=Module["_PyFloat_GetMax"]=wasmExports["PyFloat_GetMax"];_PyFloat_GetMin=Module["_PyFloat_GetMin"]=wasmExports["PyFloat_GetMin"];_PyFloat_GetInfo=Module["_PyFloat_GetInfo"]=wasmExports["PyFloat_GetInfo"];_PyStructSequence_New=Module["_PyStructSequence_New"]=wasmExports["PyStructSequence_New"];_PyStructSequence_SetItem=Module["_PyStructSequence_SetItem"]=wasmExports["PyStructSequence_SetItem"];__PyFloat_ExactDealloc=Module["__PyFloat_ExactDealloc"]=wasmExports["_PyFloat_ExactDealloc"];_PyLong_GetSign=Module["_PyLong_GetSign"]=wasmExports["PyLong_GetSign"];_frexp=Module["_frexp"]=wasmExports["frexp"];_modf=Module["_modf"]=wasmExports["modf"];_PyLong_FromDouble=Module["_PyLong_FromDouble"]=wasmExports["PyLong_FromDouble"];__PyLong_Lshift=Module["__PyLong_Lshift"]=wasmExports["_PyLong_Lshift"];_PyFloat_Pack2=Module["_PyFloat_Pack2"]=wasmExports["PyFloat_Pack2"];_ldexp=Module["_ldexp"]=wasmExports["ldexp"];_PyFloat_Pack4=Module["_PyFloat_Pack4"]=wasmExports["PyFloat_Pack4"];_PyFloat_Pack8=Module["_PyFloat_Pack8"]=wasmExports["PyFloat_Pack8"];_PyFloat_Unpack2=Module["_PyFloat_Unpack2"]=wasmExports["PyFloat_Unpack2"];_PyFloat_Unpack4=Module["_PyFloat_Unpack4"]=wasmExports["PyFloat_Unpack4"];_PyFloat_Unpack8=Module["_PyFloat_Unpack8"]=wasmExports["PyFloat_Unpack8"];_fmod=Module["_fmod"]=wasmExports["fmod"];_PyErr_SetFromErrno=Module["_PyErr_SetFromErrno"]=wasmExports["PyErr_SetFromErrno"];_round=Module["_round"]=wasmExports["round"];_strtol=Module["_strtol"]=wasmExports["strtol"];_Py_ReprEnter=Module["_Py_ReprEnter"]=wasmExports["Py_ReprEnter"];_PyDict_Update=Module["_PyDict_Update"]=wasmExports["PyDict_Update"];_Py_ReprLeave=Module["_Py_ReprLeave"]=wasmExports["Py_ReprLeave"];_PyDict_Size=Module["_PyDict_Size"]=wasmExports["PyDict_Size"];_PyFrame_GetLineNumber=Module["_PyFrame_GetLineNumber"]=wasmExports["PyFrame_GetLineNumber"];_PyFrame_New=Module["_PyFrame_New"]=wasmExports["PyFrame_New"];_PyFrame_GetVar=Module["_PyFrame_GetVar"]=wasmExports["PyFrame_GetVar"];__PyUnicode_Equal=Module["__PyUnicode_Equal"]=wasmExports["_PyUnicode_Equal"];_PyFrame_GetVarString=Module["_PyFrame_GetVarString"]=wasmExports["PyFrame_GetVarString"];_PyFrame_FastToLocalsWithError=Module["_PyFrame_FastToLocalsWithError"]=wasmExports["PyFrame_FastToLocalsWithError"];_PyFrame_FastToLocals=Module["_PyFrame_FastToLocals"]=wasmExports["PyFrame_FastToLocals"];_PyFrame_LocalsToFast=Module["_PyFrame_LocalsToFast"]=wasmExports["PyFrame_LocalsToFast"];__PyFrame_IsEntryFrame=Module["__PyFrame_IsEntryFrame"]=wasmExports["_PyFrame_IsEntryFrame"];_PyFrame_GetCode=Module["_PyFrame_GetCode"]=wasmExports["PyFrame_GetCode"];_PyFrame_GetBack=Module["_PyFrame_GetBack"]=wasmExports["PyFrame_GetBack"];_PyFrame_GetLocals=Module["_PyFrame_GetLocals"]=wasmExports["PyFrame_GetLocals"];_PyFrame_GetGlobals=Module["_PyFrame_GetGlobals"]=wasmExports["PyFrame_GetGlobals"];_PyFrame_GetBuiltins=Module["_PyFrame_GetBuiltins"]=wasmExports["PyFrame_GetBuiltins"];_PyFrame_GetLasti=Module["_PyFrame_GetLasti"]=wasmExports["PyFrame_GetLasti"];_PyFrame_GetGenerator=Module["_PyFrame_GetGenerator"]=wasmExports["PyFrame_GetGenerator"];__PyErr_SetKeyError=Module["__PyErr_SetKeyError"]=wasmExports["_PyErr_SetKeyError"];_PyDict_DelItem=Module["_PyDict_DelItem"]=wasmExports["PyDict_DelItem"];_PyDict_Pop=Module["_PyDict_Pop"]=wasmExports["PyDict_Pop"];_PyCompile_OpcodeStackEffect=Module["_PyCompile_OpcodeStackEffect"]=wasmExports["PyCompile_OpcodeStackEffect"];_PyFunction_AddWatcher=Module["_PyFunction_AddWatcher"]=wasmExports["PyFunction_AddWatcher"];_PyFunction_ClearWatcher=Module["_PyFunction_ClearWatcher"]=wasmExports["PyFunction_ClearWatcher"];_PyFunction_NewWithQualName=Module["_PyFunction_NewWithQualName"]=wasmExports["PyFunction_NewWithQualName"];__PyFunction_SetVersion=Module["__PyFunction_SetVersion"]=wasmExports["_PyFunction_SetVersion"];_PyFunction_New=Module["_PyFunction_New"]=wasmExports["PyFunction_New"];_PyFunction_GetCode=Module["_PyFunction_GetCode"]=wasmExports["PyFunction_GetCode"];_PyFunction_GetGlobals=Module["_PyFunction_GetGlobals"]=wasmExports["PyFunction_GetGlobals"];_PyFunction_GetModule=Module["_PyFunction_GetModule"]=wasmExports["PyFunction_GetModule"];_PyFunction_GetDefaults=Module["_PyFunction_GetDefaults"]=wasmExports["PyFunction_GetDefaults"];_PyFunction_SetDefaults=Module["_PyFunction_SetDefaults"]=wasmExports["PyFunction_SetDefaults"];__PyEval_StopTheWorld=Module["__PyEval_StopTheWorld"]=wasmExports["_PyEval_StopTheWorld"];__PyEval_StartTheWorld=Module["__PyEval_StartTheWorld"]=wasmExports["_PyEval_StartTheWorld"];_PyFunction_SetVectorcall=Module["_PyFunction_SetVectorcall"]=wasmExports["PyFunction_SetVectorcall"];_PyFunction_GetKwDefaults=Module["_PyFunction_GetKwDefaults"]=wasmExports["PyFunction_GetKwDefaults"];_PyFunction_SetKwDefaults=Module["_PyFunction_SetKwDefaults"]=wasmExports["PyFunction_SetKwDefaults"];_PyFunction_GetClosure=Module["_PyFunction_GetClosure"]=wasmExports["PyFunction_GetClosure"];_PyFunction_SetClosure=Module["_PyFunction_SetClosure"]=wasmExports["PyFunction_SetClosure"];_PyFunction_GetAnnotations=Module["_PyFunction_GetAnnotations"]=wasmExports["PyFunction_GetAnnotations"];_PyFunction_SetAnnotations=Module["_PyFunction_SetAnnotations"]=wasmExports["PyFunction_SetAnnotations"];__PyFunction_VerifyStateless=Module["__PyFunction_VerifyStateless"]=wasmExports["_PyFunction_VerifyStateless"];_PyClassMethod_New=Module["_PyClassMethod_New"]=wasmExports["PyClassMethod_New"];_PyStaticMethod_New=Module["_PyStaticMethod_New"]=wasmExports["PyStaticMethod_New"];__PyInterpolation_Build=Module["__PyInterpolation_Build"]=wasmExports["_PyInterpolation_Build"];_PyCallIter_New=Module["_PyCallIter_New"]=wasmExports["PyCallIter_New"];_PyList_GetItemRef=Module["_PyList_GetItemRef"]=wasmExports["PyList_GetItemRef"];_PyList_SetItem=Module["_PyList_SetItem"]=wasmExports["PyList_SetItem"];_PyList_Insert=Module["_PyList_Insert"]=wasmExports["PyList_Insert"];_PyList_GetSlice=Module["_PyList_GetSlice"]=wasmExports["PyList_GetSlice"];__PySet_NextEntryRef=Module["__PySet_NextEntryRef"]=wasmExports["_PySet_NextEntryRef"];_PyList_Clear=Module["_PyList_Clear"]=wasmExports["PyList_Clear"];__PyList_FromStackRefStealOnSuccess=Module["__PyList_FromStackRefStealOnSuccess"]=wasmExports["_PyList_FromStackRefStealOnSuccess"];__PyList_SliceSubscript=Module["__PyList_SliceSubscript"]=wasmExports["_PyList_SliceSubscript"];_PyUnicodeWriter_WriteRepr=Module["_PyUnicodeWriter_WriteRepr"]=wasmExports["PyUnicodeWriter_WriteRepr"];__PyEval_SliceIndexNotNone=Module["__PyEval_SliceIndexNotNone"]=wasmExports["_PyEval_SliceIndexNotNone"];_PyObject_HashNotImplemented=Module["_PyObject_HashNotImplemented"]=wasmExports["PyObject_HashNotImplemented"];__PyLong_New=Module["__PyLong_New"]=wasmExports["_PyLong_New"];__PyLong_FromDigits=Module["__PyLong_FromDigits"]=wasmExports["_PyLong_FromDigits"];_PyLong_FromUnsignedLong=Module["_PyLong_FromUnsignedLong"]=wasmExports["PyLong_FromUnsignedLong"];_PyLong_FromUnsignedLongLong=Module["_PyLong_FromUnsignedLongLong"]=wasmExports["PyLong_FromUnsignedLongLong"];_PyLong_AsUnsignedLong=Module["_PyLong_AsUnsignedLong"]=wasmExports["PyLong_AsUnsignedLong"];_PyLong_AsSize_t=Module["_PyLong_AsSize_t"]=wasmExports["PyLong_AsSize_t"];_PyLong_AsUnsignedLongMask=Module["_PyLong_AsUnsignedLongMask"]=wasmExports["PyLong_AsUnsignedLongMask"];_PyLong_IsPositive=Module["_PyLong_IsPositive"]=wasmExports["PyLong_IsPositive"];_PyLong_IsNegative=Module["_PyLong_IsNegative"]=wasmExports["PyLong_IsNegative"];_PyLong_IsZero=Module["_PyLong_IsZero"]=wasmExports["PyLong_IsZero"];__PyLong_Sign=Module["__PyLong_Sign"]=wasmExports["_PyLong_Sign"];__PyLong_FromByteArray=Module["__PyLong_FromByteArray"]=wasmExports["_PyLong_FromByteArray"];_PyLong_AsNativeBytes=Module["_PyLong_AsNativeBytes"]=wasmExports["PyLong_AsNativeBytes"];_PyLong_FromNativeBytes=Module["_PyLong_FromNativeBytes"]=wasmExports["PyLong_FromNativeBytes"];_PyLong_FromUnsignedNativeBytes=Module["_PyLong_FromUnsignedNativeBytes"]=wasmExports["PyLong_FromUnsignedNativeBytes"];_PyLong_AsVoidPtr=Module["_PyLong_AsVoidPtr"]=wasmExports["PyLong_AsVoidPtr"];_PyLong_FromLongLong=Module["_PyLong_FromLongLong"]=wasmExports["PyLong_FromLongLong"];_PyLong_AsLongLong=Module["_PyLong_AsLongLong"]=wasmExports["PyLong_AsLongLong"];_PyLong_AsUnsignedLongLong=Module["_PyLong_AsUnsignedLongLong"]=wasmExports["PyLong_AsUnsignedLongLong"];_PyLong_AsUnsignedLongLongMask=Module["_PyLong_AsUnsignedLongLongMask"]=wasmExports["PyLong_AsUnsignedLongLongMask"];_PyLong_AsLongLongAndOverflow=Module["_PyLong_AsLongLongAndOverflow"]=wasmExports["PyLong_AsLongLongAndOverflow"];__PyLong_UnsignedShort_Converter=Module["__PyLong_UnsignedShort_Converter"]=wasmExports["_PyLong_UnsignedShort_Converter"];__PyLong_UnsignedInt_Converter=Module["__PyLong_UnsignedInt_Converter"]=wasmExports["_PyLong_UnsignedInt_Converter"];__PyLong_UnsignedLong_Converter=Module["__PyLong_UnsignedLong_Converter"]=wasmExports["_PyLong_UnsignedLong_Converter"];__PyLong_UnsignedLongLong_Converter=Module["__PyLong_UnsignedLongLong_Converter"]=wasmExports["_PyLong_UnsignedLongLong_Converter"];__PyLong_Size_t_Converter=Module["__PyLong_Size_t_Converter"]=wasmExports["_PyLong_Size_t_Converter"];__PyLong_UInt8_Converter=Module["__PyLong_UInt8_Converter"]=wasmExports["_PyLong_UInt8_Converter"];__PyLong_UInt16_Converter=Module["__PyLong_UInt16_Converter"]=wasmExports["_PyLong_UInt16_Converter"];__PyLong_UInt32_Converter=Module["__PyLong_UInt32_Converter"]=wasmExports["_PyLong_UInt32_Converter"];__PyLong_UInt64_Converter=Module["__PyLong_UInt64_Converter"]=wasmExports["_PyLong_UInt64_Converter"];__PyUnicodeWriter_PrepareInternal=Module["__PyUnicodeWriter_PrepareInternal"]=wasmExports["_PyUnicodeWriter_PrepareInternal"];__PyUnicodeWriter_WriteStr=Module["__PyUnicodeWriter_WriteStr"]=wasmExports["_PyUnicodeWriter_WriteStr"];__PyLong_Frexp=Module["__PyLong_Frexp"]=wasmExports["_PyLong_Frexp"];__PyLong_ExactDealloc=Module["__PyLong_ExactDealloc"]=wasmExports["_PyLong_ExactDealloc"];__PyLong_Add=Module["__PyLong_Add"]=wasmExports["_PyLong_Add"];__PyLong_Subtract=Module["__PyLong_Subtract"]=wasmExports["_PyLong_Subtract"];__PyLong_Multiply=Module["__PyLong_Multiply"]=wasmExports["_PyLong_Multiply"];__PyLong_Rshift=Module["__PyLong_Rshift"]=wasmExports["_PyLong_Rshift"];__PyLong_GCD=Module["__PyLong_GCD"]=wasmExports["_PyLong_GCD"];__PyLong_DivmodNear=Module["__PyLong_DivmodNear"]=wasmExports["_PyLong_DivmodNear"];_PyLong_GetInfo=Module["_PyLong_GetInfo"]=wasmExports["PyLong_GetInfo"];_PyUnstable_Long_IsCompact=Module["_PyUnstable_Long_IsCompact"]=wasmExports["PyUnstable_Long_IsCompact"];_PyUnstable_Long_CompactValue=Module["_PyUnstable_Long_CompactValue"]=wasmExports["PyUnstable_Long_CompactValue"];_PyLong_FromInt32=Module["_PyLong_FromInt32"]=wasmExports["PyLong_FromInt32"];_PyLong_FromUInt32=Module["_PyLong_FromUInt32"]=wasmExports["PyLong_FromUInt32"];_PyLong_FromInt64=Module["_PyLong_FromInt64"]=wasmExports["PyLong_FromInt64"];_PyLong_FromUInt64=Module["_PyLong_FromUInt64"]=wasmExports["PyLong_FromUInt64"];_PyLong_AsInt32=Module["_PyLong_AsInt32"]=wasmExports["PyLong_AsInt32"];_PyLong_AsInt64=Module["_PyLong_AsInt64"]=wasmExports["PyLong_AsInt64"];_PyLong_AsUInt32=Module["_PyLong_AsUInt32"]=wasmExports["PyLong_AsUInt32"];_PyLong_AsUInt64=Module["_PyLong_AsUInt64"]=wasmExports["PyLong_AsUInt64"];_PyLong_GetNativeLayout=Module["_PyLong_GetNativeLayout"]=wasmExports["PyLong_GetNativeLayout"];_PyLong_Export=Module["_PyLong_Export"]=wasmExports["PyLong_Export"];_PyLong_FreeExport=Module["_PyLong_FreeExport"]=wasmExports["PyLong_FreeExport"];_PyLongWriter_Create=Module["_PyLongWriter_Create"]=wasmExports["PyLongWriter_Create"];_PyLongWriter_Discard=Module["_PyLongWriter_Discard"]=wasmExports["PyLongWriter_Discard"];_PyLongWriter_Finish=Module["_PyLongWriter_Finish"]=wasmExports["PyLongWriter_Finish"];_PyObject_Bytes=Module["_PyObject_Bytes"]=wasmExports["PyObject_Bytes"];__PyObject_AssertFailed=Module["__PyObject_AssertFailed"]=wasmExports["_PyObject_AssertFailed"];__PyDict_NewPresized=Module["__PyDict_NewPresized"]=wasmExports["_PyDict_NewPresized"];_PyDict_GetItem=Module["_PyDict_GetItem"]=wasmExports["PyDict_GetItem"];__PyErr_GetRaisedException=Module["__PyErr_GetRaisedException"]=wasmExports["_PyErr_GetRaisedException"];__PyDict_GetItem_KnownHash=Module["__PyDict_GetItem_KnownHash"]=wasmExports["_PyDict_GetItem_KnownHash"];__PyDict_GetItemRef_KnownHash_LockHeld=Module["__PyDict_GetItemRef_KnownHash_LockHeld"]=wasmExports["_PyDict_GetItemRef_KnownHash_LockHeld"];__PyDict_GetItemStringWithError=Module["__PyDict_GetItemStringWithError"]=wasmExports["_PyDict_GetItemStringWithError"];__PyDict_LoadGlobal=Module["__PyDict_LoadGlobal"]=wasmExports["_PyDict_LoadGlobal"];__PyDict_LoadGlobalStackRef=Module["__PyDict_LoadGlobalStackRef"]=wasmExports["_PyDict_LoadGlobalStackRef"];_PyEval_GetBuiltins=Module["_PyEval_GetBuiltins"]=wasmExports["PyEval_GetBuiltins"];__PyDict_SetItem_Take2=Module["__PyDict_SetItem_Take2"]=wasmExports["_PyDict_SetItem_Take2"];__PyDict_SetItem_KnownHash_LockHeld=Module["__PyDict_SetItem_KnownHash_LockHeld"]=wasmExports["_PyDict_SetItem_KnownHash_LockHeld"];__PyDict_SetItem_KnownHash=Module["__PyDict_SetItem_KnownHash"]=wasmExports["_PyDict_SetItem_KnownHash"];__PyDict_DelItem_KnownHash=Module["__PyDict_DelItem_KnownHash"]=wasmExports["_PyDict_DelItem_KnownHash"];__PyDict_DelItemIf=Module["__PyDict_DelItemIf"]=wasmExports["_PyDict_DelItemIf"];_PyDict_Clear=Module["_PyDict_Clear"]=wasmExports["PyDict_Clear"];_PyDict_PopString=Module["_PyDict_PopString"]=wasmExports["PyDict_PopString"];__PyDict_Pop=Module["__PyDict_Pop"]=wasmExports["_PyDict_Pop"];_PyDict_MergeFromSeq2=Module["_PyDict_MergeFromSeq2"]=wasmExports["PyDict_MergeFromSeq2"];__PyErr_FormatNote=Module["__PyErr_FormatNote"]=wasmExports["_PyErr_FormatNote"];_PyDict_Merge=Module["_PyDict_Merge"]=wasmExports["PyDict_Merge"];__PyDict_MergeEx=Module["__PyDict_MergeEx"]=wasmExports["_PyDict_MergeEx"];_PyDict_SetDefaultRef=Module["_PyDict_SetDefaultRef"]=wasmExports["PyDict_SetDefaultRef"];_PyDict_SetDefault=Module["_PyDict_SetDefault"]=wasmExports["PyDict_SetDefault"];__PyDict_SizeOf=Module["__PyDict_SizeOf"]=wasmExports["_PyDict_SizeOf"];_PyDict_ContainsString=Module["_PyDict_ContainsString"]=wasmExports["PyDict_ContainsString"];_PyDict_GetItemString=Module["_PyDict_GetItemString"]=wasmExports["PyDict_GetItemString"];_PyDict_GetItemStringRef=Module["_PyDict_GetItemStringRef"]=wasmExports["PyDict_GetItemStringRef"];_PyDict_DelItemString=Module["_PyDict_DelItemString"]=wasmExports["PyDict_DelItemString"];_PyObject_VisitManagedDict=Module["_PyObject_VisitManagedDict"]=wasmExports["PyObject_VisitManagedDict"];__PyObject_SetManagedDict=Module["__PyObject_SetManagedDict"]=wasmExports["_PyObject_SetManagedDict"];_PyObject_ClearManagedDict=Module["_PyObject_ClearManagedDict"]=wasmExports["PyObject_ClearManagedDict"];_PyDict_Watch=Module["_PyDict_Watch"]=wasmExports["PyDict_Watch"];_PyDict_Unwatch=Module["_PyDict_Unwatch"]=wasmExports["PyDict_Unwatch"];_PyDict_AddWatcher=Module["_PyDict_AddWatcher"]=wasmExports["PyDict_AddWatcher"];_PyDict_ClearWatcher=Module["_PyDict_ClearWatcher"]=wasmExports["PyDict_ClearWatcher"];__PyDict_SendEvent=Module["__PyDict_SendEvent"]=wasmExports["_PyDict_SendEvent"];_PyArg_ValidateKeywordArguments=Module["_PyArg_ValidateKeywordArguments"]=wasmExports["PyArg_ValidateKeywordArguments"];_PyODict_New=Module["_PyODict_New"]=wasmExports["PyODict_New"];_PyODict_SetItem=Module["_PyODict_SetItem"]=wasmExports["PyODict_SetItem"];_PyODict_DelItem=Module["_PyODict_DelItem"]=wasmExports["PyODict_DelItem"];__PyErr_ChainExceptions1=Module["__PyErr_ChainExceptions1"]=wasmExports["_PyErr_ChainExceptions1"];_PyMemoryView_FromMemory=Module["_PyMemoryView_FromMemory"]=wasmExports["PyMemoryView_FromMemory"];_PyMemoryView_FromBuffer=Module["_PyMemoryView_FromBuffer"]=wasmExports["PyMemoryView_FromBuffer"];_PyMemoryView_GetContiguous=Module["_PyMemoryView_GetContiguous"]=wasmExports["PyMemoryView_GetContiguous"];_PyUnicode_AsASCIIString=Module["_PyUnicode_AsASCIIString"]=wasmExports["PyUnicode_AsASCIIString"];_PyCFunction_New=Module["_PyCFunction_New"]=wasmExports["PyCFunction_New"];_PyCFunction_NewEx=Module["_PyCFunction_NewEx"]=wasmExports["PyCFunction_NewEx"];_PyCFunction_GetFunction=Module["_PyCFunction_GetFunction"]=wasmExports["PyCFunction_GetFunction"];_PyCFunction_GetSelf=Module["_PyCFunction_GetSelf"]=wasmExports["PyCFunction_GetSelf"];_PyCFunction_GetFlags=Module["_PyCFunction_GetFlags"]=wasmExports["PyCFunction_GetFlags"];_PyModuleDef_Init=Module["_PyModuleDef_Init"]=wasmExports["PyModuleDef_Init"];_PyModule_NewObject=Module["_PyModule_NewObject"]=wasmExports["PyModule_NewObject"];_PyModule_New=Module["_PyModule_New"]=wasmExports["PyModule_New"];_PyModule_SetDocString=Module["_PyModule_SetDocString"]=wasmExports["PyModule_SetDocString"];_PyModule_FromDefAndSpec2=Module["_PyModule_FromDefAndSpec2"]=wasmExports["PyModule_FromDefAndSpec2"];_PyModule_ExecDef=Module["_PyModule_ExecDef"]=wasmExports["PyModule_ExecDef"];_PyModule_GetName=Module["_PyModule_GetName"]=wasmExports["PyModule_GetName"];_PyModule_GetFilenameObject=Module["_PyModule_GetFilenameObject"]=wasmExports["PyModule_GetFilenameObject"];_PyModule_GetFilename=Module["_PyModule_GetFilename"]=wasmExports["PyModule_GetFilename"];_PyModule_GetDef=Module["_PyModule_GetDef"]=wasmExports["PyModule_GetDef"];_PyModule_GetState=Module["_PyModule_GetState"]=wasmExports["PyModule_GetState"];_PyUnicode_AsWideChar=Module["_PyUnicode_AsWideChar"]=wasmExports["PyUnicode_AsWideChar"];_wcsrchr=Module["_wcsrchr"]=wasmExports["wcsrchr"];_wcscmp=Module["_wcscmp"]=wasmExports["wcscmp"];__PySys_GetOptionalAttrString=Module["__PySys_GetOptionalAttrString"]=wasmExports["_PySys_GetOptionalAttrString"];_PySys_FormatStderr=Module["_PySys_FormatStderr"]=wasmExports["PySys_FormatStderr"];_PyUnicode_Join=Module["_PyUnicode_Join"]=wasmExports["PyUnicode_Join"];__PyNamespace_New=Module["__PyNamespace_New"]=wasmExports["_PyNamespace_New"];__PyArg_NoPositional=Module["__PyArg_NoPositional"]=wasmExports["_PyArg_NoPositional"];__PyUnicode_CheckConsistency=Module["__PyUnicode_CheckConsistency"]=wasmExports["_PyUnicode_CheckConsistency"];__PyObject_IsFreed=Module["__PyObject_IsFreed"]=wasmExports["_PyObject_IsFreed"];_fwrite=Module["_fwrite"]=wasmExports["fwrite"];_fputc=Module["_fputc"]=wasmExports["fputc"];__PyObject_Dump=Module["__PyObject_Dump"]=wasmExports["_PyObject_Dump"];_Py_IncRef=Module["_Py_IncRef"]=wasmExports["Py_IncRef"];_Py_DecRef=Module["_Py_DecRef"]=wasmExports["Py_DecRef"];__Py_IncRef=Module["__Py_IncRef"]=wasmExports["_Py_IncRef"];__Py_DecRef=Module["__Py_DecRef"]=wasmExports["_Py_DecRef"];_PyObject_Init=Module["_PyObject_Init"]=wasmExports["PyObject_Init"];_PyObject_InitVar=Module["_PyObject_InitVar"]=wasmExports["PyObject_InitVar"];_PyObject_CallFinalizer=Module["_PyObject_CallFinalizer"]=wasmExports["PyObject_CallFinalizer"];_PyObject_Print=Module["_PyObject_Print"]=wasmExports["PyObject_Print"];_ferror=Module["_ferror"]=wasmExports["ferror"];__Py_BreakPoint=Module["__Py_BreakPoint"]=wasmExports["_Py_BreakPoint"];_PyUnicode_DecodeASCII=Module["_PyUnicode_DecodeASCII"]=wasmExports["PyUnicode_DecodeASCII"];_PyObject_HasAttrStringWithError=Module["_PyObject_HasAttrStringWithError"]=wasmExports["PyObject_HasAttrStringWithError"];_PyObject_GetOptionalAttrString=Module["_PyObject_GetOptionalAttrString"]=wasmExports["PyObject_GetOptionalAttrString"];_PyObject_HasAttrString=Module["_PyObject_HasAttrString"]=wasmExports["PyObject_HasAttrString"];_PyObject_DelAttrString=Module["_PyObject_DelAttrString"]=wasmExports["PyObject_DelAttrString"];__PyObject_GetDictPtr=Module["__PyObject_GetDictPtr"]=wasmExports["_PyObject_GetDictPtr"];__PyObject_GenericSetAttrWithDict=Module["__PyObject_GenericSetAttrWithDict"]=wasmExports["_PyObject_GenericSetAttrWithDict"];_PyObject_Not=Module["_PyObject_Not"]=wasmExports["PyObject_Not"];_PyObject_IS_GC=Module["_PyObject_IS_GC"]=wasmExports["PyObject_IS_GC"];__Py_SetImmortalUntracked=Module["__Py_SetImmortalUntracked"]=wasmExports["_Py_SetImmortalUntracked"];_PyUnstable_Object_EnableDeferredRefcount=Module["_PyUnstable_Object_EnableDeferredRefcount"]=wasmExports["PyUnstable_Object_EnableDeferredRefcount"];_PyUnstable_Object_IsUniqueReferencedTemporary=Module["_PyUnstable_Object_IsUniqueReferencedTemporary"]=wasmExports["PyUnstable_Object_IsUniqueReferencedTemporary"];_PyUnstable_TryIncRef=Module["_PyUnstable_TryIncRef"]=wasmExports["PyUnstable_TryIncRef"];_PyUnstable_EnableTryIncRef=Module["_PyUnstable_EnableTryIncRef"]=wasmExports["PyUnstable_EnableTryIncRef"];__Py_ResurrectReference=Module["__Py_ResurrectReference"]=wasmExports["_Py_ResurrectReference"];__Py_ForgetReference=Module["__Py_ForgetReference"]=wasmExports["_Py_ForgetReference"];_PyThreadState_GetDict=Module["_PyThreadState_GetDict"]=wasmExports["PyThreadState_GetDict"];__PyTrash_thread_deposit_object=Module["__PyTrash_thread_deposit_object"]=wasmExports["_PyTrash_thread_deposit_object"];__PyTrash_thread_destroy_chain=Module["__PyTrash_thread_destroy_chain"]=wasmExports["_PyTrash_thread_destroy_chain"];_PyObject_GET_WEAKREFS_LISTPTR=Module["_PyObject_GET_WEAKREFS_LISTPTR"]=wasmExports["PyObject_GET_WEAKREFS_LISTPTR"];_Py_NewRef=Module["_Py_NewRef"]=wasmExports["Py_NewRef"];_Py_XNewRef=Module["_Py_XNewRef"]=wasmExports["Py_XNewRef"];_Py_Is=Module["_Py_Is"]=wasmExports["Py_Is"];_Py_IsNone=Module["_Py_IsNone"]=wasmExports["Py_IsNone"];_Py_IsTrue=Module["_Py_IsTrue"]=wasmExports["Py_IsTrue"];_Py_IsFalse=Module["_Py_IsFalse"]=wasmExports["Py_IsFalse"];__Py_SetRefcnt=Module["__Py_SetRefcnt"]=wasmExports["_Py_SetRefcnt"];_PyRefTracer_SetTracer=Module["_PyRefTracer_SetTracer"]=wasmExports["PyRefTracer_SetTracer"];_PyRefTracer_GetTracer=Module["_PyRefTracer_GetTracer"]=wasmExports["PyRefTracer_GetTracer"];_Py_GetConstantBorrowed=Module["_Py_GetConstantBorrowed"]=wasmExports["Py_GetConstantBorrowed"];_Py_TYPE=Module["_Py_TYPE"]=wasmExports["Py_TYPE"];_Py_REFCNT=Module["_Py_REFCNT"]=wasmExports["Py_REFCNT"];_PyUnstable_IsImmortal=Module["_PyUnstable_IsImmortal"]=wasmExports["PyUnstable_IsImmortal"];_PyUnstable_Object_IsUniquelyReferenced=Module["_PyUnstable_Object_IsUniquelyReferenced"]=wasmExports["PyUnstable_Object_IsUniquelyReferenced"];_sleep=Module["_sleep"]=wasmExports["sleep"];_abort=Module["_abort"]=wasmExports["abort"];_getenv=Module["_getenv"]=wasmExports["getenv"];_sbrk=Module["_sbrk"]=wasmExports["sbrk"];_clock_gettime=Module["_clock_gettime"]=wasmExports["clock_gettime"];_vsnprintf=Module["_vsnprintf"]=wasmExports["vsnprintf"];_atexit=Module["_atexit"]=wasmExports["atexit"];_strstr=Module["_strstr"]=wasmExports["strstr"];_snprintf=Module["_snprintf"]=wasmExports["snprintf"];_calloc=Module["_calloc"]=wasmExports["calloc"];_realloc=Module["_realloc"]=wasmExports["realloc"];_wcslen=Module["_wcslen"]=wasmExports["wcslen"];__PyMem_GetCurrentAllocatorName=Module["__PyMem_GetCurrentAllocatorName"]=wasmExports["_PyMem_GetCurrentAllocatorName"];_PyMem_SetupDebugHooks=Module["_PyMem_SetupDebugHooks"]=wasmExports["PyMem_SetupDebugHooks"];_PyMem_GetAllocator=Module["_PyMem_GetAllocator"]=wasmExports["PyMem_GetAllocator"];_PyMem_SetAllocator=Module["_PyMem_SetAllocator"]=wasmExports["PyMem_SetAllocator"];_PyObject_GetArenaAllocator=Module["_PyObject_GetArenaAllocator"]=wasmExports["PyObject_GetArenaAllocator"];_PyObject_SetArenaAllocator=Module["_PyObject_SetArenaAllocator"]=wasmExports["PyObject_SetArenaAllocator"];_PyMem_RawMalloc=Module["_PyMem_RawMalloc"]=wasmExports["PyMem_RawMalloc"];_PyMem_RawCalloc=Module["_PyMem_RawCalloc"]=wasmExports["PyMem_RawCalloc"];__PyMem_Strdup=Module["__PyMem_Strdup"]=wasmExports["_PyMem_Strdup"];__PyMutex_LockTimed=Module["__PyMutex_LockTimed"]=wasmExports["_PyMutex_LockTimed"];_PyPickleBuffer_FromObject=Module["_PyPickleBuffer_FromObject"]=wasmExports["PyPickleBuffer_FromObject"];_PyPickleBuffer_GetBuffer=Module["_PyPickleBuffer_GetBuffer"]=wasmExports["PyPickleBuffer_GetBuffer"];_PyPickleBuffer_Release=Module["_PyPickleBuffer_Release"]=wasmExports["PyPickleBuffer_Release"];__PySlice_GetLongIndices=Module["__PySlice_GetLongIndices"]=wasmExports["_PySlice_GetLongIndices"];__PySet_AddTakeRef=Module["__PySet_AddTakeRef"]=wasmExports["_PySet_AddTakeRef"];__PySet_Contains=Module["__PySet_Contains"]=wasmExports["_PySet_Contains"];_PySet_Size=Module["_PySet_Size"]=wasmExports["PySet_Size"];_PySet_Clear=Module["_PySet_Clear"]=wasmExports["PySet_Clear"];_PySet_Pop=Module["_PySet_Pop"]=wasmExports["PySet_Pop"];_PySlice_GetIndices=Module["_PySlice_GetIndices"]=wasmExports["PySlice_GetIndices"];_PySlice_GetIndicesEx=Module["_PySlice_GetIndicesEx"]=wasmExports["PySlice_GetIndicesEx"];_PyStructSequence_GetItem=Module["_PyStructSequence_GetItem"]=wasmExports["PyStructSequence_GetItem"];_PyStructSequence_InitType2=Module["_PyStructSequence_InitType2"]=wasmExports["PyStructSequence_InitType2"];_PyStructSequence_InitType=Module["_PyStructSequence_InitType"]=wasmExports["PyStructSequence_InitType"];__PyStructSequence_NewType=Module["__PyStructSequence_NewType"]=wasmExports["_PyStructSequence_NewType"];_PyUnicodeWriter_WriteUTF8=Module["_PyUnicodeWriter_WriteUTF8"]=wasmExports["PyUnicodeWriter_WriteUTF8"];_PyStructSequence_NewType=Module["_PyStructSequence_NewType"]=wasmExports["PyStructSequence_NewType"];_PyUnicode_Concat=Module["_PyUnicode_Concat"]=wasmExports["PyUnicode_Concat"];__PyTemplate_Build=Module["__PyTemplate_Build"]=wasmExports["_PyTemplate_Build"];_PyTuple_SetItem=Module["_PyTuple_SetItem"]=wasmExports["PyTuple_SetItem"];__PyTuple_FromStackRefStealOnSuccess=Module["__PyTuple_FromStackRefStealOnSuccess"]=wasmExports["_PyTuple_FromStackRefStealOnSuccess"];__PyObject_GC_Resize=Module["__PyObject_GC_Resize"]=wasmExports["_PyObject_GC_Resize"];__PyStaticType_GetBuiltins=Module["__PyStaticType_GetBuiltins"]=wasmExports["_PyStaticType_GetBuiltins"];_PyType_GetDict=Module["_PyType_GetDict"]=wasmExports["PyType_GetDict"];_strrchr=Module["_strrchr"]=wasmExports["strrchr"];_PyType_ClearCache=Module["_PyType_ClearCache"]=wasmExports["PyType_ClearCache"];_PyType_AddWatcher=Module["_PyType_AddWatcher"]=wasmExports["PyType_AddWatcher"];_PyType_ClearWatcher=Module["_PyType_ClearWatcher"]=wasmExports["PyType_ClearWatcher"];_PyType_Watch=Module["_PyType_Watch"]=wasmExports["PyType_Watch"];_PyType_Unwatch=Module["_PyType_Unwatch"]=wasmExports["PyType_Unwatch"];_PyType_Modified=Module["_PyType_Modified"]=wasmExports["PyType_Modified"];__PyType_SetVersion=Module["__PyType_SetVersion"]=wasmExports["_PyType_SetVersion"];_PyUnstable_Type_AssignVersionTag=Module["_PyUnstable_Type_AssignVersionTag"]=wasmExports["PyUnstable_Type_AssignVersionTag"];_PyType_GetFullyQualifiedName=Module["_PyType_GetFullyQualifiedName"]=wasmExports["PyType_GetFullyQualifiedName"];__PyType_NewManagedObject=Module["__PyType_NewManagedObject"]=wasmExports["_PyType_NewManagedObject"];__PyObject_LookupSpecialMethod=Module["__PyObject_LookupSpecialMethod"]=wasmExports["_PyObject_LookupSpecialMethod"];__PyObject_MaybeCallSpecialNoArgs=Module["__PyObject_MaybeCallSpecialNoArgs"]=wasmExports["_PyObject_MaybeCallSpecialNoArgs"];__PyObject_MaybeCallSpecialOneArg=Module["__PyObject_MaybeCallSpecialOneArg"]=wasmExports["_PyObject_MaybeCallSpecialOneArg"];_PyType_GetFlags=Module["_PyType_GetFlags"]=wasmExports["PyType_GetFlags"];_PyType_SUPPORTS_WEAKREFS=Module["_PyType_SUPPORTS_WEAKREFS"]=wasmExports["PyType_SUPPORTS_WEAKREFS"];_PyType_FromMetaclass=Module["_PyType_FromMetaclass"]=wasmExports["PyType_FromMetaclass"];_PyType_FromModuleAndSpec=Module["_PyType_FromModuleAndSpec"]=wasmExports["PyType_FromModuleAndSpec"];_PyType_FromSpec=Module["_PyType_FromSpec"]=wasmExports["PyType_FromSpec"];_PyType_GetName=Module["_PyType_GetName"]=wasmExports["PyType_GetName"];_PyType_GetModuleName=Module["_PyType_GetModuleName"]=wasmExports["PyType_GetModuleName"];_PyType_GetSlot=Module["_PyType_GetSlot"]=wasmExports["PyType_GetSlot"];_PyType_GetModule=Module["_PyType_GetModule"]=wasmExports["PyType_GetModule"];_PyType_GetModuleState=Module["_PyType_GetModuleState"]=wasmExports["PyType_GetModuleState"];_PyType_GetModuleByDef=Module["_PyType_GetModuleByDef"]=wasmExports["PyType_GetModuleByDef"];_PyType_GetBaseByToken=Module["_PyType_GetBaseByToken"]=wasmExports["PyType_GetBaseByToken"];_PyObject_GetTypeData=Module["_PyObject_GetTypeData"]=wasmExports["PyObject_GetTypeData"];_PyType_GetTypeDataSize=Module["_PyType_GetTypeDataSize"]=wasmExports["PyType_GetTypeDataSize"];_PyObject_GetItemData=Module["_PyObject_GetItemData"]=wasmExports["PyObject_GetItemData"];__PyType_Lookup=Module["__PyType_Lookup"]=wasmExports["_PyType_Lookup"];_PyUnicode_IsIdentifier=Module["_PyUnicode_IsIdentifier"]=wasmExports["PyUnicode_IsIdentifier"];_PyEval_GetGlobals=Module["_PyEval_GetGlobals"]=wasmExports["PyEval_GetGlobals"];__PyStaticType_InitForExtension=Module["__PyStaticType_InitForExtension"]=wasmExports["_PyStaticType_InitForExtension"];__PyType_GetSlotWrapperNames=Module["__PyType_GetSlotWrapperNames"]=wasmExports["_PyType_GetSlotWrapperNames"];_PyType_Freeze=Module["_PyType_Freeze"]=wasmExports["PyType_Freeze"];__PySuper_Lookup=Module["__PySuper_Lookup"]=wasmExports["_PySuper_Lookup"];_PyWeakref_NewRef=Module["_PyWeakref_NewRef"]=wasmExports["PyWeakref_NewRef"];_PyImport_GetModule=Module["_PyImport_GetModule"]=wasmExports["PyImport_GetModule"];_PyImport_Import=Module["_PyImport_Import"]=wasmExports["PyImport_Import"];__Py_hashtable_len=Module["__Py_hashtable_len"]=wasmExports["_Py_hashtable_len"];__Py_GetErrorHandler=Module["__Py_GetErrorHandler"]=wasmExports["_Py_GetErrorHandler"];_PyUnicode_CopyCharacters=Module["_PyUnicode_CopyCharacters"]=wasmExports["PyUnicode_CopyCharacters"];_PyUnicode_Resize=Module["_PyUnicode_Resize"]=wasmExports["PyUnicode_Resize"];_PyUnicode_FromWideChar=Module["_PyUnicode_FromWideChar"]=wasmExports["PyUnicode_FromWideChar"];_PyUnicodeWriter_WriteWideChar=Module["_PyUnicodeWriter_WriteWideChar"]=wasmExports["PyUnicodeWriter_WriteWideChar"];_PyUnicodeWriter_WriteUCS4=Module["_PyUnicodeWriter_WriteUCS4"]=wasmExports["PyUnicodeWriter_WriteUCS4"];_PyUnicode_FromKindAndData=Module["_PyUnicode_FromKindAndData"]=wasmExports["PyUnicode_FromKindAndData"];_PyUnicode_AsUCS4=Module["_PyUnicode_AsUCS4"]=wasmExports["PyUnicode_AsUCS4"];_PyUnicode_AsUCS4Copy=Module["_PyUnicode_AsUCS4Copy"]=wasmExports["PyUnicode_AsUCS4Copy"];__PyUnicodeWriter_WriteASCIIString=Module["__PyUnicodeWriter_WriteASCIIString"]=wasmExports["_PyUnicodeWriter_WriteASCIIString"];_PyUnicode_Fill=Module["_PyUnicode_Fill"]=wasmExports["PyUnicode_Fill"];_PyUnicodeWriter_Format=Module["_PyUnicodeWriter_Format"]=wasmExports["PyUnicodeWriter_Format"];_PyUnicode_AsWideCharString=Module["_PyUnicode_AsWideCharString"]=wasmExports["PyUnicode_AsWideCharString"];_PyUnicode_FromOrdinal=Module["_PyUnicode_FromOrdinal"]=wasmExports["PyUnicode_FromOrdinal"];_PyUnicode_FromObject=Module["_PyUnicode_FromObject"]=wasmExports["PyUnicode_FromObject"];_PyCodec_LookupError=Module["_PyCodec_LookupError"]=wasmExports["PyCodec_LookupError"];_PyUnicode_DecodeUTF16Stateful=Module["_PyUnicode_DecodeUTF16Stateful"]=wasmExports["PyUnicode_DecodeUTF16Stateful"];_PyUnicode_DecodeUTF32Stateful=Module["_PyUnicode_DecodeUTF32Stateful"]=wasmExports["PyUnicode_DecodeUTF32Stateful"];_PyUnicode_DecodeUTF16=Module["_PyUnicode_DecodeUTF16"]=wasmExports["PyUnicode_DecodeUTF16"];_PyUnicode_DecodeUTF32=Module["_PyUnicode_DecodeUTF32"]=wasmExports["PyUnicode_DecodeUTF32"];_PyUnicode_AsDecodedObject=Module["_PyUnicode_AsDecodedObject"]=wasmExports["PyUnicode_AsDecodedObject"];_PyCodec_Decode=Module["_PyCodec_Decode"]=wasmExports["PyCodec_Decode"];_PyUnicode_AsDecodedUnicode=Module["_PyUnicode_AsDecodedUnicode"]=wasmExports["PyUnicode_AsDecodedUnicode"];_PyUnicode_AsEncodedObject=Module["_PyUnicode_AsEncodedObject"]=wasmExports["PyUnicode_AsEncodedObject"];_PyCodec_Encode=Module["_PyCodec_Encode"]=wasmExports["PyCodec_Encode"];_PyUnicode_EncodeLocale=Module["_PyUnicode_EncodeLocale"]=wasmExports["PyUnicode_EncodeLocale"];__Py_EncodeLocaleEx=Module["__Py_EncodeLocaleEx"]=wasmExports["_Py_EncodeLocaleEx"];_PyCodec_StrictErrors=Module["_PyCodec_StrictErrors"]=wasmExports["PyCodec_StrictErrors"];_PyUnicode_EncodeFSDefault=Module["_PyUnicode_EncodeFSDefault"]=wasmExports["PyUnicode_EncodeFSDefault"];__PyUnicode_EncodeUTF16=Module["__PyUnicode_EncodeUTF16"]=wasmExports["_PyUnicode_EncodeUTF16"];__PyUnicode_EncodeUTF32=Module["__PyUnicode_EncodeUTF32"]=wasmExports["_PyUnicode_EncodeUTF32"];_PyUnicode_AsEncodedUnicode=Module["_PyUnicode_AsEncodedUnicode"]=wasmExports["PyUnicode_AsEncodedUnicode"];_PyUnicode_DecodeLocaleAndSize=Module["_PyUnicode_DecodeLocaleAndSize"]=wasmExports["PyUnicode_DecodeLocaleAndSize"];__Py_DecodeLocaleEx=Module["__Py_DecodeLocaleEx"]=wasmExports["_Py_DecodeLocaleEx"];_PyUnicode_DecodeLocale=Module["_PyUnicode_DecodeLocale"]=wasmExports["PyUnicode_DecodeLocale"];_PyUnicode_DecodeFSDefaultAndSize=Module["_PyUnicode_DecodeFSDefaultAndSize"]=wasmExports["PyUnicode_DecodeFSDefaultAndSize"];_PyUnicode_FSConverter=Module["_PyUnicode_FSConverter"]=wasmExports["PyUnicode_FSConverter"];_PyOS_FSPath=Module["_PyOS_FSPath"]=wasmExports["PyOS_FSPath"];_PyUnicode_FSDecoder=Module["_PyUnicode_FSDecoder"]=wasmExports["PyUnicode_FSDecoder"];_wmemchr=Module["_wmemchr"]=wasmExports["wmemchr"];__PyUnicode_AsUTF8NoNUL=Module["__PyUnicode_AsUTF8NoNUL"]=wasmExports["_PyUnicode_AsUTF8NoNUL"];_PyUnicode_GetSize=Module["_PyUnicode_GetSize"]=wasmExports["PyUnicode_GetSize"];_PyUnicode_GetLength=Module["_PyUnicode_GetLength"]=wasmExports["PyUnicode_GetLength"];_PyUnicode_WriteChar=Module["_PyUnicode_WriteChar"]=wasmExports["PyUnicode_WriteChar"];_PyUnicode_DecodeUTF7=Module["_PyUnicode_DecodeUTF7"]=wasmExports["PyUnicode_DecodeUTF7"];_PyUnicode_DecodeUTF7Stateful=Module["_PyUnicode_DecodeUTF7Stateful"]=wasmExports["PyUnicode_DecodeUTF7Stateful"];_PyUnicode_AsUTF32String=Module["_PyUnicode_AsUTF32String"]=wasmExports["PyUnicode_AsUTF32String"];_PyUnicode_AsUTF16String=Module["_PyUnicode_AsUTF16String"]=wasmExports["PyUnicode_AsUTF16String"];_PyUnicode_DecodeUnicodeEscape=Module["_PyUnicode_DecodeUnicodeEscape"]=wasmExports["PyUnicode_DecodeUnicodeEscape"];_PyUnicode_AsUnicodeEscapeString=Module["_PyUnicode_AsUnicodeEscapeString"]=wasmExports["PyUnicode_AsUnicodeEscapeString"];_PyUnicode_DecodeRawUnicodeEscape=Module["_PyUnicode_DecodeRawUnicodeEscape"]=wasmExports["PyUnicode_DecodeRawUnicodeEscape"];_PyUnicode_AsRawUnicodeEscapeString=Module["_PyUnicode_AsRawUnicodeEscapeString"]=wasmExports["PyUnicode_AsRawUnicodeEscapeString"];_PyUnicode_AsLatin1String=Module["_PyUnicode_AsLatin1String"]=wasmExports["PyUnicode_AsLatin1String"];__PyUnicodeWriter_PrepareKindInternal=Module["__PyUnicodeWriter_PrepareKindInternal"]=wasmExports["_PyUnicodeWriter_PrepareKindInternal"];_PyUnicode_DecodeCharmap=Module["_PyUnicode_DecodeCharmap"]=wasmExports["PyUnicode_DecodeCharmap"];_PyUnicode_BuildEncodingMap=Module["_PyUnicode_BuildEncodingMap"]=wasmExports["PyUnicode_BuildEncodingMap"];_PyUnicode_AsCharmapString=Module["_PyUnicode_AsCharmapString"]=wasmExports["PyUnicode_AsCharmapString"];_PyUnicode_Translate=Module["_PyUnicode_Translate"]=wasmExports["PyUnicode_Translate"];__PyUnicode_ToDecimalDigit=Module["__PyUnicode_ToDecimalDigit"]=wasmExports["_PyUnicode_ToDecimalDigit"];_PyUnicode_Count=Module["_PyUnicode_Count"]=wasmExports["PyUnicode_Count"];_PyUnicode_Find=Module["_PyUnicode_Find"]=wasmExports["PyUnicode_Find"];_PyUnicode_FindChar=Module["_PyUnicode_FindChar"]=wasmExports["PyUnicode_FindChar"];_PyUnicode_Tailmatch=Module["_PyUnicode_Tailmatch"]=wasmExports["PyUnicode_Tailmatch"];__PyUnicode_JoinArray=Module["__PyUnicode_JoinArray"]=wasmExports["_PyUnicode_JoinArray"];_PyUnicode_Splitlines=Module["_PyUnicode_Splitlines"]=wasmExports["PyUnicode_Splitlines"];__PyUnicode_IsLinebreak=Module["__PyUnicode_IsLinebreak"]=wasmExports["_PyUnicode_IsLinebreak"];_wmemcmp=Module["_wmemcmp"]=wasmExports["wmemcmp"];_PyUnicode_EqualToUTF8=Module["_PyUnicode_EqualToUTF8"]=wasmExports["PyUnicode_EqualToUTF8"];_PyUnicode_EqualToUTF8AndSize=Module["_PyUnicode_EqualToUTF8AndSize"]=wasmExports["PyUnicode_EqualToUTF8AndSize"];_PyUnicode_RichCompare=Module["_PyUnicode_RichCompare"]=wasmExports["PyUnicode_RichCompare"];_PyUnicode_Contains=Module["_PyUnicode_Contains"]=wasmExports["PyUnicode_Contains"];_PyUnicode_Append=Module["_PyUnicode_Append"]=wasmExports["PyUnicode_Append"];_PyUnicode_AppendAndDel=Module["_PyUnicode_AppendAndDel"]=wasmExports["PyUnicode_AppendAndDel"];_PyUnicode_Replace=Module["_PyUnicode_Replace"]=wasmExports["PyUnicode_Replace"];_PyUnicode_Split=Module["_PyUnicode_Split"]=wasmExports["PyUnicode_Split"];_PyUnicode_Partition=Module["_PyUnicode_Partition"]=wasmExports["PyUnicode_Partition"];_PyUnicode_RPartition=Module["_PyUnicode_RPartition"]=wasmExports["PyUnicode_RPartition"];_PyUnicode_RSplit=Module["_PyUnicode_RSplit"]=wasmExports["PyUnicode_RSplit"];__PyUnicodeWriter_WriteChar=Module["__PyUnicodeWriter_WriteChar"]=wasmExports["_PyUnicodeWriter_WriteChar"];__PyUnicodeWriter_WriteSubstring=Module["__PyUnicodeWriter_WriteSubstring"]=wasmExports["_PyUnicodeWriter_WriteSubstring"];_PyUnicodeWriter_WriteSubstring=Module["_PyUnicodeWriter_WriteSubstring"]=wasmExports["PyUnicodeWriter_WriteSubstring"];_PyUnicodeWriter_DecodeUTF8Stateful=Module["_PyUnicodeWriter_DecodeUTF8Stateful"]=wasmExports["PyUnicodeWriter_DecodeUTF8Stateful"];__PyUnicodeWriter_WriteLatin1String=Module["__PyUnicodeWriter_WriteLatin1String"]=wasmExports["_PyUnicodeWriter_WriteLatin1String"];_PyUnicode_Format=Module["_PyUnicode_Format"]=wasmExports["PyUnicode_Format"];__PyUnicode_ExactDealloc=Module["__PyUnicode_ExactDealloc"]=wasmExports["_PyUnicode_ExactDealloc"];__Py_hashtable_new_full=Module["__Py_hashtable_new_full"]=wasmExports["_Py_hashtable_new_full"];__Py_hashtable_get=Module["__Py_hashtable_get"]=wasmExports["_Py_hashtable_get"];__Py_hashtable_set=Module["__Py_hashtable_set"]=wasmExports["_Py_hashtable_set"];__PyUnicode_InternInPlace=Module["__PyUnicode_InternInPlace"]=wasmExports["_PyUnicode_InternInPlace"];_PyUnicode_InternInPlace=Module["_PyUnicode_InternInPlace"]=wasmExports["PyUnicode_InternInPlace"];_PyUnicode_InternImmortal=Module["_PyUnicode_InternImmortal"]=wasmExports["PyUnicode_InternImmortal"];__Py_hashtable_destroy=Module["__Py_hashtable_destroy"]=wasmExports["_Py_hashtable_destroy"];_PyInit__string=Module["_PyInit__string"]=wasmExports["PyInit__string"];_PyUnicode_KIND=Module["_PyUnicode_KIND"]=wasmExports["PyUnicode_KIND"];_PyUnicode_DATA=Module["_PyUnicode_DATA"]=wasmExports["PyUnicode_DATA"];__PyUnicode_IsLowercase=Module["__PyUnicode_IsLowercase"]=wasmExports["_PyUnicode_IsLowercase"];__PyUnicode_IsUppercase=Module["__PyUnicode_IsUppercase"]=wasmExports["_PyUnicode_IsUppercase"];__PyUnicode_IsTitlecase=Module["__PyUnicode_IsTitlecase"]=wasmExports["_PyUnicode_IsTitlecase"];__PyUnicode_IsDecimalDigit=Module["__PyUnicode_IsDecimalDigit"]=wasmExports["_PyUnicode_IsDecimalDigit"];__PyUnicode_IsDigit=Module["__PyUnicode_IsDigit"]=wasmExports["_PyUnicode_IsDigit"];__PyUnicode_IsNumeric=Module["__PyUnicode_IsNumeric"]=wasmExports["_PyUnicode_IsNumeric"];__PyUnicode_IsAlpha=Module["__PyUnicode_IsAlpha"]=wasmExports["_PyUnicode_IsAlpha"];__PyUnicode_ToNumeric=Module["__PyUnicode_ToNumeric"]=wasmExports["_PyUnicode_ToNumeric"];__PyUnicode_ToTitlecase=Module["__PyUnicode_ToTitlecase"]=wasmExports["_PyUnicode_ToTitlecase"];__PyUnicode_ToDigit=Module["__PyUnicode_ToDigit"]=wasmExports["_PyUnicode_ToDigit"];__PyUnicode_ToUppercase=Module["__PyUnicode_ToUppercase"]=wasmExports["_PyUnicode_ToUppercase"];__PyUnicode_ToLowercase=Module["__PyUnicode_ToLowercase"]=wasmExports["_PyUnicode_ToLowercase"];__PyWeakref_ClearRef=Module["__PyWeakref_ClearRef"]=wasmExports["_PyWeakref_ClearRef"];_PyWeakref_NewProxy=Module["_PyWeakref_NewProxy"]=wasmExports["PyWeakref_NewProxy"];_PyWeakref_IsDead=Module["_PyWeakref_IsDead"]=wasmExports["PyWeakref_IsDead"];_PyWeakref_GetRef=Module["_PyWeakref_GetRef"]=wasmExports["PyWeakref_GetRef"];_PyWeakref_GetObject=Module["_PyWeakref_GetObject"]=wasmExports["PyWeakref_GetObject"];_PyUnstable_Object_ClearWeakRefsNoCallbacks=Module["_PyUnstable_Object_ClearWeakRefsNoCallbacks"]=wasmExports["PyUnstable_Object_ClearWeakRefsNoCallbacks"];__PyWeakref_IsDead=Module["__PyWeakref_IsDead"]=wasmExports["_PyWeakref_IsDead"];_PyInit__contextvars=Module["_PyInit__contextvars"]=wasmExports["PyInit__contextvars"];_PyContext_CopyCurrent=Module["_PyContext_CopyCurrent"]=wasmExports["PyContext_CopyCurrent"];_PyModule_AddType=Module["_PyModule_AddType"]=wasmExports["PyModule_AddType"];_PyContextVar_New=Module["_PyContextVar_New"]=wasmExports["PyContextVar_New"];_PyErr_ResourceWarning=Module["_PyErr_ResourceWarning"]=wasmExports["PyErr_ResourceWarning"];__PyRecursiveMutex_Lock=Module["__PyRecursiveMutex_Lock"]=wasmExports["_PyRecursiveMutex_Lock"];_PyContextVar_Get=Module["_PyContextVar_Get"]=wasmExports["PyContextVar_Get"];_PyErr_WarnExplicit=Module["_PyErr_WarnExplicit"]=wasmExports["PyErr_WarnExplicit"];_PyErr_WarnExplicitFormat=Module["_PyErr_WarnExplicitFormat"]=wasmExports["PyErr_WarnExplicitFormat"];__Py_IsInterpreterFinalizing=Module["__Py_IsInterpreterFinalizing"]=wasmExports["_Py_IsInterpreterFinalizing"];__PyWarnings_Init=Module["__PyWarnings_Init"]=wasmExports["_PyWarnings_Init"];_PyThreadState_GetFrame=Module["_PyThreadState_GetFrame"]=wasmExports["PyThreadState_GetFrame"];__PySys_GetOptionalAttr=Module["__PySys_GetOptionalAttr"]=wasmExports["_PySys_GetOptionalAttr"];__Py_DisplaySourceLine=Module["__Py_DisplaySourceLine"]=wasmExports["_Py_DisplaySourceLine"];_PyModule_AddObjectRef=Module["_PyModule_AddObjectRef"]=wasmExports["PyModule_AddObjectRef"];_PyInit__ast=Module["_PyInit__ast"]=wasmExports["PyInit__ast"];__PyOnceFlag_CallOnceSlow=Module["__PyOnceFlag_CallOnceSlow"]=wasmExports["_PyOnceFlag_CallOnceSlow"];_PyModule_AddIntConstant=Module["_PyModule_AddIntConstant"]=wasmExports["PyModule_AddIntConstant"];_PyInit__tokenize=Module["_PyInit__tokenize"]=wasmExports["PyInit__tokenize"];_PyErr_SyntaxLocationObject=Module["_PyErr_SyntaxLocationObject"]=wasmExports["PyErr_SyntaxLocationObject"];_PyImport_ImportModuleLevelObject=Module["_PyImport_ImportModuleLevelObject"]=wasmExports["PyImport_ImportModuleLevelObject"];__PySys_GetRequiredAttrString=Module["__PySys_GetRequiredAttrString"]=wasmExports["_PySys_GetRequiredAttrString"];_PyEval_MergeCompilerFlags=Module["_PyEval_MergeCompilerFlags"]=wasmExports["PyEval_MergeCompilerFlags"];__PyArena_New=Module["__PyArena_New"]=wasmExports["_PyArena_New"];__PyArena_Free=Module["__PyArena_Free"]=wasmExports["_PyArena_Free"];__PyAST_Compile=Module["__PyAST_Compile"]=wasmExports["_PyAST_Compile"];_Py_CompileStringObject=Module["_Py_CompileStringObject"]=wasmExports["Py_CompileStringObject"];_PyEval_EvalCode=Module["_PyEval_EvalCode"]=wasmExports["PyEval_EvalCode"];_PyRun_StringFlags=Module["_PyRun_StringFlags"]=wasmExports["PyRun_StringFlags"];_PyEval_EvalCodeEx=Module["_PyEval_EvalCodeEx"]=wasmExports["PyEval_EvalCodeEx"];__PySys_GetRequiredAttr=Module["__PySys_GetRequiredAttr"]=wasmExports["_PySys_GetRequiredAttr"];_Py_GetRecursionLimit=Module["_Py_GetRecursionLimit"]=wasmExports["Py_GetRecursionLimit"];_Py_SetRecursionLimit=Module["_Py_SetRecursionLimit"]=wasmExports["Py_SetRecursionLimit"];_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=wasmExports["emscripten_stack_get_base"];_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=wasmExports["emscripten_stack_get_end"];__Py_InitializeRecursionLimits=Module["__Py_InitializeRecursionLimits"]=wasmExports["_Py_InitializeRecursionLimits"];_PyUnstable_ThreadState_SetStackProtection=Module["_PyUnstable_ThreadState_SetStackProtection"]=wasmExports["PyUnstable_ThreadState_SetStackProtection"];_PyUnstable_ThreadState_ResetStackProtection=Module["_PyUnstable_ThreadState_ResetStackProtection"]=wasmExports["PyUnstable_ThreadState_ResetStackProtection"];__PyEval_MatchKeys=Module["__PyEval_MatchKeys"]=wasmExports["_PyEval_MatchKeys"];__PyEval_MatchClass=Module["__PyEval_MatchClass"]=wasmExports["_PyEval_MatchClass"];__PyEvalFramePushAndInit=Module["__PyEvalFramePushAndInit"]=wasmExports["_PyEvalFramePushAndInit"];_PyEval_EvalFrame=Module["_PyEval_EvalFrame"]=wasmExports["PyEval_EvalFrame"];_PyEval_EvalFrameEx=Module["_PyEval_EvalFrameEx"]=wasmExports["PyEval_EvalFrameEx"];__PyObjectArray_FromStackRefArray=Module["__PyObjectArray_FromStackRefArray"]=wasmExports["_PyObjectArray_FromStackRefArray"];__PyObjectArray_Free=Module["__PyObjectArray_Free"]=wasmExports["_PyObjectArray_Free"];__PyEval_FrameClearAndPop=Module["__PyEval_FrameClearAndPop"]=wasmExports["_PyEval_FrameClearAndPop"];_PyTraceBack_Here=Module["_PyTraceBack_Here"]=wasmExports["PyTraceBack_Here"];__PyEval_MonitorRaise=Module["__PyEval_MonitorRaise"]=wasmExports["_PyEval_MonitorRaise"];__Py_HandlePending=Module["__Py_HandlePending"]=wasmExports["_Py_HandlePending"];__Py_Check_ArgsIterable=Module["__Py_Check_ArgsIterable"]=wasmExports["_Py_Check_ArgsIterable"];__PyEval_CheckExceptStarTypeValid=Module["__PyEval_CheckExceptStarTypeValid"]=wasmExports["_PyEval_CheckExceptStarTypeValid"];__PyEval_ExceptionGroupMatch=Module["__PyEval_ExceptionGroupMatch"]=wasmExports["_PyEval_ExceptionGroupMatch"];_PyErr_SetHandledException=Module["_PyErr_SetHandledException"]=wasmExports["PyErr_SetHandledException"];__PyEval_FormatExcCheckArg=Module["__PyEval_FormatExcCheckArg"]=wasmExports["_PyEval_FormatExcCheckArg"];__PyEval_FormatKwargsError=Module["__PyEval_FormatKwargsError"]=wasmExports["_PyEval_FormatKwargsError"];__PyEval_GetANext=Module["__PyEval_GetANext"]=wasmExports["_PyEval_GetANext"];__PyEval_GetAwaitable=Module["__PyEval_GetAwaitable"]=wasmExports["_PyEval_GetAwaitable"];__PyEval_ImportFrom=Module["__PyEval_ImportFrom"]=wasmExports["_PyEval_ImportFrom"];__PyEval_ImportName=Module["__PyEval_ImportName"]=wasmExports["_PyEval_ImportName"];__PyEval_FormatExcUnbound=Module["__PyEval_FormatExcUnbound"]=wasmExports["_PyEval_FormatExcUnbound"];__PyEval_LoadGlobalStackRef=Module["__PyEval_LoadGlobalStackRef"]=wasmExports["_PyEval_LoadGlobalStackRef"];__PyEval_LoadName=Module["__PyEval_LoadName"]=wasmExports["_PyEval_LoadName"];__PyEval_SpecialMethodCanSuggest=Module["__PyEval_SpecialMethodCanSuggest"]=wasmExports["_PyEval_SpecialMethodCanSuggest"];__PyThreadState_PopFrame=Module["__PyThreadState_PopFrame"]=wasmExports["_PyThreadState_PopFrame"];__PyEval_UnpackIterableStackRef=Module["__PyEval_UnpackIterableStackRef"]=wasmExports["_PyEval_UnpackIterableStackRef"];__PyEval_CheckExceptTypeValid=Module["__PyEval_CheckExceptTypeValid"]=wasmExports["_PyEval_CheckExceptTypeValid"];_PyThreadState_EnterTracing=Module["_PyThreadState_EnterTracing"]=wasmExports["PyThreadState_EnterTracing"];_PyThreadState_LeaveTracing=Module["_PyThreadState_LeaveTracing"]=wasmExports["PyThreadState_LeaveTracing"];_PyEval_SetProfile=Module["_PyEval_SetProfile"]=wasmExports["PyEval_SetProfile"];__PyEval_SetProfile=Module["__PyEval_SetProfile"]=wasmExports["_PyEval_SetProfile"];_PyEval_SetProfileAllThreads=Module["_PyEval_SetProfileAllThreads"]=wasmExports["PyEval_SetProfileAllThreads"];_PyEval_SetTrace=Module["_PyEval_SetTrace"]=wasmExports["PyEval_SetTrace"];_PyEval_SetTraceAllThreads=Module["_PyEval_SetTraceAllThreads"]=wasmExports["PyEval_SetTraceAllThreads"];_PyEval_GetFrame=Module["_PyEval_GetFrame"]=wasmExports["PyEval_GetFrame"];_PyEval_GetLocals=Module["_PyEval_GetLocals"]=wasmExports["PyEval_GetLocals"];__PyInterpreterState_IsRunningMain=Module["__PyInterpreterState_IsRunningMain"]=wasmExports["_PyInterpreterState_IsRunningMain"];_PyImport_ImportModuleLevel=Module["_PyImport_ImportModuleLevel"]=wasmExports["PyImport_ImportModuleLevel"];_PyEval_GetFrameLocals=Module["_PyEval_GetFrameLocals"]=wasmExports["PyEval_GetFrameLocals"];_PyEval_GetFrameGlobals=Module["_PyEval_GetFrameGlobals"]=wasmExports["PyEval_GetFrameGlobals"];_PyEval_GetFrameBuiltins=Module["_PyEval_GetFrameBuiltins"]=wasmExports["PyEval_GetFrameBuiltins"];_PyEval_GetFuncName=Module["_PyEval_GetFuncName"]=wasmExports["PyEval_GetFuncName"];_PyEval_GetFuncDesc=Module["_PyEval_GetFuncDesc"]=wasmExports["PyEval_GetFuncDesc"];__PyEval_FormatAwaitableError=Module["__PyEval_FormatAwaitableError"]=wasmExports["_PyEval_FormatAwaitableError"];_PyUnstable_Eval_RequestCodeExtraIndex=Module["_PyUnstable_Eval_RequestCodeExtraIndex"]=wasmExports["PyUnstable_Eval_RequestCodeExtraIndex"];_PyCodec_Register=Module["_PyCodec_Register"]=wasmExports["PyCodec_Register"];_PyCodec_Unregister=Module["_PyCodec_Unregister"]=wasmExports["PyCodec_Unregister"];_PyCodec_KnownEncoding=Module["_PyCodec_KnownEncoding"]=wasmExports["PyCodec_KnownEncoding"];_PyCodec_Encoder=Module["_PyCodec_Encoder"]=wasmExports["PyCodec_Encoder"];_PyCodec_Decoder=Module["_PyCodec_Decoder"]=wasmExports["PyCodec_Decoder"];_PyCodec_IncrementalEncoder=Module["_PyCodec_IncrementalEncoder"]=wasmExports["PyCodec_IncrementalEncoder"];_PyCodec_IncrementalDecoder=Module["_PyCodec_IncrementalDecoder"]=wasmExports["PyCodec_IncrementalDecoder"];_PyCodec_StreamReader=Module["_PyCodec_StreamReader"]=wasmExports["PyCodec_StreamReader"];_PyCodec_StreamWriter=Module["_PyCodec_StreamWriter"]=wasmExports["PyCodec_StreamWriter"];_PyCodec_RegisterError=Module["_PyCodec_RegisterError"]=wasmExports["PyCodec_RegisterError"];_PyCodec_IgnoreErrors=Module["_PyCodec_IgnoreErrors"]=wasmExports["PyCodec_IgnoreErrors"];_PyCodec_ReplaceErrors=Module["_PyCodec_ReplaceErrors"]=wasmExports["PyCodec_ReplaceErrors"];_PyCodec_XMLCharRefReplaceErrors=Module["_PyCodec_XMLCharRefReplaceErrors"]=wasmExports["PyCodec_XMLCharRefReplaceErrors"];_PyCodec_BackslashReplaceErrors=Module["_PyCodec_BackslashReplaceErrors"]=wasmExports["PyCodec_BackslashReplaceErrors"];_PyCodec_NameReplaceErrors=Module["_PyCodec_NameReplaceErrors"]=wasmExports["PyCodec_NameReplaceErrors"];_PyStatus_NoMemory=Module["_PyStatus_NoMemory"]=wasmExports["PyStatus_NoMemory"];_PyStatus_Error=Module["_PyStatus_Error"]=wasmExports["PyStatus_Error"];_PyStatus_Ok=Module["_PyStatus_Ok"]=wasmExports["PyStatus_Ok"];__PyCompile_CleanDoc=Module["__PyCompile_CleanDoc"]=wasmExports["_PyCompile_CleanDoc"];__PyInstructionSequence_New=Module["__PyInstructionSequence_New"]=wasmExports["_PyInstructionSequence_New"];__PyCompile_CodeGen=Module["__PyCompile_CodeGen"]=wasmExports["_PyCompile_CodeGen"];__PyCompile_Assemble=Module["__PyCompile_Assemble"]=wasmExports["_PyCompile_Assemble"];_PyCode_Optimize=Module["_PyCode_Optimize"]=wasmExports["PyCode_Optimize"];__PyContext_NewHamtForTests=Module["__PyContext_NewHamtForTests"]=wasmExports["_PyContext_NewHamtForTests"];_PyContext_New=Module["_PyContext_New"]=wasmExports["PyContext_New"];_PyContext_Copy=Module["_PyContext_Copy"]=wasmExports["PyContext_Copy"];_PyContext_AddWatcher=Module["_PyContext_AddWatcher"]=wasmExports["PyContext_AddWatcher"];_PyContext_ClearWatcher=Module["_PyContext_ClearWatcher"]=wasmExports["PyContext_ClearWatcher"];_PyContext_Enter=Module["_PyContext_Enter"]=wasmExports["PyContext_Enter"];_PyContext_Exit=Module["_PyContext_Exit"]=wasmExports["PyContext_Exit"];_PyContextVar_Set=Module["_PyContextVar_Set"]=wasmExports["PyContextVar_Set"];_PyContextVar_Reset=Module["_PyContextVar_Reset"]=wasmExports["PyContextVar_Reset"];__PyCriticalSection_BeginSlow=Module["__PyCriticalSection_BeginSlow"]=wasmExports["_PyCriticalSection_BeginSlow"];__PyCriticalSection2_BeginSlow=Module["__PyCriticalSection2_BeginSlow"]=wasmExports["_PyCriticalSection2_BeginSlow"];__PyCriticalSection_SuspendAll=Module["__PyCriticalSection_SuspendAll"]=wasmExports["_PyCriticalSection_SuspendAll"];__PyCriticalSection_Resume=Module["__PyCriticalSection_Resume"]=wasmExports["_PyCriticalSection_Resume"];_PyCriticalSection_Begin=Module["_PyCriticalSection_Begin"]=wasmExports["PyCriticalSection_Begin"];_PyCriticalSection_BeginMutex=Module["_PyCriticalSection_BeginMutex"]=wasmExports["PyCriticalSection_BeginMutex"];_PyCriticalSection_End=Module["_PyCriticalSection_End"]=wasmExports["PyCriticalSection_End"];_PyCriticalSection2_Begin=Module["_PyCriticalSection2_Begin"]=wasmExports["PyCriticalSection2_Begin"];_PyCriticalSection2_BeginMutex=Module["_PyCriticalSection2_BeginMutex"]=wasmExports["PyCriticalSection2_BeginMutex"];_PyCriticalSection2_End=Module["_PyCriticalSection2_End"]=wasmExports["PyCriticalSection2_End"];__PyEval_AddPendingCall=Module["__PyEval_AddPendingCall"]=wasmExports["_PyEval_AddPendingCall"];__PyXIData_GetNotShareableErrorType=Module["__PyXIData_GetNotShareableErrorType"]=wasmExports["_PyXIData_GetNotShareableErrorType"];__PyXIData_SetNotShareableError=Module["__PyXIData_SetNotShareableError"]=wasmExports["_PyXIData_SetNotShareableError"];__PyXIData_FormatNotShareableError=Module["__PyXIData_FormatNotShareableError"]=wasmExports["_PyXIData_FormatNotShareableError"];__PyXI_UnwrapNotShareableError=Module["__PyXI_UnwrapNotShareableError"]=wasmExports["_PyXI_UnwrapNotShareableError"];__PyXI_InitFailure=Module["__PyXI_InitFailure"]=wasmExports["_PyXI_InitFailure"];__PyXIData_Lookup=Module["__PyXIData_Lookup"]=wasmExports["_PyXIData_Lookup"];__PyXIData_RegisterClass=Module["__PyXIData_RegisterClass"]=wasmExports["_PyXIData_RegisterClass"];__PyXIData_UnregisterClass=Module["__PyXIData_UnregisterClass"]=wasmExports["_PyXIData_UnregisterClass"];__PyBytes_GetData=Module["__PyBytes_GetData"]=wasmExports["_PyBytes_GetData"];__PyBytes_FromData=Module["__PyBytes_FromData"]=wasmExports["_PyBytes_FromData"];__PyBytes_FromXIData=Module["__PyBytes_FromXIData"]=wasmExports["_PyBytes_FromXIData"];__PyBytes_GetXIData=Module["__PyBytes_GetXIData"]=wasmExports["_PyBytes_GetXIData"];_PyInterpreterState_GetID=Module["_PyInterpreterState_GetID"]=wasmExports["PyInterpreterState_GetID"];__PyBytes_GetXIDataWrapped=Module["__PyBytes_GetXIDataWrapped"]=wasmExports["_PyBytes_GetXIDataWrapped"];__PyCode_FromXIData=Module["__PyCode_FromXIData"]=wasmExports["_PyCode_FromXIData"];__PyMarshal_ReadObjectFromXIData=Module["__PyMarshal_ReadObjectFromXIData"]=wasmExports["_PyMarshal_ReadObjectFromXIData"];_PyMarshal_ReadObjectFromString=Module["_PyMarshal_ReadObjectFromString"]=wasmExports["PyMarshal_ReadObjectFromString"];__PyCode_GetXIData=Module["__PyCode_GetXIData"]=wasmExports["_PyCode_GetXIData"];__PyMarshal_GetXIData=Module["__PyMarshal_GetXIData"]=wasmExports["_PyMarshal_GetXIData"];_PyMarshal_WriteObjectToString=Module["_PyMarshal_WriteObjectToString"]=wasmExports["PyMarshal_WriteObjectToString"];__PyFunction_FromXIData=Module["__PyFunction_FromXIData"]=wasmExports["_PyFunction_FromXIData"];__PyFunction_GetXIData=Module["__PyFunction_GetXIData"]=wasmExports["_PyFunction_GetXIData"];__PyXIData_New=Module["__PyXIData_New"]=wasmExports["_PyXIData_New"];__PyXIData_Free=Module["__PyXIData_Free"]=wasmExports["_PyXIData_Free"];__PyXIData_Clear=Module["__PyXIData_Clear"]=wasmExports["_PyXIData_Clear"];__PyXIData_Init=Module["__PyXIData_Init"]=wasmExports["_PyXIData_Init"];__PyXIData_InitWithSize=Module["__PyXIData_InitWithSize"]=wasmExports["_PyXIData_InitWithSize"];__PyObject_CheckXIData=Module["__PyObject_CheckXIData"]=wasmExports["_PyObject_CheckXIData"];__PyObject_GetXIDataNoFallback=Module["__PyObject_GetXIDataNoFallback"]=wasmExports["_PyObject_GetXIDataNoFallback"];__PyObject_GetXIData=Module["__PyObject_GetXIData"]=wasmExports["_PyObject_GetXIData"];__PyPickle_GetXIData=Module["__PyPickle_GetXIData"]=wasmExports["_PyPickle_GetXIData"];__PyPickle_LoadFromXIData=Module["__PyPickle_LoadFromXIData"]=wasmExports["_PyPickle_LoadFromXIData"];_PyInterpreterState_GetDict=Module["_PyInterpreterState_GetDict"]=wasmExports["PyInterpreterState_GetDict"];__PyImport_SetModule=Module["__PyImport_SetModule"]=wasmExports["_PyImport_SetModule"];__PyCode_GetScriptXIData=Module["__PyCode_GetScriptXIData"]=wasmExports["_PyCode_GetScriptXIData"];_Py_CompileStringExFlags=Module["_Py_CompileStringExFlags"]=wasmExports["Py_CompileStringExFlags"];__PyCode_GetPureScriptXIData=Module["__PyCode_GetPureScriptXIData"]=wasmExports["_PyCode_GetPureScriptXIData"];__PyXIData_NewObject=Module["__PyXIData_NewObject"]=wasmExports["_PyXIData_NewObject"];__PyXIData_Release=Module["__PyXIData_Release"]=wasmExports["_PyXIData_Release"];__PyInterpreterState_LookUpID=Module["__PyInterpreterState_LookUpID"]=wasmExports["_PyInterpreterState_LookUpID"];__PyXIData_ReleaseAndRawFree=Module["__PyXIData_ReleaseAndRawFree"]=wasmExports["_PyXIData_ReleaseAndRawFree"];__PyXI_NewExcInfo=Module["__PyXI_NewExcInfo"]=wasmExports["_PyXI_NewExcInfo"];__PyXI_FreeExcInfo=Module["__PyXI_FreeExcInfo"]=wasmExports["_PyXI_FreeExcInfo"];__PyXI_FormatExcInfo=Module["__PyXI_FormatExcInfo"]=wasmExports["_PyXI_FormatExcInfo"];__PyXI_ExcInfoAsObject=Module["__PyXI_ExcInfoAsObject"]=wasmExports["_PyXI_ExcInfoAsObject"];__PyXI_NewFailure=Module["__PyXI_NewFailure"]=wasmExports["_PyXI_NewFailure"];__PyXI_FreeFailure=Module["__PyXI_FreeFailure"]=wasmExports["_PyXI_FreeFailure"];__PyXI_GetFailureCode=Module["__PyXI_GetFailureCode"]=wasmExports["_PyXI_GetFailureCode"];__PyXI_InitFailureUTF8=Module["__PyXI_InitFailureUTF8"]=wasmExports["_PyXI_InitFailureUTF8"];__PyXI_NewSession=Module["__PyXI_NewSession"]=wasmExports["_PyXI_NewSession"];__PyXI_FreeSession=Module["__PyXI_FreeSession"]=wasmExports["_PyXI_FreeSession"];__PyXI_Enter=Module["__PyXI_Enter"]=wasmExports["_PyXI_Enter"];__PyThreadState_NewBound=Module["__PyThreadState_NewBound"]=wasmExports["_PyThreadState_NewBound"];__PyInterpreterState_SetRunningMain=Module["__PyInterpreterState_SetRunningMain"]=wasmExports["_PyInterpreterState_SetRunningMain"];__PyInterpreterState_SetNotRunningMain=Module["__PyInterpreterState_SetNotRunningMain"]=wasmExports["_PyInterpreterState_SetNotRunningMain"];_PyThreadState_Clear=Module["_PyThreadState_Clear"]=wasmExports["PyThreadState_Clear"];__PyErr_SetInterpreterAlreadyRunning=Module["__PyErr_SetInterpreterAlreadyRunning"]=wasmExports["_PyErr_SetInterpreterAlreadyRunning"];__PyXI_Exit=Module["__PyXI_Exit"]=wasmExports["_PyXI_Exit"];__PyXI_ClearResult=Module["__PyXI_ClearResult"]=wasmExports["_PyXI_ClearResult"];__PyXI_GetMainNamespace=Module["__PyXI_GetMainNamespace"]=wasmExports["_PyXI_GetMainNamespace"];__PyXI_Preserve=Module["__PyXI_Preserve"]=wasmExports["_PyXI_Preserve"];__PyXI_GetPreserved=Module["__PyXI_GetPreserved"]=wasmExports["_PyXI_GetPreserved"];_PyErr_PrintEx=Module["_PyErr_PrintEx"]=wasmExports["PyErr_PrintEx"];__PyXI_NewInterpreter=Module["__PyXI_NewInterpreter"]=wasmExports["_PyXI_NewInterpreter"];_Py_NewInterpreterFromConfig=Module["_Py_NewInterpreterFromConfig"]=wasmExports["Py_NewInterpreterFromConfig"];__PyErr_SetFromPyStatus=Module["__PyErr_SetFromPyStatus"]=wasmExports["_PyErr_SetFromPyStatus"];_PyThreadState_GetInterpreter=Module["_PyThreadState_GetInterpreter"]=wasmExports["PyThreadState_GetInterpreter"];__PyXI_EndInterpreter=Module["__PyXI_EndInterpreter"]=wasmExports["_PyXI_EndInterpreter"];__PyInterpreterState_IsReady=Module["__PyInterpreterState_IsReady"]=wasmExports["_PyInterpreterState_IsReady"];_PyInterpreterState_Delete=Module["_PyInterpreterState_Delete"]=wasmExports["PyInterpreterState_Delete"];_Py_EndInterpreter=Module["_Py_EndInterpreter"]=wasmExports["Py_EndInterpreter"];__PyErr_SetLocaleString=Module["__PyErr_SetLocaleString"]=wasmExports["_PyErr_SetLocaleString"];_PyErr_GetHandledException=Module["_PyErr_GetHandledException"]=wasmExports["PyErr_GetHandledException"];_PyErr_GetExcInfo=Module["_PyErr_GetExcInfo"]=wasmExports["PyErr_GetExcInfo"];_PyErr_SetExcInfo=Module["_PyErr_SetExcInfo"]=wasmExports["PyErr_SetExcInfo"];_PyErr_SetFromErrnoWithFilenameObject=Module["_PyErr_SetFromErrnoWithFilenameObject"]=wasmExports["PyErr_SetFromErrnoWithFilenameObject"];_PyErr_SetFromErrnoWithFilenameObjects=Module["_PyErr_SetFromErrnoWithFilenameObjects"]=wasmExports["PyErr_SetFromErrnoWithFilenameObjects"];_strerror=Module["_strerror"]=wasmExports["strerror"];_PyErr_SetImportErrorSubclass=Module["_PyErr_SetImportErrorSubclass"]=wasmExports["PyErr_SetImportErrorSubclass"];_PyErr_SetImportError=Module["_PyErr_SetImportError"]=wasmExports["PyErr_SetImportError"];_PyErr_BadInternalCall=Module["_PyErr_BadInternalCall"]=wasmExports["PyErr_BadInternalCall"];__PyErr_FormatV=Module["__PyErr_FormatV"]=wasmExports["_PyErr_FormatV"];_PyErr_FormatV=Module["_PyErr_FormatV"]=wasmExports["PyErr_FormatV"];_PyErr_NewExceptionWithDoc=Module["_PyErr_NewExceptionWithDoc"]=wasmExports["PyErr_NewExceptionWithDoc"];_PyTraceBack_Print=Module["_PyTraceBack_Print"]=wasmExports["PyTraceBack_Print"];_PyErr_WriteUnraisable=Module["_PyErr_WriteUnraisable"]=wasmExports["PyErr_WriteUnraisable"];_PyErr_SyntaxLocation=Module["_PyErr_SyntaxLocation"]=wasmExports["PyErr_SyntaxLocation"];_PyErr_SyntaxLocationEx=Module["_PyErr_SyntaxLocationEx"]=wasmExports["PyErr_SyntaxLocationEx"];_PyErr_RangedSyntaxLocationObject=Module["_PyErr_RangedSyntaxLocationObject"]=wasmExports["PyErr_RangedSyntaxLocationObject"];_PyErr_ProgramTextObject=Module["_PyErr_ProgramTextObject"]=wasmExports["PyErr_ProgramTextObject"];_PyErr_ProgramText=Module["_PyErr_ProgramText"]=wasmExports["PyErr_ProgramText"];_Py_fopen=Module["_Py_fopen"]=wasmExports["Py_fopen"];_PyCompile_OpcodeStackEffectWithJump=Module["_PyCompile_OpcodeStackEffectWithJump"]=wasmExports["PyCompile_OpcodeStackEffectWithJump"];__PyCompile_OptimizeCfg=Module["__PyCompile_OptimizeCfg"]=wasmExports["_PyCompile_OptimizeCfg"];_PyUnstable_InterpreterFrame_GetCode=Module["_PyUnstable_InterpreterFrame_GetCode"]=wasmExports["PyUnstable_InterpreterFrame_GetCode"];_PyUnstable_InterpreterFrame_GetLasti=Module["_PyUnstable_InterpreterFrame_GetLasti"]=wasmExports["PyUnstable_InterpreterFrame_GetLasti"];_Py_FrozenMain=Module["_Py_FrozenMain"]=wasmExports["Py_FrozenMain"];_Py_GETENV=Module["_Py_GETENV"]=wasmExports["Py_GETENV"];_Py_GetVersion=Module["_Py_GetVersion"]=wasmExports["Py_GetVersion"];_Py_GetCopyright=Module["_Py_GetCopyright"]=wasmExports["Py_GetCopyright"];_PyImport_ImportFrozenModule=Module["_PyImport_ImportFrozenModule"]=wasmExports["PyImport_ImportFrozenModule"];_PyRun_AnyFileExFlags=Module["_PyRun_AnyFileExFlags"]=wasmExports["PyRun_AnyFileExFlags"];_Py_FinalizeEx=Module["_Py_FinalizeEx"]=wasmExports["Py_FinalizeEx"];_PyGC_Enable=Module["_PyGC_Enable"]=wasmExports["PyGC_Enable"];_PyGC_Disable=Module["_PyGC_Disable"]=wasmExports["PyGC_Disable"];_PyGC_IsEnabled=Module["_PyGC_IsEnabled"]=wasmExports["PyGC_IsEnabled"];_PyTime_PerfCounterRaw=Module["_PyTime_PerfCounterRaw"]=wasmExports["PyTime_PerfCounterRaw"];_PyTime_AsSecondsDouble=Module["_PyTime_AsSecondsDouble"]=wasmExports["PyTime_AsSecondsDouble"];_PyGC_Collect=Module["_PyGC_Collect"]=wasmExports["PyGC_Collect"];_PyUnstable_Object_GC_NewWithExtraData=Module["_PyUnstable_Object_GC_NewWithExtraData"]=wasmExports["PyUnstable_Object_GC_NewWithExtraData"];_PyObject_GC_IsTracked=Module["_PyObject_GC_IsTracked"]=wasmExports["PyObject_GC_IsTracked"];_PyObject_GC_IsFinalized=Module["_PyObject_GC_IsFinalized"]=wasmExports["PyObject_GC_IsFinalized"];_PyUnstable_GC_VisitObjects=Module["_PyUnstable_GC_VisitObjects"]=wasmExports["PyUnstable_GC_VisitObjects"];_PyInterpreterState_ThreadHead=Module["_PyInterpreterState_ThreadHead"]=wasmExports["PyInterpreterState_ThreadHead"];_PyThreadState_Next=Module["_PyThreadState_Next"]=wasmExports["PyThreadState_Next"];_PyArg_Parse=Module["_PyArg_Parse"]=wasmExports["PyArg_Parse"];__PyArg_Parse_SizeT=Module["__PyArg_Parse_SizeT"]=wasmExports["_PyArg_Parse_SizeT"];__PyArg_ParseTuple_SizeT=Module["__PyArg_ParseTuple_SizeT"]=wasmExports["_PyArg_ParseTuple_SizeT"];_PyArg_VaParse=Module["_PyArg_VaParse"]=wasmExports["PyArg_VaParse"];__PyArg_VaParse_SizeT=Module["__PyArg_VaParse_SizeT"]=wasmExports["_PyArg_VaParse_SizeT"];__PyArg_ParseTupleAndKeywords_SizeT=Module["__PyArg_ParseTupleAndKeywords_SizeT"]=wasmExports["_PyArg_ParseTupleAndKeywords_SizeT"];_PyArg_VaParseTupleAndKeywords=Module["_PyArg_VaParseTupleAndKeywords"]=wasmExports["PyArg_VaParseTupleAndKeywords"];__PyArg_VaParseTupleAndKeywords_SizeT=Module["__PyArg_VaParseTupleAndKeywords_SizeT"]=wasmExports["_PyArg_VaParseTupleAndKeywords_SizeT"];__PyArg_ParseTupleAndKeywordsFast=Module["__PyArg_ParseTupleAndKeywordsFast"]=wasmExports["_PyArg_ParseTupleAndKeywordsFast"];_Py_GetCompiler=Module["_Py_GetCompiler"]=wasmExports["Py_GetCompiler"];_Py_GetPlatform=Module["_Py_GetPlatform"]=wasmExports["Py_GetPlatform"];_PyEval_ThreadsInitialized=Module["_PyEval_ThreadsInitialized"]=wasmExports["PyEval_ThreadsInitialized"];_PyThread_init_thread=Module["_PyThread_init_thread"]=wasmExports["PyThread_init_thread"];_pthread_cond_destroy=Module["_pthread_cond_destroy"]=wasmExports["pthread_cond_destroy"];_pthread_mutex_destroy=Module["_pthread_mutex_destroy"]=wasmExports["pthread_mutex_destroy"];_PyEval_InitThreads=Module["_PyEval_InitThreads"]=wasmExports["PyEval_InitThreads"];_PyEval_AcquireLock=Module["_PyEval_AcquireLock"]=wasmExports["PyEval_AcquireLock"];_pthread_mutex_lock=Module["_pthread_mutex_lock"]=wasmExports["pthread_mutex_lock"];_pthread_cond_timedwait=Module["_pthread_cond_timedwait"]=wasmExports["pthread_cond_timedwait"];_pthread_mutex_unlock=Module["_pthread_mutex_unlock"]=wasmExports["pthread_mutex_unlock"];_pthread_cond_signal=Module["_pthread_cond_signal"]=wasmExports["pthread_cond_signal"];_PyEval_ReleaseLock=Module["_PyEval_ReleaseLock"]=wasmExports["PyEval_ReleaseLock"];_pthread_cond_wait=Module["_pthread_cond_wait"]=wasmExports["pthread_cond_wait"];_PyEval_AcquireThread=Module["_PyEval_AcquireThread"]=wasmExports["PyEval_AcquireThread"];_PyEval_ReleaseThread=Module["_PyEval_ReleaseThread"]=wasmExports["PyEval_ReleaseThread"];_Py_AddPendingCall=Module["_Py_AddPendingCall"]=wasmExports["Py_AddPendingCall"];__PyEval_MakePendingCalls=Module["__PyEval_MakePendingCalls"]=wasmExports["_PyEval_MakePendingCalls"];_Py_MakePendingCalls=Module["_Py_MakePendingCalls"]=wasmExports["Py_MakePendingCalls"];_pthread_mutex_init=Module["_pthread_mutex_init"]=wasmExports["pthread_mutex_init"];__Py_hashtable_hash_ptr=Module["__Py_hashtable_hash_ptr"]=wasmExports["_Py_hashtable_hash_ptr"];__Py_hashtable_compare_direct=Module["__Py_hashtable_compare_direct"]=wasmExports["_Py_hashtable_compare_direct"];__Py_hashtable_size=Module["__Py_hashtable_size"]=wasmExports["_Py_hashtable_size"];__Py_hashtable_steal=Module["__Py_hashtable_steal"]=wasmExports["_Py_hashtable_steal"];__Py_hashtable_foreach=Module["__Py_hashtable_foreach"]=wasmExports["_Py_hashtable_foreach"];__Py_hashtable_new=Module["__Py_hashtable_new"]=wasmExports["_Py_hashtable_new"];__Py_hashtable_clear=Module["__Py_hashtable_clear"]=wasmExports["_Py_hashtable_clear"];__PyRecursiveMutex_Unlock=Module["__PyRecursiveMutex_Unlock"]=wasmExports["_PyRecursiveMutex_Unlock"];_PyThread_get_thread_ident_ex=Module["_PyThread_get_thread_ident_ex"]=wasmExports["PyThread_get_thread_ident_ex"];_PyImport_AddModuleRef=Module["_PyImport_AddModuleRef"]=wasmExports["PyImport_AddModuleRef"];_PyImport_AddModuleObject=Module["_PyImport_AddModuleObject"]=wasmExports["PyImport_AddModuleObject"];_PyImport_AddModule=Module["_PyImport_AddModule"]=wasmExports["PyImport_AddModule"];_PyState_FindModule=Module["_PyState_FindModule"]=wasmExports["PyState_FindModule"];__PyState_AddModule=Module["__PyState_AddModule"]=wasmExports["_PyState_AddModule"];_PyState_AddModule=Module["_PyState_AddModule"]=wasmExports["PyState_AddModule"];_PyState_RemoveModule=Module["_PyState_RemoveModule"]=wasmExports["PyState_RemoveModule"];__PyImport_ClearExtension=Module["__PyImport_ClearExtension"]=wasmExports["_PyImport_ClearExtension"];_PyImport_ExtendInittab=Module["_PyImport_ExtendInittab"]=wasmExports["PyImport_ExtendInittab"];_PyImport_GetMagicNumber=Module["_PyImport_GetMagicNumber"]=wasmExports["PyImport_GetMagicNumber"];_PyImport_GetMagicTag=Module["_PyImport_GetMagicTag"]=wasmExports["PyImport_GetMagicTag"];_PyImport_ExecCodeModule=Module["_PyImport_ExecCodeModule"]=wasmExports["PyImport_ExecCodeModule"];_PyImport_ExecCodeModuleObject=Module["_PyImport_ExecCodeModuleObject"]=wasmExports["PyImport_ExecCodeModuleObject"];_PyImport_ExecCodeModuleWithPathnames=Module["_PyImport_ExecCodeModuleWithPathnames"]=wasmExports["PyImport_ExecCodeModuleWithPathnames"];_PyImport_ExecCodeModuleEx=Module["_PyImport_ExecCodeModuleEx"]=wasmExports["PyImport_ExecCodeModuleEx"];_PyImport_ImportFrozenModuleObject=Module["_PyImport_ImportFrozenModuleObject"]=wasmExports["PyImport_ImportFrozenModuleObject"];_PyImport_GetImporter=Module["_PyImport_GetImporter"]=wasmExports["PyImport_GetImporter"];_PyImport_ImportModuleNoBlock=Module["_PyImport_ImportModuleNoBlock"]=wasmExports["PyImport_ImportModuleNoBlock"];__PyTime_AsMicroseconds=Module["__PyTime_AsMicroseconds"]=wasmExports["_PyTime_AsMicroseconds"];_PyImport_ReloadModule=Module["_PyImport_ReloadModule"]=wasmExports["PyImport_ReloadModule"];_PyImport_ImportModuleAttr=Module["_PyImport_ImportModuleAttr"]=wasmExports["PyImport_ImportModuleAttr"];_PyInit__imp=Module["_PyInit__imp"]=wasmExports["PyInit__imp"];__PyRecursiveMutex_IsLockedByCurrentThread=Module["__PyRecursiveMutex_IsLockedByCurrentThread"]=wasmExports["_PyRecursiveMutex_IsLockedByCurrentThread"];_PyModule_Add=Module["_PyModule_Add"]=wasmExports["PyModule_Add"];_PyStatus_Exit=Module["_PyStatus_Exit"]=wasmExports["PyStatus_Exit"];_PyStatus_IsError=Module["_PyStatus_IsError"]=wasmExports["PyStatus_IsError"];_PyStatus_IsExit=Module["_PyStatus_IsExit"]=wasmExports["PyStatus_IsExit"];_PyWideStringList_Insert=Module["_PyWideStringList_Insert"]=wasmExports["PyWideStringList_Insert"];_PyWideStringList_Append=Module["_PyWideStringList_Append"]=wasmExports["PyWideStringList_Append"];_Py_GetArgcArgv=Module["_Py_GetArgcArgv"]=wasmExports["Py_GetArgcArgv"];__PyConfig_InitCompatConfig=Module["__PyConfig_InitCompatConfig"]=wasmExports["_PyConfig_InitCompatConfig"];_PyConfig_InitIsolatedConfig=Module["_PyConfig_InitIsolatedConfig"]=wasmExports["PyConfig_InitIsolatedConfig"];_PyConfig_SetString=Module["_PyConfig_SetString"]=wasmExports["PyConfig_SetString"];_Py_DecodeLocale=Module["_Py_DecodeLocale"]=wasmExports["Py_DecodeLocale"];__PyConfig_AsDict=Module["__PyConfig_AsDict"]=wasmExports["_PyConfig_AsDict"];__PyConfig_FromDict=Module["__PyConfig_FromDict"]=wasmExports["_PyConfig_FromDict"];_wcschr=Module["_wcschr"]=wasmExports["wcschr"];_setvbuf=Module["_setvbuf"]=wasmExports["setvbuf"];_PyConfig_SetArgv=Module["_PyConfig_SetArgv"]=wasmExports["PyConfig_SetArgv"];_PyConfig_SetWideStringList=Module["_PyConfig_SetWideStringList"]=wasmExports["PyConfig_SetWideStringList"];_putchar=Module["_putchar"]=wasmExports["putchar"];_iprintf=Module["_iprintf"]=wasmExports["iprintf"];_wcstok=Module["_wcstok"]=wasmExports["wcstok"];_strtoul=Module["_strtoul"]=wasmExports["strtoul"];_wcstol=Module["_wcstol"]=wasmExports["wcstol"];_setlocale=Module["_setlocale"]=wasmExports["setlocale"];_PyConfig_Read=Module["_PyConfig_Read"]=wasmExports["PyConfig_Read"];__Py_GetConfigsAsDict=Module["__Py_GetConfigsAsDict"]=wasmExports["_Py_GetConfigsAsDict"];_PyInitConfig_Create=Module["_PyInitConfig_Create"]=wasmExports["PyInitConfig_Create"];_PyPreConfig_InitIsolatedConfig=Module["_PyPreConfig_InitIsolatedConfig"]=wasmExports["PyPreConfig_InitIsolatedConfig"];_PyInitConfig_Free=Module["_PyInitConfig_Free"]=wasmExports["PyInitConfig_Free"];_PyInitConfig_GetError=Module["_PyInitConfig_GetError"]=wasmExports["PyInitConfig_GetError"];_strdup=Module["_strdup"]=wasmExports["strdup"];_PyInitConfig_GetExitCode=Module["_PyInitConfig_GetExitCode"]=wasmExports["PyInitConfig_GetExitCode"];_PyInitConfig_HasOption=Module["_PyInitConfig_HasOption"]=wasmExports["PyInitConfig_HasOption"];_PyInitConfig_GetInt=Module["_PyInitConfig_GetInt"]=wasmExports["PyInitConfig_GetInt"];_PyInitConfig_GetStr=Module["_PyInitConfig_GetStr"]=wasmExports["PyInitConfig_GetStr"];_PyInitConfig_GetStrList=Module["_PyInitConfig_GetStrList"]=wasmExports["PyInitConfig_GetStrList"];_PyInitConfig_FreeStrList=Module["_PyInitConfig_FreeStrList"]=wasmExports["PyInitConfig_FreeStrList"];_PyInitConfig_SetInt=Module["_PyInitConfig_SetInt"]=wasmExports["PyInitConfig_SetInt"];_PyInitConfig_SetStr=Module["_PyInitConfig_SetStr"]=wasmExports["PyInitConfig_SetStr"];_PyInitConfig_SetStrList=Module["_PyInitConfig_SetStrList"]=wasmExports["PyInitConfig_SetStrList"];_PyInitConfig_AddModule=Module["_PyInitConfig_AddModule"]=wasmExports["PyInitConfig_AddModule"];_Py_InitializeFromInitConfig=Module["_Py_InitializeFromInitConfig"]=wasmExports["Py_InitializeFromInitConfig"];_Py_PreInitializeFromArgs=Module["_Py_PreInitializeFromArgs"]=wasmExports["Py_PreInitializeFromArgs"];_PyConfig_Get=Module["_PyConfig_Get"]=wasmExports["PyConfig_Get"];_PyConfig_GetInt=Module["_PyConfig_GetInt"]=wasmExports["PyConfig_GetInt"];_PyConfig_Names=Module["_PyConfig_Names"]=wasmExports["PyConfig_Names"];_PyConfig_Set=Module["_PyConfig_Set"]=wasmExports["PyConfig_Set"];_PySys_SetObject=Module["_PySys_SetObject"]=wasmExports["PySys_SetObject"];__PyInterpreterConfig_AsDict=Module["__PyInterpreterConfig_AsDict"]=wasmExports["_PyInterpreterConfig_AsDict"];__PyInterpreterConfig_InitFromDict=Module["__PyInterpreterConfig_InitFromDict"]=wasmExports["_PyInterpreterConfig_InitFromDict"];__PyInterpreterConfig_UpdateFromDict=Module["__PyInterpreterConfig_UpdateFromDict"]=wasmExports["_PyInterpreterConfig_UpdateFromDict"];__PyInterpreterConfig_InitFromState=Module["__PyInterpreterConfig_InitFromState"]=wasmExports["_PyInterpreterConfig_InitFromState"];_PyMonitoring_EnterScope=Module["_PyMonitoring_EnterScope"]=wasmExports["PyMonitoring_EnterScope"];_PyMonitoring_ExitScope=Module["_PyMonitoring_ExitScope"]=wasmExports["PyMonitoring_ExitScope"];__PyMonitoring_FirePyStartEvent=Module["__PyMonitoring_FirePyStartEvent"]=wasmExports["_PyMonitoring_FirePyStartEvent"];__PyMonitoring_FirePyResumeEvent=Module["__PyMonitoring_FirePyResumeEvent"]=wasmExports["_PyMonitoring_FirePyResumeEvent"];__PyMonitoring_FirePyReturnEvent=Module["__PyMonitoring_FirePyReturnEvent"]=wasmExports["_PyMonitoring_FirePyReturnEvent"];__PyMonitoring_FirePyYieldEvent=Module["__PyMonitoring_FirePyYieldEvent"]=wasmExports["_PyMonitoring_FirePyYieldEvent"];__PyMonitoring_FireCallEvent=Module["__PyMonitoring_FireCallEvent"]=wasmExports["_PyMonitoring_FireCallEvent"];__PyMonitoring_FireLineEvent=Module["__PyMonitoring_FireLineEvent"]=wasmExports["_PyMonitoring_FireLineEvent"];__PyMonitoring_FireJumpEvent=Module["__PyMonitoring_FireJumpEvent"]=wasmExports["_PyMonitoring_FireJumpEvent"];__PyMonitoring_FireBranchEvent=Module["__PyMonitoring_FireBranchEvent"]=wasmExports["_PyMonitoring_FireBranchEvent"];__PyMonitoring_FireBranchRightEvent=Module["__PyMonitoring_FireBranchRightEvent"]=wasmExports["_PyMonitoring_FireBranchRightEvent"];__PyMonitoring_FireBranchLeftEvent=Module["__PyMonitoring_FireBranchLeftEvent"]=wasmExports["_PyMonitoring_FireBranchLeftEvent"];__PyMonitoring_FireCReturnEvent=Module["__PyMonitoring_FireCReturnEvent"]=wasmExports["_PyMonitoring_FireCReturnEvent"];__PyMonitoring_FirePyThrowEvent=Module["__PyMonitoring_FirePyThrowEvent"]=wasmExports["_PyMonitoring_FirePyThrowEvent"];__PyMonitoring_FireRaiseEvent=Module["__PyMonitoring_FireRaiseEvent"]=wasmExports["_PyMonitoring_FireRaiseEvent"];__PyMonitoring_FireCRaiseEvent=Module["__PyMonitoring_FireCRaiseEvent"]=wasmExports["_PyMonitoring_FireCRaiseEvent"];__PyMonitoring_FireReraiseEvent=Module["__PyMonitoring_FireReraiseEvent"]=wasmExports["_PyMonitoring_FireReraiseEvent"];__PyMonitoring_FireExceptionHandledEvent=Module["__PyMonitoring_FireExceptionHandledEvent"]=wasmExports["_PyMonitoring_FireExceptionHandledEvent"];__PyMonitoring_FirePyUnwindEvent=Module["__PyMonitoring_FirePyUnwindEvent"]=wasmExports["_PyMonitoring_FirePyUnwindEvent"];__PyMonitoring_FireStopIterationEvent=Module["__PyMonitoring_FireStopIterationEvent"]=wasmExports["_PyMonitoring_FireStopIterationEvent"];__PyCompile_GetUnaryIntrinsicName=Module["__PyCompile_GetUnaryIntrinsicName"]=wasmExports["_PyCompile_GetUnaryIntrinsicName"];__PyCompile_GetBinaryIntrinsicName=Module["__PyCompile_GetBinaryIntrinsicName"]=wasmExports["_PyCompile_GetBinaryIntrinsicName"];_PyTime_MonotonicRaw=Module["_PyTime_MonotonicRaw"]=wasmExports["PyTime_MonotonicRaw"];__PyParkingLot_Park=Module["__PyParkingLot_Park"]=wasmExports["_PyParkingLot_Park"];__PyDeadline_Get=Module["__PyDeadline_Get"]=wasmExports["_PyDeadline_Get"];__PyParkingLot_Unpark=Module["__PyParkingLot_Unpark"]=wasmExports["_PyParkingLot_Unpark"];__PySemaphore_Init=Module["__PySemaphore_Init"]=wasmExports["_PySemaphore_Init"];__PySemaphore_Wait=Module["__PySemaphore_Wait"]=wasmExports["_PySemaphore_Wait"];__PySemaphore_Destroy=Module["__PySemaphore_Destroy"]=wasmExports["_PySemaphore_Destroy"];__PySemaphore_Wakeup=Module["__PySemaphore_Wakeup"]=wasmExports["_PySemaphore_Wakeup"];__PyEvent_IsSet=Module["__PyEvent_IsSet"]=wasmExports["_PyEvent_IsSet"];__PyEvent_Notify=Module["__PyEvent_Notify"]=wasmExports["_PyEvent_Notify"];__PyParkingLot_UnparkAll=Module["__PyParkingLot_UnparkAll"]=wasmExports["_PyParkingLot_UnparkAll"];_PyEvent_Wait=Module["_PyEvent_Wait"]=wasmExports["PyEvent_Wait"];_PyEvent_WaitTimed=Module["_PyEvent_WaitTimed"]=wasmExports["PyEvent_WaitTimed"];__PyRWMutex_RLock=Module["__PyRWMutex_RLock"]=wasmExports["_PyRWMutex_RLock"];__PyRWMutex_RUnlock=Module["__PyRWMutex_RUnlock"]=wasmExports["_PyRWMutex_RUnlock"];__PyRWMutex_Lock=Module["__PyRWMutex_Lock"]=wasmExports["_PyRWMutex_Lock"];__PyRWMutex_Unlock=Module["__PyRWMutex_Unlock"]=wasmExports["_PyRWMutex_Unlock"];__PySeqLock_LockWrite=Module["__PySeqLock_LockWrite"]=wasmExports["_PySeqLock_LockWrite"];_sched_yield=Module["_sched_yield"]=wasmExports["sched_yield"];__PySeqLock_AbandonWrite=Module["__PySeqLock_AbandonWrite"]=wasmExports["_PySeqLock_AbandonWrite"];__PySeqLock_UnlockWrite=Module["__PySeqLock_UnlockWrite"]=wasmExports["_PySeqLock_UnlockWrite"];__PySeqLock_BeginRead=Module["__PySeqLock_BeginRead"]=wasmExports["_PySeqLock_BeginRead"];__PySeqLock_EndRead=Module["__PySeqLock_EndRead"]=wasmExports["_PySeqLock_EndRead"];__PySeqLock_AfterFork=Module["__PySeqLock_AfterFork"]=wasmExports["_PySeqLock_AfterFork"];_PyMutex_IsLocked=Module["_PyMutex_IsLocked"]=wasmExports["PyMutex_IsLocked"];_PyMarshal_WriteLongToFile=Module["_PyMarshal_WriteLongToFile"]=wasmExports["PyMarshal_WriteLongToFile"];_PyMarshal_WriteObjectToFile=Module["_PyMarshal_WriteObjectToFile"]=wasmExports["PyMarshal_WriteObjectToFile"];_PyMarshal_ReadShortFromFile=Module["_PyMarshal_ReadShortFromFile"]=wasmExports["PyMarshal_ReadShortFromFile"];_PyMarshal_ReadLongFromFile=Module["_PyMarshal_ReadLongFromFile"]=wasmExports["PyMarshal_ReadLongFromFile"];_PyMarshal_ReadLastObjectFromFile=Module["_PyMarshal_ReadLastObjectFromFile"]=wasmExports["PyMarshal_ReadLastObjectFromFile"];__Py_fstat_noraise=Module["__Py_fstat_noraise"]=wasmExports["_Py_fstat_noraise"];_fread=Module["_fread"]=wasmExports["fread"];_PyMarshal_ReadObjectFromFile=Module["_PyMarshal_ReadObjectFromFile"]=wasmExports["PyMarshal_ReadObjectFromFile"];_PyMarshal_Init=Module["_PyMarshal_Init"]=wasmExports["PyMarshal_Init"];__Py_convert_optional_to_ssize_t=Module["__Py_convert_optional_to_ssize_t"]=wasmExports["_Py_convert_optional_to_ssize_t"];__Py_BuildValue_SizeT=Module["__Py_BuildValue_SizeT"]=wasmExports["_Py_BuildValue_SizeT"];_Py_VaBuildValue=Module["_Py_VaBuildValue"]=wasmExports["Py_VaBuildValue"];__Py_VaBuildValue_SizeT=Module["__Py_VaBuildValue_SizeT"]=wasmExports["_Py_VaBuildValue_SizeT"];_PyModule_AddStringConstant=Module["_PyModule_AddStringConstant"]=wasmExports["PyModule_AddStringConstant"];_Py_PACK_FULL_VERSION=Module["_Py_PACK_FULL_VERSION"]=wasmExports["Py_PACK_FULL_VERSION"];_Py_PACK_VERSION=Module["_Py_PACK_VERSION"]=wasmExports["Py_PACK_VERSION"];_PyOS_vsnprintf=Module["_PyOS_vsnprintf"]=wasmExports["PyOS_vsnprintf"];_pthread_cond_init=Module["_pthread_cond_init"]=wasmExports["pthread_cond_init"];_PyTime_TimeRaw=Module["_PyTime_TimeRaw"]=wasmExports["PyTime_TimeRaw"];__PyTime_AsTimespec_clamp=Module["__PyTime_AsTimespec_clamp"]=wasmExports["_PyTime_AsTimespec_clamp"];__PyParkingLot_AfterFork=Module["__PyParkingLot_AfterFork"]=wasmExports["_PyParkingLot_AfterFork"];__PyPathConfig_ClearGlobal=Module["__PyPathConfig_ClearGlobal"]=wasmExports["_PyPathConfig_ClearGlobal"];_wcscpy=Module["_wcscpy"]=wasmExports["wcscpy"];_Py_SetPath=Module["_Py_SetPath"]=wasmExports["Py_SetPath"];_Py_SetPythonHome=Module["_Py_SetPythonHome"]=wasmExports["Py_SetPythonHome"];_Py_SetProgramName=Module["_Py_SetProgramName"]=wasmExports["Py_SetProgramName"];_Py_GetPath=Module["_Py_GetPath"]=wasmExports["Py_GetPath"];_Py_GetPrefix=Module["_Py_GetPrefix"]=wasmExports["Py_GetPrefix"];_Py_GetExecPrefix=Module["_Py_GetExecPrefix"]=wasmExports["Py_GetExecPrefix"];_Py_GetProgramFullPath=Module["_Py_GetProgramFullPath"]=wasmExports["Py_GetProgramFullPath"];_Py_GetPythonHome=Module["_Py_GetPythonHome"]=wasmExports["Py_GetPythonHome"];_Py_GetProgramName=Module["_Py_GetProgramName"]=wasmExports["Py_GetProgramName"];_wcsncpy=Module["_wcsncpy"]=wasmExports["wcsncpy"];_wcsncmp=Module["_wcsncmp"]=wasmExports["wcsncmp"];__PyPreConfig_InitCompatConfig=Module["__PyPreConfig_InitCompatConfig"]=wasmExports["_PyPreConfig_InitCompatConfig"];__Py_SetLocaleFromEnv=Module["__Py_SetLocaleFromEnv"]=wasmExports["_Py_SetLocaleFromEnv"];_PyHash_GetFuncDef=Module["_PyHash_GetFuncDef"]=wasmExports["PyHash_GetFuncDef"];_Py_IsFinalizing=Module["_Py_IsFinalizing"]=wasmExports["Py_IsFinalizing"];_nl_langinfo=Module["_nl_langinfo"]=wasmExports["nl_langinfo"];_setenv=Module["_setenv"]=wasmExports["setenv"];_Py_PreInitialize=Module["_Py_PreInitialize"]=wasmExports["Py_PreInitialize"];_Py_InitializeEx=Module["_Py_InitializeEx"]=wasmExports["Py_InitializeEx"];_Py_FatalError=Module["_Py_FatalError"]=wasmExports["Py_FatalError"];_Py_Initialize=Module["_Py_Initialize"]=wasmExports["Py_Initialize"];__PyThreadState_New=Module["__PyThreadState_New"]=wasmExports["_PyThreadState_New"];_Py_Finalize=Module["_Py_Finalize"]=wasmExports["Py_Finalize"];__PyInterpreterState_New=Module["__PyInterpreterState_New"]=wasmExports["_PyInterpreterState_New"];_Py_NewInterpreter=Module["_Py_NewInterpreter"]=wasmExports["Py_NewInterpreter"];__Py_write_noraise=Module["__Py_write_noraise"]=wasmExports["_Py_write_noraise"];_vfprintf=Module["_vfprintf"]=wasmExports["vfprintf"];__Py_FatalRefcountErrorFunc=Module["__Py_FatalRefcountErrorFunc"]=wasmExports["_Py_FatalRefcountErrorFunc"];_Py_AtExit=Module["_Py_AtExit"]=wasmExports["Py_AtExit"];_Py_Exit=Module["_Py_Exit"]=wasmExports["Py_Exit"];_Py_FdIsInteractive=Module["_Py_FdIsInteractive"]=wasmExports["Py_FdIsInteractive"];_PyOS_getsig=Module["_PyOS_getsig"]=wasmExports["PyOS_getsig"];_signal=Module["_signal"]=wasmExports["signal"];_PyOS_setsig=Module["_PyOS_setsig"]=wasmExports["PyOS_setsig"];_siginterrupt=Module["_siginterrupt"]=wasmExports["siginterrupt"];__Py_IsValidFD=Module["__Py_IsValidFD"]=wasmExports["_Py_IsValidFD"];_PyOS_mystrnicmp=Module["_PyOS_mystrnicmp"]=wasmExports["PyOS_mystrnicmp"];__PyThreadState_GetCurrent=Module["__PyThreadState_GetCurrent"]=wasmExports["_PyThreadState_GetCurrent"];_PyThread_tss_create=Module["_PyThread_tss_create"]=wasmExports["PyThread_tss_create"];_PyThread_tss_is_created=Module["_PyThread_tss_is_created"]=wasmExports["PyThread_tss_is_created"];_PyThread_tss_delete=Module["_PyThread_tss_delete"]=wasmExports["PyThread_tss_delete"];_PyThread_get_thread_ident=Module["_PyThread_get_thread_ident"]=wasmExports["PyThread_get_thread_ident"];_PyThread_tss_get=Module["_PyThread_tss_get"]=wasmExports["PyThread_tss_get"];_PyThread_tss_set=Module["_PyThread_tss_set"]=wasmExports["PyThread_tss_set"];_PyInterpreterState_New=Module["_PyInterpreterState_New"]=wasmExports["PyInterpreterState_New"];_PyInterpreterState_Clear=Module["_PyInterpreterState_Clear"]=wasmExports["PyInterpreterState_Clear"];__PyInterpreterState_GetWhence=Module["__PyInterpreterState_GetWhence"]=wasmExports["_PyInterpreterState_GetWhence"];__PyInterpreterState_ObjectToID=Module["__PyInterpreterState_ObjectToID"]=wasmExports["_PyInterpreterState_ObjectToID"];__PyInterpreterState_GetIDObject=Module["__PyInterpreterState_GetIDObject"]=wasmExports["_PyInterpreterState_GetIDObject"];__PyInterpreterState_IDIncref=Module["__PyInterpreterState_IDIncref"]=wasmExports["_PyInterpreterState_IDIncref"];__PyInterpreterState_IDDecref=Module["__PyInterpreterState_IDDecref"]=wasmExports["_PyInterpreterState_IDDecref"];__PyInterpreterState_RequiresIDRef=Module["__PyInterpreterState_RequiresIDRef"]=wasmExports["_PyInterpreterState_RequiresIDRef"];__PyInterpreterState_RequireIDRef=Module["__PyInterpreterState_RequireIDRef"]=wasmExports["_PyInterpreterState_RequireIDRef"];__PyInterpreterState_LookUpIDObject=Module["__PyInterpreterState_LookUpIDObject"]=wasmExports["_PyInterpreterState_LookUpIDObject"];__PyThreadState_Prealloc=Module["__PyThreadState_Prealloc"]=wasmExports["_PyThreadState_Prealloc"];__PyThreadState_Init=Module["__PyThreadState_Init"]=wasmExports["_PyThreadState_Init"];_PyThreadState_DeleteCurrent=Module["_PyThreadState_DeleteCurrent"]=wasmExports["PyThreadState_DeleteCurrent"];__PyThreadState_GetDict=Module["__PyThreadState_GetDict"]=wasmExports["_PyThreadState_GetDict"];_PyThreadState_GetID=Module["_PyThreadState_GetID"]=wasmExports["PyThreadState_GetID"];_PyThreadState_SetAsyncExc=Module["_PyThreadState_SetAsyncExc"]=wasmExports["PyThreadState_SetAsyncExc"];_PyThreadState_GetUnchecked=Module["_PyThreadState_GetUnchecked"]=wasmExports["PyThreadState_GetUnchecked"];_PyInterpreterState_Head=Module["_PyInterpreterState_Head"]=wasmExports["PyInterpreterState_Head"];_PyInterpreterState_Main=Module["_PyInterpreterState_Main"]=wasmExports["PyInterpreterState_Main"];_PyInterpreterState_Next=Module["_PyInterpreterState_Next"]=wasmExports["PyInterpreterState_Next"];__PyThread_CurrentFrames=Module["__PyThread_CurrentFrames"]=wasmExports["_PyThread_CurrentFrames"];__PyInterpreterState_GetEvalFrameFunc=Module["__PyInterpreterState_GetEvalFrameFunc"]=wasmExports["_PyInterpreterState_GetEvalFrameFunc"];__PyInterpreterState_SetEvalFrameFunc=Module["__PyInterpreterState_SetEvalFrameFunc"]=wasmExports["_PyInterpreterState_SetEvalFrameFunc"];_rewind=Module["_rewind"]=wasmExports["rewind"];_PyRun_InteractiveLoopFlags=Module["_PyRun_InteractiveLoopFlags"]=wasmExports["PyRun_InteractiveLoopFlags"];_PyRun_InteractiveOneObject=Module["_PyRun_InteractiveOneObject"]=wasmExports["PyRun_InteractiveOneObject"];_PyRun_InteractiveOneFlags=Module["_PyRun_InteractiveOneFlags"]=wasmExports["PyRun_InteractiveOneFlags"];_PyRun_SimpleFileExFlags=Module["_PyRun_SimpleFileExFlags"]=wasmExports["PyRun_SimpleFileExFlags"];_PyRun_SimpleStringFlags=Module["_PyRun_SimpleStringFlags"]=wasmExports["PyRun_SimpleStringFlags"];_PyErr_Display=Module["_PyErr_Display"]=wasmExports["PyErr_Display"];_PyRun_FileExFlags=Module["_PyRun_FileExFlags"]=wasmExports["PyRun_FileExFlags"];_PyRun_AnyFile=Module["_PyRun_AnyFile"]=wasmExports["PyRun_AnyFile"];_PyRun_AnyFileEx=Module["_PyRun_AnyFileEx"]=wasmExports["PyRun_AnyFileEx"];_PyRun_AnyFileFlags=Module["_PyRun_AnyFileFlags"]=wasmExports["PyRun_AnyFileFlags"];_PyRun_File=Module["_PyRun_File"]=wasmExports["PyRun_File"];_PyRun_FileEx=Module["_PyRun_FileEx"]=wasmExports["PyRun_FileEx"];_PyRun_FileFlags=Module["_PyRun_FileFlags"]=wasmExports["PyRun_FileFlags"];_PyRun_SimpleFile=Module["_PyRun_SimpleFile"]=wasmExports["PyRun_SimpleFile"];_PyRun_SimpleFileEx=Module["_PyRun_SimpleFileEx"]=wasmExports["PyRun_SimpleFileEx"];_PyRun_String=Module["_PyRun_String"]=wasmExports["PyRun_String"];_PyRun_SimpleString=Module["_PyRun_SimpleString"]=wasmExports["PyRun_SimpleString"];_Py_CompileString=Module["_Py_CompileString"]=wasmExports["Py_CompileString"];_Py_CompileStringFlags=Module["_Py_CompileStringFlags"]=wasmExports["Py_CompileStringFlags"];_PyRun_InteractiveOne=Module["_PyRun_InteractiveOne"]=wasmExports["PyRun_InteractiveOne"];_PyRun_InteractiveLoop=Module["_PyRun_InteractiveLoop"]=wasmExports["PyRun_InteractiveLoop"];__PyLong_AsTime_t=Module["__PyLong_AsTime_t"]=wasmExports["_PyLong_AsTime_t"];__PyLong_FromTime_t=Module["__PyLong_FromTime_t"]=wasmExports["_PyLong_FromTime_t"];__PyTime_ObjectToTime_t=Module["__PyTime_ObjectToTime_t"]=wasmExports["_PyTime_ObjectToTime_t"];__PyTime_ObjectToTimespec=Module["__PyTime_ObjectToTimespec"]=wasmExports["_PyTime_ObjectToTimespec"];__PyTime_ObjectToTimeval=Module["__PyTime_ObjectToTimeval"]=wasmExports["_PyTime_ObjectToTimeval"];__PyTime_FromSeconds=Module["__PyTime_FromSeconds"]=wasmExports["_PyTime_FromSeconds"];__PyTime_FromLong=Module["__PyTime_FromLong"]=wasmExports["_PyTime_FromLong"];__PyTime_FromSecondsObject=Module["__PyTime_FromSecondsObject"]=wasmExports["_PyTime_FromSecondsObject"];__PyTime_FromMillisecondsObject=Module["__PyTime_FromMillisecondsObject"]=wasmExports["_PyTime_FromMillisecondsObject"];__PyTime_AsLong=Module["__PyTime_AsLong"]=wasmExports["_PyTime_AsLong"];__PyTime_AsMilliseconds=Module["__PyTime_AsMilliseconds"]=wasmExports["_PyTime_AsMilliseconds"];__PyTime_AsTimeval=Module["__PyTime_AsTimeval"]=wasmExports["_PyTime_AsTimeval"];__PyTime_AsTimeval_clamp=Module["__PyTime_AsTimeval_clamp"]=wasmExports["_PyTime_AsTimeval_clamp"];__PyTime_AsTimevalTime_t=Module["__PyTime_AsTimevalTime_t"]=wasmExports["_PyTime_AsTimevalTime_t"];__PyTime_AsTimespec=Module["__PyTime_AsTimespec"]=wasmExports["_PyTime_AsTimespec"];_PyTime_Time=Module["_PyTime_Time"]=wasmExports["PyTime_Time"];_clock_getres=Module["_clock_getres"]=wasmExports["clock_getres"];_PyTime_Monotonic=Module["_PyTime_Monotonic"]=wasmExports["PyTime_Monotonic"];__PyTime_MonotonicWithInfo=Module["__PyTime_MonotonicWithInfo"]=wasmExports["_PyTime_MonotonicWithInfo"];_PyTime_PerfCounter=Module["_PyTime_PerfCounter"]=wasmExports["PyTime_PerfCounter"];__PyTime_localtime=Module["__PyTime_localtime"]=wasmExports["_PyTime_localtime"];_localtime_r=Module["_localtime_r"]=wasmExports["localtime_r"];__PyTime_gmtime=Module["__PyTime_gmtime"]=wasmExports["_PyTime_gmtime"];_gmtime_r=Module["_gmtime_r"]=wasmExports["gmtime_r"];__PyDeadline_Init=Module["__PyDeadline_Init"]=wasmExports["_PyDeadline_Init"];_getentropy=Module["_getentropy"]=wasmExports["getentropy"];__Py_open=Module["__Py_open"]=wasmExports["_Py_open"];_close=Module["_close"]=wasmExports["close"];__Py_fstat=Module["__Py_fstat"]=wasmExports["_Py_fstat"];__Py_open_noraise=Module["__Py_open_noraise"]=wasmExports["_Py_open_noraise"];__PyOS_URandomNonblock=Module["__PyOS_URandomNonblock"]=wasmExports["_PyOS_URandomNonblock"];_PySys_AuditTuple=Module["_PySys_AuditTuple"]=wasmExports["PySys_AuditTuple"];_PySys_AddAuditHook=Module["_PySys_AddAuditHook"]=wasmExports["PySys_AddAuditHook"];__PySys_GetSizeOf=Module["__PySys_GetSizeOf"]=wasmExports["_PySys_GetSizeOf"];_PyUnstable_PerfMapState_Init=Module["_PyUnstable_PerfMapState_Init"]=wasmExports["PyUnstable_PerfMapState_Init"];_getpid=Module["_getpid"]=wasmExports["getpid"];_open=Module["_open"]=wasmExports["open"];_fdopen=Module["_fdopen"]=wasmExports["fdopen"];_PyThread_allocate_lock=Module["_PyThread_allocate_lock"]=wasmExports["PyThread_allocate_lock"];_PyUnstable_WritePerfMapEntry=Module["_PyUnstable_WritePerfMapEntry"]=wasmExports["PyUnstable_WritePerfMapEntry"];_PyThread_acquire_lock=Module["_PyThread_acquire_lock"]=wasmExports["PyThread_acquire_lock"];_PyThread_release_lock=Module["_PyThread_release_lock"]=wasmExports["PyThread_release_lock"];_PyUnstable_PerfMapState_Fini=Module["_PyUnstable_PerfMapState_Fini"]=wasmExports["PyUnstable_PerfMapState_Fini"];_PyThread_free_lock=Module["_PyThread_free_lock"]=wasmExports["PyThread_free_lock"];_PyUnstable_CopyPerfMapFile=Module["_PyUnstable_CopyPerfMapFile"]=wasmExports["PyUnstable_CopyPerfMapFile"];_fopen=Module["_fopen"]=wasmExports["fopen"];_PySys_ResetWarnOptions=Module["_PySys_ResetWarnOptions"]=wasmExports["PySys_ResetWarnOptions"];_PySys_AddWarnOptionUnicode=Module["_PySys_AddWarnOptionUnicode"]=wasmExports["PySys_AddWarnOptionUnicode"];_PySys_AddWarnOption=Module["_PySys_AddWarnOption"]=wasmExports["PySys_AddWarnOption"];_PySys_HasWarnOptions=Module["_PySys_HasWarnOptions"]=wasmExports["PySys_HasWarnOptions"];_PySys_AddXOption=Module["_PySys_AddXOption"]=wasmExports["PySys_AddXOption"];_PySys_GetXOptions=Module["_PySys_GetXOptions"]=wasmExports["PySys_GetXOptions"];_PyThread_GetInfo=Module["_PyThread_GetInfo"]=wasmExports["PyThread_GetInfo"];_PySys_SetPath=Module["_PySys_SetPath"]=wasmExports["PySys_SetPath"];_PySys_SetArgvEx=Module["_PySys_SetArgvEx"]=wasmExports["PySys_SetArgvEx"];_PySys_SetArgv=Module["_PySys_SetArgv"]=wasmExports["PySys_SetArgv"];_PySys_WriteStdout=Module["_PySys_WriteStdout"]=wasmExports["PySys_WriteStdout"];_PySys_FormatStdout=Module["_PySys_FormatStdout"]=wasmExports["PySys_FormatStdout"];_access=Module["_access"]=wasmExports["access"];_pthread_condattr_init=Module["_pthread_condattr_init"]=wasmExports["pthread_condattr_init"];_pthread_condattr_setclock=Module["_pthread_condattr_setclock"]=wasmExports["pthread_condattr_setclock"];_PyThread_start_joinable_thread=Module["_PyThread_start_joinable_thread"]=wasmExports["PyThread_start_joinable_thread"];_pthread_attr_init=Module["_pthread_attr_init"]=wasmExports["pthread_attr_init"];_pthread_attr_setstacksize=Module["_pthread_attr_setstacksize"]=wasmExports["pthread_attr_setstacksize"];_pthread_attr_destroy=Module["_pthread_attr_destroy"]=wasmExports["pthread_attr_destroy"];_pthread_create=Module["_pthread_create"]=wasmExports["pthread_create"];_PyThread_start_new_thread=Module["_PyThread_start_new_thread"]=wasmExports["PyThread_start_new_thread"];_pthread_detach=Module["_pthread_detach"]=wasmExports["pthread_detach"];_PyThread_join_thread=Module["_PyThread_join_thread"]=wasmExports["PyThread_join_thread"];_pthread_join=Module["_pthread_join"]=wasmExports["pthread_join"];_PyThread_detach_thread=Module["_PyThread_detach_thread"]=wasmExports["PyThread_detach_thread"];_pthread_self=Module["_pthread_self"]=wasmExports["pthread_self"];_PyThread_exit_thread=Module["_PyThread_exit_thread"]=wasmExports["PyThread_exit_thread"];_PyThread_acquire_lock_timed=Module["_PyThread_acquire_lock_timed"]=wasmExports["PyThread_acquire_lock_timed"];_pthread_mutex_trylock=Module["_pthread_mutex_trylock"]=wasmExports["pthread_mutex_trylock"];_PyThread_create_key=Module["_PyThread_create_key"]=wasmExports["PyThread_create_key"];_pthread_key_create=Module["_pthread_key_create"]=wasmExports["pthread_key_create"];_pthread_key_delete=Module["_pthread_key_delete"]=wasmExports["pthread_key_delete"];_PyThread_delete_key=Module["_PyThread_delete_key"]=wasmExports["PyThread_delete_key"];_PyThread_delete_key_value=Module["_PyThread_delete_key_value"]=wasmExports["PyThread_delete_key_value"];_pthread_setspecific=Module["_pthread_setspecific"]=wasmExports["pthread_setspecific"];_PyThread_set_key_value=Module["_PyThread_set_key_value"]=wasmExports["PyThread_set_key_value"];_PyThread_get_key_value=Module["_PyThread_get_key_value"]=wasmExports["PyThread_get_key_value"];_pthread_getspecific=Module["_pthread_getspecific"]=wasmExports["pthread_getspecific"];_PyThread_ReInitTLS=Module["_PyThread_ReInitTLS"]=wasmExports["PyThread_ReInitTLS"];_PyThread_get_stacksize=Module["_PyThread_get_stacksize"]=wasmExports["PyThread_get_stacksize"];_PyThread_set_stacksize=Module["_PyThread_set_stacksize"]=wasmExports["PyThread_set_stacksize"];_PyThread_ParseTimeoutArg=Module["_PyThread_ParseTimeoutArg"]=wasmExports["PyThread_ParseTimeoutArg"];_PyThread_acquire_lock_timed_with_retries=Module["_PyThread_acquire_lock_timed_with_retries"]=wasmExports["PyThread_acquire_lock_timed_with_retries"];_PyThread_tss_alloc=Module["_PyThread_tss_alloc"]=wasmExports["PyThread_tss_alloc"];_PyThread_tss_free=Module["_PyThread_tss_free"]=wasmExports["PyThread_tss_free"];_confstr=Module["_confstr"]=wasmExports["confstr"];__PyTraceback_Add=Module["__PyTraceback_Add"]=wasmExports["_PyTraceback_Add"];__Py_DumpStack=Module["__Py_DumpStack"]=wasmExports["_Py_DumpStack"];__Py_InitDumpStack=Module["__Py_InitDumpStack"]=wasmExports["_Py_InitDumpStack"];_PyTraceMalloc_Track=Module["_PyTraceMalloc_Track"]=wasmExports["PyTraceMalloc_Track"];_PyTraceMalloc_Untrack=Module["_PyTraceMalloc_Untrack"]=wasmExports["PyTraceMalloc_Untrack"];__PyTraceMalloc_GetTraceback=Module["__PyTraceMalloc_GetTraceback"]=wasmExports["_PyTraceMalloc_GetTraceback"];_PyOS_mystricmp=Module["_PyOS_mystricmp"]=wasmExports["PyOS_mystricmp"];__Py_strhex=Module["__Py_strhex"]=wasmExports["_Py_strhex"];__Py_strhex_bytes_with_sep=Module["__Py_strhex_bytes_with_sep"]=wasmExports["_Py_strhex_bytes_with_sep"];_localeconv=Module["_localeconv"]=wasmExports["localeconv"];_mbstowcs=Module["_mbstowcs"]=wasmExports["mbstowcs"];_mbrtowc=Module["_mbrtowc"]=wasmExports["mbrtowc"];_Py_EncodeLocale=Module["_Py_EncodeLocale"]=wasmExports["Py_EncodeLocale"];_fstat=Module["_fstat"]=wasmExports["fstat"];_stat=Module["_stat"]=wasmExports["stat"];__Py_stat=Module["__Py_stat"]=wasmExports["_Py_stat"];_fcntl=Module["_fcntl"]=wasmExports["fcntl"];__Py_set_inheritable=Module["__Py_set_inheritable"]=wasmExports["_Py_set_inheritable"];_ioctl=Module["_ioctl"]=wasmExports["ioctl"];__Py_set_inheritable_async_safe=Module["__Py_set_inheritable_async_safe"]=wasmExports["_Py_set_inheritable_async_safe"];_wcstombs=Module["_wcstombs"]=wasmExports["wcstombs"];_Py_fclose=Module["_Py_fclose"]=wasmExports["Py_fclose"];_write=Module["_write"]=wasmExports["write"];_readlink=Module["_readlink"]=wasmExports["readlink"];_realpath=Module["_realpath"]=wasmExports["realpath"];_getcwd=Module["_getcwd"]=wasmExports["getcwd"];__Py_normpath=Module["__Py_normpath"]=wasmExports["_Py_normpath"];__Py_dup=Module["__Py_dup"]=wasmExports["_Py_dup"];__Py_closerange=Module["__Py_closerange"]=wasmExports["_Py_closerange"];_sysconf=Module["_sysconf"]=wasmExports["sysconf"];__Py_UTF8_Edit_Cost=Module["__Py_UTF8_Edit_Cost"]=wasmExports["_Py_UTF8_Edit_Cost"];_PyUnstable_PerfTrampoline_CompileCode=Module["_PyUnstable_PerfTrampoline_CompileCode"]=wasmExports["PyUnstable_PerfTrampoline_CompileCode"];_PyUnstable_PerfTrampoline_SetPersistAfterFork=Module["_PyUnstable_PerfTrampoline_SetPersistAfterFork"]=wasmExports["PyUnstable_PerfTrampoline_SetPersistAfterFork"];_dlopen=Module["_dlopen"]=wasmExports["dlopen"];_dlerror=Module["_dlerror"]=wasmExports["dlerror"];_dlsym=Module["_dlsym"]=wasmExports["dlsym"];_PyErr_SetInterruptEx=Module["_PyErr_SetInterruptEx"]=wasmExports["PyErr_SetInterruptEx"];_PyInit__ctypes=Module["_PyInit__ctypes"]=wasmExports["PyInit__ctypes"];_PyInit__posixsubprocess=Module["_PyInit__posixsubprocess"]=wasmExports["PyInit__posixsubprocess"];_PyInit__bz2=Module["_PyInit__bz2"]=wasmExports["PyInit__bz2"];_PyInit_zlib=Module["_PyInit_zlib"]=wasmExports["PyInit_zlib"];_PyInit__hmac=Module["_PyInit__hmac"]=wasmExports["PyInit__hmac"];_PyInit__sqlite3=Module["_PyInit__sqlite3"]=wasmExports["PyInit__sqlite3"];_PyInit__lzma=Module["_PyInit__lzma"]=wasmExports["PyInit__lzma"];_PyInit__zstd=Module["_PyInit__zstd"]=wasmExports["PyInit__zstd"];_PyInit_array=Module["_PyInit_array"]=wasmExports["PyInit_array"];_PyInit__asyncio=Module["_PyInit__asyncio"]=wasmExports["PyInit__asyncio"];_PyInit__bisect=Module["_PyInit__bisect"]=wasmExports["PyInit__bisect"];_PyInit__csv=Module["_PyInit__csv"]=wasmExports["PyInit__csv"];_PyInit__heapq=Module["_PyInit__heapq"]=wasmExports["PyInit__heapq"];_PyInit__json=Module["_PyInit__json"]=wasmExports["PyInit__json"];_PyInit__lsprof=Module["_PyInit__lsprof"]=wasmExports["PyInit__lsprof"];_PyInit__pickle=Module["_PyInit__pickle"]=wasmExports["PyInit__pickle"];_PyInit__queue=Module["_PyInit__queue"]=wasmExports["PyInit__queue"];_PyInit__random=Module["_PyInit__random"]=wasmExports["PyInit__random"];_PyInit__remote_debugging=Module["_PyInit__remote_debugging"]=wasmExports["PyInit__remote_debugging"];_PyInit__struct=Module["_PyInit__struct"]=wasmExports["PyInit__struct"];_PyInit__zoneinfo=Module["_PyInit__zoneinfo"]=wasmExports["PyInit__zoneinfo"];_PyInit_math=Module["_PyInit_math"]=wasmExports["PyInit_math"];_PyInit_cmath=Module["_PyInit_cmath"]=wasmExports["PyInit_cmath"];_PyInit__statistics=Module["_PyInit__statistics"]=wasmExports["PyInit__statistics"];_PyInit__decimal=Module["_PyInit__decimal"]=wasmExports["PyInit__decimal"];_PyInit_binascii=Module["_PyInit_binascii"]=wasmExports["PyInit_binascii"];_PyInit__md5=Module["_PyInit__md5"]=wasmExports["PyInit__md5"];_PyInit__sha1=Module["_PyInit__sha1"]=wasmExports["PyInit__sha1"];_PyInit__sha2=Module["_PyInit__sha2"]=wasmExports["PyInit__sha2"];_PyInit__sha3=Module["_PyInit__sha3"]=wasmExports["PyInit__sha3"];_PyInit__blake2=Module["_PyInit__blake2"]=wasmExports["PyInit__blake2"];_PyInit_pyexpat=Module["_PyInit_pyexpat"]=wasmExports["PyInit_pyexpat"];_PyInit__elementtree=Module["_PyInit__elementtree"]=wasmExports["PyInit__elementtree"];_PyInit__codecs_cn=Module["_PyInit__codecs_cn"]=wasmExports["PyInit__codecs_cn"];_PyInit__codecs_hk=Module["_PyInit__codecs_hk"]=wasmExports["PyInit__codecs_hk"];_PyInit__codecs_iso2022=Module["_PyInit__codecs_iso2022"]=wasmExports["PyInit__codecs_iso2022"];_PyInit__codecs_jp=Module["_PyInit__codecs_jp"]=wasmExports["PyInit__codecs_jp"];_PyInit__codecs_kr=Module["_PyInit__codecs_kr"]=wasmExports["PyInit__codecs_kr"];_PyInit__codecs_tw=Module["_PyInit__codecs_tw"]=wasmExports["PyInit__codecs_tw"];_PyInit__multibytecodec=Module["_PyInit__multibytecodec"]=wasmExports["PyInit__multibytecodec"];_PyInit_unicodedata=Module["_PyInit_unicodedata"]=wasmExports["PyInit_unicodedata"];_PyInit_fcntl=Module["_PyInit_fcntl"]=wasmExports["PyInit_fcntl"];_PyInit_mmap=Module["_PyInit_mmap"]=wasmExports["PyInit_mmap"];_PyInit_select=Module["_PyInit_select"]=wasmExports["PyInit_select"];_PyInit__socket=Module["_PyInit__socket"]=wasmExports["PyInit__socket"];_PyInit_termios=Module["_PyInit_termios"]=wasmExports["PyInit_termios"];_PyInit_xxsubtype=Module["_PyInit_xxsubtype"]=wasmExports["PyInit_xxsubtype"];_PyInit__xxtestfuzz=Module["_PyInit__xxtestfuzz"]=wasmExports["PyInit__xxtestfuzz"];_PyInit__testbuffer=Module["_PyInit__testbuffer"]=wasmExports["PyInit__testbuffer"];_PyInit__testinternalcapi=Module["_PyInit__testinternalcapi"]=wasmExports["PyInit__testinternalcapi"];_PyInit__testcapi=Module["_PyInit__testcapi"]=wasmExports["PyInit__testcapi"];_PyInit__testlimitedcapi=Module["_PyInit__testlimitedcapi"]=wasmExports["PyInit__testlimitedcapi"];_PyInit__testclinic=Module["_PyInit__testclinic"]=wasmExports["PyInit__testclinic"];_PyInit__testclinic_limited=Module["_PyInit__testclinic_limited"]=wasmExports["PyInit__testclinic_limited"];_PyInit_atexit=Module["_PyInit_atexit"]=wasmExports["PyInit_atexit"];_PyInit_faulthandler=Module["_PyInit_faulthandler"]=wasmExports["PyInit_faulthandler"];_PyInit_posix=Module["_PyInit_posix"]=wasmExports["PyInit_posix"];_PyInit__signal=Module["_PyInit__signal"]=wasmExports["PyInit__signal"];_PyInit__tracemalloc=Module["_PyInit__tracemalloc"]=wasmExports["PyInit__tracemalloc"];_PyInit__suggestions=Module["_PyInit__suggestions"]=wasmExports["PyInit__suggestions"];_PyInit__datetime=Module["_PyInit__datetime"]=wasmExports["PyInit__datetime"];_PyInit__codecs=Module["_PyInit__codecs"]=wasmExports["PyInit__codecs"];_PyInit__collections=Module["_PyInit__collections"]=wasmExports["PyInit__collections"];_PyInit_errno=Module["_PyInit_errno"]=wasmExports["PyInit_errno"];_PyInit__io=Module["_PyInit__io"]=wasmExports["PyInit__io"];_PyInit_itertools=Module["_PyInit_itertools"]=wasmExports["PyInit_itertools"];_PyInit__sre=Module["_PyInit__sre"]=wasmExports["PyInit__sre"];_PyInit__sysconfig=Module["_PyInit__sysconfig"]=wasmExports["PyInit__sysconfig"];_PyInit__thread=Module["_PyInit__thread"]=wasmExports["PyInit__thread"];_PyInit_time=Module["_PyInit_time"]=wasmExports["PyInit_time"];_PyInit__types=Module["_PyInit__types"]=wasmExports["PyInit__types"];_PyInit__typing=Module["_PyInit__typing"]=wasmExports["PyInit__typing"];_PyInit__weakref=Module["_PyInit__weakref"]=wasmExports["PyInit__weakref"];_PyInit__abc=Module["_PyInit__abc"]=wasmExports["PyInit__abc"];_PyInit__functools=Module["_PyInit__functools"]=wasmExports["PyInit__functools"];_PyInit__locale=Module["_PyInit__locale"]=wasmExports["PyInit__locale"];_PyInit__opcode=Module["_PyInit__opcode"]=wasmExports["PyInit__opcode"];_PyInit__operator=Module["_PyInit__operator"]=wasmExports["PyInit__operator"];_PyInit__stat=Module["_PyInit__stat"]=wasmExports["PyInit__stat"];_PyInit__symtable=Module["_PyInit__symtable"]=wasmExports["PyInit__symtable"];_PyInit_gc=Module["_PyInit_gc"]=wasmExports["PyInit_gc"];_Py_RunMain=Module["_Py_RunMain"]=wasmExports["Py_RunMain"];_perror=Module["_perror"]=wasmExports["perror"];_kill=Module["_kill"]=wasmExports["kill"];_Py_Main=Module["_Py_Main"]=wasmExports["Py_Main"];_Py_BytesMain=Module["_Py_BytesMain"]=wasmExports["Py_BytesMain"];_ffi_closure_alloc=Module["_ffi_closure_alloc"]=wasmExports["ffi_closure_alloc"];_ffi_closure_free=Module["_ffi_closure_free"]=wasmExports["ffi_closure_free"];_memmove=Module["_memmove"]=wasmExports["memmove"];_memset=Module["_memset"]=wasmExports["memset"];_strcat=Module["_strcat"]=wasmExports["strcat"];_ffi_prep_cif=Module["_ffi_prep_cif"]=wasmExports["ffi_prep_cif"];_ffi_prep_closure_loc=Module["_ffi_prep_closure_loc"]=wasmExports["ffi_prep_closure_loc"];_ffi_prep_cif_var=Module["_ffi_prep_cif_var"]=wasmExports["ffi_prep_cif_var"];_ffi_call=Module["_ffi_call"]=wasmExports["ffi_call"];_dlclose=Module["_dlclose"]=wasmExports["dlclose"];___extenddftf2=Module["___extenddftf2"]=wasmExports["__extenddftf2"];___trunctfdf2=Module["___trunctfdf2"]=wasmExports["__trunctfdf2"];__Py_Gid_Converter=Module["__Py_Gid_Converter"]=wasmExports["_Py_Gid_Converter"];__Py_Uid_Converter=Module["__Py_Uid_Converter"]=wasmExports["_Py_Uid_Converter"];_PyOS_BeforeFork=Module["_PyOS_BeforeFork"]=wasmExports["PyOS_BeforeFork"];_PyOS_AfterFork_Parent=Module["_PyOS_AfterFork_Parent"]=wasmExports["PyOS_AfterFork_Parent"];_fork=Module["_fork"]=wasmExports["fork"];_PyOS_AfterFork_Child=Module["_PyOS_AfterFork_Child"]=wasmExports["PyOS_AfterFork_Child"];__exit=Module["__exit"]=wasmExports["_exit"];_dup=Module["_dup"]=wasmExports["dup"];_dup2=Module["_dup2"]=wasmExports["dup2"];_chdir=Module["_chdir"]=wasmExports["chdir"];_umask=Module["_umask"]=wasmExports["umask"];__Py_RestoreSignals=Module["__Py_RestoreSignals"]=wasmExports["_Py_RestoreSignals"];_setsid=Module["_setsid"]=wasmExports["setsid"];_setpgid=Module["_setpgid"]=wasmExports["setpgid"];_setregid=Module["_setregid"]=wasmExports["setregid"];_setreuid=Module["_setreuid"]=wasmExports["setreuid"];_execve=Module["_execve"]=wasmExports["execve"];_execv=Module["_execv"]=wasmExports["execv"];_opendir=Module["_opendir"]=wasmExports["opendir"];_dirfd=Module["_dirfd"]=wasmExports["dirfd"];_readdir=Module["_readdir"]=wasmExports["readdir"];_closedir=Module["_closedir"]=wasmExports["closedir"];_BZ2_bzCompressEnd=Module["_BZ2_bzCompressEnd"]=wasmExports["BZ2_bzCompressEnd"];_BZ2_bzCompressInit=Module["_BZ2_bzCompressInit"]=wasmExports["BZ2_bzCompressInit"];_BZ2_bzCompress=Module["_BZ2_bzCompress"]=wasmExports["BZ2_bzCompress"];_BZ2_bzDecompressEnd=Module["_BZ2_bzDecompressEnd"]=wasmExports["BZ2_bzDecompressEnd"];_BZ2_bzDecompressInit=Module["_BZ2_bzDecompressInit"]=wasmExports["BZ2_bzDecompressInit"];_BZ2_bzDecompress=Module["_BZ2_bzDecompress"]=wasmExports["BZ2_bzDecompress"];_adler32=Module["_adler32"]=wasmExports["adler32"];_deflateInit2_=Module["_deflateInit2_"]=wasmExports["deflateInit2_"];_deflateEnd=Module["_deflateEnd"]=wasmExports["deflateEnd"];_deflate=Module["_deflate"]=wasmExports["deflate"];_deflateSetDictionary=Module["_deflateSetDictionary"]=wasmExports["deflateSetDictionary"];_crc32=Module["_crc32"]=wasmExports["crc32"];_inflateInit2_=Module["_inflateInit2_"]=wasmExports["inflateInit2_"];_inflateEnd=Module["_inflateEnd"]=wasmExports["inflateEnd"];_inflate=Module["_inflate"]=wasmExports["inflate"];_inflateSetDictionary=Module["_inflateSetDictionary"]=wasmExports["inflateSetDictionary"];_zlibVersion=Module["_zlibVersion"]=wasmExports["zlibVersion"];_deflateCopy=Module["_deflateCopy"]=wasmExports["deflateCopy"];_inflateCopy=Module["_inflateCopy"]=wasmExports["inflateCopy"];_sqlite3_blob_close=Module["_sqlite3_blob_close"]=wasmExports["sqlite3_blob_close"];_sqlite3_blob_bytes=Module["_sqlite3_blob_bytes"]=wasmExports["sqlite3_blob_bytes"];_sqlite3_blob_read=Module["_sqlite3_blob_read"]=wasmExports["sqlite3_blob_read"];_sqlite3_blob_write=Module["_sqlite3_blob_write"]=wasmExports["sqlite3_blob_write"];_sqlite3_trace_v2=Module["_sqlite3_trace_v2"]=wasmExports["sqlite3_trace_v2"];_sqlite3_progress_handler=Module["_sqlite3_progress_handler"]=wasmExports["sqlite3_progress_handler"];_sqlite3_set_authorizer=Module["_sqlite3_set_authorizer"]=wasmExports["sqlite3_set_authorizer"];_sqlite3_open_v2=Module["_sqlite3_open_v2"]=wasmExports["sqlite3_open_v2"];_sqlite3_busy_timeout=Module["_sqlite3_busy_timeout"]=wasmExports["sqlite3_busy_timeout"];_sqlite3_close=Module["_sqlite3_close"]=wasmExports["sqlite3_close"];_sqlite3_get_autocommit=Module["_sqlite3_get_autocommit"]=wasmExports["sqlite3_get_autocommit"];_sqlite3_prepare_v2=Module["_sqlite3_prepare_v2"]=wasmExports["sqlite3_prepare_v2"];_sqlite3_step=Module["_sqlite3_step"]=wasmExports["sqlite3_step"];_sqlite3_finalize=Module["_sqlite3_finalize"]=wasmExports["sqlite3_finalize"];_sqlite3_close_v2=Module["_sqlite3_close_v2"]=wasmExports["sqlite3_close_v2"];_sqlite3_backup_init=Module["_sqlite3_backup_init"]=wasmExports["sqlite3_backup_init"];_sqlite3_backup_step=Module["_sqlite3_backup_step"]=wasmExports["sqlite3_backup_step"];_sqlite3_backup_remaining=Module["_sqlite3_backup_remaining"]=wasmExports["sqlite3_backup_remaining"];_sqlite3_backup_pagecount=Module["_sqlite3_backup_pagecount"]=wasmExports["sqlite3_backup_pagecount"];_sqlite3_sleep=Module["_sqlite3_sleep"]=wasmExports["sqlite3_sleep"];_sqlite3_backup_finish=Module["_sqlite3_backup_finish"]=wasmExports["sqlite3_backup_finish"];_sqlite3_limit=Module["_sqlite3_limit"]=wasmExports["sqlite3_limit"];_sqlite3_create_function_v2=Module["_sqlite3_create_function_v2"]=wasmExports["sqlite3_create_function_v2"];_sqlite3_create_collation_v2=Module["_sqlite3_create_collation_v2"]=wasmExports["sqlite3_create_collation_v2"];_sqlite3_interrupt=Module["_sqlite3_interrupt"]=wasmExports["sqlite3_interrupt"];_sqlite3_serialize=Module["_sqlite3_serialize"]=wasmExports["sqlite3_serialize"];_sqlite3_free=Module["_sqlite3_free"]=wasmExports["sqlite3_free"];_sqlite3_malloc64=Module["_sqlite3_malloc64"]=wasmExports["sqlite3_malloc64"];_sqlite3_deserialize=Module["_sqlite3_deserialize"]=wasmExports["sqlite3_deserialize"];_sqlite3_libversion_number=Module["_sqlite3_libversion_number"]=wasmExports["sqlite3_libversion_number"];_sqlite3_create_window_function=Module["_sqlite3_create_window_function"]=wasmExports["sqlite3_create_window_function"];_sqlite3_db_config=Module["_sqlite3_db_config"]=wasmExports["sqlite3_db_config"];_sqlite3_user_data=Module["_sqlite3_user_data"]=wasmExports["sqlite3_user_data"];_sqlite3_aggregate_context=Module["_sqlite3_aggregate_context"]=wasmExports["sqlite3_aggregate_context"];_sqlite3_result_error_nomem=Module["_sqlite3_result_error_nomem"]=wasmExports["sqlite3_result_error_nomem"];_sqlite3_result_error_toobig=Module["_sqlite3_result_error_toobig"]=wasmExports["sqlite3_result_error_toobig"];_sqlite3_result_error=Module["_sqlite3_result_error"]=wasmExports["sqlite3_result_error"];_sqlite3_value_type=Module["_sqlite3_value_type"]=wasmExports["sqlite3_value_type"];_sqlite3_value_double=Module["_sqlite3_value_double"]=wasmExports["sqlite3_value_double"];_sqlite3_context_db_handle=Module["_sqlite3_context_db_handle"]=wasmExports["sqlite3_context_db_handle"];_sqlite3_value_text=Module["_sqlite3_value_text"]=wasmExports["sqlite3_value_text"];_sqlite3_errcode=Module["_sqlite3_errcode"]=wasmExports["sqlite3_errcode"];_sqlite3_value_bytes=Module["_sqlite3_value_bytes"]=wasmExports["sqlite3_value_bytes"];_sqlite3_value_blob=Module["_sqlite3_value_blob"]=wasmExports["sqlite3_value_blob"];_sqlite3_value_int64=Module["_sqlite3_value_int64"]=wasmExports["sqlite3_value_int64"];_sqlite3_result_null=Module["_sqlite3_result_null"]=wasmExports["sqlite3_result_null"];_sqlite3_result_int64=Module["_sqlite3_result_int64"]=wasmExports["sqlite3_result_int64"];_sqlite3_result_double=Module["_sqlite3_result_double"]=wasmExports["sqlite3_result_double"];_sqlite3_result_text=Module["_sqlite3_result_text"]=wasmExports["sqlite3_result_text"];_sqlite3_result_blob=Module["_sqlite3_result_blob"]=wasmExports["sqlite3_result_blob"];_sqlite3_expanded_sql=Module["_sqlite3_expanded_sql"]=wasmExports["sqlite3_expanded_sql"];_sqlite3_db_handle=Module["_sqlite3_db_handle"]=wasmExports["sqlite3_db_handle"];_sqlite3_blob_open=Module["_sqlite3_blob_open"]=wasmExports["sqlite3_blob_open"];_sqlite3_total_changes=Module["_sqlite3_total_changes"]=wasmExports["sqlite3_total_changes"];_sqlite3_stricmp=Module["_sqlite3_stricmp"]=wasmExports["sqlite3_stricmp"];_sqlite3_reset=Module["_sqlite3_reset"]=wasmExports["sqlite3_reset"];_sqlite3_stmt_readonly=Module["_sqlite3_stmt_readonly"]=wasmExports["sqlite3_stmt_readonly"];_sqlite3_stmt_busy=Module["_sqlite3_stmt_busy"]=wasmExports["sqlite3_stmt_busy"];_sqlite3_bind_parameter_count=Module["_sqlite3_bind_parameter_count"]=wasmExports["sqlite3_bind_parameter_count"];_sqlite3_bind_parameter_name=Module["_sqlite3_bind_parameter_name"]=wasmExports["sqlite3_bind_parameter_name"];_sqlite3_column_count=Module["_sqlite3_column_count"]=wasmExports["sqlite3_column_count"];_sqlite3_column_name=Module["_sqlite3_column_name"]=wasmExports["sqlite3_column_name"];_sqlite3_column_decltype=Module["_sqlite3_column_decltype"]=wasmExports["sqlite3_column_decltype"];_sqlite3_changes=Module["_sqlite3_changes"]=wasmExports["sqlite3_changes"];_sqlite3_last_insert_rowid=Module["_sqlite3_last_insert_rowid"]=wasmExports["sqlite3_last_insert_rowid"];_sqlite3_bind_null=Module["_sqlite3_bind_null"]=wasmExports["sqlite3_bind_null"];_sqlite3_bind_int64=Module["_sqlite3_bind_int64"]=wasmExports["sqlite3_bind_int64"];_sqlite3_bind_double=Module["_sqlite3_bind_double"]=wasmExports["sqlite3_bind_double"];_sqlite3_bind_text=Module["_sqlite3_bind_text"]=wasmExports["sqlite3_bind_text"];_sqlite3_bind_blob=Module["_sqlite3_bind_blob"]=wasmExports["sqlite3_bind_blob"];_sqlite3_data_count=Module["_sqlite3_data_count"]=wasmExports["sqlite3_data_count"];_sqlite3_column_blob=Module["_sqlite3_column_blob"]=wasmExports["sqlite3_column_blob"];_sqlite3_column_bytes=Module["_sqlite3_column_bytes"]=wasmExports["sqlite3_column_bytes"];_sqlite3_column_type=Module["_sqlite3_column_type"]=wasmExports["sqlite3_column_type"];_sqlite3_column_double=Module["_sqlite3_column_double"]=wasmExports["sqlite3_column_double"];_sqlite3_column_text=Module["_sqlite3_column_text"]=wasmExports["sqlite3_column_text"];_sqlite3_column_int64=Module["_sqlite3_column_int64"]=wasmExports["sqlite3_column_int64"];_sqlite3_exec=Module["_sqlite3_exec"]=wasmExports["sqlite3_exec"];_sqlite3_complete=Module["_sqlite3_complete"]=wasmExports["sqlite3_complete"];_sqlite3_initialize=Module["_sqlite3_initialize"]=wasmExports["sqlite3_initialize"];_sqlite3_errstr=Module["_sqlite3_errstr"]=wasmExports["sqlite3_errstr"];_sqlite3_libversion=Module["_sqlite3_libversion"]=wasmExports["sqlite3_libversion"];_sqlite3_threadsafe=Module["_sqlite3_threadsafe"]=wasmExports["sqlite3_threadsafe"];_sqlite3_extended_errcode=Module["_sqlite3_extended_errcode"]=wasmExports["sqlite3_extended_errcode"];_sqlite3_errmsg=Module["_sqlite3_errmsg"]=wasmExports["sqlite3_errmsg"];_lzma_check_is_supported=Module["_lzma_check_is_supported"]=wasmExports["lzma_check_is_supported"];_lzma_properties_size=Module["_lzma_properties_size"]=wasmExports["lzma_properties_size"];_lzma_properties_encode=Module["_lzma_properties_encode"]=wasmExports["lzma_properties_encode"];_lzma_properties_decode=Module["_lzma_properties_decode"]=wasmExports["lzma_properties_decode"];_lzma_lzma_preset=Module["_lzma_lzma_preset"]=wasmExports["lzma_lzma_preset"];_lzma_end=Module["_lzma_end"]=wasmExports["lzma_end"];_lzma_code=Module["_lzma_code"]=wasmExports["lzma_code"];_lzma_easy_encoder=Module["_lzma_easy_encoder"]=wasmExports["lzma_easy_encoder"];_lzma_stream_encoder=Module["_lzma_stream_encoder"]=wasmExports["lzma_stream_encoder"];_lzma_alone_encoder=Module["_lzma_alone_encoder"]=wasmExports["lzma_alone_encoder"];_lzma_raw_encoder=Module["_lzma_raw_encoder"]=wasmExports["lzma_raw_encoder"];_lzma_auto_decoder=Module["_lzma_auto_decoder"]=wasmExports["lzma_auto_decoder"];_lzma_stream_decoder=Module["_lzma_stream_decoder"]=wasmExports["lzma_stream_decoder"];_lzma_alone_decoder=Module["_lzma_alone_decoder"]=wasmExports["lzma_alone_decoder"];_lzma_get_check=Module["_lzma_get_check"]=wasmExports["lzma_get_check"];_lzma_raw_decoder=Module["_lzma_raw_decoder"]=wasmExports["lzma_raw_decoder"];_ZSTD_getErrorName=Module["_ZSTD_getErrorName"]=wasmExports["ZSTD_getErrorName"];_ZSTD_cParam_getBounds=Module["_ZSTD_cParam_getBounds"]=wasmExports["ZSTD_cParam_getBounds"];_ZSTD_dParam_getBounds=Module["_ZSTD_dParam_getBounds"]=wasmExports["ZSTD_dParam_getBounds"];_ZSTD_isError=Module["_ZSTD_isError"]=wasmExports["ZSTD_isError"];_ZDICT_trainFromBuffer=Module["_ZDICT_trainFromBuffer"]=wasmExports["ZDICT_trainFromBuffer"];_ZDICT_isError=Module["_ZDICT_isError"]=wasmExports["ZDICT_isError"];_ZDICT_finalizeDictionary=Module["_ZDICT_finalizeDictionary"]=wasmExports["ZDICT_finalizeDictionary"];_ZSTD_findFrameCompressedSize=Module["_ZSTD_findFrameCompressedSize"]=wasmExports["ZSTD_findFrameCompressedSize"];_ZSTD_getFrameContentSize=Module["_ZSTD_getFrameContentSize"]=wasmExports["ZSTD_getFrameContentSize"];_ZSTD_getDictID_fromFrame=Module["_ZSTD_getDictID_fromFrame"]=wasmExports["ZSTD_getDictID_fromFrame"];_ZSTD_versionNumber=Module["_ZSTD_versionNumber"]=wasmExports["ZSTD_versionNumber"];_ZSTD_versionString=Module["_ZSTD_versionString"]=wasmExports["ZSTD_versionString"];_ZSTD_defaultCLevel=Module["_ZSTD_defaultCLevel"]=wasmExports["ZSTD_defaultCLevel"];_ZSTD_DStreamOutSize=Module["_ZSTD_DStreamOutSize"]=wasmExports["ZSTD_DStreamOutSize"];_ZSTD_createCDict=Module["_ZSTD_createCDict"]=wasmExports["ZSTD_createCDict"];_ZSTD_freeCDict=Module["_ZSTD_freeCDict"]=wasmExports["ZSTD_freeCDict"];_ZSTD_createCCtx=Module["_ZSTD_createCCtx"]=wasmExports["ZSTD_createCCtx"];_ZSTD_minCLevel=Module["_ZSTD_minCLevel"]=wasmExports["ZSTD_minCLevel"];_ZSTD_maxCLevel=Module["_ZSTD_maxCLevel"]=wasmExports["ZSTD_maxCLevel"];_ZSTD_CCtx_setParameter=Module["_ZSTD_CCtx_setParameter"]=wasmExports["ZSTD_CCtx_setParameter"];_ZSTD_CCtx_refCDict=Module["_ZSTD_CCtx_refCDict"]=wasmExports["ZSTD_CCtx_refCDict"];_ZSTD_CCtx_loadDictionary=Module["_ZSTD_CCtx_loadDictionary"]=wasmExports["ZSTD_CCtx_loadDictionary"];_ZSTD_CCtx_refPrefix=Module["_ZSTD_CCtx_refPrefix"]=wasmExports["ZSTD_CCtx_refPrefix"];_ZSTD_freeCCtx=Module["_ZSTD_freeCCtx"]=wasmExports["ZSTD_freeCCtx"];_ZSTD_compressStream2=Module["_ZSTD_compressStream2"]=wasmExports["ZSTD_compressStream2"];_ZSTD_CCtx_reset=Module["_ZSTD_CCtx_reset"]=wasmExports["ZSTD_CCtx_reset"];_ZSTD_CCtx_setPledgedSrcSize=Module["_ZSTD_CCtx_setPledgedSrcSize"]=wasmExports["ZSTD_CCtx_setPledgedSrcSize"];_ZSTD_compressBound=Module["_ZSTD_compressBound"]=wasmExports["ZSTD_compressBound"];_ZSTD_createDCtx=Module["_ZSTD_createDCtx"]=wasmExports["ZSTD_createDCtx"];_ZSTD_createDDict=Module["_ZSTD_createDDict"]=wasmExports["ZSTD_createDDict"];_ZSTD_DCtx_refDDict=Module["_ZSTD_DCtx_refDDict"]=wasmExports["ZSTD_DCtx_refDDict"];_ZSTD_DCtx_loadDictionary=Module["_ZSTD_DCtx_loadDictionary"]=wasmExports["ZSTD_DCtx_loadDictionary"];_ZSTD_DCtx_refPrefix=Module["_ZSTD_DCtx_refPrefix"]=wasmExports["ZSTD_DCtx_refPrefix"];_ZSTD_DCtx_setParameter=Module["_ZSTD_DCtx_setParameter"]=wasmExports["ZSTD_DCtx_setParameter"];_ZSTD_freeDCtx=Module["_ZSTD_freeDCtx"]=wasmExports["ZSTD_freeDCtx"];_ZSTD_decompressStream=Module["_ZSTD_decompressStream"]=wasmExports["ZSTD_decompressStream"];_ZSTD_DCtx_reset=Module["_ZSTD_DCtx_reset"]=wasmExports["ZSTD_DCtx_reset"];_ZSTD_getDictID_fromDict=Module["_ZSTD_getDictID_fromDict"]=wasmExports["ZSTD_getDictID_fromDict"];_ZSTD_freeDDict=Module["_ZSTD_freeDDict"]=wasmExports["ZSTD_freeDDict"];_getpagesize=Module["_getpagesize"]=wasmExports["getpagesize"];_acos=Module["_acos"]=wasmExports["acos"];_acosh=Module["_acosh"]=wasmExports["acosh"];_asin=Module["_asin"]=wasmExports["asin"];_asinh=Module["_asinh"]=wasmExports["asinh"];_atan=Module["_atan"]=wasmExports["atan"];_atanh=Module["_atanh"]=wasmExports["atanh"];_cbrt=Module["_cbrt"]=wasmExports["cbrt"];_copysign=Module["_copysign"]=wasmExports["copysign"];_cosh=Module["_cosh"]=wasmExports["cosh"];_erf=Module["_erf"]=wasmExports["erf"];_erfc=Module["_erfc"]=wasmExports["erfc"];_exp2=Module["_exp2"]=wasmExports["exp2"];_expm1=Module["_expm1"]=wasmExports["expm1"];_fabs=Module["_fabs"]=wasmExports["fabs"];_fma=Module["_fma"]=wasmExports["fma"];_log10=Module["_log10"]=wasmExports["log10"];_log2=Module["_log2"]=wasmExports["log2"];_sinh=Module["_sinh"]=wasmExports["sinh"];_sqrt=Module["_sqrt"]=wasmExports["sqrt"];_tan=Module["_tan"]=wasmExports["tan"];_tanh=Module["_tanh"]=wasmExports["tanh"];_nextafter=Module["_nextafter"]=wasmExports["nextafter"];_log1p=Module["_log1p"]=wasmExports["log1p"];_strncat=Module["_strncat"]=wasmExports["strncat"];_flock=Module["_flock"]=wasmExports["flock"];_mmap=Module["_mmap"]=wasmExports["mmap"];_munmap=Module["_munmap"]=wasmExports["munmap"];_msync=Module["_msync"]=wasmExports["msync"];_madvise=Module["_madvise"]=wasmExports["madvise"];_ftruncate=Module["_ftruncate"]=wasmExports["ftruncate"];_mremap=Module["_mremap"]=wasmExports["mremap"];_select=Module["_select"]=wasmExports["select"];_poll=Module["_poll"]=wasmExports["poll"];_inet_ntop=Module["_inet_ntop"]=wasmExports["inet_ntop"];_gethostbyname=Module["_gethostbyname"]=wasmExports["gethostbyname"];_gethostbyaddr=Module["_gethostbyaddr"]=wasmExports["gethostbyaddr"];_gethostname=Module["_gethostname"]=wasmExports["gethostname"];_getservbyname=Module["_getservbyname"]=wasmExports["getservbyname"];_ntohs=Module["_ntohs"]=wasmExports["ntohs"];_htons=Module["_htons"]=wasmExports["htons"];_getservbyport=Module["_getservbyport"]=wasmExports["getservbyport"];_ntohl=Module["_ntohl"]=wasmExports["ntohl"];_htonl=Module["_htonl"]=wasmExports["htonl"];_inet_aton=Module["_inet_aton"]=wasmExports["inet_aton"];_inet_ntoa=Module["_inet_ntoa"]=wasmExports["inet_ntoa"];_inet_pton=Module["_inet_pton"]=wasmExports["inet_pton"];_gai_strerror=Module["_gai_strerror"]=wasmExports["gai_strerror"];_freeaddrinfo=Module["_freeaddrinfo"]=wasmExports["freeaddrinfo"];_if_nameindex=Module["_if_nameindex"]=wasmExports["if_nameindex"];_if_freenameindex=Module["_if_freenameindex"]=wasmExports["if_freenameindex"];_if_nametoindex=Module["_if_nametoindex"]=wasmExports["if_nametoindex"];_if_indextoname=Module["_if_indextoname"]=wasmExports["if_indextoname"];___h_errno_location=Module["___h_errno_location"]=wasmExports["__h_errno_location"];_hstrerror=Module["_hstrerror"]=wasmExports["hstrerror"];_getsockname=Module["_getsockname"]=wasmExports["getsockname"];_socket=Module["_socket"]=wasmExports["socket"];_getsockopt=Module["_getsockopt"]=wasmExports["getsockopt"];_bind=Module["_bind"]=wasmExports["bind"];_getpeername=Module["_getpeername"]=wasmExports["getpeername"];_listen=Module["_listen"]=wasmExports["listen"];_setsockopt=Module["_setsockopt"]=wasmExports["setsockopt"];_shutdown=Module["_shutdown"]=wasmExports["shutdown"];_accept4=Module["_accept4"]=wasmExports["accept4"];_accept=Module["_accept"]=wasmExports["accept"];_connect=Module["_connect"]=wasmExports["connect"];_recv=Module["_recv"]=wasmExports["recv"];_recvfrom=Module["_recvfrom"]=wasmExports["recvfrom"];_send=Module["_send"]=wasmExports["send"];_sendto=Module["_sendto"]=wasmExports["sendto"];_recvmsg=Module["_recvmsg"]=wasmExports["recvmsg"];_sendmsg=Module["_sendmsg"]=wasmExports["sendmsg"];_tcgetattr=Module["_tcgetattr"]=wasmExports["tcgetattr"];_cfgetispeed=Module["_cfgetispeed"]=wasmExports["cfgetispeed"];_cfgetospeed=Module["_cfgetospeed"]=wasmExports["cfgetospeed"];_cfsetispeed=Module["_cfsetispeed"]=wasmExports["cfsetispeed"];_cfsetospeed=Module["_cfsetospeed"]=wasmExports["cfsetospeed"];_tcsetattr=Module["_tcsetattr"]=wasmExports["tcsetattr"];_tcsendbreak=Module["_tcsendbreak"]=wasmExports["tcsendbreak"];_tcdrain=Module["_tcdrain"]=wasmExports["tcdrain"];_tcflush=Module["_tcflush"]=wasmExports["tcflush"];_tcflow=Module["_tcflow"]=wasmExports["tcflow"];_clock=Module["_clock"]=wasmExports["clock"];__Py_Get_Getpath_CodeObject=Module["__Py_Get_Getpath_CodeObject"]=wasmExports["_Py_Get_Getpath_CodeObject"];_usleep=Module["_usleep"]=wasmExports["usleep"];_raise=Module["_raise"]=wasmExports["raise"];__pthread_cleanup_push=Module["__pthread_cleanup_push"]=wasmExports["_pthread_cleanup_push"];_PyUnstable_AtExit=Module["_PyUnstable_AtExit"]=wasmExports["PyUnstable_AtExit"];_PyInit__testcapi_datetime=Module["_PyInit__testcapi_datetime"]=wasmExports["PyInit__testcapi_datetime"];_getrlimit=Module["_getrlimit"]=wasmExports["getrlimit"];_setrlimit=Module["_setrlimit"]=wasmExports["setrlimit"];_sigfillset=Module["_sigfillset"]=wasmExports["sigfillset"];_pthread_sigmask=Module["_pthread_sigmask"]=wasmExports["pthread_sigmask"];_PyOS_AfterFork=Module["_PyOS_AfterFork"]=wasmExports["PyOS_AfterFork"];__PyLong_FromGid=Module["__PyLong_FromGid"]=wasmExports["_PyLong_FromGid"];_sigemptyset=Module["_sigemptyset"]=wasmExports["sigemptyset"];_sigaddset=Module["_sigaddset"]=wasmExports["sigaddset"];_ttyname_r=Module["_ttyname_r"]=wasmExports["ttyname_r"];_fchdir=Module["_fchdir"]=wasmExports["fchdir"];_fchmod=Module["_fchmod"]=wasmExports["fchmod"];_fchmodat=Module["_fchmodat"]=wasmExports["fchmodat"];_chmod=Module["_chmod"]=wasmExports["chmod"];_fchown=Module["_fchown"]=wasmExports["fchown"];_fchownat=Module["_fchownat"]=wasmExports["fchownat"];_chown=Module["_chown"]=wasmExports["chown"];_chroot=Module["_chroot"]=wasmExports["chroot"];_ctermid=Module["_ctermid"]=wasmExports["ctermid"];_fdopendir=Module["_fdopendir"]=wasmExports["fdopendir"];_rewinddir=Module["_rewinddir"]=wasmExports["rewinddir"];_mkdirat=Module["_mkdirat"]=wasmExports["mkdirat"];_mkdir=Module["_mkdir"]=wasmExports["mkdir"];_getpriority=Module["_getpriority"]=wasmExports["getpriority"];_readlinkat=Module["_readlinkat"]=wasmExports["readlinkat"];_unlinkat=Module["_unlinkat"]=wasmExports["unlinkat"];_rmdir=Module["_rmdir"]=wasmExports["rmdir"];_symlink=Module["_symlink"]=wasmExports["symlink"];_system=Module["_system"]=wasmExports["system"];_uname=Module["_uname"]=wasmExports["uname"];_futimesat=Module["_futimesat"]=wasmExports["futimesat"];_futimens=Module["_futimens"]=wasmExports["futimens"];_times=Module["_times"]=wasmExports["times"];_fexecve=Module["_fexecve"]=wasmExports["fexecve"];_posix_openpt=Module["_posix_openpt"]=wasmExports["posix_openpt"];_grantpt=Module["_grantpt"]=wasmExports["grantpt"];_unlockpt=Module["_unlockpt"]=wasmExports["unlockpt"];_ptsname_r=Module["_ptsname_r"]=wasmExports["ptsname_r"];_login_tty=Module["_login_tty"]=wasmExports["login_tty"];_getgid=Module["_getgid"]=wasmExports["getgid"];_getpgrp=Module["_getpgrp"]=wasmExports["getpgrp"];_getppid=Module["_getppid"]=wasmExports["getppid"];_getuid=Module["_getuid"]=wasmExports["getuid"];_getlogin_r=Module["_getlogin_r"]=wasmExports["getlogin_r"];_killpg=Module["_killpg"]=wasmExports["killpg"];_setuid=Module["_setuid"]=wasmExports["setuid"];_setgid=Module["_setgid"]=wasmExports["setgid"];_getpgid=Module["_getpgid"]=wasmExports["getpgid"];_setpgrp=Module["_setpgrp"]=wasmExports["setpgrp"];_wait=Module["_wait"]=wasmExports["wait"];_wait3=Module["_wait3"]=wasmExports["wait3"];_wait4=Module["_wait4"]=wasmExports["wait4"];_waitid=Module["_waitid"]=wasmExports["waitid"];_waitpid=Module["_waitpid"]=wasmExports["waitpid"];_getsid=Module["_getsid"]=wasmExports["getsid"];_tcgetpgrp=Module["_tcgetpgrp"]=wasmExports["tcgetpgrp"];_tcsetpgrp=Module["_tcsetpgrp"]=wasmExports["tcsetpgrp"];_openat=Module["_openat"]=wasmExports["openat"];_dup3=Module["_dup3"]=wasmExports["dup3"];_lockf=Module["_lockf"]=wasmExports["lockf"];_readv=Module["_readv"]=wasmExports["readv"];_pread=Module["_pread"]=wasmExports["pread"];_writev=Module["_writev"]=wasmExports["writev"];_pwrite=Module["_pwrite"]=wasmExports["pwrite"];_pipe=Module["_pipe"]=wasmExports["pipe"];_truncate=Module["_truncate"]=wasmExports["truncate"];_posix_fadvise=Module["_posix_fadvise"]=wasmExports["posix_fadvise"];_unsetenv=Module["_unsetenv"]=wasmExports["unsetenv"];_fsync=Module["_fsync"]=wasmExports["fsync"];_sync=Module["_sync"]=wasmExports["sync"];_fdatasync=Module["_fdatasync"]=wasmExports["fdatasync"];_fstatvfs=Module["_fstatvfs"]=wasmExports["fstatvfs"];_statvfs=Module["_statvfs"]=wasmExports["statvfs"];_fpathconf=Module["_fpathconf"]=wasmExports["fpathconf"];_pathconf=Module["_pathconf"]=wasmExports["pathconf"];_getloadavg=Module["_getloadavg"]=wasmExports["getloadavg"];_lstat=Module["_lstat"]=wasmExports["lstat"];_fstatat=Module["_fstatat"]=wasmExports["fstatat"];_renameat=Module["_renameat"]=wasmExports["renameat"];_rename=Module["_rename"]=wasmExports["rename"];_unlink=Module["_unlink"]=wasmExports["unlink"];_utimes=Module["_utimes"]=wasmExports["utimes"];_PySignal_SetWakeupFd=Module["_PySignal_SetWakeupFd"]=wasmExports["PySignal_SetWakeupFd"];__PyErr_CheckSignals=Module["__PyErr_CheckSignals"]=wasmExports["_PyErr_CheckSignals"];_PyErr_SetInterrupt=Module["_PyErr_SetInterrupt"]=wasmExports["PyErr_SetInterrupt"];_PyOS_InterruptOccurred=Module["_PyOS_InterruptOccurred"]=wasmExports["PyOS_InterruptOccurred"];__PyOS_IsMainThread=Module["__PyOS_IsMainThread"]=wasmExports["_PyOS_IsMainThread"];_getitimer=Module["_getitimer"]=wasmExports["getitimer"];_strsignal=Module["_strsignal"]=wasmExports["strsignal"];_pause=Module["_pause"]=wasmExports["pause"];_sigpending=Module["_sigpending"]=wasmExports["sigpending"];_sigwait=Module["_sigwait"]=wasmExports["sigwait"];_sigwaitinfo=Module["_sigwaitinfo"]=wasmExports["sigwaitinfo"];_sigtimedwait=Module["_sigtimedwait"]=wasmExports["sigtimedwait"];_sigismember=Module["_sigismember"]=wasmExports["sigismember"];___libc_current_sigrtmin=Module["___libc_current_sigrtmin"]=wasmExports["__libc_current_sigrtmin"];___libc_current_sigrtmax=Module["___libc_current_sigrtmax"]=wasmExports["__libc_current_sigrtmax"];_strftime=Module["_strftime"]=wasmExports["strftime"];_isalnum=Module["_isalnum"]=wasmExports["isalnum"];_tolower=Module["_tolower"]=wasmExports["tolower"];_toupper=Module["_toupper"]=wasmExports["toupper"];_clock_settime=Module["_clock_settime"]=wasmExports["clock_settime"];_pthread_getcpuclockid=Module["_pthread_getcpuclockid"]=wasmExports["pthread_getcpuclockid"];_clock_nanosleep=Module["_clock_nanosleep"]=wasmExports["clock_nanosleep"];_time=Module["_time"]=wasmExports["time"];_mktime=Module["_mktime"]=wasmExports["mktime"];_wcsftime=Module["_wcsftime"]=wasmExports["wcsftime"];_wcscoll=Module["_wcscoll"]=wasmExports["wcscoll"];_wcsxfrm=Module["_wcsxfrm"]=wasmExports["wcsxfrm"];_gettext=Module["_gettext"]=wasmExports["gettext"];_dgettext=Module["_dgettext"]=wasmExports["dgettext"];_dcgettext=Module["_dcgettext"]=wasmExports["dcgettext"];_textdomain=Module["_textdomain"]=wasmExports["textdomain"];_bindtextdomain=Module["_bindtextdomain"]=wasmExports["bindtextdomain"];_bind_textdomain_codeset=Module["_bind_textdomain_codeset"]=wasmExports["bind_textdomain_codeset"];_gettimeofday=Module["_gettimeofday"]=wasmExports["gettimeofday"];___small_fprintf=Module["___small_fprintf"]=wasmExports["__small_fprintf"];_ffi_prep_closure=Module["_ffi_prep_closure"]=wasmExports["ffi_prep_closure"];_ffi_get_struct_offsets=Module["_ffi_get_struct_offsets"]=wasmExports["ffi_get_struct_offsets"];_ffi_java_raw_size=Module["_ffi_java_raw_size"]=wasmExports["ffi_java_raw_size"];_ffi_java_raw_to_ptrarray=Module["_ffi_java_raw_to_ptrarray"]=wasmExports["ffi_java_raw_to_ptrarray"];_ffi_java_ptrarray_to_raw=Module["_ffi_java_ptrarray_to_raw"]=wasmExports["ffi_java_ptrarray_to_raw"];_ffi_java_raw_call=Module["_ffi_java_raw_call"]=wasmExports["ffi_java_raw_call"];_ffi_prep_java_raw_closure_loc=Module["_ffi_prep_java_raw_closure_loc"]=wasmExports["ffi_prep_java_raw_closure_loc"];_ffi_prep_java_raw_closure=Module["_ffi_prep_java_raw_closure"]=wasmExports["ffi_prep_java_raw_closure"];_ffi_tramp_is_supported=Module["_ffi_tramp_is_supported"]=wasmExports["ffi_tramp_is_supported"];_ffi_tramp_alloc=Module["_ffi_tramp_alloc"]=wasmExports["ffi_tramp_alloc"];_ffi_tramp_set_parms=Module["_ffi_tramp_set_parms"]=wasmExports["ffi_tramp_set_parms"];_ffi_tramp_get_addr=Module["_ffi_tramp_get_addr"]=wasmExports["ffi_tramp_get_addr"];_ffi_tramp_free=Module["_ffi_tramp_free"]=wasmExports["ffi_tramp_free"];_lzma_version_number=Module["_lzma_version_number"]=wasmExports["lzma_version_number"];_lzma_version_string=Module["_lzma_version_string"]=wasmExports["lzma_version_string"];_lzma_get_progress=Module["_lzma_get_progress"]=wasmExports["lzma_get_progress"];_lzma_memusage=Module["_lzma_memusage"]=wasmExports["lzma_memusage"];_lzma_memlimit_get=Module["_lzma_memlimit_get"]=wasmExports["lzma_memlimit_get"];_lzma_memlimit_set=Module["_lzma_memlimit_set"]=wasmExports["lzma_memlimit_set"];_lzma_block_compressed_size=Module["_lzma_block_compressed_size"]=wasmExports["lzma_block_compressed_size"];_lzma_block_unpadded_size=Module["_lzma_block_unpadded_size"]=wasmExports["lzma_block_unpadded_size"];_lzma_check_size=Module["_lzma_check_size"]=wasmExports["lzma_check_size"];_lzma_block_total_size=Module["_lzma_block_total_size"]=wasmExports["lzma_block_total_size"];_lzma_filters_copy=Module["_lzma_filters_copy"]=wasmExports["lzma_filters_copy"];_lzma_physmem=Module["_lzma_physmem"]=wasmExports["lzma_physmem"];_lzma_index_init=Module["_lzma_index_init"]=wasmExports["lzma_index_init"];_lzma_index_end=Module["_lzma_index_end"]=wasmExports["lzma_index_end"];_lzma_index_memusage=Module["_lzma_index_memusage"]=wasmExports["lzma_index_memusage"];_lzma_index_memused=Module["_lzma_index_memused"]=wasmExports["lzma_index_memused"];_lzma_index_block_count=Module["_lzma_index_block_count"]=wasmExports["lzma_index_block_count"];_lzma_index_stream_count=Module["_lzma_index_stream_count"]=wasmExports["lzma_index_stream_count"];_lzma_index_size=Module["_lzma_index_size"]=wasmExports["lzma_index_size"];_lzma_vli_size=Module["_lzma_vli_size"]=wasmExports["lzma_vli_size"];_lzma_index_total_size=Module["_lzma_index_total_size"]=wasmExports["lzma_index_total_size"];_lzma_index_stream_size=Module["_lzma_index_stream_size"]=wasmExports["lzma_index_stream_size"];_lzma_index_file_size=Module["_lzma_index_file_size"]=wasmExports["lzma_index_file_size"];_lzma_index_uncompressed_size=Module["_lzma_index_uncompressed_size"]=wasmExports["lzma_index_uncompressed_size"];_lzma_index_checks=Module["_lzma_index_checks"]=wasmExports["lzma_index_checks"];_lzma_index_stream_flags=Module["_lzma_index_stream_flags"]=wasmExports["lzma_index_stream_flags"];_lzma_stream_flags_compare=Module["_lzma_stream_flags_compare"]=wasmExports["lzma_stream_flags_compare"];_lzma_index_stream_padding=Module["_lzma_index_stream_padding"]=wasmExports["lzma_index_stream_padding"];_lzma_index_append=Module["_lzma_index_append"]=wasmExports["lzma_index_append"];_lzma_index_cat=Module["_lzma_index_cat"]=wasmExports["lzma_index_cat"];_lzma_index_dup=Module["_lzma_index_dup"]=wasmExports["lzma_index_dup"];_lzma_index_iter_init=Module["_lzma_index_iter_init"]=wasmExports["lzma_index_iter_init"];_lzma_index_iter_rewind=Module["_lzma_index_iter_rewind"]=wasmExports["lzma_index_iter_rewind"];_lzma_index_iter_next=Module["_lzma_index_iter_next"]=wasmExports["lzma_index_iter_next"];_lzma_index_iter_locate=Module["_lzma_index_iter_locate"]=wasmExports["lzma_index_iter_locate"];_lzma_block_buffer_bound=Module["_lzma_block_buffer_bound"]=wasmExports["lzma_block_buffer_bound"];_lzma_block_buffer_encode=Module["_lzma_block_buffer_encode"]=wasmExports["lzma_block_buffer_encode"];_lzma_block_uncomp_encode=Module["_lzma_block_uncomp_encode"]=wasmExports["lzma_block_uncomp_encode"];_lzma_block_header_size=Module["_lzma_block_header_size"]=wasmExports["lzma_block_header_size"];_lzma_block_header_encode=Module["_lzma_block_header_encode"]=wasmExports["lzma_block_header_encode"];_lzma_block_encoder=Module["_lzma_block_encoder"]=wasmExports["lzma_block_encoder"];_lzma_filter_flags_size=Module["_lzma_filter_flags_size"]=wasmExports["lzma_filter_flags_size"];_lzma_vli_encode=Module["_lzma_vli_encode"]=wasmExports["lzma_vli_encode"];_lzma_filter_flags_encode=Module["_lzma_filter_flags_encode"]=wasmExports["lzma_filter_flags_encode"];_lzma_crc32=Module["_lzma_crc32"]=wasmExports["lzma_crc32"];_lzma_easy_buffer_encode=Module["_lzma_easy_buffer_encode"]=wasmExports["lzma_easy_buffer_encode"];_lzma_stream_buffer_encode=Module["_lzma_stream_buffer_encode"]=wasmExports["lzma_stream_buffer_encode"];_lzma_easy_encoder_memusage=Module["_lzma_easy_encoder_memusage"]=wasmExports["lzma_easy_encoder_memusage"];_lzma_raw_encoder_memusage=Module["_lzma_raw_encoder_memusage"]=wasmExports["lzma_raw_encoder_memusage"];_lzma_raw_buffer_encode=Module["_lzma_raw_buffer_encode"]=wasmExports["lzma_raw_buffer_encode"];_lzma_filter_encoder_is_supported=Module["_lzma_filter_encoder_is_supported"]=wasmExports["lzma_filter_encoder_is_supported"];_lzma_filters_update=Module["_lzma_filters_update"]=wasmExports["lzma_filters_update"];_lzma_index_encoder=Module["_lzma_index_encoder"]=wasmExports["lzma_index_encoder"];_lzma_index_buffer_encode=Module["_lzma_index_buffer_encode"]=wasmExports["lzma_index_buffer_encode"];_lzma_stream_buffer_bound=Module["_lzma_stream_buffer_bound"]=wasmExports["lzma_stream_buffer_bound"];_lzma_stream_header_encode=Module["_lzma_stream_header_encode"]=wasmExports["lzma_stream_header_encode"];_lzma_stream_footer_encode=Module["_lzma_stream_footer_encode"]=wasmExports["lzma_stream_footer_encode"];_lzma_cputhreads=Module["_lzma_cputhreads"]=wasmExports["lzma_cputhreads"];_lzma_stream_encoder_mt=Module["_lzma_stream_encoder_mt"]=wasmExports["lzma_stream_encoder_mt"];_lzma_stream_encoder_mt_memusage=Module["_lzma_stream_encoder_mt_memusage"]=wasmExports["lzma_stream_encoder_mt_memusage"];_pthread_condattr_destroy=Module["_pthread_condattr_destroy"]=wasmExports["pthread_condattr_destroy"];_lzma_block_buffer_decode=Module["_lzma_block_buffer_decode"]=wasmExports["lzma_block_buffer_decode"];_lzma_block_decoder=Module["_lzma_block_decoder"]=wasmExports["lzma_block_decoder"];_lzma_block_header_decode=Module["_lzma_block_header_decode"]=wasmExports["lzma_block_header_decode"];_lzma_vli_decode=Module["_lzma_vli_decode"]=wasmExports["lzma_vli_decode"];_lzma_filter_flags_decode=Module["_lzma_filter_flags_decode"]=wasmExports["lzma_filter_flags_decode"];_lzma_easy_decoder_memusage=Module["_lzma_easy_decoder_memusage"]=wasmExports["lzma_easy_decoder_memusage"];_lzma_raw_decoder_memusage=Module["_lzma_raw_decoder_memusage"]=wasmExports["lzma_raw_decoder_memusage"];_lzma_raw_buffer_decode=Module["_lzma_raw_buffer_decode"]=wasmExports["lzma_raw_buffer_decode"];_lzma_filter_decoder_is_supported=Module["_lzma_filter_decoder_is_supported"]=wasmExports["lzma_filter_decoder_is_supported"];_lzma_index_decoder=Module["_lzma_index_decoder"]=wasmExports["lzma_index_decoder"];_lzma_index_buffer_decode=Module["_lzma_index_buffer_decode"]=wasmExports["lzma_index_buffer_decode"];_lzma_index_hash_init=Module["_lzma_index_hash_init"]=wasmExports["lzma_index_hash_init"];_lzma_index_hash_end=Module["_lzma_index_hash_end"]=wasmExports["lzma_index_hash_end"];_lzma_index_hash_size=Module["_lzma_index_hash_size"]=wasmExports["lzma_index_hash_size"];_lzma_index_hash_append=Module["_lzma_index_hash_append"]=wasmExports["lzma_index_hash_append"];_lzma_index_hash_decode=Module["_lzma_index_hash_decode"]=wasmExports["lzma_index_hash_decode"];_lzma_stream_buffer_decode=Module["_lzma_stream_buffer_decode"]=wasmExports["lzma_stream_buffer_decode"];_lzma_stream_header_decode=Module["_lzma_stream_header_decode"]=wasmExports["lzma_stream_header_decode"];_lzma_stream_footer_decode=Module["_lzma_stream_footer_decode"]=wasmExports["lzma_stream_footer_decode"];_lzma_crc64=Module["_lzma_crc64"]=wasmExports["lzma_crc64"];_lzma_mf_is_supported=Module["_lzma_mf_is_supported"]=wasmExports["lzma_mf_is_supported"];_lzma_mode_is_supported=Module["_lzma_mode_is_supported"]=wasmExports["lzma_mode_is_supported"];_sqlite3_status64=Module["_sqlite3_status64"]=wasmExports["sqlite3_status64"];_sqlite3_log=Module["_sqlite3_log"]=wasmExports["sqlite3_log"];_sqlite3_status=Module["_sqlite3_status"]=wasmExports["sqlite3_status"];_sqlite3_db_status=Module["_sqlite3_db_status"]=wasmExports["sqlite3_db_status"];_sqlite3_msize=Module["_sqlite3_msize"]=wasmExports["sqlite3_msize"];_sqlite3_vfs_find=Module["_sqlite3_vfs_find"]=wasmExports["sqlite3_vfs_find"];_sqlite3_config=Module["_sqlite3_config"]=wasmExports["sqlite3_config"];_sqlite3_os_init=Module["_sqlite3_os_init"]=wasmExports["sqlite3_os_init"];_sqlite3_vfs_register=Module["_sqlite3_vfs_register"]=wasmExports["sqlite3_vfs_register"];_sqlite3_vfs_unregister=Module["_sqlite3_vfs_unregister"]=wasmExports["sqlite3_vfs_unregister"];_sqlite3_release_memory=Module["_sqlite3_release_memory"]=wasmExports["sqlite3_release_memory"];_sqlite3_memory_alarm=Module["_sqlite3_memory_alarm"]=wasmExports["sqlite3_memory_alarm"];_sqlite3_soft_heap_limit64=Module["_sqlite3_soft_heap_limit64"]=wasmExports["sqlite3_soft_heap_limit64"];_sqlite3_memory_used=Module["_sqlite3_memory_used"]=wasmExports["sqlite3_memory_used"];_sqlite3_soft_heap_limit=Module["_sqlite3_soft_heap_limit"]=wasmExports["sqlite3_soft_heap_limit"];_sqlite3_hard_heap_limit64=Module["_sqlite3_hard_heap_limit64"]=wasmExports["sqlite3_hard_heap_limit64"];_sqlite3_memory_highwater=Module["_sqlite3_memory_highwater"]=wasmExports["sqlite3_memory_highwater"];_sqlite3_malloc=Module["_sqlite3_malloc"]=wasmExports["sqlite3_malloc"];_sqlite3_realloc=Module["_sqlite3_realloc"]=wasmExports["sqlite3_realloc"];_sqlite3_realloc64=Module["_sqlite3_realloc64"]=wasmExports["sqlite3_realloc64"];_sqlite3_str_vappendf=Module["_sqlite3_str_vappendf"]=wasmExports["sqlite3_str_vappendf"];_sqlite3_str_append=Module["_sqlite3_str_append"]=wasmExports["sqlite3_str_append"];___multf3=Module["___multf3"]=wasmExports["__multf3"];___addtf3=Module["___addtf3"]=wasmExports["__addtf3"];___gttf2=Module["___gttf2"]=wasmExports["__gttf2"];___getf2=Module["___getf2"]=wasmExports["__getf2"];___divtf3=Module["___divtf3"]=wasmExports["__divtf3"];___lttf2=Module["___lttf2"]=wasmExports["__lttf2"];_sqlite3_str_appendf=Module["_sqlite3_str_appendf"]=wasmExports["sqlite3_str_appendf"];_sqlite3_str_appendchar=Module["_sqlite3_str_appendchar"]=wasmExports["sqlite3_str_appendchar"];_sqlite3_str_reset=Module["_sqlite3_str_reset"]=wasmExports["sqlite3_str_reset"];___fixtfsi=Module["___fixtfsi"]=wasmExports["__fixtfsi"];___floatsitf=Module["___floatsitf"]=wasmExports["__floatsitf"];___subtf3=Module["___subtf3"]=wasmExports["__subtf3"];_sqlite3_str_appendall=Module["_sqlite3_str_appendall"]=wasmExports["sqlite3_str_appendall"];_sqlite3_str_finish=Module["_sqlite3_str_finish"]=wasmExports["sqlite3_str_finish"];_sqlite3_str_errcode=Module["_sqlite3_str_errcode"]=wasmExports["sqlite3_str_errcode"];_sqlite3_str_length=Module["_sqlite3_str_length"]=wasmExports["sqlite3_str_length"];_sqlite3_str_value=Module["_sqlite3_str_value"]=wasmExports["sqlite3_str_value"];_sqlite3_str_new=Module["_sqlite3_str_new"]=wasmExports["sqlite3_str_new"];_sqlite3_vmprintf=Module["_sqlite3_vmprintf"]=wasmExports["sqlite3_vmprintf"];_sqlite3_mprintf=Module["_sqlite3_mprintf"]=wasmExports["sqlite3_mprintf"];_sqlite3_vsnprintf=Module["_sqlite3_vsnprintf"]=wasmExports["sqlite3_vsnprintf"];_sqlite3_snprintf=Module["_sqlite3_snprintf"]=wasmExports["sqlite3_snprintf"];_sqlite3_randomness=Module["_sqlite3_randomness"]=wasmExports["sqlite3_randomness"];_sqlite3_strnicmp=Module["_sqlite3_strnicmp"]=wasmExports["sqlite3_strnicmp"];_sqlite3_uri_parameter=Module["_sqlite3_uri_parameter"]=wasmExports["sqlite3_uri_parameter"];_sqlite3_uri_boolean=Module["_sqlite3_uri_boolean"]=wasmExports["sqlite3_uri_boolean"];_sqlite3_os_end=Module["_sqlite3_os_end"]=wasmExports["sqlite3_os_end"];_sqlite3_column_int=Module["_sqlite3_column_int"]=wasmExports["sqlite3_column_int"];_sqlite3_file_control=Module["_sqlite3_file_control"]=wasmExports["sqlite3_file_control"];_sqlite3_database_file_object=Module["_sqlite3_database_file_object"]=wasmExports["sqlite3_database_file_object"];_sqlite3_enable_shared_cache=Module["_sqlite3_enable_shared_cache"]=wasmExports["sqlite3_enable_shared_cache"];_sqlite3_expired=Module["_sqlite3_expired"]=wasmExports["sqlite3_expired"];_sqlite3_clear_bindings=Module["_sqlite3_clear_bindings"]=wasmExports["sqlite3_clear_bindings"];_sqlite3_value_bytes16=Module["_sqlite3_value_bytes16"]=wasmExports["sqlite3_value_bytes16"];_sqlite3_value_int=Module["_sqlite3_value_int"]=wasmExports["sqlite3_value_int"];_sqlite3_value_subtype=Module["_sqlite3_value_subtype"]=wasmExports["sqlite3_value_subtype"];_sqlite3_value_pointer=Module["_sqlite3_value_pointer"]=wasmExports["sqlite3_value_pointer"];_sqlite3_value_text16=Module["_sqlite3_value_text16"]=wasmExports["sqlite3_value_text16"];_sqlite3_value_text16be=Module["_sqlite3_value_text16be"]=wasmExports["sqlite3_value_text16be"];_sqlite3_value_text16le=Module["_sqlite3_value_text16le"]=wasmExports["sqlite3_value_text16le"];_sqlite3_value_nochange=Module["_sqlite3_value_nochange"]=wasmExports["sqlite3_value_nochange"];_sqlite3_value_frombind=Module["_sqlite3_value_frombind"]=wasmExports["sqlite3_value_frombind"];_sqlite3_value_dup=Module["_sqlite3_value_dup"]=wasmExports["sqlite3_value_dup"];_sqlite3_value_free=Module["_sqlite3_value_free"]=wasmExports["sqlite3_value_free"];_sqlite3_result_blob64=Module["_sqlite3_result_blob64"]=wasmExports["sqlite3_result_blob64"];_sqlite3_result_error16=Module["_sqlite3_result_error16"]=wasmExports["sqlite3_result_error16"];_sqlite3_result_int=Module["_sqlite3_result_int"]=wasmExports["sqlite3_result_int"];_sqlite3_result_pointer=Module["_sqlite3_result_pointer"]=wasmExports["sqlite3_result_pointer"];_sqlite3_result_subtype=Module["_sqlite3_result_subtype"]=wasmExports["sqlite3_result_subtype"];_sqlite3_result_text64=Module["_sqlite3_result_text64"]=wasmExports["sqlite3_result_text64"];_sqlite3_result_text16=Module["_sqlite3_result_text16"]=wasmExports["sqlite3_result_text16"];_sqlite3_result_text16be=Module["_sqlite3_result_text16be"]=wasmExports["sqlite3_result_text16be"];_sqlite3_result_text16le=Module["_sqlite3_result_text16le"]=wasmExports["sqlite3_result_text16le"];_sqlite3_result_value=Module["_sqlite3_result_value"]=wasmExports["sqlite3_result_value"];_sqlite3_result_zeroblob=Module["_sqlite3_result_zeroblob"]=wasmExports["sqlite3_result_zeroblob"];_sqlite3_result_zeroblob64=Module["_sqlite3_result_zeroblob64"]=wasmExports["sqlite3_result_zeroblob64"];_sqlite3_result_error_code=Module["_sqlite3_result_error_code"]=wasmExports["sqlite3_result_error_code"];_sqlite3_vtab_nochange=Module["_sqlite3_vtab_nochange"]=wasmExports["sqlite3_vtab_nochange"];_sqlite3_vtab_in_first=Module["_sqlite3_vtab_in_first"]=wasmExports["sqlite3_vtab_in_first"];_sqlite3_vtab_in_next=Module["_sqlite3_vtab_in_next"]=wasmExports["sqlite3_vtab_in_next"];_sqlite3_get_auxdata=Module["_sqlite3_get_auxdata"]=wasmExports["sqlite3_get_auxdata"];_sqlite3_set_auxdata=Module["_sqlite3_set_auxdata"]=wasmExports["sqlite3_set_auxdata"];_sqlite3_aggregate_count=Module["_sqlite3_aggregate_count"]=wasmExports["sqlite3_aggregate_count"];_sqlite3_column_bytes16=Module["_sqlite3_column_bytes16"]=wasmExports["sqlite3_column_bytes16"];_sqlite3_column_value=Module["_sqlite3_column_value"]=wasmExports["sqlite3_column_value"];_sqlite3_column_text16=Module["_sqlite3_column_text16"]=wasmExports["sqlite3_column_text16"];_sqlite3_column_name16=Module["_sqlite3_column_name16"]=wasmExports["sqlite3_column_name16"];_sqlite3_column_decltype16=Module["_sqlite3_column_decltype16"]=wasmExports["sqlite3_column_decltype16"];_sqlite3_bind_blob64=Module["_sqlite3_bind_blob64"]=wasmExports["sqlite3_bind_blob64"];_sqlite3_bind_int=Module["_sqlite3_bind_int"]=wasmExports["sqlite3_bind_int"];_sqlite3_bind_pointer=Module["_sqlite3_bind_pointer"]=wasmExports["sqlite3_bind_pointer"];_sqlite3_bind_text64=Module["_sqlite3_bind_text64"]=wasmExports["sqlite3_bind_text64"];_sqlite3_bind_text16=Module["_sqlite3_bind_text16"]=wasmExports["sqlite3_bind_text16"];_sqlite3_bind_value=Module["_sqlite3_bind_value"]=wasmExports["sqlite3_bind_value"];_sqlite3_bind_zeroblob=Module["_sqlite3_bind_zeroblob"]=wasmExports["sqlite3_bind_zeroblob"];_sqlite3_bind_zeroblob64=Module["_sqlite3_bind_zeroblob64"]=wasmExports["sqlite3_bind_zeroblob64"];_sqlite3_bind_parameter_index=Module["_sqlite3_bind_parameter_index"]=wasmExports["sqlite3_bind_parameter_index"];_sqlite3_transfer_bindings=Module["_sqlite3_transfer_bindings"]=wasmExports["sqlite3_transfer_bindings"];_sqlite3_stmt_isexplain=Module["_sqlite3_stmt_isexplain"]=wasmExports["sqlite3_stmt_isexplain"];_sqlite3_next_stmt=Module["_sqlite3_next_stmt"]=wasmExports["sqlite3_next_stmt"];_sqlite3_stmt_status=Module["_sqlite3_stmt_status"]=wasmExports["sqlite3_stmt_status"];_sqlite3_sql=Module["_sqlite3_sql"]=wasmExports["sqlite3_sql"];_sqlite3_value_numeric_type=Module["_sqlite3_value_numeric_type"]=wasmExports["sqlite3_value_numeric_type"];_sqlite3_blob_reopen=Module["_sqlite3_blob_reopen"]=wasmExports["sqlite3_blob_reopen"];_sqlite3_strglob=Module["_sqlite3_strglob"]=wasmExports["sqlite3_strglob"];_sqlite3_strlike=Module["_sqlite3_strlike"]=wasmExports["sqlite3_strlike"];_sqlite3_load_extension=Module["_sqlite3_load_extension"]=wasmExports["sqlite3_load_extension"];_sqlite3_enable_load_extension=Module["_sqlite3_enable_load_extension"]=wasmExports["sqlite3_enable_load_extension"];_sqlite3_auto_extension=Module["_sqlite3_auto_extension"]=wasmExports["sqlite3_auto_extension"];_sqlite3_cancel_auto_extension=Module["_sqlite3_cancel_auto_extension"]=wasmExports["sqlite3_cancel_auto_extension"];_sqlite3_reset_auto_extension=Module["_sqlite3_reset_auto_extension"]=wasmExports["sqlite3_reset_auto_extension"];_sqlite3_prepare=Module["_sqlite3_prepare"]=wasmExports["sqlite3_prepare"];_sqlite3_prepare_v3=Module["_sqlite3_prepare_v3"]=wasmExports["sqlite3_prepare_v3"];_sqlite3_prepare16=Module["_sqlite3_prepare16"]=wasmExports["sqlite3_prepare16"];_sqlite3_prepare16_v2=Module["_sqlite3_prepare16_v2"]=wasmExports["sqlite3_prepare16_v2"];_sqlite3_prepare16_v3=Module["_sqlite3_prepare16_v3"]=wasmExports["sqlite3_prepare16_v3"];_sqlite3_get_table=Module["_sqlite3_get_table"]=wasmExports["sqlite3_get_table"];_sqlite3_free_table=Module["_sqlite3_free_table"]=wasmExports["sqlite3_free_table"];_sqlite3_create_module=Module["_sqlite3_create_module"]=wasmExports["sqlite3_create_module"];_sqlite3_create_module_v2=Module["_sqlite3_create_module_v2"]=wasmExports["sqlite3_create_module_v2"];_sqlite3_drop_modules=Module["_sqlite3_drop_modules"]=wasmExports["sqlite3_drop_modules"];_sqlite3_declare_vtab=Module["_sqlite3_declare_vtab"]=wasmExports["sqlite3_declare_vtab"];_sqlite3_vtab_on_conflict=Module["_sqlite3_vtab_on_conflict"]=wasmExports["sqlite3_vtab_on_conflict"];_sqlite3_vtab_config=Module["_sqlite3_vtab_config"]=wasmExports["sqlite3_vtab_config"];_sqlite3_vtab_collation=Module["_sqlite3_vtab_collation"]=wasmExports["sqlite3_vtab_collation"];_sqlite3_vtab_in=Module["_sqlite3_vtab_in"]=wasmExports["sqlite3_vtab_in"];_sqlite3_vtab_rhs_value=Module["_sqlite3_vtab_rhs_value"]=wasmExports["sqlite3_vtab_rhs_value"];_sqlite3_vtab_distinct=Module["_sqlite3_vtab_distinct"]=wasmExports["sqlite3_vtab_distinct"];_sqlite3_keyword_name=Module["_sqlite3_keyword_name"]=wasmExports["sqlite3_keyword_name"];_sqlite3_keyword_count=Module["_sqlite3_keyword_count"]=wasmExports["sqlite3_keyword_count"];_sqlite3_keyword_check=Module["_sqlite3_keyword_check"]=wasmExports["sqlite3_keyword_check"];_sqlite3_complete16=Module["_sqlite3_complete16"]=wasmExports["sqlite3_complete16"];_sqlite3_shutdown=Module["_sqlite3_shutdown"]=wasmExports["sqlite3_shutdown"];_sqlite3_db_mutex=Module["_sqlite3_db_mutex"]=wasmExports["sqlite3_db_mutex"];_sqlite3_db_release_memory=Module["_sqlite3_db_release_memory"]=wasmExports["sqlite3_db_release_memory"];_sqlite3_db_cacheflush=Module["_sqlite3_db_cacheflush"]=wasmExports["sqlite3_db_cacheflush"];_sqlite3_set_last_insert_rowid=Module["_sqlite3_set_last_insert_rowid"]=wasmExports["sqlite3_set_last_insert_rowid"];_sqlite3_changes64=Module["_sqlite3_changes64"]=wasmExports["sqlite3_changes64"];_sqlite3_total_changes64=Module["_sqlite3_total_changes64"]=wasmExports["sqlite3_total_changes64"];_sqlite3_txn_state=Module["_sqlite3_txn_state"]=wasmExports["sqlite3_txn_state"];_sqlite3_busy_handler=Module["_sqlite3_busy_handler"]=wasmExports["sqlite3_busy_handler"];_sqlite3_create_function=Module["_sqlite3_create_function"]=wasmExports["sqlite3_create_function"];_sqlite3_create_function16=Module["_sqlite3_create_function16"]=wasmExports["sqlite3_create_function16"];_sqlite3_overload_function=Module["_sqlite3_overload_function"]=wasmExports["sqlite3_overload_function"];_sqlite3_trace=Module["_sqlite3_trace"]=wasmExports["sqlite3_trace"];_sqlite3_profile=Module["_sqlite3_profile"]=wasmExports["sqlite3_profile"];_sqlite3_commit_hook=Module["_sqlite3_commit_hook"]=wasmExports["sqlite3_commit_hook"];_sqlite3_update_hook=Module["_sqlite3_update_hook"]=wasmExports["sqlite3_update_hook"];_sqlite3_rollback_hook=Module["_sqlite3_rollback_hook"]=wasmExports["sqlite3_rollback_hook"];_sqlite3_autovacuum_pages=Module["_sqlite3_autovacuum_pages"]=wasmExports["sqlite3_autovacuum_pages"];_sqlite3_wal_autocheckpoint=Module["_sqlite3_wal_autocheckpoint"]=wasmExports["sqlite3_wal_autocheckpoint"];_sqlite3_wal_hook=Module["_sqlite3_wal_hook"]=wasmExports["sqlite3_wal_hook"];_sqlite3_wal_checkpoint_v2=Module["_sqlite3_wal_checkpoint_v2"]=wasmExports["sqlite3_wal_checkpoint_v2"];_sqlite3_wal_checkpoint=Module["_sqlite3_wal_checkpoint"]=wasmExports["sqlite3_wal_checkpoint"];_sqlite3_error_offset=Module["_sqlite3_error_offset"]=wasmExports["sqlite3_error_offset"];_sqlite3_errmsg16=Module["_sqlite3_errmsg16"]=wasmExports["sqlite3_errmsg16"];_sqlite3_system_errno=Module["_sqlite3_system_errno"]=wasmExports["sqlite3_system_errno"];_sqlite3_open=Module["_sqlite3_open"]=wasmExports["sqlite3_open"];_sqlite3_free_filename=Module["_sqlite3_free_filename"]=wasmExports["sqlite3_free_filename"];_sqlite3_open16=Module["_sqlite3_open16"]=wasmExports["sqlite3_open16"];_sqlite3_create_collation=Module["_sqlite3_create_collation"]=wasmExports["sqlite3_create_collation"];_sqlite3_create_collation16=Module["_sqlite3_create_collation16"]=wasmExports["sqlite3_create_collation16"];_sqlite3_collation_needed=Module["_sqlite3_collation_needed"]=wasmExports["sqlite3_collation_needed"];_sqlite3_collation_needed16=Module["_sqlite3_collation_needed16"]=wasmExports["sqlite3_collation_needed16"];_sqlite3_global_recover=Module["_sqlite3_global_recover"]=wasmExports["sqlite3_global_recover"];_sqlite3_thread_cleanup=Module["_sqlite3_thread_cleanup"]=wasmExports["sqlite3_thread_cleanup"];_sqlite3_table_column_metadata=Module["_sqlite3_table_column_metadata"]=wasmExports["sqlite3_table_column_metadata"];_sqlite3_extended_result_codes=Module["_sqlite3_extended_result_codes"]=wasmExports["sqlite3_extended_result_codes"];_sqlite3_test_control=Module["_sqlite3_test_control"]=wasmExports["sqlite3_test_control"];_sqlite3_create_filename=Module["_sqlite3_create_filename"]=wasmExports["sqlite3_create_filename"];_sqlite3_uri_key=Module["_sqlite3_uri_key"]=wasmExports["sqlite3_uri_key"];_sqlite3_uri_int64=Module["_sqlite3_uri_int64"]=wasmExports["sqlite3_uri_int64"];_sqlite3_filename_database=Module["_sqlite3_filename_database"]=wasmExports["sqlite3_filename_database"];_sqlite3_filename_journal=Module["_sqlite3_filename_journal"]=wasmExports["sqlite3_filename_journal"];_sqlite3_filename_wal=Module["_sqlite3_filename_wal"]=wasmExports["sqlite3_filename_wal"];_sqlite3_db_name=Module["_sqlite3_db_name"]=wasmExports["sqlite3_db_name"];_sqlite3_db_filename=Module["_sqlite3_db_filename"]=wasmExports["sqlite3_db_filename"];_sqlite3_db_readonly=Module["_sqlite3_db_readonly"]=wasmExports["sqlite3_db_readonly"];_sqlite3_compileoption_used=Module["_sqlite3_compileoption_used"]=wasmExports["sqlite3_compileoption_used"];_sqlite3_compileoption_get=Module["_sqlite3_compileoption_get"]=wasmExports["sqlite3_compileoption_get"];_sqlite3_rtree_geometry_callback=Module["_sqlite3_rtree_geometry_callback"]=wasmExports["sqlite3_rtree_geometry_callback"];_sqlite3_rtree_query_callback=Module["_sqlite3_rtree_query_callback"]=wasmExports["sqlite3_rtree_query_callback"];_sqlite3_sourceid=Module["_sqlite3_sourceid"]=wasmExports["sqlite3_sourceid"];___floatditf=Module["___floatditf"]=wasmExports["__floatditf"];_qsort=Module["_qsort"]=wasmExports["qsort"];_posix_fallocate=Module["_posix_fallocate"]=wasmExports["posix_fallocate"];_geteuid=Module["_geteuid"]=wasmExports["geteuid"];_trunc=Module["_trunc"]=wasmExports["trunc"];_FSE_versionNumber=Module["_FSE_versionNumber"]=wasmExports["FSE_versionNumber"];_FSE_isError=Module["_FSE_isError"]=wasmExports["FSE_isError"];_FSE_getErrorName=Module["_FSE_getErrorName"]=wasmExports["FSE_getErrorName"];_ERR_getErrorString=Module["_ERR_getErrorString"]=wasmExports["ERR_getErrorString"];_HUF_isError=Module["_HUF_isError"]=wasmExports["HUF_isError"];_HUF_getErrorName=Module["_HUF_getErrorName"]=wasmExports["HUF_getErrorName"];_FSE_readNCount_bmi2=Module["_FSE_readNCount_bmi2"]=wasmExports["FSE_readNCount_bmi2"];_FSE_readNCount=Module["_FSE_readNCount"]=wasmExports["FSE_readNCount"];_HUF_readStats=Module["_HUF_readStats"]=wasmExports["HUF_readStats"];_HUF_readStats_wksp=Module["_HUF_readStats_wksp"]=wasmExports["HUF_readStats_wksp"];_FSE_decompress_wksp_bmi2=Module["_FSE_decompress_wksp_bmi2"]=wasmExports["FSE_decompress_wksp_bmi2"];_FSE_buildDTable_wksp=Module["_FSE_buildDTable_wksp"]=wasmExports["FSE_buildDTable_wksp"];_POOL_create=Module["_POOL_create"]=wasmExports["POOL_create"];_POOL_create_advanced=Module["_POOL_create_advanced"]=wasmExports["POOL_create_advanced"];_POOL_free=Module["_POOL_free"]=wasmExports["POOL_free"];_POOL_joinJobs=Module["_POOL_joinJobs"]=wasmExports["POOL_joinJobs"];_POOL_resize=Module["_POOL_resize"]=wasmExports["POOL_resize"];_POOL_add=Module["_POOL_add"]=wasmExports["POOL_add"];_POOL_tryAdd=Module["_POOL_tryAdd"]=wasmExports["POOL_tryAdd"];_POOL_sizeof=Module["_POOL_sizeof"]=wasmExports["POOL_sizeof"];_ZSTD_XXH_versionNumber=Module["_ZSTD_XXH_versionNumber"]=wasmExports["ZSTD_XXH_versionNumber"];_ZSTD_XXH32=Module["_ZSTD_XXH32"]=wasmExports["ZSTD_XXH32"];_ZSTD_XXH32_createState=Module["_ZSTD_XXH32_createState"]=wasmExports["ZSTD_XXH32_createState"];_ZSTD_XXH32_freeState=Module["_ZSTD_XXH32_freeState"]=wasmExports["ZSTD_XXH32_freeState"];_ZSTD_XXH32_copyState=Module["_ZSTD_XXH32_copyState"]=wasmExports["ZSTD_XXH32_copyState"];_ZSTD_XXH32_reset=Module["_ZSTD_XXH32_reset"]=wasmExports["ZSTD_XXH32_reset"];_ZSTD_XXH32_update=Module["_ZSTD_XXH32_update"]=wasmExports["ZSTD_XXH32_update"];_ZSTD_XXH32_digest=Module["_ZSTD_XXH32_digest"]=wasmExports["ZSTD_XXH32_digest"];_ZSTD_XXH32_canonicalFromHash=Module["_ZSTD_XXH32_canonicalFromHash"]=wasmExports["ZSTD_XXH32_canonicalFromHash"];_ZSTD_XXH32_hashFromCanonical=Module["_ZSTD_XXH32_hashFromCanonical"]=wasmExports["ZSTD_XXH32_hashFromCanonical"];_ZSTD_XXH64=Module["_ZSTD_XXH64"]=wasmExports["ZSTD_XXH64"];_ZSTD_XXH64_createState=Module["_ZSTD_XXH64_createState"]=wasmExports["ZSTD_XXH64_createState"];_ZSTD_XXH64_freeState=Module["_ZSTD_XXH64_freeState"]=wasmExports["ZSTD_XXH64_freeState"];_ZSTD_XXH64_copyState=Module["_ZSTD_XXH64_copyState"]=wasmExports["ZSTD_XXH64_copyState"];_ZSTD_XXH64_reset=Module["_ZSTD_XXH64_reset"]=wasmExports["ZSTD_XXH64_reset"];_ZSTD_XXH64_update=Module["_ZSTD_XXH64_update"]=wasmExports["ZSTD_XXH64_update"];_ZSTD_XXH64_digest=Module["_ZSTD_XXH64_digest"]=wasmExports["ZSTD_XXH64_digest"];_ZSTD_XXH64_canonicalFromHash=Module["_ZSTD_XXH64_canonicalFromHash"]=wasmExports["ZSTD_XXH64_canonicalFromHash"];_ZSTD_XXH64_hashFromCanonical=Module["_ZSTD_XXH64_hashFromCanonical"]=wasmExports["ZSTD_XXH64_hashFromCanonical"];_ZSTD_getErrorCode=Module["_ZSTD_getErrorCode"]=wasmExports["ZSTD_getErrorCode"];_ZSTD_getErrorString=Module["_ZSTD_getErrorString"]=wasmExports["ZSTD_getErrorString"];_FSE_buildCTable_wksp=Module["_FSE_buildCTable_wksp"]=wasmExports["FSE_buildCTable_wksp"];_FSE_NCountWriteBound=Module["_FSE_NCountWriteBound"]=wasmExports["FSE_NCountWriteBound"];_FSE_writeNCount=Module["_FSE_writeNCount"]=wasmExports["FSE_writeNCount"];_FSE_optimalTableLog_internal=Module["_FSE_optimalTableLog_internal"]=wasmExports["FSE_optimalTableLog_internal"];_FSE_optimalTableLog=Module["_FSE_optimalTableLog"]=wasmExports["FSE_optimalTableLog"];_FSE_normalizeCount=Module["_FSE_normalizeCount"]=wasmExports["FSE_normalizeCount"];_FSE_buildCTable_rle=Module["_FSE_buildCTable_rle"]=wasmExports["FSE_buildCTable_rle"];_FSE_compress_usingCTable=Module["_FSE_compress_usingCTable"]=wasmExports["FSE_compress_usingCTable"];_FSE_compressBound=Module["_FSE_compressBound"]=wasmExports["FSE_compressBound"];_HIST_isError=Module["_HIST_isError"]=wasmExports["HIST_isError"];_HIST_add=Module["_HIST_add"]=wasmExports["HIST_add"];_HIST_count_simple=Module["_HIST_count_simple"]=wasmExports["HIST_count_simple"];_HIST_countFast_wksp=Module["_HIST_countFast_wksp"]=wasmExports["HIST_countFast_wksp"];_HIST_count_wksp=Module["_HIST_count_wksp"]=wasmExports["HIST_count_wksp"];_HIST_countFast=Module["_HIST_countFast"]=wasmExports["HIST_countFast"];_HIST_count=Module["_HIST_count"]=wasmExports["HIST_count"];_HUF_readCTableHeader=Module["_HUF_readCTableHeader"]=wasmExports["HUF_readCTableHeader"];_HUF_writeCTable_wksp=Module["_HUF_writeCTable_wksp"]=wasmExports["HUF_writeCTable_wksp"];_HUF_readCTable=Module["_HUF_readCTable"]=wasmExports["HUF_readCTable"];_HUF_getNbBitsFromCTable=Module["_HUF_getNbBitsFromCTable"]=wasmExports["HUF_getNbBitsFromCTable"];_HUF_buildCTable_wksp=Module["_HUF_buildCTable_wksp"]=wasmExports["HUF_buildCTable_wksp"];_HUF_estimateCompressedSize=Module["_HUF_estimateCompressedSize"]=wasmExports["HUF_estimateCompressedSize"];_HUF_validateCTable=Module["_HUF_validateCTable"]=wasmExports["HUF_validateCTable"];_HUF_compressBound=Module["_HUF_compressBound"]=wasmExports["HUF_compressBound"];_HUF_compress1X_usingCTable=Module["_HUF_compress1X_usingCTable"]=wasmExports["HUF_compress1X_usingCTable"];_HUF_compress4X_usingCTable=Module["_HUF_compress4X_usingCTable"]=wasmExports["HUF_compress4X_usingCTable"];_HUF_cardinality=Module["_HUF_cardinality"]=wasmExports["HUF_cardinality"];_HUF_minTableLog=Module["_HUF_minTableLog"]=wasmExports["HUF_minTableLog"];_HUF_optimalTableLog=Module["_HUF_optimalTableLog"]=wasmExports["HUF_optimalTableLog"];_HUF_compress1X_repeat=Module["_HUF_compress1X_repeat"]=wasmExports["HUF_compress1X_repeat"];_HUF_compress4X_repeat=Module["_HUF_compress4X_repeat"]=wasmExports["HUF_compress4X_repeat"];_ZSTD_createCCtx_advanced=Module["_ZSTD_createCCtx_advanced"]=wasmExports["ZSTD_createCCtx_advanced"];_ZSTD_initStaticCCtx=Module["_ZSTD_initStaticCCtx"]=wasmExports["ZSTD_initStaticCCtx"];_ZSTD_sizeof_CCtx=Module["_ZSTD_sizeof_CCtx"]=wasmExports["ZSTD_sizeof_CCtx"];_ZSTD_sizeof_CStream=Module["_ZSTD_sizeof_CStream"]=wasmExports["ZSTD_sizeof_CStream"];_ZSTD_getSeqStore=Module["_ZSTD_getSeqStore"]=wasmExports["ZSTD_getSeqStore"];_ZSTD_createCCtxParams=Module["_ZSTD_createCCtxParams"]=wasmExports["ZSTD_createCCtxParams"];_ZSTD_freeCCtxParams=Module["_ZSTD_freeCCtxParams"]=wasmExports["ZSTD_freeCCtxParams"];_ZSTD_CCtxParams_reset=Module["_ZSTD_CCtxParams_reset"]=wasmExports["ZSTD_CCtxParams_reset"];_ZSTD_CCtxParams_init=Module["_ZSTD_CCtxParams_init"]=wasmExports["ZSTD_CCtxParams_init"];_ZSTD_CCtxParams_init_advanced=Module["_ZSTD_CCtxParams_init_advanced"]=wasmExports["ZSTD_CCtxParams_init_advanced"];_ZSTD_checkCParams=Module["_ZSTD_checkCParams"]=wasmExports["ZSTD_checkCParams"];_ZSTD_CCtxParams_setParameter=Module["_ZSTD_CCtxParams_setParameter"]=wasmExports["ZSTD_CCtxParams_setParameter"];_ZSTD_CCtx_getParameter=Module["_ZSTD_CCtx_getParameter"]=wasmExports["ZSTD_CCtx_getParameter"];_ZSTD_CCtxParams_getParameter=Module["_ZSTD_CCtxParams_getParameter"]=wasmExports["ZSTD_CCtxParams_getParameter"];_ZSTD_CCtx_setParametersUsingCCtxParams=Module["_ZSTD_CCtx_setParametersUsingCCtxParams"]=wasmExports["ZSTD_CCtx_setParametersUsingCCtxParams"];_ZSTD_CCtx_setCParams=Module["_ZSTD_CCtx_setCParams"]=wasmExports["ZSTD_CCtx_setCParams"];_ZSTD_CCtx_setFParams=Module["_ZSTD_CCtx_setFParams"]=wasmExports["ZSTD_CCtx_setFParams"];_ZSTD_CCtx_setParams=Module["_ZSTD_CCtx_setParams"]=wasmExports["ZSTD_CCtx_setParams"];_ZSTD_CCtx_loadDictionary_advanced=Module["_ZSTD_CCtx_loadDictionary_advanced"]=wasmExports["ZSTD_CCtx_loadDictionary_advanced"];_ZSTD_CCtx_loadDictionary_byReference=Module["_ZSTD_CCtx_loadDictionary_byReference"]=wasmExports["ZSTD_CCtx_loadDictionary_byReference"];_ZSTD_CCtx_refThreadPool=Module["_ZSTD_CCtx_refThreadPool"]=wasmExports["ZSTD_CCtx_refThreadPool"];_ZSTD_CCtx_refPrefix_advanced=Module["_ZSTD_CCtx_refPrefix_advanced"]=wasmExports["ZSTD_CCtx_refPrefix_advanced"];_ZSTD_cycleLog=Module["_ZSTD_cycleLog"]=wasmExports["ZSTD_cycleLog"];_ZSTD_adjustCParams=Module["_ZSTD_adjustCParams"]=wasmExports["ZSTD_adjustCParams"];_ZSTD_getCParamsFromCCtxParams=Module["_ZSTD_getCParamsFromCCtxParams"]=wasmExports["ZSTD_getCParamsFromCCtxParams"];_ZSTD_estimateCCtxSize_usingCCtxParams=Module["_ZSTD_estimateCCtxSize_usingCCtxParams"]=wasmExports["ZSTD_estimateCCtxSize_usingCCtxParams"];_ZSTD_ldm_getTableSize=Module["_ZSTD_ldm_getTableSize"]=wasmExports["ZSTD_ldm_getTableSize"];_ZSTD_ldm_getMaxNbSeq=Module["_ZSTD_ldm_getMaxNbSeq"]=wasmExports["ZSTD_ldm_getMaxNbSeq"];_ZSTD_estimateCCtxSize_usingCParams=Module["_ZSTD_estimateCCtxSize_usingCParams"]=wasmExports["ZSTD_estimateCCtxSize_usingCParams"];_ZSTD_ldm_adjustParameters=Module["_ZSTD_ldm_adjustParameters"]=wasmExports["ZSTD_ldm_adjustParameters"];_ZSTD_estimateCCtxSize=Module["_ZSTD_estimateCCtxSize"]=wasmExports["ZSTD_estimateCCtxSize"];_ZSTD_estimateCStreamSize_usingCCtxParams=Module["_ZSTD_estimateCStreamSize_usingCCtxParams"]=wasmExports["ZSTD_estimateCStreamSize_usingCCtxParams"];_ZSTD_estimateCStreamSize_usingCParams=Module["_ZSTD_estimateCStreamSize_usingCParams"]=wasmExports["ZSTD_estimateCStreamSize_usingCParams"];_ZSTD_estimateCStreamSize=Module["_ZSTD_estimateCStreamSize"]=wasmExports["ZSTD_estimateCStreamSize"];_ZSTD_getFrameProgression=Module["_ZSTD_getFrameProgression"]=wasmExports["ZSTD_getFrameProgression"];_ZSTD_toFlushNow=Module["_ZSTD_toFlushNow"]=wasmExports["ZSTD_toFlushNow"];_ZSTD_reset_compressedBlockState=Module["_ZSTD_reset_compressedBlockState"]=wasmExports["ZSTD_reset_compressedBlockState"];_ZSTD_invalidateRepCodes=Module["_ZSTD_invalidateRepCodes"]=wasmExports["ZSTD_invalidateRepCodes"];_ZSTD_copyCCtx=Module["_ZSTD_copyCCtx"]=wasmExports["ZSTD_copyCCtx"];_ZSTD_seqToCodes=Module["_ZSTD_seqToCodes"]=wasmExports["ZSTD_seqToCodes"];_ZSTD_selectBlockCompressor=Module["_ZSTD_selectBlockCompressor"]=wasmExports["ZSTD_selectBlockCompressor"];_ZSTD_resetSeqStore=Module["_ZSTD_resetSeqStore"]=wasmExports["ZSTD_resetSeqStore"];_ZSTD_sequenceBound=Module["_ZSTD_sequenceBound"]=wasmExports["ZSTD_sequenceBound"];_ZSTD_generateSequences=Module["_ZSTD_generateSequences"]=wasmExports["ZSTD_generateSequences"];_ZSTD_compress2=Module["_ZSTD_compress2"]=wasmExports["ZSTD_compress2"];_ZSTD_mergeBlockDelimiters=Module["_ZSTD_mergeBlockDelimiters"]=wasmExports["ZSTD_mergeBlockDelimiters"];_ZSTD_buildBlockEntropyStats=Module["_ZSTD_buildBlockEntropyStats"]=wasmExports["ZSTD_buildBlockEntropyStats"];_ZSTD_writeSkippableFrame=Module["_ZSTD_writeSkippableFrame"]=wasmExports["ZSTD_writeSkippableFrame"];_ZSTD_writeLastEmptyBlock=Module["_ZSTD_writeLastEmptyBlock"]=wasmExports["ZSTD_writeLastEmptyBlock"];_ZSTD_referenceExternalSequences=Module["_ZSTD_referenceExternalSequences"]=wasmExports["ZSTD_referenceExternalSequences"];_ZSTD_compressContinue_public=Module["_ZSTD_compressContinue_public"]=wasmExports["ZSTD_compressContinue_public"];_ZSTD_splitBlock=Module["_ZSTD_splitBlock"]=wasmExports["ZSTD_splitBlock"];_ZSTD_compressSuperBlock=Module["_ZSTD_compressSuperBlock"]=wasmExports["ZSTD_compressSuperBlock"];_ZSTD_compressContinue=Module["_ZSTD_compressContinue"]=wasmExports["ZSTD_compressContinue"];_ZSTD_getBlockSize=Module["_ZSTD_getBlockSize"]=wasmExports["ZSTD_getBlockSize"];_ZSTD_compressBlock_deprecated=Module["_ZSTD_compressBlock_deprecated"]=wasmExports["ZSTD_compressBlock_deprecated"];_ZSTD_compressBlock=Module["_ZSTD_compressBlock"]=wasmExports["ZSTD_compressBlock"];_ZSTD_loadCEntropy=Module["_ZSTD_loadCEntropy"]=wasmExports["ZSTD_loadCEntropy"];_ZSTD_compressBegin_advanced_internal=Module["_ZSTD_compressBegin_advanced_internal"]=wasmExports["ZSTD_compressBegin_advanced_internal"];_ZSTD_compressBegin_advanced=Module["_ZSTD_compressBegin_advanced"]=wasmExports["ZSTD_compressBegin_advanced"];_ZSTD_compressBegin_usingDict=Module["_ZSTD_compressBegin_usingDict"]=wasmExports["ZSTD_compressBegin_usingDict"];_ZSTD_compressBegin=Module["_ZSTD_compressBegin"]=wasmExports["ZSTD_compressBegin"];_ZSTD_CCtx_trace=Module["_ZSTD_CCtx_trace"]=wasmExports["ZSTD_CCtx_trace"];_ZSTD_compressEnd_public=Module["_ZSTD_compressEnd_public"]=wasmExports["ZSTD_compressEnd_public"];_ZSTD_compressEnd=Module["_ZSTD_compressEnd"]=wasmExports["ZSTD_compressEnd"];_ZSTD_compress_advanced=Module["_ZSTD_compress_advanced"]=wasmExports["ZSTD_compress_advanced"];_ZSTD_compress_advanced_internal=Module["_ZSTD_compress_advanced_internal"]=wasmExports["ZSTD_compress_advanced_internal"];_ZSTD_compress_usingDict=Module["_ZSTD_compress_usingDict"]=wasmExports["ZSTD_compress_usingDict"];_ZSTD_compressCCtx=Module["_ZSTD_compressCCtx"]=wasmExports["ZSTD_compressCCtx"];_ZSTD_compress=Module["_ZSTD_compress"]=wasmExports["ZSTD_compress"];_ZSTD_estimateCDictSize_advanced=Module["_ZSTD_estimateCDictSize_advanced"]=wasmExports["ZSTD_estimateCDictSize_advanced"];_ZSTD_estimateCDictSize=Module["_ZSTD_estimateCDictSize"]=wasmExports["ZSTD_estimateCDictSize"];_ZSTD_sizeof_CDict=Module["_ZSTD_sizeof_CDict"]=wasmExports["ZSTD_sizeof_CDict"];_ZSTD_createCDict_advanced=Module["_ZSTD_createCDict_advanced"]=wasmExports["ZSTD_createCDict_advanced"];_ZSTD_createCDict_advanced2=Module["_ZSTD_createCDict_advanced2"]=wasmExports["ZSTD_createCDict_advanced2"];_ZSTD_createCDict_byReference=Module["_ZSTD_createCDict_byReference"]=wasmExports["ZSTD_createCDict_byReference"];_ZSTD_initStaticCDict=Module["_ZSTD_initStaticCDict"]=wasmExports["ZSTD_initStaticCDict"];_ZSTD_getCParamsFromCDict=Module["_ZSTD_getCParamsFromCDict"]=wasmExports["ZSTD_getCParamsFromCDict"];_ZSTD_getDictID_fromCDict=Module["_ZSTD_getDictID_fromCDict"]=wasmExports["ZSTD_getDictID_fromCDict"];_ZSTD_compressBegin_usingCDict_advanced=Module["_ZSTD_compressBegin_usingCDict_advanced"]=wasmExports["ZSTD_compressBegin_usingCDict_advanced"];_ZSTD_compressBegin_usingCDict_deprecated=Module["_ZSTD_compressBegin_usingCDict_deprecated"]=wasmExports["ZSTD_compressBegin_usingCDict_deprecated"];_ZSTD_compressBegin_usingCDict=Module["_ZSTD_compressBegin_usingCDict"]=wasmExports["ZSTD_compressBegin_usingCDict"];_ZSTD_compress_usingCDict_advanced=Module["_ZSTD_compress_usingCDict_advanced"]=wasmExports["ZSTD_compress_usingCDict_advanced"];_ZSTD_compress_usingCDict=Module["_ZSTD_compress_usingCDict"]=wasmExports["ZSTD_compress_usingCDict"];_ZSTD_createCStream=Module["_ZSTD_createCStream"]=wasmExports["ZSTD_createCStream"];_ZSTD_createCStream_advanced=Module["_ZSTD_createCStream_advanced"]=wasmExports["ZSTD_createCStream_advanced"];_ZSTD_initStaticCStream=Module["_ZSTD_initStaticCStream"]=wasmExports["ZSTD_initStaticCStream"];_ZSTD_freeCStream=Module["_ZSTD_freeCStream"]=wasmExports["ZSTD_freeCStream"];_ZSTD_CStreamInSize=Module["_ZSTD_CStreamInSize"]=wasmExports["ZSTD_CStreamInSize"];_ZSTD_CStreamOutSize=Module["_ZSTD_CStreamOutSize"]=wasmExports["ZSTD_CStreamOutSize"];_ZSTD_resetCStream=Module["_ZSTD_resetCStream"]=wasmExports["ZSTD_resetCStream"];_ZSTD_initCStream_internal=Module["_ZSTD_initCStream_internal"]=wasmExports["ZSTD_initCStream_internal"];_ZSTD_initCStream_usingCDict_advanced=Module["_ZSTD_initCStream_usingCDict_advanced"]=wasmExports["ZSTD_initCStream_usingCDict_advanced"];_ZSTD_initCStream_usingCDict=Module["_ZSTD_initCStream_usingCDict"]=wasmExports["ZSTD_initCStream_usingCDict"];_ZSTD_initCStream_advanced=Module["_ZSTD_initCStream_advanced"]=wasmExports["ZSTD_initCStream_advanced"];_ZSTD_initCStream_usingDict=Module["_ZSTD_initCStream_usingDict"]=wasmExports["ZSTD_initCStream_usingDict"];_ZSTD_initCStream_srcSize=Module["_ZSTD_initCStream_srcSize"]=wasmExports["ZSTD_initCStream_srcSize"];_ZSTD_initCStream=Module["_ZSTD_initCStream"]=wasmExports["ZSTD_initCStream"];_ZSTD_compressStream=Module["_ZSTD_compressStream"]=wasmExports["ZSTD_compressStream"];_ZSTD_compressStream2_simpleArgs=Module["_ZSTD_compressStream2_simpleArgs"]=wasmExports["ZSTD_compressStream2_simpleArgs"];_ZSTD_compressSequences=Module["_ZSTD_compressSequences"]=wasmExports["ZSTD_compressSequences"];_ZSTD_convertBlockSequences=Module["_ZSTD_convertBlockSequences"]=wasmExports["ZSTD_convertBlockSequences"];_ZSTD_get1BlockSummary=Module["_ZSTD_get1BlockSummary"]=wasmExports["ZSTD_get1BlockSummary"];_ZSTD_compressSequencesAndLiterals=Module["_ZSTD_compressSequencesAndLiterals"]=wasmExports["ZSTD_compressSequencesAndLiterals"];_ZSTD_flushStream=Module["_ZSTD_flushStream"]=wasmExports["ZSTD_flushStream"];_ZSTD_endStream=Module["_ZSTD_endStream"]=wasmExports["ZSTD_endStream"];_ZSTD_getCParams=Module["_ZSTD_getCParams"]=wasmExports["ZSTD_getCParams"];_ZSTD_getParams=Module["_ZSTD_getParams"]=wasmExports["ZSTD_getParams"];_ZSTD_registerSequenceProducer=Module["_ZSTD_registerSequenceProducer"]=wasmExports["ZSTD_registerSequenceProducer"];_ZSTD_CCtxParams_registerSequenceProducer=Module["_ZSTD_CCtxParams_registerSequenceProducer"]=wasmExports["ZSTD_CCtxParams_registerSequenceProducer"];_ZSTD_selectEncodingType=Module["_ZSTD_selectEncodingType"]=wasmExports["ZSTD_selectEncodingType"];_ZSTD_buildCTable=Module["_ZSTD_buildCTable"]=wasmExports["ZSTD_buildCTable"];_ZSTD_ldm_skipRawSeqStoreBytes=Module["_ZSTD_ldm_skipRawSeqStoreBytes"]=wasmExports["ZSTD_ldm_skipRawSeqStoreBytes"];_ZSTD_ldm_skipSequences=Module["_ZSTD_ldm_skipSequences"]=wasmExports["ZSTD_ldm_skipSequences"];_ZSTD_ldm_blockCompress=Module["_ZSTD_ldm_blockCompress"]=wasmExports["ZSTD_ldm_blockCompress"];_ZSTD_ldm_generateSequences=Module["_ZSTD_ldm_generateSequences"]=wasmExports["ZSTD_ldm_generateSequences"];_ZSTD_crossEntropyCost=Module["_ZSTD_crossEntropyCost"]=wasmExports["ZSTD_crossEntropyCost"];_ZSTD_fseBitCost=Module["_ZSTD_fseBitCost"]=wasmExports["ZSTD_fseBitCost"];_ZSTD_compressLiterals=Module["_ZSTD_compressLiterals"]=wasmExports["ZSTD_compressLiterals"];_ZSTD_encodeSequences=Module["_ZSTD_encodeSequences"]=wasmExports["ZSTD_encodeSequences"];_ZSTD_ldm_fillHashTable=Module["_ZSTD_ldm_fillHashTable"]=wasmExports["ZSTD_ldm_fillHashTable"];_ZSTD_fillHashTable=Module["_ZSTD_fillHashTable"]=wasmExports["ZSTD_fillHashTable"];_ZSTD_fillDoubleHashTable=Module["_ZSTD_fillDoubleHashTable"]=wasmExports["ZSTD_fillDoubleHashTable"];_ZSTD_dedicatedDictSearch_lazy_loadDictionary=Module["_ZSTD_dedicatedDictSearch_lazy_loadDictionary"]=wasmExports["ZSTD_dedicatedDictSearch_lazy_loadDictionary"];_ZSTD_row_update=Module["_ZSTD_row_update"]=wasmExports["ZSTD_row_update"];_ZSTD_insertAndFindFirstIndex=Module["_ZSTD_insertAndFindFirstIndex"]=wasmExports["ZSTD_insertAndFindFirstIndex"];_ZSTD_updateTree=Module["_ZSTD_updateTree"]=wasmExports["ZSTD_updateTree"];_ZSTD_compressBlock_fast=Module["_ZSTD_compressBlock_fast"]=wasmExports["ZSTD_compressBlock_fast"];_ZSTD_compressBlock_doubleFast=Module["_ZSTD_compressBlock_doubleFast"]=wasmExports["ZSTD_compressBlock_doubleFast"];_ZSTD_compressBlock_greedy=Module["_ZSTD_compressBlock_greedy"]=wasmExports["ZSTD_compressBlock_greedy"];_ZSTD_compressBlock_lazy=Module["_ZSTD_compressBlock_lazy"]=wasmExports["ZSTD_compressBlock_lazy"];_ZSTD_compressBlock_lazy2=Module["_ZSTD_compressBlock_lazy2"]=wasmExports["ZSTD_compressBlock_lazy2"];_ZSTD_compressBlock_btlazy2=Module["_ZSTD_compressBlock_btlazy2"]=wasmExports["ZSTD_compressBlock_btlazy2"];_ZSTD_compressBlock_btopt=Module["_ZSTD_compressBlock_btopt"]=wasmExports["ZSTD_compressBlock_btopt"];_ZSTD_compressBlock_btultra=Module["_ZSTD_compressBlock_btultra"]=wasmExports["ZSTD_compressBlock_btultra"];_ZSTD_compressBlock_btultra2=Module["_ZSTD_compressBlock_btultra2"]=wasmExports["ZSTD_compressBlock_btultra2"];_ZSTD_compressBlock_fast_extDict=Module["_ZSTD_compressBlock_fast_extDict"]=wasmExports["ZSTD_compressBlock_fast_extDict"];_ZSTD_compressBlock_doubleFast_extDict=Module["_ZSTD_compressBlock_doubleFast_extDict"]=wasmExports["ZSTD_compressBlock_doubleFast_extDict"];_ZSTD_compressBlock_greedy_extDict=Module["_ZSTD_compressBlock_greedy_extDict"]=wasmExports["ZSTD_compressBlock_greedy_extDict"];_ZSTD_compressBlock_lazy_extDict=Module["_ZSTD_compressBlock_lazy_extDict"]=wasmExports["ZSTD_compressBlock_lazy_extDict"];_ZSTD_compressBlock_lazy2_extDict=Module["_ZSTD_compressBlock_lazy2_extDict"]=wasmExports["ZSTD_compressBlock_lazy2_extDict"];_ZSTD_compressBlock_btlazy2_extDict=Module["_ZSTD_compressBlock_btlazy2_extDict"]=wasmExports["ZSTD_compressBlock_btlazy2_extDict"];_ZSTD_compressBlock_btopt_extDict=Module["_ZSTD_compressBlock_btopt_extDict"]=wasmExports["ZSTD_compressBlock_btopt_extDict"];_ZSTD_compressBlock_btultra_extDict=Module["_ZSTD_compressBlock_btultra_extDict"]=wasmExports["ZSTD_compressBlock_btultra_extDict"];_ZSTD_compressBlock_fast_dictMatchState=Module["_ZSTD_compressBlock_fast_dictMatchState"]=wasmExports["ZSTD_compressBlock_fast_dictMatchState"];_ZSTD_compressBlock_doubleFast_dictMatchState=Module["_ZSTD_compressBlock_doubleFast_dictMatchState"]=wasmExports["ZSTD_compressBlock_doubleFast_dictMatchState"];_ZSTD_compressBlock_greedy_dictMatchState=Module["_ZSTD_compressBlock_greedy_dictMatchState"]=wasmExports["ZSTD_compressBlock_greedy_dictMatchState"];_ZSTD_compressBlock_lazy_dictMatchState=Module["_ZSTD_compressBlock_lazy_dictMatchState"]=wasmExports["ZSTD_compressBlock_lazy_dictMatchState"];_ZSTD_compressBlock_lazy2_dictMatchState=Module["_ZSTD_compressBlock_lazy2_dictMatchState"]=wasmExports["ZSTD_compressBlock_lazy2_dictMatchState"];_ZSTD_compressBlock_btlazy2_dictMatchState=Module["_ZSTD_compressBlock_btlazy2_dictMatchState"]=wasmExports["ZSTD_compressBlock_btlazy2_dictMatchState"];_ZSTD_compressBlock_btopt_dictMatchState=Module["_ZSTD_compressBlock_btopt_dictMatchState"]=wasmExports["ZSTD_compressBlock_btopt_dictMatchState"];_ZSTD_compressBlock_btultra_dictMatchState=Module["_ZSTD_compressBlock_btultra_dictMatchState"]=wasmExports["ZSTD_compressBlock_btultra_dictMatchState"];_ZSTD_compressBlock_greedy_dedicatedDictSearch=Module["_ZSTD_compressBlock_greedy_dedicatedDictSearch"]=wasmExports["ZSTD_compressBlock_greedy_dedicatedDictSearch"];_ZSTD_compressBlock_lazy_dedicatedDictSearch=Module["_ZSTD_compressBlock_lazy_dedicatedDictSearch"]=wasmExports["ZSTD_compressBlock_lazy_dedicatedDictSearch"];_ZSTD_compressBlock_lazy2_dedicatedDictSearch=Module["_ZSTD_compressBlock_lazy2_dedicatedDictSearch"]=wasmExports["ZSTD_compressBlock_lazy2_dedicatedDictSearch"];_ZSTD_compressBlock_greedy_row=Module["_ZSTD_compressBlock_greedy_row"]=wasmExports["ZSTD_compressBlock_greedy_row"];_ZSTD_compressBlock_lazy_row=Module["_ZSTD_compressBlock_lazy_row"]=wasmExports["ZSTD_compressBlock_lazy_row"];_ZSTD_compressBlock_lazy2_row=Module["_ZSTD_compressBlock_lazy2_row"]=wasmExports["ZSTD_compressBlock_lazy2_row"];_ZSTD_compressBlock_greedy_extDict_row=Module["_ZSTD_compressBlock_greedy_extDict_row"]=wasmExports["ZSTD_compressBlock_greedy_extDict_row"];_ZSTD_compressBlock_lazy_extDict_row=Module["_ZSTD_compressBlock_lazy_extDict_row"]=wasmExports["ZSTD_compressBlock_lazy_extDict_row"];_ZSTD_compressBlock_lazy2_extDict_row=Module["_ZSTD_compressBlock_lazy2_extDict_row"]=wasmExports["ZSTD_compressBlock_lazy2_extDict_row"];_ZSTD_compressBlock_greedy_dictMatchState_row=Module["_ZSTD_compressBlock_greedy_dictMatchState_row"]=wasmExports["ZSTD_compressBlock_greedy_dictMatchState_row"];_ZSTD_compressBlock_lazy_dictMatchState_row=Module["_ZSTD_compressBlock_lazy_dictMatchState_row"]=wasmExports["ZSTD_compressBlock_lazy_dictMatchState_row"];_ZSTD_compressBlock_lazy2_dictMatchState_row=Module["_ZSTD_compressBlock_lazy2_dictMatchState_row"]=wasmExports["ZSTD_compressBlock_lazy2_dictMatchState_row"];_ZSTD_compressBlock_greedy_dedicatedDictSearch_row=Module["_ZSTD_compressBlock_greedy_dedicatedDictSearch_row"]=wasmExports["ZSTD_compressBlock_greedy_dedicatedDictSearch_row"];_ZSTD_compressBlock_lazy_dedicatedDictSearch_row=Module["_ZSTD_compressBlock_lazy_dedicatedDictSearch_row"]=wasmExports["ZSTD_compressBlock_lazy_dedicatedDictSearch_row"];_ZSTD_compressBlock_lazy2_dedicatedDictSearch_row=Module["_ZSTD_compressBlock_lazy2_dedicatedDictSearch_row"]=wasmExports["ZSTD_compressBlock_lazy2_dedicatedDictSearch_row"];_ZSTD_noCompressLiterals=Module["_ZSTD_noCompressLiterals"]=wasmExports["ZSTD_noCompressLiterals"];_ZSTD_compressRleLiteralsBlock=Module["_ZSTD_compressRleLiteralsBlock"]=wasmExports["ZSTD_compressRleLiteralsBlock"];_ZSTDMT_createCCtx_advanced=Module["_ZSTDMT_createCCtx_advanced"]=wasmExports["ZSTDMT_createCCtx_advanced"];_ZSTDMT_freeCCtx=Module["_ZSTDMT_freeCCtx"]=wasmExports["ZSTDMT_freeCCtx"];_ZSTDMT_sizeof_CCtx=Module["_ZSTDMT_sizeof_CCtx"]=wasmExports["ZSTDMT_sizeof_CCtx"];_ZSTDMT_updateCParams_whileCompressing=Module["_ZSTDMT_updateCParams_whileCompressing"]=wasmExports["ZSTDMT_updateCParams_whileCompressing"];_ZSTDMT_getFrameProgression=Module["_ZSTDMT_getFrameProgression"]=wasmExports["ZSTDMT_getFrameProgression"];_ZSTDMT_toFlushNow=Module["_ZSTDMT_toFlushNow"]=wasmExports["ZSTDMT_toFlushNow"];_ZSTDMT_initCStream_internal=Module["_ZSTDMT_initCStream_internal"]=wasmExports["ZSTDMT_initCStream_internal"];_ZSTDMT_nextInputSizeHint=Module["_ZSTDMT_nextInputSizeHint"]=wasmExports["ZSTDMT_nextInputSizeHint"];_ZSTDMT_compressStream_generic=Module["_ZSTDMT_compressStream_generic"]=wasmExports["ZSTDMT_compressStream_generic"];_HUF_readDTableX1_wksp=Module["_HUF_readDTableX1_wksp"]=wasmExports["HUF_readDTableX1_wksp"];_HUF_readDTableX2_wksp=Module["_HUF_readDTableX2_wksp"]=wasmExports["HUF_readDTableX2_wksp"];_HUF_decompress1X2_DCtx_wksp=Module["_HUF_decompress1X2_DCtx_wksp"]=wasmExports["HUF_decompress1X2_DCtx_wksp"];_HUF_selectDecoder=Module["_HUF_selectDecoder"]=wasmExports["HUF_selectDecoder"];_HUF_decompress1X_DCtx_wksp=Module["_HUF_decompress1X_DCtx_wksp"]=wasmExports["HUF_decompress1X_DCtx_wksp"];_HUF_decompress1X1_DCtx_wksp=Module["_HUF_decompress1X1_DCtx_wksp"]=wasmExports["HUF_decompress1X1_DCtx_wksp"];_HUF_decompress1X_usingDTable=Module["_HUF_decompress1X_usingDTable"]=wasmExports["HUF_decompress1X_usingDTable"];_HUF_decompress4X_usingDTable=Module["_HUF_decompress4X_usingDTable"]=wasmExports["HUF_decompress4X_usingDTable"];_HUF_decompress4X_hufOnly_wksp=Module["_HUF_decompress4X_hufOnly_wksp"]=wasmExports["HUF_decompress4X_hufOnly_wksp"];_ZSTD_DDict_dictContent=Module["_ZSTD_DDict_dictContent"]=wasmExports["ZSTD_DDict_dictContent"];_ZSTD_DDict_dictSize=Module["_ZSTD_DDict_dictSize"]=wasmExports["ZSTD_DDict_dictSize"];_ZSTD_copyDDictParameters=Module["_ZSTD_copyDDictParameters"]=wasmExports["ZSTD_copyDDictParameters"];_ZSTD_createDDict_advanced=Module["_ZSTD_createDDict_advanced"]=wasmExports["ZSTD_createDDict_advanced"];_ZSTD_loadDEntropy=Module["_ZSTD_loadDEntropy"]=wasmExports["ZSTD_loadDEntropy"];_ZSTD_createDDict_byReference=Module["_ZSTD_createDDict_byReference"]=wasmExports["ZSTD_createDDict_byReference"];_ZSTD_initStaticDDict=Module["_ZSTD_initStaticDDict"]=wasmExports["ZSTD_initStaticDDict"];_ZSTD_estimateDDictSize=Module["_ZSTD_estimateDDictSize"]=wasmExports["ZSTD_estimateDDictSize"];_ZSTD_sizeof_DDict=Module["_ZSTD_sizeof_DDict"]=wasmExports["ZSTD_sizeof_DDict"];_ZSTD_getDictID_fromDDict=Module["_ZSTD_getDictID_fromDDict"]=wasmExports["ZSTD_getDictID_fromDDict"];_ZSTD_sizeof_DCtx=Module["_ZSTD_sizeof_DCtx"]=wasmExports["ZSTD_sizeof_DCtx"];_ZSTD_estimateDCtxSize=Module["_ZSTD_estimateDCtxSize"]=wasmExports["ZSTD_estimateDCtxSize"];_ZSTD_initStaticDCtx=Module["_ZSTD_initStaticDCtx"]=wasmExports["ZSTD_initStaticDCtx"];_ZSTD_createDCtx_advanced=Module["_ZSTD_createDCtx_advanced"]=wasmExports["ZSTD_createDCtx_advanced"];_ZSTD_copyDCtx=Module["_ZSTD_copyDCtx"]=wasmExports["ZSTD_copyDCtx"];_ZSTD_isFrame=Module["_ZSTD_isFrame"]=wasmExports["ZSTD_isFrame"];_ZSTD_isSkippableFrame=Module["_ZSTD_isSkippableFrame"]=wasmExports["ZSTD_isSkippableFrame"];_ZSTD_frameHeaderSize=Module["_ZSTD_frameHeaderSize"]=wasmExports["ZSTD_frameHeaderSize"];_ZSTD_getFrameHeader_advanced=Module["_ZSTD_getFrameHeader_advanced"]=wasmExports["ZSTD_getFrameHeader_advanced"];_ZSTD_getFrameHeader=Module["_ZSTD_getFrameHeader"]=wasmExports["ZSTD_getFrameHeader"];_ZSTD_readSkippableFrame=Module["_ZSTD_readSkippableFrame"]=wasmExports["ZSTD_readSkippableFrame"];_ZSTD_findDecompressedSize=Module["_ZSTD_findDecompressedSize"]=wasmExports["ZSTD_findDecompressedSize"];_ZSTD_getDecompressedSize=Module["_ZSTD_getDecompressedSize"]=wasmExports["ZSTD_getDecompressedSize"];_ZSTD_decompressBound=Module["_ZSTD_decompressBound"]=wasmExports["ZSTD_decompressBound"];_ZSTD_getcBlockSize=Module["_ZSTD_getcBlockSize"]=wasmExports["ZSTD_getcBlockSize"];_ZSTD_decompressionMargin=Module["_ZSTD_decompressionMargin"]=wasmExports["ZSTD_decompressionMargin"];_ZSTD_insertBlock=Module["_ZSTD_insertBlock"]=wasmExports["ZSTD_insertBlock"];_ZSTD_checkContinuity=Module["_ZSTD_checkContinuity"]=wasmExports["ZSTD_checkContinuity"];_ZSTD_decompress_usingDict=Module["_ZSTD_decompress_usingDict"]=wasmExports["ZSTD_decompress_usingDict"];_ZSTD_decompressBegin_usingDDict=Module["_ZSTD_decompressBegin_usingDDict"]=wasmExports["ZSTD_decompressBegin_usingDDict"];_ZSTD_decompressBegin_usingDict=Module["_ZSTD_decompressBegin_usingDict"]=wasmExports["ZSTD_decompressBegin_usingDict"];_ZSTD_decompressBlock_internal=Module["_ZSTD_decompressBlock_internal"]=wasmExports["ZSTD_decompressBlock_internal"];_ZSTD_decompressDCtx=Module["_ZSTD_decompressDCtx"]=wasmExports["ZSTD_decompressDCtx"];_ZSTD_decompress_usingDDict=Module["_ZSTD_decompress_usingDDict"]=wasmExports["ZSTD_decompress_usingDDict"];_ZSTD_decompress=Module["_ZSTD_decompress"]=wasmExports["ZSTD_decompress"];_ZSTD_nextSrcSizeToDecompress=Module["_ZSTD_nextSrcSizeToDecompress"]=wasmExports["ZSTD_nextSrcSizeToDecompress"];_ZSTD_nextInputType=Module["_ZSTD_nextInputType"]=wasmExports["ZSTD_nextInputType"];_ZSTD_decompressContinue=Module["_ZSTD_decompressContinue"]=wasmExports["ZSTD_decompressContinue"];_ZSTD_buildFSETable=Module["_ZSTD_buildFSETable"]=wasmExports["ZSTD_buildFSETable"];_ZSTD_decompressBegin=Module["_ZSTD_decompressBegin"]=wasmExports["ZSTD_decompressBegin"];_ZSTD_createDStream=Module["_ZSTD_createDStream"]=wasmExports["ZSTD_createDStream"];_ZSTD_initStaticDStream=Module["_ZSTD_initStaticDStream"]=wasmExports["ZSTD_initStaticDStream"];_ZSTD_createDStream_advanced=Module["_ZSTD_createDStream_advanced"]=wasmExports["ZSTD_createDStream_advanced"];_ZSTD_freeDStream=Module["_ZSTD_freeDStream"]=wasmExports["ZSTD_freeDStream"];_ZSTD_DStreamInSize=Module["_ZSTD_DStreamInSize"]=wasmExports["ZSTD_DStreamInSize"];_ZSTD_DCtx_loadDictionary_advanced=Module["_ZSTD_DCtx_loadDictionary_advanced"]=wasmExports["ZSTD_DCtx_loadDictionary_advanced"];_ZSTD_DCtx_loadDictionary_byReference=Module["_ZSTD_DCtx_loadDictionary_byReference"]=wasmExports["ZSTD_DCtx_loadDictionary_byReference"];_ZSTD_DCtx_refPrefix_advanced=Module["_ZSTD_DCtx_refPrefix_advanced"]=wasmExports["ZSTD_DCtx_refPrefix_advanced"];_ZSTD_initDStream_usingDict=Module["_ZSTD_initDStream_usingDict"]=wasmExports["ZSTD_initDStream_usingDict"];_ZSTD_initDStream=Module["_ZSTD_initDStream"]=wasmExports["ZSTD_initDStream"];_ZSTD_initDStream_usingDDict=Module["_ZSTD_initDStream_usingDDict"]=wasmExports["ZSTD_initDStream_usingDDict"];_ZSTD_resetDStream=Module["_ZSTD_resetDStream"]=wasmExports["ZSTD_resetDStream"];_ZSTD_DCtx_setMaxWindowSize=Module["_ZSTD_DCtx_setMaxWindowSize"]=wasmExports["ZSTD_DCtx_setMaxWindowSize"];_ZSTD_DCtx_setFormat=Module["_ZSTD_DCtx_setFormat"]=wasmExports["ZSTD_DCtx_setFormat"];_ZSTD_DCtx_getParameter=Module["_ZSTD_DCtx_getParameter"]=wasmExports["ZSTD_DCtx_getParameter"];_ZSTD_sizeof_DStream=Module["_ZSTD_sizeof_DStream"]=wasmExports["ZSTD_sizeof_DStream"];_ZSTD_decodingBufferSize_min=Module["_ZSTD_decodingBufferSize_min"]=wasmExports["ZSTD_decodingBufferSize_min"];_ZSTD_estimateDStreamSize=Module["_ZSTD_estimateDStreamSize"]=wasmExports["ZSTD_estimateDStreamSize"];_ZSTD_estimateDStreamSize_fromFrame=Module["_ZSTD_estimateDStreamSize_fromFrame"]=wasmExports["ZSTD_estimateDStreamSize_fromFrame"];_ZSTD_decompressStream_simpleArgs=Module["_ZSTD_decompressStream_simpleArgs"]=wasmExports["ZSTD_decompressStream_simpleArgs"];_ZSTD_decodeLiteralsBlock_wrapper=Module["_ZSTD_decodeLiteralsBlock_wrapper"]=wasmExports["ZSTD_decodeLiteralsBlock_wrapper"];_ZSTD_decodeSeqHeaders=Module["_ZSTD_decodeSeqHeaders"]=wasmExports["ZSTD_decodeSeqHeaders"];_ZSTD_decompressBlock_deprecated=Module["_ZSTD_decompressBlock_deprecated"]=wasmExports["ZSTD_decompressBlock_deprecated"];_ZSTD_decompressBlock=Module["_ZSTD_decompressBlock"]=wasmExports["ZSTD_decompressBlock"];_COVER_sum=Module["_COVER_sum"]=wasmExports["COVER_sum"];_COVER_warnOnSmallCorpus=Module["_COVER_warnOnSmallCorpus"]=wasmExports["COVER_warnOnSmallCorpus"];_COVER_computeEpochs=Module["_COVER_computeEpochs"]=wasmExports["COVER_computeEpochs"];_ZDICT_trainFromBuffer_cover=Module["_ZDICT_trainFromBuffer_cover"]=wasmExports["ZDICT_trainFromBuffer_cover"];_COVER_checkTotalCompressedSize=Module["_COVER_checkTotalCompressedSize"]=wasmExports["COVER_checkTotalCompressedSize"];_COVER_best_init=Module["_COVER_best_init"]=wasmExports["COVER_best_init"];_COVER_best_wait=Module["_COVER_best_wait"]=wasmExports["COVER_best_wait"];_COVER_best_destroy=Module["_COVER_best_destroy"]=wasmExports["COVER_best_destroy"];_COVER_best_start=Module["_COVER_best_start"]=wasmExports["COVER_best_start"];_COVER_best_finish=Module["_COVER_best_finish"]=wasmExports["COVER_best_finish"];_COVER_dictSelectionError=Module["_COVER_dictSelectionError"]=wasmExports["COVER_dictSelectionError"];_COVER_dictSelectionIsError=Module["_COVER_dictSelectionIsError"]=wasmExports["COVER_dictSelectionIsError"];_COVER_dictSelectionFree=Module["_COVER_dictSelectionFree"]=wasmExports["COVER_dictSelectionFree"];_COVER_selectDict=Module["_COVER_selectDict"]=wasmExports["COVER_selectDict"];_ZDICT_optimizeTrainFromBuffer_cover=Module["_ZDICT_optimizeTrainFromBuffer_cover"]=wasmExports["ZDICT_optimizeTrainFromBuffer_cover"];_divsufsort=Module["_divsufsort"]=wasmExports["divsufsort"];_divbwt=Module["_divbwt"]=wasmExports["divbwt"];_ZDICT_trainFromBuffer_fastCover=Module["_ZDICT_trainFromBuffer_fastCover"]=wasmExports["ZDICT_trainFromBuffer_fastCover"];_ZDICT_optimizeTrainFromBuffer_fastCover=Module["_ZDICT_optimizeTrainFromBuffer_fastCover"]=wasmExports["ZDICT_optimizeTrainFromBuffer_fastCover"];_ZDICT_getErrorName=Module["_ZDICT_getErrorName"]=wasmExports["ZDICT_getErrorName"];_ZDICT_getDictID=Module["_ZDICT_getDictID"]=wasmExports["ZDICT_getDictID"];_ZDICT_getDictHeaderSize=Module["_ZDICT_getDictHeaderSize"]=wasmExports["ZDICT_getDictHeaderSize"];_ZDICT_trainFromBuffer_legacy=Module["_ZDICT_trainFromBuffer_legacy"]=wasmExports["ZDICT_trainFromBuffer_legacy"];_ZDICT_addEntropyTablesFromBuffer=Module["_ZDICT_addEntropyTablesFromBuffer"]=wasmExports["ZDICT_addEntropyTablesFromBuffer"];__hiwire_immortal_add=Module["__hiwire_immortal_add"]=wasmExports["_hiwire_immortal_add"];__hiwire_immortal_get=Module["__hiwire_immortal_get"]=wasmExports["_hiwire_immortal_get"];__hiwire_get=Module["__hiwire_get"]=wasmExports["_hiwire_get"];__hiwire_set=Module["__hiwire_set"]=wasmExports["_hiwire_set"];_hiwire_num_refs=Module["_hiwire_num_refs"]=wasmExports["hiwire_num_refs"];__hiwire_slot_info=Module["__hiwire_slot_info"]=wasmExports["_hiwire_slot_info"];__hiwire_delete=Module["__hiwire_delete"]=wasmExports["_hiwire_delete"];__hiwire_immortal_table_init=Module["__hiwire_immortal_table_init"]=wasmExports["_hiwire_immortal_table_init"];_emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=wasmExports["emscripten_GetProcAddress"];_emscripten_webgl1_get_proc_address=Module["_emscripten_webgl1_get_proc_address"]=wasmExports["emscripten_webgl1_get_proc_address"];__webgl1_match_ext_proc_address_without_suffix=Module["__webgl1_match_ext_proc_address_without_suffix"]=wasmExports["_webgl1_match_ext_proc_address_without_suffix"];_emscripten_webgl2_get_proc_address=Module["_emscripten_webgl2_get_proc_address"]=wasmExports["emscripten_webgl2_get_proc_address"];__webgl2_match_ext_proc_address_without_suffix=Module["__webgl2_match_ext_proc_address_without_suffix"]=wasmExports["_webgl2_match_ext_proc_address_without_suffix"];_emscripten_webgl_get_proc_address=Module["_emscripten_webgl_get_proc_address"]=wasmExports["emscripten_webgl_get_proc_address"];_SDL_GL_GetProcAddress=Module["_SDL_GL_GetProcAddress"]=wasmExports["SDL_GL_GetProcAddress"];_eglGetProcAddress=Module["_eglGetProcAddress"]=wasmExports["eglGetProcAddress"];_glfwGetProcAddress=Module["_glfwGetProcAddress"]=wasmExports["glfwGetProcAddress"];_emscripten_webgl_init_context_attributes=Module["_emscripten_webgl_init_context_attributes"]=wasmExports["emscripten_webgl_init_context_attributes"];_emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=wasmExports["emscripten_is_main_runtime_thread"];_BZ2_blockSort=Module["_BZ2_blockSort"]=wasmExports["BZ2_blockSort"];_BZ2_bz__AssertH__fail=Module["_BZ2_bz__AssertH__fail"]=wasmExports["BZ2_bz__AssertH__fail"];_BZ2_bzlibVersion=Module["_BZ2_bzlibVersion"]=wasmExports["BZ2_bzlibVersion"];_BZ2_compressBlock=Module["_BZ2_compressBlock"]=wasmExports["BZ2_compressBlock"];_BZ2_indexIntoF=Module["_BZ2_indexIntoF"]=wasmExports["BZ2_indexIntoF"];_BZ2_decompress=Module["_BZ2_decompress"]=wasmExports["BZ2_decompress"];_BZ2_bzWriteOpen=Module["_BZ2_bzWriteOpen"]=wasmExports["BZ2_bzWriteOpen"];_BZ2_bzWrite=Module["_BZ2_bzWrite"]=wasmExports["BZ2_bzWrite"];_BZ2_bzWriteClose=Module["_BZ2_bzWriteClose"]=wasmExports["BZ2_bzWriteClose"];_BZ2_bzWriteClose64=Module["_BZ2_bzWriteClose64"]=wasmExports["BZ2_bzWriteClose64"];_BZ2_bzReadOpen=Module["_BZ2_bzReadOpen"]=wasmExports["BZ2_bzReadOpen"];_BZ2_bzReadClose=Module["_BZ2_bzReadClose"]=wasmExports["BZ2_bzReadClose"];_BZ2_bzRead=Module["_BZ2_bzRead"]=wasmExports["BZ2_bzRead"];_fgetc=Module["_fgetc"]=wasmExports["fgetc"];_BZ2_bzReadGetUnused=Module["_BZ2_bzReadGetUnused"]=wasmExports["BZ2_bzReadGetUnused"];_BZ2_bzBuffToBuffCompress=Module["_BZ2_bzBuffToBuffCompress"]=wasmExports["BZ2_bzBuffToBuffCompress"];_BZ2_bzBuffToBuffDecompress=Module["_BZ2_bzBuffToBuffDecompress"]=wasmExports["BZ2_bzBuffToBuffDecompress"];_BZ2_bzopen=Module["_BZ2_bzopen"]=wasmExports["BZ2_bzopen"];_BZ2_bzdopen=Module["_BZ2_bzdopen"]=wasmExports["BZ2_bzdopen"];_BZ2_bzread=Module["_BZ2_bzread"]=wasmExports["BZ2_bzread"];_BZ2_bzwrite=Module["_BZ2_bzwrite"]=wasmExports["BZ2_bzwrite"];_BZ2_bzflush=Module["_BZ2_bzflush"]=wasmExports["BZ2_bzflush"];_BZ2_bzclose=Module["_BZ2_bzclose"]=wasmExports["BZ2_bzclose"];_BZ2_bzerror=Module["_BZ2_bzerror"]=wasmExports["BZ2_bzerror"];_BZ2_bsInitWrite=Module["_BZ2_bsInitWrite"]=wasmExports["BZ2_bsInitWrite"];_BZ2_hbMakeCodeLengths=Module["_BZ2_hbMakeCodeLengths"]=wasmExports["BZ2_hbMakeCodeLengths"];_BZ2_hbAssignCodes=Module["_BZ2_hbAssignCodes"]=wasmExports["BZ2_hbAssignCodes"];_BZ2_hbCreateDecodeTables=Module["_BZ2_hbCreateDecodeTables"]=wasmExports["BZ2_hbCreateDecodeTables"];_adler32_z=Module["_adler32_z"]=wasmExports["adler32_z"];_adler32_combine=Module["_adler32_combine"]=wasmExports["adler32_combine"];_adler32_combine64=Module["_adler32_combine64"]=wasmExports["adler32_combine64"];_compress2=Module["_compress2"]=wasmExports["compress2"];_deflateInit_=Module["_deflateInit_"]=wasmExports["deflateInit_"];_compress=Module["_compress"]=wasmExports["compress"];_compressBound=Module["_compressBound"]=wasmExports["compressBound"];_get_crc_table=Module["_get_crc_table"]=wasmExports["get_crc_table"];_crc32_z=Module["_crc32_z"]=wasmExports["crc32_z"];_crc32_combine64=Module["_crc32_combine64"]=wasmExports["crc32_combine64"];_crc32_combine=Module["_crc32_combine"]=wasmExports["crc32_combine"];_crc32_combine_gen64=Module["_crc32_combine_gen64"]=wasmExports["crc32_combine_gen64"];_crc32_combine_gen=Module["_crc32_combine_gen"]=wasmExports["crc32_combine_gen"];_crc32_combine_op=Module["_crc32_combine_op"]=wasmExports["crc32_combine_op"];_zcalloc=Module["_zcalloc"]=wasmExports["zcalloc"];_zcfree=Module["_zcfree"]=wasmExports["zcfree"];_deflateReset=Module["_deflateReset"]=wasmExports["deflateReset"];_deflateResetKeep=Module["_deflateResetKeep"]=wasmExports["deflateResetKeep"];_deflateGetDictionary=Module["_deflateGetDictionary"]=wasmExports["deflateGetDictionary"];__tr_init=Module["__tr_init"]=wasmExports["_tr_init"];_deflateSetHeader=Module["_deflateSetHeader"]=wasmExports["deflateSetHeader"];_deflatePending=Module["_deflatePending"]=wasmExports["deflatePending"];_deflatePrime=Module["_deflatePrime"]=wasmExports["deflatePrime"];__tr_flush_bits=Module["__tr_flush_bits"]=wasmExports["_tr_flush_bits"];_deflateParams=Module["_deflateParams"]=wasmExports["deflateParams"];__tr_align=Module["__tr_align"]=wasmExports["_tr_align"];__tr_stored_block=Module["__tr_stored_block"]=wasmExports["_tr_stored_block"];_deflateTune=Module["_deflateTune"]=wasmExports["deflateTune"];_deflateBound=Module["_deflateBound"]=wasmExports["deflateBound"];__tr_flush_block=Module["__tr_flush_block"]=wasmExports["_tr_flush_block"];_gzclose=Module["_gzclose"]=wasmExports["gzclose"];_gzclose_r=Module["_gzclose_r"]=wasmExports["gzclose_r"];_gzclose_w=Module["_gzclose_w"]=wasmExports["gzclose_w"];_gzopen=Module["_gzopen"]=wasmExports["gzopen"];_gzopen64=Module["_gzopen64"]=wasmExports["gzopen64"];_gzdopen=Module["_gzdopen"]=wasmExports["gzdopen"];_gzbuffer=Module["_gzbuffer"]=wasmExports["gzbuffer"];_gzrewind=Module["_gzrewind"]=wasmExports["gzrewind"];_gzseek64=Module["_gzseek64"]=wasmExports["gzseek64"];_gz_error=Module["_gz_error"]=wasmExports["gz_error"];_gzseek=Module["_gzseek"]=wasmExports["gzseek"];_gztell64=Module["_gztell64"]=wasmExports["gztell64"];_gztell=Module["_gztell"]=wasmExports["gztell"];_gzoffset64=Module["_gzoffset64"]=wasmExports["gzoffset64"];_gzoffset=Module["_gzoffset"]=wasmExports["gzoffset"];_gzeof=Module["_gzeof"]=wasmExports["gzeof"];_gzerror=Module["_gzerror"]=wasmExports["gzerror"];_gzclearerr=Module["_gzclearerr"]=wasmExports["gzclearerr"];_gz_intmax=Module["_gz_intmax"]=wasmExports["gz_intmax"];_gzread=Module["_gzread"]=wasmExports["gzread"];_gzfread=Module["_gzfread"]=wasmExports["gzfread"];_gzgetc=Module["_gzgetc"]=wasmExports["gzgetc"];_gzgetc_=Module["_gzgetc_"]=wasmExports["gzgetc_"];_gzungetc=Module["_gzungetc"]=wasmExports["gzungetc"];_inflateReset=Module["_inflateReset"]=wasmExports["inflateReset"];_gzgets=Module["_gzgets"]=wasmExports["gzgets"];_gzdirect=Module["_gzdirect"]=wasmExports["gzdirect"];_gzwrite=Module["_gzwrite"]=wasmExports["gzwrite"];_gzfwrite=Module["_gzfwrite"]=wasmExports["gzfwrite"];_gzputc=Module["_gzputc"]=wasmExports["gzputc"];_gzputs=Module["_gzputs"]=wasmExports["gzputs"];_gzvprintf=Module["_gzvprintf"]=wasmExports["gzvprintf"];_gzprintf=Module["_gzprintf"]=wasmExports["gzprintf"];_gzflush=Module["_gzflush"]=wasmExports["gzflush"];_gzsetparams=Module["_gzsetparams"]=wasmExports["gzsetparams"];_inflateBackInit_=Module["_inflateBackInit_"]=wasmExports["inflateBackInit_"];_inflateBack=Module["_inflateBack"]=wasmExports["inflateBack"];_inflate_table=Module["_inflate_table"]=wasmExports["inflate_table"];_inflate_fast=Module["_inflate_fast"]=wasmExports["inflate_fast"];_inflateBackEnd=Module["_inflateBackEnd"]=wasmExports["inflateBackEnd"];_inflateResetKeep=Module["_inflateResetKeep"]=wasmExports["inflateResetKeep"];_inflateReset2=Module["_inflateReset2"]=wasmExports["inflateReset2"];_inflateInit_=Module["_inflateInit_"]=wasmExports["inflateInit_"];_inflatePrime=Module["_inflatePrime"]=wasmExports["inflatePrime"];_inflateGetDictionary=Module["_inflateGetDictionary"]=wasmExports["inflateGetDictionary"];_inflateGetHeader=Module["_inflateGetHeader"]=wasmExports["inflateGetHeader"];_inflateSync=Module["_inflateSync"]=wasmExports["inflateSync"];_inflateSyncPoint=Module["_inflateSyncPoint"]=wasmExports["inflateSyncPoint"];_inflateUndermine=Module["_inflateUndermine"]=wasmExports["inflateUndermine"];_inflateValidate=Module["_inflateValidate"]=wasmExports["inflateValidate"];_inflateMark=Module["_inflateMark"]=wasmExports["inflateMark"];_inflateCodesUsed=Module["_inflateCodesUsed"]=wasmExports["inflateCodesUsed"];__tr_tally=Module["__tr_tally"]=wasmExports["_tr_tally"];_uncompress2=Module["_uncompress2"]=wasmExports["uncompress2"];_uncompress=Module["_uncompress"]=wasmExports["uncompress"];_zlibCompileFlags=Module["_zlibCompileFlags"]=wasmExports["zlibCompileFlags"];_zError=Module["_zError"]=wasmExports["zError"];_getdate=Module["_getdate"]=wasmExports["getdate"];_stime=Module["_stime"]=wasmExports["stime"];_clock_getcpuclockid=Module["_clock_getcpuclockid"]=wasmExports["clock_getcpuclockid"];_getpwnam=Module["_getpwnam"]=wasmExports["getpwnam"];_getpwuid=Module["_getpwuid"]=wasmExports["getpwuid"];_getpwnam_r=Module["_getpwnam_r"]=wasmExports["getpwnam_r"];_getpwuid_r=Module["_getpwuid_r"]=wasmExports["getpwuid_r"];_setpwent=Module["_setpwent"]=wasmExports["setpwent"];_endpwent=Module["_endpwent"]=wasmExports["endpwent"];_getpwent=Module["_getpwent"]=wasmExports["getpwent"];_getgrnam=Module["_getgrnam"]=wasmExports["getgrnam"];_getgrgid=Module["_getgrgid"]=wasmExports["getgrgid"];_getgrnam_r=Module["_getgrnam_r"]=wasmExports["getgrnam_r"];_getgrgid_r=Module["_getgrgid_r"]=wasmExports["getgrgid_r"];_getgrent=Module["_getgrent"]=wasmExports["getgrent"];_endgrent=Module["_endgrent"]=wasmExports["endgrent"];_setgrent=Module["_setgrent"]=wasmExports["setgrent"];_vfork=Module["_vfork"]=wasmExports["vfork"];_posix_spawn=Module["_posix_spawn"]=wasmExports["posix_spawn"];_popen=Module["_popen"]=wasmExports["popen"];_pclose=Module["_pclose"]=wasmExports["pclose"];_setgroups=Module["_setgroups"]=wasmExports["setgroups"];_sigaltstack=Module["_sigaltstack"]=wasmExports["sigaltstack"];___syscall_uname=Module["___syscall_uname"]=wasmExports["__syscall_uname"];___syscall_setpgid=Module["___syscall_setpgid"]=wasmExports["__syscall_setpgid"];___syscall_sync=Module["___syscall_sync"]=wasmExports["__syscall_sync"];___syscall_getsid=Module["___syscall_getsid"]=wasmExports["__syscall_getsid"];___syscall_getpgid=Module["___syscall_getpgid"]=wasmExports["__syscall_getpgid"];___syscall_getpid=Module["___syscall_getpid"]=wasmExports["__syscall_getpid"];___syscall_getppid=Module["___syscall_getppid"]=wasmExports["__syscall_getppid"];___syscall_linkat=Module["___syscall_linkat"]=wasmExports["__syscall_linkat"];___syscall_getgroups32=Module["___syscall_getgroups32"]=wasmExports["__syscall_getgroups32"];___syscall_setsid=Module["___syscall_setsid"]=wasmExports["__syscall_setsid"];___syscall_getrusage=Module["___syscall_getrusage"]=wasmExports["__syscall_getrusage"];___syscall_getpriority=Module["___syscall_getpriority"]=wasmExports["__syscall_getpriority"];___syscall_setpriority=Module["___syscall_setpriority"]=wasmExports["__syscall_setpriority"];___syscall_setdomainname=Module["___syscall_setdomainname"]=wasmExports["__syscall_setdomainname"];___syscall_getgid32=Module["___syscall_getgid32"]=wasmExports["__syscall_getgid32"];___syscall_geteuid32=Module["___syscall_geteuid32"]=wasmExports["__syscall_geteuid32"];___syscall_getegid32=Module["___syscall_getegid32"]=wasmExports["__syscall_getegid32"];___syscall_getresuid32=Module["___syscall_getresuid32"]=wasmExports["__syscall_getresuid32"];___syscall_getresgid32=Module["___syscall_getresgid32"]=wasmExports["__syscall_getresgid32"];___syscall_pause=Module["___syscall_pause"]=wasmExports["__syscall_pause"];___syscall_madvise=Module["___syscall_madvise"]=wasmExports["__syscall_madvise"];___syscall_mlock=Module["___syscall_mlock"]=wasmExports["__syscall_mlock"];___syscall_munlock=Module["___syscall_munlock"]=wasmExports["__syscall_munlock"];___syscall_mprotect=Module["___syscall_mprotect"]=wasmExports["__syscall_mprotect"];___syscall_mremap=Module["___syscall_mremap"]=wasmExports["__syscall_mremap"];___syscall_mlockall=Module["___syscall_mlockall"]=wasmExports["__syscall_mlockall"];___syscall_munlockall=Module["___syscall_munlockall"]=wasmExports["__syscall_munlockall"];___syscall_prlimit64=Module["___syscall_prlimit64"]=wasmExports["__syscall_prlimit64"];___syscall_acct=Module["___syscall_acct"]=wasmExports["__syscall_acct"];___syscall_mincore=Module["___syscall_mincore"]=wasmExports["__syscall_mincore"];___syscall_pipe2=Module["___syscall_pipe2"]=wasmExports["__syscall_pipe2"];___syscall_pselect6=Module["___syscall_pselect6"]=wasmExports["__syscall_pselect6"];___syscall_ppoll=Module["___syscall_ppoll"]=wasmExports["__syscall_ppoll"];___syscall_recvmmsg=Module["___syscall_recvmmsg"]=wasmExports["__syscall_recvmmsg"];___syscall_sendmmsg=Module["___syscall_sendmmsg"]=wasmExports["__syscall_sendmmsg"];___syscall_shutdown=Module["___syscall_shutdown"]=wasmExports["__syscall_shutdown"];___syscall_socketpair=Module["___syscall_socketpair"]=wasmExports["__syscall_socketpair"];___syscall_wait4=Module["___syscall_wait4"]=wasmExports["__syscall_wait4"];__Exit=Module["__Exit"]=wasmExports["_Exit"];_cosf=Module["_cosf"]=wasmExports["cosf"];_sinf=Module["_sinf"]=wasmExports["sinf"];_expf=Module["_expf"]=wasmExports["expf"];___ctype_b_loc=Module["___ctype_b_loc"]=wasmExports["__ctype_b_loc"];___ctype_get_mb_cur_max=Module["___ctype_get_mb_cur_max"]=wasmExports["__ctype_get_mb_cur_max"];___get_tp=Module["___get_tp"]=wasmExports["__get_tp"];___ctype_tolower_loc=Module["___ctype_tolower_loc"]=wasmExports["__ctype_tolower_loc"];___ctype_toupper_loc=Module["___ctype_toupper_loc"]=wasmExports["__ctype_toupper_loc"];___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=wasmExports["__emscripten_environ_constructor"];_emscripten_builtin_malloc=Module["_emscripten_builtin_malloc"]=wasmExports["emscripten_builtin_malloc"];___flt_rounds=Module["___flt_rounds"]=wasmExports["__flt_rounds"];_fegetround=Module["_fegetround"]=wasmExports["fegetround"];___fmodeflags=Module["___fmodeflags"]=wasmExports["__fmodeflags"];___fpclassify=Module["___fpclassify"]=wasmExports["__fpclassify"];___fpclassifyf=Module["___fpclassifyf"]=wasmExports["__fpclassifyf"];___fpclassifyl=Module["___fpclassifyl"]=wasmExports["__fpclassifyl"];___mo_lookup=Module["___mo_lookup"]=wasmExports["__mo_lookup"];___month_to_secs=Module["___month_to_secs"]=wasmExports["__month_to_secs"];___overflow=Module["___overflow"]=wasmExports["__overflow"];_scalbn=Module["_scalbn"]=wasmExports["scalbn"];_floor=Module["_floor"]=wasmExports["floor"];___fixtfdi=Module["___fixtfdi"]=wasmExports["__fixtfdi"];___signbit=Module["___signbit"]=wasmExports["__signbit"];___signbitf=Module["___signbitf"]=wasmExports["__signbitf"];___signbitl=Module["___signbitl"]=wasmExports["__signbitl"];_memcpy=Module["_memcpy"]=wasmExports["memcpy"];___stack_chk_fail=Module["___stack_chk_fail"]=wasmExports["__stack_chk_fail"];___wasi_syscall_ret=Module["___wasi_syscall_ret"]=wasmExports["__wasi_syscall_ret"];___synccall=Module["___synccall"]=wasmExports["__synccall"];_fabsl=Module["_fabsl"]=wasmExports["fabsl"];___year_to_secs=Module["___year_to_secs"]=wasmExports["__year_to_secs"];___lock=Module["___lock"]=wasmExports["__lock"];___unlock=Module["___unlock"]=wasmExports["__unlock"];_tzset=Module["_tzset"]=wasmExports["tzset"];___uflow=Module["___uflow"]=wasmExports["__uflow"];___fxstat=Module["___fxstat"]=wasmExports["__fxstat"];___fxstatat=Module["___fxstatat"]=wasmExports["__fxstatat"];___lxstat=Module["___lxstat"]=wasmExports["__lxstat"];___xstat=Module["___xstat"]=wasmExports["__xstat"];___xmknod=Module["___xmknod"]=wasmExports["__xmknod"];_mknod=Module["_mknod"]=wasmExports["mknod"];___xmknodat=Module["___xmknodat"]=wasmExports["__xmknodat"];_mknodat=Module["_mknodat"]=wasmExports["mknodat"];_a64l=Module["_a64l"]=wasmExports["a64l"];_l64a=Module["_l64a"]=wasmExports["l64a"];_abs=Module["_abs"]=wasmExports["abs"];_acct=Module["_acct"]=wasmExports["acct"];_acosf=Module["_acosf"]=wasmExports["acosf"];_sqrtf=Module["_sqrtf"]=wasmExports["sqrtf"];_acoshf=Module["_acoshf"]=wasmExports["acoshf"];_log1pf=Module["_log1pf"]=wasmExports["log1pf"];_logf=Module["_logf"]=wasmExports["logf"];_acoshl=Module["_acoshl"]=wasmExports["acoshl"];_acosl=Module["_acosl"]=wasmExports["acosl"];___eqtf2=Module["___eqtf2"]=wasmExports["__eqtf2"];___netf2=Module["___netf2"]=wasmExports["__netf2"];_sqrtl=Module["_sqrtl"]=wasmExports["sqrtl"];_alarm=Module["_alarm"]=wasmExports["alarm"];_setitimer=Module["_setitimer"]=wasmExports["setitimer"];_aligned_alloc=Module["_aligned_alloc"]=wasmExports["aligned_alloc"];_posix_memalign=Module["_posix_memalign"]=wasmExports["posix_memalign"];_alphasort=Module["_alphasort"]=wasmExports["alphasort"];_strcoll=Module["_strcoll"]=wasmExports["strcoll"];_asctime=Module["_asctime"]=wasmExports["asctime"];___nl_langinfo_l=Module["___nl_langinfo_l"]=wasmExports["__nl_langinfo_l"];_asctime_r=Module["_asctime_r"]=wasmExports["asctime_r"];_asinf=Module["_asinf"]=wasmExports["asinf"];_fabsf=Module["_fabsf"]=wasmExports["fabsf"];_asinhf=Module["_asinhf"]=wasmExports["asinhf"];_asinhl=Module["_asinhl"]=wasmExports["asinhl"];_asinl=Module["_asinl"]=wasmExports["asinl"];_asprintf=Module["_asprintf"]=wasmExports["asprintf"];_vasprintf=Module["_vasprintf"]=wasmExports["vasprintf"];_at_quick_exit=Module["_at_quick_exit"]=wasmExports["at_quick_exit"];_atan2f=Module["_atan2f"]=wasmExports["atan2f"];_atanf=Module["_atanf"]=wasmExports["atanf"];_atan2l=Module["_atan2l"]=wasmExports["atan2l"];_atanl=Module["_atanl"]=wasmExports["atanl"];_atanhf=Module["_atanhf"]=wasmExports["atanhf"];_atanhl=Module["_atanhl"]=wasmExports["atanhl"];_log1pl=Module["_log1pl"]=wasmExports["log1pl"];___funcs_on_exit=Module["___funcs_on_exit"]=wasmExports["__funcs_on_exit"];____cxa_finalize=Module["____cxa_finalize"]=wasmExports["___cxa_finalize"];____cxa_atexit=Module["____cxa_atexit"]=wasmExports["___cxa_atexit"];___libc_calloc=Module["___libc_calloc"]=wasmExports["__libc_calloc"];___atexit=Module["___atexit"]=wasmExports["__atexit"];___cxa_atexit=Module["___cxa_atexit"]=wasmExports["__cxa_atexit"];___cxa_finalize=Module["___cxa_finalize"]=wasmExports["__cxa_finalize"];_atof=Module["_atof"]=wasmExports["atof"];_strtod=Module["_strtod"]=wasmExports["strtod"];_atoi=Module["_atoi"]=wasmExports["atoi"];_atol=Module["_atol"]=wasmExports["atol"];_atoll=Module["_atoll"]=wasmExports["atoll"];_basename=Module["_basename"]=wasmExports["basename"];___xpg_basename=Module["___xpg_basename"]=wasmExports["__xpg_basename"];_bcmp=Module["_bcmp"]=wasmExports["bcmp"];_bcopy=Module["_bcopy"]=wasmExports["bcopy"];_strcasecmp=Module["_strcasecmp"]=wasmExports["strcasecmp"];_bsearch=Module["_bsearch"]=wasmExports["bsearch"];_btowc=Module["_btowc"]=wasmExports["btowc"];_bzero=Module["_bzero"]=wasmExports["bzero"];_c16rtomb=Module["_c16rtomb"]=wasmExports["c16rtomb"];_wcrtomb=Module["_wcrtomb"]=wasmExports["wcrtomb"];_c32rtomb=Module["_c32rtomb"]=wasmExports["c32rtomb"];_cabs=Module["_cabs"]=wasmExports["cabs"];_cabsf=Module["_cabsf"]=wasmExports["cabsf"];_hypotf=Module["_hypotf"]=wasmExports["hypotf"];_cabsl=Module["_cabsl"]=wasmExports["cabsl"];_hypotl=Module["_hypotl"]=wasmExports["hypotl"];_cacos=Module["_cacos"]=wasmExports["cacos"];_casin=Module["_casin"]=wasmExports["casin"];_cacosf=Module["_cacosf"]=wasmExports["cacosf"];_casinf=Module["_casinf"]=wasmExports["casinf"];_cacosh=Module["_cacosh"]=wasmExports["cacosh"];_cacoshf=Module["_cacoshf"]=wasmExports["cacoshf"];_cacoshl=Module["_cacoshl"]=wasmExports["cacoshl"];_cacosl=Module["_cacosl"]=wasmExports["cacosl"];_casinl=Module["_casinl"]=wasmExports["casinl"];_call_once=Module["_call_once"]=wasmExports["call_once"];_carg=Module["_carg"]=wasmExports["carg"];_cargf=Module["_cargf"]=wasmExports["cargf"];_cargl=Module["_cargl"]=wasmExports["cargl"];_csqrt=Module["_csqrt"]=wasmExports["csqrt"];_clog=Module["_clog"]=wasmExports["clog"];_csqrtf=Module["_csqrtf"]=wasmExports["csqrtf"];_clogf=Module["_clogf"]=wasmExports["clogf"];_casinh=Module["_casinh"]=wasmExports["casinh"];_casinhf=Module["_casinhf"]=wasmExports["casinhf"];_casinhl=Module["_casinhl"]=wasmExports["casinhl"];_csqrtl=Module["_csqrtl"]=wasmExports["csqrtl"];_clogl=Module["_clogl"]=wasmExports["clogl"];_catan=Module["_catan"]=wasmExports["catan"];_catanf=Module["_catanf"]=wasmExports["catanf"];_catanh=Module["_catanh"]=wasmExports["catanh"];_catanhf=Module["_catanhf"]=wasmExports["catanhf"];_catanhl=Module["_catanhl"]=wasmExports["catanhl"];_catanl=Module["_catanl"]=wasmExports["catanl"];_logl=Module["_logl"]=wasmExports["logl"];___trunctfsf2=Module["___trunctfsf2"]=wasmExports["__trunctfsf2"];___extendsftf2=Module["___extendsftf2"]=wasmExports["__extendsftf2"];_catclose=Module["_catclose"]=wasmExports["catclose"];_catgets=Module["_catgets"]=wasmExports["catgets"];_catopen=Module["_catopen"]=wasmExports["catopen"];_cbrtf=Module["_cbrtf"]=wasmExports["cbrtf"];_cbrtl=Module["_cbrtl"]=wasmExports["cbrtl"];_ccos=Module["_ccos"]=wasmExports["ccos"];_ccosh=Module["_ccosh"]=wasmExports["ccosh"];_ccosf=Module["_ccosf"]=wasmExports["ccosf"];_ccoshf=Module["_ccoshf"]=wasmExports["ccoshf"];_coshf=Module["_coshf"]=wasmExports["coshf"];_sinhf=Module["_sinhf"]=wasmExports["sinhf"];_copysignf=Module["_copysignf"]=wasmExports["copysignf"];_ccoshl=Module["_ccoshl"]=wasmExports["ccoshl"];_ccosl=Module["_ccosl"]=wasmExports["ccosl"];_ceil=Module["_ceil"]=wasmExports["ceil"];_ceilf=Module["_ceilf"]=wasmExports["ceilf"];_ceill=Module["_ceill"]=wasmExports["ceill"];_cexp=Module["_cexp"]=wasmExports["cexp"];_cexpf=Module["_cexpf"]=wasmExports["cexpf"];_cexpl=Module["_cexpl"]=wasmExports["cexpl"];_cfmakeraw=Module["_cfmakeraw"]=wasmExports["cfmakeraw"];_cfsetspeed=Module["_cfsetspeed"]=wasmExports["cfsetspeed"];_cimag=Module["_cimag"]=wasmExports["cimag"];_cimagf=Module["_cimagf"]=wasmExports["cimagf"];_cimagl=Module["_cimagl"]=wasmExports["cimagl"];_clearenv=Module["_clearenv"]=wasmExports["clearenv"];_clearerr_unlocked=Module["_clearerr_unlocked"]=wasmExports["clearerr_unlocked"];___wasi_timestamp_to_timespec=Module["___wasi_timestamp_to_timespec"]=wasmExports["__wasi_timestamp_to_timespec"];_emscripten_thread_sleep=Module["_emscripten_thread_sleep"]=wasmExports["emscripten_thread_sleep"];_cnd_broadcast=Module["_cnd_broadcast"]=wasmExports["cnd_broadcast"];_cnd_destroy=Module["_cnd_destroy"]=wasmExports["cnd_destroy"];_cnd_init=Module["_cnd_init"]=wasmExports["cnd_init"];_cnd_signal=Module["_cnd_signal"]=wasmExports["cnd_signal"];_cnd_timedwait=Module["_cnd_timedwait"]=wasmExports["cnd_timedwait"];_cnd_wait=Module["_cnd_wait"]=wasmExports["cnd_wait"];_conj=Module["_conj"]=wasmExports["conj"];_conjf=Module["_conjf"]=wasmExports["conjf"];_conjl=Module["_conjl"]=wasmExports["conjl"];_copysignl=Module["_copysignl"]=wasmExports["copysignl"];_expm1f=Module["_expm1f"]=wasmExports["expm1f"];_coshl=Module["_coshl"]=wasmExports["coshl"];_cosl=Module["_cosl"]=wasmExports["cosl"];_cpow=Module["_cpow"]=wasmExports["cpow"];___muldc3=Module["___muldc3"]=wasmExports["__muldc3"];_cpowf=Module["_cpowf"]=wasmExports["cpowf"];___mulsc3=Module["___mulsc3"]=wasmExports["__mulsc3"];_cpowl=Module["_cpowl"]=wasmExports["cpowl"];___unordtf2=Module["___unordtf2"]=wasmExports["__unordtf2"];___multc3=Module["___multc3"]=wasmExports["__multc3"];_cproj=Module["_cproj"]=wasmExports["cproj"];_cprojf=Module["_cprojf"]=wasmExports["cprojf"];_cprojl=Module["_cprojl"]=wasmExports["cprojl"];_creal=Module["_creal"]=wasmExports["creal"];_crealf=Module["_crealf"]=wasmExports["crealf"];_creall=Module["_creall"]=wasmExports["creall"];_creat=Module["_creat"]=wasmExports["creat"];_crypt=Module["_crypt"]=wasmExports["crypt"];___crypt_blowfish=Module["___crypt_blowfish"]=wasmExports["__crypt_blowfish"];___crypt_des=Module["___crypt_des"]=wasmExports["__crypt_des"];___crypt_md5=Module["___crypt_md5"]=wasmExports["__crypt_md5"];_strnlen=Module["_strnlen"]=wasmExports["strnlen"];___crypt_sha256=Module["___crypt_sha256"]=wasmExports["__crypt_sha256"];___crypt_sha512=Module["___crypt_sha512"]=wasmExports["__crypt_sha512"];_crypt_r=Module["_crypt_r"]=wasmExports["crypt_r"];_sprintf=Module["_sprintf"]=wasmExports["sprintf"];_csin=Module["_csin"]=wasmExports["csin"];_csinh=Module["_csinh"]=wasmExports["csinh"];_csinf=Module["_csinf"]=wasmExports["csinf"];_csinhf=Module["_csinhf"]=wasmExports["csinhf"];_csinhl=Module["_csinhl"]=wasmExports["csinhl"];_csinl=Module["_csinl"]=wasmExports["csinl"];_ctan=Module["_ctan"]=wasmExports["ctan"];_ctanh=Module["_ctanh"]=wasmExports["ctanh"];_ctanf=Module["_ctanf"]=wasmExports["ctanf"];_ctanhf=Module["_ctanhf"]=wasmExports["ctanhf"];_tanf=Module["_tanf"]=wasmExports["tanf"];_ctanhl=Module["_ctanhl"]=wasmExports["ctanhl"];_ctanl=Module["_ctanl"]=wasmExports["ctanl"];_ctime=Module["_ctime"]=wasmExports["ctime"];_localtime=Module["_localtime"]=wasmExports["localtime"];_ctime_r=Module["_ctime_r"]=wasmExports["ctime_r"];_dcngettext=Module["_dcngettext"]=wasmExports["dcngettext"];___gettextdomain=Module["___gettextdomain"]=wasmExports["__gettextdomain"];_dngettext=Module["_dngettext"]=wasmExports["dngettext"];_difftime=Module["_difftime"]=wasmExports["difftime"];_dirname=Module["_dirname"]=wasmExports["dirname"];_div=Module["_div"]=wasmExports["div"];_dladdr=Module["_dladdr"]=wasmExports["dladdr"];___libc_free=Module["___libc_free"]=wasmExports["__libc_free"];___libc_malloc=Module["___libc_malloc"]=wasmExports["__libc_malloc"];___dl_seterr=Module["___dl_seterr"]=wasmExports["__dl_seterr"];_dn_comp=Module["_dn_comp"]=wasmExports["dn_comp"];_dn_expand=Module["_dn_expand"]=wasmExports["dn_expand"];_dn_skipname=Module["_dn_skipname"]=wasmExports["dn_skipname"];_dprintf=Module["_dprintf"]=wasmExports["dprintf"];_vdprintf=Module["_vdprintf"]=wasmExports["vdprintf"];_erand48=Module["_erand48"]=wasmExports["erand48"];_drand48=Module["_drand48"]=wasmExports["drand48"];___wasi_fd_is_valid=Module["___wasi_fd_is_valid"]=wasmExports["__wasi_fd_is_valid"];___duplocale=Module["___duplocale"]=wasmExports["__duplocale"];_duplocale=Module["_duplocale"]=wasmExports["duplocale"];_new_dlevent=Module["_new_dlevent"]=wasmExports["new_dlevent"];__emscripten_find_dylib=Module["__emscripten_find_dylib"]=wasmExports["_emscripten_find_dylib"];_strspn=Module["_strspn"]=wasmExports["strspn"];_pthread_setcancelstate=Module["_pthread_setcancelstate"]=wasmExports["pthread_setcancelstate"];_emscripten_dlopen=Module["_emscripten_dlopen"]=wasmExports["emscripten_dlopen"];_emscripten_dlopen_promise=Module["_emscripten_dlopen_promise"]=wasmExports["emscripten_dlopen_promise"];_ecvt=Module["_ecvt"]=wasmExports["ecvt"];_emscripten_console_logf=Module["_emscripten_console_logf"]=wasmExports["emscripten_console_logf"];_emscripten_console_errorf=Module["_emscripten_console_errorf"]=wasmExports["emscripten_console_errorf"];_emscripten_console_warnf=Module["_emscripten_console_warnf"]=wasmExports["emscripten_console_warnf"];_emscripten_console_tracef=Module["_emscripten_console_tracef"]=wasmExports["emscripten_console_tracef"];_emscripten_outf=Module["_emscripten_outf"]=wasmExports["emscripten_outf"];_emscripten_errf=Module["_emscripten_errf"]=wasmExports["emscripten_errf"];_emscripten_log=Module["_emscripten_log"]=wasmExports["emscripten_log"];_emscripten_fiber_init=Module["_emscripten_fiber_init"]=wasmExports["emscripten_fiber_init"];_emscripten_fiber_init_from_current_context=Module["_emscripten_fiber_init_from_current_context"]=wasmExports["emscripten_fiber_init_from_current_context"];_emscripten_get_heap_size=Module["_emscripten_get_heap_size"]=wasmExports["emscripten_get_heap_size"];__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["_emscripten_memcpy_bulkmem"];_emscripten_builtin_memcpy=Module["_emscripten_builtin_memcpy"]=wasmExports["emscripten_builtin_memcpy"];___memset=Module["___memset"]=wasmExports["__memset"];_emscripten_builtin_memset=Module["_emscripten_builtin_memset"]=wasmExports["emscripten_builtin_memset"];__emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=wasmExports["_emscripten_memset_bulkmem"];___syscall_munmap=Module["___syscall_munmap"]=wasmExports["__syscall_munmap"];_emscripten_builtin_free=Module["_emscripten_builtin_free"]=wasmExports["emscripten_builtin_free"];___syscall_msync=Module["___syscall_msync"]=wasmExports["__syscall_msync"];___syscall_mmap2=Module["___syscall_mmap2"]=wasmExports["__syscall_mmap2"];_emscripten_builtin_memalign=Module["_emscripten_builtin_memalign"]=wasmExports["emscripten_builtin_memalign"];_emscripten_scan_stack=Module["_emscripten_scan_stack"]=wasmExports["emscripten_scan_stack"];_emscripten_stack_get_current=Module["_emscripten_stack_get_current"]=wasmExports["emscripten_stack_get_current"];_dysize=Module["_dysize"]=wasmExports["dysize"];__emscripten_yield=Module["__emscripten_yield"]=wasmExports["_emscripten_yield"];__emscripten_check_timers=Module["__emscripten_check_timers"]=wasmExports["_emscripten_check_timers"];_setkey=Module["_setkey"]=wasmExports["setkey"];_encrypt=Module["_encrypt"]=wasmExports["encrypt"];_sethostent=Module["_sethostent"]=wasmExports["sethostent"];_gethostent=Module["_gethostent"]=wasmExports["gethostent"];_getnetent=Module["_getnetent"]=wasmExports["getnetent"];_endhostent=Module["_endhostent"]=wasmExports["endhostent"];_setnetent=Module["_setnetent"]=wasmExports["setnetent"];_endnetent=Module["_endnetent"]=wasmExports["endnetent"];_erff=Module["_erff"]=wasmExports["erff"];_erfcf=Module["_erfcf"]=wasmExports["erfcf"];_erfl=Module["_erfl"]=wasmExports["erfl"];_erfcl=Module["_erfcl"]=wasmExports["erfcl"];_vwarn=Module["_vwarn"]=wasmExports["vwarn"];_fprintf=Module["_fprintf"]=wasmExports["fprintf"];_vwarnx=Module["_vwarnx"]=wasmExports["vwarnx"];_putc=Module["_putc"]=wasmExports["putc"];_verr=Module["_verr"]=wasmExports["verr"];_verrx=Module["_verrx"]=wasmExports["verrx"];_warn=Module["_warn"]=wasmExports["warn"];_warnx=Module["_warnx"]=wasmExports["warnx"];_err=Module["_err"]=wasmExports["err"];_errx=Module["_errx"]=wasmExports["errx"];_ether_aton_r=Module["_ether_aton_r"]=wasmExports["ether_aton_r"];_ether_aton=Module["_ether_aton"]=wasmExports["ether_aton"];_ether_ntoa_r=Module["_ether_ntoa_r"]=wasmExports["ether_ntoa_r"];_ether_ntoa=Module["_ether_ntoa"]=wasmExports["ether_ntoa"];_ether_line=Module["_ether_line"]=wasmExports["ether_line"];_ether_ntohost=Module["_ether_ntohost"]=wasmExports["ether_ntohost"];_ether_hostton=Module["_ether_hostton"]=wasmExports["ether_hostton"];_euidaccess=Module["_euidaccess"]=wasmExports["euidaccess"];_faccessat=Module["_faccessat"]=wasmExports["faccessat"];_eaccess=Module["_eaccess"]=wasmExports["eaccess"];_execl=Module["_execl"]=wasmExports["execl"];_execle=Module["_execle"]=wasmExports["execle"];_execlp=Module["_execlp"]=wasmExports["execlp"];_execvp=Module["_execvp"]=wasmExports["execvp"];_execvpe=Module["_execvpe"]=wasmExports["execvpe"];_exp10=Module["_exp10"]=wasmExports["exp10"];_pow10=Module["_pow10"]=wasmExports["pow10"];_exp10f=Module["_exp10f"]=wasmExports["exp10f"];_modff=Module["_modff"]=wasmExports["modff"];_exp2f=Module["_exp2f"]=wasmExports["exp2f"];_pow10f=Module["_pow10f"]=wasmExports["pow10f"];_exp10l=Module["_exp10l"]=wasmExports["exp10l"];_modfl=Module["_modfl"]=wasmExports["modfl"];_exp2l=Module["_exp2l"]=wasmExports["exp2l"];_powl=Module["_powl"]=wasmExports["powl"];_pow10l=Module["_pow10l"]=wasmExports["pow10l"];___letf2=Module["___letf2"]=wasmExports["__letf2"];_scalbnl=Module["_scalbnl"]=wasmExports["scalbnl"];_expl=Module["_expl"]=wasmExports["expl"];_explicit_bzero=Module["_explicit_bzero"]=wasmExports["explicit_bzero"];_expm1l=Module["_expm1l"]=wasmExports["expm1l"];__flushlbf=Module["__flushlbf"]=wasmExports["_flushlbf"];___fsetlocking=Module["___fsetlocking"]=wasmExports["__fsetlocking"];___fwriting=Module["___fwriting"]=wasmExports["__fwriting"];___freading=Module["___freading"]=wasmExports["__freading"];___freadable=Module["___freadable"]=wasmExports["__freadable"];___fwritable=Module["___fwritable"]=wasmExports["__fwritable"];___flbf=Module["___flbf"]=wasmExports["__flbf"];___fbufsize=Module["___fbufsize"]=wasmExports["__fbufsize"];___fpending=Module["___fpending"]=wasmExports["__fpending"];___fpurge=Module["___fpurge"]=wasmExports["__fpurge"];_fpurge=Module["_fpurge"]=wasmExports["fpurge"];___freadahead=Module["___freadahead"]=wasmExports["__freadahead"];___freadptr=Module["___freadptr"]=wasmExports["__freadptr"];___freadptrinc=Module["___freadptrinc"]=wasmExports["__freadptrinc"];___fseterr=Module["___fseterr"]=wasmExports["__fseterr"];_fcvt=Module["_fcvt"]=wasmExports["fcvt"];_fdim=Module["_fdim"]=wasmExports["fdim"];_fdimf=Module["_fdimf"]=wasmExports["fdimf"];_fdiml=Module["_fdiml"]=wasmExports["fdiml"];_fegetexceptflag=Module["_fegetexceptflag"]=wasmExports["fegetexceptflag"];_fetestexcept=Module["_fetestexcept"]=wasmExports["fetestexcept"];_feholdexcept=Module["_feholdexcept"]=wasmExports["feholdexcept"];_fegetenv=Module["_fegetenv"]=wasmExports["fegetenv"];_feclearexcept=Module["_feclearexcept"]=wasmExports["feclearexcept"];_feraiseexcept=Module["_feraiseexcept"]=wasmExports["feraiseexcept"];___fesetround=Module["___fesetround"]=wasmExports["__fesetround"];_fesetenv=Module["_fesetenv"]=wasmExports["fesetenv"];_feof_unlocked=Module["_feof_unlocked"]=wasmExports["feof_unlocked"];__IO_feof_unlocked=Module["__IO_feof_unlocked"]=wasmExports["_IO_feof_unlocked"];_ferror_unlocked=Module["_ferror_unlocked"]=wasmExports["ferror_unlocked"];__IO_ferror_unlocked=Module["__IO_ferror_unlocked"]=wasmExports["_IO_ferror_unlocked"];_fesetexceptflag=Module["_fesetexceptflag"]=wasmExports["fesetexceptflag"];_fesetround=Module["_fesetround"]=wasmExports["fesetround"];_feupdateenv=Module["_feupdateenv"]=wasmExports["feupdateenv"];_fflush_unlocked=Module["_fflush_unlocked"]=wasmExports["fflush_unlocked"];_ffs=Module["_ffs"]=wasmExports["ffs"];_ffsl=Module["_ffsl"]=wasmExports["ffsl"];_ffsll=Module["_ffsll"]=wasmExports["ffsll"];_emscripten_futex_wake=Module["_emscripten_futex_wake"]=wasmExports["emscripten_futex_wake"];_fgetln=Module["_fgetln"]=wasmExports["fgetln"];_getline=Module["_getline"]=wasmExports["getline"];_fgetpos=Module["_fgetpos"]=wasmExports["fgetpos"];_fgets_unlocked=Module["_fgets_unlocked"]=wasmExports["fgets_unlocked"];___fgetwc_unlocked=Module["___fgetwc_unlocked"]=wasmExports["__fgetwc_unlocked"];_fwide=Module["_fwide"]=wasmExports["fwide"];_mbtowc=Module["_mbtowc"]=wasmExports["mbtowc"];_fgetwc=Module["_fgetwc"]=wasmExports["fgetwc"];_fgetwc_unlocked=Module["_fgetwc_unlocked"]=wasmExports["fgetwc_unlocked"];_getwc_unlocked=Module["_getwc_unlocked"]=wasmExports["getwc_unlocked"];_fgetws=Module["_fgetws"]=wasmExports["fgetws"];_fgetws_unlocked=Module["_fgetws_unlocked"]=wasmExports["fgetws_unlocked"];_fileno_unlocked=Module["_fileno_unlocked"]=wasmExports["fileno_unlocked"];_finite=Module["_finite"]=wasmExports["finite"];_finitef=Module["_finitef"]=wasmExports["finitef"];___floatunsitf=Module["___floatunsitf"]=wasmExports["__floatunsitf"];_fmodl=Module["_fmodl"]=wasmExports["fmodl"];_ftrylockfile=Module["_ftrylockfile"]=wasmExports["ftrylockfile"];_floorf=Module["_floorf"]=wasmExports["floorf"];_floorl=Module["_floorl"]=wasmExports["floorl"];_fmaf=Module["_fmaf"]=wasmExports["fmaf"];_fmal=Module["_fmal"]=wasmExports["fmal"];_frexpl=Module["_frexpl"]=wasmExports["frexpl"];_nextafterl=Module["_nextafterl"]=wasmExports["nextafterl"];_ilogbl=Module["_ilogbl"]=wasmExports["ilogbl"];_fmax=Module["_fmax"]=wasmExports["fmax"];_fmaxf=Module["_fmaxf"]=wasmExports["fmaxf"];_fmaxl=Module["_fmaxl"]=wasmExports["fmaxl"];_fmemopen=Module["_fmemopen"]=wasmExports["fmemopen"];_fmin=Module["_fmin"]=wasmExports["fmin"];_fminf=Module["_fminf"]=wasmExports["fminf"];_fminl=Module["_fminl"]=wasmExports["fminl"];_fmodf=Module["_fmodf"]=wasmExports["fmodf"];_fmtmsg=Module["_fmtmsg"]=wasmExports["fmtmsg"];_fnmatch=Module["_fnmatch"]=wasmExports["fnmatch"];_towupper=Module["_towupper"]=wasmExports["towupper"];_towlower=Module["_towlower"]=wasmExports["towlower"];_wctype=Module["_wctype"]=wasmExports["wctype"];_iswctype=Module["_iswctype"]=wasmExports["iswctype"];_forkpty=Module["_forkpty"]=wasmExports["forkpty"];_openpty=Module["_openpty"]=wasmExports["openpty"];_pipe2=Module["_pipe2"]=wasmExports["pipe2"];_vfiprintf=Module["_vfiprintf"]=wasmExports["vfiprintf"];___small_vfprintf=Module["___small_vfprintf"]=wasmExports["__small_vfprintf"];_fputs_unlocked=Module["_fputs_unlocked"]=wasmExports["fputs_unlocked"];___fputwc_unlocked=Module["___fputwc_unlocked"]=wasmExports["__fputwc_unlocked"];_wctomb=Module["_wctomb"]=wasmExports["wctomb"];_fputwc=Module["_fputwc"]=wasmExports["fputwc"];_fputwc_unlocked=Module["_fputwc_unlocked"]=wasmExports["fputwc_unlocked"];_putwc_unlocked=Module["_putwc_unlocked"]=wasmExports["putwc_unlocked"];_fputws=Module["_fputws"]=wasmExports["fputws"];_wcsrtombs=Module["_wcsrtombs"]=wasmExports["wcsrtombs"];_fputws_unlocked=Module["_fputws_unlocked"]=wasmExports["fputws_unlocked"];_fread_unlocked=Module["_fread_unlocked"]=wasmExports["fread_unlocked"];_freelocale=Module["_freelocale"]=wasmExports["freelocale"];___freelocale=Module["___freelocale"]=wasmExports["__freelocale"];_freopen=Module["_freopen"]=wasmExports["freopen"];_frexpf=Module["_frexpf"]=wasmExports["frexpf"];_fscanf=Module["_fscanf"]=wasmExports["fscanf"];_vfscanf=Module["_vfscanf"]=wasmExports["vfscanf"];___isoc99_fscanf=Module["___isoc99_fscanf"]=wasmExports["__isoc99_fscanf"];_fseek=Module["_fseek"]=wasmExports["fseek"];_fseeko=Module["_fseeko"]=wasmExports["fseeko"];_fsetpos=Module["_fsetpos"]=wasmExports["fsetpos"];_ftello=Module["_ftello"]=wasmExports["ftello"];_ftime=Module["_ftime"]=wasmExports["ftime"];_utimensat=Module["_utimensat"]=wasmExports["utimensat"];_fwprintf=Module["_fwprintf"]=wasmExports["fwprintf"];_vfwprintf=Module["_vfwprintf"]=wasmExports["vfwprintf"];_fwrite_unlocked=Module["_fwrite_unlocked"]=wasmExports["fwrite_unlocked"];_fwscanf=Module["_fwscanf"]=wasmExports["fwscanf"];_vfwscanf=Module["_vfwscanf"]=wasmExports["vfwscanf"];___isoc99_fwscanf=Module["___isoc99_fwscanf"]=wasmExports["__isoc99_fwscanf"];_gcvt=Module["_gcvt"]=wasmExports["gcvt"];_get_current_dir_name=Module["_get_current_dir_name"]=wasmExports["get_current_dir_name"];__IO_getc=Module["__IO_getc"]=wasmExports["_IO_getc"];_fgetc_unlocked=Module["_fgetc_unlocked"]=wasmExports["fgetc_unlocked"];__IO_getc_unlocked=Module["__IO_getc_unlocked"]=wasmExports["_IO_getc_unlocked"];_getchar=Module["_getchar"]=wasmExports["getchar"];_getchar_unlocked=Module["_getchar_unlocked"]=wasmExports["getchar_unlocked"];_getdelim=Module["_getdelim"]=wasmExports["getdelim"];___getdelim=Module["___getdelim"]=wasmExports["__getdelim"];_getdents=Module["_getdents"]=wasmExports["getdents"];_getdomainname=Module["_getdomainname"]=wasmExports["getdomainname"];_getegid=Module["_getegid"]=wasmExports["getegid"];_getgroups=Module["_getgroups"]=wasmExports["getgroups"];_gethostid=Module["_gethostid"]=wasmExports["gethostid"];_freeifaddrs=Module["_freeifaddrs"]=wasmExports["freeifaddrs"];_getifaddrs=Module["_getifaddrs"]=wasmExports["getifaddrs"];___getitimer=Module["___getitimer"]=wasmExports["__getitimer"];_getlogin=Module["_getlogin"]=wasmExports["getlogin"];_getopt=Module["_getopt"]=wasmExports["getopt"];___posix_getopt=Module["___posix_getopt"]=wasmExports["__posix_getopt"];_getopt_long=Module["_getopt_long"]=wasmExports["getopt_long"];_getopt_long_only=Module["_getopt_long_only"]=wasmExports["getopt_long_only"];_mblen=Module["_mblen"]=wasmExports["mblen"];_getresgid=Module["_getresgid"]=wasmExports["getresgid"];_getresuid=Module["_getresuid"]=wasmExports["getresuid"];_getrusage=Module["_getrusage"]=wasmExports["getrusage"];_gets=Module["_gets"]=wasmExports["gets"];_getservbyname_r=Module["_getservbyname_r"]=wasmExports["getservbyname_r"];_getservbyport_r=Module["_getservbyport_r"]=wasmExports["getservbyport_r"];_getsubopt=Module["_getsubopt"]=wasmExports["getsubopt"];_gettid=Module["_gettid"]=wasmExports["gettid"];_getw=Module["_getw"]=wasmExports["getw"];_getwc=Module["_getwc"]=wasmExports["getwc"];_getwchar=Module["_getwchar"]=wasmExports["getwchar"];_getwchar_unlocked=Module["_getwchar_unlocked"]=wasmExports["getwchar_unlocked"];_glob=Module["_glob"]=wasmExports["glob"];_globfree=Module["_globfree"]=wasmExports["globfree"];_gmtime=Module["_gmtime"]=wasmExports["gmtime"];_herror=Module["_herror"]=wasmExports["herror"];_hcreate=Module["_hcreate"]=wasmExports["hcreate"];_hdestroy=Module["_hdestroy"]=wasmExports["hdestroy"];_hsearch=Module["_hsearch"]=wasmExports["hsearch"];_hcreate_r=Module["_hcreate_r"]=wasmExports["hcreate_r"];_hdestroy_r=Module["_hdestroy_r"]=wasmExports["hdestroy_r"];_hsearch_r=Module["_hsearch_r"]=wasmExports["hsearch_r"];_iconv_open=Module["_iconv_open"]=wasmExports["iconv_open"];_iconv=Module["_iconv"]=wasmExports["iconv"];_iconv_close=Module["_iconv_close"]=wasmExports["iconv_close"];_ilogb=Module["_ilogb"]=wasmExports["ilogb"];_ilogbf=Module["_ilogbf"]=wasmExports["ilogbf"];_imaxabs=Module["_imaxabs"]=wasmExports["imaxabs"];_imaxdiv=Module["_imaxdiv"]=wasmExports["imaxdiv"];_index=Module["_index"]=wasmExports["index"];_inet_addr=Module["_inet_addr"]=wasmExports["inet_addr"];_inet_network=Module["_inet_network"]=wasmExports["inet_network"];_inet_makeaddr=Module["_inet_makeaddr"]=wasmExports["inet_makeaddr"];_inet_lnaof=Module["_inet_lnaof"]=wasmExports["inet_lnaof"];_inet_netof=Module["_inet_netof"]=wasmExports["inet_netof"];_insque=Module["_insque"]=wasmExports["insque"];_remque=Module["_remque"]=wasmExports["remque"];___intscan=Module["___intscan"]=wasmExports["__intscan"];___multi3=Module["___multi3"]=wasmExports["__multi3"];___isalnum_l=Module["___isalnum_l"]=wasmExports["__isalnum_l"];_isalnum_l=Module["_isalnum_l"]=wasmExports["isalnum_l"];_isalpha=Module["_isalpha"]=wasmExports["isalpha"];___isalpha_l=Module["___isalpha_l"]=wasmExports["__isalpha_l"];_isalpha_l=Module["_isalpha_l"]=wasmExports["isalpha_l"];_isascii=Module["_isascii"]=wasmExports["isascii"];_isblank=Module["_isblank"]=wasmExports["isblank"];___isblank_l=Module["___isblank_l"]=wasmExports["__isblank_l"];_isblank_l=Module["_isblank_l"]=wasmExports["isblank_l"];_iscntrl=Module["_iscntrl"]=wasmExports["iscntrl"];___iscntrl_l=Module["___iscntrl_l"]=wasmExports["__iscntrl_l"];_iscntrl_l=Module["_iscntrl_l"]=wasmExports["iscntrl_l"];_isdigit=Module["_isdigit"]=wasmExports["isdigit"];___isdigit_l=Module["___isdigit_l"]=wasmExports["__isdigit_l"];_isdigit_l=Module["_isdigit_l"]=wasmExports["isdigit_l"];_isgraph=Module["_isgraph"]=wasmExports["isgraph"];___isgraph_l=Module["___isgraph_l"]=wasmExports["__isgraph_l"];_isgraph_l=Module["_isgraph_l"]=wasmExports["isgraph_l"];_islower=Module["_islower"]=wasmExports["islower"];___islower_l=Module["___islower_l"]=wasmExports["__islower_l"];_islower_l=Module["_islower_l"]=wasmExports["islower_l"];_isprint=Module["_isprint"]=wasmExports["isprint"];___isprint_l=Module["___isprint_l"]=wasmExports["__isprint_l"];_isprint_l=Module["_isprint_l"]=wasmExports["isprint_l"];_ispunct=Module["_ispunct"]=wasmExports["ispunct"];___ispunct_l=Module["___ispunct_l"]=wasmExports["__ispunct_l"];_ispunct_l=Module["_ispunct_l"]=wasmExports["ispunct_l"];_issetugid=Module["_issetugid"]=wasmExports["issetugid"];_isspace=Module["_isspace"]=wasmExports["isspace"];___isspace_l=Module["___isspace_l"]=wasmExports["__isspace_l"];_isspace_l=Module["_isspace_l"]=wasmExports["isspace_l"];_isupper=Module["_isupper"]=wasmExports["isupper"];___isupper_l=Module["___isupper_l"]=wasmExports["__isupper_l"];_isupper_l=Module["_isupper_l"]=wasmExports["isupper_l"];_iswalnum=Module["_iswalnum"]=wasmExports["iswalnum"];_iswalpha=Module["_iswalpha"]=wasmExports["iswalpha"];___iswalnum_l=Module["___iswalnum_l"]=wasmExports["__iswalnum_l"];_iswalnum_l=Module["_iswalnum_l"]=wasmExports["iswalnum_l"];___iswalpha_l=Module["___iswalpha_l"]=wasmExports["__iswalpha_l"];_iswalpha_l=Module["_iswalpha_l"]=wasmExports["iswalpha_l"];_iswblank=Module["_iswblank"]=wasmExports["iswblank"];___iswblank_l=Module["___iswblank_l"]=wasmExports["__iswblank_l"];_iswblank_l=Module["_iswblank_l"]=wasmExports["iswblank_l"];_iswcntrl=Module["_iswcntrl"]=wasmExports["iswcntrl"];___iswcntrl_l=Module["___iswcntrl_l"]=wasmExports["__iswcntrl_l"];_iswcntrl_l=Module["_iswcntrl_l"]=wasmExports["iswcntrl_l"];_iswgraph=Module["_iswgraph"]=wasmExports["iswgraph"];_iswlower=Module["_iswlower"]=wasmExports["iswlower"];_iswprint=Module["_iswprint"]=wasmExports["iswprint"];_iswpunct=Module["_iswpunct"]=wasmExports["iswpunct"];_iswspace=Module["_iswspace"]=wasmExports["iswspace"];_iswupper=Module["_iswupper"]=wasmExports["iswupper"];_iswxdigit=Module["_iswxdigit"]=wasmExports["iswxdigit"];___iswctype_l=Module["___iswctype_l"]=wasmExports["__iswctype_l"];___wctype_l=Module["___wctype_l"]=wasmExports["__wctype_l"];_iswctype_l=Module["_iswctype_l"]=wasmExports["iswctype_l"];_wctype_l=Module["_wctype_l"]=wasmExports["wctype_l"];_iswdigit=Module["_iswdigit"]=wasmExports["iswdigit"];___iswdigit_l=Module["___iswdigit_l"]=wasmExports["__iswdigit_l"];_iswdigit_l=Module["_iswdigit_l"]=wasmExports["iswdigit_l"];___iswgraph_l=Module["___iswgraph_l"]=wasmExports["__iswgraph_l"];_iswgraph_l=Module["_iswgraph_l"]=wasmExports["iswgraph_l"];___iswlower_l=Module["___iswlower_l"]=wasmExports["__iswlower_l"];_iswlower_l=Module["_iswlower_l"]=wasmExports["iswlower_l"];___iswprint_l=Module["___iswprint_l"]=wasmExports["__iswprint_l"];_iswprint_l=Module["_iswprint_l"]=wasmExports["iswprint_l"];___iswpunct_l=Module["___iswpunct_l"]=wasmExports["__iswpunct_l"];_iswpunct_l=Module["_iswpunct_l"]=wasmExports["iswpunct_l"];___iswspace_l=Module["___iswspace_l"]=wasmExports["__iswspace_l"];_iswspace_l=Module["_iswspace_l"]=wasmExports["iswspace_l"];___iswupper_l=Module["___iswupper_l"]=wasmExports["__iswupper_l"];_iswupper_l=Module["_iswupper_l"]=wasmExports["iswupper_l"];___iswxdigit_l=Module["___iswxdigit_l"]=wasmExports["__iswxdigit_l"];_iswxdigit_l=Module["_iswxdigit_l"]=wasmExports["iswxdigit_l"];_isxdigit=Module["_isxdigit"]=wasmExports["isxdigit"];___isxdigit_l=Module["___isxdigit_l"]=wasmExports["__isxdigit_l"];_isxdigit_l=Module["_isxdigit_l"]=wasmExports["isxdigit_l"];_j0=Module["_j0"]=wasmExports["j0"];_y0=Module["_y0"]=wasmExports["y0"];_j0f=Module["_j0f"]=wasmExports["j0f"];_y0f=Module["_y0f"]=wasmExports["y0f"];_j1=Module["_j1"]=wasmExports["j1"];_y1=Module["_y1"]=wasmExports["y1"];_j1f=Module["_j1f"]=wasmExports["j1f"];_y1f=Module["_y1f"]=wasmExports["y1f"];_jn=Module["_jn"]=wasmExports["jn"];_yn=Module["_yn"]=wasmExports["yn"];_jnf=Module["_jnf"]=wasmExports["jnf"];_ynf=Module["_ynf"]=wasmExports["ynf"];_labs=Module["_labs"]=wasmExports["labs"];___nl_langinfo=Module["___nl_langinfo"]=wasmExports["__nl_langinfo"];_nl_langinfo_l=Module["_nl_langinfo_l"]=wasmExports["nl_langinfo_l"];_lchmod=Module["_lchmod"]=wasmExports["lchmod"];_lchown=Module["_lchown"]=wasmExports["lchown"];_lcong48=Module["_lcong48"]=wasmExports["lcong48"];_ldexpf=Module["_ldexpf"]=wasmExports["ldexpf"];_scalbnf=Module["_scalbnf"]=wasmExports["scalbnf"];_ldexpl=Module["_ldexpl"]=wasmExports["ldexpl"];_ldiv=Module["_ldiv"]=wasmExports["ldiv"];_get_nprocs_conf=Module["_get_nprocs_conf"]=wasmExports["get_nprocs_conf"];_get_nprocs=Module["_get_nprocs"]=wasmExports["get_nprocs"];_get_phys_pages=Module["_get_phys_pages"]=wasmExports["get_phys_pages"];_get_avphys_pages=Module["_get_avphys_pages"]=wasmExports["get_avphys_pages"];_lgamma=Module["_lgamma"]=wasmExports["lgamma"];_lgamma_r=Module["_lgamma_r"]=wasmExports["lgamma_r"];_lgammaf=Module["_lgammaf"]=wasmExports["lgammaf"];_lgammaf_r=Module["_lgammaf_r"]=wasmExports["lgammaf_r"];___lgammal_r=Module["___lgammal_r"]=wasmExports["__lgammal_r"];_lgammal=Module["_lgammal"]=wasmExports["lgammal"];_lgammal_r=Module["_lgammal_r"]=wasmExports["lgammal_r"];_emscripten_has_threading_support=Module["_emscripten_has_threading_support"]=wasmExports["emscripten_has_threading_support"];_emscripten_num_logical_cores=Module["_emscripten_num_logical_cores"]=wasmExports["emscripten_num_logical_cores"];_emscripten_futex_wait=Module["_emscripten_futex_wait"]=wasmExports["emscripten_futex_wait"];_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=wasmExports["emscripten_main_thread_process_queued_calls"];_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=wasmExports["emscripten_current_thread_process_queued_calls"];_pthread_mutex_consistent=Module["_pthread_mutex_consistent"]=wasmExports["pthread_mutex_consistent"];_pthread_barrier_init=Module["_pthread_barrier_init"]=wasmExports["pthread_barrier_init"];_pthread_barrier_destroy=Module["_pthread_barrier_destroy"]=wasmExports["pthread_barrier_destroy"];_pthread_barrier_wait=Module["_pthread_barrier_wait"]=wasmExports["pthread_barrier_wait"];_pthread_cond_broadcast=Module["_pthread_cond_broadcast"]=wasmExports["pthread_cond_broadcast"];_pthread_atfork=Module["_pthread_atfork"]=wasmExports["pthread_atfork"];_pthread_cancel=Module["_pthread_cancel"]=wasmExports["pthread_cancel"];_pthread_testcancel=Module["_pthread_testcancel"]=wasmExports["pthread_testcancel"];___pthread_detach=Module["___pthread_detach"]=wasmExports["__pthread_detach"];_pthread_equal=Module["_pthread_equal"]=wasmExports["pthread_equal"];_pthread_mutexattr_init=Module["_pthread_mutexattr_init"]=wasmExports["pthread_mutexattr_init"];_pthread_mutexattr_setprotocol=Module["_pthread_mutexattr_setprotocol"]=wasmExports["pthread_mutexattr_setprotocol"];_pthread_mutexattr_settype=Module["_pthread_mutexattr_settype"]=wasmExports["pthread_mutexattr_settype"];_pthread_mutexattr_destroy=Module["_pthread_mutexattr_destroy"]=wasmExports["pthread_mutexattr_destroy"];_pthread_mutexattr_setpshared=Module["_pthread_mutexattr_setpshared"]=wasmExports["pthread_mutexattr_setpshared"];_pthread_condattr_setpshared=Module["_pthread_condattr_setpshared"]=wasmExports["pthread_condattr_setpshared"];_pthread_setcanceltype=Module["_pthread_setcanceltype"]=wasmExports["pthread_setcanceltype"];_pthread_rwlock_init=Module["_pthread_rwlock_init"]=wasmExports["pthread_rwlock_init"];_pthread_rwlock_destroy=Module["_pthread_rwlock_destroy"]=wasmExports["pthread_rwlock_destroy"];_pthread_rwlock_rdlock=Module["_pthread_rwlock_rdlock"]=wasmExports["pthread_rwlock_rdlock"];_pthread_rwlock_tryrdlock=Module["_pthread_rwlock_tryrdlock"]=wasmExports["pthread_rwlock_tryrdlock"];_pthread_rwlock_timedrdlock=Module["_pthread_rwlock_timedrdlock"]=wasmExports["pthread_rwlock_timedrdlock"];_pthread_rwlock_wrlock=Module["_pthread_rwlock_wrlock"]=wasmExports["pthread_rwlock_wrlock"];_pthread_rwlock_trywrlock=Module["_pthread_rwlock_trywrlock"]=wasmExports["pthread_rwlock_trywrlock"];_pthread_rwlock_timedwrlock=Module["_pthread_rwlock_timedwrlock"]=wasmExports["pthread_rwlock_timedwrlock"];_pthread_rwlock_unlock=Module["_pthread_rwlock_unlock"]=wasmExports["pthread_rwlock_unlock"];_pthread_rwlockattr_init=Module["_pthread_rwlockattr_init"]=wasmExports["pthread_rwlockattr_init"];_pthread_rwlockattr_destroy=Module["_pthread_rwlockattr_destroy"]=wasmExports["pthread_rwlockattr_destroy"];_pthread_rwlockattr_setpshared=Module["_pthread_rwlockattr_setpshared"]=wasmExports["pthread_rwlockattr_setpshared"];_pthread_spin_init=Module["_pthread_spin_init"]=wasmExports["pthread_spin_init"];_pthread_spin_destroy=Module["_pthread_spin_destroy"]=wasmExports["pthread_spin_destroy"];_pthread_spin_lock=Module["_pthread_spin_lock"]=wasmExports["pthread_spin_lock"];_pthread_spin_trylock=Module["_pthread_spin_trylock"]=wasmExports["pthread_spin_trylock"];_pthread_spin_unlock=Module["_pthread_spin_unlock"]=wasmExports["pthread_spin_unlock"];_sem_init=Module["_sem_init"]=wasmExports["sem_init"];_sem_post=Module["_sem_post"]=wasmExports["sem_post"];_sem_wait=Module["_sem_wait"]=wasmExports["sem_wait"];_sem_trywait=Module["_sem_trywait"]=wasmExports["sem_trywait"];_sem_destroy=Module["_sem_destroy"]=wasmExports["sem_destroy"];_pthread_mutex_timedlock=Module["_pthread_mutex_timedlock"]=wasmExports["pthread_mutex_timedlock"];_emscripten_builtin_pthread_create=Module["_emscripten_builtin_pthread_create"]=wasmExports["emscripten_builtin_pthread_create"];_emscripten_builtin_pthread_join=Module["_emscripten_builtin_pthread_join"]=wasmExports["emscripten_builtin_pthread_join"];_pthread_once=Module["_pthread_once"]=wasmExports["pthread_once"];_emscripten_builtin_pthread_exit=Module["_emscripten_builtin_pthread_exit"]=wasmExports["emscripten_builtin_pthread_exit"];_pthread_exit=Module["_pthread_exit"]=wasmExports["pthread_exit"];_emscripten_builtin_pthread_detach=Module["_emscripten_builtin_pthread_detach"]=wasmExports["emscripten_builtin_pthread_detach"];_thrd_detach=Module["_thrd_detach"]=wasmExports["thrd_detach"];_link=Module["_link"]=wasmExports["link"];_linkat=Module["_linkat"]=wasmExports["linkat"];_llabs=Module["_llabs"]=wasmExports["llabs"];_lldiv=Module["_lldiv"]=wasmExports["lldiv"];_llrint=Module["_llrint"]=wasmExports["llrint"];_rint=Module["_rint"]=wasmExports["rint"];_llrintf=Module["_llrintf"]=wasmExports["llrintf"];_rintf=Module["_rintf"]=wasmExports["rintf"];_llrintl=Module["_llrintl"]=wasmExports["llrintl"];_rintl=Module["_rintl"]=wasmExports["rintl"];_llround=Module["_llround"]=wasmExports["llround"];_llroundf=Module["_llroundf"]=wasmExports["llroundf"];_roundf=Module["_roundf"]=wasmExports["roundf"];_llroundl=Module["_llroundl"]=wasmExports["llroundl"];_roundl=Module["_roundl"]=wasmExports["roundl"];_log10f=Module["_log10f"]=wasmExports["log10f"];_log10l=Module["_log10l"]=wasmExports["log10l"];_log2f=Module["_log2f"]=wasmExports["log2f"];_log2l=Module["_log2l"]=wasmExports["log2l"];_logb=Module["_logb"]=wasmExports["logb"];_logbf=Module["_logbf"]=wasmExports["logbf"];_logbl=Module["_logbl"]=wasmExports["logbl"];_strtoull=Module["_strtoull"]=wasmExports["strtoull"];_nrand48=Module["_nrand48"]=wasmExports["nrand48"];_lrand48=Module["_lrand48"]=wasmExports["lrand48"];_lrint=Module["_lrint"]=wasmExports["lrint"];_lrintf=Module["_lrintf"]=wasmExports["lrintf"];_lrintl=Module["_lrintl"]=wasmExports["lrintl"];_lround=Module["_lround"]=wasmExports["lround"];_lroundf=Module["_lroundf"]=wasmExports["lroundf"];_lroundl=Module["_lroundl"]=wasmExports["lroundl"];_lsearch=Module["_lsearch"]=wasmExports["lsearch"];_lfind=Module["_lfind"]=wasmExports["lfind"];_mbrlen=Module["_mbrlen"]=wasmExports["mbrlen"];_mbrtoc16=Module["_mbrtoc16"]=wasmExports["mbrtoc16"];_mbrtoc32=Module["_mbrtoc32"]=wasmExports["mbrtoc32"];_mbsinit=Module["_mbsinit"]=wasmExports["mbsinit"];_mbsnrtowcs=Module["_mbsnrtowcs"]=wasmExports["mbsnrtowcs"];_mbsrtowcs=Module["_mbsrtowcs"]=wasmExports["mbsrtowcs"];_memccpy=Module["_memccpy"]=wasmExports["memccpy"];_memmem=Module["_memmem"]=wasmExports["memmem"];_mempcpy=Module["_mempcpy"]=wasmExports["mempcpy"];_mincore=Module["_mincore"]=wasmExports["mincore"];_mkdtemp=Module["_mkdtemp"]=wasmExports["mkdtemp"];_mkfifo=Module["_mkfifo"]=wasmExports["mkfifo"];_mkfifoat=Module["_mkfifoat"]=wasmExports["mkfifoat"];_mkostemp=Module["_mkostemp"]=wasmExports["mkostemp"];_mkostemps=Module["_mkostemps"]=wasmExports["mkostemps"];_mkstemp=Module["_mkstemp"]=wasmExports["mkstemp"];_mkstemps=Module["_mkstemps"]=wasmExports["mkstemps"];_mktemp=Module["_mktemp"]=wasmExports["mktemp"];_timegm=Module["_timegm"]=wasmExports["timegm"];_mlock=Module["_mlock"]=wasmExports["mlock"];_mlockall=Module["_mlockall"]=wasmExports["mlockall"];_emscripten_builtin_mmap=Module["_emscripten_builtin_mmap"]=wasmExports["emscripten_builtin_mmap"];_setmntent=Module["_setmntent"]=wasmExports["setmntent"];_endmntent=Module["_endmntent"]=wasmExports["endmntent"];_getmntent_r=Module["_getmntent_r"]=wasmExports["getmntent_r"];_sscanf=Module["_sscanf"]=wasmExports["sscanf"];_getmntent=Module["_getmntent"]=wasmExports["getmntent"];_addmntent=Module["_addmntent"]=wasmExports["addmntent"];_hasmntopt=Module["_hasmntopt"]=wasmExports["hasmntopt"];_mprotect=Module["_mprotect"]=wasmExports["mprotect"];_jrand48=Module["_jrand48"]=wasmExports["jrand48"];_mrand48=Module["_mrand48"]=wasmExports["mrand48"];_mtx_destroy=Module["_mtx_destroy"]=wasmExports["mtx_destroy"];_mtx_init=Module["_mtx_init"]=wasmExports["mtx_init"];_mtx_lock=Module["_mtx_lock"]=wasmExports["mtx_lock"];_mtx_timedlock=Module["_mtx_timedlock"]=wasmExports["mtx_timedlock"];_mtx_trylock=Module["_mtx_trylock"]=wasmExports["mtx_trylock"];_mtx_unlock=Module["_mtx_unlock"]=wasmExports["mtx_unlock"];_munlock=Module["_munlock"]=wasmExports["munlock"];_munlockall=Module["_munlockall"]=wasmExports["munlockall"];_emscripten_builtin_munmap=Module["_emscripten_builtin_munmap"]=wasmExports["emscripten_builtin_munmap"];_nan=Module["_nan"]=wasmExports["nan"];_nanf=Module["_nanf"]=wasmExports["nanf"];_nanl=Module["_nanl"]=wasmExports["nanl"];_nanosleep=Module["_nanosleep"]=wasmExports["nanosleep"];_nearbyint=Module["_nearbyint"]=wasmExports["nearbyint"];_nearbyintf=Module["_nearbyintf"]=wasmExports["nearbyintf"];_nearbyintl=Module["_nearbyintl"]=wasmExports["nearbyintl"];_getnetbyaddr=Module["_getnetbyaddr"]=wasmExports["getnetbyaddr"];_getnetbyname=Module["_getnetbyname"]=wasmExports["getnetbyname"];___newlocale=Module["___newlocale"]=wasmExports["__newlocale"];_newlocale=Module["_newlocale"]=wasmExports["newlocale"];_nextafterf=Module["_nextafterf"]=wasmExports["nextafterf"];_nexttoward=Module["_nexttoward"]=wasmExports["nexttoward"];_nexttowardf=Module["_nexttowardf"]=wasmExports["nexttowardf"];_nexttowardl=Module["_nexttowardl"]=wasmExports["nexttowardl"];_nftw=Module["_nftw"]=wasmExports["nftw"];_nice=Module["_nice"]=wasmExports["nice"];_setpriority=Module["_setpriority"]=wasmExports["setpriority"];_ns_get16=Module["_ns_get16"]=wasmExports["ns_get16"];_ns_get32=Module["_ns_get32"]=wasmExports["ns_get32"];_ns_put16=Module["_ns_put16"]=wasmExports["ns_put16"];_ns_put32=Module["_ns_put32"]=wasmExports["ns_put32"];_ns_skiprr=Module["_ns_skiprr"]=wasmExports["ns_skiprr"];_ns_initparse=Module["_ns_initparse"]=wasmExports["ns_initparse"];_ns_name_uncompress=Module["_ns_name_uncompress"]=wasmExports["ns_name_uncompress"];_ns_parserr=Module["_ns_parserr"]=wasmExports["ns_parserr"];_open_memstream=Module["_open_memstream"]=wasmExports["open_memstream"];_open_wmemstream=Module["_open_wmemstream"]=wasmExports["open_wmemstream"];_posix_close=Module["_posix_close"]=wasmExports["posix_close"];_posix_madvise=Module["_posix_madvise"]=wasmExports["posix_madvise"];_posix_spawn_file_actions_addchdir_np=Module["_posix_spawn_file_actions_addchdir_np"]=wasmExports["posix_spawn_file_actions_addchdir_np"];_posix_spawn_file_actions_addclose=Module["_posix_spawn_file_actions_addclose"]=wasmExports["posix_spawn_file_actions_addclose"];_posix_spawn_file_actions_adddup2=Module["_posix_spawn_file_actions_adddup2"]=wasmExports["posix_spawn_file_actions_adddup2"];_posix_spawn_file_actions_addfchdir_np=Module["_posix_spawn_file_actions_addfchdir_np"]=wasmExports["posix_spawn_file_actions_addfchdir_np"];_posix_spawn_file_actions_addopen=Module["_posix_spawn_file_actions_addopen"]=wasmExports["posix_spawn_file_actions_addopen"];_posix_spawn_file_actions_destroy=Module["_posix_spawn_file_actions_destroy"]=wasmExports["posix_spawn_file_actions_destroy"];_posix_spawn_file_actions_init=Module["_posix_spawn_file_actions_init"]=wasmExports["posix_spawn_file_actions_init"];_posix_spawnattr_destroy=Module["_posix_spawnattr_destroy"]=wasmExports["posix_spawnattr_destroy"];_posix_spawnattr_getflags=Module["_posix_spawnattr_getflags"]=wasmExports["posix_spawnattr_getflags"];_posix_spawnattr_getpgroup=Module["_posix_spawnattr_getpgroup"]=wasmExports["posix_spawnattr_getpgroup"];_posix_spawnattr_getsigdefault=Module["_posix_spawnattr_getsigdefault"]=wasmExports["posix_spawnattr_getsigdefault"];_posix_spawnattr_getsigmask=Module["_posix_spawnattr_getsigmask"]=wasmExports["posix_spawnattr_getsigmask"];_posix_spawnattr_init=Module["_posix_spawnattr_init"]=wasmExports["posix_spawnattr_init"];_posix_spawnattr_getschedparam=Module["_posix_spawnattr_getschedparam"]=wasmExports["posix_spawnattr_getschedparam"];_posix_spawnattr_setschedparam=Module["_posix_spawnattr_setschedparam"]=wasmExports["posix_spawnattr_setschedparam"];_posix_spawnattr_getschedpolicy=Module["_posix_spawnattr_getschedpolicy"]=wasmExports["posix_spawnattr_getschedpolicy"];_posix_spawnattr_setschedpolicy=Module["_posix_spawnattr_setschedpolicy"]=wasmExports["posix_spawnattr_setschedpolicy"];_posix_spawnattr_setflags=Module["_posix_spawnattr_setflags"]=wasmExports["posix_spawnattr_setflags"];_posix_spawnattr_setpgroup=Module["_posix_spawnattr_setpgroup"]=wasmExports["posix_spawnattr_setpgroup"];_posix_spawnattr_setsigdefault=Module["_posix_spawnattr_setsigdefault"]=wasmExports["posix_spawnattr_setsigdefault"];_posix_spawnattr_setsigmask=Module["_posix_spawnattr_setsigmask"]=wasmExports["posix_spawnattr_setsigmask"];_powf=Module["_powf"]=wasmExports["powf"];_ppoll=Module["_ppoll"]=wasmExports["ppoll"];_preadv=Module["_preadv"]=wasmExports["preadv"];_printf=Module["_printf"]=wasmExports["printf"];___small_printf=Module["___small_printf"]=wasmExports["__small_printf"];_em_proxying_queue_create=Module["_em_proxying_queue_create"]=wasmExports["em_proxying_queue_create"];_em_proxying_queue_destroy=Module["_em_proxying_queue_destroy"]=wasmExports["em_proxying_queue_destroy"];_emscripten_proxy_get_system_queue=Module["_emscripten_proxy_get_system_queue"]=wasmExports["emscripten_proxy_get_system_queue"];_emscripten_proxy_execute_queue=Module["_emscripten_proxy_execute_queue"]=wasmExports["emscripten_proxy_execute_queue"];_emscripten_proxy_finish=Module["_emscripten_proxy_finish"]=wasmExports["emscripten_proxy_finish"];_emscripten_proxy_async=Module["_emscripten_proxy_async"]=wasmExports["emscripten_proxy_async"];_emscripten_proxy_sync=Module["_emscripten_proxy_sync"]=wasmExports["emscripten_proxy_sync"];_emscripten_proxy_sync_with_ctx=Module["_emscripten_proxy_sync_with_ctx"]=wasmExports["emscripten_proxy_sync_with_ctx"];_pselect=Module["_pselect"]=wasmExports["pselect"];_pthread_attr_getdetachstate=Module["_pthread_attr_getdetachstate"]=wasmExports["pthread_attr_getdetachstate"];_pthread_attr_getguardsize=Module["_pthread_attr_getguardsize"]=wasmExports["pthread_attr_getguardsize"];_pthread_attr_getinheritsched=Module["_pthread_attr_getinheritsched"]=wasmExports["pthread_attr_getinheritsched"];_pthread_attr_getschedparam=Module["_pthread_attr_getschedparam"]=wasmExports["pthread_attr_getschedparam"];_pthread_attr_getschedpolicy=Module["_pthread_attr_getschedpolicy"]=wasmExports["pthread_attr_getschedpolicy"];_pthread_attr_getscope=Module["_pthread_attr_getscope"]=wasmExports["pthread_attr_getscope"];_pthread_attr_getstack=Module["_pthread_attr_getstack"]=wasmExports["pthread_attr_getstack"];_pthread_attr_getstacksize=Module["_pthread_attr_getstacksize"]=wasmExports["pthread_attr_getstacksize"];_pthread_barrierattr_getpshared=Module["_pthread_barrierattr_getpshared"]=wasmExports["pthread_barrierattr_getpshared"];_pthread_condattr_getclock=Module["_pthread_condattr_getclock"]=wasmExports["pthread_condattr_getclock"];_pthread_condattr_getpshared=Module["_pthread_condattr_getpshared"]=wasmExports["pthread_condattr_getpshared"];_pthread_mutexattr_getprotocol=Module["_pthread_mutexattr_getprotocol"]=wasmExports["pthread_mutexattr_getprotocol"];_pthread_mutexattr_getpshared=Module["_pthread_mutexattr_getpshared"]=wasmExports["pthread_mutexattr_getpshared"];_pthread_mutexattr_getrobust=Module["_pthread_mutexattr_getrobust"]=wasmExports["pthread_mutexattr_getrobust"];_pthread_mutexattr_gettype=Module["_pthread_mutexattr_gettype"]=wasmExports["pthread_mutexattr_gettype"];_pthread_rwlockattr_getpshared=Module["_pthread_rwlockattr_getpshared"]=wasmExports["pthread_rwlockattr_getpshared"];_pthread_attr_setdetachstate=Module["_pthread_attr_setdetachstate"]=wasmExports["pthread_attr_setdetachstate"];_pthread_attr_setguardsize=Module["_pthread_attr_setguardsize"]=wasmExports["pthread_attr_setguardsize"];_pthread_attr_setinheritsched=Module["_pthread_attr_setinheritsched"]=wasmExports["pthread_attr_setinheritsched"];_pthread_attr_setschedparam=Module["_pthread_attr_setschedparam"]=wasmExports["pthread_attr_setschedparam"];_pthread_attr_setschedpolicy=Module["_pthread_attr_setschedpolicy"]=wasmExports["pthread_attr_setschedpolicy"];_pthread_attr_setscope=Module["_pthread_attr_setscope"]=wasmExports["pthread_attr_setscope"];_pthread_attr_setstack=Module["_pthread_attr_setstack"]=wasmExports["pthread_attr_setstack"];__pthread_cleanup_pop=Module["__pthread_cleanup_pop"]=wasmExports["_pthread_cleanup_pop"];_pthread_getattr_np=Module["_pthread_getattr_np"]=wasmExports["pthread_getattr_np"];_pthread_getconcurrency=Module["_pthread_getconcurrency"]=wasmExports["pthread_getconcurrency"];_pthread_getschedparam=Module["_pthread_getschedparam"]=wasmExports["pthread_getschedparam"];_thrd_current=Module["_thrd_current"]=wasmExports["thrd_current"];_emscripten_main_runtime_thread_id=Module["_emscripten_main_runtime_thread_id"]=wasmExports["emscripten_main_runtime_thread_id"];_pthread_setconcurrency=Module["_pthread_setconcurrency"]=wasmExports["pthread_setconcurrency"];_pthread_setschedprio=Module["_pthread_setschedprio"]=wasmExports["pthread_setschedprio"];___sig_is_blocked=Module["___sig_is_blocked"]=wasmExports["__sig_is_blocked"];_sigorset=Module["_sigorset"]=wasmExports["sigorset"];_sigandset=Module["_sigandset"]=wasmExports["sigandset"];_sigdelset=Module["_sigdelset"]=wasmExports["sigdelset"];_ptsname=Module["_ptsname"]=wasmExports["ptsname"];__IO_putc=Module["__IO_putc"]=wasmExports["_IO_putc"];_putc_unlocked=Module["_putc_unlocked"]=wasmExports["putc_unlocked"];_fputc_unlocked=Module["_fputc_unlocked"]=wasmExports["fputc_unlocked"];__IO_putc_unlocked=Module["__IO_putc_unlocked"]=wasmExports["_IO_putc_unlocked"];_putchar_unlocked=Module["_putchar_unlocked"]=wasmExports["putchar_unlocked"];_putenv=Module["_putenv"]=wasmExports["putenv"];_putw=Module["_putw"]=wasmExports["putw"];_putwc=Module["_putwc"]=wasmExports["putwc"];_putwchar=Module["_putwchar"]=wasmExports["putwchar"];_putwchar_unlocked=Module["_putwchar_unlocked"]=wasmExports["putwchar_unlocked"];_pwritev=Module["_pwritev"]=wasmExports["pwritev"];_qsort_r=Module["_qsort_r"]=wasmExports["qsort_r"];_quick_exit=Module["_quick_exit"]=wasmExports["quick_exit"];_action_abort=Module["_action_abort"]=wasmExports["action_abort"];_action_terminate=Module["_action_terminate"]=wasmExports["action_terminate"];_srand=Module["_srand"]=wasmExports["srand"];_rand=Module["_rand"]=wasmExports["rand"];_rand_r=Module["_rand_r"]=wasmExports["rand_r"];_srandom=Module["_srandom"]=wasmExports["srandom"];_initstate=Module["_initstate"]=wasmExports["initstate"];_setstate=Module["_setstate"]=wasmExports["setstate"];_random=Module["_random"]=wasmExports["random"];_readdir_r=Module["_readdir_r"]=wasmExports["readdir_r"];_reallocarray=Module["_reallocarray"]=wasmExports["reallocarray"];_recvmmsg=Module["_recvmmsg"]=wasmExports["recvmmsg"];_regcomp=Module["_regcomp"]=wasmExports["regcomp"];_regfree=Module["_regfree"]=wasmExports["regfree"];_regerror=Module["_regerror"]=wasmExports["regerror"];_regexec=Module["_regexec"]=wasmExports["regexec"];_remainder=Module["_remainder"]=wasmExports["remainder"];_remquo=Module["_remquo"]=wasmExports["remquo"];_drem=Module["_drem"]=wasmExports["drem"];_remainderf=Module["_remainderf"]=wasmExports["remainderf"];_remquof=Module["_remquof"]=wasmExports["remquof"];_dremf=Module["_dremf"]=wasmExports["dremf"];_remainderl=Module["_remainderl"]=wasmExports["remainderl"];_remquol=Module["_remquol"]=wasmExports["remquol"];_remove=Module["_remove"]=wasmExports["remove"];_res_init=Module["_res_init"]=wasmExports["res_init"];_res_mkquery=Module["_res_mkquery"]=wasmExports["res_mkquery"];___res_msend=Module["___res_msend"]=wasmExports["__res_msend"];_res_send=Module["_res_send"]=wasmExports["res_send"];___res_state=Module["___res_state"]=wasmExports["__res_state"];_rindex=Module["_rindex"]=wasmExports["rindex"];_scalb=Module["_scalb"]=wasmExports["scalb"];_scalbf=Module["_scalbf"]=wasmExports["scalbf"];_scalbln=Module["_scalbln"]=wasmExports["scalbln"];_scalblnf=Module["_scalblnf"]=wasmExports["scalblnf"];_scalblnl=Module["_scalblnl"]=wasmExports["scalblnl"];_scandir=Module["_scandir"]=wasmExports["scandir"];_scanf=Module["_scanf"]=wasmExports["scanf"];_vscanf=Module["_vscanf"]=wasmExports["vscanf"];___isoc99_scanf=Module["___isoc99_scanf"]=wasmExports["__isoc99_scanf"];_secure_getenv=Module["_secure_getenv"]=wasmExports["secure_getenv"];_seed48=Module["_seed48"]=wasmExports["seed48"];_seekdir=Module["_seekdir"]=wasmExports["seekdir"];_sendmmsg=Module["_sendmmsg"]=wasmExports["sendmmsg"];_endservent=Module["_endservent"]=wasmExports["endservent"];_setservent=Module["_setservent"]=wasmExports["setservent"];_getservent=Module["_getservent"]=wasmExports["getservent"];_setbuf=Module["_setbuf"]=wasmExports["setbuf"];_setbuffer=Module["_setbuffer"]=wasmExports["setbuffer"];_setdomainname=Module["_setdomainname"]=wasmExports["setdomainname"];_setegid=Module["_setegid"]=wasmExports["setegid"];_seteuid=Module["_seteuid"]=wasmExports["seteuid"];__emscripten_timeout=Module["__emscripten_timeout"]=wasmExports["_emscripten_timeout"];_setlinebuf=Module["_setlinebuf"]=wasmExports["setlinebuf"];_setresgid=Module["_setresgid"]=wasmExports["setresgid"];_setresuid=Module["_setresuid"]=wasmExports["setresuid"];_shm_open=Module["_shm_open"]=wasmExports["shm_open"];_shm_unlink=Module["_shm_unlink"]=wasmExports["shm_unlink"];_sigaction=Module["_sigaction"]=wasmExports["sigaction"];_sigisemptyset=Module["_sigisemptyset"]=wasmExports["sigisemptyset"];_bsd_signal=Module["_bsd_signal"]=wasmExports["bsd_signal"];___sysv_signal=Module["___sysv_signal"]=wasmExports["__sysv_signal"];_significand=Module["_significand"]=wasmExports["significand"];_significandf=Module["_significandf"]=wasmExports["significandf"];_sigprocmask=Module["_sigprocmask"]=wasmExports["sigprocmask"];_sincos=Module["_sincos"]=wasmExports["sincos"];_sincosf=Module["_sincosf"]=wasmExports["sincosf"];_sincosl=Module["_sincosl"]=wasmExports["sincosl"];_sinhl=Module["_sinhl"]=wasmExports["sinhl"];_sinl=Module["_sinl"]=wasmExports["sinl"];_sockatmark=Module["_sockatmark"]=wasmExports["sockatmark"];_vsprintf=Module["_vsprintf"]=wasmExports["vsprintf"];_vsiprintf=Module["_vsiprintf"]=wasmExports["vsiprintf"];___small_sprintf=Module["___small_sprintf"]=wasmExports["__small_sprintf"];___small_vsprintf=Module["___small_vsprintf"]=wasmExports["__small_vsprintf"];_srand48=Module["_srand48"]=wasmExports["srand48"];_vsscanf=Module["_vsscanf"]=wasmExports["vsscanf"];___isoc99_sscanf=Module["___isoc99_sscanf"]=wasmExports["__isoc99_sscanf"];_statfs=Module["_statfs"]=wasmExports["statfs"];_fstatfs=Module["_fstatfs"]=wasmExports["fstatfs"];_statx=Module["_statx"]=wasmExports["statx"];_stpcpy=Module["_stpcpy"]=wasmExports["stpcpy"];_stpncpy=Module["_stpncpy"]=wasmExports["stpncpy"];___strcasecmp_l=Module["___strcasecmp_l"]=wasmExports["__strcasecmp_l"];_strcasecmp_l=Module["_strcasecmp_l"]=wasmExports["strcasecmp_l"];_strcasestr=Module["_strcasestr"]=wasmExports["strcasestr"];_strncasecmp=Module["_strncasecmp"]=wasmExports["strncasecmp"];_strchrnul=Module["_strchrnul"]=wasmExports["strchrnul"];___strcoll_l=Module["___strcoll_l"]=wasmExports["__strcoll_l"];_strcoll_l=Module["_strcoll_l"]=wasmExports["strcoll_l"];___strerror_l=Module["___strerror_l"]=wasmExports["__strerror_l"];_strerror_l=Module["_strerror_l"]=wasmExports["strerror_l"];_strerror_r=Module["_strerror_r"]=wasmExports["strerror_r"];___xpg_strerror_r=Module["___xpg_strerror_r"]=wasmExports["__xpg_strerror_r"];_strfmon_l=Module["_strfmon_l"]=wasmExports["strfmon_l"];_strfmon=Module["_strfmon"]=wasmExports["strfmon"];_strftime_l=Module["_strftime_l"]=wasmExports["strftime_l"];_strlcat=Module["_strlcat"]=wasmExports["strlcat"];_strlcpy=Module["_strlcpy"]=wasmExports["strlcpy"];_strlwr=Module["_strlwr"]=wasmExports["strlwr"];___strncasecmp_l=Module["___strncasecmp_l"]=wasmExports["__strncasecmp_l"];_strncasecmp_l=Module["_strncasecmp_l"]=wasmExports["strncasecmp_l"];_strndup=Module["_strndup"]=wasmExports["strndup"];_strsep=Module["_strsep"]=wasmExports["strsep"];_strtof=Module["_strtof"]=wasmExports["strtof"];_strtold=Module["_strtold"]=wasmExports["strtold"];_strtof_l=Module["_strtof_l"]=wasmExports["strtof_l"];_strtod_l=Module["_strtod_l"]=wasmExports["strtod_l"];_strtold_l=Module["_strtold_l"]=wasmExports["strtold_l"];___strtof_l=Module["___strtof_l"]=wasmExports["__strtof_l"];___strtod_l=Module["___strtod_l"]=wasmExports["__strtod_l"];___strtold_l=Module["___strtold_l"]=wasmExports["__strtold_l"];_strtok=Module["_strtok"]=wasmExports["strtok"];_strtok_r=Module["_strtok_r"]=wasmExports["strtok_r"];_strtoll=Module["_strtoll"]=wasmExports["strtoll"];_strtoimax=Module["_strtoimax"]=wasmExports["strtoimax"];_strtoumax=Module["_strtoumax"]=wasmExports["strtoumax"];___strtol_internal=Module["___strtol_internal"]=wasmExports["__strtol_internal"];___strtoul_internal=Module["___strtoul_internal"]=wasmExports["__strtoul_internal"];___strtoll_internal=Module["___strtoll_internal"]=wasmExports["__strtoll_internal"];___strtoull_internal=Module["___strtoull_internal"]=wasmExports["__strtoull_internal"];___strtoimax_internal=Module["___strtoimax_internal"]=wasmExports["__strtoimax_internal"];___strtoumax_internal=Module["___strtoumax_internal"]=wasmExports["__strtoumax_internal"];_strtoull_l=Module["_strtoull_l"]=wasmExports["strtoull_l"];_strtoll_l=Module["_strtoll_l"]=wasmExports["strtoll_l"];_strtoul_l=Module["_strtoul_l"]=wasmExports["strtoul_l"];_strtol_l=Module["_strtol_l"]=wasmExports["strtol_l"];_strupr=Module["_strupr"]=wasmExports["strupr"];_strverscmp=Module["_strverscmp"]=wasmExports["strverscmp"];___strxfrm_l=Module["___strxfrm_l"]=wasmExports["__strxfrm_l"];_strxfrm=Module["_strxfrm"]=wasmExports["strxfrm"];_strxfrm_l=Module["_strxfrm_l"]=wasmExports["strxfrm_l"];_swab=Module["_swab"]=wasmExports["swab"];_swprintf=Module["_swprintf"]=wasmExports["swprintf"];_vswprintf=Module["_vswprintf"]=wasmExports["vswprintf"];_swscanf=Module["_swscanf"]=wasmExports["swscanf"];_vswscanf=Module["_vswscanf"]=wasmExports["vswscanf"];___isoc99_swscanf=Module["___isoc99_swscanf"]=wasmExports["__isoc99_swscanf"];_symlinkat=Module["_symlinkat"]=wasmExports["symlinkat"];_setlogmask=Module["_setlogmask"]=wasmExports["setlogmask"];_closelog=Module["_closelog"]=wasmExports["closelog"];_openlog=Module["_openlog"]=wasmExports["openlog"];_syslog=Module["_syslog"]=wasmExports["syslog"];_vsyslog=Module["_vsyslog"]=wasmExports["vsyslog"];_tanhf=Module["_tanhf"]=wasmExports["tanhf"];_tanhl=Module["_tanhl"]=wasmExports["tanhl"];_tanl=Module["_tanl"]=wasmExports["tanl"];_tcgetsid=Module["_tcgetsid"]=wasmExports["tcgetsid"];_tcgetwinsize=Module["_tcgetwinsize"]=wasmExports["tcgetwinsize"];_tcsetwinsize=Module["_tcsetwinsize"]=wasmExports["tcsetwinsize"];_tdelete=Module["_tdelete"]=wasmExports["tdelete"];_tdestroy=Module["_tdestroy"]=wasmExports["tdestroy"];_telldir=Module["_telldir"]=wasmExports["telldir"];_tempnam=Module["_tempnam"]=wasmExports["tempnam"];_ngettext=Module["_ngettext"]=wasmExports["ngettext"];_tfind=Module["_tfind"]=wasmExports["tfind"];_tgamma=Module["_tgamma"]=wasmExports["tgamma"];_tgammaf=Module["_tgammaf"]=wasmExports["tgammaf"];_tgammal=Module["_tgammal"]=wasmExports["tgammal"];_thrd_create=Module["_thrd_create"]=wasmExports["thrd_create"];_thrd_exit=Module["_thrd_exit"]=wasmExports["thrd_exit"];_thrd_join=Module["_thrd_join"]=wasmExports["thrd_join"];_thrd_sleep=Module["_thrd_sleep"]=wasmExports["thrd_sleep"];_thrd_yield=Module["_thrd_yield"]=wasmExports["thrd_yield"];_emscripten_set_thread_name=Module["_emscripten_set_thread_name"]=wasmExports["emscripten_set_thread_name"];_timespec_get=Module["_timespec_get"]=wasmExports["timespec_get"];_tmpfile=Module["_tmpfile"]=wasmExports["tmpfile"];_tmpnam=Module["_tmpnam"]=wasmExports["tmpnam"];_toascii=Module["_toascii"]=wasmExports["toascii"];___tolower_l=Module["___tolower_l"]=wasmExports["__tolower_l"];_tolower_l=Module["_tolower_l"]=wasmExports["tolower_l"];___toupper_l=Module["___toupper_l"]=wasmExports["__toupper_l"];_toupper_l=Module["_toupper_l"]=wasmExports["toupper_l"];___towupper_l=Module["___towupper_l"]=wasmExports["__towupper_l"];___towlower_l=Module["___towlower_l"]=wasmExports["__towlower_l"];_towupper_l=Module["_towupper_l"]=wasmExports["towupper_l"];_towlower_l=Module["_towlower_l"]=wasmExports["towlower_l"];_truncf=Module["_truncf"]=wasmExports["truncf"];_truncl=Module["_truncl"]=wasmExports["truncl"];_tsearch=Module["_tsearch"]=wasmExports["tsearch"];_tss_create=Module["_tss_create"]=wasmExports["tss_create"];_tss_delete=Module["_tss_delete"]=wasmExports["tss_delete"];_tss_set=Module["_tss_set"]=wasmExports["tss_set"];_ttyname=Module["_ttyname"]=wasmExports["ttyname"];_twalk=Module["_twalk"]=wasmExports["twalk"];_ualarm=Module["_ualarm"]=wasmExports["ualarm"];_ungetwc=Module["_ungetwc"]=wasmExports["ungetwc"];___uselocale=Module["___uselocale"]=wasmExports["__uselocale"];_uselocale=Module["_uselocale"]=wasmExports["uselocale"];_utime=Module["_utime"]=wasmExports["utime"];_versionsort=Module["_versionsort"]=wasmExports["versionsort"];___vfprintf_internal=Module["___vfprintf_internal"]=wasmExports["__vfprintf_internal"];___isoc99_vfscanf=Module["___isoc99_vfscanf"]=wasmExports["__isoc99_vfscanf"];_wcsnlen=Module["_wcsnlen"]=wasmExports["wcsnlen"];___isoc99_vfwscanf=Module["___isoc99_vfwscanf"]=wasmExports["__isoc99_vfwscanf"];_vprintf=Module["_vprintf"]=wasmExports["vprintf"];___isoc99_vscanf=Module["___isoc99_vscanf"]=wasmExports["__isoc99_vscanf"];_vsniprintf=Module["_vsniprintf"]=wasmExports["vsniprintf"];___small_vsnprintf=Module["___small_vsnprintf"]=wasmExports["__small_vsnprintf"];___isoc99_vsscanf=Module["___isoc99_vsscanf"]=wasmExports["__isoc99_vsscanf"];___isoc99_vswscanf=Module["___isoc99_vswscanf"]=wasmExports["__isoc99_vswscanf"];_vwprintf=Module["_vwprintf"]=wasmExports["vwprintf"];_vwscanf=Module["_vwscanf"]=wasmExports["vwscanf"];___isoc99_vwscanf=Module["___isoc99_vwscanf"]=wasmExports["__isoc99_vwscanf"];_wcpcpy=Module["_wcpcpy"]=wasmExports["wcpcpy"];_wcpncpy=Module["_wcpncpy"]=wasmExports["wcpncpy"];_wcscasecmp=Module["_wcscasecmp"]=wasmExports["wcscasecmp"];_wcsncasecmp=Module["_wcsncasecmp"]=wasmExports["wcsncasecmp"];_wcscasecmp_l=Module["_wcscasecmp_l"]=wasmExports["wcscasecmp_l"];_wcscat=Module["_wcscat"]=wasmExports["wcscat"];___wcscoll_l=Module["___wcscoll_l"]=wasmExports["__wcscoll_l"];_wcscoll_l=Module["_wcscoll_l"]=wasmExports["wcscoll_l"];_wcscspn=Module["_wcscspn"]=wasmExports["wcscspn"];_wcsdup=Module["_wcsdup"]=wasmExports["wcsdup"];_wmemcpy=Module["_wmemcpy"]=wasmExports["wmemcpy"];___wcsftime_l=Module["___wcsftime_l"]=wasmExports["__wcsftime_l"];_wcstoul=Module["_wcstoul"]=wasmExports["wcstoul"];_wcsftime_l=Module["_wcsftime_l"]=wasmExports["wcsftime_l"];_wcsncasecmp_l=Module["_wcsncasecmp_l"]=wasmExports["wcsncasecmp_l"];_wcsncat=Module["_wcsncat"]=wasmExports["wcsncat"];_wmemset=Module["_wmemset"]=wasmExports["wmemset"];_wcsnrtombs=Module["_wcsnrtombs"]=wasmExports["wcsnrtombs"];_wcspbrk=Module["_wcspbrk"]=wasmExports["wcspbrk"];_wcsspn=Module["_wcsspn"]=wasmExports["wcsspn"];_wcsstr=Module["_wcsstr"]=wasmExports["wcsstr"];_wcstof=Module["_wcstof"]=wasmExports["wcstof"];_wcstod=Module["_wcstod"]=wasmExports["wcstod"];_wcstold=Module["_wcstold"]=wasmExports["wcstold"];_wcstoull=Module["_wcstoull"]=wasmExports["wcstoull"];_wcstoll=Module["_wcstoll"]=wasmExports["wcstoll"];_wcstoimax=Module["_wcstoimax"]=wasmExports["wcstoimax"];_wcstoumax=Module["_wcstoumax"]=wasmExports["wcstoumax"];_wcswcs=Module["_wcswcs"]=wasmExports["wcswcs"];_wcswidth=Module["_wcswidth"]=wasmExports["wcswidth"];_wcwidth=Module["_wcwidth"]=wasmExports["wcwidth"];___wcsxfrm_l=Module["___wcsxfrm_l"]=wasmExports["__wcsxfrm_l"];_wcsxfrm_l=Module["_wcsxfrm_l"]=wasmExports["wcsxfrm_l"];_wctob=Module["_wctob"]=wasmExports["wctob"];_wctrans=Module["_wctrans"]=wasmExports["wctrans"];_towctrans=Module["_towctrans"]=wasmExports["towctrans"];___wctrans_l=Module["___wctrans_l"]=wasmExports["__wctrans_l"];___towctrans_l=Module["___towctrans_l"]=wasmExports["__towctrans_l"];_wctrans_l=Module["_wctrans_l"]=wasmExports["wctrans_l"];_towctrans_l=Module["_towctrans_l"]=wasmExports["towctrans_l"];_wmemmove=Module["_wmemmove"]=wasmExports["wmemmove"];_wprintf=Module["_wprintf"]=wasmExports["wprintf"];_wscanf=Module["_wscanf"]=wasmExports["wscanf"];___isoc99_wscanf=Module["___isoc99_wscanf"]=wasmExports["__isoc99_wscanf"];___libc_realloc=Module["___libc_realloc"]=wasmExports["__libc_realloc"];_realloc_in_place=Module["_realloc_in_place"]=wasmExports["realloc_in_place"];_memalign=Module["_memalign"]=wasmExports["memalign"];_valloc=Module["_valloc"]=wasmExports["valloc"];_pvalloc=Module["_pvalloc"]=wasmExports["pvalloc"];_mallinfo=Module["_mallinfo"]=wasmExports["mallinfo"];_mallopt=Module["_mallopt"]=wasmExports["mallopt"];_malloc_trim=Module["_malloc_trim"]=wasmExports["malloc_trim"];_malloc_usable_size=Module["_malloc_usable_size"]=wasmExports["malloc_usable_size"];_malloc_footprint=Module["_malloc_footprint"]=wasmExports["malloc_footprint"];_malloc_max_footprint=Module["_malloc_max_footprint"]=wasmExports["malloc_max_footprint"];_malloc_footprint_limit=Module["_malloc_footprint_limit"]=wasmExports["malloc_footprint_limit"];_malloc_set_footprint_limit=Module["_malloc_set_footprint_limit"]=wasmExports["malloc_set_footprint_limit"];_independent_calloc=Module["_independent_calloc"]=wasmExports["independent_calloc"];_independent_comalloc=Module["_independent_comalloc"]=wasmExports["independent_comalloc"];_bulk_free=Module["_bulk_free"]=wasmExports["bulk_free"];_emscripten_builtin_realloc=Module["_emscripten_builtin_realloc"]=wasmExports["emscripten_builtin_realloc"];_emscripten_builtin_calloc=Module["_emscripten_builtin_calloc"]=wasmExports["emscripten_builtin_calloc"];_emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=wasmExports["emscripten_get_sbrk_ptr"];__sbrk64=Module["__sbrk64"]=wasmExports["_sbrk64"];_brk=Module["_brk"]=wasmExports["brk"];___trap=Module["___trap"]=wasmExports["__trap"];___absvdi2=Module["___absvdi2"]=wasmExports["__absvdi2"];___absvsi2=Module["___absvsi2"]=wasmExports["__absvsi2"];___absvti2=Module["___absvti2"]=wasmExports["__absvti2"];___adddf3=Module["___adddf3"]=wasmExports["__adddf3"];___fe_getround=Module["___fe_getround"]=wasmExports["__fe_getround"];___fe_raise_inexact=Module["___fe_raise_inexact"]=wasmExports["__fe_raise_inexact"];___addsf3=Module["___addsf3"]=wasmExports["__addsf3"];___ashlti3=Module["___ashlti3"]=wasmExports["__ashlti3"];___lshrti3=Module["___lshrti3"]=wasmExports["__lshrti3"];___addvdi3=Module["___addvdi3"]=wasmExports["__addvdi3"];___addvsi3=Module["___addvsi3"]=wasmExports["__addvsi3"];___addvti3=Module["___addvti3"]=wasmExports["__addvti3"];___ashldi3=Module["___ashldi3"]=wasmExports["__ashldi3"];___ashrdi3=Module["___ashrdi3"]=wasmExports["__ashrdi3"];___ashrti3=Module["___ashrti3"]=wasmExports["__ashrti3"];___atomic_is_lock_free=Module["___atomic_is_lock_free"]=wasmExports["__atomic_is_lock_free"];___atomic_load=Module["___atomic_load"]=wasmExports["__atomic_load"];___atomic_store=Module["___atomic_store"]=wasmExports["__atomic_store"];___atomic_compare_exchange=Module["___atomic_compare_exchange"]=wasmExports["__atomic_compare_exchange"];___atomic_exchange=Module["___atomic_exchange"]=wasmExports["__atomic_exchange"];___atomic_load_1=Module["___atomic_load_1"]=wasmExports["__atomic_load_1"];___atomic_load_2=Module["___atomic_load_2"]=wasmExports["__atomic_load_2"];___atomic_load_4=Module["___atomic_load_4"]=wasmExports["__atomic_load_4"];___atomic_load_8=Module["___atomic_load_8"]=wasmExports["__atomic_load_8"];___atomic_load_16=Module["___atomic_load_16"]=wasmExports["__atomic_load_16"];___atomic_store_1=Module["___atomic_store_1"]=wasmExports["__atomic_store_1"];___atomic_store_2=Module["___atomic_store_2"]=wasmExports["__atomic_store_2"];___atomic_store_4=Module["___atomic_store_4"]=wasmExports["__atomic_store_4"];___atomic_store_8=Module["___atomic_store_8"]=wasmExports["__atomic_store_8"];___atomic_store_16=Module["___atomic_store_16"]=wasmExports["__atomic_store_16"];___atomic_exchange_1=Module["___atomic_exchange_1"]=wasmExports["__atomic_exchange_1"];___atomic_exchange_2=Module["___atomic_exchange_2"]=wasmExports["__atomic_exchange_2"];___atomic_exchange_4=Module["___atomic_exchange_4"]=wasmExports["__atomic_exchange_4"];___atomic_exchange_8=Module["___atomic_exchange_8"]=wasmExports["__atomic_exchange_8"];___atomic_exchange_16=Module["___atomic_exchange_16"]=wasmExports["__atomic_exchange_16"];___atomic_compare_exchange_1=Module["___atomic_compare_exchange_1"]=wasmExports["__atomic_compare_exchange_1"];___atomic_compare_exchange_2=Module["___atomic_compare_exchange_2"]=wasmExports["__atomic_compare_exchange_2"];___atomic_compare_exchange_4=Module["___atomic_compare_exchange_4"]=wasmExports["__atomic_compare_exchange_4"];___atomic_compare_exchange_8=Module["___atomic_compare_exchange_8"]=wasmExports["__atomic_compare_exchange_8"];___atomic_compare_exchange_16=Module["___atomic_compare_exchange_16"]=wasmExports["__atomic_compare_exchange_16"];___atomic_fetch_add_1=Module["___atomic_fetch_add_1"]=wasmExports["__atomic_fetch_add_1"];___atomic_fetch_add_2=Module["___atomic_fetch_add_2"]=wasmExports["__atomic_fetch_add_2"];___atomic_fetch_add_4=Module["___atomic_fetch_add_4"]=wasmExports["__atomic_fetch_add_4"];___atomic_fetch_add_8=Module["___atomic_fetch_add_8"]=wasmExports["__atomic_fetch_add_8"];___atomic_fetch_add_16=Module["___atomic_fetch_add_16"]=wasmExports["__atomic_fetch_add_16"];___atomic_fetch_sub_1=Module["___atomic_fetch_sub_1"]=wasmExports["__atomic_fetch_sub_1"];___atomic_fetch_sub_2=Module["___atomic_fetch_sub_2"]=wasmExports["__atomic_fetch_sub_2"];___atomic_fetch_sub_4=Module["___atomic_fetch_sub_4"]=wasmExports["__atomic_fetch_sub_4"];___atomic_fetch_sub_8=Module["___atomic_fetch_sub_8"]=wasmExports["__atomic_fetch_sub_8"];___atomic_fetch_sub_16=Module["___atomic_fetch_sub_16"]=wasmExports["__atomic_fetch_sub_16"];___atomic_fetch_and_1=Module["___atomic_fetch_and_1"]=wasmExports["__atomic_fetch_and_1"];___atomic_fetch_and_2=Module["___atomic_fetch_and_2"]=wasmExports["__atomic_fetch_and_2"];___atomic_fetch_and_4=Module["___atomic_fetch_and_4"]=wasmExports["__atomic_fetch_and_4"];___atomic_fetch_and_8=Module["___atomic_fetch_and_8"]=wasmExports["__atomic_fetch_and_8"];___atomic_fetch_and_16=Module["___atomic_fetch_and_16"]=wasmExports["__atomic_fetch_and_16"];___atomic_fetch_or_1=Module["___atomic_fetch_or_1"]=wasmExports["__atomic_fetch_or_1"];___atomic_fetch_or_2=Module["___atomic_fetch_or_2"]=wasmExports["__atomic_fetch_or_2"];___atomic_fetch_or_4=Module["___atomic_fetch_or_4"]=wasmExports["__atomic_fetch_or_4"];___atomic_fetch_or_8=Module["___atomic_fetch_or_8"]=wasmExports["__atomic_fetch_or_8"];___atomic_fetch_or_16=Module["___atomic_fetch_or_16"]=wasmExports["__atomic_fetch_or_16"];___atomic_fetch_xor_1=Module["___atomic_fetch_xor_1"]=wasmExports["__atomic_fetch_xor_1"];___atomic_fetch_xor_2=Module["___atomic_fetch_xor_2"]=wasmExports["__atomic_fetch_xor_2"];___atomic_fetch_xor_4=Module["___atomic_fetch_xor_4"]=wasmExports["__atomic_fetch_xor_4"];___atomic_fetch_xor_8=Module["___atomic_fetch_xor_8"]=wasmExports["__atomic_fetch_xor_8"];___atomic_fetch_xor_16=Module["___atomic_fetch_xor_16"]=wasmExports["__atomic_fetch_xor_16"];___atomic_fetch_nand_1=Module["___atomic_fetch_nand_1"]=wasmExports["__atomic_fetch_nand_1"];___atomic_fetch_nand_2=Module["___atomic_fetch_nand_2"]=wasmExports["__atomic_fetch_nand_2"];___atomic_fetch_nand_4=Module["___atomic_fetch_nand_4"]=wasmExports["__atomic_fetch_nand_4"];___atomic_fetch_nand_8=Module["___atomic_fetch_nand_8"]=wasmExports["__atomic_fetch_nand_8"];___atomic_fetch_nand_16=Module["___atomic_fetch_nand_16"]=wasmExports["__atomic_fetch_nand_16"];_atomic_flag_clear=Module["_atomic_flag_clear"]=wasmExports["atomic_flag_clear"];_atomic_flag_clear_explicit=Module["_atomic_flag_clear_explicit"]=wasmExports["atomic_flag_clear_explicit"];_atomic_flag_test_and_set=Module["_atomic_flag_test_and_set"]=wasmExports["atomic_flag_test_and_set"];_atomic_flag_test_and_set_explicit=Module["_atomic_flag_test_and_set_explicit"]=wasmExports["atomic_flag_test_and_set_explicit"];_atomic_signal_fence=Module["_atomic_signal_fence"]=wasmExports["atomic_signal_fence"];_atomic_thread_fence=Module["_atomic_thread_fence"]=wasmExports["atomic_thread_fence"];___bswapdi2=Module["___bswapdi2"]=wasmExports["__bswapdi2"];___bswapsi2=Module["___bswapsi2"]=wasmExports["__bswapsi2"];___clear_cache=Module["___clear_cache"]=wasmExports["__clear_cache"];___clzdi2=Module["___clzdi2"]=wasmExports["__clzdi2"];___clzsi2=Module["___clzsi2"]=wasmExports["__clzsi2"];___clzti2=Module["___clzti2"]=wasmExports["__clzti2"];___cmpdi2=Module["___cmpdi2"]=wasmExports["__cmpdi2"];___cmpti2=Module["___cmpti2"]=wasmExports["__cmpti2"];___ledf2=Module["___ledf2"]=wasmExports["__ledf2"];___gedf2=Module["___gedf2"]=wasmExports["__gedf2"];___unorddf2=Module["___unorddf2"]=wasmExports["__unorddf2"];___eqdf2=Module["___eqdf2"]=wasmExports["__eqdf2"];___ltdf2=Module["___ltdf2"]=wasmExports["__ltdf2"];___nedf2=Module["___nedf2"]=wasmExports["__nedf2"];___gtdf2=Module["___gtdf2"]=wasmExports["__gtdf2"];___lesf2=Module["___lesf2"]=wasmExports["__lesf2"];___gesf2=Module["___gesf2"]=wasmExports["__gesf2"];___unordsf2=Module["___unordsf2"]=wasmExports["__unordsf2"];___eqsf2=Module["___eqsf2"]=wasmExports["__eqsf2"];___ltsf2=Module["___ltsf2"]=wasmExports["__ltsf2"];___nesf2=Module["___nesf2"]=wasmExports["__nesf2"];___gtsf2=Module["___gtsf2"]=wasmExports["__gtsf2"];___ctzdi2=Module["___ctzdi2"]=wasmExports["__ctzdi2"];___ctzsi2=Module["___ctzsi2"]=wasmExports["__ctzsi2"];___ctzti2=Module["___ctzti2"]=wasmExports["__ctzti2"];___divdc3=Module["___divdc3"]=wasmExports["__divdc3"];___divdf3=Module["___divdf3"]=wasmExports["__divdf3"];___divdi3=Module["___divdi3"]=wasmExports["__divdi3"];___udivmoddi4=Module["___udivmoddi4"]=wasmExports["__udivmoddi4"];___divmoddi4=Module["___divmoddi4"]=wasmExports["__divmoddi4"];___divmodsi4=Module["___divmodsi4"]=wasmExports["__divmodsi4"];___udivmodsi4=Module["___udivmodsi4"]=wasmExports["__udivmodsi4"];___divmodti4=Module["___divmodti4"]=wasmExports["__divmodti4"];___udivmodti4=Module["___udivmodti4"]=wasmExports["__udivmodti4"];___divsc3=Module["___divsc3"]=wasmExports["__divsc3"];___divsf3=Module["___divsf3"]=wasmExports["__divsf3"];___divsi3=Module["___divsi3"]=wasmExports["__divsi3"];___divtc3=Module["___divtc3"]=wasmExports["__divtc3"];___divti3=Module["___divti3"]=wasmExports["__divti3"];_setThrew=Module["_setThrew"]=wasmExports["setThrew"];___wasm_setjmp=Module["___wasm_setjmp"]=wasmExports["__wasm_setjmp"];___wasm_setjmp_test=Module["___wasm_setjmp_test"]=wasmExports["__wasm_setjmp_test"];___wasm_longjmp=Module["___wasm_longjmp"]=wasmExports["__wasm_longjmp"];__emscripten_tempret_set=Module["__emscripten_tempret_set"]=wasmExports["_emscripten_tempret_set"];__emscripten_tempret_get=Module["__emscripten_tempret_get"]=wasmExports["_emscripten_tempret_get"];___get_temp_ret=Module["___get_temp_ret"]=wasmExports["__get_temp_ret"];___set_temp_ret=Module["___set_temp_ret"]=wasmExports["__set_temp_ret"];_getTempRet0=Module["_getTempRet0"]=wasmExports["getTempRet0"];_setTempRet0=Module["_setTempRet0"]=wasmExports["setTempRet0"];___emutls_get_address=Module["___emutls_get_address"]=wasmExports["__emutls_get_address"];___enable_execute_stack=Module["___enable_execute_stack"]=wasmExports["__enable_execute_stack"];___extendhfdf2=Module["___extendhfdf2"]=wasmExports["__extendhfdf2"];___extendhfsf2=Module["___extendhfsf2"]=wasmExports["__extendhfsf2"];___gnu_h2f_ieee=Module["___gnu_h2f_ieee"]=wasmExports["__gnu_h2f_ieee"];___extendsfdf2=Module["___extendsfdf2"]=wasmExports["__extendsfdf2"];___ffsdi2=Module["___ffsdi2"]=wasmExports["__ffsdi2"];___ffssi2=Module["___ffssi2"]=wasmExports["__ffssi2"];___ffsti2=Module["___ffsti2"]=wasmExports["__ffsti2"];___fixdfdi=Module["___fixdfdi"]=wasmExports["__fixdfdi"];___fixunsdfdi=Module["___fixunsdfdi"]=wasmExports["__fixunsdfdi"];___fixdfsi=Module["___fixdfsi"]=wasmExports["__fixdfsi"];___fixdfti=Module["___fixdfti"]=wasmExports["__fixdfti"];___fixsfdi=Module["___fixsfdi"]=wasmExports["__fixsfdi"];___fixunssfdi=Module["___fixunssfdi"]=wasmExports["__fixunssfdi"];___fixsfsi=Module["___fixsfsi"]=wasmExports["__fixsfsi"];___fixsfti=Module["___fixsfti"]=wasmExports["__fixsfti"];___fixtfti=Module["___fixtfti"]=wasmExports["__fixtfti"];___fixunsdfsi=Module["___fixunsdfsi"]=wasmExports["__fixunsdfsi"];___fixunsdfti=Module["___fixunsdfti"]=wasmExports["__fixunsdfti"];___fixunssfsi=Module["___fixunssfsi"]=wasmExports["__fixunssfsi"];___fixunssfti=Module["___fixunssfti"]=wasmExports["__fixunssfti"];___fixunstfdi=Module["___fixunstfdi"]=wasmExports["__fixunstfdi"];___fixunstfsi=Module["___fixunstfsi"]=wasmExports["__fixunstfsi"];___fixunstfti=Module["___fixunstfti"]=wasmExports["__fixunstfti"];___floatdidf=Module["___floatdidf"]=wasmExports["__floatdidf"];___floatdisf=Module["___floatdisf"]=wasmExports["__floatdisf"];___floatsidf=Module["___floatsidf"]=wasmExports["__floatsidf"];___floatsisf=Module["___floatsisf"]=wasmExports["__floatsisf"];___floattidf=Module["___floattidf"]=wasmExports["__floattidf"];___floattisf=Module["___floattisf"]=wasmExports["__floattisf"];___floattitf=Module["___floattitf"]=wasmExports["__floattitf"];___floatundidf=Module["___floatundidf"]=wasmExports["__floatundidf"];___floatundisf=Module["___floatundisf"]=wasmExports["__floatundisf"];___floatunditf=Module["___floatunditf"]=wasmExports["__floatunditf"];___floatunsidf=Module["___floatunsidf"]=wasmExports["__floatunsidf"];___floatunsisf=Module["___floatunsisf"]=wasmExports["__floatunsisf"];___floatuntidf=Module["___floatuntidf"]=wasmExports["__floatuntidf"];___floatuntisf=Module["___floatuntisf"]=wasmExports["__floatuntisf"];___floatuntitf=Module["___floatuntitf"]=wasmExports["__floatuntitf"];___lshrdi3=Module["___lshrdi3"]=wasmExports["__lshrdi3"];___moddi3=Module["___moddi3"]=wasmExports["__moddi3"];___modsi3=Module["___modsi3"]=wasmExports["__modsi3"];___modti3=Module["___modti3"]=wasmExports["__modti3"];___muldf3=Module["___muldf3"]=wasmExports["__muldf3"];___muldi3=Module["___muldi3"]=wasmExports["__muldi3"];___mulodi4=Module["___mulodi4"]=wasmExports["__mulodi4"];___mulosi4=Module["___mulosi4"]=wasmExports["__mulosi4"];___muloti4=Module["___muloti4"]=wasmExports["__muloti4"];___udivti3=Module["___udivti3"]=wasmExports["__udivti3"];___mulsf3=Module["___mulsf3"]=wasmExports["__mulsf3"];___mulvdi3=Module["___mulvdi3"]=wasmExports["__mulvdi3"];___mulvsi3=Module["___mulvsi3"]=wasmExports["__mulvsi3"];___mulvti3=Module["___mulvti3"]=wasmExports["__mulvti3"];___negdf2=Module["___negdf2"]=wasmExports["__negdf2"];___negdi2=Module["___negdi2"]=wasmExports["__negdi2"];___negsf2=Module["___negsf2"]=wasmExports["__negsf2"];___negti2=Module["___negti2"]=wasmExports["__negti2"];___negvdi2=Module["___negvdi2"]=wasmExports["__negvdi2"];___negvsi2=Module["___negvsi2"]=wasmExports["__negvsi2"];___negvti2=Module["___negvti2"]=wasmExports["__negvti2"];___paritydi2=Module["___paritydi2"]=wasmExports["__paritydi2"];___paritysi2=Module["___paritysi2"]=wasmExports["__paritysi2"];___parityti2=Module["___parityti2"]=wasmExports["__parityti2"];___popcountdi2=Module["___popcountdi2"]=wasmExports["__popcountdi2"];___popcountsi2=Module["___popcountsi2"]=wasmExports["__popcountsi2"];___popcountti2=Module["___popcountti2"]=wasmExports["__popcountti2"];___powidf2=Module["___powidf2"]=wasmExports["__powidf2"];___powisf2=Module["___powisf2"]=wasmExports["__powisf2"];___powitf2=Module["___powitf2"]=wasmExports["__powitf2"];_emscripten_stack_init=Module["_emscripten_stack_init"]=wasmExports["emscripten_stack_init"];_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=wasmExports["emscripten_stack_set_limits"];_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=wasmExports["emscripten_stack_get_free"];__emscripten_stack_restore=Module["__emscripten_stack_restore"]=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=Module["__emscripten_stack_alloc"]=wasmExports["_emscripten_stack_alloc"];___subdf3=Module["___subdf3"]=wasmExports["__subdf3"];___subsf3=Module["___subsf3"]=wasmExports["__subsf3"];___subvdi3=Module["___subvdi3"]=wasmExports["__subvdi3"];___subvsi3=Module["___subvsi3"]=wasmExports["__subvsi3"];___subvti3=Module["___subvti3"]=wasmExports["__subvti3"];___truncdfhf2=Module["___truncdfhf2"]=wasmExports["__truncdfhf2"];___truncdfsf2=Module["___truncdfsf2"]=wasmExports["__truncdfsf2"];___truncsfhf2=Module["___truncsfhf2"]=wasmExports["__truncsfhf2"];___gnu_f2h_ieee=Module["___gnu_f2h_ieee"]=wasmExports["__gnu_f2h_ieee"];___ucmpdi2=Module["___ucmpdi2"]=wasmExports["__ucmpdi2"];___ucmpti2=Module["___ucmpti2"]=wasmExports["__ucmpti2"];___udivdi3=Module["___udivdi3"]=wasmExports["__udivdi3"];___udivsi3=Module["___udivsi3"]=wasmExports["__udivsi3"];___umoddi3=Module["___umoddi3"]=wasmExports["__umoddi3"];___umodsi3=Module["___umodsi3"]=wasmExports["__umodsi3"];___umodti3=Module["___umodti3"]=wasmExports["__umodti3"];___cxa_begin_catch=Module["___cxa_begin_catch"]=wasmExports["__cxa_begin_catch"];___cxa_rethrow=Module["___cxa_rethrow"]=wasmExports["__cxa_rethrow"];___cxa_end_catch=Module["___cxa_end_catch"]=wasmExports["__cxa_end_catch"];___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["__cxa_allocate_exception"];___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["__cxa_free_exception"];___cxa_throw=Module["___cxa_throw"]=wasmExports["__cxa_throw"];___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["__cxa_pure_virtual"];___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["__cxa_uncaught_exceptions"];___cxa_decrement_exception_refcount=Module["___cxa_decrement_exception_refcount"]=wasmExports["__cxa_decrement_exception_refcount"];___cxa_increment_exception_refcount=Module["___cxa_increment_exception_refcount"]=wasmExports["__cxa_increment_exception_refcount"];___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["__cxa_current_primary_exception"];___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["__cxa_rethrow_primary_exception"];___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["__cxa_init_primary_exception"];___dynamic_cast=Module["___dynamic_cast"]=wasmExports["__dynamic_cast"];___cxa_bad_cast=Module["___cxa_bad_cast"]=wasmExports["__cxa_bad_cast"];___cxa_bad_typeid=Module["___cxa_bad_typeid"]=wasmExports["__cxa_bad_typeid"];___cxa_throw_bad_array_new_length=Module["___cxa_throw_bad_array_new_length"]=wasmExports["__cxa_throw_bad_array_new_length"];___cxa_get_globals_fast=Module["___cxa_get_globals_fast"]=wasmExports["__cxa_get_globals_fast"];___cxa_demangle=Module["___cxa_demangle"]=wasmExports["__cxa_demangle"];___cxa_allocate_dependent_exception=Module["___cxa_allocate_dependent_exception"]=wasmExports["__cxa_allocate_dependent_exception"];___cxa_free_dependent_exception=Module["___cxa_free_dependent_exception"]=wasmExports["__cxa_free_dependent_exception"];___cxa_get_globals=Module["___cxa_get_globals"]=wasmExports["__cxa_get_globals"];__Unwind_RaiseException=Module["__Unwind_RaiseException"]=wasmExports["_Unwind_RaiseException"];___cxa_get_exception_ptr=Module["___cxa_get_exception_ptr"]=wasmExports["__cxa_get_exception_ptr"];__Unwind_DeleteException=Module["__Unwind_DeleteException"]=wasmExports["_Unwind_DeleteException"];___cxa_call_terminate=Module["___cxa_call_terminate"]=wasmExports["__cxa_call_terminate"];___cxa_current_exception_type=Module["___cxa_current_exception_type"]=wasmExports["__cxa_current_exception_type"];___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["__cxa_uncaught_exception"];___thrown_object_from_unwind_exception=Module["___thrown_object_from_unwind_exception"]=wasmExports["__thrown_object_from_unwind_exception"];___get_exception_message=Module["___get_exception_message"]=wasmExports["__get_exception_message"];___get_exception_terminate_message=Module["___get_exception_terminate_message"]=wasmExports["__get_exception_terminate_message"];___cxa_guard_acquire=Module["___cxa_guard_acquire"]=wasmExports["__cxa_guard_acquire"];___cxa_guard_release=Module["___cxa_guard_release"]=wasmExports["__cxa_guard_release"];___cxa_guard_abort=Module["___cxa_guard_abort"]=wasmExports["__cxa_guard_abort"];___gxx_personality_wasm0=Module["___gxx_personality_wasm0"]=wasmExports["__gxx_personality_wasm0"];__Unwind_GetLanguageSpecificData=Module["__Unwind_GetLanguageSpecificData"]=wasmExports["_Unwind_GetLanguageSpecificData"];__Unwind_GetIP=Module["__Unwind_GetIP"]=wasmExports["_Unwind_GetIP"];__Unwind_GetRegionStart=Module["__Unwind_GetRegionStart"]=wasmExports["_Unwind_GetRegionStart"];__Unwind_SetGR=Module["__Unwind_SetGR"]=wasmExports["_Unwind_SetGR"];__Unwind_SetIP=Module["__Unwind_SetIP"]=wasmExports["_Unwind_SetIP"];___cxa_call_unexpected=Module["___cxa_call_unexpected"]=wasmExports["__cxa_call_unexpected"];___cxa_thread_atexit=Module["___cxa_thread_atexit"]=wasmExports["__cxa_thread_atexit"];___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["__cxa_deleted_virtual"];__Unwind_CallPersonality=Module["__Unwind_CallPersonality"]=wasmExports["_Unwind_CallPersonality"];_gethostbyaddr_r=Module["_gethostbyaddr_r"]=wasmExports["gethostbyaddr_r"];_gethostbyname2=Module["_gethostbyname2"]=wasmExports["gethostbyname2"];_gethostbyname2_r=Module["_gethostbyname2_r"]=wasmExports["gethostbyname2_r"];_gethostbyname_r=Module["_gethostbyname_r"]=wasmExports["gethostbyname_r"];_socketpair=Module["_socketpair"]=wasmExports["socketpair"];memory=Module["memory"]=wasmMemory=wasmExports["memory"];___stack_pointer=Module["___stack_pointer"]=wasmExports["__stack_pointer"];_py_docstring_mod=Module["_py_docstring_mod"]=wasmExports["py_docstring_mod"].value>>>0;_PyExc_AttributeError=Module["_PyExc_AttributeError"]=wasmExports["PyExc_AttributeError"].value>>>0;_stdout=Module["_stdout"]=wasmExports["stdout"].value>>>0;_Jsr_error=Module["_Jsr_error"]=wasmExports["Jsr_error"].value>>>0;_PyExc_ModuleNotFoundError=Module["_PyExc_ModuleNotFoundError"]=wasmExports["PyExc_ModuleNotFoundError"].value>>>0;__Py_NoneStruct=Module["__Py_NoneStruct"]=wasmExports["_Py_NoneStruct"].value>>>0;_internal_error=Module["_internal_error"]=wasmExports["internal_error"].value>>>0;_conversion_error=Module["_conversion_error"]=wasmExports["conversion_error"].value>>>0;__indirect_function_table=Module["__indirect_function_table"]=wasmTable=Module["wasmTable"]=wasmExports["__indirect_function_table"];_PyExc_ImportError=Module["_PyExc_ImportError"]=wasmExports["PyExc_ImportError"].value>>>0;_pyodide_export_=Module["_pyodide_export_"]=wasmExports["pyodide_export_"].value>>>0;_pystate_keepalive_=Module["_pystate_keepalive_"]=wasmExports["pystate_keepalive_"].value>>>0;_pystate_keepalive=Module["_pystate_keepalive"]=wasmExports["pystate_keepalive"].value>>>0;_compat_null_to_none=Module["_compat_null_to_none"]=wasmExports["compat_null_to_none"].value>>>0;_py_jsnull=Module["_py_jsnull"]=wasmExports["py_jsnull"].value>>>0;__Py_TrueStruct=Module["__Py_TrueStruct"]=wasmExports["_Py_TrueStruct"].value>>>0;__Py_FalseStruct=Module["__Py_FalseStruct"]=wasmExports["_Py_FalseStruct"].value>>>0;_py_JsBigInt=Module["_py_JsBigInt"]=wasmExports["py_JsBigInt"].value>>>0;_Jsr_undefined=Module["_Jsr_undefined"]=wasmExports["Jsr_undefined"].value>>>0;_jsbind=Module["_jsbind"]=wasmExports["jsbind"].value>>>0;_PyExc_TypeError=Module["_PyExc_TypeError"]=wasmExports["PyExc_TypeError"].value>>>0;_PyExc_StopIteration=Module["_PyExc_StopIteration"]=wasmExports["PyExc_StopIteration"].value>>>0;_PyTraceBack_Type=Module["_PyTraceBack_Type"]=wasmExports["PyTraceBack_Type"].value>>>0;_PyExc_GeneratorExit=Module["_PyExc_GeneratorExit"]=wasmExports["PyExc_GeneratorExit"].value>>>0;_PyExc_StopAsyncIteration=Module["_PyExc_StopAsyncIteration"]=wasmExports["PyExc_StopAsyncIteration"].value>>>0;_PyExc_RuntimeError=Module["_PyExc_RuntimeError"]=wasmExports["PyExc_RuntimeError"].value>>>0;_PyExc_IndexError=Module["_PyExc_IndexError"]=wasmExports["PyExc_IndexError"].value>>>0;_PyExc_Exception=Module["_PyExc_Exception"]=wasmExports["PyExc_Exception"].value>>>0;_PyExc_BaseException=Module["_PyExc_BaseException"]=wasmExports["PyExc_BaseException"].value>>>0;_methods=Module["_methods"]=wasmExports["methods"].value>>>0;_PyExc_SystemError=Module["_PyExc_SystemError"]=wasmExports["PyExc_SystemError"].value>>>0;_PyExc_KeyError=Module["_PyExc_KeyError"]=wasmExports["PyExc_KeyError"].value>>>0;_PySlice_Type=Module["_PySlice_Type"]=wasmExports["PySlice_Type"].value>>>0;_PyLong_Type=Module["_PyLong_Type"]=wasmExports["PyLong_Type"].value>>>0;_PyBool_Type=Module["_PyBool_Type"]=wasmExports["PyBool_Type"].value>>>0;_PyExc_ValueError=Module["_PyExc_ValueError"]=wasmExports["PyExc_ValueError"].value>>>0;_PyExc_NotImplementedError=Module["_PyExc_NotImplementedError"]=wasmExports["PyExc_NotImplementedError"].value>>>0;_PyBaseObject_Type=Module["_PyBaseObject_Type"]=wasmExports["PyBaseObject_Type"].value>>>0;_PyExc_OverflowError=Module["_PyExc_OverflowError"]=wasmExports["PyExc_OverflowError"].value>>>0;_PyList_Type=Module["_PyList_Type"]=wasmExports["PyList_Type"].value>>>0;_PyTuple_Type=Module["_PyTuple_Type"]=wasmExports["PyTuple_Type"].value>>>0;_PyExc_RuntimeWarning=Module["_PyExc_RuntimeWarning"]=wasmExports["PyExc_RuntimeWarning"].value>>>0;__Py_NotImplementedStruct=Module["__Py_NotImplementedStruct"]=wasmExports["_Py_NotImplementedStruct"].value>>>0;_default_signature=Module["_default_signature"]=wasmExports["default_signature"].value>>>0;_no_default=Module["_no_default"]=wasmExports["no_default"].value>>>0;_PyCoro_Type=Module["_PyCoro_Type"]=wasmExports["PyCoro_Type"].value>>>0;_PyGen_Type=Module["_PyGen_Type"]=wasmExports["PyGen_Type"].value>>>0;_PyDict_Type=Module["_PyDict_Type"]=wasmExports["PyDict_Type"].value>>>0;_compat_to_string_repr=Module["_compat_to_string_repr"]=wasmExports["compat_to_string_repr"].value>>>0;_PyMethod_Type=Module["_PyMethod_Type"]=wasmExports["PyMethod_Type"].value>>>0;_PyFunction_Type=Module["_PyFunction_Type"]=wasmExports["PyFunction_Type"].value>>>0;_py_buffer_len_offset=Module["_py_buffer_len_offset"]=wasmExports["py_buffer_len_offset"].value>>>0;_py_buffer_shape_offset=Module["_py_buffer_shape_offset"]=wasmExports["py_buffer_shape_offset"].value>>>0;_Jsr_true=Module["_Jsr_true"]=wasmExports["Jsr_true"].value>>>0;_Jsr_false=Module["_Jsr_false"]=wasmExports["Jsr_false"].value>>>0;_Jsr_novalue=Module["_Jsr_novalue"]=wasmExports["Jsr_novalue"].value>>>0;_PySet_Type=Module["_PySet_Type"]=wasmExports["PySet_Type"].value>>>0;_PyFloat_Type=Module["_PyFloat_Type"]=wasmExports["PyFloat_Type"].value>>>0;_compat_dict_to_literalmap=Module["_compat_dict_to_literalmap"]=wasmExports["compat_dict_to_literalmap"].value>>>0;_stderr=Module["_stderr"]=wasmExports["stderr"].value>>>0;__PyParser_TokenNames=Module["__PyParser_TokenNames"]=wasmExports["_PyParser_TokenNames"].value>>>0;_PyExc_SyntaxError=Module["_PyExc_SyntaxError"]=wasmExports["PyExc_SyntaxError"].value>>>0;__PyExc_IncompleteInputError=Module["__PyExc_IncompleteInputError"]=wasmExports["_PyExc_IncompleteInputError"].value>>>0;_PyExc_LookupError=Module["_PyExc_LookupError"]=wasmExports["PyExc_LookupError"].value>>>0;_PyExc_UnicodeDecodeError=Module["_PyExc_UnicodeDecodeError"]=wasmExports["PyExc_UnicodeDecodeError"].value>>>0;__PyRuntime=Module["__PyRuntime"]=wasmExports["_PyRuntime"].value>>>0;_PyExc_IndentationError=Module["_PyExc_IndentationError"]=wasmExports["PyExc_IndentationError"].value>>>0;_PyExc_KeyboardInterrupt=Module["_PyExc_KeyboardInterrupt"]=wasmExports["PyExc_KeyboardInterrupt"].value>>>0;_PyExc_TabError=Module["_PyExc_TabError"]=wasmExports["PyExc_TabError"].value>>>0;_PyExc_UnicodeError=Module["_PyExc_UnicodeError"]=wasmExports["PyExc_UnicodeError"].value>>>0;_stdin=Module["_stdin"]=wasmExports["stdin"].value>>>0;_PyExc_MemoryError=Module["_PyExc_MemoryError"]=wasmExports["PyExc_MemoryError"].value>>>0;_PyComplex_Type=Module["_PyComplex_Type"]=wasmExports["PyComplex_Type"].value>>>0;_PyUnicode_Type=Module["_PyUnicode_Type"]=wasmExports["PyUnicode_Type"].value>>>0;_PyBytes_Type=Module["_PyBytes_Type"]=wasmExports["PyBytes_Type"].value>>>0;__Py_EllipsisObject=Module["__Py_EllipsisObject"]=wasmExports["_Py_EllipsisObject"].value>>>0;__Py_ctype_table=Module["__Py_ctype_table"]=wasmExports["_Py_ctype_table"].value>>>0;_PyExc_DeprecationWarning=Module["_PyExc_DeprecationWarning"]=wasmExports["PyExc_DeprecationWarning"].value>>>0;_PyExc_SyntaxWarning=Module["_PyExc_SyntaxWarning"]=wasmExports["PyExc_SyntaxWarning"].value>>>0;__Py_ctype_tolower=Module["__Py_ctype_tolower"]=wasmExports["_Py_ctype_tolower"].value>>>0;_PyExc_OSError=Module["_PyExc_OSError"]=wasmExports["PyExc_OSError"].value>>>0;__PyOS_ReadlineTState=Module["__PyOS_ReadlineTState"]=wasmExports["_PyOS_ReadlineTState"].value>>>0;_PyOS_InputHook=Module["_PyOS_InputHook"]=wasmExports["PyOS_InputHook"].value>>>0;_PyOS_ReadlineFunctionPointer=Module["_PyOS_ReadlineFunctionPointer"]=wasmExports["PyOS_ReadlineFunctionPointer"].value>>>0;_PyType_Type=Module["_PyType_Type"]=wasmExports["PyType_Type"].value>>>0;_PyExc_BufferError=Module["_PyExc_BufferError"]=wasmExports["PyExc_BufferError"].value>>>0;_PyByteArray_Type=Module["_PyByteArray_Type"]=wasmExports["PyByteArray_Type"].value>>>0;__PyByteArray_empty_string=Module["__PyByteArray_empty_string"]=wasmExports["_PyByteArray_empty_string"].value>>>0;__PyUnion_Type=Module["__PyUnion_Type"]=wasmExports["_PyUnion_Type"].value>>>0;__Py_ctype_toupper=Module["__Py_ctype_toupper"]=wasmExports["_Py_ctype_toupper"].value>>>0;_Py_hexdigits=Module["_Py_hexdigits"]=wasmExports["Py_hexdigits"].value>>>0;_PyExc_BytesWarning=Module["_PyExc_BytesWarning"]=wasmExports["PyExc_BytesWarning"].value>>>0;_PyByteArrayIter_Type=Module["_PyByteArrayIter_Type"]=wasmExports["PyByteArrayIter_Type"].value>>>0;__PyLong_DigitValue=Module["__PyLong_DigitValue"]=wasmExports["_PyLong_DigitValue"].value>>>0;_PyBytesIter_Type=Module["_PyBytesIter_Type"]=wasmExports["PyBytesIter_Type"].value>>>0;_PyModule_Type=Module["_PyModule_Type"]=wasmExports["PyModule_Type"].value>>>0;_PyCapsule_Type=Module["_PyCapsule_Type"]=wasmExports["PyCapsule_Type"].value>>>0;_PyCell_Type=Module["_PyCell_Type"]=wasmExports["PyCell_Type"].value>>>0;_PyInstanceMethod_Type=Module["_PyInstanceMethod_Type"]=wasmExports["PyInstanceMethod_Type"].value>>>0;_PyCode_Type=Module["_PyCode_Type"]=wasmExports["PyCode_Type"].value>>>0;_PyFrozenSet_Type=Module["_PyFrozenSet_Type"]=wasmExports["PyFrozenSet_Type"].value>>>0;_PyExc_ZeroDivisionError=Module["_PyExc_ZeroDivisionError"]=wasmExports["PyExc_ZeroDivisionError"].value>>>0;_PyMethodDescr_Type=Module["_PyMethodDescr_Type"]=wasmExports["PyMethodDescr_Type"].value>>>0;_PyClassMethodDescr_Type=Module["_PyClassMethodDescr_Type"]=wasmExports["PyClassMethodDescr_Type"].value>>>0;_PyMemberDescr_Type=Module["_PyMemberDescr_Type"]=wasmExports["PyMemberDescr_Type"].value>>>0;_PyGetSetDescr_Type=Module["_PyGetSetDescr_Type"]=wasmExports["PyGetSetDescr_Type"].value>>>0;_PyWrapperDescr_Type=Module["_PyWrapperDescr_Type"]=wasmExports["PyWrapperDescr_Type"].value>>>0;_PyDictProxy_Type=Module["_PyDictProxy_Type"]=wasmExports["PyDictProxy_Type"].value>>>0;_PyProperty_Type=Module["_PyProperty_Type"]=wasmExports["PyProperty_Type"].value>>>0;_PyReversed_Type=Module["_PyReversed_Type"]=wasmExports["PyReversed_Type"].value>>>0;_PyEnum_Type=Module["_PyEnum_Type"]=wasmExports["PyEnum_Type"].value>>>0;_PyExc_BaseExceptionGroup=Module["_PyExc_BaseExceptionGroup"]=wasmExports["PyExc_BaseExceptionGroup"].value>>>0;_PyExc_UnicodeTranslateError=Module["_PyExc_UnicodeTranslateError"]=wasmExports["PyExc_UnicodeTranslateError"].value>>>0;_PyExc_BlockingIOError=Module["_PyExc_BlockingIOError"]=wasmExports["PyExc_BlockingIOError"].value>>>0;_PyExc_BrokenPipeError=Module["_PyExc_BrokenPipeError"]=wasmExports["PyExc_BrokenPipeError"].value>>>0;_PyExc_ChildProcessError=Module["_PyExc_ChildProcessError"]=wasmExports["PyExc_ChildProcessError"].value>>>0;_PyExc_ConnectionAbortedError=Module["_PyExc_ConnectionAbortedError"]=wasmExports["PyExc_ConnectionAbortedError"].value>>>0;_PyExc_ConnectionRefusedError=Module["_PyExc_ConnectionRefusedError"]=wasmExports["PyExc_ConnectionRefusedError"].value>>>0;_PyExc_ConnectionResetError=Module["_PyExc_ConnectionResetError"]=wasmExports["PyExc_ConnectionResetError"].value>>>0;_PyExc_FileExistsError=Module["_PyExc_FileExistsError"]=wasmExports["PyExc_FileExistsError"].value>>>0;_PyExc_FileNotFoundError=Module["_PyExc_FileNotFoundError"]=wasmExports["PyExc_FileNotFoundError"].value>>>0;_PyExc_IsADirectoryError=Module["_PyExc_IsADirectoryError"]=wasmExports["PyExc_IsADirectoryError"].value>>>0;_PyExc_NotADirectoryError=Module["_PyExc_NotADirectoryError"]=wasmExports["PyExc_NotADirectoryError"].value>>>0;_PyExc_InterruptedError=Module["_PyExc_InterruptedError"]=wasmExports["PyExc_InterruptedError"].value>>>0;_PyExc_PermissionError=Module["_PyExc_PermissionError"]=wasmExports["PyExc_PermissionError"].value>>>0;_PyExc_ProcessLookupError=Module["_PyExc_ProcessLookupError"]=wasmExports["PyExc_ProcessLookupError"].value>>>0;_PyExc_TimeoutError=Module["_PyExc_TimeoutError"]=wasmExports["PyExc_TimeoutError"].value>>>0;_PyExc_EnvironmentError=Module["_PyExc_EnvironmentError"]=wasmExports["PyExc_EnvironmentError"].value>>>0;_PyExc_IOError=Module["_PyExc_IOError"]=wasmExports["PyExc_IOError"].value>>>0;_PyExc_SystemExit=Module["_PyExc_SystemExit"]=wasmExports["PyExc_SystemExit"].value>>>0;_PyExc_ConnectionError=Module["_PyExc_ConnectionError"]=wasmExports["PyExc_ConnectionError"].value>>>0;_PyExc_EOFError=Module["_PyExc_EOFError"]=wasmExports["PyExc_EOFError"].value>>>0;_PyExc_RecursionError=Module["_PyExc_RecursionError"]=wasmExports["PyExc_RecursionError"].value>>>0;_PyExc_PythonFinalizationError=Module["_PyExc_PythonFinalizationError"]=wasmExports["PyExc_PythonFinalizationError"].value>>>0;_PyExc_NameError=Module["_PyExc_NameError"]=wasmExports["PyExc_NameError"].value>>>0;_PyExc_UnboundLocalError=Module["_PyExc_UnboundLocalError"]=wasmExports["PyExc_UnboundLocalError"].value>>>0;_PyExc_UnicodeEncodeError=Module["_PyExc_UnicodeEncodeError"]=wasmExports["PyExc_UnicodeEncodeError"].value>>>0;_PyExc_AssertionError=Module["_PyExc_AssertionError"]=wasmExports["PyExc_AssertionError"].value>>>0;_PyExc_ArithmeticError=Module["_PyExc_ArithmeticError"]=wasmExports["PyExc_ArithmeticError"].value>>>0;_PyExc_FloatingPointError=Module["_PyExc_FloatingPointError"]=wasmExports["PyExc_FloatingPointError"].value>>>0;_PyExc_ReferenceError=Module["_PyExc_ReferenceError"]=wasmExports["PyExc_ReferenceError"].value>>>0;_PyExc_Warning=Module["_PyExc_Warning"]=wasmExports["PyExc_Warning"].value>>>0;_PyExc_UserWarning=Module["_PyExc_UserWarning"]=wasmExports["PyExc_UserWarning"].value>>>0;_PyExc_PendingDeprecationWarning=Module["_PyExc_PendingDeprecationWarning"]=wasmExports["PyExc_PendingDeprecationWarning"].value>>>0;_PyExc_FutureWarning=Module["_PyExc_FutureWarning"]=wasmExports["PyExc_FutureWarning"].value>>>0;_PyExc_ImportWarning=Module["_PyExc_ImportWarning"]=wasmExports["PyExc_ImportWarning"].value>>>0;_PyExc_UnicodeWarning=Module["_PyExc_UnicodeWarning"]=wasmExports["PyExc_UnicodeWarning"].value>>>0;_PyExc_EncodingWarning=Module["_PyExc_EncodingWarning"]=wasmExports["PyExc_EncodingWarning"].value>>>0;_PyExc_ResourceWarning=Module["_PyExc_ResourceWarning"]=wasmExports["PyExc_ResourceWarning"].value>>>0;_Py_GenericAliasType=Module["_Py_GenericAliasType"]=wasmExports["Py_GenericAliasType"].value>>>0;_PyAsyncGen_Type=Module["_PyAsyncGen_Type"]=wasmExports["PyAsyncGen_Type"].value>>>0;__PyAsyncGenASend_Type=Module["__PyAsyncGenASend_Type"]=wasmExports["_PyAsyncGenASend_Type"].value>>>0;_PyStdPrinter_Type=Module["_PyStdPrinter_Type"]=wasmExports["PyStdPrinter_Type"].value>>>0;__Py_SwappedOp=Module["__Py_SwappedOp"]=wasmExports["_Py_SwappedOp"].value>>>0;_PyFrameLocalsProxy_Type=Module["_PyFrameLocalsProxy_Type"]=wasmExports["PyFrameLocalsProxy_Type"].value>>>0;_PyFrame_Type=Module["_PyFrame_Type"]=wasmExports["PyFrame_Type"].value>>>0;_PyClassMethod_Type=Module["_PyClassMethod_Type"]=wasmExports["PyClassMethod_Type"].value>>>0;_PyStaticMethod_Type=Module["_PyStaticMethod_Type"]=wasmExports["PyStaticMethod_Type"].value>>>0;_PySeqIter_Type=Module["_PySeqIter_Type"]=wasmExports["PySeqIter_Type"].value>>>0;_PyCallIter_Type=Module["_PyCallIter_Type"]=wasmExports["PyCallIter_Type"].value>>>0;_PyDictKeys_Type=Module["_PyDictKeys_Type"]=wasmExports["PyDictKeys_Type"].value>>>0;_PyDictValues_Type=Module["_PyDictValues_Type"]=wasmExports["PyDictValues_Type"].value>>>0;_PyDictItems_Type=Module["_PyDictItems_Type"]=wasmExports["PyDictItems_Type"].value>>>0;_PyListIter_Type=Module["_PyListIter_Type"]=wasmExports["PyListIter_Type"].value>>>0;_PyListRevIter_Type=Module["_PyListRevIter_Type"]=wasmExports["PyListRevIter_Type"].value>>>0;_PyDictIterKey_Type=Module["_PyDictIterKey_Type"]=wasmExports["PyDictIterKey_Type"].value>>>0;_PyDictRevIterKey_Type=Module["_PyDictRevIterKey_Type"]=wasmExports["PyDictRevIterKey_Type"].value>>>0;_PyDictRevIterValue_Type=Module["_PyDictRevIterValue_Type"]=wasmExports["PyDictRevIterValue_Type"].value>>>0;_PyDictIterItem_Type=Module["_PyDictIterItem_Type"]=wasmExports["PyDictIterItem_Type"].value>>>0;_PyDictIterValue_Type=Module["_PyDictIterValue_Type"]=wasmExports["PyDictIterValue_Type"].value>>>0;_PyDictRevIterItem_Type=Module["_PyDictRevIterItem_Type"]=wasmExports["PyDictRevIterItem_Type"].value>>>0;_PyODict_Type=Module["_PyODict_Type"]=wasmExports["PyODict_Type"].value>>>0;_PyODictIter_Type=Module["_PyODictIter_Type"]=wasmExports["PyODictIter_Type"].value>>>0;_PyODictKeys_Type=Module["_PyODictKeys_Type"]=wasmExports["PyODictKeys_Type"].value>>>0;_PyODictValues_Type=Module["_PyODictValues_Type"]=wasmExports["PyODictValues_Type"].value>>>0;_PyODictItems_Type=Module["_PyODictItems_Type"]=wasmExports["PyODictItems_Type"].value>>>0;_PyMemoryView_Type=Module["_PyMemoryView_Type"]=wasmExports["PyMemoryView_Type"].value>>>0;_PyCMethod_Type=Module["_PyCMethod_Type"]=wasmExports["PyCMethod_Type"].value>>>0;_PyCFunction_Type=Module["_PyCFunction_Type"]=wasmExports["PyCFunction_Type"].value>>>0;_PyModuleDef_Type=Module["_PyModuleDef_Type"]=wasmExports["PyModuleDef_Type"].value>>>0;__PyNone_Type=Module["__PyNone_Type"]=wasmExports["_PyNone_Type"].value>>>0;__PyNotImplemented_Type=Module["__PyNotImplemented_Type"]=wasmExports["_PyNotImplemented_Type"].value>>>0;_PyContextToken_Type=Module["_PyContextToken_Type"]=wasmExports["PyContextToken_Type"].value>>>0;_PyContextVar_Type=Module["_PyContextVar_Type"]=wasmExports["PyContextVar_Type"].value>>>0;_PyContext_Type=Module["_PyContext_Type"]=wasmExports["PyContext_Type"].value>>>0;_PyEllipsis_Type=Module["_PyEllipsis_Type"]=wasmExports["PyEllipsis_Type"].value>>>0;_PyFilter_Type=Module["_PyFilter_Type"]=wasmExports["PyFilter_Type"].value>>>0;_PyLongRangeIter_Type=Module["_PyLongRangeIter_Type"]=wasmExports["PyLongRangeIter_Type"].value>>>0;_PyMap_Type=Module["_PyMap_Type"]=wasmExports["PyMap_Type"].value>>>0;_PyPickleBuffer_Type=Module["_PyPickleBuffer_Type"]=wasmExports["PyPickleBuffer_Type"].value>>>0;_PyRangeIter_Type=Module["_PyRangeIter_Type"]=wasmExports["PyRangeIter_Type"].value>>>0;_PyRange_Type=Module["_PyRange_Type"]=wasmExports["PyRange_Type"].value>>>0;_PySetIter_Type=Module["_PySetIter_Type"]=wasmExports["PySetIter_Type"].value>>>0;_PySuper_Type=Module["_PySuper_Type"]=wasmExports["PySuper_Type"].value>>>0;_PyTupleIter_Type=Module["_PyTupleIter_Type"]=wasmExports["PyTupleIter_Type"].value>>>0;_PyUnicodeIter_Type=Module["_PyUnicodeIter_Type"]=wasmExports["PyUnicodeIter_Type"].value>>>0;_PyZip_Type=Module["_PyZip_Type"]=wasmExports["PyZip_Type"].value>>>0;__PyWeakref_CallableProxyType=Module["__PyWeakref_CallableProxyType"]=wasmExports["_PyWeakref_CallableProxyType"].value>>>0;__PyWeakref_ProxyType=Module["__PyWeakref_ProxyType"]=wasmExports["_PyWeakref_ProxyType"].value>>>0;__PyWeakref_RefType=Module["__PyWeakref_RefType"]=wasmExports["_PyWeakref_RefType"].value>>>0;__PySet_Dummy=Module["__PySet_Dummy"]=wasmExports["_PySet_Dummy"].value>>>0;_PyStructSequence_UnnamedField=Module["_PyStructSequence_UnnamedField"]=wasmExports["PyStructSequence_UnnamedField"].value>>>0;__Py_ascii_whitespace=Module["__Py_ascii_whitespace"]=wasmExports["_Py_ascii_whitespace"].value>>>0;__Py_InitCleanup=Module["__Py_InitCleanup"]=wasmExports["_Py_InitCleanup"].value>>>0;__PyEval_BinaryOps=Module["__PyEval_BinaryOps"]=wasmExports["_PyEval_BinaryOps"].value>>>0;__PyIntrinsics_UnaryFunctions=Module["__PyIntrinsics_UnaryFunctions"]=wasmExports["_PyIntrinsics_UnaryFunctions"].value>>>0;__PyIntrinsics_BinaryFunctions=Module["__PyIntrinsics_BinaryFunctions"]=wasmExports["_PyIntrinsics_BinaryFunctions"].value>>>0;__PyEval_ConversionFuncs=Module["__PyEval_ConversionFuncs"]=wasmExports["_PyEval_ConversionFuncs"].value>>>0;__Py_SpecialMethods=Module["__Py_SpecialMethods"]=wasmExports["_Py_SpecialMethods"].value>>>0;__Py_emscripten_signal_clock=Module["__Py_emscripten_signal_clock"]=wasmExports["_Py_emscripten_signal_clock"].value>>>0;_Py_EMSCRIPTEN_SIGNAL_HANDLING=Module["_Py_EMSCRIPTEN_SIGNAL_HANDLING"]=wasmExports["Py_EMSCRIPTEN_SIGNAL_HANDLING"].value>>>0;__Py_FunctionAttributeOffsets=Module["__Py_FunctionAttributeOffsets"]=wasmExports["_Py_FunctionAttributeOffsets"].value>>>0;_PyExc_InterpreterError=Module["_PyExc_InterpreterError"]=wasmExports["PyExc_InterpreterError"].value>>>0;_PyExc_InterpreterNotFoundError=Module["_PyExc_InterpreterNotFoundError"]=wasmExports["PyExc_InterpreterNotFoundError"].value>>>0;_PyUnstable_ExecutableKinds=Module["_PyUnstable_ExecutableKinds"]=wasmExports["PyUnstable_ExecutableKinds"].value>>>0;_Py_Version=Module["_Py_Version"]=wasmExports["Py_Version"].value>>>0;_PyImport_Inittab=Module["_PyImport_Inittab"]=wasmExports["PyImport_Inittab"].value>>>0;__PyImport_FrozenBootstrap=Module["__PyImport_FrozenBootstrap"]=wasmExports["_PyImport_FrozenBootstrap"].value>>>0;_PyImport_FrozenModules=Module["_PyImport_FrozenModules"]=wasmExports["PyImport_FrozenModules"].value>>>0;__PyImport_FrozenStdlib=Module["__PyImport_FrozenStdlib"]=wasmExports["_PyImport_FrozenStdlib"].value>>>0;__PyImport_FrozenTest=Module["__PyImport_FrozenTest"]=wasmExports["_PyImport_FrozenTest"].value>>>0;_Py_IgnoreEnvironmentFlag=Module["_Py_IgnoreEnvironmentFlag"]=wasmExports["Py_IgnoreEnvironmentFlag"].value>>>0;_Py_IsolatedFlag=Module["_Py_IsolatedFlag"]=wasmExports["Py_IsolatedFlag"].value>>>0;_Py_BytesWarningFlag=Module["_Py_BytesWarningFlag"]=wasmExports["Py_BytesWarningFlag"].value>>>0;_Py_InspectFlag=Module["_Py_InspectFlag"]=wasmExports["Py_InspectFlag"].value>>>0;_Py_InteractiveFlag=Module["_Py_InteractiveFlag"]=wasmExports["Py_InteractiveFlag"].value>>>0;_Py_OptimizeFlag=Module["_Py_OptimizeFlag"]=wasmExports["Py_OptimizeFlag"].value>>>0;_Py_DebugFlag=Module["_Py_DebugFlag"]=wasmExports["Py_DebugFlag"].value>>>0;_Py_VerboseFlag=Module["_Py_VerboseFlag"]=wasmExports["Py_VerboseFlag"].value>>>0;_Py_QuietFlag=Module["_Py_QuietFlag"]=wasmExports["Py_QuietFlag"].value>>>0;_Py_FrozenFlag=Module["_Py_FrozenFlag"]=wasmExports["Py_FrozenFlag"].value>>>0;_Py_UnbufferedStdioFlag=Module["_Py_UnbufferedStdioFlag"]=wasmExports["Py_UnbufferedStdioFlag"].value>>>0;_Py_NoSiteFlag=Module["_Py_NoSiteFlag"]=wasmExports["Py_NoSiteFlag"].value>>>0;_Py_DontWriteBytecodeFlag=Module["_Py_DontWriteBytecodeFlag"]=wasmExports["Py_DontWriteBytecodeFlag"].value>>>0;_Py_NoUserSiteDirectory=Module["_Py_NoUserSiteDirectory"]=wasmExports["Py_NoUserSiteDirectory"].value>>>0;_Py_HashRandomizationFlag=Module["_Py_HashRandomizationFlag"]=wasmExports["Py_HashRandomizationFlag"].value>>>0;_Py_FileSystemDefaultEncoding=Module["_Py_FileSystemDefaultEncoding"]=wasmExports["Py_FileSystemDefaultEncoding"].value>>>0;_Py_HasFileSystemDefaultEncoding=Module["_Py_HasFileSystemDefaultEncoding"]=wasmExports["Py_HasFileSystemDefaultEncoding"].value>>>0;_Py_FileSystemDefaultEncodeErrors=Module["_Py_FileSystemDefaultEncodeErrors"]=wasmExports["Py_FileSystemDefaultEncodeErrors"].value>>>0;_Py_UTF8Mode=Module["_Py_UTF8Mode"]=wasmExports["Py_UTF8Mode"].value>>>0;__Py_HashSecret=Module["__Py_HashSecret"]=wasmExports["_Py_HashSecret"].value>>>0;_PY_TIMEOUT_MAX=Module["_PY_TIMEOUT_MAX"]=wasmExports["PY_TIMEOUT_MAX"].value>>>0;__Py_emscripten_signal_in_memory=Module["__Py_emscripten_signal_in_memory"]=wasmExports["_Py_emscripten_signal_in_memory"].value>>>0;__PyEM_EMSCRIPTEN_TRAMPOLINE_OFFSET=Module["__PyEM_EMSCRIPTEN_TRAMPOLINE_OFFSET"]=wasmExports["_PyEM_EMSCRIPTEN_TRAMPOLINE_OFFSET"].value>>>0;_ffi_type_pointer=Module["_ffi_type_pointer"]=wasmExports["ffi_type_pointer"].value>>>0;_ffi_type_void=Module["_ffi_type_void"]=wasmExports["ffi_type_void"].value>>>0;_ffi_type_sint32=Module["_ffi_type_sint32"]=wasmExports["ffi_type_sint32"].value>>>0;_ffi_type_uint64=Module["_ffi_type_uint64"]=wasmExports["ffi_type_uint64"].value>>>0;_ffi_type_sint64=Module["_ffi_type_sint64"]=wasmExports["ffi_type_sint64"].value>>>0;_ffi_type_uint32=Module["_ffi_type_uint32"]=wasmExports["ffi_type_uint32"].value>>>0;_ffi_type_uint16=Module["_ffi_type_uint16"]=wasmExports["ffi_type_uint16"].value>>>0;_ffi_type_sint16=Module["_ffi_type_sint16"]=wasmExports["ffi_type_sint16"].value>>>0;_ffi_type_uint8=Module["_ffi_type_uint8"]=wasmExports["ffi_type_uint8"].value>>>0;_ffi_type_sint8=Module["_ffi_type_sint8"]=wasmExports["ffi_type_sint8"].value>>>0;_ffi_type_double=Module["_ffi_type_double"]=wasmExports["ffi_type_double"].value>>>0;_ffi_type_longdouble=Module["_ffi_type_longdouble"]=wasmExports["ffi_type_longdouble"].value>>>0;_ffi_type_float=Module["_ffi_type_float"]=wasmExports["ffi_type_float"].value>>>0;_environ=Module["_environ"]=wasmExports["environ"].value>>>0;_sqlite3_version=Module["_sqlite3_version"]=wasmExports["sqlite3_version"].value>>>0;_sqlite3_data_directory=Module["_sqlite3_data_directory"]=wasmExports["sqlite3_data_directory"].value>>>0;_sqlite3_temp_directory=Module["_sqlite3_temp_directory"]=wasmExports["sqlite3_temp_directory"].value>>>0;_sqlite3one=Module["_sqlite3one"]=wasmExports["sqlite3one"].value>>>0;_g_debuglevel=Module["_g_debuglevel"]=wasmExports["g_debuglevel"].value>>>0;_g_ZSTD_threading_useless_symbol=Module["_g_ZSTD_threading_useless_symbol"]=wasmExports["g_ZSTD_threading_useless_symbol"].value>>>0;__deduplicate_map=Module["__deduplicate_map"]=wasmExports["_deduplicate_map"].value>>>0;_BZ2_crc32Table=Module["_BZ2_crc32Table"]=wasmExports["BZ2_crc32Table"].value>>>0;_BZ2_rNums=Module["_BZ2_rNums"]=wasmExports["BZ2_rNums"].value>>>0;_z_errmsg=Module["_z_errmsg"]=wasmExports["z_errmsg"].value>>>0;__length_code=Module["__length_code"]=wasmExports["_length_code"].value>>>0;__dist_code=Module["__dist_code"]=wasmExports["_dist_code"].value>>>0;_deflate_copyright=Module["_deflate_copyright"]=wasmExports["deflate_copyright"].value>>>0;_inflate_copyright=Module["_inflate_copyright"]=wasmExports["inflate_copyright"].value>>>0;___environ=Module["___environ"]=wasmExports["__environ"].value>>>0;____environ=Module["____environ"]=wasmExports["___environ"].value>>>0;__environ=Module["__environ"]=wasmExports["_environ"].value>>>0;___stack_chk_guard=Module["___stack_chk_guard"]=wasmExports["__stack_chk_guard"].value>>>0;___tzname=Module["___tzname"]=wasmExports["__tzname"].value>>>0;_daylight=Module["_daylight"]=wasmExports["daylight"].value>>>0;_timezone=Module["_timezone"]=wasmExports["timezone"].value>>>0;___timezone=Module["___timezone"]=wasmExports["__timezone"].value>>>0;___daylight=Module["___daylight"]=wasmExports["__daylight"].value>>>0;_tzname=Module["_tzname"]=wasmExports["tzname"].value>>>0;___progname=Module["___progname"]=wasmExports["__progname"].value>>>0;___optreset=Module["___optreset"]=wasmExports["__optreset"].value>>>0;_optind=Module["_optind"]=wasmExports["optind"].value>>>0;___optpos=Module["___optpos"]=wasmExports["__optpos"].value>>>0;_optarg=Module["_optarg"]=wasmExports["optarg"].value>>>0;_optopt=Module["_optopt"]=wasmExports["optopt"].value>>>0;_opterr=Module["_opterr"]=wasmExports["opterr"].value>>>0;_optreset=Module["_optreset"]=wasmExports["optreset"].value>>>0;_h_errno=Module["_h_errno"]=wasmExports["h_errno"].value>>>0;___signgam=Module["___signgam"]=wasmExports["__signgam"].value>>>0;__ns_flagdata=Module["__ns_flagdata"]=wasmExports["_ns_flagdata"].value>>>0;___progname_full=Module["___progname_full"]=wasmExports["__progname_full"].value>>>0;_program_invocation_short_name=Module["_program_invocation_short_name"]=wasmExports["program_invocation_short_name"].value>>>0;_program_invocation_name=Module["_program_invocation_name"]=wasmExports["program_invocation_name"].value>>>0;___stack_low=Module["___stack_low"]=wasmExports["__stack_low"].value>>>0;___stack_high=Module["___stack_high"]=wasmExports["__stack_high"].value>>>0;___sig_pending=Module["___sig_pending"]=wasmExports["__sig_pending"].value>>>0;___sig_actions=Module["___sig_actions"]=wasmExports["__sig_actions"].value>>>0;_signgam=Module["_signgam"]=wasmExports["signgam"].value>>>0;___heap_base=Module["___heap_base"]=wasmExports["__heap_base"].value>>>0;___c_longjmp=Module["___c_longjmp"]=wasmExports["__c_longjmp"];___THREW__=Module["___THREW__"]=wasmExports["__THREW__"].value>>>0;___threwValue=Module["___threwValue"]=wasmExports["__threwValue"].value>>>0;___cpp_exception=Module["___cpp_exception"]=wasmExports["__cpp_exception"];___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=wasmExports["__cxa_unexpected_handler"].value>>>0;___cxa_terminate_handler=Module["___cxa_terminate_handler"]=wasmExports["__cxa_terminate_handler"].value>>>0;___cxa_new_handler=Module["___cxa_new_handler"]=wasmExports["__cxa_new_handler"].value>>>0;___wasm_lpad_context=Module["___wasm_lpad_context"]=wasmExports["__wasm_lpad_context"].value>>>0;_in6addr_any=Module["_in6addr_any"]=wasmExports["in6addr_any"].value>>>0;_in6addr_loopback=Module["_in6addr_loopback"]=wasmExports["in6addr_loopback"].value>>>0}var wasmImports={IMG_Init:_IMG_Init,IMG_Load:_IMG_Load,IMG_Load_RW:_IMG_Load_RW,IMG_Quit:_IMG_Quit,JsArray_count_js,JsArray_index_js,JsArray_inplace_repeat_js,JsArray_repeat_js,JsArray_reverse_js,JsArray_reversed_iterator,JsBuffer_DecodeString_js,JsBuffer_get_info,JsDoubleProxy_unwrap_js,JsException_new_helper,JsMap_GetIter_js,JsMap_clear_js,JsModule_GetAll_js,JsObjMap_GetIter_js,JsObjMap_ass_subscript_js,JsObjMap_contains_js,JsObjMap_length_js,JsObjMap_subscript_js,JsProxy_Bool_js,JsProxy_DelAttr_js,JsProxy_Dir_js,JsProxy_GetAsyncIter_js,JsProxy_GetAttr_js,JsProxy_GetIter_js,JsProxy_SetAttr_js,JsProxy_aexit_js,JsProxy_compute_typeflags,JsProxy_exit_js,JsProxy_subscript_js,JsProxy_to_weakref_js,JsvArray_Check,JsvArray_Delete,JsvArray_Extend,JsvArray_Get,JsvArray_Insert,JsvArray_New,JsvArray_Push,JsvArray_Set,JsvArray_ShallowCopy,JsvArray_slice,JsvArray_slice_assign,JsvAsyncGenerator_Check,JsvBigInt_fromDigits,JsvBigInt_fromInt,JsvBuffer_assignFromPtr,JsvBuffer_assignToPtr,JsvBuffer_intoFile,JsvBuffer_readFromFile,JsvBuffer_writeToFile,JsvError_Check:_JsvError_Check,JsvError_Throw,JsvFunction_CallBound,JsvFunction_Call_OneArg,JsvFunction_Check,JsvFunction_Construct,JsvGenerator_Check,JsvLiteralMap_New,JsvMap_New,JsvMap_Set,JsvNoValue_Check,JsvNum_fromDouble,JsvNum_fromInt,JsvNum_toInt,JsvObject_CallMethod,JsvObject_CallMethod_NoArgs,JsvObject_CallMethod_OneArg,JsvObject_CallMethod_TwoArgs,JsvObject_Entries,JsvObject_Keys,JsvObject_New,JsvObject_SetAttr,JsvObject_Values,JsvObject_toString,JsvPromise_Check,JsvPromise_Resolve,JsvPromise_Syncify_handleError,JsvSet_Add,JsvSet_New,JsvUTF8ToString,Jsv_BigIntToNum,Jsv_GetError_import:_Jsv_GetError_import,Jsv_constructorName,Jsv_equal,Jsv_greater_than,Jsv_greater_than_equal,Jsv_less_than,Jsv_less_than_equal,Jsv_not_equal,Jsv_to_bool,Jsv_typeof,Mix_AllocateChannels:_Mix_AllocateChannels,Mix_ChannelFinished:_Mix_ChannelFinished,Mix_CloseAudio:_Mix_CloseAudio,Mix_FadeInChannelTimed:_Mix_FadeInChannelTimed,Mix_FadeInMusicPos:_Mix_FadeInMusicPos,Mix_FadeOutChannel:_Mix_FadeOutChannel,Mix_FadeOutMusic:_Mix_FadeOutMusic,Mix_FadingChannel:_Mix_FadingChannel,Mix_FreeChunk:_Mix_FreeChunk,Mix_FreeMusic:_Mix_FreeMusic,Mix_HaltChannel:_Mix_HaltChannel,Mix_HaltMusic:_Mix_HaltMusic,Mix_HookMusicFinished:_Mix_HookMusicFinished,Mix_Init:_Mix_Init,Mix_Linked_Version:_Mix_Linked_Version,Mix_LoadMUS:_Mix_LoadMUS,Mix_LoadMUS_RW:_Mix_LoadMUS_RW,Mix_LoadWAV:_Mix_LoadWAV,Mix_LoadWAV_RW:_Mix_LoadWAV_RW,Mix_OpenAudio:_Mix_OpenAudio,Mix_Pause:_Mix_Pause,Mix_PauseMusic:_Mix_PauseMusic,Mix_Paused:_Mix_Paused,Mix_PausedMusic:_Mix_PausedMusic,Mix_PlayChannelTimed:_Mix_PlayChannelTimed,Mix_PlayMusic:_Mix_PlayMusic,Mix_Playing:_Mix_Playing,Mix_PlayingMusic:_Mix_PlayingMusic,Mix_QuerySpec:_Mix_QuerySpec,Mix_QuickLoad_RAW:_Mix_QuickLoad_RAW,Mix_Quit:_Mix_Quit,Mix_ReserveChannels:_Mix_ReserveChannels,Mix_Resume:_Mix_Resume,Mix_ResumeMusic:_Mix_ResumeMusic,Mix_SetPanning:_Mix_SetPanning,Mix_SetPosition:_Mix_SetPosition,Mix_SetPostMix:_Mix_SetPostMix,Mix_Volume:_Mix_Volume,Mix_VolumeChunk:_Mix_VolumeChunk,Mix_VolumeMusic:_Mix_VolumeMusic,SDL_AddTimer:_SDL_AddTimer,SDL_AllocRW:_SDL_AllocRW,SDL_AudioDriverName:_SDL_AudioDriverName,SDL_AudioQuit:_SDL_AudioQuit,SDL_ClearError:_SDL_ClearError,SDL_CloseAudio:_SDL_CloseAudio,SDL_CondBroadcast:_SDL_CondBroadcast,SDL_CondSignal:_SDL_CondSignal,SDL_CondWait:_SDL_CondWait,SDL_CondWaitTimeout:_SDL_CondWaitTimeout,SDL_ConvertSurface:_SDL_ConvertSurface,SDL_CreateCond:_SDL_CreateCond,SDL_CreateMutex:_SDL_CreateMutex,SDL_CreateRGBSurface:_SDL_CreateRGBSurface,SDL_CreateRGBSurfaceFrom:_SDL_CreateRGBSurfaceFrom,SDL_CreateThread:_SDL_CreateThread,SDL_Delay:_SDL_Delay,SDL_DestroyCond:_SDL_DestroyCond,SDL_DestroyMutex:_SDL_DestroyMutex,SDL_DestroyRenderer:_SDL_DestroyRenderer,SDL_DestroyWindow:_SDL_DestroyWindow,SDL_DisplayFormat:_SDL_DisplayFormat,SDL_DisplayFormatAlpha:_SDL_DisplayFormatAlpha,SDL_EnableKeyRepeat:_SDL_EnableKeyRepeat,SDL_EnableUNICODE:_SDL_EnableUNICODE,SDL_FillRect:_SDL_FillRect,SDL_Flip:_SDL_Flip,SDL_FreeRW:_SDL_FreeRW,SDL_FreeSurface:_SDL_FreeSurface,SDL_GL_DeleteContext:_SDL_GL_DeleteContext,SDL_GL_ExtensionSupported:_SDL_GL_ExtensionSupported,SDL_GL_GetAttribute:_SDL_GL_GetAttribute,SDL_GL_GetSwapInterval:_SDL_GL_GetSwapInterval,SDL_GL_MakeCurrent:_SDL_GL_MakeCurrent,SDL_GL_SetAttribute:_SDL_GL_SetAttribute,SDL_GL_SetSwapInterval:_SDL_GL_SetSwapInterval,SDL_GL_SwapBuffers:_SDL_GL_SwapBuffers,SDL_GL_SwapWindow:_SDL_GL_SwapWindow,SDL_GetAppState:_SDL_GetAppState,SDL_GetAudioDriver:_SDL_GetAudioDriver,SDL_GetClipRect:_SDL_GetClipRect,SDL_GetCurrentAudioDriver:_SDL_GetCurrentAudioDriver,SDL_GetError:_SDL_GetError,SDL_GetKeyName:_SDL_GetKeyName,SDL_GetKeyState:_SDL_GetKeyState,SDL_GetKeyboardState:_SDL_GetKeyboardState,SDL_GetModState:_SDL_GetModState,SDL_GetMouseState:_SDL_GetMouseState,SDL_GetNumAudioDrivers:_SDL_GetNumAudioDrivers,SDL_GetRGB:_SDL_GetRGB,SDL_GetRGBA:_SDL_GetRGBA,SDL_GetScancodeFromKey:_SDL_GetScancodeFromKey,SDL_GetThreadID:_SDL_GetThreadID,SDL_GetTicks:_SDL_GetTicks,SDL_GetVideoInfo:_SDL_GetVideoInfo,SDL_GetVideoSurface:_SDL_GetVideoSurface,SDL_GetWindowFlags:_SDL_GetWindowFlags,SDL_GetWindowSize:_SDL_GetWindowSize,SDL_Has3DNow:_SDL_Has3DNow,SDL_Has3DNowExt:_SDL_Has3DNowExt,SDL_HasAltiVec:_SDL_HasAltiVec,SDL_HasMMX:_SDL_HasMMX,SDL_HasMMXExt:_SDL_HasMMXExt,SDL_HasRDTSC:_SDL_HasRDTSC,SDL_HasSSE:_SDL_HasSSE,SDL_HasSSE2:_SDL_HasSSE2,SDL_Init:_SDL_Init,SDL_InitSubSystem:_SDL_InitSubSystem,SDL_JoystickClose:_SDL_JoystickClose,SDL_JoystickEventState:_SDL_JoystickEventState,SDL_JoystickGetAxis:_SDL_JoystickGetAxis,SDL_JoystickGetBall:_SDL_JoystickGetBall,SDL_JoystickGetButton:_SDL_JoystickGetButton,SDL_JoystickGetHat:_SDL_JoystickGetHat,SDL_JoystickIndex:_SDL_JoystickIndex,SDL_JoystickName:_SDL_JoystickName,SDL_JoystickNumAxes:_SDL_JoystickNumAxes,SDL_JoystickNumBalls:_SDL_JoystickNumBalls,SDL_JoystickNumButtons:_SDL_JoystickNumButtons,SDL_JoystickNumHats:_SDL_JoystickNumHats,SDL_JoystickOpen:_SDL_JoystickOpen,SDL_JoystickOpened:_SDL_JoystickOpened,SDL_JoystickUpdate:_SDL_JoystickUpdate,SDL_Linked_Version:_SDL_Linked_Version,SDL_ListModes:_SDL_ListModes,SDL_LoadBMP_RW:_SDL_LoadBMP_RW,SDL_LockAudio:_SDL_LockAudio,SDL_LockSurface:_SDL_LockSurface,SDL_LogSetOutputFunction:_SDL_LogSetOutputFunction,SDL_LowerBlit:_SDL_LowerBlit,SDL_LowerBlitScaled:_SDL_LowerBlitScaled,SDL_MapRGB:_SDL_MapRGB,SDL_MapRGBA:_SDL_MapRGBA,SDL_NumJoysticks:_SDL_NumJoysticks,SDL_OpenAudio:_SDL_OpenAudio,SDL_PauseAudio:_SDL_PauseAudio,SDL_PeepEvents:_SDL_PeepEvents,SDL_PollEvent:_SDL_PollEvent,SDL_PumpEvents:_SDL_PumpEvents,SDL_PushEvent:_SDL_PushEvent,SDL_Quit:_SDL_Quit,SDL_QuitSubSystem:_SDL_QuitSubSystem,SDL_RWFromConstMem:_SDL_RWFromConstMem,SDL_RWFromFile:_SDL_RWFromFile,SDL_RWFromMem:_SDL_RWFromMem,SDL_RemoveTimer:_SDL_RemoveTimer,SDL_SaveBMP_RW:_SDL_SaveBMP_RW,SDL_SetAlpha:_SDL_SetAlpha,SDL_SetClipRect:_SDL_SetClipRect,SDL_SetColorKey:_SDL_SetColorKey,SDL_SetColors:_SDL_SetColors,SDL_SetError:_SDL_SetError,SDL_SetGamma:_SDL_SetGamma,SDL_SetGammaRamp:_SDL_SetGammaRamp,SDL_SetPalette:_SDL_SetPalette,SDL_SetVideoMode:_SDL_SetVideoMode,SDL_SetWindowFullscreen:_SDL_SetWindowFullscreen,SDL_SetWindowTitle:_SDL_SetWindowTitle,SDL_ShowCursor:_SDL_ShowCursor,SDL_StartTextInput:_SDL_StartTextInput,SDL_StopTextInput:_SDL_StopTextInput,SDL_ThreadID:_SDL_ThreadID,SDL_UnlockAudio:_SDL_UnlockAudio,SDL_UnlockSurface:_SDL_UnlockSurface,SDL_UpdateRect:_SDL_UpdateRect,SDL_UpdateRects:_SDL_UpdateRects,SDL_UpperBlit:_SDL_UpperBlit,SDL_UpperBlitScaled:_SDL_UpperBlitScaled,SDL_VideoDriverName:_SDL_VideoDriverName,SDL_VideoModeOK:_SDL_VideoModeOK,SDL_VideoQuit:_SDL_VideoQuit,SDL_WM_GrabInput:_SDL_WM_GrabInput,SDL_WM_IconifyWindow:_SDL_WM_IconifyWindow,SDL_WM_SetCaption:_SDL_WM_SetCaption,SDL_WM_SetIcon:_SDL_WM_SetIcon,SDL_WM_ToggleFullScreen:_SDL_WM_ToggleFullScreen,SDL_WaitThread:_SDL_WaitThread,SDL_WarpMouse:_SDL_WarpMouse,SDL_WasInit:_SDL_WasInit,SDL_mutexP:_SDL_mutexP,SDL_mutexV:_SDL_mutexV,TTF_CloseFont:_TTF_CloseFont,TTF_FontAscent:_TTF_FontAscent,TTF_FontDescent:_TTF_FontDescent,TTF_FontHeight:_TTF_FontHeight,TTF_FontLineSkip:_TTF_FontLineSkip,TTF_GlyphMetrics:_TTF_GlyphMetrics,TTF_Init:_TTF_Init,TTF_OpenFont:_TTF_OpenFont,TTF_Quit:_TTF_Quit,TTF_RenderText_Blended:_TTF_RenderText_Blended,TTF_RenderText_Shaded:_TTF_RenderText_Shaded,TTF_RenderText_Solid:_TTF_RenderText_Solid,TTF_RenderUTF8_Solid:_TTF_RenderUTF8_Solid,TTF_SizeText:_TTF_SizeText,TTF_SizeUTF8:_TTF_SizeUTF8,_JsArray_PostProcess_helper,_JsArray_PushEntry_helper,_JsObject_Set_js,_PyEM_TrampolineCall_JS,_Py_CheckEmscriptenSignals_Helper,_Py_emscripten_runtime,_Unwind_Backtrace:__Unwind_Backtrace,_Unwind_FindEnclosingFunction:__Unwind_FindEnclosingFunction,_Unwind_GetIPInfo:__Unwind_GetIPInfo,__asctime_r:___asctime_r,__assert_fail:___assert_fail,__call_sighandler:___call_sighandler,__hiwire_deduplicate_delete,__hiwire_deduplicate_get,__hiwire_deduplicate_new,__hiwire_deduplicate_set,__syscall_accept4:___syscall_accept4,__syscall_bind:___syscall_bind,__syscall_chdir:___syscall_chdir,__syscall_chmod:___syscall_chmod,__syscall_connect:___syscall_connect,__syscall_dup:___syscall_dup,__syscall_dup3:___syscall_dup3,__syscall_faccessat:___syscall_faccessat,__syscall_fadvise64:___syscall_fadvise64,__syscall_fallocate:___syscall_fallocate,__syscall_fchdir:___syscall_fchdir,__syscall_fchmod:___syscall_fchmod,__syscall_fchmodat2:___syscall_fchmodat2,__syscall_fchown32:___syscall_fchown32,__syscall_fchownat:___syscall_fchownat,__syscall_fcntl64:___syscall_fcntl64,__syscall_fdatasync:___syscall_fdatasync,__syscall_fstat64:___syscall_fstat64,__syscall_fstatfs64:___syscall_fstatfs64,__syscall_ftruncate64:___syscall_ftruncate64,__syscall_getcwd:___syscall_getcwd,__syscall_getdents64:___syscall_getdents64,__syscall_getpeername:___syscall_getpeername,__syscall_getsockname:___syscall_getsockname,__syscall_getsockopt:___syscall_getsockopt,__syscall_getuid32_js,__syscall_ioctl:___syscall_ioctl,__syscall_listen:___syscall_listen,__syscall_lstat64:___syscall_lstat64,__syscall_mkdirat:___syscall_mkdirat,__syscall_mknodat:___syscall_mknodat,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_pipe:___syscall_pipe,__syscall_poll:___syscall_poll,__syscall_readlinkat:___syscall_readlinkat,__syscall_recvfrom:___syscall_recvfrom,__syscall_recvmsg:___syscall_recvmsg,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_sendmsg:___syscall_sendmsg,__syscall_sendto:___syscall_sendto,__syscall_socket:___syscall_socket,__syscall_stat64:___syscall_stat64,__syscall_statfs64:___syscall_statfs64,__syscall_symlinkat:___syscall_symlinkat,__syscall_truncate64:___syscall_truncate64,__syscall_umask_js,__syscall_unlinkat:___syscall_unlinkat,__syscall_utimensat:___syscall_utimensat,_abort_js:__abort_js,_agen_handle_result_js,_dlopen_js:__dlopen_js,_dlsym_catchup_js:__dlsym_catchup_js,_dlsym_js:__dlsym_js,_emscripten_dlopen_js:__emscripten_dlopen_js,_emscripten_fs_load_embedded_files:__emscripten_fs_load_embedded_files,_emscripten_get_last_devicemotion_event:__emscripten_get_last_devicemotion_event,_emscripten_get_last_deviceorientation_event:__emscripten_get_last_deviceorientation_event,_emscripten_get_last_mouse_event:__emscripten_get_last_mouse_event,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_emscripten_get_progname:__emscripten_get_progname,_emscripten_log_formatted:__emscripten_log_formatted,_emscripten_lookup_name:__emscripten_lookup_name,_emscripten_push_main_loop_blocker:__emscripten_push_main_loop_blocker,_emscripten_push_uncounted_main_loop_blocker:__emscripten_push_uncounted_main_loop_blocker,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_emscripten_system:__emscripten_system,_glGetActiveAttribOrUniform:__glGetActiveAttribOrUniform,_gmtime_js:__gmtime_js,_localtime_js:__localtime_js,_maybe_connect_async,_maybe_poll_async,_maybe_recvfrom_async,_maybe_sendto_async,_mktime_js:__mktime_js,_mmap_js:__mmap_js,_msync_js:__msync_js,_munmap_js:__munmap_js,_pyproxyGen_make_result,_pyproxy_get_buffer_result,_python2js_add_to_cache,_python2js_addto_postprocess_list,_python2js_ascii,_python2js_buffer_inner,_python2js_cache_lookup,_python2js_handle_postprocess_list,_python2js_ucs1,_python2js_ucs2,_python2js_ucs4,_setitimer_js:__setitimer_js,_timegm_js:__timegm_js,_try_fcntl64,_try_shutdown,_tzset_js:__tzset_js,array_to_js,boxColor:_boxColor,boxRGBA:_boxRGBA,can_run_sync_js,capture_stderr,clock_res_get:_clock_res_get,clock_time_get:_clock_time_get,create_once_callable,create_promise_handles,destroy_jsarray_entries,destroy_proxies,destroy_proxies_js,destroy_proxy,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetConfigs:_eglGetConfigs,eglGetCurrentContext:_eglGetCurrentContext,eglGetCurrentDisplay:_eglGetCurrentDisplay,eglGetCurrentSurface:_eglGetCurrentSurface,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryAPI:_eglQueryAPI,eglQueryContext:_eglQueryContext,eglQueryString:_eglQueryString,eglQuerySurface:_eglQuerySurface,eglReleaseThread:_eglReleaseThread,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitClient:_eglWaitClient,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,ellipseColor:_ellipseColor,ellipseRGBA:_ellipseRGBA,emscripten_SDL_SetEventHandler:_emscripten_SDL_SetEventHandler,emscripten_asm_const_async_on_main_thread:_emscripten_asm_const_async_on_main_thread,emscripten_asm_const_double:_emscripten_asm_const_double,emscripten_asm_const_double_sync_on_main_thread:_emscripten_asm_const_double_sync_on_main_thread,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_asm_const_ptr:_emscripten_asm_const_ptr,emscripten_asm_const_ptr_sync_on_main_thread:_emscripten_asm_const_ptr_sync_on_main_thread,emscripten_async_call:_emscripten_async_call,emscripten_async_load_script:_emscripten_async_load_script,emscripten_async_run_script:_emscripten_async_run_script,emscripten_async_wget:_emscripten_async_wget,emscripten_async_wget2:_emscripten_async_wget2,emscripten_async_wget2_abort:_emscripten_async_wget2_abort,emscripten_async_wget2_data:_emscripten_async_wget2_data,emscripten_async_wget_data:_emscripten_async_wget_data,emscripten_call_worker:_emscripten_call_worker,emscripten_cancel_animation_frame:_emscripten_cancel_animation_frame,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_clear_immediate:_emscripten_clear_immediate,emscripten_clear_interval:_emscripten_clear_interval,emscripten_clear_timeout:_emscripten_clear_timeout,emscripten_console_error:_emscripten_console_error,emscripten_console_log:_emscripten_console_log,emscripten_console_trace:_emscripten_console_trace,emscripten_console_warn:_emscripten_console_warn,emscripten_create_worker:_emscripten_create_worker,emscripten_date_now:_emscripten_date_now,emscripten_debugger:_emscripten_debugger,emscripten_destroy_worker:_emscripten_destroy_worker,emscripten_enter_soft_fullscreen:_emscripten_enter_soft_fullscreen,emscripten_err:_emscripten_err,emscripten_errn:_emscripten_errn,emscripten_exit_fullscreen:_emscripten_exit_fullscreen,emscripten_exit_pointerlock:_emscripten_exit_pointerlock,emscripten_exit_soft_fullscreen:_emscripten_exit_soft_fullscreen,emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,emscripten_force_exit:_emscripten_force_exit,emscripten_get_battery_status:_emscripten_get_battery_status,emscripten_get_callstack:_emscripten_get_callstack,emscripten_get_canvas_element_size:_emscripten_get_canvas_element_size,emscripten_get_canvas_size:_emscripten_get_canvas_size,emscripten_get_compiler_setting:_emscripten_get_compiler_setting,emscripten_get_device_pixel_ratio:_emscripten_get_device_pixel_ratio,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_get_fullscreen_status:_emscripten_get_fullscreen_status,emscripten_get_gamepad_status:_emscripten_get_gamepad_status,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_main_loop_timing:_emscripten_get_main_loop_timing,emscripten_get_now:_emscripten_get_now,emscripten_get_now_res:_emscripten_get_now_res,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_orientation_status:_emscripten_get_orientation_status,emscripten_get_pointerlock_status:_emscripten_get_pointerlock_status,emscripten_get_preloaded_image_data:_emscripten_get_preloaded_image_data,emscripten_get_preloaded_image_data_from_FILE:_emscripten_get_preloaded_image_data_from_FILE,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_get_visibility_status:_emscripten_get_visibility_status,emscripten_get_window_title:_emscripten_get_window_title,emscripten_get_worker_queue_size:_emscripten_get_worker_queue_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBegin:_emscripten_glBegin,emscripten_glBeginQuery:_emscripten_glBeginQuery,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBeginTransformFeedback:_emscripten_glBeginTransformFeedback,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindBufferBase:_emscripten_glBindBufferBase,emscripten_glBindBufferRange:_emscripten_glBindBufferRange,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindSampler:_emscripten_glBindSampler,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindTransformFeedback:_emscripten_glBindTransformFeedback,emscripten_glBindVertexArray:_emscripten_glBindVertexArray,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBlitFramebuffer:_emscripten_glBlitFramebuffer,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearBufferfi:_emscripten_glClearBufferfi,emscripten_glClearBufferfv:_emscripten_glClearBufferfv,emscripten_glClearBufferiv:_emscripten_glClearBufferiv,emscripten_glClearBufferuiv:_emscripten_glClearBufferuiv,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepth:_emscripten_glClearDepth,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glClientWaitSync:_emscripten_glClientWaitSync,emscripten_glClipControlEXT:_emscripten_glClipControlEXT,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexImage3D:_emscripten_glCompressedTexImage3D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCompressedTexSubImage3D:_emscripten_glCompressedTexSubImage3D,emscripten_glCopyBufferSubData:_emscripten_glCopyBufferSubData,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCopyTexSubImage3D:_emscripten_glCopyTexSubImage3D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueries:_emscripten_glDeleteQueries,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteSamplers:_emscripten_glDeleteSamplers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteSync:_emscripten_glDeleteSync,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteTransformFeedbacks:_emscripten_glDeleteTransformFeedbacks,emscripten_glDeleteVertexArrays:_emscripten_glDeleteVertexArrays,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRange:_emscripten_glDepthRange,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstanced:_emscripten_glDrawArraysInstanced,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawArraysInstancedARB:_emscripten_glDrawArraysInstancedARB,emscripten_glDrawArraysInstancedBaseInstance:_emscripten_glDrawArraysInstancedBaseInstance,emscripten_glDrawArraysInstancedBaseInstanceANGLE:_emscripten_glDrawArraysInstancedBaseInstanceANGLE,emscripten_glDrawArraysInstancedBaseInstanceWEBGL:_emscripten_glDrawArraysInstancedBaseInstanceWEBGL,emscripten_glDrawArraysInstancedEXT:_emscripten_glDrawArraysInstancedEXT,emscripten_glDrawArraysInstancedNV:_emscripten_glDrawArraysInstancedNV,emscripten_glDrawBuffers:_emscripten_glDrawBuffers,emscripten_glDrawBuffersEXT:_emscripten_glDrawBuffersEXT,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstanced:_emscripten_glDrawElementsInstanced,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glDrawElementsInstancedARB:_emscripten_glDrawElementsInstancedARB,emscripten_glDrawElementsInstancedBaseVertexBaseInstanceANGLE:_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceANGLE,emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL:_emscripten_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL,emscripten_glDrawElementsInstancedEXT:_emscripten_glDrawElementsInstancedEXT,emscripten_glDrawElementsInstancedNV:_emscripten_glDrawElementsInstancedNV,emscripten_glDrawRangeElements:_emscripten_glDrawRangeElements,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEndQuery:_emscripten_glEndQuery,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glEndTransformFeedback:_emscripten_glEndTransformFeedback,emscripten_glFenceSync:_emscripten_glFenceSync,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFramebufferTextureLayer:_emscripten_glFramebufferTextureLayer,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueries:_emscripten_glGenQueries,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenSamplers:_emscripten_glGenSamplers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenTransformFeedbacks:_emscripten_glGenTransformFeedbacks,emscripten_glGenVertexArrays:_emscripten_glGenVertexArrays,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetActiveUniformBlockName:_emscripten_glGetActiveUniformBlockName,emscripten_glGetActiveUniformBlockiv:_emscripten_glGetActiveUniformBlockiv,emscripten_glGetActiveUniformsiv:_emscripten_glGetActiveUniformsiv,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteri64v:_emscripten_glGetBufferParameteri64v,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetBufferSubData:_emscripten_glGetBufferSubData,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFragDataLocation:_emscripten_glGetFragDataLocation,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetInteger64i_v:_emscripten_glGetInteger64i_v,emscripten_glGetInteger64v:_emscripten_glGetInteger64v,emscripten_glGetIntegeri_v:_emscripten_glGetIntegeri_v,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetInternalformativ:_emscripten_glGetInternalformativ,emscripten_glGetProgramBinary:_emscripten_glGetProgramBinary,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuiv:_emscripten_glGetQueryObjectuiv,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryiv:_emscripten_glGetQueryiv,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetSamplerParameterfv:_emscripten_glGetSamplerParameterfv,emscripten_glGetSamplerParameteriv:_emscripten_glGetSamplerParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetStringi:_emscripten_glGetStringi,emscripten_glGetSynciv:_emscripten_glGetSynciv,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetTransformFeedbackVarying:_emscripten_glGetTransformFeedbackVarying,emscripten_glGetUniformBlockIndex:_emscripten_glGetUniformBlockIndex,emscripten_glGetUniformIndices:_emscripten_glGetUniformIndices,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetUniformuiv:_emscripten_glGetUniformuiv,emscripten_glGetVertexAttribIiv:_emscripten_glGetVertexAttribIiv,emscripten_glGetVertexAttribIuiv:_emscripten_glGetVertexAttribIuiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glInvalidateFramebuffer:_emscripten_glInvalidateFramebuffer,emscripten_glInvalidateSubFramebuffer:_emscripten_glInvalidateSubFramebuffer,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQuery:_emscripten_glIsQuery,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsSampler:_emscripten_glIsSampler,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsSync:_emscripten_glIsSync,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsTransformFeedback:_emscripten_glIsTransformFeedback,emscripten_glIsVertexArray:_emscripten_glIsVertexArray,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glLoadIdentity:_emscripten_glLoadIdentity,emscripten_glMatrixMode:_emscripten_glMatrixMode,emscripten_glMultiDrawArrays:_emscripten_glMultiDrawArrays,emscripten_glMultiDrawArraysANGLE:_emscripten_glMultiDrawArraysANGLE,emscripten_glMultiDrawArraysInstancedANGLE:_emscripten_glMultiDrawArraysInstancedANGLE,emscripten_glMultiDrawArraysInstancedBaseInstanceANGLE:_emscripten_glMultiDrawArraysInstancedBaseInstanceANGLE,emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL:_emscripten_glMultiDrawArraysInstancedBaseInstanceWEBGL,emscripten_glMultiDrawArraysInstancedWEBGL:_emscripten_glMultiDrawArraysInstancedWEBGL,emscripten_glMultiDrawArraysWEBGL:_emscripten_glMultiDrawArraysWEBGL,emscripten_glMultiDrawElements:_emscripten_glMultiDrawElements,emscripten_glMultiDrawElementsANGLE:_emscripten_glMultiDrawElementsANGLE,emscripten_glMultiDrawElementsInstancedANGLE:_emscripten_glMultiDrawElementsInstancedANGLE,emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE:_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL:_emscripten_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL,emscripten_glMultiDrawElementsInstancedWEBGL:_emscripten_glMultiDrawElementsInstancedWEBGL,emscripten_glMultiDrawElementsWEBGL:_emscripten_glMultiDrawElementsWEBGL,emscripten_glPauseTransformFeedback:_emscripten_glPauseTransformFeedback,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonModeWEBGL:_emscripten_glPolygonModeWEBGL,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glPolygonOffsetClampEXT:_emscripten_glPolygonOffsetClampEXT,emscripten_glProgramBinary:_emscripten_glProgramBinary,emscripten_glProgramParameteri:_emscripten_glProgramParameteri,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadBuffer:_emscripten_glReadBuffer,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glRenderbufferStorageMultisample:_emscripten_glRenderbufferStorageMultisample,emscripten_glResumeTransformFeedback:_emscripten_glResumeTransformFeedback,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glSamplerParameterf:_emscripten_glSamplerParameterf,emscripten_glSamplerParameterfv:_emscripten_glSamplerParameterfv,emscripten_glSamplerParameteri:_emscripten_glSamplerParameteri,emscripten_glSamplerParameteriv:_emscripten_glSamplerParameteriv,emscripten_glScissor:_emscripten_glScissor,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexImage3D:_emscripten_glTexImage3D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexStorage2D:_emscripten_glTexStorage2D,emscripten_glTexStorage3D:_emscripten_glTexStorage3D,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glTexSubImage3D:_emscripten_glTexSubImage3D,emscripten_glTransformFeedbackVaryings:_emscripten_glTransformFeedbackVaryings,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform1ui:_emscripten_glUniform1ui,emscripten_glUniform1uiv:_emscripten_glUniform1uiv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform2ui:_emscripten_glUniform2ui,emscripten_glUniform2uiv:_emscripten_glUniform2uiv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform3ui:_emscripten_glUniform3ui,emscripten_glUniform3uiv:_emscripten_glUniform3uiv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniform4ui:_emscripten_glUniform4ui,emscripten_glUniform4uiv:_emscripten_glUniform4uiv,emscripten_glUniformBlockBinding:_emscripten_glUniformBlockBinding,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix2x3fv:_emscripten_glUniformMatrix2x3fv,emscripten_glUniformMatrix2x4fv:_emscripten_glUniformMatrix2x4fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix3x2fv:_emscripten_glUniformMatrix3x2fv,emscripten_glUniformMatrix3x4fv:_emscripten_glUniformMatrix3x4fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUniformMatrix4x2fv:_emscripten_glUniformMatrix4x2fv,emscripten_glUniformMatrix4x3fv:_emscripten_glUniformMatrix4x3fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisor:_emscripten_glVertexAttribDivisor,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribDivisorARB:_emscripten_glVertexAttribDivisorARB,emscripten_glVertexAttribDivisorEXT:_emscripten_glVertexAttribDivisorEXT,emscripten_glVertexAttribDivisorNV:_emscripten_glVertexAttribDivisorNV,emscripten_glVertexAttribI4i:_emscripten_glVertexAttribI4i,emscripten_glVertexAttribI4iv:_emscripten_glVertexAttribI4iv,emscripten_glVertexAttribI4ui:_emscripten_glVertexAttribI4ui,emscripten_glVertexAttribI4uiv:_emscripten_glVertexAttribI4uiv,emscripten_glVertexAttribIPointer:_emscripten_glVertexAttribIPointer,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glVertexPointer:_emscripten_glVertexPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_glWaitSync:_emscripten_glWaitSync,emscripten_has_asyncify:_emscripten_has_asyncify,emscripten_hide_mouse:_emscripten_hide_mouse,emscripten_html5_remove_all_event_listeners:_emscripten_html5_remove_all_event_listeners,emscripten_html5_remove_event_listener:_emscripten_html5_remove_event_listener,emscripten_is_main_browser_thread:_emscripten_is_main_browser_thread,emscripten_is_webgl_context_lost:_emscripten_is_webgl_context_lost,emscripten_lock_orientation:_emscripten_lock_orientation,emscripten_log_impl_js,emscripten_math_acos:_emscripten_math_acos,emscripten_math_acosh:_emscripten_math_acosh,emscripten_math_asin:_emscripten_math_asin,emscripten_math_asinh:_emscripten_math_asinh,emscripten_math_atan:_emscripten_math_atan,emscripten_math_atan2:_emscripten_math_atan2,emscripten_math_atanh:_emscripten_math_atanh,emscripten_math_cbrt:_emscripten_math_cbrt,emscripten_math_cos:_emscripten_math_cos,emscripten_math_cosh:_emscripten_math_cosh,emscripten_math_exp:_emscripten_math_exp,emscripten_math_expm1:_emscripten_math_expm1,emscripten_math_fmod:_emscripten_math_fmod,emscripten_math_hypot:_emscripten_math_hypot,emscripten_math_log:_emscripten_math_log,emscripten_math_log10:_emscripten_math_log10,emscripten_math_log1p:_emscripten_math_log1p,emscripten_math_log2:_emscripten_math_log2,emscripten_math_pow:_emscripten_math_pow,emscripten_math_random:_emscripten_math_random,emscripten_math_round:_emscripten_math_round,emscripten_math_sign:_emscripten_math_sign,emscripten_math_sin:_emscripten_math_sin,emscripten_math_sinh:_emscripten_math_sinh,emscripten_math_sqrt:_emscripten_math_sqrt,emscripten_math_tan:_emscripten_math_tan,emscripten_math_tanh:_emscripten_math_tanh,emscripten_notify_memory_growth:_emscripten_notify_memory_growth,emscripten_out:_emscripten_out,emscripten_outn:_emscripten_outn,emscripten_pause_main_loop:_emscripten_pause_main_loop,emscripten_pc_get_column:_emscripten_pc_get_column,emscripten_pc_get_file:_emscripten_pc_get_file,emscripten_pc_get_function:_emscripten_pc_get_function,emscripten_pc_get_line:_emscripten_pc_get_line,emscripten_performance_now:_emscripten_performance_now,emscripten_print_double:_emscripten_print_double,emscripten_promise_all:_emscripten_promise_all,emscripten_promise_all_settled:_emscripten_promise_all_settled,emscripten_promise_any:_emscripten_promise_any,emscripten_promise_await:_emscripten_promise_await,emscripten_promise_create:_emscripten_promise_create,emscripten_promise_destroy:_emscripten_promise_destroy,emscripten_promise_race:_emscripten_promise_race,emscripten_promise_resolve:_emscripten_promise_resolve,emscripten_promise_then:_emscripten_promise_then,emscripten_random:_emscripten_random,emscripten_request_animation_frame:_emscripten_request_animation_frame,emscripten_request_animation_frame_loop:_emscripten_request_animation_frame_loop,emscripten_request_fullscreen:_emscripten_request_fullscreen,emscripten_request_fullscreen_strategy:_emscripten_request_fullscreen_strategy,emscripten_request_pointerlock:_emscripten_request_pointerlock,emscripten_resize_heap:_emscripten_resize_heap,emscripten_resume_main_loop:_emscripten_resume_main_loop,emscripten_return_address:_emscripten_return_address,emscripten_run_preload_plugins:_emscripten_run_preload_plugins,emscripten_run_preload_plugins_data:_emscripten_run_preload_plugins_data,emscripten_run_script:_emscripten_run_script,emscripten_run_script_int:_emscripten_run_script_int,emscripten_run_script_string:_emscripten_run_script_string,emscripten_runtime_keepalive_check:_emscripten_runtime_keepalive_check,emscripten_runtime_keepalive_pop:_emscripten_runtime_keepalive_pop,emscripten_runtime_keepalive_push:_emscripten_runtime_keepalive_push,emscripten_sample_gamepad_data:_emscripten_sample_gamepad_data,emscripten_set_batterychargingchange_callback_on_thread:_emscripten_set_batterychargingchange_callback_on_thread,emscripten_set_batterylevelchange_callback_on_thread:_emscripten_set_batterylevelchange_callback_on_thread,emscripten_set_beforeunload_callback_on_thread:_emscripten_set_beforeunload_callback_on_thread,emscripten_set_blur_callback_on_thread:_emscripten_set_blur_callback_on_thread,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_canvas_size:_emscripten_set_canvas_size,emscripten_set_click_callback_on_thread:_emscripten_set_click_callback_on_thread,emscripten_set_dblclick_callback_on_thread:_emscripten_set_dblclick_callback_on_thread,emscripten_set_devicemotion_callback_on_thread:_emscripten_set_devicemotion_callback_on_thread,emscripten_set_deviceorientation_callback_on_thread:_emscripten_set_deviceorientation_callback_on_thread,emscripten_set_element_css_size:_emscripten_set_element_css_size,emscripten_set_focus_callback_on_thread:_emscripten_set_focus_callback_on_thread,emscripten_set_focusin_callback_on_thread:_emscripten_set_focusin_callback_on_thread,emscripten_set_focusout_callback_on_thread:_emscripten_set_focusout_callback_on_thread,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_gamepadconnected_callback_on_thread:_emscripten_set_gamepadconnected_callback_on_thread,emscripten_set_gamepaddisconnected_callback_on_thread:_emscripten_set_gamepaddisconnected_callback_on_thread,emscripten_set_immediate:_emscripten_set_immediate,emscripten_set_immediate_loop:_emscripten_set_immediate_loop,emscripten_set_interval:_emscripten_set_interval,emscripten_set_keydown_callback_on_thread:_emscripten_set_keydown_callback_on_thread,emscripten_set_keypress_callback_on_thread:_emscripten_set_keypress_callback_on_thread,emscripten_set_keyup_callback_on_thread:_emscripten_set_keyup_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_set_main_loop_arg:_emscripten_set_main_loop_arg,emscripten_set_main_loop_expected_blockers:_emscripten_set_main_loop_expected_blockers,emscripten_set_main_loop_timing:_emscripten_set_main_loop_timing,emscripten_set_mousedown_callback_on_thread:_emscripten_set_mousedown_callback_on_thread,emscripten_set_mouseenter_callback_on_thread:_emscripten_set_mouseenter_callback_on_thread,emscripten_set_mouseleave_callback_on_thread:_emscripten_set_mouseleave_callback_on_thread,emscripten_set_mousemove_callback_on_thread:_emscripten_set_mousemove_callback_on_thread,emscripten_set_mouseout_callback_on_thread:_emscripten_set_mouseout_callback_on_thread,emscripten_set_mouseover_callback_on_thread:_emscripten_set_mouseover_callback_on_thread,emscripten_set_mouseup_callback_on_thread:_emscripten_set_mouseup_callback_on_thread,emscripten_set_orientationchange_callback_on_thread:_emscripten_set_orientationchange_callback_on_thread,emscripten_set_pointerlockchange_callback_on_thread:_emscripten_set_pointerlockchange_callback_on_thread,emscripten_set_pointerlockerror_callback_on_thread:_emscripten_set_pointerlockerror_callback_on_thread,emscripten_set_resize_callback_on_thread:_emscripten_set_resize_callback_on_thread,emscripten_set_scroll_callback_on_thread:_emscripten_set_scroll_callback_on_thread,emscripten_set_socket_close_callback:_emscripten_set_socket_close_callback,emscripten_set_socket_connection_callback:_emscripten_set_socket_connection_callback,emscripten_set_socket_error_callback:_emscripten_set_socket_error_callback,emscripten_set_socket_listen_callback:_emscripten_set_socket_listen_callback,emscripten_set_socket_message_callback:_emscripten_set_socket_message_callback,emscripten_set_socket_open_callback:_emscripten_set_socket_open_callback,emscripten_set_timeout:_emscripten_set_timeout,emscripten_set_timeout_loop:_emscripten_set_timeout_loop,emscripten_set_touchcancel_callback_on_thread:_emscripten_set_touchcancel_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_up_async_input_device_js,emscripten_set_visibilitychange_callback_on_thread:_emscripten_set_visibilitychange_callback_on_thread,emscripten_set_webglcontextlost_callback_on_thread:_emscripten_set_webglcontextlost_callback_on_thread,emscripten_set_webglcontextrestored_callback_on_thread:_emscripten_set_webglcontextrestored_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,emscripten_stack_snapshot:_emscripten_stack_snapshot,emscripten_stack_unwind_buffer:_emscripten_stack_unwind_buffer,emscripten_supports_offscreencanvas:_emscripten_supports_offscreencanvas,emscripten_throw_number:_emscripten_throw_number,emscripten_throw_string:_emscripten_throw_string,emscripten_unlock_orientation:_emscripten_unlock_orientation,emscripten_unwind_to_js_event_loop:_emscripten_unwind_to_js_event_loop,emscripten_vibrate:_emscripten_vibrate,emscripten_vibrate_pattern:_emscripten_vibrate_pattern,emscripten_webgl_commit_frame:_emscripten_webgl_commit_frame,emscripten_webgl_create_context:_emscripten_webgl_create_context,emscripten_webgl_destroy_context:_emscripten_webgl_destroy_context,emscripten_webgl_do_commit_frame:_emscripten_webgl_do_commit_frame,emscripten_webgl_do_create_context:_emscripten_webgl_do_create_context,emscripten_webgl_do_get_current_context:_emscripten_webgl_do_get_current_context,emscripten_webgl_enable_ANGLE_instanced_arrays:_emscripten_webgl_enable_ANGLE_instanced_arrays,emscripten_webgl_enable_EXT_clip_control:_emscripten_webgl_enable_EXT_clip_control,emscripten_webgl_enable_EXT_polygon_offset_clamp:_emscripten_webgl_enable_EXT_polygon_offset_clamp,emscripten_webgl_enable_OES_vertex_array_object:_emscripten_webgl_enable_OES_vertex_array_object,emscripten_webgl_enable_WEBGL_draw_buffers:_emscripten_webgl_enable_WEBGL_draw_buffers,emscripten_webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance:_emscripten_webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance,emscripten_webgl_enable_WEBGL_multi_draw:_emscripten_webgl_enable_WEBGL_multi_draw,emscripten_webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance:_emscripten_webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance,emscripten_webgl_enable_WEBGL_polygon_mode:_emscripten_webgl_enable_WEBGL_polygon_mode,emscripten_webgl_enable_extension:_emscripten_webgl_enable_extension,emscripten_webgl_get_context_attributes:_emscripten_webgl_get_context_attributes,emscripten_webgl_get_current_context:_emscripten_webgl_get_current_context,emscripten_webgl_get_drawing_buffer_size:_emscripten_webgl_get_drawing_buffer_size,emscripten_webgl_get_parameter_d:_emscripten_webgl_get_parameter_d,emscripten_webgl_get_parameter_i64v:_emscripten_webgl_get_parameter_i64v,emscripten_webgl_get_parameter_o:_emscripten_webgl_get_parameter_o,emscripten_webgl_get_parameter_utf8:_emscripten_webgl_get_parameter_utf8,emscripten_webgl_get_parameter_v:_emscripten_webgl_get_parameter_v,emscripten_webgl_get_program_info_log_utf8:_emscripten_webgl_get_program_info_log_utf8,emscripten_webgl_get_program_parameter_d:_emscripten_webgl_get_program_parameter_d,emscripten_webgl_get_shader_info_log_utf8:_emscripten_webgl_get_shader_info_log_utf8,emscripten_webgl_get_shader_parameter_d:_emscripten_webgl_get_shader_parameter_d,emscripten_webgl_get_shader_source_utf8:_emscripten_webgl_get_shader_source_utf8,emscripten_webgl_get_supported_extensions:_emscripten_webgl_get_supported_extensions,emscripten_webgl_get_uniform_d:_emscripten_webgl_get_uniform_d,emscripten_webgl_get_uniform_v:_emscripten_webgl_get_uniform_v,emscripten_webgl_get_vertex_attrib_d:_emscripten_webgl_get_vertex_attrib_d,emscripten_webgl_get_vertex_attrib_o:_emscripten_webgl_get_vertex_attrib_o,emscripten_webgl_get_vertex_attrib_v:_emscripten_webgl_get_vertex_attrib_v,emscripten_webgl_make_context_current:_emscripten_webgl_make_context_current,emscripten_websocket_close:_emscripten_websocket_close,emscripten_websocket_deinitialize:_emscripten_websocket_deinitialize,emscripten_websocket_delete:_emscripten_websocket_delete,emscripten_websocket_get_buffered_amount:_emscripten_websocket_get_buffered_amount,emscripten_websocket_get_extensions:_emscripten_websocket_get_extensions,emscripten_websocket_get_extensions_length:_emscripten_websocket_get_extensions_length,emscripten_websocket_get_protocol:_emscripten_websocket_get_protocol,emscripten_websocket_get_protocol_length:_emscripten_websocket_get_protocol_length,emscripten_websocket_get_ready_state:_emscripten_websocket_get_ready_state,emscripten_websocket_get_url:_emscripten_websocket_get_url,emscripten_websocket_get_url_length:_emscripten_websocket_get_url_length,emscripten_websocket_is_supported:_emscripten_websocket_is_supported,emscripten_websocket_new:_emscripten_websocket_new,emscripten_websocket_send_binary:_emscripten_websocket_send_binary,emscripten_websocket_send_utf8_text:_emscripten_websocket_send_utf8_text,emscripten_websocket_set_onclose_callback_on_thread:_emscripten_websocket_set_onclose_callback_on_thread,emscripten_websocket_set_onerror_callback_on_thread:_emscripten_websocket_set_onerror_callback_on_thread,emscripten_websocket_set_onmessage_callback_on_thread:_emscripten_websocket_set_onmessage_callback_on_thread,emscripten_websocket_set_onopen_callback_on_thread:_emscripten_websocket_set_onopen_callback_on_thread,endprotoent:_endprotoent,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fail_test,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_pread:_fd_pread,fd_pwrite:_fd_pwrite,fd_read:_fd_read,fd_seek:_fd_seek,fd_sync:_fd_sync,fd_write:_fd_write,ffi_call_js,ffi_closure_alloc_js,ffi_closure_free_js,ffi_prep_closure_loc_js,filledEllipseColor:_filledEllipseColor,filledEllipseRGBA:_filledEllipseRGBA,gc_register_proxies,get_async_js_call_done_callback,get_length_helper,get_length_string,get_suspender,getaddrinfo:_getaddrinfo,getnameinfo:_getnameinfo,getprotobyname:_getprotobyname,getprotobynumber:_getprotobynumber,getprotoent:_getprotoent,glActiveTexture:_glActiveTexture,glAttachShader:_glAttachShader,glBegin:_glBegin,glBeginQuery:_glBeginQuery,glBeginQueryEXT:_glBeginQueryEXT,glBeginTransformFeedback:_glBeginTransformFeedback,glBindAttribLocation:_glBindAttribLocation,glBindBuffer:_glBindBuffer,glBindBufferBase:_glBindBufferBase,glBindBufferRange:_glBindBufferRange,glBindFramebuffer:_glBindFramebuffer,glBindRenderbuffer:_glBindRenderbuffer,glBindSampler:_glBindSampler,glBindTexture:_glBindTexture,glBindTransformFeedback:_glBindTransformFeedback,glBindVertexArray:_glBindVertexArray,glBindVertexArrayOES:_glBindVertexArrayOES,glBlendColor:_glBlendColor,glBlendEquation:_glBlendEquation,glBlendEquationSeparate:_glBlendEquationSeparate,glBlendFunc:_glBlendFunc,glBlendFuncSeparate:_glBlendFuncSeparate,glBlitFramebuffer:_glBlitFramebuffer,glBufferData:_glBufferData,glBufferSubData:_glBufferSubData,glCheckFramebufferStatus:_glCheckFramebufferStatus,glClear:_glClear,glClearBufferfi:_glClearBufferfi,glClearBufferfv:_glClearBufferfv,glClearBufferiv:_glClearBufferiv,glClearBufferuiv:_glClearBufferuiv,glClearColor:_glClearColor,glClearDepth:_glClearDepth,glClearDepthf:_glClearDepthf,glClearStencil:_glClearStencil,glClientWaitSync:_glClientWaitSync,glClipControlEXT:_glClipControlEXT,glColorMask:_glColorMask,glCompileShader:_glCompileShader,glCompressedTexImage2D:_glCompressedTexImage2D,glCompressedTexImage3D:_glCompressedTexImage3D,glCompressedTexSubImage2D:_glCompressedTexSubImage2D,glCompressedTexSubImage3D:_glCompressedTexSubImage3D,glCopyBufferSubData:_glCopyBufferSubData,glCopyTexImage2D:_glCopyTexImage2D,glCopyTexSubImage2D:_glCopyTexSubImage2D,glCopyTexSubImage3D:_glCopyTexSubImage3D,glCreateProgram:_glCreateProgram,glCreateShader:_glCreateShader,glCullFace:_glCullFace,glDeleteBuffers:_glDeleteBuffers,glDeleteFramebuffers:_glDeleteFramebuffers,glDeleteProgram:_glDeleteProgram,glDeleteQueries:_glDeleteQueries,glDeleteQueriesEXT:_glDeleteQueriesEXT,glDeleteRenderbuffers:_glDeleteRenderbuffers,glDeleteSamplers:_glDeleteSamplers,glDeleteShader:_glDeleteShader,glDeleteSync:_glDeleteSync,glDeleteTextures:_glDeleteTextures,glDeleteTransformFeedbacks:_glDeleteTransformFeedbacks,glDeleteVertexArrays:_glDeleteVertexArrays,glDeleteVertexArraysOES:_glDeleteVertexArraysOES,glDepthFunc:_glDepthFunc,glDepthMask:_glDepthMask,glDepthRange:_glDepthRange,glDepthRangef:_glDepthRangef,glDetachShader:_glDetachShader,glDisable:_glDisable,glDisableVertexAttribArray:_glDisableVertexAttribArray,glDrawArrays:_glDrawArrays,glDrawArraysInstanced:_glDrawArraysInstanced,glDrawArraysInstancedANGLE:_glDrawArraysInstancedANGLE,glDrawArraysInstancedARB:_glDrawArraysInstancedARB,glDrawArraysInstancedBaseInstance:_glDrawArraysInstancedBaseInstance,glDrawArraysInstancedBaseInstanceANGLE:_glDrawArraysInstancedBaseInstanceANGLE,glDrawArraysInstancedBaseInstanceWEBGL:_glDrawArraysInstancedBaseInstanceWEBGL,glDrawArraysInstancedEXT:_glDrawArraysInstancedEXT,glDrawArraysInstancedNV:_glDrawArraysInstancedNV,glDrawBuffers:_glDrawBuffers,glDrawBuffersEXT:_glDrawBuffersEXT,glDrawBuffersWEBGL:_glDrawBuffersWEBGL,glDrawElements:_glDrawElements,glDrawElementsInstanced:_glDrawElementsInstanced,glDrawElementsInstancedANGLE:_glDrawElementsInstancedANGLE,glDrawElementsInstancedARB:_glDrawElementsInstancedARB,glDrawElementsInstancedBaseVertexBaseInstanceANGLE:_glDrawElementsInstancedBaseVertexBaseInstanceANGLE,glDrawElementsInstancedBaseVertexBaseInstanceWEBGL:_glDrawElementsInstancedBaseVertexBaseInstanceWEBGL,glDrawElementsInstancedEXT:_glDrawElementsInstancedEXT,glDrawElementsInstancedNV:_glDrawElementsInstancedNV,glDrawRangeElements:_glDrawRangeElements,glEnable:_glEnable,glEnableVertexAttribArray:_glEnableVertexAttribArray,glEndQuery:_glEndQuery,glEndQueryEXT:_glEndQueryEXT,glEndTransformFeedback:_glEndTransformFeedback,glFenceSync:_glFenceSync,glFinish:_glFinish,glFlush:_glFlush,glFramebufferRenderbuffer:_glFramebufferRenderbuffer,glFramebufferTexture2D:_glFramebufferTexture2D,glFramebufferTextureLayer:_glFramebufferTextureLayer,glFrontFace:_glFrontFace,glGenBuffers:_glGenBuffers,glGenFramebuffers:_glGenFramebuffers,glGenQueries:_glGenQueries,glGenQueriesEXT:_glGenQueriesEXT,glGenRenderbuffers:_glGenRenderbuffers,glGenSamplers:_glGenSamplers,glGenTextures:_glGenTextures,glGenTransformFeedbacks:_glGenTransformFeedbacks,glGenVertexArrays:_glGenVertexArrays,glGenVertexArraysOES:_glGenVertexArraysOES,glGenerateMipmap:_glGenerateMipmap,glGetActiveAttrib:_glGetActiveAttrib,glGetActiveUniform:_glGetActiveUniform,glGetActiveUniformBlockName:_glGetActiveUniformBlockName,glGetActiveUniformBlockiv:_glGetActiveUniformBlockiv,glGetActiveUniformsiv:_glGetActiveUniformsiv,glGetAttachedShaders:_glGetAttachedShaders,glGetAttribLocation:_glGetAttribLocation,glGetBooleanv:_glGetBooleanv,glGetBufferParameteri64v:_glGetBufferParameteri64v,glGetBufferParameteriv:_glGetBufferParameteriv,glGetBufferSubData:_glGetBufferSubData,glGetError:_glGetError,glGetFloatv:_glGetFloatv,glGetFragDataLocation:_glGetFragDataLocation,glGetFramebufferAttachmentParameteriv:_glGetFramebufferAttachmentParameteriv,glGetInteger64i_v:_glGetInteger64i_v,glGetInteger64v:_glGetInteger64v,glGetIntegeri_v:_glGetIntegeri_v,glGetIntegerv:_glGetIntegerv,glGetInternalformativ:_glGetInternalformativ,glGetProgramBinary:_glGetProgramBinary,glGetProgramInfoLog:_glGetProgramInfoLog,glGetProgramiv:_glGetProgramiv,glGetQueryObjecti64vEXT:_glGetQueryObjecti64vEXT,glGetQueryObjectivEXT:_glGetQueryObjectivEXT,glGetQueryObjectui64vEXT:_glGetQueryObjectui64vEXT,glGetQueryObjectuiv:_glGetQueryObjectuiv,glGetQueryObjectuivEXT:_glGetQueryObjectuivEXT,glGetQueryiv:_glGetQueryiv,glGetQueryivEXT:_glGetQueryivEXT,glGetRenderbufferParameteriv:_glGetRenderbufferParameteriv,glGetSamplerParameterfv:_glGetSamplerParameterfv,glGetSamplerParameteriv:_glGetSamplerParameteriv,glGetShaderInfoLog:_glGetShaderInfoLog,glGetShaderPrecisionFormat:_glGetShaderPrecisionFormat,glGetShaderSource:_glGetShaderSource,glGetShaderiv:_glGetShaderiv,glGetString:_glGetString,glGetStringi:_glGetStringi,glGetSynciv:_glGetSynciv,glGetTexParameterfv:_glGetTexParameterfv,glGetTexParameteriv:_glGetTexParameteriv,glGetTransformFeedbackVarying:_glGetTransformFeedbackVarying,glGetUniformBlockIndex:_glGetUniformBlockIndex,glGetUniformIndices:_glGetUniformIndices,glGetUniformLocation:_glGetUniformLocation,glGetUniformfv:_glGetUniformfv,glGetUniformiv:_glGetUniformiv,glGetUniformuiv:_glGetUniformuiv,glGetVertexAttribIiv:_glGetVertexAttribIiv,glGetVertexAttribIuiv:_glGetVertexAttribIuiv,glGetVertexAttribPointerv:_glGetVertexAttribPointerv,glGetVertexAttribfv:_glGetVertexAttribfv,glGetVertexAttribiv:_glGetVertexAttribiv,glHint:_glHint,glInvalidateFramebuffer:_glInvalidateFramebuffer,glInvalidateSubFramebuffer:_glInvalidateSubFramebuffer,glIsBuffer:_glIsBuffer,glIsEnabled:_glIsEnabled,glIsFramebuffer:_glIsFramebuffer,glIsProgram:_glIsProgram,glIsQuery:_glIsQuery,glIsQueryEXT:_glIsQueryEXT,glIsRenderbuffer:_glIsRenderbuffer,glIsSampler:_glIsSampler,glIsShader:_glIsShader,glIsSync:_glIsSync,glIsTexture:_glIsTexture,glIsTransformFeedback:_glIsTransformFeedback,glIsVertexArray:_glIsVertexArray,glIsVertexArrayOES:_glIsVertexArrayOES,glLineWidth:_glLineWidth,glLinkProgram:_glLinkProgram,glLoadIdentity:_glLoadIdentity,glMatrixMode:_glMatrixMode,glMultiDrawArrays:_glMultiDrawArrays,glMultiDrawArraysANGLE:_glMultiDrawArraysANGLE,glMultiDrawArraysInstancedANGLE:_glMultiDrawArraysInstancedANGLE,glMultiDrawArraysInstancedBaseInstanceANGLE:_glMultiDrawArraysInstancedBaseInstanceANGLE,glMultiDrawArraysInstancedBaseInstanceWEBGL:_glMultiDrawArraysInstancedBaseInstanceWEBGL,glMultiDrawArraysInstancedWEBGL:_glMultiDrawArraysInstancedWEBGL,glMultiDrawArraysWEBGL:_glMultiDrawArraysWEBGL,glMultiDrawElements:_glMultiDrawElements,glMultiDrawElementsANGLE:_glMultiDrawElementsANGLE,glMultiDrawElementsInstancedANGLE:_glMultiDrawElementsInstancedANGLE,glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE:_glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE,glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL:_glMultiDrawElementsInstancedBaseVertexBaseInstanceWEBGL,glMultiDrawElementsInstancedWEBGL:_glMultiDrawElementsInstancedWEBGL,glMultiDrawElementsWEBGL:_glMultiDrawElementsWEBGL,glPauseTransformFeedback:_glPauseTransformFeedback,glPixelStorei:_glPixelStorei,glPolygonModeWEBGL:_glPolygonModeWEBGL,glPolygonOffset:_glPolygonOffset,glPolygonOffsetClampEXT:_glPolygonOffsetClampEXT,glProgramBinary:_glProgramBinary,glProgramParameteri:_glProgramParameteri,glQueryCounterEXT:_glQueryCounterEXT,glReadBuffer:_glReadBuffer,glReadPixels:_glReadPixels,glReleaseShaderCompiler:_glReleaseShaderCompiler,glRenderbufferStorage:_glRenderbufferStorage,glRenderbufferStorageMultisample:_glRenderbufferStorageMultisample,glResumeTransformFeedback:_glResumeTransformFeedback,glSampleCoverage:_glSampleCoverage,glSamplerParameterf:_glSamplerParameterf,glSamplerParameterfv:_glSamplerParameterfv,glSamplerParameteri:_glSamplerParameteri,glSamplerParameteriv:_glSamplerParameteriv,glScissor:_glScissor,glShaderBinary:_glShaderBinary,glShaderSource:_glShaderSource,glStencilFunc:_glStencilFunc,glStencilFuncSeparate:_glStencilFuncSeparate,glStencilMask:_glStencilMask,glStencilMaskSeparate:_glStencilMaskSeparate,glStencilOp:_glStencilOp,glStencilOpSeparate:_glStencilOpSeparate,glTexImage2D:_glTexImage2D,glTexImage3D:_glTexImage3D,glTexParameterf:_glTexParameterf,glTexParameterfv:_glTexParameterfv,glTexParameteri:_glTexParameteri,glTexParameteriv:_glTexParameteriv,glTexStorage2D:_glTexStorage2D,glTexStorage3D:_glTexStorage3D,glTexSubImage2D:_glTexSubImage2D,glTexSubImage3D:_glTexSubImage3D,glTransformFeedbackVaryings:_glTransformFeedbackVaryings,glUniform1f:_glUniform1f,glUniform1fv:_glUniform1fv,glUniform1i:_glUniform1i,glUniform1iv:_glUniform1iv,glUniform1ui:_glUniform1ui,glUniform1uiv:_glUniform1uiv,glUniform2f:_glUniform2f,glUniform2fv:_glUniform2fv,glUniform2i:_glUniform2i,glUniform2iv:_glUniform2iv,glUniform2ui:_glUniform2ui,glUniform2uiv:_glUniform2uiv,glUniform3f:_glUniform3f,glUniform3fv:_glUniform3fv,glUniform3i:_glUniform3i,glUniform3iv:_glUniform3iv,glUniform3ui:_glUniform3ui,glUniform3uiv:_glUniform3uiv,glUniform4f:_glUniform4f,glUniform4fv:_glUniform4fv,glUniform4i:_glUniform4i,glUniform4iv:_glUniform4iv,glUniform4ui:_glUniform4ui,glUniform4uiv:_glUniform4uiv,glUniformBlockBinding:_glUniformBlockBinding,glUniformMatrix2fv:_glUniformMatrix2fv,glUniformMatrix2x3fv:_glUniformMatrix2x3fv,glUniformMatrix2x4fv:_glUniformMatrix2x4fv,glUniformMatrix3fv:_glUniformMatrix3fv,glUniformMatrix3x2fv:_glUniformMatrix3x2fv,glUniformMatrix3x4fv:_glUniformMatrix3x4fv,glUniformMatrix4fv:_glUniformMatrix4fv,glUniformMatrix4x2fv:_glUniformMatrix4x2fv,glUniformMatrix4x3fv:_glUniformMatrix4x3fv,glUseProgram:_glUseProgram,glValidateProgram:_glValidateProgram,glVertexAttrib1f:_glVertexAttrib1f,glVertexAttrib1fv:_glVertexAttrib1fv,glVertexAttrib2f:_glVertexAttrib2f,glVertexAttrib2fv:_glVertexAttrib2fv,glVertexAttrib3f:_glVertexAttrib3f,glVertexAttrib3fv:_glVertexAttrib3fv,glVertexAttrib4f:_glVertexAttrib4f,glVertexAttrib4fv:_glVertexAttrib4fv,glVertexAttribDivisor:_glVertexAttribDivisor,glVertexAttribDivisorANGLE:_glVertexAttribDivisorANGLE,glVertexAttribDivisorARB:_glVertexAttribDivisorARB,glVertexAttribDivisorEXT:_glVertexAttribDivisorEXT,glVertexAttribDivisorNV:_glVertexAttribDivisorNV,glVertexAttribI4i:_glVertexAttribI4i,glVertexAttribI4iv:_glVertexAttribI4iv,glVertexAttribI4ui:_glVertexAttribI4ui,glVertexAttribI4uiv:_glVertexAttribI4uiv,glVertexAttribIPointer:_glVertexAttribIPointer,glVertexAttribPointer:_glVertexAttribPointer,glVertexPointer:_glVertexPointer,glViewport:_glViewport,glWaitSync:_glWaitSync,handle_next_result_js,hiwire_invalid_ref_js,is_comlink_proxy,js2python_convert,js2python_immutable_js,js2python_js,jslib_init_buffers_js,jslib_init_js,lineColor:_lineColor,lineRGBA:_lineRGBA,my_dict_converter,new_error,pixelRGBA:_pixelRGBA,proc_exit:_proc_exit,proxy_cache_get,proxy_cache_set,pyodide_js_init,pyproxy_AsPyObject,pyproxy_Check,pyproxy_new,pyproxy_new_ex,python2js__default_converter_js,python2js__eager_converter_js,python2js_custom__create_jscontext,random_get:_random_get,raw_call_js,rectangleColor:_rectangleColor,rectangleRGBA:_rectangleRGBA,restoreState,restore_stderr,rotozoomSurface:_rotozoomSurface,saveState,setNetworkCallback:_setNetworkCallback,set_pyodide_module,set_suspender,setprotoent:_setprotoent,stackAlloc:_stackAlloc,stackRestore:_stackRestore,stackSave:_stackSave,strptime:_strptime,strptime_l:_strptime_l,syncifyHandler,throw_no_gil,wrap_async_generator,wrap_generator,zoomSurface:_zoomSurface};function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p=f=>()=>f()>>>0;var makeWrapper_pP=f=>a0=>f(a0)>>>0;var makeWrapper_ppp=f=>(a0,a1)=>f(a0,a1)>>>0;var makeWrapper_p_=f=>a0=>f(a0)>>>0;var makeWrapper_pppp=f=>(a0,a1,a2)=>f(a0,a1,a2)>>>0;var makeWrapper_ppppp=f=>(a0,a1,a2,a3)=>f(a0,a1,a2,a3)>>>0;wasmExports["malloc"]=makeWrapper_pp(wasmExports["malloc"]);wasmExports["__errno_location"]=makeWrapper_p(wasmExports["__errno_location"]);wasmExports["sbrk"]=makeWrapper_pP(wasmExports["sbrk"]);wasmExports["calloc"]=makeWrapper_ppp(wasmExports["calloc"]);wasmExports["realloc"]=makeWrapper_ppp(wasmExports["realloc"]);wasmExports["emscripten_stack_get_base"]=makeWrapper_p(wasmExports["emscripten_stack_get_base"]);wasmExports["emscripten_stack_get_end"]=makeWrapper_p(wasmExports["emscripten_stack_get_end"]);wasmExports["strerror"]=makeWrapper_p_(wasmExports["strerror"]);wasmExports["pthread_self"]=makeWrapper_p(wasmExports["pthread_self"]);wasmExports["emscripten_builtin_malloc"]=makeWrapper_pp(wasmExports["emscripten_builtin_malloc"]);wasmExports["memcpy"]=makeWrapper_pppp(wasmExports["memcpy"]);wasmExports["_emscripten_find_dylib"]=makeWrapper_ppppp(wasmExports["_emscripten_find_dylib"]);wasmExports["emscripten_builtin_memalign"]=makeWrapper_ppp(wasmExports["emscripten_builtin_memalign"]);wasmExports["emscripten_stack_get_current"]=makeWrapper_p(wasmExports["emscripten_stack_get_current"]);wasmExports["emscripten_main_runtime_thread_id"]=makeWrapper_p(wasmExports["emscripten_main_runtime_thread_id"]);wasmExports["memalign"]=makeWrapper_ppp(wasmExports["memalign"]);wasmExports["emscripten_builtin_calloc"]=makeWrapper_ppp(wasmExports["emscripten_builtin_calloc"]);wasmExports["emscripten_get_sbrk_ptr"]=makeWrapper_p(wasmExports["emscripten_get_sbrk_ptr"]);wasmExports["_emscripten_stack_alloc"]=makeWrapper_pp(wasmExports["_emscripten_stack_alloc"]);wasmExports["__cxa_get_exception_ptr"]=makeWrapper_pp(wasmExports["__cxa_get_exception_ptr"]);return wasmExports}function callMain(args=[]){var entryFunction=resolveGlobalSymbol("main").sym;if(!entryFunction)return;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;for(var arg of args){HEAPU32[argv_ptr>>>2>>>0]=stringToUTF8OnStack(arg);argv_ptr+=4}HEAPU32[argv_ptr>>>2>>>0]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();var noInitialRun=Module["noInitialRun"]||false;if(!noInitialRun)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} +;return moduleRtn}export default _createPyodideModule; diff --git a/public/engines/python/pyodide.asm.wasm b/public/engines/python/pyodide.asm.wasm new file mode 100644 index 0000000..c578a62 Binary files /dev/null and b/public/engines/python/pyodide.asm.wasm differ diff --git a/public/engines/python/pyodide.mjs b/public/engines/python/pyodide.mjs new file mode 100644 index 0000000..a380d9b --- /dev/null +++ b/public/engines/python/pyodide.mjs @@ -0,0 +1,3 @@ +var Q=Object.defineProperty;var o=(e,t)=>Q(e,"name",{value:t,configurable:!0}),R=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var W=(()=>{for(var e=new Uint8Array(128),t=0;t<64;t++)e[t<26?t+65:t<52?t+71:t<62?t-4:t*4-205]=t;return n=>{for(var i=n.length,s=new Uint8Array((i-(n[i-1]=="=")-(n[i-2]=="="))*3/4|0),r=0,a=0;r>4,s[a++]=l<<4|d>>2,s[a++]=d<<6|u}return s}})();function Z(e){return!isNaN(parseFloat(e))&&isFinite(e)}o(Z,"_isNumber");function P(e){return e.charAt(0).toUpperCase()+e.substring(1)}o(P,"_capitalize");function D(e){return function(){return this[e]}}o(D,"_getter");var N=["isConstructor","isEval","isNative","isToplevel"],I=["columnNumber","lineNumber"],S=["fileName","functionName","source"],ee=["args"],te=["evalOrigin"],F=N.concat(I,S,ee,te);function p(e){if(e)for(var t=0;t-1&&(r=r.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var a=r.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),c=a.match(/ (\(.+\)$)/);a=c?a.replace(c[0],""):a;var l=this.extractLocation(c?c[1]:a),d=c&&a||void 0,u=["eval",""].indexOf(l[0])>-1?void 0:l[0];return new A({functionName:d,fileName:u,lineNumber:l[1],columnNumber:l[2],source:r})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:o(function(i){var s=i.stack.split(` +`).filter(function(r){return!r.match(t)},this);return s.map(function(r){if(r.indexOf(" > eval")>-1&&(r=r.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),r.indexOf("@")===-1&&r.indexOf(":")===-1)return new A({functionName:r});var a=/((.*".+"[^@]*)?[^@]*)(?:@)/,c=r.match(a),l=c&&c[1]?c[1]:void 0,d=this.extractLocation(r.replace(a,""));return new A({functionName:l,fileName:d[0],lineNumber:d[1],columnNumber:d[2],source:r})},this)},"ErrorStackParser$$parseFFOrSafari")}}o(ne,"ErrorStackParser");var re=new ne;var M=re;function ie(){if(typeof API<"u"&&API!==globalThis.API)return API.runtimeEnv;let e=typeof Bun<"u",t=typeof Deno<"u",n=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&!process.browser,i=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Chrome")===-1&&navigator.userAgent.indexOf("Safari")>-1,s=typeof read=="function"&&typeof load=="function",r=typeof navigator=="object"&&navigator.userAgent?.includes("Cloudflare-Workers");return oe({IN_BUN:e,IN_DENO:t,IN_NODE:n,IN_SAFARI:i,IN_SHELL:s,IN_WORKERD:r})}o(ie,"getGlobalRuntimeEnv");var f=ie();function oe(e){let t=e.IN_NODE&&typeof module<"u"&&module.exports&&typeof R=="function"&&typeof __dirname=="string",n=e.IN_NODE&&!t,i=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,s=i&&typeof window<"u"&&typeof window.document<"u"&&typeof document.createElement=="function"&&"sessionStorage"in window&&typeof globalThis.importScripts!="function",r=i&&typeof globalThis.WorkerGlobalScope<"u"&&typeof globalThis.self<"u"&&globalThis.self instanceof globalThis.WorkerGlobalScope;if(r&&ae())throw new Error("Classic web workers are not supported");let a={...e,IN_BROWSER:i,IN_BROWSER_MAIN_THREAD:s,IN_BROWSER_WEB_WORKER:r,IN_NODE_COMMONJS:t,IN_NODE_ESM:n};if(!(a.IN_BROWSER_MAIN_THREAD||a.IN_BROWSER_WEB_WORKER||a.IN_NODE||a.IN_SHELL||a.IN_WORKERD))throw new Error(`Cannot determine runtime environment: ${JSON.stringify(a)}`);return a}o(oe,"calculateDerivedFlags");function ae(){try{return globalThis.importScripts("data:text/javascript,"),!0}catch{return!1}}o(ae,"isClassicWorker");var $,x,se,B,L;async function C(){if(!f.IN_NODE||($=(await import("node:url")).default,B=await import("node:fs"),L=await import("node:fs/promises"),se=(await import("node:vm")).default,x=await import("node:path"),T=x.sep,typeof R<"u"))return;let e=B,t=await import("node:crypto"),n=await import("ws"),i=await import("node:child_process"),s={fs:e,crypto:t,ws:n,child_process:i};globalThis.require=function(r){return s[r]}}o(C,"initNodeModules");function le(e,t){return x.resolve(t||".",e)}o(le,"node_resolvePath");function ce(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}o(ce,"browser_resolvePath");var w;f.IN_NODE?w=le:f.IN_SHELL?w=o(e=>e,"resolvePath"):w=ce;var T;f.IN_NODE||(T="/");function de(e,t){return e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?{response:fetch(e)}:{binary:L.readFile(e).then(n=>new Uint8Array(n.buffer,n.byteOffset,n.byteLength))}}o(de,"node_getBinaryResponse");function ue(e,t){if(e.startsWith("file://")&&(e=e.slice(7)),e.includes("://"))throw new Error("Shell cannot fetch urls");return{binary:Promise.resolve(new Uint8Array(readbuffer(e)))}}o(ue,"shell_getBinaryResponse");function fe(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}o(fe,"browser_getBinaryResponse");var _;f.IN_NODE?_=de:f.IN_SHELL?_=ue:_=fe;async function j(e,t){let{response:n,binary:i}=_(e,t);if(i)return i;let s=await n;if(!s.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await s.arrayBuffer())}o(j,"loadBinaryFile");var O;f.IN_NODE?O=me:O=o(async e=>await import(e),"loadScript");async function me(e){return e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?await import(e):await import($.pathToFileURL(e).href)}o(me,"nodeLoadScript");async function H(e){if(f.IN_NODE){await C();let t=await L.readFile(e,{encoding:"utf8"});return JSON.parse(t)}else if(f.IN_SHELL){let t=read(e);return JSON.parse(t)}else return await(await fetch(e)).json()}o(H,"loadLockFile");async function J(){if(f.IN_NODE_COMMONJS)return __dirname;let e;try{throw new Error}catch(i){e=i}let t=M.parse(e)[0].fileName;if(f.IN_NODE&&!t.startsWith("file://")&&(t=`file://${t}`),f.IN_NODE_ESM){let i=await import("node:path");return(await import("node:url")).fileURLToPath(i.dirname(t))}let n=t.lastIndexOf(T);if(n===-1)throw new Error("Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.");return t.slice(0,n)}o(J,"calculateDirname");function V(e){return e.substring(0,e.lastIndexOf("/")+1)||globalThis.location?.toString()||"."}o(V,"calculateInstallBaseUrl");function z(e){let t=e.FS,n=e.FS.filesystems.MEMFS,i=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:o(function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},"mount"),syncfs:o(async(r,a,c)=>{try{let l=s.getLocalSet(r),d=await s.getRemoteSet(r),u=a?d:l,y=a?l:d;await s.reconcile(r,u,y),c(null)}catch(l){c(l)}},"syncfs"),getLocalSet:o(r=>{let a=Object.create(null);function c(u){return u!=="."&&u!==".."}o(c,"isRealDir");function l(u){return y=>i.join2(u,y)}o(l,"toAbsolute");let d=t.readdir(r.mountpoint).filter(c).map(l(r.mountpoint));for(;d.length;){let u=d.pop(),y=t.stat(u);t.isDir(y.mode)&&d.push.apply(d,t.readdir(u).filter(c).map(l(u))),a[u]={timestamp:y.mtime,mode:y.mode}}return{type:"local",entries:a}},"getLocalSet"),getRemoteSet:o(async r=>{let a=Object.create(null),c=await pe(r.opts.fileSystemHandle);for(let[l,d]of c)l!=="."&&(a[i.join2(r.mountpoint,l)]={timestamp:d.kind==="file"?new Date((await d.getFile()).lastModified):new Date,mode:d.kind==="file"?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:a,handles:c}},"getRemoteSet"),loadLocalEntry:o(r=>{let c=t.lookupPath(r,{}).node,l=t.stat(r);if(t.isDir(l.mode))return{timestamp:l.mtime,mode:l.mode};if(t.isFile(l.mode))return c.contents=n.getFileDataAsTypedArray(c),{timestamp:l.mtime,mode:l.mode,contents:c.contents};throw new Error("node type not supported")},"loadLocalEntry"),storeLocalEntry:o((r,a)=>{if(t.isDir(a.mode))t.mkdirTree(r,a.mode);else if(t.isFile(a.mode))t.writeFile(r,a.contents,{canOwn:!0});else throw new Error("node type not supported");t.chmod(r,a.mode),t.utime(r,a.timestamp,a.timestamp)},"storeLocalEntry"),removeLocalEntry:o(r=>{var a=t.stat(r);t.isDir(a.mode)?t.rmdir(r):t.isFile(a.mode)&&t.unlink(r)},"removeLocalEntry"),loadRemoteEntry:o(async r=>{if(r.kind==="file"){let a=await r.getFile();return{contents:new Uint8Array(await a.arrayBuffer()),mode:s.FILE_MODE,timestamp:new Date(a.lastModified)}}else{if(r.kind==="directory")return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},"loadRemoteEntry"),storeRemoteEntry:o(async(r,a,c)=>{let l=r.get(i.dirname(a)),d=t.isFile(c.mode)?await l.getFileHandle(i.basename(a),{create:!0}):await l.getDirectoryHandle(i.basename(a),{create:!0});if(d.kind==="file"){let u=await d.createWritable();await u.write(c.contents),await u.close()}r.set(a,d)},"storeRemoteEntry"),removeRemoteEntry:o(async(r,a)=>{await r.get(i.dirname(a)).removeEntry(i.basename(a)),r.delete(a)},"removeRemoteEntry"),reconcile:o(async(r,a,c)=>{let l=0,d=[];Object.keys(a.entries).forEach(function(m){let g=a.entries[m],h=c.entries[m];(!h||t.isFile(g.mode)&&g.timestamp.getTime()>h.timestamp.getTime())&&(d.push(m),l++)}),d.sort();let u=[];if(Object.keys(c.entries).forEach(function(m){a.entries[m]||(u.push(m),l++)}),u.sort().reverse(),!l)return;let y=a.type==="remote"?a.handles:c.handles;for(let m of d){let g=i.normalize(m.replace(r.mountpoint,"/")).substring(1);if(c.type==="local"){let h=y.get(g),X=await s.loadRemoteEntry(h);s.storeLocalEntry(m,X)}else{let h=s.loadLocalEntry(m);await s.storeRemoteEntry(y,g,h)}}for(let m of u)if(c.type==="local")s.removeLocalEntry(m);else{let g=i.normalize(m.replace(r.mountpoint,"/")).substring(1);await s.removeRemoteEntry(y,g)}},"reconcile")};e.FS.filesystems.NATIVEFS_ASYNC=s}o(z,"initializeNativeFS");var pe=o(async e=>{let t=[];async function n(s){for await(let r of s.values())t.push(r),r.kind==="directory"&&await n(r)}o(n,"collect"),await n(e);let i=new Map;i.set(".",e);for(let s of t){let r=(await e.resolve(s)).join("/");i.set(r,s)}return i},"getFsHandles");var G=W("AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECBygCE0pzdl9HZXRFcnJvcl9pbXBvcnQAAA5Kc3ZFcnJvcl9DaGVjawABChMCBwD7AQD7GwsJACAA+xr7FAAL");var ge=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints<"u"&&navigator.maxTouchPoints>1)))try{let t=await WebAssembly.compile(G);return await WebAssembly.instantiate(t)}catch(t){if(t instanceof WebAssembly.CompileError)return;throw t}}();async function K(){let e=await ge;if(e)return e.exports;let t=Symbol("error marker");return{Jsv_GetError_import:o(()=>t,"Jsv_GetError_import"),JsvError_Check:o(n=>n===t,"JsvError_Check")}}o(K,"getJsvErrorImport");function q(e){let t={config:e,runtimeEnv:f},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:Ne(e),print:e.stdout,printErr:e.stderr,onExit(i){n.exitCode=i},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:o(i=>e.indexURL+i,"locateFile"),instantiateWasm:Ie(e.indexURL)};return n}o(q,"createSettings");function ve(e){return function(t){let n="/";try{t.FS.mkdirTree(e)}catch(i){console.error(`Error occurred while making a home directory '${e}':`),console.error(i),console.error(`Using '${n}' for a home directory instead`),e=n}t.FS.chdir(e)}}o(ve,"createHomeDirectory");function be(e){return function(t){Object.assign(t.ENV,e)}}o(be,"setEnvironment");function Ee(e){return e?[async t=>{t.addRunDependency("fsInitHook");try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency("fsInitHook")}}]:[]}o(Ee,"callFsInitHook");function Pe(e){let t=e.HEAPU32[e._Py_Version>>>2],n=t>>>24&255,i=t>>>16&255,s=t>>>8&255;return[n,i,s]}o(Pe,"computeVersionTuple");function he(e){let t=j(e);return async n=>{n.API.pyVersionTuple=Pe(n);let[i,s]=n.API.pyVersionTuple;n.FS.mkdirTree("/lib"),n.API.sitePackages=`/lib/python${i}.${s}/site-packages`,n.FS.mkdirTree(n.API.sitePackages),n.addRunDependency("install-stdlib");try{let r=await t;n.FS.writeFile(`/lib/python${i}${s}.zip`,r)}catch(r){console.error("Error occurred while installing the standard library:"),console.error(r)}finally{n.removeRunDependency("install-stdlib")}}}o(he,"installStdlib");function Ne(e){let t;return e.stdLibURL!=null?t=e.stdLibURL:t=e.indexURL+"python_stdlib.zip",[he(t),ve(e.env.HOME),be(e.env),z,...Ee(e.fsInit)]}o(Ne,"getFileSystemInitializationFuncs");function Ie(e){if(typeof WasmOffsetConverter<"u")return;let{binary:t,response:n}=_(e+"pyodide.asm.wasm"),i=K();return function(s,r){return async function(){let{Jsv_GetError_import:a,JsvError_Check:c}=await i;s.env.Jsv_GetError_import=a,s.env.JsvError_Check=c;try{let l;n?l=await WebAssembly.instantiateStreaming(n,s):l=await WebAssembly.instantiate(await t,s);let{instance:d,module:u}=l;r(d,u)}catch(l){console.warn("wasm instantiation failed!"),console.warn(l)}}(),{}}}o(Ie,"getInstantiateWasmFunc");var Y="314.0.3";function k(e){return e===void 0||e.endsWith("/")?e:e+"/"}o(k,"withTrailingSlash");var U=Y;async function Se(e={}){if(await C(),e.lockFileContents&&e.lockFileURL)throw new Error("Can't pass both lockFileContents and lockFileURL");let t=e.indexURL||await J();if(t=k(w(t)),e.packageBaseUrl=k(e.packageBaseUrl),e.cdnUrl=k(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v${U}/full/`),!e.lockFileContents){let s=e.lockFileURL??t+"pyodide-lock.json";e.lockFileContents=H(s),e.packageBaseUrl??=V(s)}e.indexURL=t,e.packageCacheDir&&(e.packageCacheDir=k(w(e.packageCacheDir)));let n={jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:"2cf7085e96ffaa58f5400af724c388859f9e21586cf6f254da008c60685a5d05"},i=Object.assign(n,e);return i.env.HOME??="/home/pyodide",i.env.PYTHONINSPECT??="1",i}o(Se,"initializeConfiguration");function we(e){let t=q(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}o(we,"createEmscriptenSettings");async function _e(e){if(e.createPyodideModule)return e.createPyodideModule;let t=`${e.indexURL}pyodide.asm.mjs`;return(await O(t)).default}o(_e,"loadWasmScript");async function ke(e,t){if(!e._loadSnapshot)return;let n=await e._loadSnapshot,i=ArrayBuffer.isView(n)?n:new Uint8Array(n);return t.noInitialRun=!0,t.INITIAL_MEMORY=i.length,i}o(ke,"prepareSnapshot");async function Re(e,t){let n=await e(t);if(t.exitCode!==void 0)throw new n.ExitStatus(t.exitCode);return n}o(Re,"instantiatePyodideModule");function Fe(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==U&&t.checkAPIVersion)throw new Error(`Pyodide version does not match: '${U}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);e.locateFile=i=>{throw i.endsWith(".so")?new Error(`Failed to find dynamic library "${i}"`):new Error(`Unexpected call to locateFile("${i}")`)}}o(Fe,"configureAPI");function Ae(e,t,n){let i=e.API,s;return t&&(s=i.restoreSnapshot(t)),i.finalizeBootstrap(s,n._snapshotDeserializer)}o(Ae,"bootstrapPyodide");async function Oe(e,t){let n=e._api;return n.sys.path.insert(0,""),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(t.stdin,t.stdout,t.stderr),e}o(Oe,"finalizeSetup");async function dt(e={}){let t=await Se(e),n=we(t),i=await _e(t),s=await ke(t,n),r=await Re(i,n);Fe(r,t);let a=Ae(r,s,t);return await Oe(a,t)}o(dt,"loadPyodide");export{dt as loadPyodide,U as version}; diff --git a/public/engines/python/python_stdlib.zip b/public/engines/python/python_stdlib.zip new file mode 100644 index 0000000..5b5d5f6 Binary files /dev/null and b/public/engines/python/python_stdlib.zip differ diff --git a/public/toolbox-app.json b/public/toolbox-app.json index a915b18..4cfed6a 100644 --- a/public/toolbox-app.json +++ b/public/toolbox-app.json @@ -3,7 +3,7 @@ "schemaVersion": 1, "id": "de.add-ideas.regex-tools", "name": "Regex Tools", - "version": "0.2.0", + "version": "0.3.0", "description": "Develop, explain, test and apply regular expressions locally in the browser.", "entry": "./", "icon": "./favicon.svg", @@ -36,5 +36,15 @@ "label": "Source", "url": "https://git.add-ideas.de/zemion/regex-tools" } + ], + "assets": [ + "./engines/pcre2/pcre2.mjs", + "./engines/pcre2/pcre2.wasm", + "./engines/python/pyodide.mjs", + "./engines/python/pyodide.asm.mjs", + "./engines/python/pyodide.asm.wasm", + "./engines/python/pyodide-lock.json", + "./engines/python/python_stdlib.zip", + "./engines/java/java-regex.mjs" ] } diff --git a/scripts/build-engines.mjs b/scripts/build-engines.mjs index 6409c0e..589abcf 100644 --- a/scripts/build-engines.mjs +++ b/scripts/build-engines.mjs @@ -40,15 +40,17 @@ const entries = (await readdir(engineDirectory)).sort(); if ( typeof packageJson.version !== "string" || - entries.length !== 2 || + entries.length !== 4 || entries[0] !== "README.md" || - entries[1] !== "pcre2" + entries[1] !== "java" || + entries[2] !== "pcre2" || + entries[3] !== "python" ) { throw new Error( - "The production build requires the documented PCRE2 runtime pack.", + "The production build requires the documented Java, PCRE2 and Python runtime packs.", ); } console.log( - "The checked-in PCRE2 runtime pack is present; no release-time download or engine compilation is needed.", + "The checked-in Java, PCRE2 and Python runtime packs are present; no release-time download or engine compilation is needed.", ); diff --git a/scripts/install-java-engine.mjs b/scripts/install-java-engine.mjs new file mode 100644 index 0000000..b93fe6a --- /dev/null +++ b/scripts/install-java-engine.mjs @@ -0,0 +1,16 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { installJavaPack } from "./java-engine-pack.mjs"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const arguments_ = process.argv.slice(2); +if (arguments_.length > 1) { + throw new Error( + "Usage: node scripts/install-java-engine.mjs [.engine-build/java]", + ); +} +const source = path.resolve(root, arguments_[0] ?? ".engine-build/java"); +const result = await installJavaPack(source, root); +console.log( + `Installed verified ${result.metadata.semanticIdentity} assets at ${result.output}.`, +); diff --git a/scripts/install-python-engine.mjs b/scripts/install-python-engine.mjs new file mode 100644 index 0000000..48c9609 --- /dev/null +++ b/scripts/install-python-engine.mjs @@ -0,0 +1,16 @@ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { installPythonPack } from "./python-engine-pack.mjs"; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const arguments_ = process.argv.slice(2); +if (arguments_.length > 1) { + throw new Error( + "Usage: node scripts/install-python-engine.mjs [.engine-build/python]", + ); +} +const source = path.resolve(root, arguments_[0] ?? ".engine-build/python"); +const result = await installPythonPack(source, root); +console.log( + `Installed verified ${result.metadata.runtime} / ${result.metadata.engineVersion} assets at ${result.output}.`, +); diff --git a/scripts/java-engine-pack.mjs b/scripts/java-engine-pack.mjs new file mode 100644 index 0000000..2239781 --- /dev/null +++ b/scripts/java-engine-pack.mjs @@ -0,0 +1,603 @@ +import { spawn } from "node:child_process"; +import { createHash } from "node:crypto"; +import { + access, + constants as fsConstants, + copyFile, + lstat, + mkdir, + mkdtemp, + readFile, + readdir, + realpath, + rename, + rm, + stat, + writeFile, +} from "node:fs/promises"; +import { homedir } from "node:os"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +export const JAVA_LOCK = Object.freeze({ + bridgeAbi: 1, + engineIdentity: "TeaVM java.util.regex 0.15.0", + engineVersion: "0.15.0", + sourceDateEpoch: 1_780_759_630, + maximumPatternUtf16: 65_536, + maximumSubjectBytes: 16_777_216, + maximumReplacementUtf16: 65_536, + maximumMatches: 10_000, + maximumCaptureRows: 100_000, + maximumCaptureGroups: 1_000, + maximumOutputBytes: 67_108_864, + source: Object.freeze({ + repository: "https://github.com/konsoletyper/teavm.git", + tag: "0.15.0", + commit: "ee91b03e616c4b45401cd11fb0cd7eb0daf6649b", + tree: "1cdc5c332d5809828c8952f96d73f9e7504a0cec", + license: "Apache-2.0", + licenseSha256: + "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + noticeSha256: + "6c2b3372a6beee7fbaad482248ac0f5ad2b099d92ff2a528c04261cc9c0636f4", + }), + toolchain: Object.freeze({ + mavenVersion: "3.9.15", + javaVersion: "25.0.3", + artifacts: Object.freeze([ + Object.freeze({ + coordinate: "org.teavm:teavm-classlib:0.15.0", + relativePath: + "org/teavm/teavm-classlib/0.15.0/teavm-classlib-0.15.0.jar", + sha256: + "7d805be4670a892a34c89d9d750a8afd65e2f8201b7b3a10343634ea19d1c410", + }), + Object.freeze({ + coordinate: "org.teavm:teavm-jso:0.15.0", + relativePath: "org/teavm/teavm-jso/0.15.0/teavm-jso-0.15.0.jar", + sha256: + "58b337b93924106bf819c45890c7c231a0c740145afe77795f1e0f099f621d71", + }), + Object.freeze({ + coordinate: "org.teavm:teavm-maven-plugin:0.15.0", + relativePath: + "org/teavm/teavm-maven-plugin/0.15.0/teavm-maven-plugin-0.15.0.jar", + sha256: + "1133e16e45f1fd3cb93129fd96d142e1f5ef3608891d83b2273442d5446a3879", + }), + ]), + }), +}); + +const PACK_FILES = Object.freeze([ + "LICENSE.txt", + "NOTICE.txt", + "SHA256SUMS", + "engine-metadata.json", + "java-regex.mjs", +]); +const CHECKSUM_FILES = Object.freeze([ + "LICENSE.txt", + "NOTICE.txt", + "engine-metadata.json", + "java-regex.mjs", +]); +const BRIDGE_SOURCE_FILES = Object.freeze([ + "engines/java/pom.xml", + "engines/java/README.md", + "engines/java/LICENSE-TeaVM.txt", + "engines/java/NOTICE-TeaVM.txt", + "engines/java/src/main/java/de/addideas/regextools/javaengine/RegexBridge.java", +]); +const EXPORTED_FUNCTIONS = Object.freeze([ + "bridgeAbiVersion", + "engineIdentity", + "execute", + "replace", + "selfTest", +]); + +function sha256(data) { + return createHash("sha256").update(data).digest("hex"); +} + +async function sha256File(file) { + return sha256(await readFile(file)); +} + +async function assertRealDirectory(candidate, label) { + const details = await lstat(candidate).catch(() => null); + if (!details?.isDirectory() || details.isSymbolicLink()) { + throw new Error(`${label} must be a real directory: ${candidate}`); + } + return realpath(candidate); +} + +async function assertRegularFile(candidate, label) { + const details = await lstat(candidate).catch(() => null); + if (!details?.isFile() || details.isSymbolicLink()) { + throw new Error( + `${label} must be a regular, non-symlink file: ${candidate}`, + ); + } + return realpath(candidate); +} + +async function resolveExecutable(name, environment = process.env) { + for (const directory of (environment.PATH ?? "").split(path.delimiter)) { + if (!directory) continue; + const candidate = path.join(directory, name); + try { + await access(candidate, fsConstants.X_OK); + if ((await stat(candidate)).isFile()) return realpath(candidate); + } catch { + // Continue through PATH. + } + } + throw new Error(`${name} is required on PATH for the TeaVM Java build.`); +} + +function commandLabel(command, arguments_) { + return [command, ...arguments_] + .map((part) => + /^[A-Za-z0-9_./:=,+-]+$/u.test(part) ? part : JSON.stringify(part), + ) + .join(" "); +} + +async function run(command, arguments_, options = {}) { + const child = spawn(command, arguments_, { + cwd: options.cwd, + env: options.env, + stdio: ["ignore", "pipe", "pipe"], + }); + const stdout = []; + const stderr = []; + child.stdout.on("data", (chunk) => stdout.push(chunk)); + child.stderr.on("data", (chunk) => stderr.push(chunk)); + const result = await new Promise((resolve, reject) => { + child.once("error", reject); + child.once("close", (code, signal) => resolve({ code, signal })); + }); + const output = Buffer.concat(stdout).toString("utf8"); + const errorOutput = Buffer.concat(stderr).toString("utf8"); + if (result.code !== 0) { + const detail = [output, errorOutput].filter(Boolean).join("\n").trim(); + throw new Error( + `${commandLabel(command, arguments_)} failed with ${ + result.signal ? `signal ${result.signal}` : `exit code ${result.code}` + }${detail ? `:\n${detail}` : "."}`, + ); + } + return { stdout: output, stderr: errorOutput }; +} + +async function verifyToolchain() { + const maven = await resolveExecutable("mvn"); + const java = await resolveExecutable("java"); + const mavenVersion = await run(maven, ["--version"]); + const javaVersion = await run(java, ["-version"]); + if ( + !mavenVersion.stdout.startsWith( + `Apache Maven ${JAVA_LOCK.toolchain.mavenVersion} `, + ) + ) { + throw new Error( + `The Java pack requires Maven ${JAVA_LOCK.toolchain.mavenVersion}.`, + ); + } + const javaText = `${javaVersion.stdout}\n${javaVersion.stderr}`; + if ( + !javaText.includes(`openjdk version "${JAVA_LOCK.toolchain.javaVersion}`) + ) { + throw new Error( + `The Java pack requires OpenJDK ${JAVA_LOCK.toolchain.javaVersion}.`, + ); + } + + const repository = path.join(homedir(), ".m2", "repository"); + for (const artifact of JAVA_LOCK.toolchain.artifacts) { + const file = await assertRegularFile( + path.join(repository, artifact.relativePath), + artifact.coordinate, + ); + const actual = await sha256File(file); + if (actual !== artifact.sha256) { + throw new Error( + `${artifact.coordinate} SHA-256 mismatch: expected ${artifact.sha256}, got ${actual}.`, + ); + } + } + return { maven }; +} + +function cleanBuildEnvironment() { + const environment = { ...process.env }; + for (const variable of [ + "CLASSPATH", + "JAVA_TOOL_OPTIONS", + "MAVEN_ARGS", + "MAVEN_OPTS", + "_JAVA_OPTIONS", + ]) { + delete environment[variable]; + } + environment.LANG = "C"; + environment.LC_ALL = "C"; + environment.SOURCE_DATE_EPOCH = String(JAVA_LOCK.sourceDateEpoch); + environment.TZ = "UTC"; + return environment; +} + +async function sourceFiles(root) { + return Promise.all( + BRIDGE_SOURCE_FILES.map(async (relativePath) => { + const file = await assertRegularFile( + path.join(root, relativePath), + `Java bridge source ${relativePath}`, + ); + const contents = await readFile(file); + return { + path: relativePath, + sha256: sha256(contents), + bytes: contents.byteLength, + }; + }), + ); +} + +async function fileMetadata(pack, name) { + const contents = await readFile(path.join(pack, name)); + return { path: name, sha256: sha256(contents), bytes: contents.byteLength }; +} + +async function expectedMetadata(root, pack) { + return { + schemaVersion: 1, + engine: "java", + engineName: "TeaVM java.util.regex", + engineVersion: JAVA_LOCK.engineVersion, + semanticIdentity: + "TeaVM 0.15.0 classlib java.util.regex; Apache Harmony-derived; not OpenJDK", + status: "production-compatibility-runtime", + bridge: { + abiVersion: JAVA_LOCK.bridgeAbi, + maximumPatternUtf16: JAVA_LOCK.maximumPatternUtf16, + maximumSubjectBytes: JAVA_LOCK.maximumSubjectBytes, + maximumReplacementUtf16: JAVA_LOCK.maximumReplacementUtf16, + maximumMatches: JAVA_LOCK.maximumMatches, + maximumCaptureRows: JAVA_LOCK.maximumCaptureRows, + maximumCaptureGroups: JAVA_LOCK.maximumCaptureGroups, + maximumOutputBytes: JAVA_LOCK.maximumOutputBytes, + offsetUnit: "utf16", + exports: [...EXPORTED_FUNCTIONS], + sourceFiles: await sourceFiles(root), + }, + source: { + repository: JAVA_LOCK.source.repository, + tag: JAVA_LOCK.source.tag, + commitSha1: JAVA_LOCK.source.commit, + treeSha1: JAVA_LOCK.source.tree, + license: JAVA_LOCK.source.license, + upstreamLicenseSha256: JAVA_LOCK.source.licenseSha256, + upstreamNoticeSha256: JAVA_LOCK.source.noticeSha256, + }, + toolchain: { + mavenVersion: JAVA_LOCK.toolchain.mavenVersion, + javaVersion: JAVA_LOCK.toolchain.javaVersion, + teaVmArtifacts: JAVA_LOCK.toolchain.artifacts.map( + ({ coordinate, sha256: digest }) => ({ + coordinate, + sha256: digest, + }), + ), + }, + configuration: { + target: "JavaScript ES2015 module", + minified: true, + optimizationLevel: "ADVANCED", + sourceMaps: false, + filesystem: false, + supportedApplicationFlags: ["g", "i", "d", "m", "s", "u", "x", "U"], + unixLines: "d maps to TeaVM Pattern.UNIX_LINES.", + unicodeCharacterClassCompatibility: + "TeaVM 0.15.0 lacks OpenJDK UNICODE_CHARACTER_CLASS; U implies Unicode case folding only.", + replacement: + "TeaVM 0.15.0 Matcher appendReplacement/appendTail semantics: only single-digit $n references; ${name} is rejected; not OpenJDK Matcher parity.", + }, + sourceDateEpoch: JAVA_LOCK.sourceDateEpoch, + files: await Promise.all( + ["LICENSE.txt", "NOTICE.txt", "java-regex.mjs"].map((name) => + fileMetadata(pack, name), + ), + ), + }; +} + +async function expectedChecksums(pack) { + const lines = await Promise.all( + CHECKSUM_FILES.map( + async (name) => `${await sha256File(path.join(pack, name))} ${name}`, + ), + ); + return `${lines.join("\n")}\n`; +} + +function equalJson(left, right) { + return JSON.stringify(left) === JSON.stringify(right); +} + +function readField(payload, state) { + const colon = payload.indexOf(":", state.cursor); + if (colon < 0) throw new Error("Malformed Java smoke-test payload."); + const length = Number.parseInt(payload.slice(state.cursor, colon), 10); + if (!Number.isSafeInteger(length) || length < 0) { + throw new Error("Malformed Java smoke-test field length."); + } + const start = colon + 1; + const end = start + length; + if (end > payload.length) { + throw new Error("Truncated Java smoke-test payload."); + } + state.cursor = end; + return payload.slice(start, end); +} + +async function smokeJavaPack(pack) { + const moduleFile = path.join(pack, "java-regex.mjs"); + const imported = await import( + `${pathToFileURL(moduleFile).href}?verify=${await sha256File(moduleFile)}` + ); + for (const name of EXPORTED_FUNCTIONS) { + if (typeof imported[name] !== "function") { + throw new Error(`The Java module is missing export ${name}.`); + } + } + if ( + imported.bridgeAbiVersion() !== JAVA_LOCK.bridgeAbi || + imported.engineIdentity() !== JAVA_LOCK.engineIdentity || + imported.selfTest() !== 0 + ) { + throw new Error("The TeaVM Java bridge identity or self-test failed."); + } + + const execution = imported.execute("(?<=a)(b)\\1", "abb", 0, true, 10, 10); + const executionState = { cursor: 0 }; + const executionFields = Array.from({ length: 9 }, () => + readField(execution, executionState), + ); + if ( + executionState.cursor !== execution.length || + JSON.stringify(executionFields) !== + JSON.stringify(["1", "ok", "1", "0", "1", "1", "3", "1", "2"]) + ) { + throw new Error("The TeaVM Java matching smoke test failed."); + } + + const replacement = imported.replace("(a)", "a a", "<$1>", 0, true, 10, 10); + const replacementState = { cursor: 0 }; + const replacementFields = []; + while (replacementState.cursor < replacement.length) { + replacementFields.push(readField(replacement, replacementState)); + } + if ( + replacementFields.at(-2) !== "0" || + replacementFields.at(-1) !== " " + ) { + throw new Error("The TeaVM Java replacement smoke test failed."); + } +} + +export async function verifyJavaPack(packDirectory, root) { + const repositoryRoot = await assertRealDirectory( + root, + "Regex Tools repository", + ); + const pack = await assertRealDirectory(packDirectory, "Java engine pack"); + const entries = (await readdir(pack, { withFileTypes: true })).sort( + (left, right) => + left.name < right.name ? -1 : left.name > right.name ? 1 : 0, + ); + if ( + entries.length !== PACK_FILES.length || + entries.some( + (entry, index) => + entry.name !== PACK_FILES[index] || + !entry.isFile() || + entry.isSymbolicLink(), + ) + ) { + throw new Error( + `The staged Java pack must contain only: ${PACK_FILES.join(", ")}.`, + ); + } + if ( + (await sha256File(path.join(pack, "LICENSE.txt"))) !== + JAVA_LOCK.source.licenseSha256 + ) { + throw new Error("The staged TeaVM licence does not match tag 0.15.0."); + } + const moduleText = await readFile(path.join(pack, "java-regex.mjs"), "utf8"); + if ( + moduleText.includes("sourceMappingURL") || + moduleText.includes("/mnt/") || + moduleText.includes("/home/") || + !moduleText.includes("as bridgeAbiVersion") || + !moduleText.includes("as engineIdentity") || + !moduleText.includes("as execute") || + !moduleText.includes("as replace") || + !moduleText.includes("as selfTest") + ) { + throw new Error( + "java-regex.mjs leaks a build path, has a source map, or lacks bridge exports.", + ); + } + + let metadata; + try { + metadata = JSON.parse( + await readFile(path.join(pack, "engine-metadata.json"), "utf8"), + ); + } catch (error) { + throw new Error("Java engine-metadata.json is not valid JSON.", { + cause: error, + }); + } + const expected = await expectedMetadata(repositoryRoot, pack); + if (!equalJson(metadata, expected)) { + throw new Error( + "The staged Java metadata does not match the pinned build contract.", + ); + } + if ( + (await readFile(path.join(pack, "SHA256SUMS"), "utf8")) !== + (await expectedChecksums(pack)) + ) { + throw new Error("The staged Java SHA256SUMS file is incorrect."); + } + await smokeJavaPack(pack); + return metadata; +} + +async function replaceDirectory(stage, target, label) { + const targetDetails = await lstat(target).catch(() => null); + if ( + targetDetails && + (!targetDetails.isDirectory() || targetDetails.isSymbolicLink()) + ) { + throw new Error(`${label} must be a real directory.`); + } + if (!targetDetails) { + await rename(stage, target); + return; + } + const backup = `${target}.replaced-${process.pid}`; + await rename(target, backup); + try { + await rename(stage, target); + } catch (error) { + await rename(backup, target); + throw error; + } + await rm(backup, { recursive: true }); +} + +export async function buildJavaPack(root, outputDirectory) { + const repositoryRoot = await assertRealDirectory( + root, + "Regex Tools repository", + ); + const engine = await assertRealDirectory( + path.join(repositoryRoot, "engines", "java"), + "Java engine source", + ); + const { maven } = await verifyToolchain(); + const environment = cleanBuildEnvironment(); + const buildArguments = [ + "--batch-mode", + "--no-transfer-progress", + "--offline", + "clean", + "package", + ]; + await run(maven, buildArguments, { cwd: engine, env: environment }); + const generated = await assertRegularFile( + path.join(engine, "target", "generated", "java-regex.mjs"), + "generated TeaVM module", + ); + const firstBuild = await readFile(generated); + await run(maven, buildArguments, { cwd: engine, env: environment }); + const secondBuild = await readFile(generated); + if (sha256(firstBuild) !== sha256(secondBuild)) { + throw new Error( + "Two clean TeaVM builds produced different Java module hashes.", + ); + } + + const output = path.resolve( + repositoryRoot, + outputDirectory ?? path.join(".engine-build", "java"), + ); + await mkdir(path.dirname(output), { recursive: true }); + const stage = await mkdtemp(path.join(path.dirname(output), ".java-build-")); + try { + await copyFile( + path.join(engine, "LICENSE-TeaVM.txt"), + path.join(stage, "LICENSE.txt"), + fsConstants.COPYFILE_EXCL, + ); + await copyFile( + path.join(engine, "NOTICE-TeaVM.txt"), + path.join(stage, "NOTICE.txt"), + fsConstants.COPYFILE_EXCL, + ); + await writeFile(path.join(stage, "java-regex.mjs"), secondBuild, { + flag: "wx", + }); + const metadata = await expectedMetadata(repositoryRoot, stage); + await writeFile( + path.join(stage, "engine-metadata.json"), + `${JSON.stringify(metadata, null, 2)}\n`, + { encoding: "utf8", flag: "wx" }, + ); + await writeFile( + path.join(stage, "SHA256SUMS"), + await expectedChecksums(stage), + { encoding: "utf8", flag: "wx" }, + ); + await verifyJavaPack(stage, repositoryRoot); + await replaceDirectory(stage, output, "Java build output"); + return { + output, + metadata, + moduleSha256: sha256(secondBuild), + moduleBytes: secondBuild.byteLength, + }; + } finally { + await rm(stage, { recursive: true, force: true }); + } +} + +export async function installJavaPack(packDirectory, root) { + const repositoryRoot = await assertRealDirectory( + root, + "Regex Tools repository", + ); + const source = await assertRealDirectory(packDirectory, "verified Java pack"); + const metadata = await verifyJavaPack(source, repositoryRoot); + const engineRoot = await assertRealDirectory( + path.join(repositoryRoot, "public", "engines"), + "public engine directory", + ); + const target = path.join(engineRoot, "java"); + const stage = await mkdtemp(path.join(engineRoot, ".java-install-")); + try { + for (const name of PACK_FILES) { + await copyFile( + path.join(source, name), + path.join(stage, name), + fsConstants.COPYFILE_EXCL, + ); + } + await verifyJavaPack(stage, repositoryRoot); + await replaceDirectory(stage, target, "public/engines/java"); + return { output: target, metadata }; + } finally { + await rm(stage, { recursive: true, force: true }); + } +} + +const invokedFile = process.argv[1] ? path.resolve(process.argv[1]) : ""; +if (invokedFile === fileURLToPath(import.meta.url)) { + if (process.argv.length > 3) { + throw new Error( + "Usage: node scripts/java-engine-pack.mjs [.engine-build/java]", + ); + } + const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); + const result = await buildJavaPack(root, process.argv[2]); + console.log( + `Built deterministic ${result.metadata.semanticIdentity} module: ${result.moduleSha256} (${result.moduleBytes.toLocaleString()} bytes).`, + ); +} diff --git a/scripts/package-release.mjs b/scripts/package-release.mjs index 6fe7b91..9247837 100644 --- a/scripts/package-release.mjs +++ b/scripts/package-release.mjs @@ -18,7 +18,7 @@ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const zipEpoch = new Date(1980, 0, 1, 0, 0, 0); const gplVersion3TextSha256 = "fb981668c18a279e285fc4d83fba1e836cc84dd4daa73c9697d3cfd2d8aca6e0"; -const expectedApplicationVersion = "0.2.0"; +const expectedApplicationVersion = "0.3.0"; const requiredRootFiles = [ "LICENSE", "README.md", @@ -387,11 +387,25 @@ async function collectReleaseEntries() { "SOURCE.md", "THIRD_PARTY_NOTICES.md", "engines/README.md", + "engines/java/LICENSE.txt", + "engines/java/NOTICE.txt", + "engines/java/SHA256SUMS", + "engines/java/engine-metadata.json", + "engines/java/java-regex.mjs", "engines/pcre2/LICENSE.txt", "engines/pcre2/SHA256SUMS", "engines/pcre2/engine-metadata.json", "engines/pcre2/pcre2.mjs", "engines/pcre2/pcre2.wasm", + "engines/python/LICENSE.cpython.txt", + "engines/python/LICENSE.pyodide.txt", + "engines/python/SHA256SUMS", + "engines/python/engine-metadata.json", + "engines/python/pyodide-lock.json", + "engines/python/pyodide.asm.mjs", + "engines/python/pyodide.asm.wasm", + "engines/python/pyodide.mjs", + "engines/python/python_stdlib.zip", "LICENSES/Emscripten-MIT.txt", "LICENSES/PCRE2.txt", "LICENSES/build/rolldown-1.1.5/LICENSE", diff --git a/scripts/python-engine-pack.mjs b/scripts/python-engine-pack.mjs new file mode 100644 index 0000000..5ee7a58 --- /dev/null +++ b/scripts/python-engine-pack.mjs @@ -0,0 +1,572 @@ +import { createHash } from "node:crypto"; +import { + constants as fsConstants, + copyFile, + lstat, + mkdir, + mkdtemp, + readFile, + readdir, + realpath, + rename, + rm, + writeFile, +} from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +export const PYTHON_ENGINE_LOCK = Object.freeze({ + bridgeAbi: 1, + pythonVersion: "3.14.2", + pyodideVersion: "314.0.3", + maximumPatternUtf16: 65_536, + maximumSubjectBytes: 16_777_216, + maximumReplacementUtf16: 65_536, + maximumOutputBytes: 67_108_864, + maximumMatches: 10_000, + maximumCaptureRows: 100_000, + maximumCaptureGroups: 1_000, + maximumNativeExpansionCodePoints: 16_777_216, + npm: Object.freeze({ + package: "pyodide@314.0.3", + resolved: "https://registry.npmjs.org/pyodide/-/pyodide-314.0.3.tgz", + integrity: + "sha512-sK40My6m8tmBUYtYH9au9rXUeh9x0wfahtHdOlGmJxZDsKBGKtP6KznyFB2+u/klbQTdDionR0uaVd176zVQzQ==", + packageJsonSha256: + "0393eb01a0707cddc251f1a66090998773fe1aa3cfde66eedc96e83e43861845", + }), + pyodide: Object.freeze({ + repository: "https://github.com/pyodide/pyodide.git", + tag: "314.0.3", + commit: "ac57031be7564f864d061cb37c5c152e59f83ad4", + license: "MPL-2.0", + licenseUrl: + "https://raw.githubusercontent.com/pyodide/pyodide/314.0.3/LICENSE", + licenseSha256: + "1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5", + }), + cpython: Object.freeze({ + repository: "https://github.com/python/cpython.git", + tag: "v3.14.2", + tagObject: "a1d0069daf8e85b25a0c3f96abc43182be6d429e", + commit: "df793163d5821791d4e7caf88885a2c11a107986", + license: "Python-2.0", + licenseUrl: + "https://raw.githubusercontent.com/python/cpython/v3.14.2/LICENSE", + licenseSha256: + "b0e25a78cffb43f4d92de8b61ccfa1f1f98ecbc22330b54b5251e7b6ba010231", + }), + emscriptenVersion: "5.0.3", + abiVersion: "2026_0", + lockPythonVersion: "3.14.0", + assets: Object.freeze({ + "pyodide-lock.json": + "c963d22858f6bcb8f41586a2142f03905ab370c88ea22a86a2736e95fac2a8f3", + "pyodide.asm.mjs": + "1a9775427ef6e8abaa7db88ece0515422d1886915ae5c9093776410c865dfd8d", + "pyodide.asm.wasm": + "e7f8fac36f8bf11085309cbc5c829b3ec3057c18bf1d73b05a6741612d63cdbf", + "pyodide.mjs": + "5cfc46f5dcbaf2a16f26e2363f441873eb424762609cc03db00d6a2ace4d00e5", + "python_stdlib.zip": + "444c770dfd75a32097fc0a7d5c1413fd3140601f49c3a1f2e9af0376fcd124b4", + }), + strippedLoaderSha256: + "640ac750bf7cf42ee58b524faa09f803732d2237753cd630d6878edda8a107bf", +}); + +const PACK_FILES = Object.freeze( + [ + "LICENSE.cpython.txt", + "LICENSE.pyodide.txt", + "SHA256SUMS", + "engine-metadata.json", + ...Object.keys(PYTHON_ENGINE_LOCK.assets), + ].sort(), +); +const CHECKSUM_FILES = Object.freeze( + PACK_FILES.filter((name) => name !== "SHA256SUMS"), +); + +function sha256(data) { + return createHash("sha256").update(data).digest("hex"); +} + +async function sha256File(file) { + return sha256(await readFile(file)); +} + +async function assertRealDirectory(candidate, label) { + const details = await lstat(candidate).catch(() => null); + if (!details?.isDirectory() || details.isSymbolicLink()) { + throw new Error(`${label} must be a real directory: ${candidate}`); + } + return realpath(candidate); +} + +async function assertRegularFile(candidate, label) { + const details = await lstat(candidate).catch(() => null); + if (!details?.isFile() || details.isSymbolicLink()) { + throw new Error( + `${label} must be a regular, non-symlink file: ${candidate}`, + ); + } + return realpath(candidate); +} + +async function assertHash(file, expected, label) { + const actual = await sha256File(file); + if (actual !== expected) { + throw new Error( + `${label} SHA-256 mismatch: expected ${expected}, got ${actual}.`, + ); + } +} + +function withoutSourceMapReference(source) { + const result = source.replace( + /\n\/\/# sourceMappingURL=pyodide\.mjs\.map\s*$/u, + "\n", + ); + if (result === source) { + throw new Error( + "The pinned Pyodide loader no longer has the expected source-map trailer.", + ); + } + return result; +} + +async function verifyPyodideSource(sourceDirectory) { + const source = await assertRealDirectory( + sourceDirectory, + "Pyodide npm package", + ); + for (const [name, expected] of Object.entries(PYTHON_ENGINE_LOCK.assets)) { + await assertRegularFile(path.join(source, name), `Pyodide ${name}`); + await assertHash(path.join(source, name), expected, `Pyodide ${name}`); + } + const packageFile = path.join(source, "package.json"); + await assertHash( + packageFile, + PYTHON_ENGINE_LOCK.npm.packageJsonSha256, + "Pyodide package.json", + ); + const packageJson = JSON.parse(await readFile(packageFile, "utf8")); + if ( + packageJson.name !== "pyodide" || + packageJson.version !== PYTHON_ENGINE_LOCK.pyodideVersion || + packageJson.license !== PYTHON_ENGINE_LOCK.pyodide.license || + packageJson.repository?.url !== "git+https://github.com/pyodide/pyodide.git" + ) { + throw new Error("The Pyodide npm package identity is not pinned."); + } + const lock = JSON.parse( + await readFile(path.join(source, "pyodide-lock.json"), "utf8"), + ); + if ( + lock.info?.abi_version !== PYTHON_ENGINE_LOCK.abiVersion || + lock.info?.arch !== "wasm32" || + lock.info?.python !== PYTHON_ENGINE_LOCK.lockPythonVersion || + lock.info?.platform !== + `emscripten_${PYTHON_ENGINE_LOCK.emscriptenVersion.replaceAll(".", "_")}` + ) { + throw new Error("The Pyodide lock-file platform identity is not pinned."); + } + return source; +} + +async function fetchPinned(url, expectedHash, label) { + const response = await fetch(url, { + redirect: "follow", + signal: AbortSignal.timeout(30_000), + }); + if (!response.ok) { + throw new Error(`${label} download failed with HTTP ${response.status}.`); + } + const value = Buffer.from(await response.arrayBuffer()); + const actual = sha256(value); + if (actual !== expectedHash) { + throw new Error( + `${label} SHA-256 mismatch: expected ${expectedHash}, got ${actual}.`, + ); + } + return value; +} + +async function fileRecord(directory, name) { + const file = path.join(directory, name); + const value = await readFile(file); + return { + path: name, + sha256: sha256(value), + bytes: value.byteLength, + }; +} + +async function expectedMetadata(root, pack) { + const bridgePath = path.join(root, "engines", "python", "bridge.py"); + const bridge = await readFile(bridgePath); + const files = []; + for (const name of CHECKSUM_FILES) { + if (name !== "engine-metadata.json") { + files.push(await fileRecord(pack, name)); + } + } + return { + schemaVersion: 1, + engine: "python", + engineVersion: `CPython ${PYTHON_ENGINE_LOCK.pythonVersion} re`, + runtime: `Pyodide ${PYTHON_ENGINE_LOCK.pyodideVersion}`, + status: "production-runtime", + bridge: { + abiVersion: PYTHON_ENGINE_LOCK.bridgeAbi, + sourceFile: { + path: "engines/python/bridge.py", + sha256: sha256(bridge), + bytes: bridge.byteLength, + }, + userValuesAreFunctionArguments: true, + regexModule: "re", + supportModules: { + serialization: "json", + runtimeIdentity: "sys", + }, + maximumPatternUtf16: PYTHON_ENGINE_LOCK.maximumPatternUtf16, + maximumSubjectBytes: PYTHON_ENGINE_LOCK.maximumSubjectBytes, + maximumReplacementUtf16: PYTHON_ENGINE_LOCK.maximumReplacementUtf16, + maximumOutputBytes: PYTHON_ENGINE_LOCK.maximumOutputBytes, + maximumMatches: PYTHON_ENGINE_LOCK.maximumMatches, + maximumCaptureRows: PYTHON_ENGINE_LOCK.maximumCaptureRows, + maximumCaptureGroups: PYTHON_ENGINE_LOCK.maximumCaptureGroups, + maximumNativeExpansionCodePoints: + PYTHON_ENGINE_LOCK.maximumNativeExpansionCodePoints, + }, + source: { + pyodide: { + repository: PYTHON_ENGINE_LOCK.pyodide.repository, + tag: PYTHON_ENGINE_LOCK.pyodide.tag, + commitSha1: PYTHON_ENGINE_LOCK.pyodide.commit, + license: PYTHON_ENGINE_LOCK.pyodide.license, + npmPackage: PYTHON_ENGINE_LOCK.npm.package, + npmResolved: PYTHON_ENGINE_LOCK.npm.resolved, + npmIntegrity: PYTHON_ENGINE_LOCK.npm.integrity, + }, + cpython: { + repository: PYTHON_ENGINE_LOCK.cpython.repository, + tag: PYTHON_ENGINE_LOCK.cpython.tag, + tagObjectSha1: PYTHON_ENGINE_LOCK.cpython.tagObject, + commitSha1: PYTHON_ENGINE_LOCK.cpython.commit, + license: PYTHON_ENGINE_LOCK.cpython.license, + }, + }, + toolchain: { + abiVersion: PYTHON_ENGINE_LOCK.abiVersion, + architecture: "wasm32", + emscriptenVersion: PYTHON_ENGINE_LOCK.emscriptenVersion, + lockPythonVersion: PYTHON_ENGINE_LOCK.lockPythonVersion, + executablePythonVersion: PYTHON_ENGINE_LOCK.pythonVersion, + threads: false, + }, + packaging: { + loaderTransformation: + "Removed only the upstream sourceMappingURL trailer; executable JavaScript is unchanged.", + upstreamLoaderSha256: PYTHON_ENGINE_LOCK.assets["pyodide.mjs"], + packedLoaderSha256: PYTHON_ENGINE_LOCK.strippedLoaderSha256, + externalPackagesIncluded: false, + lockPythonVersionNote: + "The upstream lock's 3.14.0 field identifies its CPython 3.14 ABI baseline; the executable runtime self-identifies as 3.14.2.", + }, + files, + }; +} + +function equalJson(left, right) { + return JSON.stringify(left) === JSON.stringify(right); +} + +async function expectedChecksums(pack) { + const lines = []; + for (const name of CHECKSUM_FILES) { + lines.push(`${await sha256File(path.join(pack, name))} ${name}`); + } + return `${lines.join("\n")}\n`; +} + +async function smokePythonPack(pack) { + await WebAssembly.compile( + await readFile(path.join(pack, "pyodide.asm.wasm")), + ); + const moduleUrl = pathToFileURL(path.join(pack, "pyodide.mjs")); + moduleUrl.searchParams.set("regex-tools-verification", String(Date.now())); + const imported = await import(moduleUrl.href); + if ( + imported.version !== PYTHON_ENGINE_LOCK.pyodideVersion || + typeof imported.loadPyodide !== "function" + ) { + throw new Error("The staged Pyodide module identity is invalid."); + } + const runtime = await imported.loadPyodide({ + indexURL: `${pack}${path.sep}`, + stdout: () => undefined, + stderr: () => undefined, + }); + const result = JSON.parse( + runtime.runPython(` +import json, re, sys +expression = re.compile(r"(?P😀)|(?P[a-z]+)", re.ASCII) +matches = [ + [match.span(0), match.lastgroup] + for match in expression.finditer("😀 abc") +] +replacement_match = re.compile(r"(?P[a-z]+)").search("abc") +json.dumps({ + "python": ".".join(str(part) for part in sys.version_info[:3]), + "implementation": sys.implementation.name, + "matches": matches, + "replacement": replacement_match.expand(r"[\\g]"), +}) +`), + ); + if ( + result.python !== PYTHON_ENGINE_LOCK.pythonVersion || + result.implementation !== "cpython" || + JSON.stringify(result.matches) !== + JSON.stringify([ + [[0, 1], "emoji"], + [[2, 5], "word"], + ]) || + result.replacement !== "[abc]" + ) { + throw new Error("The staged CPython re runtime smoke test failed."); + } +} + +export async function verifyPythonPack(packDirectory, root) { + const repositoryRoot = await assertRealDirectory( + root, + "Regex Tools repository", + ); + const pack = await assertRealDirectory(packDirectory, "Python engine pack"); + const entries = (await readdir(pack, { withFileTypes: true })).sort( + (left, right) => + left.name < right.name ? -1 : left.name > right.name ? 1 : 0, + ); + if ( + entries.length !== PACK_FILES.length || + entries.some( + (entry, index) => + entry.name !== PACK_FILES[index] || + !entry.isFile() || + entry.isSymbolicLink(), + ) + ) { + throw new Error( + `The staged Python pack must contain only: ${PACK_FILES.join(", ")}.`, + ); + } + + await assertHash( + path.join(pack, "LICENSE.pyodide.txt"), + PYTHON_ENGINE_LOCK.pyodide.licenseSha256, + "staged Pyodide licence", + ); + await assertHash( + path.join(pack, "LICENSE.cpython.txt"), + PYTHON_ENGINE_LOCK.cpython.licenseSha256, + "staged CPython licence", + ); + await assertHash( + path.join(pack, "pyodide.mjs"), + PYTHON_ENGINE_LOCK.strippedLoaderSha256, + "staged Pyodide loader", + ); + for (const [name, expected] of Object.entries(PYTHON_ENGINE_LOCK.assets)) { + if (name !== "pyodide.mjs") { + await assertHash(path.join(pack, name), expected, `staged ${name}`); + } + } + const loader = await readFile(path.join(pack, "pyodide.mjs"), "utf8"); + if ( + loader.includes("sourceMappingURL") || + loader.includes("/mnt/DATA/") || + loader.includes("/home/zemion/") + ) { + throw new Error( + "The staged Pyodide loader leaks a source-map or local build path.", + ); + } + + let metadata; + try { + metadata = JSON.parse( + await readFile(path.join(pack, "engine-metadata.json"), "utf8"), + ); + } catch (error) { + throw new Error("engine-metadata.json is not valid JSON.", { + cause: error, + }); + } + const expected = await expectedMetadata(repositoryRoot, pack); + if (!equalJson(metadata, expected)) { + throw new Error( + "The staged Python metadata does not match the pinned pack contract.", + ); + } + if ( + (await readFile(path.join(pack, "SHA256SUMS"), "utf8")) !== + (await expectedChecksums(pack)) + ) { + throw new Error("The staged Python SHA256SUMS file is incorrect."); + } + await smokePythonPack(pack); + return metadata; +} + +async function replaceDirectory(stage, target, label) { + const targetDetails = await lstat(target).catch(() => null); + if ( + targetDetails && + (!targetDetails.isDirectory() || targetDetails.isSymbolicLink()) + ) { + throw new Error(`${label} must be a real directory.`); + } + if (!targetDetails) { + await rename(stage, target); + return; + } + const backup = `${target}.replaced-${process.pid}-${Date.now()}`; + await rename(target, backup); + try { + await rename(stage, target); + } catch (error) { + await rename(backup, target); + throw error; + } + await rm(backup, { recursive: true }); +} + +export async function installPythonPack(packDirectory, root) { + const repositoryRoot = await assertRealDirectory( + root, + "Regex Tools repository", + ); + const sourcePack = await assertRealDirectory( + packDirectory, + "verified Python engine pack", + ); + const metadata = await verifyPythonPack(sourcePack, repositoryRoot); + const engineRoot = await assertRealDirectory( + path.join(repositoryRoot, "public", "engines"), + "public engine directory", + ); + const target = path.join(engineRoot, "python"); + const stage = await mkdtemp(path.join(engineRoot, ".python-install-")); + try { + for (const name of PACK_FILES) { + await copyFile( + path.join(sourcePack, name), + path.join(stage, name), + fsConstants.COPYFILE_EXCL, + ); + } + await verifyPythonPack(stage, repositoryRoot); + await replaceDirectory(stage, target, "public/engines/python"); + return { output: target, metadata }; + } finally { + await rm(stage, { recursive: true, force: true }); + } +} + +export async function buildPythonPack(options, root) { + const repositoryRoot = await assertRealDirectory( + root, + "Regex Tools repository", + ); + const source = await verifyPyodideSource(options.sourceDirectory); + const output = path.resolve(options.outputDirectory); + await mkdir(path.dirname(output), { recursive: true }); + const stage = await mkdtemp( + path.join(path.dirname(output), ".python-pack-build-"), + ); + try { + const [pyodideLicense, cpythonLicense] = await Promise.all([ + fetchPinned( + PYTHON_ENGINE_LOCK.pyodide.licenseUrl, + PYTHON_ENGINE_LOCK.pyodide.licenseSha256, + "Pyodide licence", + ), + fetchPinned( + PYTHON_ENGINE_LOCK.cpython.licenseUrl, + PYTHON_ENGINE_LOCK.cpython.licenseSha256, + "CPython licence", + ), + ]); + await writeFile(path.join(stage, "LICENSE.pyodide.txt"), pyodideLicense, { + flag: "wx", + }); + await writeFile(path.join(stage, "LICENSE.cpython.txt"), cpythonLicense, { + flag: "wx", + }); + for (const name of Object.keys(PYTHON_ENGINE_LOCK.assets)) { + if (name === "pyodide.mjs") { + const upstream = await readFile(path.join(source, name), "utf8"); + const packed = withoutSourceMapReference(upstream); + if (sha256(packed) !== PYTHON_ENGINE_LOCK.strippedLoaderSha256) { + throw new Error("The deterministic Pyodide loader output changed."); + } + await writeFile(path.join(stage, name), packed, { flag: "wx" }); + } else { + await copyFile( + path.join(source, name), + path.join(stage, name), + fsConstants.COPYFILE_EXCL, + ); + } + } + const metadata = await expectedMetadata(repositoryRoot, stage); + await writeFile( + path.join(stage, "engine-metadata.json"), + `${JSON.stringify(metadata, null, 2)}\n`, + { flag: "wx" }, + ); + await writeFile( + path.join(stage, "SHA256SUMS"), + await expectedChecksums(stage), + { flag: "wx" }, + ); + await verifyPythonPack(stage, repositoryRoot); + await replaceDirectory(stage, output, "Python pack output"); + return { output, metadata }; + } finally { + await rm(stage, { recursive: true, force: true }); + } +} + +const invokedFile = process.argv[1] + ? pathToFileURL(path.resolve(process.argv[1])).href + : ""; +if (import.meta.url === invokedFile) { + const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); + const arguments_ = process.argv.slice(2); + if (arguments_.length > 2) { + throw new Error( + "Usage: node scripts/python-engine-pack.mjs [node_modules/pyodide] [.engine-build/python]", + ); + } + const result = await buildPythonPack( + { + sourceDirectory: path.resolve( + root, + arguments_[0] ?? "node_modules/pyodide", + ), + outputDirectory: path.resolve( + root, + arguments_[1] ?? ".engine-build/python", + ), + }, + root, + ); + console.log( + `Built and verified ${result.metadata.runtime} / ${result.metadata.engineVersion} at ${result.output}.`, + ); +} diff --git a/scripts/serve-test.mjs b/scripts/serve-test.mjs index 90db867..9e4b781 100644 --- a/scripts/serve-test.mjs +++ b/scripts/serve-test.mjs @@ -26,6 +26,14 @@ const testCatalogue = { theme: { mode: "system", brand: "add·ideas" }, apps: [{ manifest: "./toolbox-app.json", enabled: true }], }; +const productionSecurityHeaders = { + "Content-Security-Policy": + "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; media-src 'self' blob:; font-src 'self' data:; connect-src 'self'; worker-src 'self' blob:; manifest-src 'self'", + "Cross-Origin-Embedder-Policy": "require-corp", + "Cross-Origin-Opener-Policy": "same-origin", + "Cross-Origin-Resource-Policy": "same-origin", + "X-Content-Type-Options": "nosniff", +}; function safeFile(requestPath) { const decoded = decodeURIComponent(requestPath); @@ -50,6 +58,7 @@ const server = createServer(async (request, response) => { response.writeHead(200, { "Content-Type": "application/json; charset=utf-8", "Cache-Control": "no-cache", + ...productionSecurityHeaders, }); response.end(JSON.stringify(testCatalogue)); return; @@ -66,7 +75,7 @@ const server = createServer(async (request, response) => { "Content-Type": mediaTypes.get(path.extname(file)) ?? "application/octet-stream", "Cache-Control": "no-cache", - "Cross-Origin-Resource-Policy": "same-origin", + ...productionSecurityHeaders, }); response.end(content); } catch { diff --git a/scripts/verify-engine-assets.mjs b/scripts/verify-engine-assets.mjs index bacda69..4ceee89 100644 --- a/scripts/verify-engine-assets.mjs +++ b/scripts/verify-engine-assets.mjs @@ -1,22 +1,28 @@ import { lstat, readFile, readdir } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { verifyJavaPack } from "./java-engine-pack.mjs"; import { verifyPcre2Pack } from "./pcre2-engine-pack.mjs"; +import { verifyPythonPack } from "./python-engine-pack.mjs"; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const arguments_ = process.argv.slice(2); if (arguments_.length > 0) { - if (arguments_.length !== 2 || arguments_[0] !== "--pcre2-pack") { + const verifiers = new Map([ + ["--java-pack", verifyJavaPack], + ["--pcre2-pack", verifyPcre2Pack], + ["--python-pack", verifyPythonPack], + ]); + const verifier = verifiers.get(arguments_[0]); + if (arguments_.length !== 2 || !verifier) { throw new Error( - "Usage: node scripts/verify-engine-assets.mjs [--pcre2-pack PATH]", + "Usage: node scripts/verify-engine-assets.mjs [--java-pack|--pcre2-pack|--python-pack PATH]", ); } const pack = path.resolve(root, arguments_[1]); - const metadata = await verifyPcre2Pack(pack, root); - console.log( - `Verified staged PCRE2 ${metadata.engineVersion} pack and WebAssembly bridge smoke test.`, - ); + const metadata = await verifier(pack, root); + console.log(`Verified staged ${metadata.engineVersion} engine pack.`); process.exit(0); } @@ -31,21 +37,34 @@ const entries = (await readdir(engineDirectory, { withFileTypes: true })).sort( left.name < right.name ? -1 : left.name > right.name ? 1 : 0, ); if ( - entries.length !== 2 || + entries.length !== 4 || !entries[0]?.isFile() || entries[0].name !== "README.md" || !entries[1]?.isDirectory() || - entries[1].name !== "pcre2" + entries[1].name !== "java" || + !entries[2]?.isDirectory() || + entries[2].name !== "pcre2" || + !entries[3]?.isDirectory() || + entries[3].name !== "python" ) { throw new Error( - "The production build must contain only README.md and the declared PCRE2 pack.", + "The production build must contain only README.md and the declared Java, PCRE2 and Python packs.", ); } const notice = await readFile(path.join(engineDirectory, "README.md"), "utf8"); -if (!notice.includes("native `RegExp`") || !notice.includes("PCRE2 10.47")) { +if ( + !notice.includes("native `RegExp`") || + !notice.includes("PCRE2 10.47") || + !notice.includes("Pyodide 314.0.3") || + !notice.includes("TeaVM 0.15.0") +) { throw new Error("The engine asset notice does not describe this release."); } await verifyPcre2Pack(path.join(engineDirectory, "pcre2"), root); +await verifyPythonPack(path.join(engineDirectory, "python"), root); +await verifyJavaPack(path.join(engineDirectory, "java"), root); -console.log("Verified native ECMAScript and bundled PCRE2 engine assets."); +console.log( + "Verified native ECMAScript and bundled PCRE2, CPython/Pyodide and TeaVM Java engine assets.", +); diff --git a/src/components/CapabilityPanel.test.tsx b/src/components/CapabilityPanel.test.tsx index eca41a8..28f4951 100644 --- a/src/components/CapabilityPanel.test.tsx +++ b/src/components/CapabilityPanel.test.tsx @@ -100,7 +100,7 @@ describe("CapabilityPanel", () => { ); }); - it("does not advertise ECMAScript generation for the partial PCRE2 syntax provider", () => { + it("keeps PCRE2-only trace and code generation separate from ECMAScript-only tools", () => { render( { ...execution.engine, flavour: "pcre2", engineName: "PCRE2", + capabilities: { + ...execution.engine.capabilities, + actualTrace: true, + }, }, }} />, ); + const trace = screen.getByText("Actual execution trace").closest("div"); + expect(trace).toHaveTextContent("Available"); const generatedCases = screen.getByText("Generated cases").closest("div"); expect(generatedCases).toHaveTextContent( - "Unavailable — the partial PCRE2 provider does not expose a complete generation AST", + "Unavailable — the ECMAScript case generator is not applied to PCRE2", ); const formatting = screen.getByText("Pattern formatting").closest("div"); expect(formatting).toHaveTextContent( - "Unavailable — no complete PCRE2 grammar-backed formatter is implemented", + "Unavailable — the ECMAScript formatter is not applied to PCRE2", + ); + const codeGeneration = screen.getByText("Code generation").closest("div"); + expect(codeGeneration).toHaveTextContent( + "Available — reviewed PCRE2 10.47 8-bit C17 target", ); }); + it.each([ + ["python", "Python re"], + ["java", "Java Pattern"], + ] as const)( + "does not borrow ECMAScript or PCRE2 feature semantics for %s", + (flavour, label) => { + render( + , + ); + + expect( + screen.getByText("Actual execution trace").closest("div"), + ).toHaveTextContent( + "Unavailable — automatic-callout tracing is implemented only for PCRE2", + ); + expect( + screen.getByText("Static risk analysis").closest("div"), + ).toHaveTextContent( + `Unavailable — ECMAScript heuristics are not applied to ${label}`, + ); + expect( + screen.getByText("Generated cases").closest("div"), + ).toHaveTextContent( + `Unavailable — the ECMAScript case generator is not applied to ${label}`, + ); + expect( + screen.getByText("Pattern formatting").closest("div"), + ).toHaveTextContent( + `Unavailable — the ECMAScript formatter is not applied to ${label}`, + ); + expect( + screen.getByText("Code generation").closest("div"), + ).toHaveTextContent( + "Unavailable — C17 code generation is implemented only for PCRE2", + ); + }, + ); + it("offers an accessible close control when used as a modal panel", async () => { const onClose = vi.fn(); const user = userEvent.setup(); diff --git a/src/components/CapabilityPanel.tsx b/src/components/CapabilityPanel.tsx index fe527be..b55ae80 100644 --- a/src/components/CapabilityPanel.tsx +++ b/src/components/CapabilityPanel.tsx @@ -1,7 +1,21 @@ import { SYNTAX_PROFILE } from "../version"; import type { RegexExecutionResult } from "../regex/model/match"; import type { RegexSyntaxResult } from "../regex/model/syntax"; -import type { RegexEngineCapabilities } from "../regex/model/flavour"; +import type { + RegexEngineCapabilities, + RegexFlavourId, +} from "../regex/model/flavour"; + +const FLAVOUR_LABELS: Readonly> = { + ecmascript: "ECMAScript", + pcre2: "PCRE2", + pcre: "PCRE", + python: "Python re", + go: "Go regexp", + rust: "Rust regex", + dotnet: ".NET Regex", + java: "Java Pattern", +}; function capability( capabilities: RegexEngineCapabilities | undefined, @@ -44,6 +58,9 @@ export function CapabilityPanel({ const capabilities = execution?.engine.capabilities; const activeFlavour = execution?.engine.flavour ?? syntax?.root.support.flavour; + const activeFlavourLabel = activeFlavour + ? FLAVOUR_LABELS[activeFlavour] + : undefined; const rows = [ [ "Flavour", @@ -98,35 +115,47 @@ export function CapabilityPanel({ ], [ "Actual execution trace", - capability( - capabilities, - "actualTrace", - "the adapter exposes no engine trace", - ), + activeFlavour === "pcre2" + ? capability( + capabilities, + "actualTrace", + "this PCRE2 adapter exposes no bounded automatic-callout trace", + ) + : activeFlavour + ? "Unavailable — automatic-callout tracing is implemented only for PCRE2" + : "Awaiting flavour worker result", ], ["Benchmark", capability(capabilities, "benchmark")], [ "Static risk analysis", activeFlavour === "ecmascript" ? "Available — advisory ECMAScript 2025 heuristics" - : activeFlavour === "pcre2" - ? "Unavailable — ECMAScript heuristics are not applied to PCRE2" + : activeFlavourLabel + ? `Unavailable — ECMAScript heuristics are not applied to ${activeFlavourLabel}` : "Awaiting flavour worker result", ], [ "Generated cases", activeFlavour === "ecmascript" ? "Available — deterministic AST candidates, retained only after actual-engine verification" - : activeFlavour === "pcre2" - ? "Unavailable — the partial PCRE2 provider does not expose a complete generation AST" + : activeFlavourLabel + ? `Unavailable — the ECMAScript case generator is not applied to ${activeFlavourLabel}` : "Awaiting flavour worker result", ], [ "Pattern formatting", activeFlavour === "ecmascript" ? "Available — grammar-backed literal/control escaping with mandatory exact-snapshot validation" - : activeFlavour === "pcre2" - ? "Unavailable — no complete PCRE2 grammar-backed formatter is implemented" + : activeFlavourLabel + ? `Unavailable — the ECMAScript formatter is not applied to ${activeFlavourLabel}` + : "Awaiting flavour worker result", + ], + [ + "Code generation", + activeFlavour === "pcre2" + ? "Available — reviewed PCRE2 10.47 8-bit C17 target" + : activeFlavour + ? "Unavailable — C17 code generation is implemented only for PCRE2" : "Awaiting flavour worker result", ], [ @@ -172,11 +201,11 @@ export function CapabilityPanel({ ))}

- PCRE2 10.47 matching and substitution run in the bundled WebAssembly - worker. Its separate trace worker exposes bounded reported automatic - callouts; movement classifications remain explicitly derived. Python, - Go, Rust, .NET and Java remain unavailable until their named runtimes - pass the same worker, offset, conformance and licensing gates. + Availability is never inferred by substituting one flavour for another. + Static analysis, generated cases and formatting are ECMAScript-only; + automatic-callout tracing and reviewed C17 generation are PCRE2-only. + Python and Java retain the engine identity and compatibility boundaries + reported by their own workers.

); diff --git a/src/components/HelpDialog.tsx b/src/components/HelpDialog.tsx index 57affca..0c4bb4b 100644 --- a/src/components/HelpDialog.tsx +++ b/src/components/HelpDialog.tsx @@ -47,11 +47,19 @@ export function HelpDialog({

What runs where

- Syntax parsing and actual ECMAScript or PCRE2 execution run in - separate, killable browser workers. PCRE2 is the bundled, - self-hosted 10.47 WebAssembly engine. Patterns, subjects and - projects are never uploaded. There is no backend, account, - telemetry, CDN dependency, or executable replacement function. + Syntax parsing and active-engine execution run in separate, killable + browser workers. ECMAScript uses the browser RegExp implementation; + PCRE2 uses the bundled 10.47 WebAssembly engine; Python uses CPython + 3.14 through Pyodide; and Java uses TeaVM's java.util.regex + compatibility implementation. The result metadata names the runtime + actually used. Patterns, subjects and projects are never uploaded. + There is no backend, account, telemetry, CDN dependency, or + executable replacement function. +

+

+ TeaVM 0.15.0 is not OpenJDK. Its replacement implementation accepts + single-digit $n references, so $12 means $1 followed by literal 2. + Java SE ${"{name}"} references are reported as unavailable.

@@ -87,9 +95,9 @@ export function HelpDialog({ and negative subject runs through the selected actual engine before it can become a test; candidates with the wrong outcome are discarded. The coverage report names unsupported constructs. - Sampling is not proof of complete language coverage. PCRE2 remains - unavailable until its structural provider exposes the required AST; - its syntax is never reinterpreted as ECMAScript. + Sampling is not proof of complete language coverage. Other flavours + remain unavailable until their structural providers expose the + required AST; their syntax is never reinterpreted as ECMAScript.

@@ -97,11 +105,11 @@ export function HelpDialog({

The ECMAScript formatter makes only grammar-backed literal/control escape changes; it does not insert layout whitespace or reinterpret - PCRE2 syntax. Applying a preview requires independent source and - candidate reparsing, actual-engine match/replacement comparison, - every applicable exact unit test, and an explicit confirmation. - Passing bounded checks is evidence for those snapshots, not proof - for every possible subject. + another flavour's syntax. Applying a preview requires + independent source and candidate reparsing, actual-engine + match/replacement comparison, every applicable exact unit test, and + an explicit confirmation. Passing bounded checks is evidence for + those snapshots, not proof for every possible subject.

diff --git a/src/components/MinimizePanel.tsx b/src/components/MinimizePanel.tsx index 214555c..321b594 100644 --- a/src/components/MinimizePanel.tsx +++ b/src/components/MinimizePanel.tsx @@ -211,6 +211,8 @@ export function MinimizePanel({ () => optionsFor(activeFlavour, activeOptions, "pcre2"), [activeFlavour, activeOptions], ); + const activeEngineSupported = + activeFlavour === "ecmascript" || activeFlavour === "pcre2"; const unitExpectation = (): RegexTestExpectation => { switch (unitKind) { @@ -244,10 +246,14 @@ export function MinimizePanel({ const activeSide = { flavour: activeFlavour === "pcre2" ? ("pcre2" as const) : ("ecmascript" as const), - flavourVersion: activeFlavourVersion, + flavourVersion: activeEngineSupported + ? activeFlavourVersion + : ECMASCRIPT.defaultVersion, pattern: initialPattern, - flags: activeFlags, - options: activeOptions, + flags: activeEngineSupported ? activeFlags : ECMASCRIPT.defaultFlags, + options: activeEngineSupported + ? activeOptions + : defaultRegexOptions(ECMASCRIPT), ...(unitKind === "replacement" ? { replacement: initialReplacement } : {}), }; @@ -324,6 +330,12 @@ export function MinimizePanel({ }; const run = async () => { + if (mode !== "comparison-mismatch" && !activeEngineSupported) { + setStatus( + `Subject minimization is not yet implemented for ${activeFlavour}; select ECMAScript or PCRE2, or use the explicit ECMAScript ↔ PCRE2 comparison target.`, + ); + return; + } const currentRevision = ++revision.current; setRunning(true); setResult(undefined); @@ -384,6 +396,13 @@ export function MinimizePanel({ replacement. It does not claim a globally or semantically minimal example.

+ {!activeEngineSupported ? ( +

+ Python and Java execution remain available in the main workbench, + corpus and unit-test modes. This reducer currently has verified + failure oracles only for ECMAScript and PCRE2. +

+ ) : null}
@@ -716,7 +735,10 @@ export function MinimizePanel({
diff --git a/src/components/ReplacementPanel.completeness.test.tsx b/src/components/ReplacementPanel.completeness.test.tsx index 28536f0..6e030aa 100644 --- a/src/components/ReplacementPanel.completeness.test.tsx +++ b/src/components/ReplacementPanel.completeness.test.tsx @@ -51,6 +51,29 @@ function renderResult(result: RegexReplacementResult) { } describe("ReplacementPanel completeness", () => { + it.each([ + ["python", "Python re"], + ["java", "Java Pattern"], + ] as const)( + "labels %s templates without relabelling them", + (flavour, label) => { + render( + undefined} + onSelectToken={() => undefined} + onSelectContribution={() => undefined} + />, + ); + + expect(screen.getByText(`${label} template syntax`)).toBeInTheDocument(); + expect( + screen.getByText(`Native matches · bounded ${label} substitution`), + ).toBeInTheDocument(); + }, + ); + it("labels a match-limited replacement as partial", () => { renderResult({ execution: { ...execution, truncated: true }, diff --git a/src/components/ReplacementPanel.tsx b/src/components/ReplacementPanel.tsx index 90845ce..77672dc 100644 --- a/src/components/ReplacementPanel.tsx +++ b/src/components/ReplacementPanel.tsx @@ -17,6 +17,17 @@ import { import { handleTreeNavigation } from "./tree-navigation"; import { ReplacementPreviewPanel } from "./ReplacementPreviewPanel"; +const TEMPLATE_FLAVOUR_LABELS: Readonly> = { + ecmascript: "ECMAScript", + pcre2: "PCRE2", + pcre: "PCRE", + python: "Python re", + go: "Go regexp", + rust: "Rust regex", + dotnet: ".NET Regex", + java: "Java Pattern", +}; + function ReplacementTokenRow({ token, selected, @@ -79,7 +90,7 @@ export function ReplacementPanel({ }) { const activeFlavour = flavour ?? result?.execution.engine.flavour ?? "ecmascript"; - const engineLabel = activeFlavour === "pcre2" ? "PCRE2" : "ECMAScript"; + const engineLabel = TEMPLATE_FLAVOUR_LABELS[activeFlavour]; const retainedTokens = syntax?.tokens ?? []; const editorTokens = retainedTokens.slice( 0, diff --git a/src/project/project.test.ts b/src/project/project.test.ts index 4685365..d1dfc3f 100644 --- a/src/project/project.test.ts +++ b/src/project/project.test.ts @@ -225,7 +225,7 @@ describe("project import and export", () => { ).toThrow(/Test 1 subject exceeds.*UTF-8 byte limit/u); }); - it("accepts PCRE2 and rejects unsupported flavour or option semantics without rewriting", () => { + it("accepts implemented flavours and rejects unsupported flavour or option semantics without rewriting", () => { expect( importProjectDocument( JSON.stringify({ @@ -258,14 +258,30 @@ describe("project import and export", () => { JSON.stringify({ ...project, flavourVersion: "ECMAScript 2026" }), ), ).toThrow(/flavour version.*unsupported/iu); - expect(() => + expect( importProjectDocument( JSON.stringify({ ...project, tests: [{ ...project.tests[0], flavour: "python" }], }), ), - ).toThrow(/only supports ECMAScript and PCRE2/u); + ).toEqual( + expect.objectContaining({ + tests: [ + expect.objectContaining({ + flavour: "python", + }), + ], + }), + ); + expect(() => + importProjectDocument( + JSON.stringify({ + ...project, + tests: [{ ...project.tests[0], flavour: "go" }], + }), + ), + ).toThrow(/only supports ECMAScript, PCRE2, Python re and Java/u); expect(() => importProjectDocument( JSON.stringify({ diff --git a/src/regex/execution/EngineSupervisor.test.ts b/src/regex/execution/EngineSupervisor.test.ts index b9adb5c..d69d7d2 100644 --- a/src/regex/execution/EngineSupervisor.test.ts +++ b/src/regex/execution/EngineSupervisor.test.ts @@ -71,26 +71,36 @@ class ResponsiveWorker implements WorkerLike { onmessageerror: ((event: MessageEvent) => void) | null = null; readonly operations: EngineWorkerOperation[] = []; terminateCalls = 0; + private readonly flavour: RegexFlavourId; + + constructor(flavour: RegexFlavourId) { + this.flavour = flavour; + } postMessage(message: unknown): void { const request = message as WorkerRequest; this.operations.push(request.payload); const payload: EngineWorkerResult = - request.payload.kind === "execute" + request.payload.kind === "load" ? { - kind: "execute", - result: result(request.payload.request.flavour), + kind: "load", + info: result(this.flavour).engine, } - : { - kind: "replace", - result: { - execution: result(request.payload.request.flavour), - output: "", - outputBytes: 0, - outputTruncated: false, - truncated: false, - }, - }; + : request.payload.kind === "execute" + ? { + kind: "execute", + result: result(request.payload.request.flavour), + } + : { + kind: "replace", + result: { + execution: result(request.payload.request.flavour), + output: "", + outputBytes: 0, + outputTruncated: false, + truncated: false, + }, + }; const response: WorkerResponse = { protocolVersion: WORKER_PROTOCOL_VERSION, requestId: request.requestId, @@ -106,14 +116,34 @@ class ResponsiveWorker implements WorkerLike { } } +class StallingWorker implements WorkerLike { + onmessage: ((event: MessageEvent) => void) | null = null; + onerror: ((event: ErrorEvent) => void) | null = null; + onmessageerror: ((event: MessageEvent) => void) | null = null; + readonly operations: EngineWorkerOperation[] = []; + terminateCalls = 0; + + postMessage(message: unknown): void { + const request = message as WorkerRequest; + this.operations.push(request.payload); + } + + terminate(): void { + this.terminateCalls += 1; + } +} + describe("engine worker selection", () => { - it("registers the shipped ECMAScript and PCRE2 execution workers", () => { + it("registers every shipped execution worker with a startup budget", () => { expect( ENGINE_WORKER_REGISTRY.registrations.map( (registration) => registration.flavour, ), - ).toEqual(["ecmascript", "pcre2"]); + ).toEqual(["ecmascript", "pcre2", "python", "java"]); expect(ENGINE_WORKER_REGISTRY.require("pcre2").label).toBe("PCRE2 engine"); + expect(ENGINE_WORKER_REGISTRY.require("python").startupTimeoutMs).toBe( + 30_000, + ); }); it("selects and reuses a dedicated supervisor per registered flavour", async () => { @@ -121,8 +151,9 @@ describe("engine worker selection", () => { const registration = (flavour: RegexFlavourId) => ({ flavour, label: `${flavour} fixture`, + startupTimeoutMs: 100, createWorker: () => { - const worker = new ResponsiveWorker(); + const worker = new ResponsiveWorker(flavour); workers.set(flavour, [...(workers.get(flavour) ?? []), worker]); return worker; }, @@ -150,7 +181,14 @@ describe("engine worker selection", () => { expect(workers.get("ecmascript")).toHaveLength(1); expect(workers.get("pcre2")).toHaveLength(1); - expect(workers.get("ecmascript")?.[0]?.operations).toHaveLength(2); + expect( + workers + .get("ecmascript")?.[0] + ?.operations.map((operation) => operation.kind), + ).toEqual(["load", "execute", "execute"]); + expect( + workers.get("pcre2")?.[0]?.operations.map((operation) => operation.kind), + ).toEqual(["load", "execute"]); supervisor.dispose(); expect(workers.get("ecmascript")?.[0]?.terminateCalls).toBe(1); @@ -165,4 +203,72 @@ describe("engine worker selection", () => { ); supervisor.dispose(); }); + + it("lets the newest request supersede a shared ready-engine continuation", async () => { + const worker = new ResponsiveWorker("python"); + const supervisor = new EngineSupervisor( + new EngineWorkerRegistry([ + { + flavour: "python", + label: "Python fixture", + startupTimeoutMs: 100, + createWorker: () => worker, + }, + ]), + ); + await supervisor.load("python"); + + const older = supervisor.execute(request("python"), 100); + const newer = supervisor.execute(request("python"), 100); + + await expect(older).rejects.toMatchObject({ kind: "cancelled" }); + await expect(newer).resolves.toEqual( + expect.objectContaining({ + engine: expect.objectContaining({ flavour: "python" }), + }), + ); + expect(worker.operations.map((operation) => operation.kind)).toEqual([ + "load", + "execute", + ]); + supervisor.dispose(); + }); + + it("restarts a superseded cold runtime under the startup budget before execution", async () => { + const coldWorker = new StallingWorker(); + const readyWorker = new ResponsiveWorker("python"); + let factoryCalls = 0; + const supervisor = new EngineSupervisor( + new EngineWorkerRegistry([ + { + flavour: "python", + label: "Python fixture", + startupTimeoutMs: 100, + createWorker: () => { + factoryCalls += 1; + return factoryCalls === 1 ? coldWorker : readyWorker; + }, + }, + ]), + ); + + const older = supervisor.execute(request("python"), 1); + const newer = supervisor.execute(request("python"), 1); + + await expect(older).rejects.toMatchObject({ kind: "cancelled" }); + await expect(newer).resolves.toEqual( + expect.objectContaining({ + engine: expect.objectContaining({ flavour: "python" }), + }), + ); + expect(coldWorker.operations.map((operation) => operation.kind)).toEqual([ + "load", + ]); + expect(coldWorker.terminateCalls).toBe(1); + expect(readyWorker.operations.map((operation) => operation.kind)).toEqual([ + "load", + "execute", + ]); + supervisor.dispose(); + }); }); diff --git a/src/regex/execution/EngineSupervisor.ts b/src/regex/execution/EngineSupervisor.ts index 75a3108..27dc8d5 100644 --- a/src/regex/execution/EngineSupervisor.ts +++ b/src/regex/execution/EngineSupervisor.ts @@ -4,7 +4,7 @@ import type { RegexReplacementRequest, RegexReplacementResult, } from "../model/match"; -import { WorkerSupervisor } from "./WorkerSupervisor"; +import { WorkerRequestError, WorkerSupervisor } from "./WorkerSupervisor"; import type { EngineWorkerOperation, EngineWorkerResult, @@ -13,7 +13,7 @@ import { ENGINE_WORKER_REGISTRY, type EngineWorkerRegistry, } from "./engine-registry"; -import type { RegexFlavourId } from "../model/flavour"; +import type { RegexEngineInfo, RegexFlavourId } from "../model/flavour"; export type EngineRuntimeState = | { readonly status: "unloaded" } @@ -28,6 +28,18 @@ export class EngineSupervisor { RegexFlavourId, WorkerSupervisor >(); + private readonly loaded = new Map< + RegexFlavourId, + { + readonly generation: number; + readonly info: RegexEngineInfo; + } + >(); + private readonly loading = new Map< + RegexFlavourId, + Promise + >(); + private readonly operationRevisions = new Map(); private disposed = false; constructor(registry: EngineWorkerRegistry = ENGINE_WORKER_REGISTRY) { @@ -51,14 +63,76 @@ export class EngineSupervisor { return supervisor; } + async load(flavour: RegexFlavourId): Promise { + const registration = this.registry.require(flavour); + const supervisor = this.supervisorFor(flavour); + const loaded = this.loaded.get(flavour); + if ( + loaded && + supervisor.hasWorker && + loaded.generation === supervisor.currentGeneration + ) { + return loaded.info; + } + const current = this.loading.get(flavour); + if (current && supervisor.hasWorker) return current; + const loading: Promise = supervisor + .run({ kind: "load" }, registration.startupTimeoutMs) + .then((response) => { + if (response.kind !== "load") { + throw new Error( + "Engine worker returned the wrong load response kind", + ); + } + if (response.info.flavour !== flavour) { + throw new Error( + `Engine worker for ${flavour} loaded a ${response.info.flavour} runtime.`, + ); + } + this.loaded.set(flavour, { + generation: supervisor.currentGeneration, + info: response.info, + }); + return response.info; + }) + .finally(() => { + if (this.loading.get(flavour) === loading) { + this.loading.delete(flavour); + } + }); + this.loading.set(flavour, loading); + return loading; + } + + private async prepareOperation(flavour: RegexFlavourId): Promise<{ + readonly revision: number; + readonly supervisor: WorkerSupervisor< + EngineWorkerOperation, + EngineWorkerResult + >; + }> { + const revision = (this.operationRevisions.get(flavour) ?? 0) + 1; + this.operationRevisions.set(flavour, revision); + const supervisor = this.supervisorFor(flavour); + if (supervisor.isRunning) supervisor.cancel(); + await this.load(flavour); + if (this.operationRevisions.get(flavour) !== revision) { + throw new WorkerRequestError( + "cancelled", + `${this.registry.require(flavour).label} request was superseded`, + ); + } + return { revision, supervisor }; + } + async execute( request: RegexExecutionRequest, timeoutMs: number, ): Promise { - const response = await this.supervisorFor(request.flavour).run( + const { supervisor } = await this.prepareOperation(request.flavour); + const response = await supervisor.run( { kind: "execute", request }, timeoutMs, - { supersede: true }, ); if (response.kind !== "execute") { throw new Error("Engine worker returned the wrong response kind"); @@ -75,10 +149,10 @@ export class EngineSupervisor { request: RegexReplacementRequest, timeoutMs: number, ): Promise { - const response = await this.supervisorFor(request.flavour).run( + const { supervisor } = await this.prepareOperation(request.flavour); + const response = await supervisor.run( { kind: "replace", request }, timeoutMs, - { supersede: true }, ); if (response.kind !== "replace") { throw new Error("Engine worker returned the wrong response kind"); @@ -92,7 +166,13 @@ export class EngineSupervisor { } cancel(): void { - for (const supervisor of this.supervisors.values()) supervisor.cancel(); + for (const [flavour, supervisor] of this.supervisors) { + this.operationRevisions.set( + flavour, + (this.operationRevisions.get(flavour) ?? 0) + 1, + ); + supervisor.cancel(); + } } dispose(): void { @@ -100,5 +180,8 @@ export class EngineSupervisor { this.disposed = true; for (const supervisor of this.supervisors.values()) supervisor.dispose(); this.supervisors.clear(); + this.loaded.clear(); + this.loading.clear(); + this.operationRevisions.clear(); } } diff --git a/src/regex/execution/WorkerSupervisor.ts b/src/regex/execution/WorkerSupervisor.ts index edaccdd..d986f3c 100644 --- a/src/regex/execution/WorkerSupervisor.ts +++ b/src/regex/execution/WorkerSupervisor.ts @@ -58,6 +58,10 @@ export class WorkerSupervisor { return this.active !== null; } + get hasWorker(): boolean { + return this.worker !== null; + } + run( operation: TOperation, timeoutMs: number, diff --git a/src/regex/execution/adapters/java/JavaEngineAdapter.test.ts b/src/regex/execution/adapters/java/JavaEngineAdapter.test.ts new file mode 100644 index 0000000..3455df8 --- /dev/null +++ b/src/regex/execution/adapters/java/JavaEngineAdapter.test.ts @@ -0,0 +1,263 @@ +import { describe, expect, it, vi } from "vitest"; +import { APPLICATION_VERSION } from "../../../../version"; +import type { RegexExecutionRequest } from "../../../model/match"; +import { + JavaEngineAdapter, + JAVA_BRIDGE_ABI_VERSION, + JAVA_ENGINE_IDENTITY, + JAVA_ENGINE_VERSION, + javaApplicationFlags, + normalizedJavaFlags, +} from "./JavaEngineAdapter"; +import type { TeaVmJavaRegexModule } from "./java-module"; + +function fields(...values: readonly (string | number | boolean)[]): string { + return values + .map((value) => { + const encoded = + typeof value === "boolean" ? (value ? "1" : "0") : String(value); + return `${encoded.length}:${encoded}`; + }) + .join(""); +} + +function module( + overrides: Partial = {}, +): TeaVmJavaRegexModule { + return { + bridgeAbiVersion: () => JAVA_BRIDGE_ABI_VERSION, + engineIdentity: () => JAVA_ENGINE_IDENTITY, + selfTest: () => 0, + execute: () => fields("1", "ok", 0, false, 0), + replace: () => fields("1", "ok", 0, false, 0, false, ""), + ...overrides, + }; +} + +function request( + overrides: Partial = {}, +): RegexExecutionRequest { + return { + flavour: "java", + flavourVersion: "TeaVM java.util.regex 0.15.0", + pattern: "(?a)(b)?", + flags: ["g"], + subject: "ab a", + captureMetadata: [ + { + number: 1, + name: "letter", + range: { startUtf16: 0, endUtf16: 12 }, + repeated: false, + }, + { + number: 2, + range: { startUtf16: 12, endUtf16: 16 }, + repeated: false, + }, + ], + scanAll: false, + maximumMatches: 100, + maximumCaptureRows: 1_000, + ...overrides, + }; +} + +describe("TeaVM Java engine adapter", () => { + it("loads the exact compatibility runtime identity", async () => { + const adapter = new JavaEngineAdapter(module(), "unit-test TeaVM runtime"); + + await expect(adapter.load()).resolves.toEqual( + expect.objectContaining({ + flavour: "java", + adapterVersion: APPLICATION_VERSION, + engineName: "TeaVM java.util.regex", + engineVersion: JAVA_ENGINE_VERSION, + runtimeVersion: "unit-test TeaVM runtime", + offsetUnit: "utf16", + }), + ); + }); + + it("rejects a module that fails ABI identity or self-test", async () => { + await expect( + new JavaEngineAdapter(module({ bridgeAbiVersion: () => 99 })).load(), + ).rejects.toThrow(/identity or bridge self-test/u); + await expect( + new JavaEngineAdapter(module({ selfTest: () => 1 })).load(), + ).rejects.toThrow(/identity or bridge self-test/u); + }); + + it("normalizes adapter flags and maps only native TeaVM bits", () => { + const normalized = normalizedJavaFlags(["U", "i"], true); + expect(normalized).toEqual({ + userFlags: "iU", + effectiveFlags: "giuU", + internallyAddedIndicesFlag: false, + internallyAddedGlobalFlag: true, + }); + expect(javaApplicationFlags(normalized)).toBe( + (1 << 0) | (1 << 3) | (1 << 5), + ); + expect(javaApplicationFlags(normalizedJavaFlags(["d"], false))).toBe( + 1 << 6, + ); + expect(() => normalizedJavaFlags(["i", "i"], false)).toThrow( + /unsupported Java flags/u, + ); + expect(() => normalizedJavaFlags(["y"], false)).toThrow( + /unsupported Java flags/u, + ); + }); + + it("materializes UTF-16 offsets and numbered/named capture metadata", async () => { + const execute = vi.fn(() => + fields("1", "ok", 2, false, 1, 0, 3, 0, 1, -1, -1), + ); + const adapter = new JavaEngineAdapter(module({ execute })); + const result = await adapter.execute( + request({ pattern: "(?a)(😀)?", subject: "a😀" }), + ); + + expect(result.accepted).toBe(true); + expect(result.matches[0]).toEqual( + expect.objectContaining({ + value: "a😀", + range: { startUtf16: 0, endUtf16: 3 }, + nativeRange: { start: 0, end: 3, unit: "utf16" }, + }), + ); + expect(result.matches[0]?.captures).toEqual([ + expect.objectContaining({ + groupNumber: 1, + groupName: "letter", + value: "a", + status: "participated", + range: { startUtf16: 0, endUtf16: 1 }, + }), + { + groupNumber: 2, + status: "did-not-participate", + }, + ]); + expect(execute).toHaveBeenCalledWith( + "(?a)(😀)?", + "a😀", + 0, + true, + 100, + 1_000, + ); + }); + + it("reports authoritative compile failures at pattern UTF-16 offsets", async () => { + const adapter = new JavaEngineAdapter( + module({ + execute: () => + fields( + "1", + "compile-error", + "PatternSyntaxException", + "Unclosed group", + 8, + ), + }), + ); + const result = await adapter.execute( + request({ pattern: "abcdefgh(", subject: "" }), + ); + + expect(result.accepted).toBe(false); + expect(result.diagnostics[0]).toEqual( + expect.objectContaining({ + code: "compile-error", + message: "PatternSyntaxException: Unclosed group", + range: { startUtf16: 8, endUtf16: 9 }, + provenance: "reported", + }), + ); + }); + + it("surfaces result caps and the U semantic boundary", async () => { + const adapter = new JavaEngineAdapter( + module({ + execute: () => fields("1", "ok", 0, true, 1, 0, 0), + }), + ); + const result = await adapter.execute( + request({ + pattern: "(?=.)", + flags: ["U"], + subject: "x", + captureMetadata: [], + }), + ); + + expect(result.truncated).toBe(true); + expect(result.diagnostics.map(({ code }) => code)).toEqual([ + "engine-compatibility", + "result-limit", + ]); + }); + + it("uses bounded UTF-8 replacement output and reports native errors", async () => { + const adapter = new JavaEngineAdapter( + module({ + replace: () => fields("1", "ok", 0, false, 0, false, "é😀x"), + }), + ); + const bounded = await adapter.replace({ + ...request({ pattern: "x", subject: "x", captureMetadata: [] }), + replacement: "é😀x", + maximumOutputBytes: 3, + }); + expect(bounded.output).toBe("é"); + expect(bounded.outputBytes).toBe(2); + expect(bounded.outputTruncated).toBe(true); + expect(bounded.truncated).toBe(true); + expect(bounded.execution.diagnostics.at(-1)?.code).toBe( + "replacement-output-limit", + ); + + const failing = new JavaEngineAdapter( + module({ + replace: () => + fields( + "1", + "replacement-error", + "IllegalArgumentException", + "TeaVM Matcher rejected the replacement.", + -1, + ), + }), + ); + const error = await failing.replace({ + ...request(), + replacement: "${name}", + maximumOutputBytes: 100, + }); + expect(error.execution.accepted).toBe(false); + expect(error.execution.diagnostics[0]?.code).toBe("replacement-error"); + }); + + it("rejects malformed bridge data and requests outside shared bounds", async () => { + const malformed = new JavaEngineAdapter( + module({ execute: () => fields("1", "ok", 1, false, 1, 0, 1, -1, 0) }), + ); + await expect(malformed.execute(request({ subject: "a" }))).rejects.toThrow( + /inconsistent capture offsets/u, + ); + + const adapter = new JavaEngineAdapter(module()); + await expect( + adapter.execute(request({ maximumMatches: 10_001 })), + ).rejects.toThrow(/bounded contract/u); + await expect( + adapter.replace({ + ...request(), + replacement: "x", + maximumOutputBytes: 0, + }), + ).rejects.toThrow(/bounded contract/u); + }); +}); diff --git a/src/regex/execution/adapters/java/JavaEngineAdapter.ts b/src/regex/execution/adapters/java/JavaEngineAdapter.ts new file mode 100644 index 0000000..09c2083 --- /dev/null +++ b/src/regex/execution/adapters/java/JavaEngineAdapter.ts @@ -0,0 +1,657 @@ +import type { RegexEngineAdapter } from "../../RegexEngineAdapter"; +import { DEFAULT_REGEX_LIMITS, utf8ByteLength } from "../../request-limits"; +import type { RegexDiagnostic } from "../../../model/diagnostics"; +import type { RegexEngineInfo } from "../../../model/flavour"; +import type { + CaptureResult, + RegexExecutionFlags, + RegexExecutionRequest, + RegexExecutionResult, + RegexMatchResult, + RegexReplacementRequest, + RegexReplacementResult, +} from "../../../model/match"; +import type { TeaVmJavaRegexModule } from "./java-module"; +import { APPLICATION_VERSION } from "../../../../version"; + +export const JAVA_ADAPTER_VERSION = APPLICATION_VERSION; +export const JAVA_ENGINE_VERSION = "0.15.0"; +export const JAVA_ENGINE_IDENTITY = "TeaVM java.util.regex 0.15.0"; +export const JAVA_BRIDGE_ABI_VERSION = 1; + +const FLAG_ORDER = "gidmsuxU"; +const CAPTURE_VALUE_PREVIEW_UTF16 = 64 * 1024; +const TOTAL_VALUE_PREVIEW_UTF16 = 8 * 1024 * 1024; + +const FLAG_BITS = { + i: 1 << 0, + m: 1 << 1, + s: 1 << 2, + u: 1 << 3, + x: 1 << 4, + U: 1 << 5, + d: 1 << 6, +} as const; + +interface BridgeFailure { + readonly status: + | "bridge-error" + | "compile-error" + | "execution-error" + | "limit-error" + | "replacement-error"; + readonly name: string; + readonly message: string; + readonly index: number; +} + +interface RawCapture { + readonly start: number; + readonly end: number; +} + +interface RawMatch { + readonly start: number; + readonly end: number; + readonly captures: readonly RawCapture[]; +} + +interface BridgeSuccess { + readonly status: "ok"; + readonly groupCount: number; + readonly resultsTruncated: boolean; + readonly matches: readonly RawMatch[]; + readonly outputHardTruncated?: boolean; + readonly output?: string; +} + +type BridgeResult = BridgeFailure | BridgeSuccess; + +class FieldReader { + readonly #encoded: string; + #cursor = 0; + + constructor(encoded: string) { + this.#encoded = encoded; + } + + field(): string { + const colon = this.#encoded.indexOf(":", this.#cursor); + if (colon < 0) { + throw new Error("TeaVM Java bridge returned a malformed field length."); + } + const lengthText = this.#encoded.slice(this.#cursor, colon); + if (!/^(?:0|[1-9][0-9]*)$/u.test(lengthText)) { + throw new Error("TeaVM Java bridge returned an invalid field length."); + } + const length = Number.parseInt(lengthText, 10); + const start = colon + 1; + const end = start + length; + if (!Number.isSafeInteger(length) || end > this.#encoded.length) { + throw new Error( + "TeaVM Java bridge returned a field outside its payload.", + ); + } + this.#cursor = end; + return this.#encoded.slice(start, end); + } + + integer(minimum: number, maximum: number): number { + const value = this.field(); + if (!/^-?(?:0|[1-9][0-9]*)$/u.test(value)) { + throw new Error("TeaVM Java bridge returned an invalid integer."); + } + const parsed = Number.parseInt(value, 10); + if (!Number.isSafeInteger(parsed) || parsed < minimum || parsed > maximum) { + throw new Error("TeaVM Java bridge returned an out-of-range integer."); + } + return parsed; + } + + boolean(): boolean { + const value = this.field(); + if (value !== "0" && value !== "1") { + throw new Error("TeaVM Java bridge returned an invalid boolean."); + } + return value === "1"; + } + + finish(): void { + if (this.#cursor !== this.#encoded.length) { + throw new Error("TeaVM Java bridge returned trailing payload data."); + } + } +} + +class ValuePreviewBudget { + #remaining = TOTAL_VALUE_PREVIEW_UTF16; + truncated = false; + + take(value: string): { readonly value: string; readonly truncated: boolean } { + const maximum = Math.min(CAPTURE_VALUE_PREVIEW_UTF16, this.#remaining); + const preview = value.slice(0, maximum); + this.#remaining -= preview.length; + const truncated = preview.length !== value.length; + this.truncated ||= truncated; + return { value: preview, truncated }; + } +} + +export function javaEngineInfo(runtimeVersion?: string): RegexEngineInfo { + return { + flavour: "java", + adapterVersion: JAVA_ADAPTER_VERSION, + engineName: "TeaVM java.util.regex", + engineVersion: JAVA_ENGINE_VERSION, + runtimeVersion: runtimeVersion ?? "TeaVM JavaScript · not OpenJDK", + offsetUnit: "utf16", + capabilities: { + compilation: true, + matching: true, + replacement: true, + namedCaptures: true, + captureHistory: false, + actualTrace: false, + benchmark: false, + }, + }; +} + +export function normalizedJavaFlags( + userFlags: readonly string[], + scanAll: boolean, +): RegexExecutionFlags { + if ( + new Set(userFlags).size !== userFlags.length || + userFlags.some((flag) => !FLAG_ORDER.includes(flag)) + ) { + throw new RangeError("The request contains unsupported Java flags."); + } + const selected = new Set(userFlags); + const user = [...FLAG_ORDER].filter((flag) => selected.has(flag)).join(""); + const internallyAddedGlobalFlag = scanAll && !selected.has("g"); + if (internallyAddedGlobalFlag) selected.add("g"); + if (selected.has("U")) selected.add("u"); + return { + userFlags: user, + effectiveFlags: [...FLAG_ORDER] + .filter((flag) => selected.has(flag)) + .join(""), + internallyAddedIndicesFlag: false, + internallyAddedGlobalFlag, + }; +} + +export function javaApplicationFlags(flags: RegexExecutionFlags): number { + let result = 0; + for (const flag of flags.effectiveFlags) { + result |= FLAG_BITS[flag as keyof typeof FLAG_BITS] ?? 0; + } + return result; +} + +function validateRequest( + request: RegexExecutionRequest, + replacement?: RegexReplacementRequest, +): void { + if (request.flavour !== "java") { + throw new Error(`Java adapter cannot execute ${request.flavour}.`); + } + if (request.pattern.length > DEFAULT_REGEX_LIMITS.patternHardLengthUtf16) { + throw new RangeError( + `Java patterns are limited to ${DEFAULT_REGEX_LIMITS.patternHardLengthUtf16.toLocaleString()} UTF-16 units.`, + ); + } + if ( + utf8ByteLength(request.subject) > + DEFAULT_REGEX_LIMITS.interactiveSubjectHardBytes + ) { + throw new RangeError("Java subjects are limited to 16 MiB of UTF-8."); + } + if ( + !Number.isSafeInteger(request.maximumMatches) || + request.maximumMatches < 1 || + request.maximumMatches > DEFAULT_REGEX_LIMITS.maximumMatches || + !Number.isSafeInteger(request.maximumCaptureRows) || + request.maximumCaptureRows < 1 || + request.maximumCaptureRows > DEFAULT_REGEX_LIMITS.maximumCaptureRows + ) { + throw new RangeError( + "Java result limits are outside the bounded contract.", + ); + } + if ( + replacement && + (replacement.replacement.length > + DEFAULT_REGEX_LIMITS.maximumReplacementTemplateUtf16 || + !Number.isSafeInteger(replacement.maximumOutputBytes) || + replacement.maximumOutputBytes < 1 || + replacement.maximumOutputBytes > + DEFAULT_REGEX_LIMITS.maximumReplacementOutputBytes) + ) { + throw new RangeError( + "Java replacement or output limits are outside the bounded contract.", + ); + } +} + +function decodeBridgeResult( + encoded: string, + patternLength: number, + subjectLength: number, + maximumMatches: number, + replacement: boolean, +): BridgeResult { + const reader = new FieldReader(encoded); + if (reader.field() !== "1") { + throw new Error("TeaVM Java bridge ABI payload version is unsupported."); + } + const status = reader.field(); + if (status !== "ok") { + if ( + status !== "bridge-error" && + status !== "compile-error" && + status !== "execution-error" && + status !== "limit-error" && + status !== "replacement-error" + ) { + throw new Error("TeaVM Java bridge returned an unknown failure status."); + } + const failure: BridgeFailure = { + status, + name: reader.field(), + message: reader.field(), + index: reader.integer(-1, patternLength), + }; + reader.finish(); + return failure; + } + + const groupCount = reader.integer( + 0, + DEFAULT_REGEX_LIMITS.maximumCaptureGroups, + ); + const resultsTruncated = reader.boolean(); + const matchCount = reader.integer(0, maximumMatches); + const matches: RawMatch[] = []; + for (let matchNumber = 0; matchNumber < matchCount; matchNumber += 1) { + const start = reader.integer(0, subjectLength); + const end = reader.integer(start, subjectLength); + const captures: RawCapture[] = []; + for (let group = 1; group <= groupCount; group += 1) { + const captureStart = reader.integer(-1, subjectLength); + const captureEnd = reader.integer(-1, subjectLength); + if ( + (captureStart === -1) !== (captureEnd === -1) || + (captureStart >= 0 && captureEnd < captureStart) + ) { + throw new Error( + "TeaVM Java bridge returned inconsistent capture offsets.", + ); + } + captures.push({ start: captureStart, end: captureEnd }); + } + matches.push({ start, end, captures }); + } + + const result: BridgeSuccess = replacement + ? { + status: "ok", + groupCount, + resultsTruncated, + matches, + outputHardTruncated: reader.boolean(), + output: reader.field(), + } + : { + status: "ok", + groupCount, + resultsTruncated, + matches, + }; + reader.finish(); + return result; +} + +function bridgeFailureDiagnostic( + failure: BridgeFailure, + request: RegexExecutionRequest, +): RegexDiagnostic { + const code = + failure.status === "compile-error" + ? "compile-error" + : failure.status === "replacement-error" + ? "replacement-error" + : failure.status === "limit-error" + ? "resource-limit" + : "execution-error"; + const index = failure.index; + return { + id: `java-engine-${failure.status}`, + source: "execution-engine", + severity: "error", + code, + message: failure.message + ? `${failure.name}: ${failure.message}` + : failure.name, + ...(index >= 0 && index <= request.pattern.length + ? { + range: { + startUtf16: index, + endUtf16: Math.min(request.pattern.length, index + 1), + }, + } + : {}), + flavour: "java", + provenance: "reported", + }; +} + +function emptyExecution( + info: RegexEngineInfo, + flags: RegexExecutionFlags, + start: number, + diagnostic: RegexDiagnostic, +): RegexExecutionResult { + return { + accepted: false, + engine: info, + flags, + matches: [], + diagnostics: [diagnostic], + elapsedMs: performance.now() - start, + truncated: false, + }; +} + +function materializeMatches( + raw: BridgeSuccess, + request: RegexExecutionRequest, +): { + readonly matches: readonly RegexMatchResult[]; + readonly valuesTruncated: boolean; +} { + const names = new Map( + request.captureMetadata + .filter( + (capture) => capture.number >= 1 && capture.number <= raw.groupCount, + ) + .map((capture) => [capture.number, capture.name]), + ); + const previews = new ValuePreviewBudget(); + const matches = raw.matches.map((match, matchIndex) => { + const value = request.subject.slice(match.start, match.end); + const matchPreview = previews.take(value); + const captures: CaptureResult[] = match.captures.map( + (capture, captureIndex) => { + const groupNumber = captureIndex + 1; + const groupName = names.get(groupNumber); + if (capture.start < 0) { + return { + groupNumber, + ...(groupName ? { groupName } : {}), + status: "did-not-participate" as const, + }; + } + const captureValue = request.subject.slice(capture.start, capture.end); + const preview = previews.take(captureValue); + return { + groupNumber, + ...(groupName ? { groupName } : {}), + value: preview.value, + status: preview.truncated + ? ("truncated" as const) + : capture.start === capture.end + ? ("matched-empty" as const) + : ("participated" as const), + range: { + startUtf16: capture.start, + endUtf16: capture.end, + }, + nativeRange: { + start: capture.start, + end: capture.end, + unit: "utf16" as const, + }, + }; + }, + ); + return { + matchNumber: matchIndex + 1, + value: matchPreview.value, + valueStatus: matchPreview.truncated + ? ("truncated" as const) + : ("complete" as const), + range: { startUtf16: match.start, endUtf16: match.end }, + nativeRange: { + start: match.start, + end: match.end, + unit: "utf16" as const, + }, + captures, + }; + }); + return { matches, valuesTruncated: previews.truncated }; +} + +function compatibilityDiagnostics( + flags: RegexExecutionFlags, +): RegexDiagnostic[] { + return flags.effectiveFlags.includes("U") + ? [ + { + id: "java-teavm-unicode-character-class-compatibility", + source: "execution-engine", + severity: "warning", + code: "engine-compatibility", + message: + "TeaVM 0.15.0 does not implement OpenJDK Pattern.UNICODE_CHARACTER_CLASS. U implies Unicode case folding here, while predefined classes and word boundaries retain TeaVM class-library behaviour.", + flavour: "java", + provenance: "reported", + }, + ] + : []; +} + +function utf8Prefix( + value: string, + maximumBytes: number, +): { + readonly value: string; + readonly bytes: number; + readonly complete: boolean; +} { + let bytes = 0; + let index = 0; + while (index < value.length) { + const first = value.charCodeAt(index); + let width: number; + let units = 1; + if (first <= 0x7f) { + width = 1; + } else if (first <= 0x7ff) { + width = 2; + } else if ( + first >= 0xd800 && + first <= 0xdbff && + index + 1 < value.length && + value.charCodeAt(index + 1) >= 0xdc00 && + value.charCodeAt(index + 1) <= 0xdfff + ) { + width = 4; + units = 2; + } else { + width = 3; + } + if (bytes + width > maximumBytes) break; + bytes += width; + index += units; + } + return { + value: value.slice(0, index), + bytes, + complete: index === value.length, + }; +} + +export class JavaEngineAdapter implements RegexEngineAdapter { + readonly flavour = "java" as const; + readonly #module: TeaVmJavaRegexModule; + readonly #info: RegexEngineInfo; + + constructor(module: TeaVmJavaRegexModule, runtimeVersion?: string) { + this.#module = module; + this.#info = javaEngineInfo(runtimeVersion); + } + + async load(): Promise { + if ( + this.#module.bridgeAbiVersion() !== JAVA_BRIDGE_ABI_VERSION || + this.#module.engineIdentity() !== JAVA_ENGINE_IDENTITY || + this.#module.selfTest() !== 0 + ) { + throw new Error( + "The bundled TeaVM Java regex engine failed its identity or bridge self-test.", + ); + } + return this.#info; + } + + async execute(request: RegexExecutionRequest): Promise { + const result = this.#run(request); + if (!("execution" in result)) return result; + throw new Error("Java execution returned a replacement result."); + } + + async replace( + request: RegexReplacementRequest, + ): Promise { + const result = this.#run(request, request); + if ("execution" in result) return result; + throw new Error("Java replacement returned an execution-only result."); + } + + #run( + request: RegexExecutionRequest, + replacementRequest?: RegexReplacementRequest, + ): RegexExecutionResult | RegexReplacementResult { + const start = performance.now(); + const flags = normalizedJavaFlags(request.flags, request.scanAll); + validateRequest(request, replacementRequest); + const applicationFlags = javaApplicationFlags(flags); + const iterate = flags.effectiveFlags.includes("g"); + const encoded = replacementRequest + ? this.#module.replace( + request.pattern, + request.subject, + replacementRequest.replacement, + applicationFlags, + iterate, + request.maximumMatches, + request.maximumCaptureRows, + ) + : this.#module.execute( + request.pattern, + request.subject, + applicationFlags, + iterate, + request.maximumMatches, + request.maximumCaptureRows, + ); + const bridge = decodeBridgeResult( + encoded, + request.pattern.length, + request.subject.length, + request.maximumMatches, + replacementRequest !== undefined, + ); + if (bridge.status !== "ok") { + const execution = emptyExecution( + this.#info, + flags, + start, + bridgeFailureDiagnostic(bridge, request), + ); + return replacementRequest + ? { + execution, + output: "", + outputBytes: 0, + outputTruncated: false, + truncated: false, + } + : execution; + } + + const materialized = materializeMatches(bridge, request); + const diagnostics = compatibilityDiagnostics(flags); + if (bridge.resultsTruncated) { + diagnostics.push({ + id: "java-results-truncated", + source: "execution-engine", + severity: "warning", + code: "result-limit", + message: `Results reached the configured limit (${request.maximumMatches.toLocaleString()} matches or ${request.maximumCaptureRows.toLocaleString()} capture rows).`, + flavour: "java", + provenance: "derived", + }); + } + if (materialized.valuesTruncated) { + diagnostics.push({ + id: "java-value-previews-truncated", + source: "execution-engine", + severity: "warning", + code: "result-value-preview-limit", + message: + "Displayed TeaVM Java result values were clipped to bounded previews; exact UTF-16 ranges are retained.", + flavour: "java", + provenance: "derived", + }); + } + const execution: RegexExecutionResult = { + accepted: true, + engine: this.#info, + flags, + matches: materialized.matches, + diagnostics, + elapsedMs: performance.now() - start, + truncated: bridge.resultsTruncated, + }; + if (!replacementRequest) return execution; + + const bounded = utf8Prefix( + bridge.output ?? "", + replacementRequest.maximumOutputBytes, + ); + const outputTruncated = + bridge.outputHardTruncated === true || !bounded.complete; + const executionWithOutputDiagnostic: RegexExecutionResult = outputTruncated + ? { + ...execution, + diagnostics: [ + ...execution.diagnostics, + { + id: "java-output-truncated", + source: "execution-engine", + severity: "warning", + code: "replacement-output-limit", + message: `Replacement preview was truncated at ${replacementRequest.maximumOutputBytes.toLocaleString()} UTF-8 bytes or the bounded TeaVM bridge cap.`, + flavour: "java", + provenance: "derived", + }, + ], + } + : execution; + return { + execution: executionWithOutputDiagnostic, + output: bounded.value, + outputBytes: bounded.bytes, + outputTruncated, + truncated: outputTruncated || bridge.resultsTruncated, + }; + } + + terminate(): void { + // Lifecycle termination is performed by killing the containing worker. + } +} diff --git a/src/regex/execution/adapters/java/java-module.ts b/src/regex/execution/adapters/java/java-module.ts new file mode 100644 index 0000000..5decdd8 --- /dev/null +++ b/src/regex/execution/adapters/java/java-module.ts @@ -0,0 +1,48 @@ +export interface TeaVmJavaRegexModule { + readonly bridgeAbiVersion: () => number; + readonly engineIdentity: () => string; + readonly selfTest: () => number; + readonly execute: ( + pattern: string, + subject: string, + applicationFlags: number, + iterate: boolean, + maximumMatches: number, + maximumCaptureRows: number, + ) => string; + readonly replace: ( + pattern: string, + subject: string, + replacement: string, + applicationFlags: number, + iterate: boolean, + maximumMatches: number, + maximumCaptureRows: number, + ) => string; +} + +function isJavaRegexModule( + imported: Partial, +): imported is TeaVmJavaRegexModule { + return ( + typeof imported.bridgeAbiVersion === "function" && + typeof imported.engineIdentity === "function" && + typeof imported.selfTest === "function" && + typeof imported.execute === "function" && + typeof imported.replace === "function" + ); +} + +export async function importJavaRegexModule( + moduleUrl: URL, +): Promise { + const imported = (await import( + /* @vite-ignore */ moduleUrl.href + )) as Partial; + if (!isJavaRegexModule(imported)) { + throw new Error( + "The bundled TeaVM Java regex module is missing its bridge exports.", + ); + } + return imported; +} diff --git a/src/regex/execution/adapters/python/PythonEngineAdapter.test.ts b/src/regex/execution/adapters/python/PythonEngineAdapter.test.ts new file mode 100644 index 0000000..cfd049a --- /dev/null +++ b/src/regex/execution/adapters/python/PythonEngineAdapter.test.ts @@ -0,0 +1,215 @@ +import { describe, expect, it } from "vitest"; +import type { + RegexExecutionRequest, + RegexReplacementRequest, +} from "../../../model/match"; +import { + PythonEngineAdapter, + PYODIDE_ENGINE_VERSION, + PYTHON_BRIDGE_ABI_VERSION, + PYTHON_ENGINE_VERSION, +} from "./PythonEngineAdapter"; +import type { PyodideRuntime, PythonCallableProxy } from "./python-module"; + +function request( + overrides: Partial = {}, +): RegexExecutionRequest { + return { + flavour: "python", + flavourVersion: PYTHON_ENGINE_VERSION, + pattern: "(?P😀)(x)?", + flags: ["g"], + subject: "a😀b", + captureMetadata: [], + scanAll: false, + maximumMatches: 100, + maximumCaptureRows: 1_000, + ...overrides, + }; +} + +function callable( + responder: ( + operation: "identity" | "execute" | "replace", + ) => Record, +): PythonCallableProxy & { destroyed: boolean } { + const bridge = ((operation: "identity" | "execute" | "replace") => + JSON.stringify(responder(operation))) as unknown as PythonCallableProxy & { + destroyed: boolean; + }; + bridge.destroyed = false; + bridge.destroy = () => { + bridge.destroyed = true; + }; + return bridge; +} + +class FakePyodide implements PyodideRuntime { + readonly version = PYODIDE_ENGINE_VERSION; + readonly bridge: PythonCallableProxy & { destroyed: boolean }; + runPythonCalls = 0; + + constructor( + responder: ( + operation: "identity" | "execute" | "replace", + ) => Record, + ) { + this.bridge = callable(responder); + } + + runPython(source: string): unknown { + void source; + this.runPythonCalls += 1; + return this.bridge; + } +} + +function identity(): Record { + return { + abi: PYTHON_BRIDGE_ABI_VERSION, + ok: true, + identity: { + implementation: "cpython", + pythonVersion: "3.14.2", + reModule: "re", + }, + }; +} + +describe("Python Pyodide adapter", () => { + it("normalizes authoritative code-point ranges and capture names", async () => { + const runtime = new FakePyodide((operation) => + operation === "identity" + ? identity() + : { + abi: PYTHON_BRIDGE_ABI_VERSION, + ok: true, + groupCount: 2, + groupNames: [[1, "emoji"]], + matches: [ + { + span: [1, 2], + captures: [[1, 2], null], + }, + ], + resultsTruncated: false, + }, + ); + const adapter = new PythonEngineAdapter(runtime, "unit-test runtime"); + + await expect(adapter.load()).resolves.toEqual( + expect.objectContaining({ + flavour: "python", + engineVersion: PYTHON_ENGINE_VERSION, + offsetUnit: "code-point", + }), + ); + const result = await adapter.execute(request()); + + expect(result.accepted).toBe(true); + expect(result.matches[0]).toEqual( + expect.objectContaining({ + value: "😀", + range: { startUtf16: 1, endUtf16: 3 }, + nativeRange: { start: 1, end: 2, unit: "code-point" }, + }), + ); + expect(result.matches[0]?.captures).toEqual([ + expect.objectContaining({ + groupNumber: 1, + groupName: "emoji", + value: "😀", + range: { startUtf16: 1, endUtf16: 3 }, + }), + { + groupNumber: 2, + status: "did-not-participate", + }, + ]); + expect(runtime.runPythonCalls).toBe(1); + }); + + it("normalizes compile positions and scan-all flags", async () => { + const runtime = new FakePyodide((operation) => + operation === "identity" + ? identity() + : { + abi: PYTHON_BRIDGE_ABI_VERSION, + ok: false, + phase: "compile", + code: "compile-error", + message: "missing )", + position: 2, + }, + ); + const adapter = new PythonEngineAdapter(runtime); + const result = await adapter.execute( + request({ pattern: "😀(", flags: ["i"], scanAll: true }), + ); + + expect(result.accepted).toBe(false); + expect(result.flags).toEqual({ + userFlags: "i", + effectiveFlags: "gi", + internallyAddedIndicesFlag: false, + internallyAddedGlobalFlag: true, + }); + expect(result.diagnostics[0]).toEqual( + expect.objectContaining({ + code: "compile-error", + range: { startUtf16: 3, endUtf16: 3 }, + }), + ); + }); + + it("returns bounded native replacement output and disposes its proxy", async () => { + const runtime = new FakePyodide((operation) => { + if (operation === "identity") return identity(); + return { + abi: PYTHON_BRIDGE_ABI_VERSION, + ok: true, + groupCount: 1, + groupNames: [[1, "emoji"]], + matches: [{ span: [1, 2], captures: [[1, 2]] }], + resultsTruncated: false, + output: "a[😀]", + outputBytes: 7, + outputTruncated: true, + }; + }); + const adapter = new PythonEngineAdapter(runtime); + const replacementRequest: RegexReplacementRequest = { + ...request(), + replacement: "[\\g]", + maximumOutputBytes: 7, + }; + + const result = await adapter.replace(replacementRequest); + + expect(result.output).toBe("a[😀]"); + expect(result.outputBytes).toBe(7); + expect(result.outputTruncated).toBe(true); + expect(result.execution.diagnostics).toEqual([ + expect.objectContaining({ code: "replacement-output-limit" }), + ]); + adapter.terminate(); + expect(runtime.bridge.destroyed).toBe(true); + await expect(adapter.execute(request())).rejects.toThrow("terminated"); + }); + + it("rejects unsupported flags and unbounded output requests", async () => { + const runtime = new FakePyodide(identity); + const adapter = new PythonEngineAdapter(runtime); + + await expect(adapter.execute(request({ flags: ["u"] }))).rejects.toThrow( + "unsupported Python re flags", + ); + await expect( + adapter.replace({ + ...request(), + replacement: "x", + maximumOutputBytes: 0, + }), + ).rejects.toThrow("outside the bounded contract"); + }); +}); diff --git a/src/regex/execution/adapters/python/PythonEngineAdapter.ts b/src/regex/execution/adapters/python/PythonEngineAdapter.ts new file mode 100644 index 0000000..09be798 --- /dev/null +++ b/src/regex/execution/adapters/python/PythonEngineAdapter.ts @@ -0,0 +1,734 @@ +import type { RegexEngineAdapter } from "../../RegexEngineAdapter"; +import { DEFAULT_REGEX_LIMITS, utf8ByteLength } from "../../request-limits"; +import type { RegexDiagnostic } from "../../../model/diagnostics"; +import type { RegexEngineInfo } from "../../../model/flavour"; +import type { + CaptureResult, + RegexExecutionFlags, + RegexExecutionRequest, + RegexExecutionResult, + RegexMatchResult, + RegexReplacementRequest, + RegexReplacementResult, +} from "../../../model/match"; +import { APPLICATION_VERSION } from "../../../../version"; +import PYTHON_BRIDGE_SOURCE from "../../../../../engines/python/bridge.py?raw"; +import type { PyodideRuntime, PythonCallableProxy } from "./python-module"; + +export const PYTHON_BRIDGE_ABI_VERSION = 1; +export const PYTHON_ENGINE_VERSION = "CPython 3.14.2 re"; +export const PYODIDE_ENGINE_VERSION = "314.0.3"; + +const FLAG_ORDER = "gaimsx"; +const CAPTURE_VALUE_PREVIEW_UTF16 = 64 * 1024; +const TOTAL_VALUE_PREVIEW_UTF16 = 8 * 1024 * 1024; +const EXECUTION_RESULT_JSON_UTF16_LIMIT = 32 * 1024 * 1024; + +interface NativeError { + readonly abi: number; + readonly ok: false; + readonly phase: "bridge" | "compile" | "match" | "replacement"; + readonly code: string; + readonly message: string; + readonly position?: number; +} + +interface NativeIdentity { + readonly abi: number; + readonly ok: true; + readonly identity: { + readonly implementation: string; + readonly pythonVersion: string; + readonly reModule: string; + }; +} + +type NativeSpan = readonly [number, number]; + +interface NativeMatch { + readonly span: NativeSpan; + readonly captures: readonly (NativeSpan | null)[]; +} + +interface NativeExecution { + readonly abi: number; + readonly ok: true; + readonly groupCount: number; + readonly groupNames: readonly (readonly [number, string])[]; + readonly matches: readonly NativeMatch[]; + readonly resultsTruncated: boolean; + readonly output?: string; + readonly outputBytes?: number; + readonly outputTruncated?: boolean; +} + +class ValuePreviewBudget { + #remaining = TOTAL_VALUE_PREVIEW_UTF16; + truncated = false; + + take(value: string): { readonly value: string; readonly truncated: boolean } { + const maximum = Math.min(CAPTURE_VALUE_PREVIEW_UTF16, this.#remaining); + const preview = value.slice(0, maximum); + this.#remaining -= preview.length; + const truncated = preview.length !== value.length; + this.truncated ||= truncated; + return { value: preview, truncated }; + } +} + +function isRecord(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} + +function codePointLength(value: string): number { + let length = 0; + for (let index = 0; index < value.length; index += 1) { + const first = value.charCodeAt(index); + if (first >= 0xd800 && first <= 0xdbff && index + 1 < value.length) { + const second = value.charCodeAt(index + 1); + if (second >= 0xdc00 && second <= 0xdfff) index += 1; + } + length += 1; + } + return length; +} + +function codePointOffsetToUtf16(value: string, target: number): number { + if (!Number.isSafeInteger(target) || target < 0) { + throw new RangeError(`Invalid code-point offset ${target}.`); + } + let codePointOffset = 0; + let utf16Offset = 0; + if (target === 0) return 0; + for (const character of value) { + codePointOffset += 1; + utf16Offset += character.length; + if (codePointOffset === target) return utf16Offset; + } + throw new RangeError(`Code-point offset ${target} is outside the input.`); +} + +function selectedCodePointOffsetsToUtf16( + value: string, + selected: ReadonlySet, +): ReadonlyMap { + const result = new Map(); + let codePointOffset = 0; + let utf16Offset = 0; + if (selected.has(0)) result.set(0, 0); + for (const character of value) { + codePointOffset += 1; + utf16Offset += character.length; + if (selected.has(codePointOffset)) { + result.set(codePointOffset, utf16Offset); + } + } + if (result.size !== selected.size) { + throw new Error("A Python native range is outside the subject."); + } + return result; +} + +function parseBridgeJson(value: unknown, maximumUtf16: number): unknown { + if (typeof value !== "string") { + throw new Error("The Python bridge returned a non-string result."); + } + if (value.length > maximumUtf16) { + throw new Error("The Python bridge result exceeds its bounded contract."); + } + try { + return JSON.parse(value) as unknown; + } catch { + throw new Error("The Python bridge returned invalid JSON."); + } +} + +function parseNativeError(value: unknown): NativeError | undefined { + if (!isRecord(value) || value.ok !== false) return undefined; + if ( + value.abi !== PYTHON_BRIDGE_ABI_VERSION || + !["bridge", "compile", "match", "replacement"].includes( + String(value.phase), + ) || + typeof value.code !== "string" || + typeof value.message !== "string" || + (value.position !== undefined && + (!Number.isSafeInteger(value.position) || Number(value.position) < 0)) + ) { + throw new Error("The Python bridge returned an invalid error record."); + } + return value as unknown as NativeError; +} + +function requireIdentity(value: unknown): NativeIdentity { + if ( + !isRecord(value) || + value.abi !== PYTHON_BRIDGE_ABI_VERSION || + value.ok !== true || + !isRecord(value.identity) || + typeof value.identity.implementation !== "string" || + typeof value.identity.pythonVersion !== "string" || + typeof value.identity.reModule !== "string" + ) { + throw new Error("The Python bridge returned an invalid identity record."); + } + return value as unknown as NativeIdentity; +} + +function isNativeSpan( + value: unknown, + maximumCodePoint: number, +): value is NativeSpan { + return ( + Array.isArray(value) && + value.length === 2 && + Number.isSafeInteger(value[0]) && + Number.isSafeInteger(value[1]) && + Number(value[0]) >= 0 && + Number(value[0]) <= Number(value[1]) && + Number(value[1]) <= maximumCodePoint + ); +} + +function requireExecution( + value: unknown, + request: RegexExecutionRequest, + subjectCodePointLength: number, + replacementRequest?: RegexReplacementRequest, +): NativeExecution { + if ( + !isRecord(value) || + value.abi !== PYTHON_BRIDGE_ABI_VERSION || + value.ok !== true || + !Number.isSafeInteger(value.groupCount) || + Number(value.groupCount) < 0 || + Number(value.groupCount) > DEFAULT_REGEX_LIMITS.maximumCaptureGroups || + !Array.isArray(value.groupNames) || + !Array.isArray(value.matches) || + typeof value.resultsTruncated !== "boolean" || + value.matches.length > request.maximumMatches + ) { + throw new Error("The Python bridge returned an invalid result record."); + } + + const groupCount = Number(value.groupCount); + const names = new Set(); + for (const entry of value.groupNames) { + if ( + !Array.isArray(entry) || + entry.length !== 2 || + !Number.isSafeInteger(entry[0]) || + Number(entry[0]) < 1 || + Number(entry[0]) > groupCount || + names.has(Number(entry[0])) || + typeof entry[1] !== "string" + ) { + throw new Error("The Python bridge returned invalid capture names."); + } + names.add(Number(entry[0])); + } + + let captureRows = 0; + for (const entry of value.matches) { + if ( + !isRecord(entry) || + !isNativeSpan(entry.span, subjectCodePointLength) || + !Array.isArray(entry.captures) || + entry.captures.length !== groupCount + ) { + throw new Error("The Python bridge returned an invalid match record."); + } + captureRows += Math.max(1, groupCount); + if (captureRows > request.maximumCaptureRows) { + throw new Error("The Python bridge exceeded the capture-row limit."); + } + for (const capture of entry.captures) { + if (capture !== null && !isNativeSpan(capture, subjectCodePointLength)) { + throw new Error("The Python bridge returned an invalid capture range."); + } + } + } + + if (replacementRequest) { + if ( + typeof value.output !== "string" || + !Number.isSafeInteger(value.outputBytes) || + Number(value.outputBytes) < 0 || + Number(value.outputBytes) > replacementRequest.maximumOutputBytes || + utf8ByteLength(value.output) !== value.outputBytes || + typeof value.outputTruncated !== "boolean" + ) { + throw new Error( + "The Python bridge returned invalid bounded replacement output.", + ); + } + } else if ( + value.output !== undefined || + value.outputBytes !== undefined || + value.outputTruncated !== undefined + ) { + throw new Error( + "The Python bridge returned replacement data for an execution request.", + ); + } + return value as unknown as NativeExecution; +} + +function normalizedPythonFlags( + userFlags: readonly string[], + scanAll: boolean, +): RegexExecutionFlags { + const selected = new Set(userFlags); + const internallyAddedGlobalFlag = scanAll && !selected.has("g"); + if (internallyAddedGlobalFlag) selected.add("g"); + return { + userFlags: [...FLAG_ORDER] + .filter((flag) => userFlags.includes(flag)) + .join(""), + effectiveFlags: [...FLAG_ORDER] + .filter((flag) => selected.has(flag)) + .join(""), + internallyAddedIndicesFlag: false, + internallyAddedGlobalFlag, + }; +} + +function validateRequest( + request: RegexExecutionRequest, + replacementRequest?: RegexReplacementRequest, +): void { + if (request.flavour !== "python") { + throw new Error(`Python adapter cannot execute ${request.flavour}.`); + } + if ( + new Set(request.flags).size !== request.flags.length || + request.flags.some( + (flag) => flag.length !== 1 || !FLAG_ORDER.includes(flag), + ) + ) { + throw new RangeError("The request contains unsupported Python re flags."); + } + if (request.pattern.length > DEFAULT_REGEX_LIMITS.patternHardLengthUtf16) { + throw new RangeError( + `Python re patterns are limited to ${DEFAULT_REGEX_LIMITS.patternHardLengthUtf16.toLocaleString()} UTF-16 units.`, + ); + } + if ( + utf8ByteLength(request.subject) > + DEFAULT_REGEX_LIMITS.interactiveSubjectHardBytes + ) { + throw new RangeError("Python re subjects are limited to 16 MiB of UTF-8."); + } + if ( + !Number.isSafeInteger(request.maximumMatches) || + request.maximumMatches < 1 || + request.maximumMatches > DEFAULT_REGEX_LIMITS.maximumMatches || + !Number.isSafeInteger(request.maximumCaptureRows) || + request.maximumCaptureRows < 1 || + request.maximumCaptureRows > DEFAULT_REGEX_LIMITS.maximumCaptureRows + ) { + throw new RangeError( + "Python re result limits are outside the bounded contract.", + ); + } + if (request.options && Object.keys(request.options).length > 0) { + throw new RangeError( + "The Python re engine does not accept engine options.", + ); + } + if ( + replacementRequest && + (replacementRequest.replacement.length > + DEFAULT_REGEX_LIMITS.maximumReplacementTemplateUtf16 || + !Number.isSafeInteger(replacementRequest.maximumOutputBytes) || + replacementRequest.maximumOutputBytes < 1 || + replacementRequest.maximumOutputBytes > + DEFAULT_REGEX_LIMITS.maximumReplacementOutputBytes) + ) { + throw new RangeError( + "Python replacement or output limits are outside the bounded contract.", + ); + } +} + +export function pythonEngineInfo(runtimeIdentity?: string): RegexEngineInfo { + return { + flavour: "python", + adapterVersion: APPLICATION_VERSION, + engineName: "CPython re via Pyodide", + engineVersion: PYTHON_ENGINE_VERSION, + runtimeVersion: [ + `Pyodide ${PYODIDE_ENGINE_VERSION}`, + "WebAssembly", + runtimeIdentity, + ] + .filter(Boolean) + .join(" · "), + offsetUnit: "code-point", + capabilities: { + compilation: true, + matching: true, + replacement: true, + namedCaptures: true, + captureHistory: false, + actualTrace: false, + benchmark: false, + }, + }; +} + +function diagnosticForError( + error: NativeError, + pattern: string, +): RegexDiagnostic { + let range: + { readonly startUtf16: number; readonly endUtf16: number } | undefined; + if ( + error.phase === "compile" && + error.position !== undefined && + error.position <= codePointLength(pattern) + ) { + const offset = codePointOffsetToUtf16(pattern, error.position); + range = { startUtf16: offset, endUtf16: offset }; + } + return { + id: `python-${error.phase}-${error.code}`, + source: "execution-engine", + severity: "error", + code: error.code, + message: `Python re ${error.phase} error: ${error.message}`, + ...(range ? { range } : {}), + flavour: "python", + provenance: "reported", + }; +} + +function materializeMatches( + native: NativeExecution, + request: RegexExecutionRequest, +): { + readonly matches: readonly RegexMatchResult[]; + readonly valuesTruncated: boolean; +} { + const names = new Map(native.groupNames); + const previews = new ValuePreviewBudget(); + const selectedOffsets = new Set(); + for (const match of native.matches) { + selectedOffsets.add(match.span[0]); + selectedOffsets.add(match.span[1]); + for (const capture of match.captures) { + if (capture !== null) { + selectedOffsets.add(capture[0]); + selectedOffsets.add(capture[1]); + } + } + } + const editorOffsets = selectedCodePointOffsetsToUtf16( + request.subject, + selectedOffsets, + ); + const editorOffset = (nativeOffset: number): number => { + const value = editorOffsets.get(nativeOffset); + if (value === undefined) { + throw new Error("A Python native offset was not normalized."); + } + return value; + }; + const matches = native.matches.map((match, index): RegexMatchResult => { + const startUtf16 = editorOffset(match.span[0]); + const endUtf16 = editorOffset(match.span[1]); + const value = request.subject.slice(startUtf16, endUtf16); + const preview = previews.take(value); + const captures = match.captures.map((span, captureIndex): CaptureResult => { + const groupNumber = captureIndex + 1; + const groupName = names.get(groupNumber); + if (span === null) { + return { + groupNumber, + ...(groupName ? { groupName } : {}), + status: "did-not-participate", + }; + } + const captureStartUtf16 = editorOffset(span[0]); + const captureEndUtf16 = editorOffset(span[1]); + const captureValue = request.subject.slice( + captureStartUtf16, + captureEndUtf16, + ); + const capturePreview = previews.take(captureValue); + return { + groupNumber, + ...(groupName ? { groupName } : {}), + value: capturePreview.value, + status: capturePreview.truncated + ? "truncated" + : captureValue.length === 0 + ? "matched-empty" + : "participated", + range: { + startUtf16: captureStartUtf16, + endUtf16: captureEndUtf16, + }, + nativeRange: { + start: span[0], + end: span[1], + unit: "code-point", + }, + }; + }); + return { + matchNumber: index + 1, + value: preview.value, + valueStatus: preview.truncated ? "truncated" : "complete", + range: { startUtf16, endUtf16 }, + nativeRange: { + start: match.span[0], + end: match.span[1], + unit: "code-point", + }, + captures, + }; + }); + return { matches, valuesTruncated: previews.truncated }; +} + +function resultDiagnostics( + request: RegexExecutionRequest, + native: NativeExecution, + valuesTruncated: boolean, + replacementRequest?: RegexReplacementRequest, +): readonly RegexDiagnostic[] { + const diagnostics: RegexDiagnostic[] = []; + if (native.resultsTruncated) { + diagnostics.push({ + id: "python-results-truncated", + source: "execution-engine", + severity: "warning", + code: "result-limit", + message: `Results reached the configured limit (${request.maximumMatches.toLocaleString()} matches or ${request.maximumCaptureRows.toLocaleString()} capture rows).`, + flavour: "python", + provenance: "derived", + }); + } + if (valuesTruncated) { + diagnostics.push({ + id: "python-value-previews-truncated", + source: "execution-engine", + severity: "warning", + code: "result-value-preview-limit", + message: + "Displayed Python re result values were clipped to bounded previews; exact code-point and UTF-16 ranges are retained.", + flavour: "python", + provenance: "derived", + }); + } + if (replacementRequest && native.outputTruncated) { + diagnostics.push({ + id: "python-output-truncated", + source: "execution-engine", + severity: "warning", + code: "replacement-output-limit", + message: `Replacement preview was truncated at ${replacementRequest.maximumOutputBytes.toLocaleString()} UTF-8 bytes.`, + flavour: "python", + provenance: "derived", + }); + } + return diagnostics; +} + +function failedExecution( + info: RegexEngineInfo, + flags: RegexExecutionFlags, + start: number, + diagnostic: RegexDiagnostic, +): RegexExecutionResult { + return { + accepted: false, + engine: info, + flags, + matches: [], + diagnostics: [diagnostic], + elapsedMs: performance.now() - start, + truncated: false, + }; +} + +export class PythonEngineAdapter implements RegexEngineAdapter { + readonly flavour = "python" as const; + readonly #runtime: PyodideRuntime; + readonly #info: RegexEngineInfo; + #bridge: PythonCallableProxy | undefined; + #loadPromise: Promise | undefined; + #terminated = false; + + constructor(runtime: PyodideRuntime, runtimeIdentity?: string) { + this.#runtime = runtime; + this.#info = pythonEngineInfo(runtimeIdentity); + } + + load(): Promise { + this.#loadPromise ??= Promise.resolve().then(() => { + if (this.#terminated) { + throw new Error("The Python engine adapter has been terminated."); + } + if (this.#runtime.version !== PYODIDE_ENGINE_VERSION) { + throw new Error( + `Expected Pyodide ${PYODIDE_ENGINE_VERSION}, received ${this.#runtime.version}.`, + ); + } + const bridge = this.#bridgeProxy(); + const identity = requireIdentity( + parseBridgeJson(bridge("identity", "", "", "", 1, 1, "", 1), 16 * 1024), + ); + if ( + identity.identity.implementation !== "cpython" || + identity.identity.pythonVersion !== "3.14.2" || + identity.identity.reModule !== "re" + ) { + throw new Error( + "The bundled Python runtime failed its identity self-test.", + ); + } + return this.#info; + }); + return this.#loadPromise; + } + + async execute(request: RegexExecutionRequest): Promise { + await this.load(); + validateRequest(request); + const start = performance.now(); + const flags = normalizedPythonFlags(request.flags, request.scanAll); + const subjectCodePoints = codePointLength(request.subject); + const parsed = parseBridgeJson( + this.#bridgeProxy()( + "execute", + request.pattern, + flags.effectiveFlags, + request.subject, + request.maximumMatches, + request.maximumCaptureRows, + "", + 1, + ), + EXECUTION_RESULT_JSON_UTF16_LIMIT, + ); + const error = parseNativeError(parsed); + if (error) { + return failedExecution( + this.#info, + flags, + start, + diagnosticForError(error, request.pattern), + ); + } + const native = requireExecution(parsed, request, subjectCodePoints); + const materialized = materializeMatches(native, request); + return { + accepted: true, + engine: this.#info, + flags, + matches: materialized.matches, + diagnostics: resultDiagnostics( + request, + native, + materialized.valuesTruncated, + ), + elapsedMs: performance.now() - start, + truncated: native.resultsTruncated, + }; + } + + async replace( + request: RegexReplacementRequest, + ): Promise { + await this.load(); + validateRequest(request, request); + const start = performance.now(); + const flags = normalizedPythonFlags(request.flags, request.scanAll); + const subjectCodePoints = codePointLength(request.subject); + const maximumJsonUtf16 = + request.maximumOutputBytes * 6 + EXECUTION_RESULT_JSON_UTF16_LIMIT; + const parsed = parseBridgeJson( + this.#bridgeProxy()( + "replace", + request.pattern, + flags.effectiveFlags, + request.subject, + request.maximumMatches, + request.maximumCaptureRows, + request.replacement, + request.maximumOutputBytes, + ), + maximumJsonUtf16, + ); + const error = parseNativeError(parsed); + if (error) { + return { + execution: failedExecution( + this.#info, + flags, + start, + diagnosticForError(error, request.pattern), + ), + output: "", + outputBytes: 0, + outputTruncated: false, + truncated: false, + }; + } + const native = requireExecution( + parsed, + request, + subjectCodePoints, + request, + ); + const materialized = materializeMatches(native, request); + const execution: RegexExecutionResult = { + accepted: true, + engine: this.#info, + flags, + matches: materialized.matches, + diagnostics: resultDiagnostics( + request, + native, + materialized.valuesTruncated, + request, + ), + elapsedMs: performance.now() - start, + truncated: native.resultsTruncated, + }; + return { + execution, + output: native.output ?? "", + outputBytes: native.outputBytes ?? 0, + outputTruncated: native.outputTruncated ?? false, + truncated: native.resultsTruncated || (native.outputTruncated ?? false), + }; + } + + terminate(): void { + if (this.#terminated) return; + this.#terminated = true; + this.#bridge?.destroy(); + this.#bridge = undefined; + } + + #bridgeProxy(): PythonCallableProxy { + if (this.#terminated) { + throw new Error("The Python engine adapter has been terminated."); + } + if (!this.#bridge) { + const bridge = this.#runtime.runPython(PYTHON_BRIDGE_SOURCE); + if ( + typeof bridge !== "function" || + !("destroy" in bridge) || + typeof bridge.destroy !== "function" + ) { + throw new Error("The fixed Python bridge did not return a callable."); + } + this.#bridge = bridge as PythonCallableProxy; + } + return this.#bridge; + } +} diff --git a/src/regex/execution/adapters/python/python-module.ts b/src/regex/execution/adapters/python/python-module.ts new file mode 100644 index 0000000..ac8e762 --- /dev/null +++ b/src/regex/execution/adapters/python/python-module.ts @@ -0,0 +1,46 @@ +export interface PythonCallableProxy { + ( + operation: "identity" | "execute" | "replace", + pattern: string, + flags: string, + subject: string, + maximumMatches: number, + maximumCaptureRows: number, + replacement: string, + maximumOutputBytes: number, + ): unknown; + destroy(): void; +} + +export interface PyodideRuntime { + readonly version: string; + runPython(source: string): unknown; +} + +export interface PyodideLoaderOptions { + readonly indexURL: string; + readonly stdout?: (line: string) => void; + readonly stderr?: (line: string) => void; +} + +export interface PyodideModule { + readonly version: string; + loadPyodide(options: PyodideLoaderOptions): Promise; +} + +export async function importPyodideModule( + moduleUrl: URL, +): Promise { + const imported: unknown = await import(/* @vite-ignore */ moduleUrl.href); + if ( + typeof imported !== "object" || + imported === null || + !("version" in imported) || + typeof imported.version !== "string" || + !("loadPyodide" in imported) || + typeof imported.loadPyodide !== "function" + ) { + throw new Error("The Python runtime module has an invalid shape."); + } + return imported as PyodideModule; +} diff --git a/src/regex/execution/engine-registry.ts b/src/regex/execution/engine-registry.ts index dc19858..ab9ec8c 100644 --- a/src/regex/execution/engine-registry.ts +++ b/src/regex/execution/engine-registry.ts @@ -4,6 +4,7 @@ import type { WorkerFactory } from "./WorkerSupervisor"; export interface EngineWorkerRegistration { readonly flavour: RegexFlavourId; readonly label: string; + readonly startupTimeoutMs: number; readonly createWorker: WorkerFactory; } @@ -45,6 +46,7 @@ export const ENGINE_WORKER_REGISTRY = new EngineWorkerRegistry([ { flavour: "ecmascript", label: "ECMAScript engine", + startupTimeoutMs: 1_000, createWorker: () => new Worker( new URL("../../workers/ecmascript.worker.ts", import.meta.url), @@ -57,10 +59,31 @@ export const ENGINE_WORKER_REGISTRY = new EngineWorkerRegistry([ { flavour: "pcre2", label: "PCRE2 engine", + startupTimeoutMs: 10_000, createWorker: () => new Worker(new URL("../../workers/pcre2.worker.ts", import.meta.url), { type: "module", name: "regex-tools-pcre2", }), }, + { + flavour: "python", + label: "Python re engine", + startupTimeoutMs: 30_000, + createWorker: () => + new Worker(new URL("../../workers/python.worker.ts", import.meta.url), { + type: "module", + name: "regex-tools-python", + }), + }, + { + flavour: "java", + label: "Java regex engine", + startupTimeoutMs: 15_000, + createWorker: () => + new Worker(new URL("../../workers/java.worker.ts", import.meta.url), { + type: "module", + name: "regex-tools-java", + }), + }, ]); diff --git a/src/regex/execution/worker-protocol.ts b/src/regex/execution/worker-protocol.ts index 6630fee..b848642 100644 --- a/src/regex/execution/worker-protocol.ts +++ b/src/regex/execution/worker-protocol.ts @@ -9,10 +9,11 @@ import type { RegexSyntaxResult, ReplacementSyntaxResult, } from "../model/syntax"; +import type { RegexEngineInfo } from "../model/flavour"; import type { ReplacementSyntaxRequest } from "../syntax/SyntaxProvider"; import type { Pcre2TraceRequest, Pcre2TraceResult } from "../model/trace"; -export const WORKER_PROTOCOL_VERSION = 1; +export const WORKER_PROTOCOL_VERSION = 2; export type SyntaxWorkerOperation = | { @@ -35,6 +36,9 @@ export type SyntaxWorkerResult = }; export type EngineWorkerOperation = + | { + readonly kind: "load"; + } | { readonly kind: "execute"; readonly request: RegexExecutionRequest; @@ -45,6 +49,10 @@ export type EngineWorkerOperation = }; export type EngineWorkerResult = + | { + readonly kind: "load"; + readonly info: RegexEngineInfo; + } | { readonly kind: "execute"; readonly result: RegexExecutionResult; diff --git a/src/regex/flavours/flavour-registry.test.ts b/src/regex/flavours/flavour-registry.test.ts index 63d31a3..ac3b205 100644 --- a/src/regex/flavours/flavour-registry.test.ts +++ b/src/regex/flavours/flavour-registry.test.ts @@ -44,18 +44,18 @@ const fixturePcre2: RegexFlavourDefinition = { }; describe("available regex flavour contracts", () => { - it("publishes the two implemented production flavour boundaries", () => { + it("publishes the four implemented production flavour boundaries", () => { expect( AVAILABLE_REGEX_FLAVOURS.definitions.map((definition) => definition.id), - ).toEqual(["ecmascript", "pcre2"]); + ).toEqual(["ecmascript", "pcre2", "python", "java"]); expect( AVAILABLE_REGEX_FLAVOURS.require("pcre2").options.map( (option) => option.name, ), ).toEqual(["matchLimit", "depthLimit", "heapLimitKib"]); expect(() => - AVAILABLE_REGEX_FLAVOURS.parse("python", "Project flavour"), - ).toThrow(/only supports ECMAScript and PCRE2/u); + AVAILABLE_REGEX_FLAVOURS.parse("go", "Project flavour"), + ).toThrow(/ECMAScript, PCRE2, Python re and Java/u); }); it("validates ECMAScript flags through the flavour contract", () => { @@ -150,6 +150,29 @@ describe("available regex flavour contracts", () => { ).toThrow(/integer from 1 to 100000000/u); }); + it("validates Python and Java flavour identities and flags", () => { + const python = AVAILABLE_REGEX_FLAVOURS.require("python"); + const java = AVAILABLE_REGEX_FLAVOURS.require("java"); + + expect(parseRegexFlags(["g", "a", "x"], python, "Flags")).toEqual([ + "g", + "a", + "x", + ]); + expect( + resolveRegexFlavourVersion("Python 3.14", python, "Version").value, + ).toBe("Python 3.14"); + expect(parseRegexFlags(["g", "d", "U"], java, "Flags")).toEqual([ + "g", + "d", + "U", + ]); + expect( + resolveRegexFlavourVersion("TeaVM 0.15.0", java, "Version").value, + ).toBe("TeaVM 0.15.0"); + expect(() => parseRegexFlags(["a"], java, "Flags")).toThrow(/unsupported/u); + }); + it("rejects ambiguous registrations at construction time", () => { expect( () => new RegexFlavourRegistry([fixturePcre2, fixturePcre2]), diff --git a/src/regex/flavours/flavour-registry.ts b/src/regex/flavours/flavour-registry.ts index d532152..960ed15 100644 --- a/src/regex/flavours/flavour-registry.ts +++ b/src/regex/flavours/flavour-registry.ts @@ -383,7 +383,59 @@ export const PCRE2_FLAVOUR: RegexFlavourDefinition = { ], }; +export const PYTHON_FLAVOUR: RegexFlavourDefinition = { + id: "python", + label: "Python re", + versions: [ + { + value: "CPython 3.14 via Pyodide 314.0.3", + label: "CPython 3.14 · Pyodide 314.0.3", + syntaxVersion: "Python 3.14 re", + legacyValues: ["Python 3.14", "Pyodide 314.0.3"], + }, + ], + defaultVersion: "CPython 3.14 via Pyodide 314.0.3", + flags: [ + { value: "g", label: "Global" }, + { value: "a", label: "ASCII character classes" }, + { value: "i", label: "Ignore case" }, + { value: "m", label: "Multiline" }, + { value: "s", label: "Dot all" }, + { value: "x", label: "Verbose" }, + ], + defaultFlags: ["g"], + options: [], +}; + +export const JAVA_FLAVOUR: RegexFlavourDefinition = { + id: "java", + label: "Java", + versions: [ + { + value: "TeaVM java.util.regex 0.15.0", + label: "java.util.regex · TeaVM 0.15.0", + syntaxVersion: "Java Pattern / TeaVM 0.15.0", + legacyValues: ["Java Pattern", "TeaVM 0.15.0"], + }, + ], + defaultVersion: "TeaVM java.util.regex 0.15.0", + flags: [ + { value: "g", label: "Global" }, + { value: "i", label: "Case insensitive" }, + { value: "d", label: "Unix lines" }, + { value: "m", label: "Multiline" }, + { value: "s", label: "Dot all" }, + { value: "u", label: "Unicode case" }, + { value: "x", label: "Comments" }, + { value: "U", label: "Unicode character classes" }, + ], + defaultFlags: ["g"], + options: [], +}; + export const AVAILABLE_REGEX_FLAVOURS = new RegexFlavourRegistry([ ECMASCRIPT_FLAVOUR, PCRE2_FLAVOUR, + PYTHON_FLAVOUR, + JAVA_FLAVOUR, ]); diff --git a/src/regex/reference/token-reference.ts b/src/regex/reference/token-reference.ts index 02e4da7..0bf9d28 100644 --- a/src/regex/reference/token-reference.ts +++ b/src/regex/reference/token-reference.ts @@ -242,3 +242,265 @@ export const PCRE2_REFERENCE: readonly ReferenceEntry[] = [ sourceUrl: PCRE2_REFERENCE_SOURCE, }, ]; + +const PYTHON_REFERENCE_SOURCE = "https://docs.python.org/3.14/library/re.html"; + +export const PYTHON_REFERENCE: readonly ReferenceEntry[] = [ + { + id: "python-named-capture", + construct: "Named capture", + syntax: "(?P...)", + explanation: + "Captures a group under both a number and a Python identifier.", + flavours: ["python"], + flags: [], + example: "(?P\\d{4})", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, + { + id: "python-named-backreference", + construct: "Named backreference", + syntax: "(?P=name)", + explanation: "Matches the text retained by an earlier named capture.", + flavours: ["python"], + flags: [], + example: "(?P['\"]).*?(?P=quote)", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, + { + id: "python-scoped-flags", + construct: "Scoped inline flags", + syntax: "(?aiLmsux-imsx:...)", + explanation: + "Applies selected matching modes only inside the enclosing group.", + flavours: ["python"], + flags: ["a", "i", "m", "s", "x"], + example: "(?i:invoice)-(?a:\\w+)", + caveat: + "The a, L and u character-mode flags are mutually exclusive within one inline group.", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, + { + id: "python-atomic", + construct: "Atomic group", + syntax: "(?>...)", + explanation: + "Discards the group's internal backtracking points after it succeeds.", + flavours: ["python"], + flags: [], + example: "(?>\\d+)\\d", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, + { + id: "python-possessive", + construct: "Possessive quantifier", + syntax: "*+ ++ ?+ {m,n}+", + explanation: + "Repeats without allowing later pattern parts to backtrack into the repetition.", + flavours: ["python"], + flags: [], + example: "\\w++:", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, + { + id: "python-lookbehind", + construct: "Fixed-length lookbehind", + syntax: "(?<=...) (?|$)", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, + { + id: "python-absolute-end", + construct: "Absolute end anchor", + syntax: "\\z", + explanation: "Asserts the absolute end of the input.", + flavours: ["python"], + flags: [], + example: "\\d+\\z", + caveat: "The \\z spelling was added in Python 3.14.", + source: "Python 3.14 re documentation", + sourceUrl: PYTHON_REFERENCE_SOURCE, + }, +]; + +const JAVA_REFERENCE_SOURCE = + "https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/regex/Pattern.html"; + +export const JAVA_REFERENCE: readonly ReferenceEntry[] = [ + { + id: "java-named-capture", + construct: "Named capture", + syntax: "(?...)", + explanation: + "Captures a group under both a number and a Latin-letter-led name.", + flavours: ["java"], + flags: [], + example: "(?\\d{4})", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-named-backreference", + construct: "Named backreference", + syntax: "\\k", + explanation: "Matches the text retained by an earlier named capture.", + flavours: ["java"], + flags: [], + example: "(?\\w+)\\s+\\k", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-class-intersection", + construct: "Character-class intersection", + syntax: "[class&&class]", + explanation: + "Keeps only characters present in both nested character classes.", + flavours: ["java"], + flags: [], + example: "[a-z&&[^aeiou]]+", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-scoped-flags", + construct: "Scoped embedded flags", + syntax: "(?idmsuxU-idmsuxU:...)", + explanation: "Enables and disables selected Pattern modes for one group.", + flavours: ["java"], + flags: ["i", "d", "m", "s", "u", "x", "U"], + example: "(?i:invoice)-(?-i:[A-Z]+)", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-independent", + construct: "Independent group", + syntax: "(?>...)", + explanation: + "Prevents the engine from revisiting choices made inside the group.", + flavours: ["java"], + flags: [], + example: "(?>\\d+)\\d", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-possessive", + construct: "Possessive quantifier", + syntax: "*+ ++ ?+ {m,n}+", + explanation: + "Repeats without returning matched characters during later backtracking.", + flavours: ["java"], + flags: [], + example: "\\w++:", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-linebreak", + construct: "Unicode linebreak", + syntax: "\\R", + explanation: + "Matches one Unicode linebreak sequence, including a CRLF pair as one sequence.", + flavours: ["java"], + flags: [], + example: "^.+\\R.+$", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-grapheme", + construct: "Extended grapheme cluster", + syntax: "\\X", + explanation: + "Matches one extended Unicode grapheme cluster rather than one code point.", + flavours: ["java"], + flags: [], + example: "\\X", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, + { + id: "java-unicode-property", + construct: "Unicode property", + syntax: "\\p{Property}", + explanation: + "Matches characters selected by a supported Unicode category, script, block or binary property.", + flavours: ["java"], + flags: ["U"], + example: "\\p{IsLatin}+", + caveat: + "The bundled TeaVM adapter reports compatibility warnings where its Pattern implementation differs from the documented Java SE language.", + source: "Java SE 25 Pattern documentation", + sourceUrl: JAVA_REFERENCE_SOURCE, + }, +]; + +export interface FlavourReference { + readonly label: string; + readonly entries: readonly ReferenceEntry[]; + readonly note?: string; +} + +export const REFERENCE_BY_FLAVOUR: Readonly< + Record +> = { + ecmascript: { + label: "ECMAScript", + entries: ECMASCRIPT_REFERENCE, + }, + pcre2: { + label: "PCRE2", + entries: PCRE2_REFERENCE, + }, + python: { + label: "Python 3.14 re", + entries: PYTHON_REFERENCE, + }, + java: { + label: "Java Pattern", + entries: JAVA_REFERENCE, + note: "This reference describes the Java Pattern language. The bundled TeaVM 0.15.0 adapter is a tested compatibility subset, not OpenJDK; replacement supports only single-digit $n references and not Java SE ${name}. Its diagnostics and engine metadata are authoritative for this build.", + }, + pcre: { + label: "PCRE", + entries: [], + }, + go: { + label: "Go regexp", + entries: [], + }, + rust: { + label: "Rust regex", + entries: [], + }, + dotnet: { + label: ".NET Regex", + entries: [], + }, +}; diff --git a/src/regex/syntax/providers/java/JavaSyntaxProvider.test.ts b/src/regex/syntax/providers/java/JavaSyntaxProvider.test.ts new file mode 100644 index 0000000..ddd27bd --- /dev/null +++ b/src/regex/syntax/providers/java/JavaSyntaxProvider.test.ts @@ -0,0 +1,84 @@ +import { describe, expect, it } from "vitest"; +import { JavaSyntaxProvider } from "./JavaSyntaxProvider"; + +const provider = new JavaSyntaxProvider(); + +describe("Java lexical syntax provider", () => { + it("finds ordinary and Java-named captures without counting lookbehind", async () => { + const result = await provider.parsePattern({ + flavour: "java", + pattern: String.raw`(?\w+)(?:\s+)(?<=(\d))`, + flags: [], + options: {}, + }); + + expect(result.accepted).toBe(true); + expect(result.coverage.status).toBe("partial"); + expect(result.captures).toEqual([ + expect.objectContaining({ number: 1, name: "word" }), + expect.objectContaining({ number: 2 }), + ]); + }); + + it("ignores quoted literals, classes and comments-mode text", async () => { + const result = await provider.parsePattern({ + flavour: "java", + pattern: String.raw`\Q(captured-looking)\E [(] # (ignored) + (kept)`, + flags: ["x"], + options: {}, + }); + + expect(result.captures).toHaveLength(1); + }); + + it("tokenizes TeaVM replacements and rejects its known named-reference gap", async () => { + const result = await provider.parseReplacement({ + flavour: "java", + replacement: "${word}-$1-\\$", + captureMetadata: [ + { + number: 1, + name: "word", + range: { startUtf16: 0, endUtf16: 9 }, + repeated: false, + }, + ], + }); + + expect(result.accepted).toBe(false); + expect(result.tokens.map((token) => token.kind)).toEqual([ + "named-capture", + "literal", + "numbered-capture", + "literal", + "engine-special", + ]); + expect(result.diagnostics).toEqual([ + expect.objectContaining({ + code: "engine-compatibility", + severity: "error", + }), + ]); + }); + + it("treats only one digit after $ as a TeaVM capture reference", async () => { + const result = await provider.parseReplacement({ + flavour: "java", + replacement: "$12", + captureMetadata: [ + { + number: 1, + range: { startUtf16: 0, endUtf16: 3 }, + repeated: false, + }, + ], + }); + + expect(result.accepted).toBe(true); + expect(result.tokens).toEqual([ + expect.objectContaining({ kind: "numbered-capture", raw: "$1" }), + expect.objectContaining({ kind: "literal", raw: "2" }), + ]); + }); +}); diff --git a/src/regex/syntax/providers/java/JavaSyntaxProvider.ts b/src/regex/syntax/providers/java/JavaSyntaxProvider.ts new file mode 100644 index 0000000..a3979bb --- /dev/null +++ b/src/regex/syntax/providers/java/JavaSyntaxProvider.ts @@ -0,0 +1,61 @@ +import type { RegexFlavourId } from "../../../model/flavour"; +import type { + RegexSyntaxRequest, + RegexSyntaxResult, + ReplacementSyntaxResult, + SyntaxCoverage, +} from "../../../model/syntax"; +import type { + RegexSyntaxProvider, + ReplacementSyntaxRequest, +} from "../../SyntaxProvider"; +import { + lexicalCoverage, + parseLexicalPattern, + type LexicalCaptureDialect, +} from "../lexical-captures"; +import { parseJavaReplacement } from "./replacement"; + +const DIALECT: LexicalCaptureDialect = { + flavour: "java", + providerId: "regex-tools-java-lexical", + providerVersion: "0.3.0", + engineLabel: "TeaVM java.util.regex", + extendedFlag: "x", + quotedLiterals: true, + namedCapture: (pattern, opener) => { + const match = /^\(\?<([A-Za-z][A-Za-z0-9]*)>/u.exec(pattern.slice(opener)); + return match?.[1] + ? { name: match[1], end: opener + match[0].length } + : undefined; + }, + unsupportedConstructs: [ + "complete structural nesting and quantifier ownership", + "inline flag scope in normalized explanations", + "character-class intersections and Unicode properties as structural nodes", + "conditionals, assertions and backreferences as structural nodes", + ], +}; + +export class JavaSyntaxProvider implements RegexSyntaxProvider { + readonly id = DIALECT.providerId; + readonly version = DIALECT.providerVersion; + readonly supportedFlavours = ["java"] as const; + + async parsePattern(request: RegexSyntaxRequest): Promise { + return parseLexicalPattern(request, DIALECT); + } + + async parseReplacement( + request: ReplacementSyntaxRequest, + ): Promise { + if (request.flavour !== "java") { + throw new Error(`Unsupported replacement flavour: ${request.flavour}`); + } + return parseJavaReplacement(request.replacement, request.captureMetadata); + } + + getCoverage(flavour: RegexFlavourId): SyntaxCoverage { + return lexicalCoverage(flavour, DIALECT); + } +} diff --git a/src/regex/syntax/providers/java/replacement.ts b/src/regex/syntax/providers/java/replacement.ts new file mode 100644 index 0000000..4e66509 --- /dev/null +++ b/src/regex/syntax/providers/java/replacement.ts @@ -0,0 +1,169 @@ +import { DEFAULT_REGEX_LIMITS } from "../../../execution/request-limits"; +import type { RegexDiagnostic } from "../../../model/diagnostics"; +import type { + CaptureDefinition, + ReplacementSyntaxResult, + ReplacementToken, +} from "../../../model/syntax"; + +const REPLACEMENT_TOKEN = /\\.|\$\{[^}]*\}|\$[0-9]/gu; + +function literalToken( + id: number, + raw: string, + start: number, +): ReplacementToken { + return { + id: `java-replacement-${id}`, + kind: "literal", + raw, + range: { startUtf16: start, endUtf16: start + raw.length }, + explanation: `Insert literal text ${JSON.stringify(raw.slice(0, 160))}${ + raw.length > 160 ? "…" : "" + }`, + }; +} + +function specialToken( + id: number, + raw: string, + start: number, +): ReplacementToken { + const range = { startUtf16: start, endUtf16: start + raw.length }; + const number = /^\$([0-9]+)$/u.exec(raw)?.[1]; + if (number !== undefined) { + const captureNumber = Number.parseInt(number, 10); + return { + id: `java-replacement-${id}`, + kind: captureNumber === 0 ? "full-match" : "numbered-capture", + raw, + range, + explanation: + captureNumber === 0 + ? "Insert the complete match" + : `Insert numbered capture ${captureNumber}`, + ...(captureNumber === 0 ? {} : { captureNumber }), + }; + } + const name = /^\$\{([A-Za-z][A-Za-z0-9]*)\}$/u.exec(raw)?.[1]; + if (name) { + return { + id: `java-replacement-${id}`, + kind: "named-capture", + raw, + range, + explanation: `Java SE named capture “${name}” (unavailable in the bundled TeaVM 0.15.0 replacement runtime)`, + captureName: name, + }; + } + return { + id: `java-replacement-${id}`, + kind: "engine-special", + raw, + range, + explanation: + "Java Matcher evaluates this quoted replacement character; the engine output is authoritative", + }; +} + +export function parseJavaReplacement( + replacement: string, + captures: readonly CaptureDefinition[], +): ReplacementSyntaxResult { + if ( + replacement.length > DEFAULT_REGEX_LIMITS.maximumReplacementTemplateUtf16 + ) { + return { + accepted: false, + tokens: [], + diagnostics: [ + { + id: "java-replacement-template-input-limit", + source: "syntax-provider", + severity: "error", + code: "replacement-template-limit", + message: `Replacement template exceeds the ${DEFAULT_REGEX_LIMITS.maximumReplacementTemplateUtf16.toLocaleString()} UTF-16 unit limit; it was not parsed or executed.`, + flavour: "java", + provenance: "derived", + }, + ], + totalDiagnostics: 1, + diagnosticsTruncated: false, + }; + } + const numbers = new Set(captures.map((capture) => capture.number)); + const names = new Set( + captures.flatMap((capture) => (capture.name ? [capture.name] : [])), + ); + const tokens: ReplacementToken[] = []; + const diagnostics: RegexDiagnostic[] = []; + let cursor = 0; + for (const match of replacement.matchAll(REPLACEMENT_TOKEN)) { + const start = match.index; + const raw = match[0]; + if (start > cursor) { + tokens.push( + literalToken(tokens.length, replacement.slice(cursor, start), cursor), + ); + } + const token = specialToken(tokens.length, raw, start); + tokens.push(token); + if ( + token.kind === "numbered-capture" && + token.captureNumber !== undefined && + !numbers.has(token.captureNumber) + ) { + diagnostics.push({ + id: `java-replacement-missing-number-${start}`, + source: "syntax-provider", + severity: "warning", + code: "replacement-unknown-capture", + message: `Replacement references capture ${token.captureNumber}, which the partial lexical provider did not find. Java Matcher remains authoritative at execution.`, + range: token.range, + flavour: "java", + provenance: "derived", + }); + } else if (token.kind === "named-capture") { + diagnostics.push({ + id: `java-replacement-named-unsupported-${start}`, + source: "syntax-provider", + severity: "error", + code: "engine-compatibility", + message: + "TeaVM 0.15.0 Matcher replacement implements only single-digit $n references. Java SE ${name} replacement is not available in this compatibility runtime.", + range: token.range, + flavour: "java", + provenance: "reported", + }); + if ( + token.captureName !== undefined && + names.size > 0 && + !names.has(token.captureName) + ) { + diagnostics.push({ + id: `java-replacement-missing-name-${start}`, + source: "syntax-provider", + severity: "warning", + code: "replacement-unknown-capture", + message: `Replacement references unknown named capture “${token.captureName}”.`, + range: token.range, + flavour: "java", + provenance: "derived", + }); + } + } + cursor = start + raw.length; + } + if (cursor < replacement.length) { + tokens.push(literalToken(tokens.length, replacement.slice(cursor), cursor)); + } + return { + accepted: !diagnostics.some( + (diagnostic) => diagnostic.severity === "error", + ), + tokens, + diagnostics, + totalDiagnostics: diagnostics.length, + diagnosticsTruncated: false, + }; +} diff --git a/src/regex/syntax/providers/lexical-captures.ts b/src/regex/syntax/providers/lexical-captures.ts new file mode 100644 index 0000000..94a7144 --- /dev/null +++ b/src/regex/syntax/providers/lexical-captures.ts @@ -0,0 +1,285 @@ +import { DEFAULT_REGEX_LIMITS } from "../../execution/request-limits"; +import type { RegexDiagnostic } from "../../model/diagnostics"; +import type { RegexFlavourId } from "../../model/flavour"; +import type { + CaptureDefinition, + NormalizedRegexNode, + NormalizedRegexToken, + RegexNodeKind, + RegexSyntaxRequest, + RegexSyntaxResult, + SyntaxCoverage, +} from "../../model/syntax"; + +interface NamedCapture { + readonly name: string; + readonly end: number; +} + +export interface LexicalCaptureDialect { + readonly flavour: RegexFlavourId; + readonly providerId: string; + readonly providerVersion: string; + readonly engineLabel: string; + readonly extendedFlag: string; + readonly quotedLiterals: boolean; + readonly namedCapture: ( + pattern: string, + opener: number, + ) => NamedCapture | undefined; + readonly unsupportedConstructs: readonly string[]; +} + +interface CaptureOpener { + readonly start: number; + readonly end: number; + readonly name?: string; +} + +function scanCaptureOpeners( + pattern: string, + dialect: LexicalCaptureDialect, + extended: boolean, +): readonly CaptureOpener[] { + const openers: CaptureOpener[] = []; + let escaped = false; + let characterClass = false; + let quoted = false; + for (let index = 0; index < pattern.length; index += 1) { + const current = pattern[index]; + if (quoted) { + if (current === "\\" && pattern[index + 1] === "E") { + quoted = false; + index += 1; + } + continue; + } + if (escaped) { + escaped = false; + continue; + } + if (current === "\\") { + if (dialect.quotedLiterals && pattern[index + 1] === "Q") { + quoted = true; + index += 1; + } else { + escaped = true; + } + continue; + } + if (current === "[" && !characterClass) { + characterClass = true; + continue; + } + if (current === "]" && characterClass) { + characterClass = false; + continue; + } + if (extended && current === "#" && !characterClass) { + const lineEnd = pattern.indexOf("\n", index + 1); + if (lineEnd < 0) break; + index = lineEnd; + continue; + } + if (characterClass || current !== "(") continue; + if (pattern.startsWith("(?#", index)) { + let commentEnd = index + 3; + let commentEscaped = false; + while (commentEnd < pattern.length) { + const character = pattern[commentEnd]; + if (!commentEscaped && character === ")") break; + if (!commentEscaped && character === "\\") { + commentEscaped = true; + } else { + commentEscaped = false; + } + commentEnd += 1; + } + index = commentEnd; + continue; + } + if (pattern[index + 1] !== "?") { + openers.push({ start: index, end: index + 1 }); + continue; + } + const named = dialect.namedCapture(pattern, index); + if (named) { + openers.push({ + start: index, + end: named.end, + name: named.name, + }); + } + } + return openers; +} + +function construct( + pattern: string, + opener: CaptureOpener, + number: number, + dialect: LexicalCaptureDialect, +): { + readonly node: NormalizedRegexNode; + readonly token: NormalizedRegexToken; + readonly capture: CaptureDefinition; +} { + const kind: RegexNodeKind = opener.name + ? "named-capture-group" + : "capture-group"; + const range = { startUtf16: opener.start, endUtf16: opener.end }; + const raw = pattern.slice(opener.start, opener.end); + return { + node: { + id: `${dialect.flavour}-capture-${number}`, + kind, + range, + raw, + explanation: opener.name + ? `Open capture group ${number} named “${opener.name}”` + : `Open capture group ${number}`, + children: [], + capture: { number, ...(opener.name ? { name: opener.name } : {}) }, + properties: { + zeroWidth: false, + nullable: "unknown", + consumesInput: "conditional", + }, + support: { + flavour: dialect.flavour, + status: "partial", + notes: [ + `The lexical provider identifies this opener; ${dialect.engineLabel} compilation is authoritative.`, + ], + }, + provenance: { + provider: dialect.providerId, + providerVersion: dialect.providerVersion, + source: "parsed", + }, + }, + token: { + id: `${dialect.flavour}-token-${number}`, + kind, + range, + raw, + captureNumber: number, + }, + capture: { + number, + ...(opener.name ? { name: opener.name } : {}), + range, + repeated: false, + }, + }; +} + +function coverage(dialect: LexicalCaptureDialect): SyntaxCoverage { + return { + status: "partial", + summary: `Application-owned lexical capture structure; ${dialect.engineLabel} is authoritative for syntax acceptance and matching.`, + unsupportedConstructs: dialect.unsupportedConstructs, + }; +} + +function rootNode( + pattern: string, + children: readonly NormalizedRegexNode[], + dialect: LexicalCaptureDialect, +): NormalizedRegexNode { + const providerCoverage = coverage(dialect); + return { + id: `${dialect.flavour}-pattern-root`, + kind: "pattern", + range: { startUtf16: 0, endUtf16: pattern.length }, + raw: pattern, + explanation: `${dialect.engineLabel} pattern; the runtime compiler decides final acceptance`, + children, + properties: { + zeroWidth: false, + nullable: "unknown", + consumesInput: "conditional", + }, + support: { + flavour: dialect.flavour, + status: "partial", + notes: [providerCoverage.summary], + }, + provenance: { + provider: dialect.providerId, + providerVersion: dialect.providerVersion, + source: "parsed", + }, + }; +} + +export function parseLexicalPattern( + request: RegexSyntaxRequest, + dialect: LexicalCaptureDialect, +): RegexSyntaxResult { + if (request.flavour !== dialect.flavour) { + throw new Error(`Unsupported syntax flavour: ${request.flavour}`); + } + const providerCoverage = coverage(dialect); + if (request.pattern.length > DEFAULT_REGEX_LIMITS.patternHardLengthUtf16) { + const diagnostics: RegexDiagnostic[] = [ + { + id: `${dialect.flavour}-pattern-input-limit`, + source: "syntax-provider", + severity: "error", + code: "pattern-limit", + message: `Pattern exceeds the ${DEFAULT_REGEX_LIMITS.patternHardLengthUtf16.toLocaleString()} UTF-16 unit limit.`, + flavour: dialect.flavour, + provenance: "derived", + }, + ]; + return { + accepted: false, + root: rootNode(request.pattern, [], dialect), + tokens: [], + captures: [], + diagnostics, + provider: { + id: dialect.providerId, + version: dialect.providerVersion, + }, + coverage: providerCoverage, + }; + } + const constructs = scanCaptureOpeners( + request.pattern, + dialect, + request.flags.includes(dialect.extendedFlag), + ).map((opener, index) => + construct(request.pattern, opener, index + 1, dialect), + ); + return { + accepted: true, + root: rootNode( + request.pattern, + constructs.map((entry) => entry.node), + dialect, + ), + tokens: constructs.map((entry) => entry.token), + captures: constructs.map((entry) => entry.capture), + diagnostics: [], + provider: { + id: dialect.providerId, + version: dialect.providerVersion, + }, + coverage: providerCoverage, + }; +} + +export function lexicalCoverage( + flavour: RegexFlavourId, + dialect: LexicalCaptureDialect, +): SyntaxCoverage { + return flavour === dialect.flavour + ? coverage(dialect) + : { + status: "unavailable", + summary: `${dialect.engineLabel} lexical provider does not parse ${flavour}.`, + unsupportedConstructs: ["all"], + }; +} diff --git a/src/regex/syntax/providers/python/PythonSyntaxProvider.test.ts b/src/regex/syntax/providers/python/PythonSyntaxProvider.test.ts new file mode 100644 index 0000000..62e6847 --- /dev/null +++ b/src/regex/syntax/providers/python/PythonSyntaxProvider.test.ts @@ -0,0 +1,58 @@ +import { describe, expect, it } from "vitest"; +import { PythonSyntaxProvider } from "./PythonSyntaxProvider"; + +const provider = new PythonSyntaxProvider(); + +describe("Python lexical syntax provider", () => { + it("finds ordinary and Python-named captures without counting lookarounds", async () => { + const result = await provider.parsePattern({ + flavour: "python", + pattern: String.raw`(?P\w+)(?:\s+)(?=(\d+))`, + flags: [], + options: {}, + }); + + expect(result.accepted).toBe(true); + expect(result.coverage.status).toBe("partial"); + expect(result.captures).toEqual([ + expect.objectContaining({ number: 1, name: "word" }), + expect.objectContaining({ number: 2 }), + ]); + }); + + it("ignores verbose comments, classes and escaped parentheses", async () => { + const result = await provider.parsePattern({ + flavour: "python", + pattern: String.raw`[(] \( # (ignored) + (kept)`, + flags: ["x"], + options: {}, + }); + + expect(result.captures).toHaveLength(1); + }); + + it("tokenizes Python capture replacement forms and engine escapes", async () => { + const result = await provider.parseReplacement({ + flavour: "python", + replacement: String.raw`\g-\1-\n`, + captureMetadata: [ + { + number: 1, + name: "word", + range: { startUtf16: 0, endUtf16: 10 }, + repeated: false, + }, + ], + }); + + expect(result.accepted).toBe(true); + expect(result.tokens.map((token) => token.kind)).toEqual([ + "named-capture", + "literal", + "numbered-capture", + "literal", + "engine-special", + ]); + }); +}); diff --git a/src/regex/syntax/providers/python/PythonSyntaxProvider.ts b/src/regex/syntax/providers/python/PythonSyntaxProvider.ts new file mode 100644 index 0000000..65cca5b --- /dev/null +++ b/src/regex/syntax/providers/python/PythonSyntaxProvider.ts @@ -0,0 +1,63 @@ +import type { RegexFlavourId } from "../../../model/flavour"; +import type { + RegexSyntaxRequest, + RegexSyntaxResult, + ReplacementSyntaxResult, + SyntaxCoverage, +} from "../../../model/syntax"; +import type { + RegexSyntaxProvider, + ReplacementSyntaxRequest, +} from "../../SyntaxProvider"; +import { + lexicalCoverage, + parseLexicalPattern, + type LexicalCaptureDialect, +} from "../lexical-captures"; +import { parsePythonReplacement } from "./replacement"; + +const DIALECT: LexicalCaptureDialect = { + flavour: "python", + providerId: "regex-tools-python-lexical", + providerVersion: "0.3.0", + engineLabel: "CPython 3.14 re", + extendedFlag: "x", + quotedLiterals: false, + namedCapture: (pattern, opener) => { + const match = /^\(\?P<([A-Za-z_][A-Za-z0-9_]*)>/u.exec( + pattern.slice(opener), + ); + return match?.[1] + ? { name: match[1], end: opener + match[0].length } + : undefined; + }, + unsupportedConstructs: [ + "complete structural nesting and quantifier ownership", + "inline flag scope in normalized explanations", + "conditionals, assertions and backreferences as structural nodes", + "non-ASCII Python identifier capture names in lexical metadata", + ], +}; + +export class PythonSyntaxProvider implements RegexSyntaxProvider { + readonly id = DIALECT.providerId; + readonly version = DIALECT.providerVersion; + readonly supportedFlavours = ["python"] as const; + + async parsePattern(request: RegexSyntaxRequest): Promise { + return parseLexicalPattern(request, DIALECT); + } + + async parseReplacement( + request: ReplacementSyntaxRequest, + ): Promise { + if (request.flavour !== "python") { + throw new Error(`Unsupported replacement flavour: ${request.flavour}`); + } + return parsePythonReplacement(request.replacement, request.captureMetadata); + } + + getCoverage(flavour: RegexFlavourId): SyntaxCoverage { + return lexicalCoverage(flavour, DIALECT); + } +} diff --git a/src/regex/syntax/providers/python/replacement.ts b/src/regex/syntax/providers/python/replacement.ts new file mode 100644 index 0000000..a5abe11 --- /dev/null +++ b/src/regex/syntax/providers/python/replacement.ts @@ -0,0 +1,166 @@ +import { DEFAULT_REGEX_LIMITS } from "../../../execution/request-limits"; +import type { RegexDiagnostic } from "../../../model/diagnostics"; +import type { + CaptureDefinition, + ReplacementSyntaxResult, + ReplacementToken, +} from "../../../model/syntax"; + +const REPLACEMENT_TOKEN = /\\g<[^>]*>|\\[1-9][0-9]*|\\./gu; + +function literalToken( + id: number, + raw: string, + start: number, +): ReplacementToken { + return { + id: `python-replacement-${id}`, + kind: "literal", + raw, + range: { startUtf16: start, endUtf16: start + raw.length }, + explanation: `Insert literal text ${JSON.stringify(raw.slice(0, 160))}${ + raw.length > 160 ? "…" : "" + }`, + }; +} + +function specialToken( + id: number, + raw: string, + start: number, +): ReplacementToken { + const range = { startUtf16: start, endUtf16: start + raw.length }; + const explicit = /^\\g<([^>]+)>$/u.exec(raw)?.[1]; + if (explicit && /^[0-9]+$/u.test(explicit)) { + const captureNumber = Number.parseInt(explicit, 10); + return { + id: `python-replacement-${id}`, + kind: captureNumber === 0 ? "full-match" : "numbered-capture", + raw, + range, + explanation: + captureNumber === 0 + ? "Insert the complete match" + : `Insert numbered capture ${captureNumber}`, + ...(captureNumber === 0 ? {} : { captureNumber }), + }; + } + if (explicit && /^[A-Za-z_][A-Za-z0-9_]*$/u.test(explicit)) { + return { + id: `python-replacement-${id}`, + kind: "named-capture", + raw, + range, + explanation: `Insert named capture “${explicit}”`, + captureName: explicit, + }; + } + const shortNumber = /^\\([1-9][0-9]?)$/u.exec(raw)?.[1]; + if (shortNumber) { + const captureNumber = Number.parseInt(shortNumber, 10); + return { + id: `python-replacement-${id}`, + kind: "numbered-capture", + raw, + range, + explanation: `Insert numbered capture ${captureNumber}`, + captureNumber, + }; + } + return { + id: `python-replacement-${id}`, + kind: "engine-special", + raw, + range, + explanation: + "Python re evaluates this replacement escape; the engine output is authoritative", + }; +} + +export function parsePythonReplacement( + replacement: string, + captures: readonly CaptureDefinition[], +): ReplacementSyntaxResult { + if ( + replacement.length > DEFAULT_REGEX_LIMITS.maximumReplacementTemplateUtf16 + ) { + return { + accepted: false, + tokens: [], + diagnostics: [ + { + id: "python-replacement-template-input-limit", + source: "syntax-provider", + severity: "error", + code: "replacement-template-limit", + message: `Replacement template exceeds the ${DEFAULT_REGEX_LIMITS.maximumReplacementTemplateUtf16.toLocaleString()} UTF-16 unit limit; it was not parsed or executed.`, + flavour: "python", + provenance: "derived", + }, + ], + totalDiagnostics: 1, + diagnosticsTruncated: false, + }; + } + const numbers = new Set(captures.map((capture) => capture.number)); + const names = new Set( + captures.flatMap((capture) => (capture.name ? [capture.name] : [])), + ); + const tokens: ReplacementToken[] = []; + const diagnostics: RegexDiagnostic[] = []; + let cursor = 0; + for (const match of replacement.matchAll(REPLACEMENT_TOKEN)) { + const start = match.index; + const raw = match[0]; + if (start > cursor) { + tokens.push( + literalToken(tokens.length, replacement.slice(cursor, start), cursor), + ); + } + const token = specialToken(tokens.length, raw, start); + tokens.push(token); + if ( + token.kind === "numbered-capture" && + token.captureNumber !== undefined && + !numbers.has(token.captureNumber) + ) { + diagnostics.push({ + id: `python-replacement-missing-number-${start}`, + source: "syntax-provider", + severity: "warning", + code: "replacement-unknown-capture", + message: `Replacement references capture ${token.captureNumber}, which the partial lexical provider did not find. Python re remains authoritative at execution.`, + range: token.range, + flavour: "python", + provenance: "derived", + }); + } else if ( + token.kind === "named-capture" && + token.captureName !== undefined && + names.size > 0 && + !names.has(token.captureName) + ) { + diagnostics.push({ + id: `python-replacement-missing-name-${start}`, + source: "syntax-provider", + severity: "warning", + code: "replacement-unknown-capture", + message: `Replacement references unknown named capture “${token.captureName}”.`, + range: token.range, + flavour: "python", + provenance: "derived", + }); + } + cursor = start + raw.length; + } + if (cursor < replacement.length) { + tokens.push(literalToken(tokens.length, replacement.slice(cursor), cursor)); + } + return { + accepted: true, + tokens, + diagnostics, + totalDiagnostics: diagnostics.length, + diagnosticsTruncated: false, + }; +} diff --git a/src/toolbox/manifest.source.json b/src/toolbox/manifest.source.json index a915b18..4cfed6a 100644 --- a/src/toolbox/manifest.source.json +++ b/src/toolbox/manifest.source.json @@ -3,7 +3,7 @@ "schemaVersion": 1, "id": "de.add-ideas.regex-tools", "name": "Regex Tools", - "version": "0.2.0", + "version": "0.3.0", "description": "Develop, explain, test and apply regular expressions locally in the browser.", "entry": "./", "icon": "./favicon.svg", @@ -36,5 +36,15 @@ "label": "Source", "url": "https://git.add-ideas.de/zemion/regex-tools" } + ], + "assets": [ + "./engines/pcre2/pcre2.mjs", + "./engines/pcre2/pcre2.wasm", + "./engines/python/pyodide.mjs", + "./engines/python/pyodide.asm.mjs", + "./engines/python/pyodide.asm.wasm", + "./engines/python/pyodide-lock.json", + "./engines/python/python_stdlib.zip", + "./engines/java/java-regex.mjs" ] } diff --git a/src/version.ts b/src/version.ts index fcc101c..3e7d6cc 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,3 +1,3 @@ -export const APPLICATION_VERSION = "0.2.0"; +export const APPLICATION_VERSION = "0.3.0"; export const SYNTAX_PROFILE = "community"; export const REGEXPP_VERSION = "4.12.2"; diff --git a/src/workers/ecmascript.worker.ts b/src/workers/ecmascript.worker.ts index 755bc46..abe7480 100644 --- a/src/workers/ecmascript.worker.ts +++ b/src/workers/ecmascript.worker.ts @@ -1,5 +1,6 @@ /// import { + EcmaScriptEngineAdapter, executeEcmaScript, replaceEcmaScript, } from "../regex/execution/adapters/ecmascript/EcmaScriptEngineAdapter"; @@ -13,8 +14,9 @@ import { } from "../regex/execution/worker-protocol"; const scope = self as DedicatedWorkerGlobalScope; +const adapter = new EcmaScriptEngineAdapter(); -scope.onmessage = ( +scope.onmessage = async ( event: MessageEvent>, ) => { const request = event.data; @@ -22,15 +24,20 @@ scope.onmessage = ( let response: WorkerResponse; try { const payload: EngineWorkerResult = - request.payload.kind === "execute" + request.payload.kind === "load" ? { - kind: "execute", - result: executeEcmaScript(request.payload.request), + kind: "load", + info: await adapter.load(), } - : { - kind: "replace", - result: replaceEcmaScript(request.payload.request), - }; + : request.payload.kind === "execute" + ? { + kind: "execute", + result: executeEcmaScript(request.payload.request), + } + : { + kind: "replace", + result: replaceEcmaScript(request.payload.request), + }; response = { protocolVersion: WORKER_PROTOCOL_VERSION, requestId: request.requestId, diff --git a/src/workers/java.worker.ts b/src/workers/java.worker.ts new file mode 100644 index 0000000..0d529f7 --- /dev/null +++ b/src/workers/java.worker.ts @@ -0,0 +1,88 @@ +/// +import { + JavaEngineAdapter, + JAVA_ENGINE_VERSION, +} from "../regex/execution/adapters/java/JavaEngineAdapter"; +import { importJavaRegexModule } from "../regex/execution/adapters/java/java-module"; +import { + WORKER_PROTOCOL_VERSION, + workerError, + type EngineWorkerOperation, + type EngineWorkerResult, + type WorkerRequest, + type WorkerResponse, +} from "../regex/execution/worker-protocol"; + +const scope = self as DedicatedWorkerGlobalScope; +let adapterPromise: Promise | undefined; + +function applicationRoot(): URL { + const worker = new URL(scope.location.href); + const assets = worker.pathname.lastIndexOf("/assets/"); + if (assets >= 0) { + worker.pathname = worker.pathname.slice(0, assets + 1); + } else { + const sourceWorker = worker.pathname.lastIndexOf("/src/workers/"); + worker.pathname = + sourceWorker >= 0 ? worker.pathname.slice(0, sourceWorker + 1) : "/"; + } + worker.search = ""; + worker.hash = ""; + return worker; +} + +async function loadAdapter(): Promise { + const moduleUrl = new URL("engines/java/java-regex.mjs", applicationRoot()); + const module = await importJavaRegexModule(moduleUrl); + const adapter = new JavaEngineAdapter( + module, + `TeaVM JavaScript · ${scope.navigator.userAgent} · not OpenJDK`, + ); + const info = await adapter.load(); + if (info.engineVersion !== JAVA_ENGINE_VERSION) { + throw new Error("Loaded TeaVM Java runtime identity does not match."); + } + return adapter; +} + +scope.onmessage = async ( + event: MessageEvent>, +) => { + const request = event.data; + if (request.protocolVersion !== WORKER_PROTOCOL_VERSION) return; + let response: WorkerResponse; + try { + adapterPromise ??= loadAdapter(); + const adapter = await adapterPromise; + let payload: EngineWorkerResult; + if (request.payload.kind === "load") { + payload = { kind: "load", info: await adapter.load() }; + } else if (request.payload.kind === "execute") { + payload = { + kind: "execute", + result: await adapter.execute(request.payload.request), + }; + } else { + payload = { + kind: "replace", + result: await adapter.replace(request.payload.request), + }; + } + response = { + protocolVersion: WORKER_PROTOCOL_VERSION, + requestId: request.requestId, + generation: request.generation, + ok: true, + payload, + }; + } catch (error) { + response = { + protocolVersion: WORKER_PROTOCOL_VERSION, + requestId: request.requestId, + generation: request.generation, + ok: false, + error: workerError(error), + }; + } + scope.postMessage(response); +}; diff --git a/src/workers/pcre2.worker.ts b/src/workers/pcre2.worker.ts index f6a4bc5..7c7c24d 100644 --- a/src/workers/pcre2.worker.ts +++ b/src/workers/pcre2.worker.ts @@ -62,15 +62,20 @@ scope.onmessage = async ( adapterPromise ??= loadAdapter(); const adapter = await adapterPromise; const payload: EngineWorkerResult = - request.payload.kind === "execute" + request.payload.kind === "load" ? { - kind: "execute", - result: await adapter.execute(request.payload.request), + kind: "load", + info: await adapter.load(), } - : { - kind: "replace", - result: await adapter.replace(request.payload.request), - }; + : request.payload.kind === "execute" + ? { + kind: "execute", + result: await adapter.execute(request.payload.request), + } + : { + kind: "replace", + result: await adapter.replace(request.payload.request), + }; response = { protocolVersion: WORKER_PROTOCOL_VERSION, requestId: request.requestId, diff --git a/src/workers/python.worker.ts b/src/workers/python.worker.ts new file mode 100644 index 0000000..3e2a2ee --- /dev/null +++ b/src/workers/python.worker.ts @@ -0,0 +1,99 @@ +/// +import { + PythonEngineAdapter, + PYODIDE_ENGINE_VERSION, + PYTHON_ENGINE_VERSION, +} from "../regex/execution/adapters/python/PythonEngineAdapter"; +import { importPyodideModule } from "../regex/execution/adapters/python/python-module"; +import { + WORKER_PROTOCOL_VERSION, + workerError, + type EngineWorkerOperation, + type EngineWorkerResult, + type WorkerRequest, + type WorkerResponse, +} from "../regex/execution/worker-protocol"; + +const scope = self as DedicatedWorkerGlobalScope; +let adapterPromise: Promise | undefined; + +function applicationRoot(): URL { + const worker = new URL(scope.location.href); + const assets = worker.pathname.lastIndexOf("/assets/"); + if (assets >= 0) { + worker.pathname = worker.pathname.slice(0, assets + 1); + } else { + const sourceWorker = worker.pathname.lastIndexOf("/src/workers/"); + worker.pathname = + sourceWorker >= 0 ? worker.pathname.slice(0, sourceWorker + 1) : "/"; + } + worker.search = ""; + worker.hash = ""; + return worker; +} + +async function loadAdapter(): Promise { + const moduleUrl = new URL("engines/python/pyodide.mjs", applicationRoot()); + const imported = await importPyodideModule(moduleUrl); + if (imported.version !== PYODIDE_ENGINE_VERSION) { + throw new Error( + "Loaded Pyodide module identity does not match the adapter.", + ); + } + const runtime = await imported.loadPyodide({ + indexURL: new URL(".", moduleUrl).href, + stdout: () => undefined, + stderr: (line) => console.warn(`Python ${line}`), + }); + const adapter = new PythonEngineAdapter(runtime, scope.navigator.userAgent); + const info = await adapter.load(); + if (info.engineVersion !== PYTHON_ENGINE_VERSION) { + throw new Error( + "Loaded Python runtime identity does not match the adapter.", + ); + } + return adapter; +} + +scope.onmessage = async ( + event: MessageEvent>, +) => { + const request = event.data; + if (request.protocolVersion !== WORKER_PROTOCOL_VERSION) return; + let response: WorkerResponse; + try { + adapterPromise ??= loadAdapter(); + const adapter = await adapterPromise; + const payload: EngineWorkerResult = + request.payload.kind === "load" + ? { + kind: "load", + info: await adapter.load(), + } + : request.payload.kind === "execute" + ? { + kind: "execute", + result: await adapter.execute(request.payload.request), + } + : { + kind: "replace", + result: await adapter.replace(request.payload.request), + }; + response = { + protocolVersion: WORKER_PROTOCOL_VERSION, + requestId: request.requestId, + generation: request.generation, + ok: true, + payload, + }; + } catch (error) { + response = { + protocolVersion: WORKER_PROTOCOL_VERSION, + requestId: request.requestId, + generation: request.generation, + ok: false, + error: workerError(error), + }; + } + scope.postMessage(response); +}; diff --git a/src/workers/syntax.worker.ts b/src/workers/syntax.worker.ts index 705767e..cada277 100644 --- a/src/workers/syntax.worker.ts +++ b/src/workers/syntax.worker.ts @@ -1,6 +1,8 @@ /// import { EcmaScriptSyntaxProvider } from "../regex/syntax/providers/ecmascript/EcmaScriptSyntaxProvider"; +import { JavaSyntaxProvider } from "../regex/syntax/providers/java/JavaSyntaxProvider"; import { Pcre2SyntaxProvider } from "../regex/syntax/providers/pcre2/Pcre2SyntaxProvider"; +import { PythonSyntaxProvider } from "../regex/syntax/providers/python/PythonSyntaxProvider"; import { WORKER_PROTOCOL_VERSION, workerError, @@ -13,6 +15,8 @@ import { const providers = { ecmascript: new EcmaScriptSyntaxProvider(), pcre2: new Pcre2SyntaxProvider(), + python: new PythonSyntaxProvider(), + java: new JavaSyntaxProvider(), } as const; const scope = self as DedicatedWorkerGlobalScope; @@ -29,7 +33,11 @@ scope.onmessage = async ( ? providers.ecmascript : flavour === "pcre2" ? providers.pcre2 - : undefined; + : flavour === "python" + ? providers.python + : flavour === "java" + ? providers.java + : undefined; if (!provider) { throw new Error(`No syntax provider is registered for ${flavour}.`); } diff --git a/tests/browser/flavours.spec.ts b/tests/browser/flavours.spec.ts new file mode 100644 index 0000000..18005eb --- /dev/null +++ b/tests/browser/flavours.spec.ts @@ -0,0 +1,123 @@ +import { expect, test, type Page } from "@playwright/test"; + +async function setEditor(page: Page, testId: string, value: string) { + await page.getByTestId(testId).locator(".cm-content").fill(value); +} + +async function waitForReady(page: Page, timeout = 15_000) { + await expect(page.locator(".run-status")).toHaveClass(/status-ready/u, { + timeout, + }); +} + +test("CPython re executes and replaces with code-point-native offsets under the production CSP", async ({ + page, +}) => { + const pageErrors: string[] = []; + const consoleErrors: string[] = []; + page.on("pageerror", (error) => pageErrors.push(error.message)); + page.on("console", (message) => { + if (message.type() === "error") consoleErrors.push(message.text()); + }); + + const response = await page.goto("/deep/nested/regex/"); + expect(response?.headers()["content-security-policy"]).toContain( + "script-src 'self' 'wasm-unsafe-eval'", + ); + expect(response?.headers()["content-security-policy"]).not.toContain( + "'unsafe-eval'", + ); + await waitForReady(page); + await page.getByLabel("Live").uncheck(); + await page.getByRole("combobox", { name: "Flavour" }).selectOption("python"); + await setEditor(page, "editor-regular-expression-pattern", "(?P\\w+)"); + await setEditor(page, "editor-test-text", "😀 café"); + await page.getByRole("button", { name: "Run", exact: true }).click(); + await waitForReady(page, 45_000); + + await expect(page.locator(".run-status")).toContainText( + "native offsets code-point", + ); + const match = page.locator(".extraction-row").first(); + await expect(match).toContainText("UTF-16 range: 3…7"); + await expect(match).toContainText("native range: 2…6 code-point"); + + await page.getByRole("button", { name: "Replace", exact: true }).click(); + await setEditor(page, "editor-replacement-template", "[\\g]"); + await page.getByRole("button", { name: "Run", exact: true }).click(); + await waitForReady(page, 45_000); + await expect( + page.getByTestId("editor-replacement-output").locator(".cm-content"), + ).toHaveText("😀 [café]"); + + await page.getByRole("button", { name: "Quick reference" }).click(); + await expect( + page.getByRole("dialog", { name: "Quick reference" }), + ).toContainText("Python 3.14 re documentation"); + await page.keyboard.press("Escape"); + await page.getByRole("button", { name: "Capabilities" }).click(); + const capabilities = page.getByRole("dialog", { name: "Capabilities" }); + await expect(capabilities).toContainText("CPython re via Pyodide"); + await expect(capabilities).toContainText("CPython 3.14.2 re"); + expect(pageErrors).toEqual([]); + expect(consoleErrors).toEqual([]); +}); + +test("TeaVM java.util.regex executes Java-only syntax and numeric replacement with UTF-16 offsets", async ({ + page, +}) => { + const pageErrors: string[] = []; + page.on("pageerror", (error) => pageErrors.push(error.message)); + await page.goto("/deep/nested/regex/"); + await waitForReady(page); + await page.getByLabel("Live").uncheck(); + await page.getByRole("combobox", { name: "Flavour" }).selectOption("java"); + await setEditor( + page, + "editor-regular-expression-pattern", + "(?[a-z]++)", + ); + await setEditor(page, "editor-test-text", "😀 abc"); + await page.getByRole("button", { name: "Run", exact: true }).click(); + await waitForReady(page); + + await expect(page.locator(".run-status")).toContainText( + "native offsets utf16", + ); + const match = page.locator(".extraction-row").first(); + await expect(match).toContainText("UTF-16 range: 3…6"); + await expect(match).toContainText("native range: 3…6 utf16"); + + await page.getByRole("button", { name: "Replace", exact: true }).click(); + await setEditor(page, "editor-replacement-template", "<$1>"); + await page.getByRole("button", { name: "Run", exact: true }).click(); + await waitForReady(page); + await expect( + page.getByTestId("editor-replacement-output").locator(".cm-content"), + ).toHaveText("😀 "); + + await page.getByRole("button", { name: "Capabilities" }).click(); + const capabilities = page.getByRole("dialog", { name: "Capabilities" }); + await expect(capabilities).toContainText("TeaVM java.util.regex"); + await expect(capabilities).toContainText("not OpenJDK"); + expect(pageErrors).toEqual([]); +}); + +test("serves the self-hosted Python and Java runtime assets with executable MIME types", async ({ + request, +}) => { + const pythonModule = await request.get("./engines/python/pyodide.asm.mjs"); + expect(pythonModule.ok()).toBe(true); + expect(pythonModule.headers()["content-type"]).toContain("text/javascript"); + + const pythonWasm = await request.get("./engines/python/pyodide.asm.wasm"); + expect(pythonWasm.ok()).toBe(true); + expect(pythonWasm.headers()["content-type"]).toContain("application/wasm"); + expect((await pythonWasm.body()).subarray(0, 4)).toEqual( + Buffer.from([0x00, 0x61, 0x73, 0x6d]), + ); + + const javaModule = await request.get("./engines/java/java-regex.mjs"); + expect(javaModule.ok()).toBe(true); + expect(javaModule.headers()["content-type"]).toContain("text/javascript"); +}); diff --git a/tests/conformance/java.conformance.test.ts b/tests/conformance/java.conformance.test.ts new file mode 100644 index 0000000..c80cadb --- /dev/null +++ b/tests/conformance/java.conformance.test.ts @@ -0,0 +1,294 @@ +// @vitest-environment node + +import { createHash } from "node:crypto"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; +import { beforeAll, describe, expect, it } from "vitest"; +import { + JavaEngineAdapter, + JAVA_ENGINE_IDENTITY, + JAVA_ENGINE_VERSION, +} from "../../src/regex/execution/adapters/java/JavaEngineAdapter"; +import type { TeaVmJavaRegexModule } from "../../src/regex/execution/adapters/java/java-module"; +import type { + RegexExecutionRequest, + RegexReplacementRequest, +} from "../../src/regex/model/match"; + +const pack = path.resolve("public/engines/java"); +let adapter: JavaEngineAdapter; + +function request( + pattern: string, + subject: string, + overrides: Partial = {}, +): RegexExecutionRequest { + return { + flavour: "java", + flavourVersion: JAVA_ENGINE_IDENTITY, + pattern, + flags: ["g"], + subject, + captureMetadata: [], + scanAll: false, + maximumMatches: 100, + maximumCaptureRows: 1_000, + ...overrides, + }; +} + +function replacement( + pattern: string, + subject: string, + replacementText: string, + overrides: Partial = {}, +): RegexReplacementRequest { + return { + ...request(pattern, subject), + replacement: replacementText, + maximumOutputBytes: 1_000, + ...overrides, + }; +} + +beforeAll(async () => { + const imported = (await import( + `${pathToFileURL(path.join(pack, "java-regex.mjs")).href}?conformance` + )) as unknown as TeaVmJavaRegexModule; + adapter = new JavaEngineAdapter( + imported, + "TeaVM JavaScript · Node.js conformance · not OpenJDK", + ); + await adapter.load(); +}); + +describe("pinned TeaVM 0.15.0 java.util.regex conformance", () => { + it("loads the exact compatibility engine identity", async () => { + await expect(adapter.load()).resolves.toEqual( + expect.objectContaining({ + engineName: "TeaVM java.util.regex", + engineVersion: JAVA_ENGINE_VERSION, + runtimeVersion: expect.stringContaining("not OpenJDK"), + offsetUnit: "utf16", + }), + ); + }); + + it("returns native UTF-16 offsets and named/numbered metadata", async () => { + const result = await adapter.execute( + request("(?😀)([A-Z]+)?", "😀AB 😀", { + captureMetadata: [ + { + number: 1, + name: "emoji", + range: { startUtf16: 0, endUtf16: 12 }, + repeated: false, + }, + { + number: 2, + name: "tail", + range: { startUtf16: 12, endUtf16: 21 }, + repeated: false, + }, + ], + }), + ); + + expect(result.accepted).toBe(true); + expect(result.matches.map(({ range }) => range)).toEqual([ + { startUtf16: 0, endUtf16: 4 }, + { startUtf16: 5, endUtf16: 7 }, + ]); + expect(result.matches[0]?.captures).toEqual([ + expect.objectContaining({ + groupNumber: 1, + groupName: "emoji", + value: "😀", + range: { startUtf16: 0, endUtf16: 2 }, + }), + expect.objectContaining({ + groupNumber: 2, + groupName: "tail", + value: "AB", + range: { startUtf16: 2, endUtf16: 4 }, + }), + ]); + expect(result.matches[1]?.captures[1]).toEqual({ + groupNumber: 2, + groupName: "tail", + status: "did-not-participate", + }); + }); + + it("supports TeaVM lookbehind, numeric backreferences and atomic groups", async () => { + const lookbehind = await adapter.execute(request("(?<=a)(b)\\1", "abb ab")); + expect(lookbehind.matches.map(({ value }) => value)).toEqual(["bb"]); + + const atomic = await adapter.execute(request("(?>a|ab)c", "abc")); + expect(atomic.matches).toHaveLength(0); + }); + + it("advances global zero-length matches in UTF-16 without looping", async () => { + const result = await adapter.execute(request("(?=.)", "😀x")); + expect(result.matches.map(({ range }) => range)).toEqual([ + { startUtf16: 0, endUtf16: 0 }, + { startUtf16: 1, endUtf16: 1 }, + { startUtf16: 2, endUtf16: 2 }, + ]); + }); + + it("maps i, m, s, u and x to TeaVM Pattern flags", async () => { + const cases = [ + ["a", "A", ["i"]], + ["ä", "Ä", ["i", "u"]], + ["^b$", "a\nb\nc", ["m"]], + ["a.b", "a\nb", ["s"]], + ["a b # comment", "ab", ["x"]], + ] as const; + + for (const [pattern, subject, flags] of cases) { + const result = await adapter.execute( + request(pattern, subject, { flags: [...flags] }), + ); + expect(result.matches, `${flags.join("")}: ${pattern}`).toHaveLength(1); + } + + const normalized = await adapter.execute( + request("a", "A", { flags: ["i", "m", "s", "u", "x"] }), + ); + expect(normalized.flags.effectiveFlags).toBe("imsux"); + }); + + it("maps d to UNIX_LINES and reports the honest U compatibility boundary", async () => { + const ordinaryLines = await adapter.execute( + request(".", "\r", { flags: [] }), + ); + const unixLines = await adapter.execute( + request(".", "\r", { flags: ["d"] }), + ); + expect(ordinaryLines.matches).toHaveLength(0); + expect(unixLines.matches).toHaveLength(1); + + const result = await adapter.execute( + request("\\w+", "é", { flags: ["d", "U"] }), + ); + expect(result.accepted).toBe(true); + expect(result.matches).toHaveLength(0); + expect(result.flags.userFlags).toBe("dU"); + expect(result.flags.effectiveFlags).toBe("duU"); + expect(result.flags.internallyAddedIndicesFlag).toBe(false); + expect(result.diagnostics[0]).toEqual( + expect.objectContaining({ + code: "engine-compatibility", + message: expect.stringContaining("does not implement OpenJDK"), + }), + ); + }); + + it("uses TeaVM Matcher native single-digit $n replacement", async () => { + const result = await adapter.replace(replacement("(a)", "a a", "<$1>")); + expect(result.output).toBe("
"); + expect(result.outputTruncated).toBe(false); + expect(result.execution.matches).toHaveLength(2); + + const escaped = await adapter.replace(replacement("(a)", "a a", "\\$1")); + expect(escaped.output).toBe("$1 $1"); + }); + + it("rejects ${name}, which TeaVM 0.15.0 does not support", async () => { + const unsupportedNamed = await adapter.replace( + replacement("(?a)", "a", "${name}"), + ); + expect(unsupportedNamed.execution.accepted).toBe(false); + expect(unsupportedNamed.execution.diagnostics[0]).toEqual( + expect.objectContaining({ + code: "replacement-error", + message: expect.stringMatching(/IllegalArgumentException/u), + }), + ); + }); + + it("returns compile diagnostics and enforces match/capture/output caps", async () => { + const invalid = await adapter.execute(request("(", "x")); + expect(invalid.accepted).toBe(false); + expect(invalid.diagnostics[0]).toEqual( + expect.objectContaining({ + code: "compile-error", + provenance: "reported", + }), + ); + + const matchLimited = await adapter.execute( + request("a", "aaa", { maximumMatches: 1 }), + ); + expect(matchLimited.matches).toHaveLength(1); + expect(matchLimited.truncated).toBe(true); + + const captureLimited = await adapter.execute( + request("(a)(b)", "ab", { + maximumCaptureRows: 1, + captureMetadata: [ + { + number: 1, + range: { startUtf16: 0, endUtf16: 3 }, + repeated: false, + }, + { + number: 2, + range: { startUtf16: 3, endUtf16: 6 }, + repeated: false, + }, + ], + }), + ); + expect(captureLimited.matches).toHaveLength(0); + expect(captureLimited.truncated).toBe(true); + + const outputLimited = await adapter.replace( + replacement("a", "aaaa", "long", { maximumOutputBytes: 5 }), + ); + expect(outputLimited.output).toBe("longl"); + expect(outputLimited.outputBytes).toBe(5); + expect(outputLimited.outputTruncated).toBe(true); + }); + + it("ships internally consistent source identity, licence and checksums", async () => { + const metadata = JSON.parse( + await readFile(path.join(pack, "engine-metadata.json"), "utf8"), + ) as { + engineName: string; + engineVersion: string; + semanticIdentity: string; + source: { + tag: string; + commitSha1: string; + license: string; + }; + }; + expect(metadata).toEqual( + expect.objectContaining({ + engineName: "TeaVM java.util.regex", + engineVersion: "0.15.0", + semanticIdentity: expect.stringContaining("not OpenJDK"), + source: expect.objectContaining({ + tag: "0.15.0", + commitSha1: "ee91b03e616c4b45401cd11fb0cd7eb0daf6649b", + license: "Apache-2.0", + }), + }), + ); + + const checksumText = await readFile(path.join(pack, "SHA256SUMS"), "utf8"); + for (const line of checksumText.trim().split("\n")) { + const [expected, name] = line.split(/ {2}/u); + const contents = await readFile(path.join(pack, name ?? "")); + expect(createHash("sha256").update(contents).digest("hex"), name).toBe( + expected, + ); + } + expect(await readFile(path.join(pack, "LICENSE.txt"), "utf8")).toContain( + "Apache License", + ); + }); +}); diff --git a/tests/conformance/python.conformance.test.ts b/tests/conformance/python.conformance.test.ts new file mode 100644 index 0000000..44f2497 --- /dev/null +++ b/tests/conformance/python.conformance.test.ts @@ -0,0 +1,240 @@ +// @vitest-environment node +import path from "node:path"; +import { pathToFileURL } from "node:url"; +import { afterAll, beforeAll, describe, expect, it } from "vitest"; +import { + PythonEngineAdapter, + PYODIDE_ENGINE_VERSION, + PYTHON_ENGINE_VERSION, +} from "../../src/regex/execution/adapters/python/PythonEngineAdapter"; +import type { + PyodideModule, + PyodideRuntime, +} from "../../src/regex/execution/adapters/python/python-module"; +import type { + RegexExecutionRequest, + RegexReplacementRequest, +} from "../../src/regex/model/match"; + +const engineDirectory = path.resolve( + process.cwd(), + "public", + "engines", + "python", +); + +function request( + overrides: Partial = {}, +): RegexExecutionRequest { + return { + flavour: "python", + flavourVersion: PYTHON_ENGINE_VERSION, + pattern: "a", + flags: ["g"], + subject: "a", + captureMetadata: [], + scanAll: false, + maximumMatches: 100, + maximumCaptureRows: 1_000, + ...overrides, + }; +} + +describe("CPython re 3.14.2 conformance through self-hosted Pyodide", () => { + let runtime: PyodideRuntime; + let adapter: PythonEngineAdapter; + + beforeAll(async () => { + const moduleUrl = pathToFileURL(path.join(engineDirectory, "pyodide.mjs")); + const imported = (await import( + /* @vite-ignore */ moduleUrl.href + )) as PyodideModule; + expect(imported.version).toBe(PYODIDE_ENGINE_VERSION); + runtime = await imported.loadPyodide({ + indexURL: `${engineDirectory}${path.sep}`, + stdout: () => undefined, + stderr: () => undefined, + }); + adapter = new PythonEngineAdapter(runtime, "Node conformance runtime"); + await adapter.load(); + }, 30_000); + + afterAll(() => { + adapter?.terminate(); + }); + + it("reports the exact engine, runtime and native offset identity", async () => { + await expect(adapter.load()).resolves.toEqual( + expect.objectContaining({ + flavour: "python", + engineName: "CPython re via Pyodide", + engineVersion: "CPython 3.14.2 re", + runtimeVersion: expect.stringContaining("Pyodide 314.0.3"), + offsetUnit: "code-point", + }), + ); + }); + + it("uses native Python named groups and preserves optional captures", async () => { + const result = await adapter.execute( + request({ + pattern: "(?P[A-Za-z]+)(?:-(\\d+))?", + subject: "abc-12 xyz", + }), + ); + + expect(result.accepted).toBe(true); + expect(result.matches).toHaveLength(2); + expect(result.matches[0]?.captures).toEqual([ + expect.objectContaining({ + groupNumber: 1, + groupName: "word", + value: "abc", + }), + expect.objectContaining({ groupNumber: 2, value: "12" }), + ]); + expect(result.matches[1]?.captures).toEqual([ + expect.objectContaining({ + groupNumber: 1, + groupName: "word", + value: "xyz", + }), + { groupNumber: 2, status: "did-not-participate" }, + ]); + }); + + it("normalizes astral and zero-length code-point offsets to UTF-16", async () => { + const result = await adapter.execute( + request({ + pattern: "(?=.)", + subject: "😀a", + }), + ); + + expect( + result.matches.map((match) => ({ + native: match.nativeRange, + editor: match.range, + status: match.valueStatus, + })), + ).toEqual([ + { + native: { start: 0, end: 0, unit: "code-point" }, + editor: { startUtf16: 0, endUtf16: 0 }, + status: "complete", + }, + { + native: { start: 1, end: 1, unit: "code-point" }, + editor: { startUtf16: 2, endUtf16: 2 }, + status: "complete", + }, + ]); + }); + + it("implements g, a, i, m, s and x with scan-all normalization", async () => { + const combined = await adapter.execute( + request({ + pattern: "^ a . b $", + flags: ["i", "m", "s", "x"], + subject: "z\nA\nB\nq", + scanAll: true, + }), + ); + expect(combined.accepted).toBe(true); + expect(combined.flags.effectiveFlags).toBe("gimsx"); + expect(combined.flags.internallyAddedGlobalFlag).toBe(true); + expect(combined.matches.map((match) => match.value)).toEqual(["A\nB"]); + + const ascii = await adapter.execute( + request({ + pattern: "\\w+", + flags: ["g", "a"], + subject: "é az", + }), + ); + expect(ascii.matches.map((match) => match.value)).toEqual(["az"]); + }); + + it("uses native match.expand syntax for named, numbered and zero-length replacement", async () => { + const replacementRequest: RegexReplacementRequest = { + ...request({ + pattern: "(?P[a-z]+)-(\\d+)", + subject: "a-1 b-22", + }), + replacement: "\\g[\\2]", + maximumOutputBytes: 1_024, + }; + const replaced = await adapter.replace(replacementRequest); + + expect(replaced.execution.accepted).toBe(true); + expect(replaced.output).toBe("a[1] b[22]"); + expect(replaced.outputTruncated).toBe(false); + + const zeroLength = await adapter.replace({ + ...request({ + pattern: "(?=.)", + subject: "😀a", + }), + replacement: "|", + maximumOutputBytes: 1_024, + }); + expect(zeroLength.output).toBe("|😀|a"); + }); + + it("bounds UTF-8 output without splitting an astral scalar", async () => { + const result = await adapter.replace({ + ...request({ pattern: ".", subject: "abc" }), + replacement: "😀", + maximumOutputBytes: 5, + }); + + expect(result.execution.accepted).toBe(true); + expect(result.output).toBe("😀"); + expect(result.outputBytes).toBe(4); + expect(result.outputTruncated).toBe(true); + expect(result.truncated).toBe(true); + }); + + it("reports native compile and replacement errors", async () => { + const compileError = await adapter.execute(request({ pattern: "😀(" })); + expect(compileError.accepted).toBe(false); + expect(compileError.diagnostics[0]).toEqual( + expect.objectContaining({ + code: "compile-error", + range: { startUtf16: 2, endUtf16: 2 }, + }), + ); + + const replacementError = await adapter.replace({ + ...request({ pattern: "(?Pa)" }), + replacement: "\\g", + maximumOutputBytes: 1_024, + }); + expect(replacementError.execution.accepted).toBe(false); + expect(replacementError.execution.diagnostics[0]?.code).toBe( + "replacement-error", + ); + }); + + it("enforces authoritative match and capture-row collection caps", async () => { + const matchCap = await adapter.execute( + request({ + pattern: "a", + subject: "aaa", + maximumMatches: 1, + }), + ); + expect(matchCap.matches).toHaveLength(1); + expect(matchCap.truncated).toBe(true); + + const rowCap = await adapter.execute( + request({ + pattern: "(a)(b)", + subject: "ab", + maximumCaptureRows: 1, + }), + ); + expect(rowCap.matches).toHaveLength(0); + expect(rowCap.truncated).toBe(true); + }); +});