diff --git a/.changeset/config.json b/.changeset/config.json index 7a672032..c0c52306 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -26,12 +26,12 @@ ] ], "access": "public", - "baseBranch": "master", + "baseBranch": "main", "updateInternalDependencies": "patch", "ignore": [ "@microblink/*-example", "@microblink/*-qa-app", "@microblink/*-test", - "github-release" + "@microblink/public-repo-generator" ] } diff --git a/.gitignore b/.gitignore index 623ce73a..0169d955 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,macos,conan,cmake,c++,node .turbo + # junk files vite.config.*.timestamp-* @@ -300,8 +301,18 @@ Session.vim # JetBrains IDEs .idea +# Clion bazel plugin files +.clwb + #mise local mise.local.toml # npmrc .npmrc + +# Bazel files +/bazel-* +/external + +automatic.bazelrc +.bazeltargets diff --git a/README.md b/README.md index 349bb48d..135433a7 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,32 @@ Have questions, feedback, or running into issues? We're here to help! Contact us ## Packages +### BlinkID + | Package | Version | Changelog | |---------|---------|-----------| | [@microblink/blinkid](https://github.com/microblink/web-sdks/tree/main/packages/blinkid) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid.svg)](https://www.npmjs.com/package/@microblink/blinkid) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid/CHANGELOG.md) | | [@microblink/blinkid-core](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-core) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-core.svg)](https://www.npmjs.com/package/@microblink/blinkid-core) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-core/CHANGELOG.md) | | [@microblink/blinkid-ux-manager](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-ux-manager) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-ux-manager.svg)](https://www.npmjs.com/package/@microblink/blinkid-ux-manager) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-ux-manager/CHANGELOG.md) | -| [@microblink/blinkid-verify](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-verify) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-verify.svg)](https://www.npmjs.com/package/@microblink/blinkid-verify) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-verify/CHANGELOG.md) | -| [@microblink/blinkid-verify-core](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-verify-core) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-verify-core.svg)](https://www.npmjs.com/package/@microblink/blinkid-verify-core) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-verify-core/CHANGELOG.md) | -| [@microblink/blinkid-verify-ux-manager](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-verify-ux-manager) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-verify-ux-manager.svg)](https://www.npmjs.com/package/@microblink/blinkid-verify-ux-manager) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-verify-ux-manager/CHANGELOG.md) | + +### BlinkCard + +| Package | Version | Changelog | +|---------|---------|-----------| | [@microblink/blinkcard](https://github.com/microblink/web-sdks/tree/main/packages/blinkcard) | [![npm](https://img.shields.io/npm/v/@microblink/blinkcard.svg)](https://www.npmjs.com/package/@microblink/blinkcard) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkcard/CHANGELOG.md) | | [@microblink/blinkcard-core](https://github.com/microblink/web-sdks/tree/main/packages/blinkcard-core) | [![npm](https://img.shields.io/npm/v/@microblink/blinkcard-core.svg)](https://www.npmjs.com/package/@microblink/blinkcard-core) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkcard-core/CHANGELOG.md) | | [@microblink/blinkcard-ux-manager](https://github.com/microblink/web-sdks/tree/main/packages/blinkcard-ux-manager) | [![npm](https://img.shields.io/npm/v/@microblink/blinkcard-ux-manager.svg)](https://www.npmjs.com/package/@microblink/blinkcard-ux-manager) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkcard-ux-manager/CHANGELOG.md) | + +### BlinkID Verify + +| Package | Version | Changelog | +|---------|---------|-----------| +| [@microblink/blinkid-verify](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-verify) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-verify.svg)](https://www.npmjs.com/package/@microblink/blinkid-verify) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-verify/CHANGELOG.md) | +| [@microblink/blinkid-verify-core](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-verify-core) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-verify-core.svg)](https://www.npmjs.com/package/@microblink/blinkid-verify-core) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-verify-core/CHANGELOG.md) | +| [@microblink/blinkid-verify-ux-manager](https://github.com/microblink/web-sdks/tree/main/packages/blinkid-verify-ux-manager) | [![npm](https://img.shields.io/npm/v/@microblink/blinkid-verify-ux-manager.svg)](https://www.npmjs.com/package/@microblink/blinkid-verify-ux-manager) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/blinkid-verify-ux-manager/CHANGELOG.md) | + +### Camera Manager + +| Package | Version | Changelog | +|---------|---------|-----------| | [@microblink/camera-manager](https://github.com/microblink/web-sdks/tree/main/packages/camera-manager) | [![npm](https://img.shields.io/npm/v/@microblink/camera-manager.svg)](https://www.npmjs.com/package/@microblink/camera-manager) | [CHANGELOG](https://github.com/microblink/web-sdks/blob/main/packages/camera-manager/CHANGELOG.md) | \ No newline at end of file diff --git a/apps/examples/README.md b/apps/examples/README.md index 794f9534..02cfeddd 100644 --- a/apps/examples/README.md +++ b/apps/examples/README.md @@ -8,6 +8,7 @@ This directory contains example applications demonstrating the capabilities of t - [BlinkID Simple](./blinkid-simple/): A simple example of how to use the BlinkID SDK. - [BlinkID Advanced Setup](./blinkid-advanced-setup/): Demonstrates advanced setup and customization of the BlinkID SDK. +- [BlinkID OTA Setup](./blinkid-ota-setup/): Demonstrates how to configure over-the-air (OTA) document-support resource updates when initializing BlinkID. - [BlinkID UI Customization](./blinkid-ui-customization/): Shows how to implement custom UI, such as replacing UI for various error states (camera errors, timeouts, unsupported documents, filtered documents). - [BlinkID Photo Upload](./blinkid-photo-upload/): An example of how to use the BlinkID SDK with photo upload functionality. - [BlinkID Core API](./blinkid-core-api/): Shows how to use the core API of the BlinkID SDK. diff --git a/apps/examples/blinkid-advanced-setup/src/App.tsx b/apps/examples/blinkid-advanced-setup/src/App.tsx index 0e975ccb..a68f0912 100644 --- a/apps/examples/blinkid-advanced-setup/src/App.tsx +++ b/apps/examples/blinkid-advanced-setup/src/App.tsx @@ -85,11 +85,6 @@ export const App: Component = () => { * @see https://github.com/microblink/web-sdks/blob/main/packages/blinkid-core/docs/type-aliases/BlinkIdSessionSettings.md */ const session = await blinkIdCore.createScanningSession({ - /* - * For default settings look at defaultSessionSettings - * - * @see https://github.com/microblink/web-sdks/blob/main/packages/blinkid-core/src/defaultSessionSettings.ts - */ scanningSettings: { documentCaptureModule: { passportDataPageScanOnly: false, diff --git a/apps/examples/blinkid-ota-setup/.env.example b/apps/examples/blinkid-ota-setup/.env.example new file mode 100644 index 00000000..86916da8 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/.env.example @@ -0,0 +1,7 @@ +# For development, create a .env.local or a .env.production using this template +# Never put your licence key in this file as it will be committed + +# https://vitejs.dev/guide/env-and-mode.html#env-files + + +VITE_LICENCE_KEY=PLACE_YOUR_LICENCE_KEY_HERE diff --git a/apps/examples/blinkid-ota-setup/.eslintrc.cjs b/apps/examples/blinkid-ota-setup/.eslintrc.cjs new file mode 100644 index 00000000..ed5a0330 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/.eslintrc.cjs @@ -0,0 +1,52 @@ +const { defineConfig } = require("eslint-define-config"); + +module.exports = defineConfig({ + root: true, + + parserOptions: { + ecmaVersion: "2022", + sourceType: "module", + }, + + overrides: [ + { + files: ["src/**/*.{ts,tsx}"], + plugins: ["@typescript-eslint"], + parser: "@typescript-eslint/parser", + // have to duplicate in override... + rules: { + "@typescript-eslint/no-unused-vars": 0, + // the following two are causing errors in vscode. See: + // https://typescript-eslint.io/linting/troubleshooting/#changes-to-one-file-are-not-reflected-when-linting-other-files-in-my-ide + "@typescript-eslint/no-unsafe-assignment": 0, + "@typescript-eslint/no-unsafe-member-access": 0, + // only use in tsx + "@typescript-eslint/no-non-null-assertion": 0, + "@typescript-eslint/consistent-type-definitions": 0, + "prefer-const": 0, + }, + parserOptions: { + tsconfigRootDir: __dirname, + project: ["./tsconfig.json"], + }, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + "prettier", + ], + }, + { + files: ["**/*.{js,mjs,cjs}"], + env: { + node: true, + browser: true, + es2021: true, + }, + extends: ["eslint:recommended"], + rules: { + "no-unused-vars": 0, + }, + }, + ], +}); diff --git a/apps/examples/blinkid-ota-setup/.gitignore b/apps/examples/blinkid-ota-setup/.gitignore new file mode 100644 index 00000000..dd89a0ea --- /dev/null +++ b/apps/examples/blinkid-ota-setup/.gitignore @@ -0,0 +1,7 @@ +node_modules +dist +public +types +certs +*.local +.env.production \ No newline at end of file diff --git a/apps/examples/blinkid-ota-setup/README.md b/apps/examples/blinkid-ota-setup/README.md new file mode 100644 index 00000000..49446e15 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/README.md @@ -0,0 +1,33 @@ +# BlinkID OTA Setup Example + +This example application demonstrates how to configure over-the-air (OTA) document-support resource updates when initializing BlinkID with `createBlinkId`. OTA lets Microblink add or update supported document resources without requiring a new SDK release or application package update. + +## Functionality + +The application performs the following actions: + +1. **Initializes BlinkID with OTA settings**: It calls `createBlinkId` with an `otaResources` configuration that controls how the SDK loads baseline OTA files and checks for newer resources from an OTA provider. + +2. **Configures OTA behavior**: The example sets: + - `strict: true` — fail initialization if the OTA download fails (instead of falling back to the hosted baseline) + - `checkForUpdates: true` — always query the OTA provider for a newer compatible version + - `otaResourceProviderUrl: undefined` — use Microblink's default OTA service (`https://blinkid-ota.microblink.com`); set a URL to use a proxy or self-hosted provider + - `resourcesLocation: "custom-ota-resources"` — load the hosted/bundled OTA baseline from that path (see `public/custom-ota-resources` for the expected layout) + - `timeoutMilis: 5000` — OTA service request timeout in milliseconds + +3. **Sets up a Result Callback**: It registers a callback that runs when a document is successfully scanned and logs the result to the console. + +4. **Cleans up Resources**: After logging the result, it calls `destroy` to release SDK resources. + +## Key Features Demonstrated + +- **OTA resource bootstrap**: Shows how to pass `otaResources` to `createBlinkId` to customize document-support resource loading at init time. +- **Strict vs fallback behavior**: Demonstrates failing hard on OTA errors (`strict: true`) instead of silently using the hosted baseline. +- **Update checks**: Illustrates enabling provider checks with `checkForUpdates`, and notes that `checkForUpdates: false` skips the provider and uses only the hosted baseline. +- **Custom baseline location**: Points `resourcesLocation` at custom OTA baseline files instead of the default SDK path. +- **Provider / proxy override**: Leaves `otaResourceProviderUrl` unset for Microblink's service, with guidance for pointing it at a proxy or self-hosted endpoint that implements the versions API. +- **High-level API**: Still uses the simple `createBlinkId` flow for scanning, result handling, and cleanup. + +## How to Run + +For detailed instructions on how to install dependencies and run this example, please refer to the [main README file](./../README.md). diff --git a/apps/examples/blinkid-ota-setup/index.html b/apps/examples/blinkid-ota-setup/index.html new file mode 100644 index 00000000..6a43ac3b --- /dev/null +++ b/apps/examples/blinkid-ota-setup/index.html @@ -0,0 +1,20 @@ + + + + + + + + + BlinkID OTA Setup Example + + + +
+ + + + diff --git a/apps/examples/blinkid-ota-setup/lint-staged.config.cjs b/apps/examples/blinkid-ota-setup/lint-staged.config.cjs new file mode 100644 index 00000000..13dc1361 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/lint-staged.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + "*.{js,jsx,ts,tsx}": [() => "eslint --max-warnings=0"], + "*.{ts,tsx}": [ + () => "tsc-files --skipLibCheck --emitDeclarationOnly false --noEmit", + ], + "*.{js,jsx,ts,tsx,css,md}": ["prettier --write"], +}; diff --git a/apps/examples/blinkid-ota-setup/package.json b/apps/examples/blinkid-ota-setup/package.json new file mode 100644 index 00000000..46ab1941 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/package.json @@ -0,0 +1,43 @@ +{ + "name": "@microblink/blinkid-ota-setup", + "description": "Example quickstart app showcasing customization of OTA behaviour", + "private": true, + "scripts": { + "build": "vite build", + "build:js-dev": "vite build --mode development", + "clean": "rimraf dist public .turbo types tsconfig.tsbuildinfo", + "dev": "vite", + "lint": "concurrently pnpm:lint:types pnpm:lint:eslint", + "lint:eslint": "eslint ./src --max-warnings 0", + "lint:types": "tsc --emitDeclarationOnly false --noEmit", + "make-certs": "mkcert-cli -y --outDir certs", + "preview": "vite preview", + "serve": "pnpm make-certs && serve --ssl-cert ./certs/dev.cert --ssl-key ./certs/dev.key", + "watch": "vite build --watch --mode development" + }, + "type": "module", + "dependencies": { + "@microblink/blinkid": "workspace:^" + }, + "devDependencies": { + "@microblink/tsconfig": "workspace:*", + "@microblink/repo-utils": "workspace:*", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "concurrently": "^9.1.2", + "eslint": "^8.57.0", + "eslint-config-prettier": "10.1.8", + "eslint-define-config": "^1.24.1", + "eslint-plugin-solid": "0.14.5", + "mkcert-cli": "^1.5.0", + "prettier": "^3.8.1", + "rimraf": "^6.0.1", + "sass": "^1.85.0", + "serve": "^14.2.4", + "tsc-files": "^1.1.4", + "typescript": "5.8.3", + "vite": "^6.2.1", + "vite-plugin-mkcert": "^1.17.9", + "zx": "^8.8.5" + }, + "license": "MIT" +} diff --git a/apps/examples/blinkid-ota-setup/serve.json b/apps/examples/blinkid-ota-setup/serve.json new file mode 100644 index 00000000..89db51d8 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/serve.json @@ -0,0 +1,31 @@ +{ + "public": "dist", + "headers": [ + { + "source": "**/*", + "headers": [ + { + "key": "Cross-Origin-Embedder-Policy", + "value": "require-corp" + }, + { + "key": "Cross-Origin-Opener-Policy", + "value": "same-origin" + } + ] + }, + { + "source": "resources/**/*", + "headers": [ + { + "key": "Cache-Control", + "value": "max-age=300" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "*" + } + ] + } + ] +} diff --git a/apps/examples/blinkid-ota-setup/src/assets/favicon.ico b/apps/examples/blinkid-ota-setup/src/assets/favicon.ico new file mode 100644 index 00000000..b836b2bc Binary files /dev/null and b/apps/examples/blinkid-ota-setup/src/assets/favicon.ico differ diff --git a/apps/examples/blinkid-ota-setup/src/index.ts b/apps/examples/blinkid-ota-setup/src/index.ts new file mode 100644 index 00000000..2bad255b --- /dev/null +++ b/apps/examples/blinkid-ota-setup/src/index.ts @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { createBlinkId } from "@microblink/blinkid"; + +/** + * This is the main component of the application. + * It creates the BlinkID instance. For additional configuration look at the createBlinkId function. + * + * @see https://github.com/microblink/web-sdks/blob/main/packages/blinkid/docs/functions/createBlinkId.md + */ +const blinkid = await createBlinkId({ + licenseKey: import.meta.env.VITE_LICENCE_KEY, + otaResources: { + // Setting strict to true will case the SDK to fail and throw an exception if the ota download fails, otherwise it will fallback to the bundled resources + strict: true, + + // Setting checkForUpdates to true will cause the SDK to always ping the Ota service to see if there's a newer version, and if so download it + checkForUpdates: true, + + // URL to the ota resource provider, leave blank to use Microblink's ota service, set to use a proxy or self hosted + // otaResourcesProviderUrl: , + otaResourceProviderUrl: undefined, + + // URL to the "bundled" ota resources, look at the public/custom-ota-resources folder to see the required structure, + // these resources are always downloaded if checkForUpdates is false, or if checkForUpdates is true, we will check if these are already the latest + // version, and use them instead of downloading from the Ota resource provider. + // resourcesLocation: "custom-ota-resources", + + // Ota service request timeout in milliseconds + timeoutMilis: 5000, + }, +}); + +blinkid.addOnResultCallback((result) => { + console.log(result); + void blinkid.destroy(); +}); diff --git a/apps/examples/blinkid-ota-setup/src/vite-env.d.ts b/apps/examples/blinkid-ota-setup/src/vite-env.d.ts new file mode 100644 index 00000000..93130bf1 --- /dev/null +++ b/apps/examples/blinkid-ota-setup/src/vite-env.d.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +/// + +interface ImportMetaEnv { + readonly VITE_LICENCE_KEY: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/apps/examples/blinkid-ota-setup/tsconfig.json b/apps/examples/blinkid-ota-setup/tsconfig.json new file mode 100644 index 00000000..3e2db0da --- /dev/null +++ b/apps/examples/blinkid-ota-setup/tsconfig.json @@ -0,0 +1,14 @@ +{ + // "extends": "@microblink/tsconfig/base.json", + "compilerOptions": { + "noEmit": true, + "module": "Preserve", + "strict": true, + "declarationMap": false, + "target": "es2022", + "rootDir": "src", + "jsx": "preserve", + "types": ["vite/client"] + }, + "include": ["src"] +} diff --git a/apps/examples/blinkid-ota-setup/vite.config.ts b/apps/examples/blinkid-ota-setup/vite.config.ts new file mode 100644 index 00000000..7c83d87d --- /dev/null +++ b/apps/examples/blinkid-ota-setup/vite.config.ts @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { moveResources } from "@microblink/repo-utils"; +import dns from "dns"; +import { defineConfig, Plugin, ServerOptions } from "vite"; +import mkcert from "vite-plugin-mkcert"; + +// https://vitejs.dev/guide/migration.html#architecture-changes-and-legacy-options +dns.setDefaultResultOrder("verbatim"); + +let ranOnce = false; + +const serverOptions: ServerOptions = { + port: 3000, + headers: { + "Cross-Origin-Embedder-Policy": "require-corp", + "Cross-Origin-Opener-Policy": "same-origin", + }, + host: true, +}; + +// Custom plugin to add resource-specific headers +const resourceHeadersPlugin: Plugin = { + name: "resource-headers-plugin", + configureServer(server) { + server.middlewares.use((req, res, next) => { + if (req.url?.includes("/resources/")) { + res.setHeader("Cache-Control", "max-age=300"); + res.setHeader("Access-Control-Allow-Origin", "*"); + } + next(); + }); + }, +}; + +export default defineConfig((config) => { + return { + base: "./", + build: { + sourcemap: config.mode === "development", + target: "es2022", + }, + plugins: [ + // symlink wasm resources to public/resources + { + name: "move-resources", + buildStart: async () => { + if (ranOnce) { + return; + } + moveResources("@microblink/blinkid", "public/resources"); + ranOnce = true; + }, + }, + // Add resource-specific headers + resourceHeadersPlugin, + // Generates certificates for https + mkcert(), + ], + server: serverOptions, + preview: serverOptions, + }; +}); diff --git a/apps/examples/blinkid-ui-customization/src/App.tsx b/apps/examples/blinkid-ui-customization/src/App.tsx index 69222ee2..0b85b4c9 100644 --- a/apps/examples/blinkid-ui-customization/src/App.tsx +++ b/apps/examples/blinkid-ui-customization/src/App.tsx @@ -278,7 +278,7 @@ export const App: Component = () => { * @param error Type of error that occurred during scanning */ blinkIdUxManager.addOnErrorCallback((error: BlinkIdProcessingError) => { - if (error === "timeout") { + if (error === "scan_step_timeout" || error === "inactivity_timeout") { setTimeoutError(true); } }); @@ -307,8 +307,8 @@ export const App: Component = () => { blinkIdUxManager.addDocumentClassFilter( (documentClassInfo: DocumentClassInfo) => { return !( - documentClassInfo.country === "usa" && - documentClassInfo.type === "passport" + documentClassInfo.country?.id === "usa" && + documentClassInfo.documentType?.id === "passport" ); }, ); @@ -325,7 +325,7 @@ export const App: Component = () => { blinkIdUxManager.addOnDocumentFilteredCallback( (documentClassInfo: DocumentClassInfo) => { setFilteredDocumentError( - `Document filtered: ${documentClassInfo.type} from ${documentClassInfo.country} is not supported. Please use a US passport.`, + `Document filtered: ${documentClassInfo.documentType?.id ?? documentClassInfo.documentType?.rawValue} from ${documentClassInfo.country?.id ?? documentClassInfo.country?.rawValue} is not supported. Please use a US passport.`, ); }, ); diff --git a/docs/blinkcard/OssDependencies.md b/docs/blinkcard/OssDependencies.md index 768f712a..3500820c 100644 --- a/docs/blinkcard/OssDependencies.md +++ b/docs/blinkcard/OssDependencies.md @@ -6,7 +6,7 @@ This report lists all open source dependencies used in the BlinkCard SDK package This report includes: - **NPM Dependencies**: Production dependencies from all packages in the monorepo (126 packages) -- **C++ Dependencies**: Native dependencies for WebAssembly builds (33 unique packages across 1 build flavors) +- **C++ Dependencies**: Native dependencies for WebAssembly builds (24 unique packages) ## NPM Dependencies @@ -118,7 +118,7 @@ This report includes: | js-tokens | 4.0.0 | MIT | Simon Lydell | [Link](https://github.com/lydell/js-tokens#readme) | | loose-envify | 1.4.0 | MIT | Andres Suarez | [Link](https://github.com/zertosh/loose-envify) | | merge-anything | 6.0.3 | MIT | Luca Ban - Mesqueeb | [Link](https://github.com/mesqueeb/merge-anything#readme) | -| nanoid | 5.0.2 | MIT | Andrey Sitnik | [Link](https://github.com/ai/nanoid#readme) | +| nanoid | 5.0.9 | MIT | Andrey Sitnik | [Link](https://github.com/ai/nanoid#readme) | | perfect-debounce | 2.1.0 | MIT | N/A | [Link](https://github.com/unjs/perfect-debounce#readme) | | perfect-freehand | 1.2.2 | MIT | Steve Ruiz | [Link](https://github.com/steveruizok/perfect-freehand#readme) | | proxy-compare | 3.0.0 | MIT | Daishi Kato | [Link](https://github.com/dai-shi/proxy-compare#readme) | @@ -143,36 +143,27 @@ This report includes: | Package | License | URL | Description | |---------|---------|-----|-------------| -| abseil/20250512.0.1@microblink/main#120e2c1b766e76087248ee491d67cb52 | Apache-2.0 | [Link](https://github.com/microblink/abseil-cpp) | Abseil Common Libraries (C++) from Google | -| adv_obfuscator/20170904.1@microblink/main#aa4c2ce54111773ef9ce027667b68d71 | https://github.com/microblink/ADVobfuscator#copyright-and-license | [Link](https://github.com/microblink/ADVobfuscator) | Obfuscation library based on C++11/14 and metaprogramming | -| boost/1.84.1@microblink/main#bff79afef94bda2190fd38c952381df6 | Boost Software license | [Link](https://bitbucket.org/microblink/boost) | Free peer-reviewed portable C++ source libraries. | -| concurrent_queue/1.0.1@microblink/main#b452679c066c30530f176c59cd276208 | Dual licensed under Simplified BSD License and Boost Software License - Version 1.0 | [Link](https://github.com/microblink/concurrentqueue) | A fast multi-producer, multi-consumer lock-free concurrent queue for C++11 | -| config_ex/1.1.1@microblink/main#58895a244f6055c6017a95e43ef5ce63 | MIT | [Link](https://github.com/microblink/config_ex) | Additions to boost/config for additional compiler-specific codegen tweaking macros | -| cpuinfo/20250509.9@microblink/main#40de5b1b7859404e36455d2a5a670efb | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/cpuinfo) | cpuinfo is a library to detect essential for performance optimization information about host CPU | -| eigen/3.4.2@microblink/main#406195518d246c1d387b54df8ade9052 | Mozilla Public License Version 2.0 | [Link](https://github.com/microblink/eigen-git-mirror) | Eigen is a C++ template library for linear algebra: vectors, matrices, and related algorithms. It is versatile, fast, elegant and works on many platforms (OS/Compilers). | -| err/1.0.2@microblink/main#c37bea8eb2a49b4f46fdd47f028d144d | Boost Software License | [Link](https://github.com/microblink/err) | err - yet another take on C++ error handling | -| functionoid/1.0.1@microblink/main#a63c389de8e94c11f18c62430bb3aa1f | Boost Software License, Version 1.0 | [Link](https://github.com/microblink/functionoid) | a complete C++17 rewrite of boost/std::function | -| gtest/1.14.9@microblink/main#92cbac29cb2870655027eb912cd72358 | BSD 3-Clause | [Link](https://bitbucket.org/microblink/core-google-test/src) | Google's C++ test framework | -| hash/2.0.3@microblink/main#bca5158cdd3532fd9a32d7539b66194f | zlib | [Link](https://github.com/microblink/hash-library) | Portable C++ Hashing Library | -| kiwaku/20230809.4@microblink/main#6e5eb5cb85661173d4d516738282e5db | BSL-1.0 | [Link](https://github.com/microblink/kiwaku) | C++20 and onward collection of high performance data containers and related tools | -| libjpeg_turbo/3.0.2.2@microblink/main#c5ae8c1d15ab8215718ea3df429e55e1 | BSD-3-Clause, Zlib | [Link](https://github.com/microblink/libjpeg-turbo) | SIMD-accelerated libjpeg-compatible JPEG codec library | -| libpng/1.6.48@microblink/main#a894c6d32b60eb517232069228102b95 | libpng-2.0 | [Link](https://github.com/microblink/libpng) | An Open, Extensible Image Format with Lossless Compression | -| micro_ecc/1.0.0@microblink/main#1c323460f6536c0b0f5baaed9de6bcf5 | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/micro-ecc) | A small and fast ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors. | -| mmap/1.0.2@microblink/main#49540e8a3d87662b601b9b433396582c | Boost Software License | [Link](https://github.com/microblink/mmap) | portable, lightweight, powerful, near-zero-overhead memory mapping and virtual memory management | -| nlohmann_json/3.10.4#2d3ba0c641692cca9fb4514e05154688 | MIT | [Link](https://github.com/conan-io/conan-center-index) | JSON for Modern C++ parser and generator. | -| opencv/4.10.1@microblink/main#2bc2be2ecc71966cde69f7dbdf85a312 | MIT | [Link](https://github.com/microblink/opencv) | Microblink's fork of OpenCV | -| pimpl/1.0.1@microblink/main#4857170a202027c0fd2f22d0c2c4c7a3 | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/pimpl) | Proving pimpls do not require heap, exceptions or runtime polymorphism. | -| protobuf/4.25.2@microblink/main#732767a0c74df7e4d7955a035060b19d | BSD | [Link](https://github.com/microblink/protobuf) | Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data | -| qoixx/0.1.7.3@microblink/main#7a99513f8b969271ba87111c1317f1f0 | MIT License | [Link](https://github.com/microblink/qoixx) | qoixx is a high performance MIT licensed single-header QOI implementation written in C++20. | -| range-v3/0.12.0#abb9932b80d96eaf8fc992debe3870ed | BSL-1.0 | [Link](https://github.com/conan-io/conan-center-index) | Experimental range library for C++11/14/17 | -| rapidjson/1.1.6@microblink/main#22545451e78c6dfb8c85f2e14b862674 | BSD | [Link](https://bitbucket.org/microblink/core-rapidjson) | A fast JSON parser/generator for C++ with both SAX/DOM style API | -| re2/20240702.0.0@microblink/main#97effdb903f6546348047925d9d1f365 | BSD-3-Clause | [Link](https://github.com/microblink/re2) | Fast, safe, thread-friendly regular expression library | -| std_fix/1.0.2@microblink/main#3002fa1150d5261ad74d2d167d48e653 | BSL-1.0 | [Link](https://github.com/microblink/std_fix) | Patches for deficient C++ runtime implementations | -| sweater/1.1.7@microblink/main#00226324984e8fb052dd8e703b48d28e | MIT | [Link](https://github.com/microblink/sweater) | Humble Outer Dispatch | -| tf_messages/1.0.1@microblink/main#96187cc0ac393ee835b807074bb3e884 | Apache License 2.0 | [Link](https://bitbucket.org/microblink/core-tensorflow/) | Computation using data flow graphs for scalable machine learning | -| tinyxml2/2.2.4@microblink/main#e75d39f68113ec40fde0b991ffa76a37 | Zlib | [Link](https://github.com/microblink/tinyxml2) | a simple, small, efficient, C++ XML parser | -| tqdm/1.0.0@microblink/main#9f84ad8bec3a73f9635d64c0f49aea96 | MIT | [Link](https://bitbucket.org/microblink/core-tqdm) | tqdm-like single header c++ pretty progress bar | -| utfcpp/4.0.6@microblink/main#ea11de5465f5305ad0fc5d691185d7a5 | Boost Software License 1.0 | [Link](https://github.com/microblink/utfcpp) | UTF-8 with C++ in a Portable Way | -| xnnpack/20230525.1.6@microblink/main#3e5e60789c103ebfec170c7898cdfe4d | BSD | [Link](https://github.com/microblink/XNNPACK) | XNNPACK library | -| zlib/1.3.2@microblink/main#52419110a760a9cb8cd7bd57b01de0b2 | Zlib | [Link](https://github.com/microblink/zlib) | A massively spiffy yet delicately unobtrusive compression library. | -| zxing-cpp/1.1.0@microblink/main#6650d1dcd9e84e7917697e701c82ad47 | Apache License 2.0 | [Link](https://github.com/microblink/zxing) | ZXing ("Zebra Crossing") barcode scanning library for Java, Android | +| concurrentqueue/1.0.4.mb.1 | BSD-2-Clause,BSL-1.0 | N/A | N/A | +| ConfigEx/24.0.4 | MIT | [Link](https://github.com/microblink/config_ex) | N/A | +| core-identity++http_archive+adv-obfuscator | BSD-3-Clause-Clear | [Link](https://github.com/microblink/ADVObfuscator) | N/A | +| core-identity++http_archive+kiwaku | BSL-1.0 | [Link](https://github.com/microblink/kiwaku) | N/A | +| core-identity++http_archive+micro-ecc | BSD-2-Clause | [Link](https://github.com/microblink/micro-ecc) | N/A | +| core-identity++http_archive+qoixx | MIT | [Link](https://github.com/wx257osn2/qoixx) | N/A | +| core-identity++http_archive+utfcpp | BSL-1.0 | [Link](https://github.com/nemtrif/utfcpp) | N/A | +| cpuinfo/0.0.0-20260312-7607ca5.mb.1 | BSD-2-Clause | N/A | N/A | +| eigen/5.0.1.bcr.2 | MPL-2.0 | N/A | N/A | +| Err/24.0.4 | BSL-1.0 | [Link](https://github.com/microblink/err) | N/A | +| Functionoid/24.0.4 | BSL-1.0 | [Link](https://github.com/microblink/functionoid) | N/A | +| Hash/24.0.4 | Zlib | [Link](https://github.com/stbrumme/hash-library) | N/A | +| libbacktrace/1.0.0-20250926-7939218.mb.1 | BSD-3-Clause | N/A | N/A | +| libdeflate/1.25 | MIT | N/A | N/A | +| libjpeg_turbo/3.1.3.bcr.6 | BSD-3-Clause-Modification,IJG,Zlib | N/A | N/A | +| libpng/1.6.54 | libpng-2.0 | N/A | N/A | +| MMap/24.0.4 | BSL-1.0 | [Link](https://github.com/microblink/mmap) | N/A | +| opencv/5.0.0.mb.2 | Apache-2.0 | N/A | N/A | +| pimpl/24.0.4 | BSD-2-Clause | [Link](https://github.com/microblink/pimpl) | N/A | +| pthreadpool/0.0.0-20250926-560c60d.mb.1 | BSD-2-Clause | N/A | N/A | +| rapidjson/1.1.0.mb.20250205 | MIT | N/A | N/A | +| sweater/24.0.4 | MIT | [Link](https://github.com/microblink/sweater) | N/A | +| xnnpack/20230525.6.0 | BSD-3-Clause | [Link](https://github.com/microblink/XNNPACK) | N/A | +| zlib/1.3.2.mb.1 | Zlib | N/A | N/A | diff --git a/docs/blinkid-verify/OssDependencies.md b/docs/blinkid-verify/OssDependencies.md index 6a9527d4..341a2b89 100644 --- a/docs/blinkid-verify/OssDependencies.md +++ b/docs/blinkid-verify/OssDependencies.md @@ -6,7 +6,7 @@ This report lists all open source dependencies used in the BlinkID Verify SDK pa This report includes: - **NPM Dependencies**: Production dependencies from all packages in the monorepo (126 packages) -- **C++ Dependencies**: Native dependencies for WebAssembly builds (33 unique packages across 1 build flavors) +- **C++ Dependencies**: Native dependencies for WebAssembly builds (25 unique packages) ## NPM Dependencies @@ -118,7 +118,7 @@ This report includes: | js-tokens | 4.0.0 | MIT | Simon Lydell | [Link](https://github.com/lydell/js-tokens#readme) | | loose-envify | 1.4.0 | MIT | Andres Suarez | [Link](https://github.com/zertosh/loose-envify) | | merge-anything | 6.0.3 | MIT | Luca Ban - Mesqueeb | [Link](https://github.com/mesqueeb/merge-anything#readme) | -| nanoid | 5.0.2 | MIT | Andrey Sitnik | [Link](https://github.com/ai/nanoid#readme) | +| nanoid | 5.0.9 | MIT | Andrey Sitnik | [Link](https://github.com/ai/nanoid#readme) | | perfect-debounce | 2.1.0 | MIT | N/A | [Link](https://github.com/unjs/perfect-debounce#readme) | | perfect-freehand | 1.2.2 | MIT | Steve Ruiz | [Link](https://github.com/steveruizok/perfect-freehand#readme) | | proxy-compare | 3.0.0 | MIT | Daishi Kato | [Link](https://github.com/dai-shi/proxy-compare#readme) | @@ -143,36 +143,28 @@ This report includes: | Package | License | URL | Description | |---------|---------|-----|-------------| -| abseil/20250512.0.1@microblink/main#120e2c1b766e76087248ee491d67cb52 | Apache-2.0 | [Link](https://github.com/microblink/abseil-cpp) | Abseil Common Libraries (C++) from Google | -| adv_obfuscator/20170904.1@microblink/main#aa4c2ce54111773ef9ce027667b68d71 | https://github.com/microblink/ADVobfuscator#copyright-and-license | [Link](https://github.com/microblink/ADVobfuscator) | Obfuscation library based on C++11/14 and metaprogramming | -| boost/1.84.1@microblink/main#bff79afef94bda2190fd38c952381df6 | Boost Software license | [Link](https://bitbucket.org/microblink/boost) | Free peer-reviewed portable C++ source libraries. | -| concurrent_queue/1.0.1@microblink/main#b452679c066c30530f176c59cd276208 | Dual licensed under Simplified BSD License and Boost Software License - Version 1.0 | [Link](https://github.com/microblink/concurrentqueue) | A fast multi-producer, multi-consumer lock-free concurrent queue for C++11 | -| config_ex/1.1.1@microblink/main#58895a244f6055c6017a95e43ef5ce63 | MIT | [Link](https://github.com/microblink/config_ex) | Additions to boost/config for additional compiler-specific codegen tweaking macros | -| cpuinfo/20250509.9@microblink/main#40de5b1b7859404e36455d2a5a670efb | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/cpuinfo) | cpuinfo is a library to detect essential for performance optimization information about host CPU | -| eigen/3.4.2@microblink/main#406195518d246c1d387b54df8ade9052 | Mozilla Public License Version 2.0 | [Link](https://github.com/microblink/eigen-git-mirror) | Eigen is a C++ template library for linear algebra: vectors, matrices, and related algorithms. It is versatile, fast, elegant and works on many platforms (OS/Compilers). | -| err/1.0.2@microblink/main#c37bea8eb2a49b4f46fdd47f028d144d | Boost Software License | [Link](https://github.com/microblink/err) | err - yet another take on C++ error handling | -| functionoid/1.0.1@microblink/main#a63c389de8e94c11f18c62430bb3aa1f | Boost Software License, Version 1.0 | [Link](https://github.com/microblink/functionoid) | a complete C++17 rewrite of boost/std::function | -| gtest/1.14.10@microblink/main#aeea6cc884a4400edf8084592f7b23ec | BSD 3-Clause | [Link](https://bitbucket.org/microblink/core-google-test/src) | Google's C++ test framework | -| hash/2.0.3@microblink/main#bca5158cdd3532fd9a32d7539b66194f | zlib | [Link](https://github.com/microblink/hash-library) | Portable C++ Hashing Library | -| kiwaku/20230809.4@microblink/main#6e5eb5cb85661173d4d516738282e5db | BSL-1.0 | [Link](https://github.com/microblink/kiwaku) | C++20 and onward collection of high performance data containers and related tools | -| libjpeg_turbo/3.0.2.2@microblink/main#c5ae8c1d15ab8215718ea3df429e55e1 | BSD-3-Clause, Zlib | [Link](https://github.com/microblink/libjpeg-turbo) | SIMD-accelerated libjpeg-compatible JPEG codec library | -| libpng/1.6.48@microblink/main#a894c6d32b60eb517232069228102b95 | libpng-2.0 | [Link](https://github.com/microblink/libpng) | An Open, Extensible Image Format with Lossless Compression | -| micro_ecc/1.0.0@microblink/main#1c323460f6536c0b0f5baaed9de6bcf5 | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/micro-ecc) | A small and fast ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors. | -| mmap/1.0.2@microblink/main#49540e8a3d87662b601b9b433396582c | Boost Software License | [Link](https://github.com/microblink/mmap) | portable, lightweight, powerful, near-zero-overhead memory mapping and virtual memory management | -| nlohmann_json/3.10.4#2d3ba0c641692cca9fb4514e05154688 | MIT | [Link](https://github.com/conan-io/conan-center-index) | JSON for Modern C++ parser and generator. | -| opencv/4.10.1@microblink/main#2bc2be2ecc71966cde69f7dbdf85a312 | MIT | [Link](https://github.com/microblink/opencv) | Microblink's fork of OpenCV | -| pimpl/1.0.1@microblink/main#4857170a202027c0fd2f22d0c2c4c7a3 | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/pimpl) | Proving pimpls do not require heap, exceptions or runtime polymorphism. | -| protobuf/4.25.2@microblink/main#732767a0c74df7e4d7955a035060b19d | BSD | [Link](https://github.com/microblink/protobuf) | Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data | -| qoixx/0.1.7.3@microblink/main#7a99513f8b969271ba87111c1317f1f0 | MIT License | [Link](https://github.com/microblink/qoixx) | qoixx is a high performance MIT licensed single-header QOI implementation written in C++20. | -| range-v3/0.12.0#abb9932b80d96eaf8fc992debe3870ed | BSL-1.0 | [Link](https://github.com/conan-io/conan-center-index) | Experimental range library for C++11/14/17 | -| rapidjson/1.1.6@microblink/main#22545451e78c6dfb8c85f2e14b862674 | BSD | [Link](https://bitbucket.org/microblink/core-rapidjson) | A fast JSON parser/generator for C++ with both SAX/DOM style API | -| re2/20240702.0.0@microblink/main#97effdb903f6546348047925d9d1f365 | BSD-3-Clause | [Link](https://github.com/microblink/re2) | Fast, safe, thread-friendly regular expression library | -| std_fix/1.0.2@microblink/main#3002fa1150d5261ad74d2d167d48e653 | BSL-1.0 | [Link](https://github.com/microblink/std_fix) | Patches for deficient C++ runtime implementations | -| sweater/1.1.7@microblink/main#00226324984e8fb052dd8e703b48d28e | MIT | [Link](https://github.com/microblink/sweater) | Humble Outer Dispatch | -| tf_messages/1.0.1@microblink/main#96187cc0ac393ee835b807074bb3e884 | Apache License 2.0 | [Link](https://bitbucket.org/microblink/core-tensorflow/) | Computation using data flow graphs for scalable machine learning | -| tinyxml2/2.2.4@microblink/main#e75d39f68113ec40fde0b991ffa76a37 | Zlib | [Link](https://github.com/microblink/tinyxml2) | a simple, small, efficient, C++ XML parser | -| tqdm/1.0.0@microblink/main#9f84ad8bec3a73f9635d64c0f49aea96 | MIT | [Link](https://bitbucket.org/microblink/core-tqdm) | tqdm-like single header c++ pretty progress bar | -| utfcpp/4.0.6@microblink/main#ea11de5465f5305ad0fc5d691185d7a5 | Boost Software License 1.0 | [Link](https://github.com/microblink/utfcpp) | UTF-8 with C++ in a Portable Way | -| xnnpack/20230525.1.6@microblink/main#3e5e60789c103ebfec170c7898cdfe4d | BSD | [Link](https://github.com/microblink/XNNPACK) | XNNPACK library | -| zlib/1.3.2@microblink/main#52419110a760a9cb8cd7bd57b01de0b2 | Zlib | [Link](https://github.com/microblink/zlib) | A massively spiffy yet delicately unobtrusive compression library. | -| zxing-cpp/1.1.0@microblink/main#6650d1dcd9e84e7917697e701c82ad47 | Apache License 2.0 | [Link](https://github.com/microblink/zxing) | ZXing ("Zebra Crossing") barcode scanning library for Java, Android | +| adv-obfuscator | BSD-3-Clause-Clear | [Link](https://github.com/microblink/ADVObfuscator/archive/refs/tags/mb.20170904.2.tar.gz) | N/A | +| concurrentqueue/1.0.4.mb.1 | BSD-2-Clause,BSL-1.0 | N/A | N/A | +| ConfigEx/0.1.0-docver.alpha.8 | MIT | [Link](https://github.com/microblink/config_ex) | N/A | +| cpuinfo/0.0.0-20260312-7607ca5.mb.1 | BSD-2-Clause | N/A | N/A | +| eigen/5.0.1.bcr.1 | MPL-2.0 | N/A | N/A | +| Err/0.1.0-docver.alpha.8 | BSL-1.0 | [Link](https://github.com/microblink/err) | N/A | +| Functionoid/0.1.0-docver.alpha.8 | BSL-1.0 | [Link](https://github.com/microblink/functionoid) | N/A | +| Hash/0.1.0-docver.alpha.8 | Zlib | [Link](https://github.com/stbrumme/hash-library) | N/A | +| kiwaku | BSL-1.0 | [Link](https://github.com/microblink/kiwaku/archive/refs/tags/mb.20230809.4.tar.gz) | N/A | +| libdeflate/1.25 | MIT | N/A | N/A | +| libjpeg_turbo/3.1.3.bcr.4 | BSD-3-Clause-Modification,IJG,Zlib | N/A | N/A | +| libpng/1.6.54 | libpng-2.0 | N/A | N/A | +| micro-ecc | BSD-2-Clause | [Link](https://github.com/microblink/micro-ecc/archive/refs/tags/v1.0-mb.1.tar.gz) | N/A | +| MMap/0.1.0-docver.alpha.8 | BSL-1.0 | [Link](https://github.com/microblink/mmap) | N/A | +| opencv/4.13.0.mb.2 | Apache-2.0 | N/A | N/A | +| pimpl/0.1.0-docver.alpha.8 | BSD-2-Clause | [Link](https://github.com/microblink/pimpl) | N/A | +| pthreadpool/0.0.0-20250926-560c60d.mb.1 | BSD-2-Clause | N/A | N/A | +| qoixx | MIT | [Link](https://github.com/wx257osn2/qoixx/archive/refs/tags/v0.1.7.tar.gz) | N/A | +| rapidjson/1.1.0.mb.20250205 | MIT | N/A | N/A | +| sweater/0.1.0-docver.alpha.8 | MIT | [Link](https://github.com/microblink/sweater) | N/A | +| utfcpp | BSL-1.0 | [Link](https://github.com/nemtrif/utfcpp/archive/refs/tags/v4.0.9.tar.gz) | N/A | +| xnnpack/20230525.5.0 | BSD-3-Clause | [Link](https://github.com/microblink/XNNPACK) | N/A | +| zlib/1.3.2.mb.1 | Zlib | N/A | N/A | +| zxing | Apache-2.0 | [Link](https://github.com/microblink/zxing/archive/2fb1595417c4dd5604f36e10bad74cb934819ccf.zip) | N/A | +| zxing-cpp | Apache-2.0 | [Link](https://github.com/microblink/zxing-cpp/archive/refs/tags/3.0.2.mb.1.zip) | N/A | diff --git a/docs/blinkid/OssDependencies.md b/docs/blinkid/OssDependencies.md index c6a81781..c015502f 100644 --- a/docs/blinkid/OssDependencies.md +++ b/docs/blinkid/OssDependencies.md @@ -6,7 +6,7 @@ This report lists all open source dependencies used in the BlinkID SDK packages. This report includes: - **NPM Dependencies**: Production dependencies from all packages in the monorepo (126 packages) -- **C++ Dependencies**: Native dependencies for WebAssembly builds (33 unique packages across 3 build flavors) +- **C++ Dependencies**: Native dependencies for WebAssembly builds (26 unique packages) ## NPM Dependencies @@ -118,7 +118,7 @@ This report includes: | js-tokens | 4.0.0 | MIT | Simon Lydell | [Link](https://github.com/lydell/js-tokens#readme) | | loose-envify | 1.4.0 | MIT | Andres Suarez | [Link](https://github.com/zertosh/loose-envify) | | merge-anything | 6.0.3 | MIT | Luca Ban - Mesqueeb | [Link](https://github.com/mesqueeb/merge-anything#readme) | -| nanoid | 5.0.2 | MIT | Andrey Sitnik | [Link](https://github.com/ai/nanoid#readme) | +| nanoid | 5.0.9 | MIT | Andrey Sitnik | [Link](https://github.com/ai/nanoid#readme) | | perfect-debounce | 2.1.0 | MIT | N/A | [Link](https://github.com/unjs/perfect-debounce#readme) | | perfect-freehand | 1.2.2 | MIT | Steve Ruiz | [Link](https://github.com/steveruizok/perfect-freehand#readme) | | proxy-compare | 3.0.0 | MIT | Daishi Kato | [Link](https://github.com/dai-shi/proxy-compare#readme) | @@ -143,36 +143,29 @@ This report includes: | Package | License | URL | Description | |---------|---------|-----|-------------| -| abseil/20250512.0.1@microblink/main#120e2c1b766e76087248ee491d67cb52 | Apache-2.0 | [Link](https://github.com/microblink/abseil-cpp) | Abseil Common Libraries (C++) from Google | -| adv_obfuscator/20170904.1@microblink/main#aa4c2ce54111773ef9ce027667b68d71 | https://github.com/microblink/ADVobfuscator#copyright-and-license | [Link](https://github.com/microblink/ADVobfuscator) | Obfuscation library based on C++11/14 and metaprogramming | -| boost/1.84.1@microblink/main#bff79afef94bda2190fd38c952381df6 | Boost Software license | [Link](https://bitbucket.org/microblink/boost) | Free peer-reviewed portable C++ source libraries. | -| concurrent_queue/1.0.1@microblink/main#b452679c066c30530f176c59cd276208 | Dual licensed under Simplified BSD License and Boost Software License - Version 1.0 | [Link](https://github.com/microblink/concurrentqueue) | A fast multi-producer, multi-consumer lock-free concurrent queue for C++11 | -| config_ex/1.1.1@microblink/main#58895a244f6055c6017a95e43ef5ce63 | MIT | [Link](https://github.com/microblink/config_ex) | Additions to boost/config for additional compiler-specific codegen tweaking macros | -| cpuinfo/20250509.9@microblink/main#40de5b1b7859404e36455d2a5a670efb | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/cpuinfo) | cpuinfo is a library to detect essential for performance optimization information about host CPU | -| eigen/3.4.2@microblink/main#406195518d246c1d387b54df8ade9052 | Mozilla Public License Version 2.0 | [Link](https://github.com/microblink/eigen-git-mirror) | Eigen is a C++ template library for linear algebra: vectors, matrices, and related algorithms. It is versatile, fast, elegant and works on many platforms (OS/Compilers). | -| err/1.0.2@microblink/main#c37bea8eb2a49b4f46fdd47f028d144d | Boost Software License | [Link](https://github.com/microblink/err) | err - yet another take on C++ error handling | -| functionoid/1.0.1@microblink/main#a63c389de8e94c11f18c62430bb3aa1f | Boost Software License, Version 1.0 | [Link](https://github.com/microblink/functionoid) | a complete C++17 rewrite of boost/std::function | -| gtest/1.14.10@microblink/main#aeea6cc884a4400edf8084592f7b23ec | BSD 3-Clause | [Link](https://bitbucket.org/microblink/core-google-test/src) | Google's C++ test framework | -| hash/2.0.3@microblink/main#bca5158cdd3532fd9a32d7539b66194f | zlib | [Link](https://github.com/microblink/hash-library) | Portable C++ Hashing Library | -| kiwaku/20230809.4@microblink/main#6e5eb5cb85661173d4d516738282e5db | BSL-1.0 | [Link](https://github.com/microblink/kiwaku) | C++20 and onward collection of high performance data containers and related tools | -| libjpeg_turbo/3.0.2.2@microblink/main#c5ae8c1d15ab8215718ea3df429e55e1 | BSD-3-Clause, Zlib | [Link](https://github.com/microblink/libjpeg-turbo) | SIMD-accelerated libjpeg-compatible JPEG codec library | -| libpng/1.6.48@microblink/main#a894c6d32b60eb517232069228102b95 | libpng-2.0 | [Link](https://github.com/microblink/libpng) | An Open, Extensible Image Format with Lossless Compression | -| micro_ecc/1.0.0@microblink/main#1c323460f6536c0b0f5baaed9de6bcf5 | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/micro-ecc) | A small and fast ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors. | -| mmap/1.0.2@microblink/main#49540e8a3d87662b601b9b433396582c | Boost Software License | [Link](https://github.com/microblink/mmap) | portable, lightweight, powerful, near-zero-overhead memory mapping and virtual memory management | -| nlohmann_json/3.10.4#2d3ba0c641692cca9fb4514e05154688 | MIT | [Link](https://github.com/conan-io/conan-center-index) | JSON for Modern C++ parser and generator. | -| opencv/4.10.1@microblink/main#2bc2be2ecc71966cde69f7dbdf85a312 | MIT | [Link](https://github.com/microblink/opencv) | Microblink's fork of OpenCV | -| pimpl/1.0.1@microblink/main#4857170a202027c0fd2f22d0c2c4c7a3 | BSD 2-Clause "Simplified" License | [Link](https://github.com/microblink/pimpl) | Proving pimpls do not require heap, exceptions or runtime polymorphism. | -| protobuf/4.25.2@microblink/main#732767a0c74df7e4d7955a035060b19d | BSD | [Link](https://github.com/microblink/protobuf) | Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data | -| qoixx/0.1.7.3@microblink/main#7a99513f8b969271ba87111c1317f1f0 | MIT License | [Link](https://github.com/microblink/qoixx) | qoixx is a high performance MIT licensed single-header QOI implementation written in C++20. | -| range-v3/0.12.0#abb9932b80d96eaf8fc992debe3870ed | BSL-1.0 | [Link](https://github.com/conan-io/conan-center-index) | Experimental range library for C++11/14/17 | -| rapidjson/1.1.6@microblink/main#22545451e78c6dfb8c85f2e14b862674 | BSD | [Link](https://bitbucket.org/microblink/core-rapidjson) | A fast JSON parser/generator for C++ with both SAX/DOM style API | -| re2/20240702.0.0@microblink/main#97effdb903f6546348047925d9d1f365 | BSD-3-Clause | [Link](https://github.com/microblink/re2) | Fast, safe, thread-friendly regular expression library | -| std_fix/1.0.2@microblink/main#3002fa1150d5261ad74d2d167d48e653 | BSL-1.0 | [Link](https://github.com/microblink/std_fix) | Patches for deficient C++ runtime implementations | -| sweater/1.1.7@microblink/main#00226324984e8fb052dd8e703b48d28e | MIT | [Link](https://github.com/microblink/sweater) | Humble Outer Dispatch | -| tf_messages/1.0.1@microblink/main#96187cc0ac393ee835b807074bb3e884 | Apache License 2.0 | [Link](https://bitbucket.org/microblink/core-tensorflow/) | Computation using data flow graphs for scalable machine learning | -| tinyxml2/2.2.4@microblink/main#e75d39f68113ec40fde0b991ffa76a37 | Zlib | [Link](https://github.com/microblink/tinyxml2) | a simple, small, efficient, C++ XML parser | -| tqdm/1.0.0@microblink/main#9f84ad8bec3a73f9635d64c0f49aea96 | MIT | [Link](https://bitbucket.org/microblink/core-tqdm) | tqdm-like single header c++ pretty progress bar | -| utfcpp/4.0.6@microblink/main#ea11de5465f5305ad0fc5d691185d7a5 | Boost Software License 1.0 | [Link](https://github.com/microblink/utfcpp) | UTF-8 with C++ in a Portable Way | -| xnnpack/20230525.1.6@microblink/main#3e5e60789c103ebfec170c7898cdfe4d | BSD | [Link](https://github.com/microblink/XNNPACK) | XNNPACK library | -| zlib/1.3.2@microblink/main#52419110a760a9cb8cd7bd57b01de0b2 | Zlib | [Link](https://github.com/microblink/zlib) | A massively spiffy yet delicately unobtrusive compression library. | -| zxing-cpp/1.1.0@microblink/main#6650d1dcd9e84e7917697e701c82ad47 | Apache License 2.0 | [Link](https://github.com/microblink/zxing) | ZXing ("Zebra Crossing") barcode scanning library for Java, Android | +| concurrentqueue/1.0.4.mb.1 | BSD-2-Clause,BSL-1.0 | N/A | N/A | +| ConfigEx/24.0.4 | MIT | [Link](https://github.com/microblink/config_ex) | N/A | +| core-identity++http_archive+adv-obfuscator | BSD-3-Clause-Clear | [Link](https://github.com/microblink/ADVObfuscator) | N/A | +| core-identity++http_archive+kiwaku | BSL-1.0 | [Link](https://github.com/microblink/kiwaku) | N/A | +| core-identity++http_archive+micro-ecc | BSD-2-Clause | [Link](https://github.com/microblink/micro-ecc) | N/A | +| core-identity++http_archive+qoixx | MIT | [Link](https://github.com/wx257osn2/qoixx) | N/A | +| core-identity++http_archive+utfcpp | BSL-1.0 | [Link](https://github.com/nemtrif/utfcpp) | N/A | +| core-identity++http_archive+zxing | Apache-2.0 | [Link](https://github.com/microblink/zxing) | N/A | +| core-identity++http_archive+zxing-cpp | Apache-2.0 | [Link](https://github.com/microblink/zxing-cpp) | N/A | +| cpuinfo/0.0.0-20260312-7607ca5.mb.1 | BSD-2-Clause | N/A | N/A | +| eigen/5.0.1.bcr.2 | MPL-2.0 | N/A | N/A | +| Err/24.0.4 | BSL-1.0 | [Link](https://github.com/microblink/err) | N/A | +| Functionoid/24.0.4 | BSL-1.0 | [Link](https://github.com/microblink/functionoid) | N/A | +| Hash/24.0.4 | Zlib | [Link](https://github.com/stbrumme/hash-library) | N/A | +| libbacktrace/1.0.0-20250926-7939218.mb.1 | BSD-3-Clause | N/A | N/A | +| libdeflate/1.25 | MIT | N/A | N/A | +| libjpeg_turbo/3.1.3.bcr.6 | BSD-3-Clause-Modification,IJG,Zlib | N/A | N/A | +| libpng/1.6.54 | libpng-2.0 | N/A | N/A | +| MMap/24.0.4 | BSL-1.0 | [Link](https://github.com/microblink/mmap) | N/A | +| opencv/5.0.0.mb.2 | Apache-2.0 | N/A | N/A | +| pimpl/24.0.4 | BSD-2-Clause | [Link](https://github.com/microblink/pimpl) | N/A | +| pthreadpool/0.0.0-20250926-560c60d.mb.1 | BSD-2-Clause | N/A | N/A | +| rapidjson/1.1.0.mb.20250205 | MIT | N/A | N/A | +| sweater/24.0.4 | MIT | [Link](https://github.com/microblink/sweater) | N/A | +| xnnpack/20230525.6.0 | BSD-3-Clause | [Link](https://github.com/microblink/XNNPACK) | N/A | +| zlib/1.3.2.mb.1 | Zlib | N/A | N/A | diff --git a/packages/analytics/CHANGELOG.md b/packages/analytics/CHANGELOG.md index 1e118650..c150dd4e 100644 --- a/packages/analytics/CHANGELOG.md +++ b/packages/analytics/CHANGELOG.md @@ -1,5 +1,12 @@ # @microblink/analytics +## 2.0.2 + +### Patch Changes + +- - Adds the new timeout pinglets + - Added `logInactivityTimeoutEvent` and `logUnsupportedBarcodeTimeout` to the `AnalyticsService` + ## 2.0.1 ### Patch Changes diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 46d0a372..f43f9933 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/analytics", "private": true, - "version": "2.0.1", + "version": "2.0.2", "scripts": { "build": "tsc", "build:publish": "tsc", diff --git a/packages/analytics/src/AnalyticService.test.ts b/packages/analytics/src/AnalyticService.test.ts index fa32cf1e..33e47684 100644 --- a/packages/analytics/src/AnalyticService.test.ts +++ b/packages/analytics/src/AnalyticService.test.ts @@ -102,7 +102,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "CameraStarted", }, @@ -114,7 +114,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "CameraClosed", }, @@ -128,7 +128,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "HelpOpened", }, @@ -140,7 +140,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "HelpClosed", helpCloseType: "ContentFullyViewed", @@ -153,7 +153,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "HelpClosed", helpCloseType: "ContentSkipped", @@ -166,7 +166,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "HelpTooltipDisplayed", }, @@ -180,7 +180,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "CloseButtonClicked", }, @@ -192,7 +192,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "OnboardingInfoDisplayed", }, @@ -206,7 +206,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "AlertDisplayed", alertType: "NetworkError", @@ -221,7 +221,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "ErrorMessage", errorMessageType: "EliminateBlur", @@ -236,7 +236,7 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "AppMovedToBackground", }, @@ -250,12 +250,36 @@ describe("AnalyticsService", () => { expect(mockPingFn).toHaveBeenCalledWith({ schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: { eventType: "StepTimeout", }, }); }); + + it("should log inactivity timeout", async () => { + await analyticsService.logInactivityTimeoutEvent(); + + expect(mockPingFn).toHaveBeenCalledWith({ + schemaName: "ping.sdk.ux.event", + schemaVersion: "1.2.0", + data: { + eventType: "InactivityTimeout", + }, + }); + }); + + it("should log UnsupportedBarcode timeout", async () => { + await analyticsService.logUnsupportedBarcodeTimeout(); + + expect(mockPingFn).toHaveBeenCalledWith({ + schemaName: "ping.sdk.ux.event", + schemaVersion: "1.2.0", + data: { + eventType: "UnsupportedBarcodeTimeout", + }, + }); + }); }); describe("camera system events", () => { diff --git a/packages/analytics/src/AnalyticService.ts b/packages/analytics/src/AnalyticService.ts index 3a59ae0e..2396c5a9 100644 --- a/packages/analytics/src/AnalyticService.ts +++ b/packages/analytics/src/AnalyticService.ts @@ -83,7 +83,7 @@ export class AnalyticService { #createUxEventPing(pingData: PingUxEventData): PingUxEvent { return { schemaName: "ping.sdk.ux.event", - schemaVersion: "1.1.0", + schemaVersion: "1.2.0", data: pingData, }; } @@ -197,6 +197,22 @@ export class AnalyticService { ); } + logInactivityTimeoutEvent() { + return this.#safePing( + this.#createUxEventPing({ + eventType: "InactivityTimeout", + }), + ); + } + + logUnsupportedBarcodeTimeout() { + return this.#safePing( + this.#createUxEventPing({ + eventType: "UnsupportedBarcodeTimeout", + }), + ); + } + logCameraInputInfo(pingData: PingCameraInputInfoData) { return this.#safePing({ schemaName: "ping.sdk.camera.input.info", diff --git a/packages/analytics/src/ping/ping.base.ts b/packages/analytics/src/ping/ping.base.ts index ab61b43f..2d17eeeb 100644 --- a/packages/analytics/src/ping/ping.base.ts +++ b/packages/analytics/src/ping/ping.base.ts @@ -1,5 +1,12 @@ /** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. + * Copyright (c) Microblink. All rights reserved. + * + * ANY UNAUTHORIZED USE OR SALE, DUPLICATION, OR DISTRIBUTION + * OF THIS PROGRAM OR ANY OF ITS PARTS, IN SOURCE OR BINARY FORMS, + * WITH OR WITHOUT MODIFICATION, WITH THE PURPOSE OF ACQUIRING + * UNLAWFUL MATERIAL OR ANY OTHER BENEFIT IS PROHIBITED! + * THIS PROGRAM IS PROTECTED BY COPYRIGHT LAWS AND YOU MAY NOT + * REVERSE ENGINEER, DECOMPILE, OR DISASSEMBLE IT. */ import { SchemaName } from "./Ping"; diff --git a/packages/analytics/src/ping/ping.browser.device.info.ts b/packages/analytics/src/ping/ping.browser.device.info.ts index f9101855..b3579ff7 100644 --- a/packages/analytics/src/ping/ping.browser.device.info.ts +++ b/packages/analytics/src/ping/ping.browser.device.info.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.error.ts b/packages/analytics/src/ping/ping.error.ts index fc3de26e..4c409a82 100644 --- a/packages/analytics/src/ping/ping.error.ts +++ b/packages/analytics/src/ping/ping.error.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.hardware.camera.info.ts b/packages/analytics/src/ping/ping.hardware.camera.info.ts index ece41cf6..7f15952d 100644 --- a/packages/analytics/src/ping/ping.hardware.camera.info.ts +++ b/packages/analytics/src/ping/ping.hardware.camera.info.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.log.ts b/packages/analytics/src/ping/ping.log.ts index 409c4428..d98fb2e2 100644 --- a/packages/analytics/src/ping/ping.log.ts +++ b/packages/analytics/src/ping/ping.log.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.sdk.camera.input.info.ts b/packages/analytics/src/ping/ping.sdk.camera.input.info.ts index 06d36a2e..d842f2d8 100644 --- a/packages/analytics/src/ping/ping.sdk.camera.input.info.ts +++ b/packages/analytics/src/ping/ping.sdk.camera.input.info.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.sdk.camera.permission.ts b/packages/analytics/src/ping/ping.sdk.camera.permission.ts index 8ddf132a..2fc693fb 100644 --- a/packages/analytics/src/ping/ping.sdk.camera.permission.ts +++ b/packages/analytics/src/ping/ping.sdk.camera.permission.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.sdk.init.start.ts b/packages/analytics/src/ping/ping.sdk.init.start.ts index 8d96d9b5..37347845 100644 --- a/packages/analytics/src/ping/ping.sdk.init.start.ts +++ b/packages/analytics/src/ping/ping.sdk.init.start.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * @@ -34,7 +30,7 @@ type Product = | "DocumentVerification" | "Pdf417Mobi" | "PhotoPay" - | "BioBlink"; + | "Biometrics"; type Platform = | "iOS" | "Android" @@ -58,6 +54,6 @@ type PlatformDetails = */ export type PingSdkInitStart = PingBase< "ping.sdk.init.start", - "1.3.0", + "2.0.0", PingSdkInitStartData >; diff --git a/packages/analytics/src/ping/ping.sdk.scan.conditions.ts b/packages/analytics/src/ping/ping.sdk.scan.conditions.ts index 5405a586..b37d8cf0 100644 --- a/packages/analytics/src/ping/ping.sdk.scan.conditions.ts +++ b/packages/analytics/src/ping/ping.sdk.scan.conditions.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/analytics/src/ping/ping.sdk.ux.event.ts b/packages/analytics/src/ping/ping.sdk.ux.event.ts index 51a99cee..fc314c56 100644 --- a/packages/analytics/src/ping/ping.sdk.ux.event.ts +++ b/packages/analytics/src/ping/ping.sdk.ux.event.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * @@ -34,7 +30,9 @@ type EventType = | "AlertDisplayed" | "ErrorMessage" | "StepTimeout" - | "AppMovedToBackground"; + | "AppMovedToBackground" + | "InactivityTimeout" + | "UnsupportedBarcodeTimeout"; type ErrorMessageType = | "MoveCloser" | "MoveFarther" @@ -51,7 +49,9 @@ type AlertType = | "NetworkError" | "DocumentClassNotAllowed" | "StepTimeout" - | "DocumentNotSupported"; + | "DocumentNotSupported" + | "InactivityTimeout" + | "UnsupportedBarcodeTimeout"; type HelpCloseType = "ContentSkipped" | "ContentFullyViewed"; /** @@ -59,6 +59,6 @@ type HelpCloseType = "ContentSkipped" | "ContentFullyViewed"; */ export type PingUxEvent = PingBase< "ping.sdk.ux.event", - "1.1.0", + "1.2.0", PingUxEventData >; diff --git a/packages/analytics/src/ping/ping.sdk.wrapper.product.ts b/packages/analytics/src/ping/ping.sdk.wrapper.product.ts index d1c2b106..fae8d160 100644 --- a/packages/analytics/src/ping/ping.sdk.wrapper.product.ts +++ b/packages/analytics/src/ping/ping.sdk.wrapper.product.ts @@ -1,7 +1,3 @@ -/** - * Copyright (c) 2026 Microblink Ltd. All rights reserved. - */ - /** * Copyright (c) Microblink. All rights reserved. * diff --git a/packages/blinkcard-core/CHANGELOG.md b/packages/blinkcard-core/CHANGELOG.md index 19dcfda4..0cc3eaa0 100644 --- a/packages/blinkcard-core/CHANGELOG.md +++ b/packages/blinkcard-core/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/blinkcard-core +## 3000.1.0-next + +### Minor Changes + +- Updated dependencies + - @microblink/blinkcard-wasm@3000.1.0-next + - @microblink/analytics@2.0.2 + - @microblink/blinkcard-worker@3000.1.0-next + ## 3000.0.8 ### Patch Changes diff --git a/packages/blinkcard-core/docs/README.md b/packages/blinkcard-core/docs/README.md index 0080be0d..6ae70c4c 100644 --- a/packages/blinkcard-core/docs/README.md +++ b/packages/blinkcard-core/docs/README.md @@ -20,8 +20,6 @@ ## Type Aliases -- [AnonymizationMode](type-aliases/AnonymizationMode.md) -- [AnonymizationSettings](type-aliases/AnonymizationSettings.md) - [BlinkCardCore](type-aliases/BlinkCardCore.md) - [BlinkCardInitSettings](type-aliases/BlinkCardInitSettings.md) - [BlinkCardProcessResult](type-aliases/BlinkCardProcessResult.md) @@ -34,13 +32,12 @@ - [BrowserStorageSupport](type-aliases/BrowserStorageSupport.md) - [CardAccountResult](type-aliases/CardAccountResult.md) - [CardLivenessCheckResult](type-aliases/CardLivenessCheckResult.md) -- [CardNumberAnonymizationSettings](type-aliases/CardNumberAnonymizationSettings.md) +- [CardNumberRedactionSettings](type-aliases/CardNumberRedactionSettings.md) - [CardRotation](type-aliases/CardRotation.md) - [CheckResult](type-aliases/CheckResult.md) - [CroppedImageSettings](type-aliases/CroppedImageSettings.md) - [DateResult](type-aliases/DateResult.md) - [DerivedDeviceInfo](type-aliases/DerivedDeviceInfo.md) -- [DetectionLevel](type-aliases/DetectionLevel.md) - [DetectionStatus](type-aliases/DetectionStatus.md) - [DeviceInfo](type-aliases/DeviceInfo.md) - [DeviceScreenInfo](type-aliases/DeviceScreenInfo.md) @@ -83,6 +80,8 @@ - [ProcessingStatus](type-aliases/ProcessingStatus.md) - [ProcessResultWithBuffer](type-aliases/ProcessResultWithBuffer.md) - [ProgressStatusCallback](type-aliases/ProgressStatusCallback.md) +- [RedactionMode](type-aliases/RedactionMode.md) +- [RedactionSettings](type-aliases/RedactionSettings.md) - [RemoteScanningSession](type-aliases/RemoteScanningSession.md) - [ResourceFileType](type-aliases/ResourceFileType.md) - [ResultCompleteness](type-aliases/ResultCompleteness.md) @@ -90,12 +89,12 @@ - [ScanningSide](type-aliases/ScanningSide.md) - [ScanningStatus](type-aliases/ScanningStatus.md) - [SchemaName](type-aliases/SchemaName.md) +- [SensitivityLevel](type-aliases/SensitivityLevel.md) - [ServerPermissionErrorReason](type-aliases/ServerPermissionErrorReason.md) - [ServerPermissionSubmitError](type-aliases/ServerPermissionSubmitError.md) - [SingleSideScanningResult](type-aliases/SingleSideScanningResult.md) - [StrictnessLevel](type-aliases/StrictnessLevel.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) - [WorkerScanningSession](type-aliases/WorkerScanningSession.md) @@ -104,7 +103,6 @@ - [getCrossOriginWorkerURL](variables/getCrossOriginWorkerURL.md) - [resourceFileTypes](variables/resourceFileTypes.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) ## Functions diff --git a/packages/blinkcard-core/docs/classes/AnalyticService.md b/packages/blinkcard-core/docs/classes/AnalyticService.md index 8201fd6f..7d6e65de 100644 --- a/packages/blinkcard-core/docs/classes/AnalyticService.md +++ b/packages/blinkcard-core/docs/classes/AnalyticService.md @@ -293,6 +293,16 @@ Provides a clean interface for tracking user interactions and events *** +### logInactivityTimeoutEvent() + +> **logInactivityTimeoutEvent**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logInfo() > **logInfo**(`logMessage`): `Promise`\<`void`\> @@ -329,6 +339,16 @@ Provides a clean interface for tracking user interactions and events *** +### logUnsupportedBarcodeTimeout() + +> **logUnsupportedBarcodeTimeout**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logWarning() > **logWarning**(`logMessage`): `Promise`\<`void`\> diff --git a/packages/blinkcard-core/docs/classes/BlinkCardWorker.md b/packages/blinkcard-core/docs/classes/BlinkCardWorker.md index 39388b10..06d7f2f6 100644 --- a/packages/blinkcard-core/docs/classes/BlinkCardWorker.md +++ b/packages/blinkcard-core/docs/classes/BlinkCardWorker.md @@ -64,7 +64,7 @@ set to `Video`. ###### scanningSettings? -`Partial`\<\{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<[`AnonymizationSettings`](../type-aliases/AnonymizationSettings.md), \{ `cardNumberAnonymizationSettings`: `Partial`\<[`CardNumberAnonymizationSettings`](../type-aliases/CardNumberAnonymizationSettings.md)\>; \}\>\>; `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](../type-aliases/CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](../type-aliases/ExtractionSettings.md)\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<[`LivenessSettings`](../type-aliases/LivenessSettings.md)\>; `skipImagesWithBlur`: `boolean`; `tiltDetectionLevel`: [`DetectionLevel`](../type-aliases/DetectionLevel.md); \}\> +`Partial`\<\{ `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](../type-aliases/CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](../type-aliases/ExtractionSettings.md)\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<[`LivenessSettings`](../type-aliases/LivenessSettings.md)\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<[`RedactionSettings`](../type-aliases/RedactionSettings.md), \{ `cardNumberRedactionSettings`: `Partial`\<[`CardNumberRedactionSettings`](../type-aliases/CardNumberRedactionSettings.md)\>; \}\>\>; `skipImagesWithBlur`: `boolean`; `tiltSensitivityLevel`: [`SensitivityLevel`](../type-aliases/SensitivityLevel.md); \}\> #### Returns diff --git a/packages/blinkcard-core/docs/functions/loadBlinkCardCore.md b/packages/blinkcard-core/docs/functions/loadBlinkCardCore.md index 8493db76..8580cfd3 100644 --- a/packages/blinkcard-core/docs/functions/loadBlinkCardCore.md +++ b/packages/blinkcard-core/docs/functions/loadBlinkCardCore.md @@ -67,7 +67,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"basic"` \| `"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkcard-core/docs/type-aliases/AnonymizationMode.md b/packages/blinkcard-core/docs/type-aliases/AnonymizationMode.md deleted file mode 100644 index f265939c..00000000 --- a/packages/blinkcard-core/docs/type-aliases/AnonymizationMode.md +++ /dev/null @@ -1,12 +0,0 @@ -[**@microblink/blinkcard-core**](../README.md) - -*** - -[@microblink/blinkcard-core](../README.md) / AnonymizationMode - -# Type Alias: AnonymizationMode - -> **AnonymizationMode** = `"none"` \| `"image-only"` \| `"result-fields-only"` \| `"full-result"` - -AnonymizationMode is used to define level of anonymization performed on -recognizer result. diff --git a/packages/blinkcard-core/docs/type-aliases/AnonymizationSettings.md b/packages/blinkcard-core/docs/type-aliases/AnonymizationSettings.md deleted file mode 100644 index b835ba2c..00000000 --- a/packages/blinkcard-core/docs/type-aliases/AnonymizationSettings.md +++ /dev/null @@ -1,51 +0,0 @@ -[**@microblink/blinkcard-core**](../README.md) - -*** - -[@microblink/blinkcard-core](../README.md) / AnonymizationSettings - -# Type Alias: AnonymizationSettings - -> **AnonymizationSettings** = `object` - -Holds the settings which control the anonymization of returned data. - -## Properties - -### cardholderNameAnonymizationMode - -> **cardholderNameAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of cardholder name anonymization. - -*** - -### cardNumberAnonymizationSettings - -> **cardNumberAnonymizationSettings**: [`CardNumberAnonymizationSettings`](CardNumberAnonymizationSettings.md) - -Defines the parameters of card number anonymization. - -*** - -### cardNumberPrefixAnonymizationMode - -> **cardNumberPrefixAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of card number prefix anonymization. - -*** - -### cvvAnonymizationMode - -> **cvvAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of CVV anonymization. - -*** - -### ibanAnonymizationMode - -> **ibanAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of IBAN anonymization. diff --git a/packages/blinkcard-core/docs/type-aliases/CardNumberAnonymizationSettings.md b/packages/blinkcard-core/docs/type-aliases/CardNumberAnonymizationSettings.md deleted file mode 100644 index 9f065721..00000000 --- a/packages/blinkcard-core/docs/type-aliases/CardNumberAnonymizationSettings.md +++ /dev/null @@ -1,37 +0,0 @@ -[**@microblink/blinkcard-core**](../README.md) - -*** - -[@microblink/blinkcard-core](../README.md) / CardNumberAnonymizationSettings - -# Type Alias: CardNumberAnonymizationSettings - -> **CardNumberAnonymizationSettings** = `object` - -Holds the settings which control card number anonymization. - -## Properties - -### mode - -> **mode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of card number anonymization. - -*** - -### prefixDigitsVisible - -> **prefixDigitsVisible**: `number` - -Defines how many digits at the beginning of the card number remain visible -after anonymization. - -*** - -### suffixDigitsVisible - -> **suffixDigitsVisible**: `number` - -Defines how many digits at the end of the card number remain visible after -anonymization. diff --git a/packages/blinkcard-core/docs/type-aliases/CardNumberRedactionSettings.md b/packages/blinkcard-core/docs/type-aliases/CardNumberRedactionSettings.md new file mode 100644 index 00000000..4556013d --- /dev/null +++ b/packages/blinkcard-core/docs/type-aliases/CardNumberRedactionSettings.md @@ -0,0 +1,37 @@ +[**@microblink/blinkcard-core**](../README.md) + +*** + +[@microblink/blinkcard-core](../README.md) / CardNumberRedactionSettings + +# Type Alias: CardNumberRedactionSettings + +> **CardNumberRedactionSettings** = `object` + +Holds the settings which control card number redaction. + +## Properties + +### mode + +> **mode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of card number redaction. + +*** + +### prefixDigitsVisible + +> **prefixDigitsVisible**: `number` + +Defines how many digits at the beginning of the card number remain visible +after redaction. + +*** + +### suffixDigitsVisible + +> **suffixDigitsVisible**: `number` + +Defines how many digits at the end of the card number remain visible after +redaction. diff --git a/packages/blinkcard-core/docs/type-aliases/DetectionLevel.md b/packages/blinkcard-core/docs/type-aliases/DetectionLevel.md deleted file mode 100644 index 18c9b973..00000000 --- a/packages/blinkcard-core/docs/type-aliases/DetectionLevel.md +++ /dev/null @@ -1,15 +0,0 @@ -[**@microblink/blinkcard-core**](../README.md) - -*** - -[@microblink/blinkcard-core](../README.md) / DetectionLevel - -# Type Alias: DetectionLevel - -> **DetectionLevel** = `"off"` \| `"low"` \| `"mid"` \| `"high"` - -Represents the different levels of detection sensitivity. - -This type is used to configure detection thresholds and enable or disable -detection functionality. The levels range from turning detection off -completely to setting various levels of sensitivity (Low, Mid, High). diff --git a/packages/blinkcard-core/docs/type-aliases/PartialScanningSettingsInput.md b/packages/blinkcard-core/docs/type-aliases/PartialScanningSettingsInput.md index 1b71ff09..b0be7be2 100644 --- a/packages/blinkcard-core/docs/type-aliases/PartialScanningSettingsInput.md +++ b/packages/blinkcard-core/docs/type-aliases/PartialScanningSettingsInput.md @@ -6,7 +6,7 @@ # Type Alias: PartialScanningSettingsInput -> **PartialScanningSettingsInput** = `Partial`\<`OverrideProperties`\<[`ScanningSettings`](ScanningSettings.md), \{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<[`AnonymizationSettings`](AnonymizationSettings.md), \{ `cardNumberAnonymizationSettings`: `Partial`\<[`CardNumberAnonymizationSettings`](CardNumberAnonymizationSettings.md)\>; \}\>\>; `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](ExtractionSettings.md)\>; `livenessSettings`: `Partial`\<[`LivenessSettings`](LivenessSettings.md)\>; \}\>\> +> **PartialScanningSettingsInput** = `Partial`\<`OverrideProperties`\<[`ScanningSettings`](ScanningSettings.md), \{ `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](ExtractionSettings.md)\>; `livenessSettings`: `Partial`\<[`LivenessSettings`](LivenessSettings.md)\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<[`RedactionSettings`](RedactionSettings.md), \{ `cardNumberRedactionSettings`: `Partial`\<[`CardNumberRedactionSettings`](CardNumberRedactionSettings.md)\>; \}\>\>; \}\>\> Partial scanning settings with optional nested objects. Used when passing partial settings to the Wasm module. diff --git a/packages/blinkcard-core/docs/type-aliases/PingSdkInitStart.md b/packages/blinkcard-core/docs/type-aliases/PingSdkInitStart.md index 1c76c33d..168388d3 100644 --- a/packages/blinkcard-core/docs/type-aliases/PingSdkInitStart.md +++ b/packages/blinkcard-core/docs/type-aliases/PingSdkInitStart.md @@ -6,6 +6,6 @@ # Type Alias: PingSdkInitStart -> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"1.3.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> +> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"2.0.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> Ping type for ping.sdk.init.start diff --git a/packages/blinkcard-core/docs/type-aliases/PingUxEvent.md b/packages/blinkcard-core/docs/type-aliases/PingUxEvent.md index 9e0103cb..375d36cf 100644 --- a/packages/blinkcard-core/docs/type-aliases/PingUxEvent.md +++ b/packages/blinkcard-core/docs/type-aliases/PingUxEvent.md @@ -6,6 +6,6 @@ # Type Alias: PingUxEvent -> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.1.0"`, [`PingUxEventData`](PingUxEventData.md)\> +> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.2.0"`, [`PingUxEventData`](PingUxEventData.md)\> Ping type for ping.sdk.ux.event diff --git a/packages/blinkcard-core/docs/type-aliases/RedactionMode.md b/packages/blinkcard-core/docs/type-aliases/RedactionMode.md new file mode 100644 index 00000000..87619cb3 --- /dev/null +++ b/packages/blinkcard-core/docs/type-aliases/RedactionMode.md @@ -0,0 +1,12 @@ +[**@microblink/blinkcard-core**](../README.md) + +*** + +[@microblink/blinkcard-core](../README.md) / RedactionMode + +# Type Alias: RedactionMode + +> **RedactionMode** = `"none"` \| `"image-only"` \| `"result-fields-only"` \| `"full-result"` + +RedactionMode is used to define level of redaction performed on +recognizer result. diff --git a/packages/blinkcard-core/docs/type-aliases/RedactionSettings.md b/packages/blinkcard-core/docs/type-aliases/RedactionSettings.md new file mode 100644 index 00000000..e6d3f13f --- /dev/null +++ b/packages/blinkcard-core/docs/type-aliases/RedactionSettings.md @@ -0,0 +1,51 @@ +[**@microblink/blinkcard-core**](../README.md) + +*** + +[@microblink/blinkcard-core](../README.md) / RedactionSettings + +# Type Alias: RedactionSettings + +> **RedactionSettings** = `object` + +Holds the settings which control the redaction of returned data. + +## Properties + +### cardholderNameRedactionMode + +> **cardholderNameRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of cardholder name redaction. + +*** + +### cardNumberPrefixRedactionMode + +> **cardNumberPrefixRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of card number prefix redaction. + +*** + +### cardNumberRedactionSettings + +> **cardNumberRedactionSettings**: [`CardNumberRedactionSettings`](CardNumberRedactionSettings.md) + +Defines the parameters of card number redaction. + +*** + +### cvvRedactionMode + +> **cvvRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of CVV redaction. + +*** + +### ibanRedactionMode + +> **ibanRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of IBAN redaction. diff --git a/packages/blinkcard-core/docs/type-aliases/ScanningSettings.md b/packages/blinkcard-core/docs/type-aliases/ScanningSettings.md index 04abf052..8fb0d137 100644 --- a/packages/blinkcard-core/docs/type-aliases/ScanningSettings.md +++ b/packages/blinkcard-core/docs/type-aliases/ScanningSettings.md @@ -12,22 +12,11 @@ Represents the configurable settings for scanning a card. This structure defines various parameters and policies related to the scanning process, including image quality handling, data extraction, -anonymization, and liveness detection, along with options for frame +redaction, and liveness detection, along with options for frame processing and image extraction. ## Properties -### anonymizationSettings - -> **anonymizationSettings**: [`AnonymizationSettings`](AnonymizationSettings.md) - -Represents the configurable settings for data anonymization. - -This structure defines various parameters and policies related to the -anonymization of sensitive data extracted from the payment cards. - -*** - ### croppedImageSettings > **croppedImageSettings**: [`CroppedImageSettings`](CroppedImageSettings.md) @@ -75,6 +64,17 @@ analysis. *** +### redactionSettings + +> **redactionSettings**: [`RedactionSettings`](RedactionSettings.md) + +Represents the configurable settings for data redaction. + +This structure defines various parameters and policies related to the +redaction of sensitive data extracted from the payment cards. + +*** + ### skipImagesWithBlur > **skipImagesWithBlur**: `boolean` @@ -88,12 +88,11 @@ processed, and the blur status is reported in the *** -### tiltDetectionLevel +### tiltSensitivityLevel -> **tiltDetectionLevel**: [`DetectionLevel`](DetectionLevel.md) +> **tiltSensitivityLevel**: [`SensitivityLevel`](SensitivityLevel.md) The level of allowed detected tilt of the card in the image. -Defines the severity of allowed detected tilt of the card in the image, as -defined in `DetectionLevel`. Values range from `Off` (detection turned off) -to higher levels of allowed tilt. +Defines the severity of allowed detected tilt of the card in the image, as defined in `SensitivityLevel`. +Values range from `Off` (detection turned off) to higher levels of allowed tilt. diff --git a/packages/blinkcard-core/docs/type-aliases/SensitivityLevel.md b/packages/blinkcard-core/docs/type-aliases/SensitivityLevel.md new file mode 100644 index 00000000..24f20c0b --- /dev/null +++ b/packages/blinkcard-core/docs/type-aliases/SensitivityLevel.md @@ -0,0 +1,15 @@ +[**@microblink/blinkcard-core**](../README.md) + +*** + +[@microblink/blinkcard-core](../README.md) / SensitivityLevel + +# Type Alias: SensitivityLevel + +> **SensitivityLevel** = `"off"` \| `"low"` \| `"mid"` \| `"high"` + +Represents the sensitivity levels for document quality analysis. + +This enum class is used to configure detection sensitivity thresholds and enable or +disable detection functionality. The levels range from turning detection +off completely to setting various levels of sensitivity (Low, Mid, High). diff --git a/packages/blinkcard-core/docs/type-aliases/WasmSimdVariant.md b/packages/blinkcard-core/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index 77157f05..00000000 --- a/packages/blinkcard-core/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkcard-core**](../README.md) - -*** - -[@microblink/blinkcard-core](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkcard-core/docs/variables/wasmSimdVariants.md b/packages/blinkcard-core/docs/variables/wasmSimdVariants.md deleted file mode 100644 index 9fc685d1..00000000 --- a/packages/blinkcard-core/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkcard-core**](../README.md) - -*** - -[@microblink/blinkcard-core](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkcard-core/docs/variables/wasmVariants.md b/packages/blinkcard-core/docs/variables/wasmVariants.md index 242fd69f..ff82587b 100644 --- a/packages/blinkcard-core/docs/variables/wasmVariants.md +++ b/packages/blinkcard-core/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkcard-core/package.json b/packages/blinkcard-core/package.json index 36045120..c039e4df 100644 --- a/packages/blinkcard-core/package.json +++ b/packages/blinkcard-core/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkcard-core", "description": "BlinkCard Core SDK", - "version": "3000.0.8", + "version": "3000.1.0-next", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -17,7 +17,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm prepare-publish && pnpm pack-check", + "publish-test": "pnpm prepare-publish && pnpm pack-check", "test": "vitest run", "test:watch": "vitest", "type-rollup": "api-extractor run --local", @@ -54,7 +54,7 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@microblink/repo-utils": "workspace:*", "@microblink/test-utils": "workspace:*", "@microblink/tsconfig": "workspace:*", diff --git a/packages/blinkcard-ux-manager/CHANGELOG.md b/packages/blinkcard-ux-manager/CHANGELOG.md index 26274ca0..7101f971 100644 --- a/packages/blinkcard-ux-manager/CHANGELOG.md +++ b/packages/blinkcard-ux-manager/CHANGELOG.md @@ -1,5 +1,13 @@ # @microblink/blinkcard-ux-manager +## 3000.1.0-next + +### Patch Changes + +- Fixed feedback UI localization merging so partial user string overrides preserve the default nested localized values instead of replacing whole sections. +- Updated dependencies + - @microblink/blinkcard-core@3000.1.0-next + ## 3000.0.8 ### Patch Changes diff --git a/packages/blinkcard-ux-manager/package.json b/packages/blinkcard-ux-manager/package.json index c1104adc..cbae6002 100644 --- a/packages/blinkcard-ux-manager/package.json +++ b/packages/blinkcard-ux-manager/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkcard-ux-manager", "description": "BlinkCard UX Manager provides user feedback based on the blinkcard process results.", - "version": "3000.0.8", + "version": "3000.1.0-next", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -17,7 +17,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm pack-check", + "publish-test": "pnpm pack-check", "test": "vitest run", "test:watch": "vitest", "type-rollup": "api-extractor run --local", @@ -57,7 +57,7 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@microblink/feedback-stabilizer": "workspace:^", "@microblink/repo-utils": "workspace:*", "@microblink/shared-components": "workspace:^", @@ -122,4 +122,4 @@ "Safari >= 16.4", "iOS >= 16.4" ] -} \ No newline at end of file +} diff --git a/packages/blinkcard-ux-manager/src/core/__testdata/blinkcardTestFixtures.ts b/packages/blinkcard-ux-manager/src/core/__testdata/blinkcardTestFixtures.ts index 8ca1d8e4..eb5df0a3 100644 --- a/packages/blinkcard-ux-manager/src/core/__testdata/blinkcardTestFixtures.ts +++ b/packages/blinkcard-ux-manager/src/core/__testdata/blinkcardTestFixtures.ts @@ -26,7 +26,7 @@ export type PartialProcessResult = Partial< export const defaultScanningSettings: ScanningSettings = { skipImagesWithBlur: true, - tiltDetectionLevel: "off", + tiltSensitivityLevel: "off", inputImageMargin: 0.02, extractionSettings: { extractIban: true, @@ -47,16 +47,16 @@ export const defaultScanningSettings: ScanningSettings = { screenCheckStrictnessLevel: "disabled", photocopyCheckStrictnessLevel: "disabled", }, - anonymizationSettings: { - cardNumberAnonymizationSettings: { + redactionSettings: { + cardNumberRedactionSettings: { mode: "none", prefixDigitsVisible: 0, suffixDigitsVisible: 0, }, - cardNumberPrefixAnonymizationMode: "none", - cvvAnonymizationMode: "none", - ibanAnonymizationMode: "none", - cardholderNameAnonymizationMode: "none", + cardNumberPrefixRedactionMode: "none", + cvvRedactionMode: "none", + ibanRedactionMode: "none", + cardholderNameRedactionMode: "none", }, }; @@ -140,4 +140,4 @@ export const createDeviceInfo = (userAgent = "test-agent"): DeviceInfo => ({ version: "1", }, }, -}); +}); \ No newline at end of file diff --git a/packages/blinkcard-ux-manager/src/core/blinkcard-ui-state.test.ts b/packages/blinkcard-ux-manager/src/core/blinkcard-ui-state.test.ts index 8f691397..da4db3c9 100644 --- a/packages/blinkcard-ux-manager/src/core/blinkcard-ui-state.test.ts +++ b/packages/blinkcard-ux-manager/src/core/blinkcard-ui-state.test.ts @@ -40,7 +40,7 @@ const createProcessResult = ( const defaultScanningSettings: ScanningSettings = { skipImagesWithBlur: true, - tiltDetectionLevel: "off", + tiltSensitivityLevel: "off", inputImageMargin: 0.02, extractionSettings: { extractIban: true, @@ -61,16 +61,16 @@ const defaultScanningSettings: ScanningSettings = { screenCheckStrictnessLevel: "disabled", photocopyCheckStrictnessLevel: "disabled", }, - anonymizationSettings: { - cardNumberAnonymizationSettings: { + redactionSettings: { + cardNumberRedactionSettings: { mode: "none", prefixDigitsVisible: 0, suffixDigitsVisible: 0, }, - cardNumberPrefixAnonymizationMode: "none", - cvvAnonymizationMode: "none", - ibanAnonymizationMode: "none", - cardholderNameAnonymizationMode: "none", + cardNumberPrefixRedactionMode: "none", + cvvRedactionMode: "none", + ibanRedactionMode: "none", + cardholderNameRedactionMode: "none", }, }; @@ -226,4 +226,4 @@ describe("getUiStateKey", () => { "CARD_NOT_IN_FRAME_FRONT", ); }); -}); +}); \ No newline at end of file diff --git a/packages/blinkcard-ux-manager/src/ui/LocalizationContext.test.tsx b/packages/blinkcard-ux-manager/src/ui/LocalizationContext.test.tsx new file mode 100644 index 00000000..b5c73cc5 --- /dev/null +++ b/packages/blinkcard-ux-manager/src/ui/LocalizationContext.test.tsx @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { afterEach, describe, expect, test } from "vitest"; +import { render } from "solid-js/web"; +import { type Component } from "solid-js"; +import { blinkCardUiStateMap } from "../core/blinkcard-ui-state"; + +import en from "./locales/en"; + +import { + LocalizationProvider, + PartialLocalizationStrings, +} from "./LocalizationContext"; +import { UiFeedbackOverlay } from "./UiFeedbackOverlay"; + +const TestFeedbackUi: Component<{ + localization?: PartialLocalizationStrings; +}> = (props) => ( + + + + +); + +describe("LocalizationProvider", () => { + let cleanup: (() => void) | undefined; + + afterEach(() => { + cleanup?.(); + cleanup = undefined; + document.body.replaceChildren(); + }); + + test("preserves default nested feedback messages when one string is overridden", () => { + cleanup = render( + () => ( + + ), + document.body, + ); + + expect(document.body.textContent).toContain( + "Custom front side instruction", + ); + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); + + test("preserves default nested feedback messages when nothing is overridden", () => { + cleanup = render(() => , document.body); + + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); + + test("preserves default nested feedback messages when undefined is provided", () => { + cleanup = render(() => , document.body); + + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); +}); diff --git a/packages/blinkcard-ux-manager/src/ui/LocalizationContext.tsx b/packages/blinkcard-ux-manager/src/ui/LocalizationContext.tsx index e47b0a77..bbc7ee09 100644 --- a/packages/blinkcard-ux-manager/src/ui/LocalizationContext.tsx +++ b/packages/blinkcard-ux-manager/src/ui/LocalizationContext.tsx @@ -11,6 +11,7 @@ import { import { SetStoreFunction, createStore } from "solid-js/store"; import enLocaleStrings from "./locales/en"; +import { merge } from "merge-anything"; /** * The locale record type. @@ -22,11 +23,10 @@ export type LocaleRecord = typeof enLocaleStrings; */ export type LocalizedValue = T extends Record - ? - | { - [K in keyof T]: LocalizedValue; - } - | (string & Record) + ? | { + [K in keyof T]: LocalizedValue; + } + | (string & Record) : T | (string & Record); /** @@ -69,16 +69,11 @@ const LocalizationContext = createContext<{ export const LocalizationProvider: ParentComponent<{ userStrings?: PartialLocalizationStrings; }> = (props) => { - const [localizationStore, updateLocalizationStore] = - // avoid initing with original as proxying to the original object will - // mutate the original object on store updates - createStore({} as LocalizationStrings); - const mergedStrings = (): LocalizationStrings => - ({ - ...enLocaleStrings, - ...props.userStrings, - }) as LocalizationStrings; + merge(enLocaleStrings, props.userStrings ?? {}) as LocalizationStrings; + + const [localizationStore, updateLocalizationStore] = + createStore(mergedStrings()); // update store as a side-effects of userStrings changing createEffect(() => { diff --git a/packages/blinkcard-ux-manager/src/ui/locales/sr.ts b/packages/blinkcard-ux-manager/src/ui/locales/sr.ts index 84da04e9..d58b2f24 100644 --- a/packages/blinkcard-ux-manager/src/ui/locales/sr.ts +++ b/packages/blinkcard-ux-manager/src/ui/locales/sr.ts @@ -9,10 +9,10 @@ export default { feedback_messages: { blur_detected: "Držite mirno karticu i telefon", blur_detected_desktop: "Držite mirno karticu i uređaj", - camera_angle_too_steep: "Држите картицу паралелно са телефоном", + camera_angle_too_steep: "Držite karticu paralelno sa telefonom", camera_angle_too_steep_desktop: "Držite karticu paralelno s ekranom", - card_number_scanned: "Успешно! Страна са бројем картице је скенирана", - card_scanned: "Успешно! Картица је скенирана", + card_number_scanned: "Uspešno! Strana sa brojem kartice je skenirana", + card_scanned: "Uspešno! Kartica je skenirana", document_too_close_to_edge: "Udaljite", flip_card: "Preokrenite karticu", flip_to_back_side: "Preokrenite karticu", diff --git a/packages/blinkcard-wasm/CHANGELOG.md b/packages/blinkcard-wasm/CHANGELOG.md index 9b277608..bde97a95 100644 --- a/packages/blinkcard-wasm/CHANGELOG.md +++ b/packages/blinkcard-wasm/CHANGELOG.md @@ -1,5 +1,13 @@ # @microblink/blinkcard-wasm +## 3000.1.0-next + +### Minor Changes + +- Removed the `basic` Wasm build. + - Renamed shipped Wasm build directories: `advanced` → `simd` and `advanced-threads` → `simd-threads`. +- Updated the Emscripten toolchain used to build the BlinkCard WebAssembly module to v6.x. + ## 3000.0.8 ### Patch Changes diff --git a/packages/blinkcard-wasm/README.md b/packages/blinkcard-wasm/README.md index 6e8de22b..d494ac04 100644 --- a/packages/blinkcard-wasm/README.md +++ b/packages/blinkcard-wasm/README.md @@ -11,24 +11,13 @@ This package contains the WebAssembly (Wasm) and native bindings for the BlinkCa ## Browser Support (Wasm Runtime) -This package ships three Wasm build variants (`basic`, `advanced`, and -`advanced-threads`). The runtime selects the best supported variant automatically. +This package ships two Wasm build variants (`simd` and `simd-threads`). The +runtime selects the best supported variant automatically. -### `basic` +### `simd` Requires mutable globals, reference types, bulk memory, non-trapping float-to-int -conversions, and sign-extension operators. - -- Chrome / Chromium 96 (desktop and Android) -- Edge 96 -- Opera 82 -- Firefox 79 (desktop and Android) -- Safari 15.1 (macOS) -- iOS Safari 15.1 - -### `advanced` - -Requires all `basic` features plus +conversions, sign-extension operators, and [fixed-width SIMD](https://web-platform-dx.github.io/web-features-explorer/features/wasm-simd/). - Chrome / Chromium 96 (desktop and Android) @@ -38,9 +27,9 @@ Requires all `basic` features plus - Safari 16.4 (macOS) - iOS Safari 16.4 -### `advanced-threads` +### `simd-threads` -Requires all `advanced` features plus +Requires all `simd` features plus [Wasm threads and atomics](https://caniuse.com/wasm-threads). Multithreaded Wasm also requires cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin` and @@ -50,22 +39,22 @@ also requires cross-origin isolation headers - Edge 96 - Opera 82 - Firefox 89 (desktop and Android) -- Safari (macOS): not selected (uses `advanced`) -- iOS Safari: not selected (uses `advanced`) +- Safari (macOS): not selected (uses `simd`) +- iOS Safari: not selected (uses `simd`) Safari is excluded even when it reports Wasm thread support. Emscripten -`advanced-threads` builds use pthreads that spawn workers from inside a worker, +`simd-threads` builds use pthreads that spawn workers from inside a worker, and Safari historically lacked reliable nested worker support when Wasm threads shipped in Safari 16. There are also known Safari issues with shared memory in Emscripten pthread builds ([emscripten-core/emscripten#19374](https://github.com/emscripten-core/emscripten/issues/19374)). -For these reasons the runtime falls back to the single-threaded `advanced` -variant on Safari instead of loading `advanced-threads`. +For these reasons the runtime falls back to the single-threaded `simd` +variant on Safari instead of loading `simd-threads`. -These minimums combine Emscripten 4.0.16 generated runtime defaults (see -[`src/settings.js`](https://raw.githubusercontent.com/emscripten-core/emscripten/4.0.16/src/settings.js) +These minimums combine Emscripten 6.0.2 generated runtime defaults (see +[`src/settings.js`](https://raw.githubusercontent.com/emscripten-core/emscripten/6.0.2/src/settings.js) and -[`tools/feature_matrix.py`](https://raw.githubusercontent.com/emscripten-core/emscripten/4.0.16/tools/feature_matrix.py)) +[`tools/feature_matrix.py`](https://raw.githubusercontent.com/emscripten-core/emscripten/6.0.2/tools/feature_matrix.py)) with baseline Wasm feature support from the [WebDX reference types](https://web-platform-dx.github.io/web-features-explorer/features/wasm-reference-types/), [WebDX non-trapping float-to-int](https://web-platform-dx.github.io/web-features-explorer/features/wasm-non-trapping-float-to-int/), diff --git a/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.data b/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.data deleted file mode 100644 index 7abdb179..00000000 Binary files a/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.data and /dev/null differ diff --git a/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.js b/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.js deleted file mode 100644 index 5235b1c6..00000000 --- a/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.js +++ /dev/null @@ -1,140 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var h=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,m=ba&&self.name?.startsWith("em-pthread");let ca;(ca=h).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);h.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof m&&m||a||async function(b){async function c(l,n){var q;(q=h).dataFileDownloads??(q.dataFileDownloads={});try{var p=await fetch(l)}catch(x){throw Error(`Network Error: ${l}`,{e:x});}if(!p.ok)throw Error(`${p.status}: ${p.url}`);q=[];n=Number(p.headers.get("Content-Length")??n);let u=0;h.setStatus?.("Downloading data...");for(p=p.body.getReader();;){var {done:z,value:v}=await p.read();if(z)break; -q.push(v);u+=v.length;h.dataFileDownloads[l]={loaded:u,total:n};let x=0,F=0;for(var w of Object.values(h.dataFileDownloads))x+=w.loaded,F+=w.total;h.setStatus?.(`Downloading data... (${x}/${F})`)}l=new Uint8Array(q.map(x=>x.length).reduce((x,F)=>x+F,0));w=0;for(const x of q)l.set(x,w),w+=x.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkcard",!0,!0);for(var n of b.files)l.addRunDependency(`fp ${n.filename}`);l.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.data"); -l.preloadResults??(l.preloadResults={});l.preloadResults["/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.data"]={pd:!1};k||=await g;(async function(q){if(!q)throw Error("Loading data file failed.");if(q.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");q=new Uint8Array(q);for(var p of b.files){var u=p.filename;l.FS_createDataFile(u,null,q.subarray(p.start,p.end),!0,!0,!0);l.removeRunDependency(`fp ${u}`)}l.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.data")})(k)} -"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=h.locateFile?.("BlinkCardModule.data","")??"BlinkCardModule.data",f=b.remote_package_size,g,k=h.getPreloadedPackage?.(e,f);k||(g=c(e,f));if(h.calledRun)d(h);else{let l;((l=h).preRun??(l.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkcard/Model_1118d9d674e23996f70c6416b2bf5a6ce6ef24a6ad2c92f0ddd1e198e5f05305.strop", -start:0,end:19102},{filename:"/microblink/blinkcard/Model_349432d66ef2b216155673b634f7d5c47795bed35719b954f726b5f0856740f3.strop",start:19102,end:67419},{filename:"/microblink/blinkcard/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:67419,end:336140},{filename:"/microblink/blinkcard/Model_5065f3a3bc1c2fece482ee66e9275fc198b9be239547e08b6086c59f347ca72f.strop",start:336140,end:2591295},{filename:"/microblink/blinkcard/Model_830c13896f96c1cb6d5cad725f44e6aae470f8672d640d20b3272ed4bb839699.strop", -start:2591295,end:2848318},{filename:"/microblink/blinkcard/Model_9f6734be0f5c1e4f3c6c621f4a72db8241feaf7c8705dc68a9cc07a7b634ee85.strop",start:2848318,end:2931954},{filename:"/microblink/blinkcard/Model_abb3e9795585a24a9bbd1dd41ec97daa2e1d7d42087aacd981411fd8b26bf493.strop",start:2931954,end:3264110},{filename:"/microblink/blinkcard/Model_b9263312a9b623d1a3b75b643ccdcbc36aae52c278d721443468147c50e44583.strop",start:3264110,end:3532384},{filename:"/microblink/blinkcard/Model_c99d9c4b96e424a1b5a17758060a8116912f78d14318e471e0606709227b9497.strop", -start:3532384,end:6369917},{filename:"/microblink/blinkcard/Model_cc1fab8df49d9a21de6c7b76ccf0dac40b17fcfb7073cc520eca073cbf8e33e9.strop",start:6369917,end:6373648},{filename:"/microblink/blinkcard/Model_f132d1bd7614b1274fafb8a41ec6c047b84b2a43654ae2da5ddd78a2765601c6.strop",start:6373648,end:7208473},{filename:"/microblink/blinkcard/bin-database_1.0.zzip",start:7208473,end:8578325}],remote_package_size:8578325})})(); -h.onAbort=function(a){r("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){r("Stacktrace: "+b.stack)}};h="undefined"!==typeof h?h:{};(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!h.locateFile&&(h.locateFile=function(d,e){return"BlinkCardModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),r=console.error.bind(console),ka,la,ma=!1,na;function t(){oa.buffer!=A.buffer&&pa()}var qa,ra,sa; -if(m){var ta=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.pb;if("load"===d){let e=[];self.onmessage=f=>e.push(f);sa=()=>{postMessage({pb:"loaded"});for(let f of e)a(f);self.onmessage=a};for(const f of c.Hc)if(!h[f]||h[f].proxy)h[f]=(...g)=>{postMessage({pb:"callHandler",Gc:f,uc:g})},"print"==f&&(ja=h[f]),"printErr"==f&&(r=h[f]);oa=c.fd;pa();la=c.gd;ua();va()}else if("run"===d){wa(c.lb);xa(c.lb,0,0,1,0,0);ya();za(c.lb);ta||(Aa(),ta=!0);try{Ba(c.cd,c.Ub)}catch(e){if("unwind"!= -e)throw e;}}else"setimmediate"!==c.target&&("checkMailbox"===d?ta&&Da():d&&(r(`worker: received unknown command ${d}`),r(c)))}catch(e){throw Ea(),e;}}self.onmessage=a}var A,B,C,Fa,E,H,Ga,Ha,K,Ia,Ja=!1;function pa(){var a=oa.buffer;A=new Int8Array(a);C=new Int16Array(a);B=new Uint8Array(a);Fa=new Uint16Array(a);E=new Int32Array(a);H=new Uint32Array(a);Ga=new Float32Array(a);Ha=new Float64Array(a);K=new BigInt64Array(a);Ia=new BigUint64Array(a)}var oa; -function Ka(){Ja=!0;if(m)sa();else{if(!h.noFSInit&&!La){var a,b,c;La=!0;a??=h.stdin;b??=h.stdout;c??=h.stderr;a?Ma("/dev","stdin",a):Na("/dev/tty","/dev/stdin");b?Ma("/dev","stdout",null,b):Na("/dev/tty","/dev/stdout");c?Ma("/dev","stderr",null,c):Na("/dev/tty1","/dev/stderr");Oa("/dev/stdin",0);Oa("/dev/stdout",1);Oa("/dev/stderr",1)}Pa.ua();Qa=!1}} -function Ra(a){h.onAbort?.(a);a="Aborted("+a+")";r(a);ma=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ra?.(a);throw a;}var Sa;async function Ta(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==Sa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a} -async function Ua(a,b){try{var c=await Ta(a);return await WebAssembly.instantiate(c,b)}catch(d){r(`failed to asynchronously prepare wasm: ${d}`),Ra(d)}}async function Va(a){var b=Sa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){r(`wasm streaming compile failed: ${d}`),r("falling back to ArrayBuffer instantiation")}return Ua(b,a)} -function Wa(){Ya={J:Za,R:$a,w:ab,fa:bb,ga:cb,da:db,ca:eb,x:fb,ea:gb,ja:hb,e:ib,B:jb,C:kb,ra:lb,m:mb,sa:nb,A:ob,h:pb,k:qb,g:rb,l:sb,ta:tb,q:ub,f:vb,b:wb,D:xb,$:yb,P:zb,S:Ab,L:Bb,s:Cb,_:za,ia:Db,I:Eb,d:Fb,ma:Gb,oa:Hb,j:Ib,Q:Jb,c:Kb,qa:Lb,pa:Mb,H:Nb,V:Ob,W:Pb,T:Qb,U:Rb,M:Sb,X:Tb,n:Ub,Y:Vb,o:Wb,t:Xb,ha:Yb,ka:Zb,i:$b,y:ac,O:bc,la:cc,aa:dc,ba:ec,z:fc,p:gc,v:hc,Z:ic,u:jc,na:kc,E:lc,r:mc,F:nc,G:oc,a:oa,K:pc,N:qc};return{a:Ya}} -async function ua(){function a(d,e){Pa=d.exports;rc.push(Pa.Aa);d=Pa;sc=d.va;Aa=d.wa;tc=d.xa;uc=d.ya;vc=d.za;wc=d.Ba;xa=d.Da;Ea=d.Ea;xc=d.Fa;yc=d.Ga;zc=d.Ha;Ac=d.Ia;Bc=d.Ja;Cc=d.Ka;Dc=d.La;Ec=d.Ma;Fc=d.Na;Gc=d.Oa;Hc=d.Ca;la=e;return Pa}var b=Wa();if(h.instantiateWasm)return new Promise(d=>{h.instantiateWasm(b,(e,f)=>{d(a(e,f))})});if(m){var c=new WebAssembly.Instance(la,Wa());return a(c,la)}Sa??=h.locateFile?h.locateFile?h.locateFile("BlinkCardModule.wasm",fa):fa+"BlinkCardModule.wasm":(new URL("BlinkCardModule.wasm", -import.meta.url)).href;return function(d){return a(d.instance,d.module)}(await Va(b))}class Ic{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Jc=a=>{a.terminate();a.onmessage=()=>{}},Kc=a=>{for(;0{Mc--;h.monitorRunDependencies?.(Mc);if(0==Mc&&Nc){var a=Nc;Nc=null;a()}},Pc=()=>{Mc++;h.monitorRunDependencies?.(Mc)},Vc=a=>{0==Qc.length&&(Rc(),Sc(Qc[0]));var b=Qc.pop();if(!b)return 6;Tc.push(b);Uc[a.lb]=b;b.lb=a.lb;b.postMessage({pb:"run",cd:a.bd,Ub:a.Ub,lb:a.lb},a.tc);return 0},L=0,N=(a,b,...c)=>{for(var d=2*c.length,e=Gc(),f=Fc(8*d),g=f>>3,k=0;k{na=a;if(m)throw Xc(a),"unwind";pc(a)},Qc=[],Tc=[],rc=[],Uc={}; -function Yc(){for(var a=navigator.hardwareConcurrency;a--;)Rc();Lc.push(async()=>{var b=Zc();Pc("loading-workers");await b;Oc("loading-workers")})}var $c=a=>{var b=a.lb;delete Uc[b];Qc.push(a);Tc.splice(Tc.indexOf(a),1);a.lb=0;yc(b)};function ya(){rc.forEach(a=>a())} -var Sc=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.pb;if(g.Rb&&g.Rb!=tc()){var k=Uc[g.Rb];k?k.postMessage(g,g.tc):r(`Internal error! Worker sent a message "${f}" to target pthread ${g.Rb}, but that thread no longer exists!`)}else if("checkMailbox"===f)Da();else if("spawnThread"===f)Vc(g);else if("cleanupThread"===f)ad(()=>{$c(Uc[g.dd])});else if("loaded"===f)a.loaded=!0,b(a);else if("setimmediate"===g.target)a.postMessage(g);else if("callHandler"===f)h[g.Gc](...g.uc);else f&&r(`worker sent an unknown command ${f}`)}; -a.onerror=f=>{r(`${"worker sent an error!"} ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onExit","onAbort","print","printErr"],e;for(e of d)h.propertyIsEnumerable(e)&&c.push(e);a.postMessage({pb:"load",Hc:c,fd:oa,gd:la})});async function Zc(){if(!m)return Promise.all(Qc.map(Sc))} -function Rc(){if(h.mainScriptUrlOrBlob){var a=h.mainScriptUrlOrBlob;"string"!=typeof a&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkCardModule.js",import.meta.url),{type:"module",name:"em-pthread"});Qc.push(a)}var bd=[];function wa(a){var b=(t(),H)[a+52>>2];a=(t(),H)[a+56>>2];Dc(b,b-a);Ec(b)}var cd=[],O=a=>{var b=cd[a];b||(cd[a]=b=Hc.get(a));return b},Ba=(a,b)=>{Wc=L=0;a=O(a)(b);Wc||0O(a)(b); -function dd(a,b,c,d){return m?N(2,1,a,b,c,d):$a(a,b,c,d)} -var ac=()=>!!globalThis.SharedArrayBuffer,$a=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(m&&0===e.length)return dd(a,b,c,d);a={bd:c,lb:a,Ub:d,tc:e};return m?(a.pb="spawnThread",postMessage(a,e),0):Vc(a)},fd=()=>{var a=(t(),E)[+ed>>2];ed+=4;return a},gd=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},hd=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=gd(a.split("/").filter(d=> -!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},jd=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},kd=()=>a=>a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),ld=a=>{(ld=kd())(a)},md=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b; -c="/"===c.charAt(0)}b=gd(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},nd=globalThis.TextDecoder&&new TextDecoder,od=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},pd=(a,b=0,c,d)=>{c=od(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},qd=[],rd=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},sd=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>= -g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},td=a=>{var b=Array(rd(a)+1);a=sd(a,b,0,b.length);b.length=a;return b},ud=[];function vd(a,b){ud[a]={input:[],output:[],rb:b};wd(a,xd)} -var xd={open(a){var b=ud[a.node.Eb];if(!b)throw new P(43);a.Ua=b;a.seekable=!1},close(a){a.Ua.rb.Jb(a.Ua)},Jb(a){a.Ua.rb.Jb(a.Ua)},read(a,b,c,d){if(!a.Ua||!a.Ua.rb.nc)throw new P(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=wc(65536,a);b&&(t(),B).fill(0,b,b+a);return b},Q={kb:null,qb(){return Q.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new P(63);Q.kb||(Q.kb={dir:{node:{ib:Q.Sa.ib,ob:Q.Sa.ob,Ab:Q.Sa.Ab,Mb:Q.Sa.Mb,rc:Q.Sa.rc,Sb:Q.Sa.Sb,sc:Q.Sa.sc,bc:Q.Sa.bc,Qb:Q.Sa.Qb},stream:{jb:Q.Qa.jb}}, -file:{node:{ib:Q.Sa.ib,ob:Q.Sa.ob},stream:{jb:Q.Qa.jb,read:Q.Qa.read,write:Q.Qa.write,Bb:Q.Qa.Bb,Nb:Q.Qa.Nb}},link:{node:{ib:Q.Sa.ib,ob:Q.Sa.ob,Fb:Q.Sa.Fb},stream:{}},hc:{node:{ib:Q.Sa.ib,ob:Q.Sa.ob},stream:Bd}});c=Cd(a,b,c,d);R(c.mode)?(c.Sa=Q.kb.dir.node,c.Qa=Q.kb.dir.stream,c.Ra={}):32768===(c.mode&61440)?(c.Sa=Q.kb.file.node,c.Qa=Q.kb.file.stream,c.Xa=0,c.Ra=null):40960===(c.mode&61440)?(c.Sa=Q.kb.link.node,c.Qa=Q.kb.link.stream):8192===(c.mode&61440)&&(c.Sa=Q.kb.hc.node,c.Qa=Q.kb.hc.stream); -c.tb=c.fb=c.eb=Date.now();a&&(a.Ra[b]=c,a.tb=a.fb=a.eb=c.tb);return c},qd(a){return a.Ra?a.Ra.subarray?a.Ra.subarray(0,a.Xa):new Uint8Array(a.Ra):new Uint8Array(0)},Sa:{ib(a){var b={};b.yc=8192===(a.mode&61440)?a.id:1;b.Jc=a.id;b.mode=a.mode;b.Sc=1;b.uid=0;b.Fc=0;b.Eb=a.Eb;b.size=R(a.mode)?4096:32768===(a.mode&61440)?a.Xa:40960===(a.mode&61440)?a.link.length:0;b.tb=new Date(a.tb);b.fb=new Date(a.fb);b.eb=new Date(a.eb);b.vc=4096;b.wc=Math.ceil(b.size/b.vc);return b},ob(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Xa!=b&&(0==b?(a.Ra=null,a.Xa=0):(c=a.Ra,a.Ra=new Uint8Array(b),c&&a.Ra.set(c.subarray(0,Math.min(b,a.Xa))),a.Xa=b)))},Ab(){Q.Vb||(Q.Vb=new P(44),Q.Vb.stack="");throw Q.Vb;},Mb(a,b,c,d){return Q.createNode(a,b,c,d)},rc(a,b,c){try{var d=Dd(b,c)}catch(f){}if(d){if(R(a.mode))for(var e in d.Ra)throw new P(55);Ed(d)}delete a.parent.Ra[a.name];b.Ra[c]=a;a.name=c;b.eb=b.fb=a.parent.eb=a.parent.fb=Date.now()},Sb(a, -b){delete a.Ra[b];a.eb=a.fb=Date.now()},sc(a,b){var c=Dd(a,b),d;for(d in c.Ra)throw new P(55);delete a.Ra[b];a.eb=a.fb=Date.now()},bc(a){return[".","..",...Object.keys(a.Ra)]},Qb(a,b,c){a=Q.createNode(a,b,41471,0);a.link=c;return a},Fb(a){if(40960!==(a.mode&61440))throw new P(28);return a.link}},Qa:{read(a,b,c,d,e){var f=a.node.Ra;if(e>=a.node.Xa)return 0;a=Math.min(a.node.Xa-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Ra,a.Ra=new Uint8Array(f),0b)throw new P(28);return b},Bb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new P(43);a=a.node.Ra;if(e&2||!a||a.buffer!==(t(),A).buffer){d=!0;e=Ad(b);if(!e)throw new P(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},Gd=async a=>{a=await ha(a);return new Uint8Array(a)},Hd=[],Id=async(a,b)=>{"undefined"!=typeof Browser&&Browser.rd();for(var c of Hd)if(c.canHandle(b))return c.handle(a,b);return a},Jd=null,Kd={},Ld=[],Md=1,Nd=null,La=!1,Qa=!0,Od={},P=class{name="ErrnoError";constructor(a){this.Ya=a}},Pd=class{Pb={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.Pb.flags}set flags(a){this.Pb.flags= -a}get position(){return this.Pb.position}set position(a){this.Pb.position=a}},Qd=class{Sa={};Qa={};Ob=365;Tb=146;Cb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.qb=a.qb;this.id=Md++;this.name=b;this.mode=c;this.Eb=d;this.tb=this.fb=this.eb=Date.now()}get read(){return(this.mode&this.Ob)===this.Ob}set read(a){a?this.mode|=this.Ob:this.mode&=~this.Ob}get write(){return(this.mode&this.Tb)===this.Tb}set write(a){a?this.mode|=this.Tb:this.mode&=~this.Tb}get Pc(){return R(this.mode)}get Oc(){return 8192=== -(this.mode&61440)}}; -function Rd(a,b={}){if(!a)throw new P(44);b.Wb??(b.Wb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(k=>!!k);for(var d=Jd,e="/",f=0;f>>0)%Nd.length} -function Ed(a){var b=Td(a.parent.id,a.name);if(Nd[b]===a)Nd[b]=a.wb;else for(b=Nd[b];b;){if(b.wb===a){b.wb=a.wb;break}b=b.wb}}function Dd(a,b){var c=R(a.mode)?(c=Ud(a,"x"))?c:a.Sa.Ab?0:2:54;if(c)throw new P(c);for(c=Nd[Td(a.id,b)];c;c=c.wb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Sa.Ab(a,b)}function Cd(a,b,c,d){a=new Qd(a,b,c,d);b=Td(a.parent.id,a.name);a.wb=Nd[b];return Nd[b]=a}function R(a){return 16384===(a&61440)} -function Vd(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Ud(a,b){if(Qa)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Wd(a,b){if(!R(a.mode))return 54;try{return Dd(a,b),20}catch(c){}return Ud(a,"wx")}function Xd(a){if(!a)throw new P(63);return a}function S(a){a=Ld[a];if(!a)throw new P(8);return a} -function Yd(a,b=-1){a=Object.assign(new Pd,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!Ld[b])break a;throw new P(33);}a.ub=b;return Ld[b]=a}function Zd(a,b=-1){a=Yd(a,b);a.Qa?.od?.(a);return a}function $d(a,b){var c=null?.Qa.ob,d=c?null:a;c??=a.Sa.ob;Xd(c);c(d,b)}var Bd={open(a){a.Qa=Kd[a.node.Eb].Qa;a.Qa.open?.(a)},jb(){throw new P(70);}};function wd(a,b){Kd[a]={Qa:b}} -function ae(a,b){var c="/"===b;if(c&&Jd)throw new P(10);if(!c&&b){var d=Rd(b,{Wb:!1});b=d.path;d=d.node;if(d.Cb)throw new P(10);if(!R(d.mode))throw new P(54);}b={type:a,sd:{},pc:b,Rc:[]};a=a.qb(b);a.qb=b;b.root=a;c?Jd=a:d&&(d.Cb=b,d.qb&&d.qb.Rc.push(b))}function be(a,b,c){var d=Rd(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new P(28);if("."===a||".."===a)throw new P(20);var e=Wd(d,a);if(e)throw new P(e);if(!d.Sa.Mb)throw new P(63);return d.Sa.Mb(d,a,b,c)} -function ce(a,b=438){return be(a,b&4095|32768,0)}function de(a){return be(a,16895,0)}function ee(a,b,c){"undefined"==typeof c&&(c=b,b=438);return be(a,b|8192,c)}function Na(a,b){if(!md(a))throw new P(44);var c=Rd(b,{parent:!0}).node;if(!c)throw new P(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Wd(c,b);if(d)throw new P(d);if(!c.Sa.Qb)throw new P(63);c.Sa.Qb(c,b,a)} -function fe(a){var b=Rd(a,{parent:!0}).node;if(!b)throw new P(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=Dd(b,a);a:{try{var d=Dd(b,a)}catch(f){d=f.Ya;break a}var e=Ud(b,"wx");d=e?e:R(d.mode)?31:0}if(d)throw new P(d);if(!b.Sa.Sb)throw new P(63);if(c.Cb)throw new P(10);b.Sa.Sb(b,a);Ed(c)}function ge(a,b){a=Rd(a,{Ib:!b}).node;return Xd(a.Sa.ib)(a)}function he(a,b){a="string"==typeof a?Rd(a,{Ib:!0}).node:a;$d(a,{mode:b&4095|a.mode&-4096,eb:Date.now(),nd:void 0})} -function Oa(a,b,c=438){if(""===a)throw new P(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Rd(a,{Ib:!(b&131072),Tc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new P(20);}else{if(e)throw new P(31);d=be(a,c|511,0);f=!0}if(!d)throw new P(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!R(d.mode))throw new P(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:R(d.mode)&&("r"!==Vd(b)||b&576)?31:Ud(d,Vd(b)):44))throw new P(e);if(b&512&&!f){e=d;e="string"==typeof e?Rd(e,{Ib:!0}).node:e;if(R(e.mode))throw new P(31);if(32768!==(e.mode&61440))throw new P(28);var g=Ud(e,"w");if(g)throw new P(g);$d(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Yd({node:d,path:Sd(d),flags:b,seekable:!0,position:0,Qa:d.Qa,ed:[],error:!1});e.Qa.open&&e.Qa.open(e);f&&he(d,c&511);!h.logReadFiles||b&1||a in Od||(Od[a]=1);return e} -function ie(a){if(null===a.ub)throw new P(8);a.Xb&&(a.Xb=null);try{a.Qa.close&&a.Qa.close(a)}catch(b){throw b;}finally{Ld[a.ub]=null}a.ub=null}function je(a,b,c){if(null===a.ub)throw new P(8);if(!a.seekable||!a.Qa.jb)throw new P(70);if(0!=c&&1!=c&&2!=c)throw new P(28);a.position=a.Qa.jb(a,b,c);a.ed=[]} -function ke(a,b,c,d,e,f){if(0>d||0>e)throw new P(28);if(null===a.ub)throw new P(8);if(0===(a.flags&2097155))throw new P(8);if(R(a.node.mode))throw new P(31);if(!a.Qa.write)throw new P(28);a.seekable&&a.flags&1024&&je(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new P(70);b=a.Qa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function le(a,b){a="string"==typeof a?a:Sd(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=hd(a+"/"+c);try{de(d)}catch(e){if(20!=e.Ya)throw e;}a=d}}return d}function me(a,b,c,d){a=hd(("string"==typeof a?a:Sd(a))+"/"+b);return ce(a,Fd(c,d))} -function ne(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Sd(a),g=b?hd(a+"/"+b):a);a=Fd(d,e);g=ce(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=p.length)return 0;v=Math.min(p.length-w,v);if(p.slice)for(var x=0;xthis.length-1||0>p)){var u=p%this.ic;return this.zb(p/this.ic|0)[u]}}Xc(p){this.zb=p}fc(){var p=new XMLHttpRequest;p.open("HEAD",c,!1);p.send(null);200<=p.status&&300>p.status||304===p.status||Ra("Couldn't load "+c+". Status: "+p.status);var u=Number(p.getResponseHeader("Content-length")), -z,v=(z=p.getResponseHeader("Accept-Ranges"))&&"bytes"===z;p=(z=p.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;v||(w=u);var x=this;x.Xc(F=>{var G=F*w,M=(F+1)*w-1;M=Math.min(M,u-1);if("undefined"==typeof x.Hb[F]){var y=x.Hb;G>M&&Ra("invalid range ("+G+", "+M+") or no bytes requested!");M>u-1&&Ra("only "+u+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);u!==w&&J.setRequestHeader("Range","bytes="+G+"-"+M);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||Ra("Couldn't load "+c+". Status: "+J.status);G=void 0!==J.response?new Uint8Array(J.response||[]):td(J.responseText||"");y[F]=G}"undefined"==typeof x.Hb[F]&&Ra("doXHR failed!");return x.Hb[F]});if(p||!u)w=u=1,w=u=this.zb(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.ec=u;this.dc=w;this.Zb=!0}get length(){this.Zb||this.fc();return this.ec}get ic(){this.Zb|| -this.fc();return this.dc}}if(globalThis.XMLHttpRequest){ba||Ra("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var k=new g;var l=void 0}else l=c,k=void 0;var n=me(a,b,d,e);k?n.Ra=k:l&&(n.Ra=null,n.url=l);Object.defineProperties(n,{Xa:{get:function(){return this.Ra.length}}});var q={};Object.keys(n.Qa).forEach(p=>{var u=n.Qa[p];q[p]=(...z)=>{oe(n);return u(...z)}});q.read=(p,u,z,v,w)=>{oe(n);return f(p,u,z,v,w)};q.Bb=(p,u,z)=>{oe(n); -var v=Ad(u);if(!v)throw new P(48);f(p,(t(),A),v,u,z);return{Ta:v,sb:!0}};n.Qa=q;return n}var T={},U=(a,b,c)=>a?pd((t(),B),a,b,c):"";function qe(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":S(a).path;if(0==b.length){if(!c)throw new P(44);return a}return a+"/"+b} -function re(a,b){(t(),H)[a>>2]=b.yc;(t(),H)[a+4>>2]=b.mode;(t(),H)[a+8>>2]=b.Sc;(t(),H)[a+12>>2]=b.uid;(t(),H)[a+16>>2]=b.Fc;(t(),H)[a+20>>2]=b.Eb;(t(),K)[a+24>>3]=BigInt(b.size);(t(),E)[a+32>>2]=4096;(t(),E)[a+36>>2]=b.wc;var c=b.tb.getTime(),d=b.fb.getTime(),e=b.eb.getTime();(t(),K)[a+40>>3]=BigInt(Math.floor(c/1E3));(t(),H)[a+48>>2]=c%1E3*1E6;(t(),K)[a+56>>3]=BigInt(Math.floor(d/1E3));(t(),H)[a+64>>2]=d%1E3*1E6;(t(),K)[a+72>>3]=BigInt(Math.floor(e/1E3));(t(),H)[a+80>>2]=e%1E3*1E6;(t(),K)[a+88>> -3]=BigInt(b.Jc);return 0}var ed=void 0;function ab(a,b,c){if(m)return N(3,1,a,b,c);ed=c;try{var d=S(a);switch(b){case 0:var e=fd();if(0>e)break;for(;Ld[e];)e++;return Zd(d,e).ub;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=fd(),d.flags|=e,0;case 12:return e=fd(),(t(),C)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ya}} -function bb(a,b){if(m)return N(4,1,a,b);try{var c=S(a),d=c.node,e=c.Qa.ib;a=e?c:d;e??=d.Sa.ib;Xd(e);var f=e(a);return re(b,f)}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ya}} -function cb(a,b,c){if(m)return N(5,1,a,b,c);ed=c;try{var d=S(a);switch(b){case 21509:return d.Ua?0:-59;case 21505:if(!d.Ua)return-59;if(d.Ua.rb.Lc){a=[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];var e=fd();(t(),E)[e>>2]=25856;(t(),E)[e+4>>2]=5;(t(),E)[e+8>>2]=191;(t(),E)[e+12>>2]=35387;for(var f=0;32>f;f++)(t(),A)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Ua?0:-59;case 21506:case 21507:case 21508:if(!d.Ua)return-59;if(d.Ua.rb.Mc)for(e=fd(), -t(),t(),t(),t(),a=[],f=0;32>f;f++)a.push((t(),A)[e+f+17]);return 0;case 21519:if(!d.Ua)return-59;e=fd();return(t(),E)[e>>2]=0;case 21520:return d.Ua?-28:-59;case 21537:case 21531:e=fd();if(!d.Qa.Kc)throw new P(59);return d.Qa.Kc(d,b,e);case 21523:if(!d.Ua)return-59;d.Ua.rb.Nc&&(f=[24,80],e=fd(),(t(),C)[e>>1]=f[0],(t(),C)[e+2>>1]=f[1]);return 0;case 21524:return d.Ua?0:-59;case 21515:return d.Ua?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ya}} -function db(a,b){if(m)return N(6,1,a,b);try{return a=U(a),re(b,ge(a,!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ya}}function eb(a,b,c,d){if(m)return N(7,1,a,b,c,d);try{b=U(b);var e=d&256;b=qe(a,b,d&4096);return re(c,e?ge(b,!0):ge(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ya}} -function fb(a,b,c,d){if(m)return N(8,1,a,b,c,d);ed=d;try{b=U(b);b=qe(a,b);var e=d?fd():0;return Oa(b,c,e).ub}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ya}}function gb(a,b){if(m)return N(9,1,a,b);try{return a=U(a),re(b,ge(a))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ya}}var hb=()=>Ra(""),se={},te=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function ue(a){return this.Za((t(),H)[a>>2])} -var ve={},we={},xe={},ye=class extends Error{constructor(a){super(a);this.name="InternalError"}},ze=(a,b,c)=>{function d(k){k=c(k);if(k.length!==a.length)throw new ye("Mismatched type converter count");for(var l=0;lxe[k]=b);var e=Array(b.length),f=[],g=0;b.forEach((k,l)=>{we.hasOwnProperty(k)?e[l]=we[k]:(f.push(k),ve.hasOwnProperty(k)||(ve[k]=[]),ve[k].push(()=>{e[l]=we[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},ib=a=>{var b=se[a];delete se[a];var c= -b.ac,d=b.mb,e=b.lc,f=e.map(g=>g.Ec).concat(e.map(g=>g.Zc));ze([a],f,g=>{var k={};e.forEach((l,n)=>{var q=g[n],p=l.zb,u=l.Dc,z=g[n+e.length],v=l.Yc,w=l.$c;k[l.Ac]={read:x=>q.Za(p(u,x)),write:(x,F)=>{var G=[];v(w,x,z.bb(G,F));te(G)},optional:g[n].optional}});return[{name:b.name,Za:l=>{var n={},q;for(q in k)n[q]=k[q].read(l);d(l);return n},bb:(l,n)=>{for(var q in k)if(!(q in n||k[q].optional))throw new TypeError(`Missing field: "${q}"`);var p=c();for(q in k)k[q].write(p,n[q]);null!==l&&l.push(d,p);return p}, -nb:ue,hb:d}]})},W=a=>{for(var b="";;){var c=(t(),B)[a++];if(!c)return b;b+=String.fromCharCode(c)}},X=class extends Error{constructor(a){super(a);this.name="BindingError"}};function Ae(a,b,c={}){var d=b.name;if(!a)throw new X(`type "${d}" must have a positive integer typeid pointer`);if(we.hasOwnProperty(a)){if(c.Ic)return;throw new X(`Cannot register type '${d}' twice`);}we[a]=b;delete xe[a];ve.hasOwnProperty(a)&&(b=ve[a],delete ve[a],b.forEach(e=>e()))}function V(a,b,c={}){return Ae(a,b,c)} -var Be=(a,b,c)=>{switch(b){case 1:return c?d=>(t(),A)[d]:d=>(t(),B)[d];case 2:return c?d=>(t(),C)[d>>1]:d=>(t(),Fa)[d>>1];case 4:return c?d=>(t(),E)[d>>2]:d=>(t(),H)[d>>2];case 8:return c?d=>(t(),K)[d>>3]:d=>(t(),Ia)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=(a,b,c,d,e)=>{b=W(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=k=>BigInt.asUintN(g,k);e=f(e)}V(a,{name:b,Za:f,bb:(g,k)=>{"number"==typeof k&&(k=BigInt(k));return k},nb:Be(b,c,!d),hb:null})},kb=(a,b,c,d)=>{b=W(b); -V(a,{name:b,Za:function(e){return!!e},bb:function(e,f){return f?c:d},nb:function(e){return this.Za((t(),B)[e])},hb:null})},Ce=a=>{throw new X(a.Pa.Wa.Va.name+" instance already deleted");},De=!1,Ee=()=>{},Fe=a=>{if(!globalThis.FinalizationRegistry)return Fe=b=>b,a;De=new FinalizationRegistry(b=>{b=b.Pa;--b.count.value;0===b.count.value&&(b.ab?b.gb.mb(b.ab):b.Wa.Va.mb(b.Ta))});Fe=b=>{var c=b.Pa;c.ab&&De.register(b,{Pa:c},b);return b};Ee=b=>{De.unregister(b)};return Fe(a)},Ge=[];function He(){} -var Ie=(a,b)=>Object.defineProperty(b,"name",{value:a}),Je={},Ke=(a,b,c)=>{if(void 0===a[b].$a){var d=a[b];a[b]=function(...e){if(!a[b].$a.hasOwnProperty(e.length))throw new X(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].$a})!`);return a[b].$a[e.length].apply(this,e)};a[b].$a=[];a[b].$a[d.xb]=d}},Le=(a,b,c)=>{if(h.hasOwnProperty(a)){if(void 0===c||void 0!==h[a].$a&&void 0!==h[a].$a[c])throw new X(`Cannot register public name '${a}' twice`);Ke(h, -a,a);if(h[a].$a.hasOwnProperty(c))throw new X(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);h[a].$a[c]=b}else h[a]=b,h[a].xb=c},Me=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Ne(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.vb=c;this.mb=d;this.cb=e;this.Bc=f;this.Gb=g;this.zc=k;this.Vc=[]} -var Oe=(a,b,c)=>{for(;b!==c;){if(!b.Gb)throw new X(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Gb(a);b=b.cb}return a},Pe=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Qe(a,b){if(null===b){if(this.Yb)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.Pa)throw new X(`Cannot pass "${Pe(b)}" as a ${this.name}`);if(!b.Pa.Ta)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);return Oe(b.Pa.Ta,b.Pa.Wa.Va,this.Va)} -function Re(a,b){if(null===b){if(this.Yb)throw new X(`null is not a valid ${this.name}`);if(this.Lb){var c=this.ac();null!==a&&a.push(this.mb,c);return c}return 0}if(!b||!b.Pa)throw new X(`Cannot pass "${Pe(b)}" as a ${this.name}`);if(!b.Pa.Ta)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Kb&&b.Pa.Wa.Kb)throw new X(`Cannot convert argument of type ${b.Pa.gb?b.Pa.gb.name:b.Pa.Wa.name} to parameter type ${this.name}`);c=Oe(b.Pa.Ta,b.Pa.Wa.Va,this.Va);if(this.Lb){if(void 0=== -b.Pa.ab)throw new X("Passing raw pointer to smart pointer is illegal");switch(this.ad){case 0:if(b.Pa.gb===this)c=b.Pa.ab;else throw new X(`Cannot convert argument of type ${b.Pa.gb?b.Pa.gb.name:b.Pa.Wa.name} to parameter type ${this.name}`);break;case 1:c=b.Pa.ab;break;case 2:if(b.Pa.gb===this)c=b.Pa.ab;else{var d=b.clone();c=this.Wc(c,Se(()=>d["delete"]()));null!==a&&a.push(this.mb,c)}break;default:throw new X("Unsupporting sharing policy");}}return c} -function Te(a,b){if(null===b){if(this.Yb)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.Pa)throw new X(`Cannot pass "${Pe(b)}" as a ${this.name}`);if(!b.Pa.Ta)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Pa.Wa.Kb)throw new X(`Cannot convert argument of type ${b.Pa.Wa.name} to parameter type ${this.name}`);return Oe(b.Pa.Ta,b.Pa.Wa.Va,this.Va)} -var Ue=(a,b,c)=>{if(b===c)return a;if(void 0===c.cb)return null;a=Ue(a,b,c.cb);return null===a?null:c.zc(a)},Ve={},We=(a,b)=>{if(void 0===b)throw new X("ptr should not be undefined");for(;a.cb;)b=a.Gb(b),a=a.cb;return Ve[b]},Xe=(a,b)=>{if(!b.Wa||!b.Ta)throw new ye("makeClassHandle requires ptr and ptrType");if(!!b.gb!==!!b.ab)throw new ye("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Fe(Object.create(a,{Pa:{value:b,writable:!0}}))}; -function Ye(a,b,c,d,e,f,g,k,l,n,q){this.name=a;this.Va=b;this.Yb=c;this.Kb=d;this.Lb=e;this.Uc=f;this.ad=g;this.qc=k;this.ac=l;this.Wc=n;this.mb=q;e||void 0!==b.cb?this.bb=Re:(this.bb=d?Qe:Te,this.hb=null)}var Ze=(a,b,c)=>{if(!h.hasOwnProperty(a))throw new ye("Replacing nonexistent public symbol");void 0!==h[a].$a&&void 0!==c?h[a].$a[c]=b:(h[a]=b,h[a].xb=c)},$e=(a,b)=>{a=W(a);var c=O(b);if("function"!=typeof c)throw new X(`unknown function pointer with signature ${a}: ${b}`);return c}; -class af extends Error{} -var bf=a=>{a=sc(a);var b=W(a);vc(a);return b},cf=(a,b)=>{function c(f){e[f]||we[f]||(xe[f]?xe[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new af(`${a}: `+d.map(bf).join([", "]));},lb=(a,b,c,d,e,f,g,k,l,n,q,p,u)=>{q=W(q);f=$e(e,f);k&&=$e(g,k);n&&=$e(l,n);u=$e(p,u);var z=Me(q);Le(z,function(){cf(`Cannot construct ${q} due to unbound types`,[d])});ze([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var w=v.Va;var x=w.vb}else x=He.prototype;v=Ie(q,function(...y){if(Object.getPrototypeOf(this)!==F)throw new X(`Use 'new' to construct ${q}`); -if(void 0===G.jc)throw new X(`${q} has no accessible constructor`);var J=G.jc[y.length];if(void 0===J)throw new X(`Tried to invoke ctor of ${q} with invalid number of parameters (${y.length}) - expected (${Object.keys(G.jc).toString()}) parameters instead!`);return J.apply(this,y)});var F=Object.create(x,{constructor:{value:v}});v.prototype=F;var G=new Ne(q,v,F,u,w,f,k,n);if(G.cb){var M;(M=G.cb).cc??(M.cc=[]);G.cb.cc.push(G)}w=new Ye(q,G,!0,!1,!1);M=new Ye(q+"*",G,!1,!1,!1);x=new Ye(q+" const*",G, -!1,!0,!1);Je[a]={pointerType:M,xc:x};Ze(z,v);return[w,M,x]})};function df(a){for(var b=1;bf)throw new X("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=df(b),l=!b[0].Qc,n=f-2,q=Array(n),p=[],u=[];return Ie(a,function(...z){u.length=0;p.length=g?2:1;p[0]=e;if(g){var v=b[1].bb(u,this);p[1]=v}for(var w=0;w{for(var c=[],d=0;d>2]);return c},gf=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},mb=(a,b,c,d,e,f,g,k)=>{var l=ff(c,d);b=W(b);b=gf(b);f=$e(e,f);ze([],[a],n=>{function q(){cf(`Cannot call ${p} due to unbound types`,l)}n=n[0];var p=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);k&&n.Va.Vc.push(b);var u=n.Va.vb,z=u[b];void 0===z||void 0===z.$a&&z.className!==n.name&&z.xb===c-2?(q.xb=c-2,q.className=n.name,u[b]=q):(Ke(u, -b,p),u[b].$a[c-2]=q);ze([],l,v=>{v=ef(p,v,n,f,g);void 0===u[b].$a?(v.xb=c-2,u[b]=v):u[b].$a[c-2]=v;return[]});return[]})},hf=[],jf=[0,1,,1,null,1,!0,1,!1,1],Gb=a=>{9{if(!a)throw new X(`Cannot use deleted val. handle = ${a}`);return jf[a]},Se=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=hf.pop()||jf.length;jf[b]=a;jf[b+1]=1;return b}},lf={name:"emscripten::val",Za:a=>{var b=kf(a);Gb(a);return b}, -bb:(a,b)=>Se(b),nb:ue,hb:null},nb=a=>V(a,lf),mf=(a,b)=>{switch(b){case 4:return function(c){return this.Za((t(),Ga)[c>>2])};case 8:return function(c){return this.Za((t(),Ha)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ob=(a,b,c)=>{b=W(b);V(a,{name:b,Za:d=>d,bb:(d,e)=>e,nb:mf(b,c),hb:null})},pb=(a,b,c,d,e,f)=>{var g=ff(b,c);a=W(a);a=gf(a);e=$e(d,e);Le(a,function(){cf(`Cannot call ${a} due to unbound types`,g)},b-1);ze([],g,k=>{Ze(a,ef(a,[k[0],null].concat(k.slice(1)), -null,e,f),b-1);return[]})},qb=(a,b,c,d,e)=>{b=W(b);let f=k=>k;if(0===d){var g=32-8*c;f=k=>k<>>g;e=f(e)}V(a,{name:b,Za:f,bb:(k,l)=>l,nb:Be(b,c,0!==d),hb:null})},rb=(a,b,c)=>{function d(f){var g=(t(),H)[f>>2];f=(t(),H)[f+4>>2];return new e((t(),A).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=W(c);V(a,{name:c,Za:d,nb:d},{Ic:!0})},nf=Object.assign({optional:!0},lf),sb=a=>{V(a,nf)},Y=(a,b,c)=>sd(a, -(t(),B),b,c),tb=(a,b)=>{b=W(b);V(a,{name:b,Za(c){var d=(t(),H)[c>>2];d=U(c+4,d,!0);vc(c);return d},bb(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new X("Cannot pass non-string to std::string");var f=e?rd(d):d.length;var g=uc(4+f+1),k=g+4;(t(),H)[g>>2]=f;e?Y(d,k,f+1):(t(),B).set(d,k);null!==c&&c.push(vc,g);return g},nb:ue,hb(c){vc(c)}})},of=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,pf=(a, -b,c)=>{a>>=1;b=od((t(),Fa),a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}(t(),C)[b>>1]=0;return b-d},rf=a=>2*a.length,sf=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(t(),H)[a+e];if(!f&&!c)break; -d+=String.fromCodePoint(f)}return d},tf=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}(t(),E)[b>>2]=0;return b-d},uf=a=>{for(var b=0,c=0;c{c=W(c);if(2===b){var d=pf;var e=qf;var f=rf}else d=sf,e=tf,f=uf;V(a,{name:c,Za:g=>{var k=(t(),H)[g>>2];k=d(g+4,k*b,!0);vc(g);return k},bb:(g,k)=>{if("string"!=typeof k)throw new X(`Cannot pass non-string to C++ string type ${c}`); -var l=f(k),n=uc(4+l+b);(t(),H)[n>>2]=l/b;e(k,n+4,l+b);null!==g&&g.push(vc,n);return n},nb:ue,hb(g){vc(g)}})},vb=(a,b,c,d,e,f)=>{se[a]={name:W(b),ac:$e(c,d),mb:$e(e,f),lc:[]}},wb=(a,b,c,d,e,f,g,k,l,n)=>{se[a].lc.push({Ac:W(b),Ec:c,zb:$e(d,e),Dc:f,Zc:g,Yc:$e(k,l),$c:n})},xb=(a,b)=>{b=W(b);V(a,{Qc:!0,name:b,Za:()=>{},bb:()=>{}})},yb=a=>{xa(a,!ba,1,!aa,5242880,!1);ya()},vf=a=>{if(!(a instanceof Ic||"unwind"==a))throw a;},ad=a=>{if(!ma)try{if(a(),!(Wc||0{Atomics.waitAsync&&(Atomics.waitAsync((t(),E),a>>2,a).value.then(Da),a+=128,Atomics.store((t(),E),a>>2,1))},Da=()=>ad(()=>{var a=tc();a&&(za(a),Bc())}),zb=(a,b)=>{a==b?setTimeout(Da):m?postMessage({Rb:a,pb:"checkMailbox"}):(a=Uc[a])&&a.postMessage({pb:"checkMailbox"})},wf=[],Ab=(a,b,c,d,e)=>{d/=2;wf.length=d;c=e>>3;for(e=0;e{Wc=!1;L=0},Cb=a=>{m?postMessage({pb:"cleanupThread",dd:a}):$c(Uc[a])}, -Db=()=>{},Eb=()=>{throw Infinity;},zf=[],Af=a=>{var b=zf.length;zf.push(a);return b},Bf=(a,b)=>{for(var c=Array(a),d=0;d>2],g=we[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${bf(f)}`,new X(a);c[e]=g}return c},Cf={},Df=a=>{var b=Cf[a];return void 0===b?W(a):b},Fb=(a,b,c)=>{var [d,...e]=Bf(a,b),f=d.bb.bind(d),g=e.map(l=>l.nb.bind(l));a--;var k=Array(a);b=`methodCaller<(${e.map(l=>l.name)}) => ${d.name}>`;return Af(Ie(b,(l,n,q,p)=>{for(var u=0,z=0;z< -a;++z)k[z]=g[z](p+u),u+=8;switch(c){case 0:var v=kf(l).apply(null,k);break;case 2:v=Reflect.construct(kf(l),k);break;case 3:v=k[0];break;case 1:v=kf(l)[Df(n)](...k)}l=[];v=f(l,v);l.length&&((t(),H)[q>>2]=Se(l));return v}))},Hb=a=>{if(!a)return Se(globalThis);a=Df(a);return Se(globalThis[a])},Ib=(a,b)=>{a=kf(a);b=kf(b);return Se(a[b])},Jb=a=>{9zf[a](b,c,d,e),Lb=()=>Se([]),Mb=a=>Se(Df(a)),Nb=a=>{var b=kf(a);te(b);Gb(a)},Ef=a=>0===a%4&&(0!==a%100||0===a%400),Ff=[0,31, -60,91,121,152,182,213,244,274,305,335],Gf=[0,31,59,90,120,151,181,212,243,273,304,334]; -function Ob(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();(t(),E)[b+4>>2]=a.getMinutes();(t(),E)[b+8>>2]=a.getHours();(t(),E)[b+12>>2]=a.getDate();(t(),E)[b+16>>2]=a.getMonth();(t(),E)[b+20>>2]=a.getFullYear()-1900;(t(),E)[b+24>>2]=a.getDay();var c=(Ef(a.getFullYear())?Ff:Gf)[a.getMonth()]+a.getDate()-1|0;(t(),E)[b+28>>2]=c;(t(),E)[b+36>>2]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(t(),E)[b+32>>2]=a} -function Pb(a){var b=new Date((t(),E)[a+20>>2]+1900,(t(),E)[a+16>>2],(t(),E)[a+12>>2],(t(),E)[a+8>>2],(t(),E)[a+4>>2],(t(),E)[a>>2],0),c=(t(),E)[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?(t(),E)[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();c=(Ef(b.getFullYear())?Ff:Gf)[b.getMonth()]+b.getDate()-1|0; -(t(),E)[a+28>>2]=c;(t(),E)[a>>2]=b.getSeconds();(t(),E)[a+4>>2]=b.getMinutes();(t(),E)[a+8>>2]=b.getHours();(t(),E)[a+12>>2]=b.getDate();(t(),E)[a+16>>2]=b.getMonth();(t(),E)[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)} -function Qb(a,b,c,d,e,f,g){if(m)return N(10,1,a,b,c,d,e,f,g);e=-9007199254740992>e||9007199254740992>2]=l.sb;(t(),H)[g>>2]=n;return 0}catch(q){if("undefined"==typeof T||"ErrnoError"!==q.name)throw q;return-q.Ya}} -function Rb(a,b,c,d,e,f){if(m)return N(11,1,a,b,c,d,e,f);f=-9007199254740992>f||9007199254740992performance.timeOrigin+performance.now(); -function Sb(a,b){if(m)return N(12,1,a,b);Hf[a]&&(clearTimeout(Hf[a].id),delete Hf[a]);if(!b)return 0;var c=setTimeout(()=>{delete Hf[a];ad(()=>Ac(a,performance.timeOrigin+performance.now()))},b);Hf[a]={id:c,td:b};return 0} -var Tb=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(t(),H)[a>>2]=60*g;(t(),E)[b>>2]=Number(f!=e);b=k=>{var l=Math.abs(k);return`UTC${0<=k?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;if(0===a)a=Date.now();else if(If)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(1E6*a);(t(),K)[c>>3]=BigInt(a);return 0}var Jf=[],Wb=(a,b,c)=>{Jf.length=0;for(var d;d=(t(),B)[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;Jf.push(112==d?(t(),H)[c>>2]:106==d?(t(),K)[c>>3]:105==d?(t(),E)[c>>2]:(t(),Ha)[c>>3]);c+=e?8:4}return xf[a](...Jf)},Xb=()=>{},Yb=()=>{L+=1;throw"unwind";}; -function Zb(a){if(Kf.has(a)){var b=Kf.get(a),c=Kf;c.sb[a]=void 0;c.mc.push(a);0b.readyState&&b.abort()}}var bc=a=>{var b=(t(),B).length;a>>>=0;if(a<=b||2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1};function Lf(a){var b=Kf,c=b.mc.pop()||b.sb.length;b.sb[c]=a;return c} -class Mf{sb=[void 0];mc=[];get(a){return this.sb[a]}has(a){return void 0!==this.sb[a]}}async function Nf(){return new Promise((a,b)=>{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Kf,Of; -function Pf(a,b,c,d,e){function f(){var I=0,D=0;y.response&&F&&0===(t(),H)[a+12>>2]&&(D=y.response.byteLength);0>2]=I;Z(a+16,D);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);(t(),C)[a+40>>1]=y.readyState;(t(),C)[a+42>>1]=y.status;y.statusText&&Y(y.statusText,a+44,64);M&&(I=Qf(y.responseURL),(t(),H)[a+200>>2]=I)}var g=(t(),H)[a+8>>2];if(g){var k=U(g),l=a+108,n=U(l+0);n||="GET";var q=(t(),H)[l+56>>2],p=(t(),H)[l+68>> -2],u=(t(),H)[l+72>>2];g=(t(),H)[l+76>>2];var z=(t(),H)[l+80>>2],v=(t(),H)[l+84>>2],w=(t(),H)[l+88>>2],x=(t(),H)[l+52>>2],F=!!(x&1),G=!!(x&2),M=!!(x&64);p=p?U(p):void 0;u=u?U(u):void 0;var y=new XMLHttpRequest;y.withCredentials=!!(t(),B)[l+60];y.open(n,k,!M,p,u);M||(y.timeout=q);y.ud=k;y.responseType="arraybuffer";z&&(k=U(z),y.overrideMimeType(k));if(g)for(;;){l=(t(),H)[g>>2];if(!l)break;k=(t(),H)[g+4>>2];if(!k)break;g+=8;l=U(l);k=U(k);y.setRequestHeader(l,k)}var J=Lf(y);(t(),H)[a>>2]=J;g=v&&w?(t(), -B).slice(v,v+w):null;y.onload=I=>{Kf.has(J)&&(f(),200<=y.status&&300>y.status?b(a,y,I):c(a,I))};y.onerror=I=>{Kf.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Kf.has(J)&&c(a,I)};y.onprogress=I=>{if(Kf.has(J)){var D=F&&G&&y.response?y.response.byteLength:0,Ca=0;0>2]=Ca;Z(a+16,D);Z(a+24,I.loaded-D);Z(a+32,I.total);(t(),C)[a+40>>1]=y.readyState;D=y.status;3<=y.readyState&&0===y.status&&0>1]=D;y.statusText&& -Y(y.statusText,a+44,64);d(a,I);vc(Ca)}};y.onreadystatechange=I=>{if(Kf.has(J)){(t(),C)[a+40>>1]=y.readyState;2<=y.readyState&&((t(),C)[a+42>>1]=y.status);if(!M&&2===y.readyState&&0>2]=D}e(a,I)}else--L};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{(t(),H)[a>>2]=b;var c=(t(),H)[a>>2];(t(),H)[a+4>>2]=(b-c)/4294967296},Qf=a=>{var b=rd(a)+1,c=uc(b);c&&Y(a,c,b);return c}; -function Rf(a,b,c,d){var e=Of;if(e){var f=a+108;(f=(t(),H)[f+64>>2])||(f=(t(),H)[a+8>>2]);var g=U(f);try{var k=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);k.onsuccess=()=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);c(a,0,g)};k.onerror=l=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=413;Y("Payload Too Large",a+44,64);d(a,0,l)}}catch(l){d(a,0,l)}}else d(a,0,"IndexedDB not available!")} -function Sf(a,b,c){var d=Of;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var k=g.byteLength||g.length,l=uc(k);(t(),B).set(new Uint8Array(g),l);(t(),H)[a+12>>2]=l;Z(a+16,k);Z(a+24,0);Z(a+32,k);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)}else(t(),C)[a+40>>1]=4,(t(),C)[a+42>>1]=404,Y("Not Found",a+44,64),c(a,0,"no data")};f.onerror= -g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Tf(a,b,c){var d=Of;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;(t(),H)[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)};f.onerror=g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function cc(a,b,c,d,e){function f(D){u?D():ad(D)}L+=1;var g=a+108,k=(t(),H)[g+36>>2],l=(t(),H)[g+40>>2],n=(t(),H)[g+44>>2],q=(t(),H)[g+48>>2],p=(t(),H)[g+52>>2],u=!!(p&64),z=D=>{--L;f(()=>{k?O(k)(D):b?.(D)})},v=D=>{f(()=>{n?O(n)(D):d?.(D)})},w=D=>{--L;f(()=>{l?O(l)(D):c?.(D)})},x=D=>{f(()=>{q?O(q)(D):e?.(D)})},F=D=>{Pf(D,z,w,v,x)},G=(D,Ca)=>{Rf(D,Ca.response,Xa=>{--L;f(()=>{k?O(k)(Xa):b?.(Xa)})},Xa=>{--L;f(()=>{k?O(k)(Xa):b?.(Xa)})})},M=D=>{Pf(D,G,w,v,x)},y=U(g+0),J=!!(p&16),I=!!(p&4);p=!!(p&32); -if("EM_IDB_STORE"===y)F=(t(),H)[g+84>>2],g=(t(),H)[g+88>>2],Rf(a,(t(),B).slice(F,F+g),z,w);else if("EM_IDB_DELETE"===y)Tf(a,z,w);else if(J){if(p)return 0;Pf(a,I?G:z,w,v,x)}else Sf(a,z,p?w:I?M:F);return a} -var Uf={},Wf=()=>{if(!Vf){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Uf)void 0===Uf[b]?delete a[b]:a[b]=Uf[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Vf=c}return Vf},Vf;function dc(a,b){if(m)return N(13,1,a,b);var c=0,d=0,e;for(e of Wf()){var f=b+c;(t(),H)[a+d>>2]=f;c+=Y(e,f,Infinity)+1;d+=4}return 0} -function ec(a,b){if(m)return N(14,1,a,b);var c=Wf();(t(),H)[a>>2]=c.length;a=0;for(var d of c)a+=rd(d)+1;(t(),H)[b>>2]=a;return 0}function gc(a){if(m)return N(15,1,a);try{var b=S(a);ie(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ya}} -function hc(a,b,c,d){if(m)return N(16,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var n=e,q=(t(),A),p=k,u=l,z=f;if(0>u||0>z)throw new P(28);if(null===n.ub)throw new P(8);if(1===(n.flags&2097155))throw new P(8);if(R(n.node.mode))throw new P(31);if(!n.Qa.read)throw new P(28);var v="undefined"!=typeof z;if(!v)z=n.position;else if(!n.seekable)throw new P(70);var w=n.Qa.read(n,q,p,u,z);v||(n.position+=w);var x=w;if(0>x){var F=-1;break a}b+=x;if(x< -l)break;"undefined"!=typeof f&&(f+=x)}F=b}(t(),H)[d>>2]=F;return 0}catch(G){if("undefined"==typeof T||"ErrnoError"!==G.name)throw G;return G.Ya}}function ic(a,b,c,d){if(m)return N(17,1,a,b,c,d);b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.Xb&&0===b&&0===c&&(e.Xb=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.Ya}} -function jc(a,b,c,d){if(m)return N(18,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var n=ke(e,(t(),A),k,l,f);if(0>n){var q=-1;break a}b+=n;if(n>2]=q;return 0}catch(p){if("undefined"==typeof T||"ErrnoError"!==p.name)throw p;return p.Ya}}function qc(a,b){try{return ld((t(),B).subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ya}}m||Yc();Nd=Array(4096); -ae(Q,"/");de("/tmp");de("/home");de("/home/web_user");(function(){de("/dev");wd(259,{read:()=>0,write:(d,e,f,g)=>g,jb:()=>0});ee("/dev/null",259);vd(1280,yd);vd(1536,zd);ee("/dev/tty",1280);ee("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(ld(a),b=a.byteLength);return a[--b]};Ma("/dev","random",c);Ma("/dev","urandom",c);de("/dev/shm");de("/dev/shm/tmp")})(); -(function(){de("/proc");var a=de("/proc/self");de("/proc/self/fd");ae({qb(){var b=Cd(a,"fd",16895,73);b.Qa={jb:Q.Qa.jb};b.Sa={Ab(c,d){c=+d;var e=S(c);c={parent:null,qb:{pc:"fake"},Sa:{Fb:()=>e.path},id:c+1};return c.parent=c},bc(){return Array.from(Ld.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=He.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof He&&c instanceof He))return!1;var d=this.Pa.Wa.Va,e=this.Pa.Ta;c.Pa=c.Pa;var f=c.Pa.Wa.Va;for(c=c.Pa.Ta;d.cb;)e=d.Gb(e),d=d.cb;for(;f.cb;)c=f.Gb(c),f=f.cb;return d===f&&e===c},clone:function(){this.Pa.Ta||Ce(this);if(this.Pa.Db)return this.Pa.count.value+=1,this;var c=Fe,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.Pa;c=c(e.call(d,f,{Pa:{value:{count:g.count,yb:g.yb,Db:g.Db,Ta:g.Ta,Wa:g.Wa,ab:g.ab,gb:g.gb}}})); -c.Pa.count.value+=1;c.Pa.yb=!1;return c},["delete"](){this.Pa.Ta||Ce(this);if(this.Pa.yb&&!this.Pa.Db)throw new X("Object already scheduled for deletion");Ee(this);var c=this.Pa;--c.count.value;0===c.count.value&&(c.ab?c.gb.mb(c.ab):c.Wa.Va.mb(c.Ta));this.Pa.Db||(this.Pa.ab=void 0,this.Pa.Ta=void 0)},isDeleted:function(){return!this.Pa.Ta},deleteLater:function(){this.Pa.Ta||Ce(this);if(this.Pa.yb&&!this.Pa.Db)throw new X("Object already scheduled for deletion");Ge.push(this);this.Pa.yb=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Ye.prototype,{Cc(a){this.qc&&(a=this.qc(a));return a},kc(a){this.mb?.(a)},nb:ue,Za:function(a){function b(){return this.Lb?Xe(this.Va.vb,{Wa:this.Uc,Ta:c,gb:this,ab:a}):Xe(this.Va.vb,{Wa:this,Ta:a})}var c=this.Cc(a);if(!c)return this.kc(a),null;var d=We(this.Va,c);if(void 0!==d){if(0===d.Pa.count.value)return d.Pa.Ta=c,d.Pa.ab=a,d.clone();d=d.clone();this.kc(a);return d}d=this.Va.Bc(c);d=Je[d];if(!d)return b.call(this);d=this.Kb?d.xc:d.pointerType;var e=Ue(c,this.Va,d.Va);return null=== -e?b.call(this):this.Lb?Xe(d.Va.vb,{Wa:d,Ta:e,gb:this,ab:a}):Xe(d.Va.vb,{Wa:d,Ta:e})}});(async function(){Kf=new Mf;if(!m){Pc("library_fetch_init");try{Of=await Nf()}catch(a){Of=!1}finally{Oc("library_fetch_init")}}})();m||(oa=h.wasmMemory?h.wasmMemory:new WebAssembly.Memory({initial:(h.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());h.noExitRuntime&&(Wc=h.noExitRuntime);h.preloadPlugins&&(Hd=h.preloadPlugins);h.print&&(ja=h.print);h.printErr&&(r=h.printErr);h.wasmBinary&&(ka=h.wasmBinary); -h.thisProgram&&(da=h.thisProgram);if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0{var l=b?md(hd(a+"/"+b)):a,n=`cp ${l}`;Pc(n);try{var q=c;"string"==typeof c&&(q=await Gd(c));q=await Id(q,l);k?.();f||ne(a,b,q,d,e,g)}finally{Oc(n)}};h.FS_unlink=(...a)=>fe(...a);h.FS_createPath=(...a)=>le(...a);h.FS_createDevice=(...a)=>Ma(...a); -h.FS_createDataFile=(...a)=>ne(...a);h.FS_createLazyFile=(...a)=>pe(...a);var yf=[pc,Xc,dd,ab,bb,cb,db,eb,fb,gb,Qb,Rb,Sb,dc,ec,gc,hc,ic,jc],xf={205765:(a,b,c,d)=>{a=U(a);b=U(b);c=U(c);d=U(d);throw Error(a+b+c+d);},205981:(a,b)=>{a=U(a);b=U(b);throw Error(a+b);},206091:a=>{a=U(a);throw Error(a);},206159:a=>{a=U(a);throw Error(a);}};function Ub(){var a=h.allowedThreads;return a?a:navigator.hardwareConcurrency}function kc(){var a=stackTrace(),b=rd(a)+1,c=uc(b);Y(a,c,b);return c} -var sc,Aa,tc,uc,vc,wc,xa,Ea,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc;h.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=44416;var Ya;function mc(a,b){var c=Gc();try{O(a)(b)}catch(d){Ec(c);if(d!==d+0)throw d;Cc(1,0)}}function oc(a,b,c,d){var e=Gc();try{O(a)(b,c,d)}catch(f){Ec(e);if(f!==f+0)throw f;Cc(1,0)}}function nc(a,b,c){var d=Gc();try{O(a)(b,c)}catch(e){Ec(d);if(e!==e+0)throw e;Cc(1,0)}}function lc(a,b,c,d){var e=Gc();try{return O(a)(b,c,d)}catch(f){Ec(e);if(f!==f+0)throw f;Cc(1,0)}} -function va(){function a(){h.calledRun=!0;if(!ma&&(Ka(),qa?.(h),h.onRuntimeInitialized?.(),!m)){if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();bd.push(b)}Kc(bd)}}if(0{setTimeout(()=>h.setStatus(""),1);a()},1)):a()}} -var Pa;m||(Pa=await (ua()),va());moduleRtn=Ja?h:new Promise((a,b)=>{qa=a;ra=b}); -;return moduleRtn}export default createModule;var isPthread=globalThis.self?.name?.startsWith("em-pthread");isPthread&&createModule(); diff --git a/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.wasm b/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.wasm deleted file mode 100755 index 40ab78f9..00000000 Binary files a/packages/blinkcard-wasm/dist/advanced-threads/BlinkCardModule.wasm and /dev/null differ diff --git a/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.data b/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.data deleted file mode 100644 index 7abdb179..00000000 Binary files a/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.data and /dev/null differ diff --git a/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.js b/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.js deleted file mode 100644 index 67e7f765..00000000 --- a/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.js +++ /dev/null @@ -1,122 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var l=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=l).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);l.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,m){var p;(p=l).dataFileDownloads??(p.dataFileDownloads={});try{var n=await fetch(k)}catch(x){throw Error(`Network Error: ${k}`,{e:x});}if(!n.ok)throw Error(`${n.status}: ${n.url}`);p=[];m=Number(n.headers.get("Content-Length")??m);let t=0;l.setStatus?.("Downloading data...");for(n=n.body.getReader();;){var {done:z, -value:u}=await n.read();if(z)break;p.push(u);t+=u.length;l.dataFileDownloads[k]={loaded:t,total:m};let x=0,E=0;for(var w of Object.values(l.dataFileDownloads))x+=w.loaded,E+=w.total;l.setStatus?.(`Downloading data... (${x}/${E})`)}k=new Uint8Array(p.map(x=>x.length).reduce((x,E)=>x+E,0));w=0;for(const x of p)k.set(x,w),w+=x.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkcard",!0,!0);for(var m of b.files)k.addRunDependency(`fp ${m.filename}`); -k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.data"]={Ic:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var n of b.files){var t=n.filename;k.FS_createDataFile(t, -null,p.subarray(n.start,n.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=l.locateFile?.("BlinkCardModule.data", -"")??"BlinkCardModule.data",f=b.remote_package_size,g,h=l.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(l.calledRun)d(l);else{let k;((k=l).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkcard/Model_1118d9d674e23996f70c6416b2bf5a6ce6ef24a6ad2c92f0ddd1e198e5f05305.strop",start:0,end:19102},{filename:"/microblink/blinkcard/Model_349432d66ef2b216155673b634f7d5c47795bed35719b954f726b5f0856740f3.strop",start:19102,end:67419},{filename:"/microblink/blinkcard/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop", -start:67419,end:336140},{filename:"/microblink/blinkcard/Model_5065f3a3bc1c2fece482ee66e9275fc198b9be239547e08b6086c59f347ca72f.strop",start:336140,end:2591295},{filename:"/microblink/blinkcard/Model_830c13896f96c1cb6d5cad725f44e6aae470f8672d640d20b3272ed4bb839699.strop",start:2591295,end:2848318},{filename:"/microblink/blinkcard/Model_9f6734be0f5c1e4f3c6c621f4a72db8241feaf7c8705dc68a9cc07a7b634ee85.strop",start:2848318,end:2931954},{filename:"/microblink/blinkcard/Model_abb3e9795585a24a9bbd1dd41ec97daa2e1d7d42087aacd981411fd8b26bf493.strop", -start:2931954,end:3264110},{filename:"/microblink/blinkcard/Model_b9263312a9b623d1a3b75b643ccdcbc36aae52c278d721443468147c50e44583.strop",start:3264110,end:3532384},{filename:"/microblink/blinkcard/Model_c99d9c4b96e424a1b5a17758060a8116912f78d14318e471e0606709227b9497.strop",start:3532384,end:6369917},{filename:"/microblink/blinkcard/Model_cc1fab8df49d9a21de6c7b76ccf0dac40b17fcfb7073cc520eca073cbf8e33e9.strop",start:6369917,end:6373648},{filename:"/microblink/blinkcard/Model_f132d1bd7614b1274fafb8a41ec6c047b84b2a43654ae2da5ddd78a2765601c6.strop", -start:6373648,end:7208473},{filename:"/microblink/blinkcard/bin-database_1.0.zzip",start:7208473,end:8578325}],remote_package_size:8578325})})();l.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}};l="undefined"!==typeof l?l:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!l.locateFile&&(l.locateFile=function(d,e){return"BlinkCardModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,v,A,pa,B,D,ra,sa,G,ta,ua=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);v=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);D=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);G=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function H(a){l.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),H(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=l.preRun.shift();Ea.push(a)},Ga=!0,Ha=[],L=a=>{var b=Ha[a];b||(Ha[a]=b=Ja.get(a));return b},La=()=>{var a=B[+Ka>>2];Ka+=4;return a},Ma=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Na=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Ma(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b? -"/":"")+a},Oa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Pa=()=>a=>crypto.getRandomValues(a),Qa=a=>{(Qa=Pa())(a)},Ra=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ma(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."}, -Sa=globalThis.TextDecoder&&new TextDecoder,Ta=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},M=(a,b=0,c,d)=>{c=Ta(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}, -Ua=[],Va=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},N=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]= -128|g&63;f++}}b[c]=0;return c-e},Wa=a=>{var b=Array(Va(a)+1);a=N(a,b,0,b.length);b.length=a;return b},Xa=[];function Ya(a,b){Xa[a]={input:[],output:[],Va:b};Za(a,$a)} -var $a={open(a){var b=Xa[a.node.ib];if(!b)throw new O(43);a.Aa=b;a.seekable=!1},close(a){a.Aa.Va.nb(a.Aa)},nb(a){a.Aa.Va.nb(a.Aa)},read(a,b,c,d){if(!a.Aa||!a.Aa.Va.Pb)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=cb(65536,a);b&&v.fill(0,b,b+a);return b},P={Qa:null,Ua(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.Qa||(P.Qa={dir:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta,eb:P.ya.eb,qb:P.ya.qb,Tb:P.ya.Tb,vb:P.ya.vb,Ub:P.ya.Ub,Eb:P.ya.Eb,ub:P.ya.ub},stream:{Pa:P.wa.Pa}}, -file:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta},stream:{Pa:P.wa.Pa,read:P.wa.read,write:P.wa.write,fb:P.wa.fb,rb:P.wa.rb}},link:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta,jb:P.ya.jb},stream:{}},Jb:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta},stream:eb}});c=fb(a,b,c,d);Q(c.mode)?(c.ya=P.Qa.dir.node,c.wa=P.Qa.dir.stream,c.xa={}):32768===(c.mode&61440)?(c.ya=P.Qa.file.node,c.wa=P.Qa.file.stream,c.Da=0,c.xa=null):40960===(c.mode&61440)?(c.ya=P.Qa.link.node,c.wa=P.Qa.link.stream):8192===(c.mode&61440)&&(c.ya=P.Qa.Jb.node,c.wa=P.Qa.Jb.stream); -c.Xa=c.La=c.Ka=Date.now();a&&(a.xa[b]=c,a.Xa=a.La=a.Ka=c.Xa);return c},Jc(a){return a.xa?a.xa.subarray?a.xa.subarray(0,a.Da):new Uint8Array(a.xa):new Uint8Array(0)},ya:{Oa(a){var b={};b.Yb=8192===(a.mode&61440)?a.id:1;b.hc=a.id;b.mode=a.mode;b.qc=1;b.uid=0;b.ec=0;b.ib=a.ib;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.Da:40960===(a.mode&61440)?a.link.length:0;b.Xa=new Date(a.Xa);b.La=new Date(a.La);b.Ka=new Date(a.Ka);b.Vb=4096;b.Wb=Math.ceil(b.size/b.Vb);return b},Ta(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Da!=b&&(0==b?(a.xa=null,a.Da=0):(c=a.xa,a.xa=new Uint8Array(b),c&&a.xa.set(c.subarray(0,Math.min(b,a.Da))),a.Da=b)))},eb(){P.xb||(P.xb=new O(44),P.xb.stack="");throw P.xb;},qb(a,b,c,d){return P.createNode(a,b,c,d)},Tb(a,b,c){try{var d=gb(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.xa)throw new O(55);hb(d)}delete a.parent.xa[a.name];b.xa[c]=a;a.name=c;b.Ka=b.La=a.parent.Ka=a.parent.La=Date.now()},vb(a, -b){delete a.xa[b];a.Ka=a.La=Date.now()},Ub(a,b){var c=gb(a,b),d;for(d in c.xa)throw new O(55);delete a.xa[b];a.Ka=a.La=Date.now()},Eb(a){return[".","..",...Object.keys(a.xa)]},ub(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},jb(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},wa:{read(a,b,c,d,e){var f=a.node.xa;if(e>=a.node.Da)return 0;a=Math.min(a.node.Da-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.xa,a.xa=new Uint8Array(f),0b)throw new O(28);return b},fb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.xa;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=db(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},jb=async a=>{a=await ha(a);return new Uint8Array(a)},kb=0,lb=null,mb=()=>{kb--;l.monitorRunDependencies?.(kb);if(0==kb&&lb){var a=lb;lb=null;a()}},nb=()=>{kb++;l.monitorRunDependencies?.(kb)},ob=[],pb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Kc();for(var c of ob)if(c.canHandle(b))return c.handle(a,b);return a},qb=null,rb={},sb=[],tb=1,ub=null,vb=!1,wb=!0,xb={},O=class{name="ErrnoError";constructor(a){this.Ea=a}},yb=class{tb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.tb.flags}set flags(a){this.tb.flags=a}get position(){return this.tb.position}set position(a){this.tb.position=a}},zb=class{ya={};wa={};sb=365;wb=146;gb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Ua=a.Ua;this.id=tb++;this.name=b;this.mode=c;this.ib=d;this.Xa=this.La=this.Ka=Date.now()}get read(){return(this.mode&this.sb)===this.sb}set read(a){a?this.mode|=this.sb:this.mode&=~this.sb}get write(){return(this.mode&this.wb)===this.wb}set write(a){a?this.mode|=this.wb: -this.mode&=~this.wb}get nc(){return Q(this.mode)}get mc(){return 8192===(this.mode&61440)}}; -function Ab(a,b={}){if(!a)throw new O(44);b.yb??(b.yb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=qb,e="/",f=0;f>>0)%ub.length} -function hb(a){var b=Cb(a.parent.id,a.name);if(ub[b]===a)ub[b]=a.$a;else for(b=ub[b];b;){if(b.$a===a){b.$a=a.$a;break}b=b.$a}}function gb(a,b){var c=Q(a.mode)?(c=Db(a,"x"))?c:a.ya.eb?0:2:54;if(c)throw new O(c);for(c=ub[Cb(a.id,b)];c;c=c.$a){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ya.eb(a,b)}function fb(a,b,c,d){a=new zb(a,b,c,d);b=Cb(a.parent.id,a.name);a.$a=ub[b];return ub[b]=a}function Q(a){return 16384===(a&61440)} -function Eb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Db(a,b){if(wb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Fb(a,b){if(!Q(a.mode))return 54;try{return gb(a,b),20}catch(c){}return Db(a,"wx")}function Gb(a){if(!a)throw new O(63);return a}function R(a){a=sb[a];if(!a)throw new O(8);return a} -function Hb(a,b=-1){a=Object.assign(new yb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!sb[b])break a;throw new O(33);}a.Ya=b;return sb[b]=a}function Ib(a,b=-1){a=Hb(a,b);a.wa?.Hc?.(a);return a}function Jb(a,b){var c=null?.wa.Ta,d=c?null:a;c??=a.ya.Ta;Gb(c);c(d,b)}var eb={open(a){a.wa=rb[a.node.ib].wa;a.wa.open?.(a)},Pa(){throw new O(70);}};function Za(a,b){rb[a]={wa:b}} -function Kb(a,b){var c="/"===b;if(c&&qb)throw new O(10);if(!c&&b){var d=Ab(b,{yb:!1});b=d.path;d=d.node;if(d.gb)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,Lc:{},Rb:b,pc:[]};a=a.Ua(b);a.Ua=b;b.root=a;c?qb=a:d&&(d.gb=b,d.Ua&&d.Ua.pc.push(b))}function Lb(a,b,c){var d=Ab(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Fb(d,a);if(e)throw new O(e);if(!d.ya.qb)throw new O(63);return d.ya.qb(d,a,b,c)} -function Mb(a,b=438){return Lb(a,b&4095|32768,0)}function S(a){return Lb(a,16895,0)}function Nb(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Lb(a,b|8192,c)}function Ob(a,b){if(!Ra(a))throw new O(44);var c=Ab(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Fb(c,b);if(d)throw new O(d);if(!c.ya.ub)throw new O(63);c.ya.ub(c,b,a)} -function Pb(a){var b=Ab(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=gb(b,a);a:{try{var d=gb(b,a)}catch(f){d=f.Ea;break a}var e=Db(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.ya.vb)throw new O(63);if(c.gb)throw new O(10);b.ya.vb(b,a);hb(c)}function Qb(a,b){a=Ab(a,{mb:!b}).node;return Gb(a.ya.Oa)(a)}function Rb(a,b){a="string"==typeof a?Ab(a,{mb:!0}).node:a;Jb(a,{mode:b&4095|a.mode&-4096,Ka:Date.now(),Gc:void 0})} -function Sb(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Ab(a,{mb:!(b&131072),rc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Lb(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Eb(b)||b&576)?31:Db(d,Eb(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Ab(e,{mb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Db(e,"w");if(g)throw new O(g);Jb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Hb({node:d,path:Bb(d),flags:b,seekable:!0,position:0,wa:d.wa,Ac:[],error:!1});e.wa.open&&e.wa.open(e);f&&Rb(d,c&511);!l.logReadFiles||b&1||a in xb||(xb[a]=1);return e} -function Tb(a){if(null===a.Ya)throw new O(8);a.zb&&(a.zb=null);try{a.wa.close&&a.wa.close(a)}catch(b){throw b;}finally{sb[a.Ya]=null}a.Ya=null}function Ub(a,b,c){if(null===a.Ya)throw new O(8);if(!a.seekable||!a.wa.Pa)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.wa.Pa(a,b,c);a.Ac=[]} -function Vb(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.Ya)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.wa.write)throw new O(28);a.seekable&&a.flags&1024&&Ub(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.wa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Wb(a,b){a="string"==typeof a?a:Bb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Na(a+"/"+c);try{S(d)}catch(e){if(20!=e.Ea)throw e;}a=d}}return d}function Xb(a,b,c,d){a=Na(("string"==typeof a?a:Bb(a))+"/"+b);return Mb(a,ib(c,d))} -function Yb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Bb(a),g=b?Na(a+"/"+b):a);a=ib(d,e);g=Mb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=n.length)return 0;u=Math.min(n.length-w,u);if(n.slice)for(var x=0;xthis.length-1||0>n)){var t=n%this.Kb;return this.cb(n/this.Kb|0)[t]}}vc(n){this.cb=n}Ib(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);200<=n.status&&300>n.status||304===n.status||H("Couldn't load "+c+". Status: "+n.status);var t=Number(n.getResponseHeader("Content-length")), -z,u=(z=n.getResponseHeader("Accept-Ranges"))&&"bytes"===z;n=(z=n.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;u||(w=t);var x=this;x.vc(E=>{var F=E*w,K=(E+1)*w-1;K=Math.min(K,t-1);if("undefined"==typeof x.lb[E]){var y=x.lb;F>K&&H("invalid range ("+F+", "+K+") or no bytes requested!");K>t-1&&H("only "+t+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);t!==w&&J.setRequestHeader("Range","bytes="+F+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||H("Couldn't load "+c+". Status: "+J.status);F=void 0!==J.response?new Uint8Array(J.response||[]):Wa(J.responseText||"");y[E]=F}"undefined"==typeof x.lb[E]&&H("doXHR failed!");return x.lb[E]});if(n||!t)w=t=1,w=t=this.cb(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.Hb=t;this.Gb=w;this.Bb=!0}get length(){this.Bb||this.Ib();return this.Hb}get Kb(){this.Bb|| -this.Ib();return this.Gb}}if(globalThis.XMLHttpRequest){ba||H("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var m=Xb(a,b,d,e);h?m.xa=h:k&&(m.xa=null,m.url=k);Object.defineProperties(m,{Da:{get:function(){return this.xa.length}}});var p={};Object.keys(m.wa).forEach(n=>{var t=m.wa[n];p[n]=(...z)=>{$b(m);return t(...z)}});p.read=(n,t,z,u,w)=>{$b(m);return f(n,t,z,u,w)};p.fb=(n,t,z)=>{$b(m); -var u=db(t);if(!u)throw new O(48);f(n,r,u,t,z);return{za:u,Wa:!0}};m.wa=p;return m}var T={},bc=(a,b,c)=>a?M(v,a,b,c):"";function cc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":R(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function dc(a,b){D[a>>2]=b.Yb;D[a+4>>2]=b.mode;D[a+8>>2]=b.qc;D[a+12>>2]=b.uid;D[a+16>>2]=b.ec;D[a+20>>2]=b.ib;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.Wb;var c=b.Xa.getTime(),d=b.La.getTime(),e=b.Ka.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));D[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));D[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));D[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.hc);return 0}var Ka=void 0,ec={},fc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function gc(a){return this.Fa(D[a>>2])} -var hc={},ic={},jc={},kc=class extends Error{constructor(a){super(a);this.name="InternalError"}},lc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new kc("Mismatched type converter count");for(var k=0;kjc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{ic.hasOwnProperty(h)?e[k]=ic[h]:(f.push(h),hc.hasOwnProperty(h)||(hc[h]=[]),hc[h].push(()=>{e[k]=ic[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},V=a=>{for(var b="";;){var c=v[a++];if(!c)return b; -b+=String.fromCharCode(c)}},W=class extends Error{constructor(a){super(a);this.name="BindingError"}};function mc(a,b,c={}){var d=b.name;if(!a)throw new W(`type "${d}" must have a positive integer typeid pointer`);if(ic.hasOwnProperty(a)){if(c.fc)return;throw new W(`Cannot register type '${d}' twice`);}ic[a]=b;delete jc[a];hc.hasOwnProperty(a)&&(b=hc[a],delete hc[a],b.forEach(e=>e()))}function U(a,b,c={}){return mc(a,b,c)} -var nc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>v[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>D[d>>2];case 8:return c?d=>G[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},oc=a=>{throw new W(a.va.Ca.Ba.name+" instance already deleted");},pc=!1,qc=()=>{},rc=a=>{if(!globalThis.FinalizationRegistry)return rc=b=>b,a;pc=new FinalizationRegistry(b=>{b=b.va;--b.count.value;0===b.count.value&&(b.Ha?b.Ma.Ra(b.Ha):b.Ca.Ba.Ra(b.za))});rc= -b=>{var c=b.va;c.Ha&&pc.register(b,{va:c},b);return b};qc=b=>{pc.unregister(b)};return rc(a)},sc=[];function tc(){} -var uc=(a,b)=>Object.defineProperty(b,"name",{value:a}),vc={},wc=(a,b,c)=>{if(void 0===a[b].Ga){var d=a[b];a[b]=function(...e){if(!a[b].Ga.hasOwnProperty(e.length))throw new W(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ga})!`);return a[b].Ga[e.length].apply(this,e)};a[b].Ga=[];a[b].Ga[d.ab]=d}},xc=(a,b,c)=>{if(l.hasOwnProperty(a)){if(void 0===c||void 0!==l[a].Ga&&void 0!==l[a].Ga[c])throw new W(`Cannot register public name '${a}' twice`);wc(l, -a,a);if(l[a].Ga.hasOwnProperty(c))throw new W(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);l[a].Ga[c]=b}else l[a]=b,l[a].ab=c},yc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function zc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Za=c;this.Ra=d;this.Ja=e;this.ac=f;this.kb=g;this.Zb=h;this.tc=[]} -var Ac=(a,b,c)=>{for(;b!==c;){if(!b.kb)throw new W(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.kb(a);b=b.Ja}return a},Bc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Cc(a,b){if(null===b){if(this.Ab)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.va)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.va.za)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);return Ac(b.va.za,b.va.Ca.Ba,this.Ba)} -function Dc(a,b){if(null===b){if(this.Ab)throw new W(`null is not a valid ${this.name}`);if(this.pb){var c=this.Db();null!==a&&a.push(this.Ra,c);return c}return 0}if(!b||!b.va)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.va.za)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.ob&&b.va.Ca.ob)throw new W(`Cannot convert argument of type ${b.va.Ma?b.va.Ma.name:b.va.Ca.name} to parameter type ${this.name}`);c=Ac(b.va.za,b.va.Ca.Ba,this.Ba);if(this.pb){if(void 0=== -b.va.Ha)throw new W("Passing raw pointer to smart pointer is illegal");switch(this.zc){case 0:if(b.va.Ma===this)c=b.va.Ha;else throw new W(`Cannot convert argument of type ${b.va.Ma?b.va.Ma.name:b.va.Ca.name} to parameter type ${this.name}`);break;case 1:c=b.va.Ha;break;case 2:if(b.va.Ma===this)c=b.va.Ha;else{var d=b.clone();c=this.uc(c,Ec(()=>d["delete"]()));null!==a&&a.push(this.Ra,c)}break;default:throw new W("Unsupporting sharing policy");}}return c} -function Fc(a,b){if(null===b){if(this.Ab)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.va)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.va.za)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.va.Ca.ob)throw new W(`Cannot convert argument of type ${b.va.Ca.name} to parameter type ${this.name}`);return Ac(b.va.za,b.va.Ca.Ba,this.Ba)} -var Gc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Ja)return null;a=Gc(a,b,c.Ja);return null===a?null:c.Zb(a)},Hc={},Ic=(a,b)=>{if(void 0===b)throw new W("ptr should not be undefined");for(;a.Ja;)b=a.kb(b),a=a.Ja;return Hc[b]},Jc=(a,b)=>{if(!b.Ca||!b.za)throw new kc("makeClassHandle requires ptr and ptrType");if(!!b.Ma!==!!b.Ha)throw new kc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return rc(Object.create(a,{va:{value:b,writable:!0}}))}; -function Kc(a,b,c,d,e,f,g,h,k,m,p){this.name=a;this.Ba=b;this.Ab=c;this.ob=d;this.pb=e;this.sc=f;this.zc=g;this.Sb=h;this.Db=k;this.uc=m;this.Ra=p;e||void 0!==b.Ja?this.Ia=Dc:(this.Ia=d?Cc:Fc,this.Na=null)}var Lc=(a,b,c)=>{if(!l.hasOwnProperty(a))throw new kc("Replacing nonexistent public symbol");void 0!==l[a].Ga&&void 0!==c?l[a].Ga[c]=b:(l[a]=b,l[a].ab=c)},X=(a,b)=>{a=V(a);var c=L(b);if("function"!=typeof c)throw new W(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Mc extends Error{}var Pc=a=>{a=Nc(a);var b=V(a);Oc(a);return b},Qc=(a,b)=>{function c(f){e[f]||ic[f]||(jc[f]?jc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Mc(`${a}: `+d.map(Pc).join([", "]));};function Rc(a){for(var b=1;bf)throw new W("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Rc(b),k=!b[0].oc,m=f-2,p=Array(m),n=[],t=[];return uc(a,function(...z){t.length=0;n.length=g?2:1;n[0]=e;if(g){var u=b[1].Ia(t,this);n[1]=u}for(var w=0;w{for(var c=[],d=0;d>2]);return c},Uc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Vc=[],Wc=[0,1,,1,null,1,!0,1,!1,1],Xc=a=>{9{if(!a)throw new W(`Cannot use deleted val. handle = ${a}`);return Wc[a]},Ec=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Vc.pop()||Wc.length;Wc[b]=a;Wc[b+1]=1;return b}},Zc={name:"emscripten::val",Fa:a=>{var b= -Yc(a);Xc(a);return b},Ia:(a,b)=>Ec(b),Sa:gc,Na:null},$c=(a,b)=>{switch(b){case 4:return function(c){return this.Fa(ra[c>>2])};case 8:return function(c){return this.Fa(sa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ad=Object.assign({optional:!0},Zc),bd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,cd=(a,b,c)=>{a>>=1;b=Ta(pa,a,b/2,c);if(16{c??=2147483647; -if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},ed=a=>2*a.length,fd=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=D[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},gd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},hd=a=>{for(var b=0,c=0;c{var b=kd.length;kd.push(a);return b},md=(a,b)=>{for(var c=Array(a),d=0;d>2],g=ic[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Pc(f)}`,new W(a);c[e]=g}return c},nd={},od=a=>{var b=nd[a];return void 0===b?V(a):b},pd=a=>0===a%4&&(0!==a%100||0===a%400),qd=[0,31,60,91,121,152,182,213,244,274,305,335],rd=[0,31,59,90,120,151,181,212,243,273,304,334],sd={},td=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},ud=a=>{ma=a;Ga|| -0{if(!la)try{if(a(),!(Ga||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Ad; -function Bd(a,b,c,d,e){function f(){var I=0,C=0;y.response&&E&&0===D[a+12>>2]&&(C=y.response.byteLength);0>2]=I;Z(a+16,C);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);A[a+40>>1]=y.readyState;A[a+42>>1]=y.status;y.statusText&&N(y.statusText,v,a+44,64);K&&(I=Dd(y.responseURL),D[a+200>>2]=I)}var g=D[a+8>>2];if(g){var h=g?M(v,g):"",k=a+108,m=bc(k+0);m||="GET";var p=D[k+56>>2],n=D[k+68>>2],t=D[k+72>>2];g=D[k+76>>2];var z=D[k+80>>2], -u=D[k+84>>2],w=D[k+88>>2],x=D[k+52>>2],E=!!(x&1),F=!!(x&2),K=!!(x&64);n=n?n?M(v,n):"":void 0;t=t?t?M(v,t):"":void 0;var y=new XMLHttpRequest;y.withCredentials=!!v[k+60];y.open(m,h,!K,n,t);K||(y.timeout=p);y.Nc=h;y.responseType="arraybuffer";z&&(h=z?M(v,z):"",y.overrideMimeType(h));if(g)for(;;){k=D[g>>2];if(!k)break;h=D[g+4>>2];if(!h)break;g+=8;k=k?M(v,k):"";h=h?M(v,h):"";y.setRequestHeader(k,h)}var J=xd(y);D[a>>2]=J;g=u&&w?v.slice(u,u+w):null;y.onload=I=>{Y.has(J)&&(f(),200<=y.status&&300>y.status? -b(a,y,I):c(a,I))};y.onerror=I=>{Y.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Y.has(J)&&c(a,I)};y.onprogress=I=>{if(Y.has(J)){var C=E&&F&&y.response?y.response.byteLength:0,qa=0;0>2]=qa;Z(a+16,C);Z(a+24,I.loaded-C);Z(a+32,I.total);A[a+40>>1]=y.readyState;C=y.status;3<=y.readyState&&0===y.status&&0>1]=C;y.statusText&&N(y.statusText,v,a+44,64);d(a,I);Oc(qa)}};y.onreadystatechange=I=>{if(Y.has(J)){A[a+40>>1]=y.readyState; -2<=y.readyState&&(A[a+42>>1]=y.status);if(!K&&2===y.readyState&&0>2]=C}e(a,I)}};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{D[a>>2]=b;D[a+4>>2]=(b-D[a>>2])/4294967296},Dd=a=>{var b=Va(a)+1,c=Cd(b);c&&N(a,v,c,b);return c}; -function Ed(a,b,c,d){var e=Ad;if(e){var f=D[a+108+64>>2];f||=D[a+8>>2];var g=f?M(v,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;N("Payload Too Large",v,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Fd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Cd(h);v.set(new Uint8Array(g),k);D[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,N("Not Found",v,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found", -v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;D[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found",v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Hd={},Jd=()=>{if(!Id){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Hd)void 0===Hd[b]?delete a[b]:a[b]=Hd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Id=c}return Id},Id;ub=Array(4096);Kb(P,"/");S("/tmp");S("/home");S("/home/web_user"); -(function(){S("/dev");Za(259,{read:()=>0,write:(d,e,f,g)=>g,Pa:()=>0});Nb("/dev/null",259);Ya(1280,ab);Ya(1536,bb);Nb("/dev/tty",1280);Nb("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Qa(a),b=a.byteLength);return a[--b]};Zb("/dev","random",c);Zb("/dev","urandom",c);S("/dev/shm");S("/dev/shm/tmp")})(); -(function(){S("/proc");var a=S("/proc/self");S("/proc/self/fd");Kb({Ua(){var b=fb(a,"fd",16895,73);b.wa={Pa:P.wa.Pa};b.ya={eb(c,d){c=+d;var e=R(c);c={parent:null,Ua:{Rb:"fake"},ya:{jb:()=>e.path},id:c+1};return c.parent=c},Eb(){return Array.from(sb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=tc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof tc&&c instanceof tc))return!1;var d=this.va.Ca.Ba,e=this.va.za;c.va=c.va;var f=c.va.Ca.Ba;for(c=c.va.za;d.Ja;)e=d.kb(e),d=d.Ja;for(;f.Ja;)c=f.kb(c),f=f.Ja;return d===f&&e===c},clone:function(){this.va.za||oc(this);if(this.va.hb)return this.va.count.value+=1,this;var c=rc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.va;c=c(e.call(d,f,{va:{value:{count:g.count,bb:g.bb,hb:g.hb,za:g.za,Ca:g.Ca,Ha:g.Ha,Ma:g.Ma}}})); -c.va.count.value+=1;c.va.bb=!1;return c},["delete"](){this.va.za||oc(this);if(this.va.bb&&!this.va.hb)throw new W("Object already scheduled for deletion");qc(this);var c=this.va;--c.count.value;0===c.count.value&&(c.Ha?c.Ma.Ra(c.Ha):c.Ca.Ba.Ra(c.za));this.va.hb||(this.va.Ha=void 0,this.va.za=void 0)},isDeleted:function(){return!this.va.za},deleteLater:function(){this.va.za||oc(this);if(this.va.bb&&!this.va.hb)throw new W("Object already scheduled for deletion");sc.push(this);this.va.bb=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Kc.prototype,{bc(a){this.Sb&&(a=this.Sb(a));return a},Mb(a){this.Ra?.(a)},Sa:gc,Fa:function(a){function b(){return this.pb?Jc(this.Ba.Za,{Ca:this.sc,za:c,Ma:this,Ha:a}):Jc(this.Ba.Za,{Ca:this,za:a})}var c=this.bc(a);if(!c)return this.Mb(a),null;var d=Ic(this.Ba,c);if(void 0!==d){if(0===d.va.count.value)return d.va.za=c,d.va.Ha=a,d.clone();d=d.clone();this.Mb(a);return d}d=this.Ba.ac(c);d=vc[d];if(!d)return b.call(this);d=this.ob?d.Xb:d.pointerType;var e=Gc(c,this.Ba,d.Ba);return null=== -e?b.call(this):this.pb?Jc(d.Ba.Za,{Ca:d,za:e,Ma:this,Ha:a}):Jc(d.Ba.Za,{Ca:d,za:e})}});(async function(){Y=new yd;nb("library_fetch_init");try{Ad=await zd()}catch(a){Ad=!1}finally{mb("library_fetch_init")}})();wa=l.wasmMemory?l.wasmMemory:new WebAssembly.Memory({initial:(l.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();l.noExitRuntime&&(Ga=l.noExitRuntime);l.preloadPlugins&&(ob=l.preloadPlugins);l.print&&(ja=l.print);l.printErr&&(q=l.printErr);l.wasmBinary&&(ka=l.wasmBinary); -l.thisProgram&&(da=l.thisProgram);if(l.preInit)for("function"==typeof l.preInit&&(l.preInit=[l.preInit]);0{var k=b?Ra(Na(a+"/"+b)):a,m=`cp ${k}`;nb(m);try{var p=c;"string"==typeof c&&(p=await jb(c));p=await pb(p,k);h?.();f||Yb(a,b,p,d,e,g)}finally{mb(m)}};l.FS_unlink=(...a)=>Pb(...a);l.FS_createPath=(...a)=>Wb(...a);l.FS_createDevice=(...a)=>Zb(...a); -l.FS_createDataFile=(...a)=>Yb(...a);l.FS_createLazyFile=(...a)=>ac(...a);var Kd={204201:(a,b,c,d)=>{a=a?M(v,a):"";b=b?M(v,b):"";c=c?M(v,c):"";d=d?M(v,d):"";throw Error(a+b+c+d);},204417:(a,b)=>{a=a?M(v,a):"";b=b?M(v,b):"";throw Error(a+b);},204527:a=>{a=a?M(v,a):"";throw Error(a);},204595:a=>{a=a?M(v,a):"";throw Error(a);}},Nc,Cd,Oc,cb,Ld,Md,Nd,Od,Ja;l.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Td={F:(a,b)=>L(a)(b),t:function(a,b,c){Ka=c;try{var d=R(a);switch(b){case 0:var e=La();if(0>e)break;for(;sb[e];)e++;return Ib(d,e).Ya;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=La(),d.flags|=e,0;case 12:return e=La(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ea}},Z:function(a,b){try{var c=R(a),d=c.node,e=c.wa.Oa;a=e?c:d;e??=d.ya.Oa;Gb(e);var f=e(a);return dc(b,f)}catch(g){if("undefined"==typeof T|| -"ErrnoError"!==g.name)throw g;return-g.Ea}},_:function(a,b,c){Ka=c;try{var d=R(a);switch(b){case 21509:return d.Aa?0:-59;case 21505:if(!d.Aa)return-59;if(d.Aa.Va.jc){a=[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];var e=La();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Aa?0:-59;case 21506:case 21507:case 21508:if(!d.Aa)return-59;if(d.Aa.Va.kc)for(e=La(),a=[],f=0;32> -f;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.Aa)return-59;e=La();return B[e>>2]=0;case 21520:return d.Aa?-28:-59;case 21537:case 21531:e=La();if(!d.wa.ic)throw new O(59);return d.wa.ic(d,b,e);case 21523:if(!d.Aa)return-59;d.Aa.Va.lc&&(f=[24,80],e=La(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.Aa?0:-59;case 21515:return d.Aa?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ea}},X:function(a,b){try{return a=a?M(v,a):"",dc(b,Qb(a, -!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ea}},W:function(a,b,c,d){try{b=b?M(v,b):"";var e=d&256;b=cc(a,b,d&4096);return dc(c,e?Qb(b,!0):Qb(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ea}},u:function(a,b,c,d){Ka=d;try{b=b?M(v,b):"";b=cc(a,b);var e=d?La():0;return Sb(b,c,e).Ya}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ea}},Y:function(a,b){try{return a=a?M(v,a):"",dc(b,Qb(a))}catch(c){if("undefined"== -typeof T||"ErrnoError"!==c.name)throw c;return-c.Ea}},$:()=>H(""),e:a=>{var b=ec[a];delete ec[a];var c=b.Db,d=b.Ra,e=b.Nb,f=e.map(g=>g.dc).concat(e.map(g=>g.xc));lc([a],f,g=>{var h={};e.forEach((k,m)=>{var p=g[m],n=k.cb,t=k.cc,z=g[m+e.length],u=k.wc,w=k.yc;h[k.$b]={read:x=>p.Fa(n(t,x)),write:(x,E)=>{var F=[];u(w,x,z.Ia(F,E));fc(F)},optional:g[m].optional}});return[{name:b.name,Fa:k=>{var m={},p;for(p in h)m[p]=h[p].read(k);d(k);return m},Ia:(k,m)=>{for(var p in h)if(!(p in m||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var n=c();for(p in h)h[p].write(n,m[p]);null!==k&&k.push(d,n);return n},Sa:gc,Na:d}]})},w:(a,b,c,d,e)=>{b=V(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}U(a,{name:b,Fa:f,Ia:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},Sa:nc(b,c,!d),Na:null})},y:(a,b,c,d)=>{b=V(b);U(a,{name:b,Fa:function(e){return!!e},Ia:function(e,f){return f?c:d},Sa:function(e){return this.Fa(v[e])},Na:null})},ja:(a,b,c,d,e,f,g,h,k,m,p,n,t)=>{p=V(p);f=X(e,f);h&&=X(g,h);m&&=X(k,m);t=X(n,t);var z= -yc(p);xc(z,function(){Qc(`Cannot construct ${p} due to unbound types`,[d])});lc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var w=u.Ba;var x=w.Za}else x=tc.prototype;u=uc(p,function(...y){if(Object.getPrototypeOf(this)!==E)throw new W(`Use 'new' to construct ${p}`);if(void 0===F.Lb)throw new W(`${p} has no accessible constructor`);var J=F.Lb[y.length];if(void 0===J)throw new W(`Tried to invoke ctor of ${p} with invalid number of parameters (${y.length}) - expected (${Object.keys(F.Lb).toString()}) parameters instead!`); -return J.apply(this,y)});var E=Object.create(x,{constructor:{value:u}});u.prototype=E;var F=new zc(p,u,E,t,w,f,h,m);if(F.Ja){var K;(K=F.Ja).Fb??(K.Fb=[]);F.Ja.Fb.push(F)}w=new Kc(p,F,!0,!1,!1);K=new Kc(p+"*",F,!1,!1,!1);x=new Kc(p+" const*",F,!1,!0,!1);vc[a]={pointerType:K,Xb:x};Lc(z,u);return[w,K,x]})},l:(a,b,c,d,e,f,g,h)=>{var k=Tc(c,d);b=V(b);b=Uc(b);f=X(e,f);lc([],[a],m=>{function p(){Qc(`Cannot call ${n} due to unbound types`,k)}m=m[0];var n=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&m.Ba.tc.push(b);var t=m.Ba.Za,z=t[b];void 0===z||void 0===z.Ga&&z.className!==m.name&&z.ab===c-2?(p.ab=c-2,p.className=m.name,t[b]=p):(wc(t,b,n),t[b].Ga[c-2]=p);lc([],k,u=>{u=Sc(n,u,m,f,g);void 0===t[b].Ga?(u.ab=c-2,t[b]=u):t[b].Ga[c-2]=u;return[]});return[]})},ka:a=>U(a,Zc),v:(a,b,c)=>{b=V(b);U(a,{name:b,Fa:d=>d,Ia:(d,e)=>e,Sa:$c(b,c),Na:null})},h:(a,b,c,d,e,f)=>{var g=Tc(b,c);a=V(a);a=Uc(a);e=X(d,e);xc(a,function(){Qc(`Cannot call ${a} due to unbound types`,g)},b-1);lc([],g,h=>{Lc(a,Sc(a,[h[0], -null].concat(h.slice(1)),null,e,f),b-1);return[]})},j:(a,b,c,d,e)=>{b=V(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}U(a,{name:b,Fa:f,Ia:(h,k)=>k,Sa:nc(b,c,0!==d),Na:null})},g:(a,b,c)=>{function d(f){return new e(r.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=V(c);U(a,{name:c,Fa:d,Sa:d},{fc:!0})},k:a=>{U(a,ad)},x:(a,b)=>{b=V(b);U(a,{name:b,Fa(c){var d=bc(c+4,D[c>>2],!0); -Oc(c);return d},Ia(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new W("Cannot pass non-string to std::string");var f=e?Va(d):d.length;var g=Cd(4+f+1),h=g+4;D[g>>2]=f;e?N(d,v,h,f+1):v.set(d,h);null!==c&&c.push(Oc,g);return g},Sa:gc,Na(c){Oc(c)}})},p:(a,b,c)=>{c=V(c);if(2===b){var d=cd;var e=dd;var f=ed}else d=fd,e=gd,f=hd;U(a,{name:c,Fa:g=>{var h=d(g+4,D[g>>2]*b,!0);Oc(g);return h},Ia:(g,h)=>{if("string"!= -typeof h)throw new W(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),m=Cd(4+k+b);D[m>>2]=k/b;e(h,m+4,k+b);null!==g&&g.push(Oc,m);return m},Sa:gc,Na(g){Oc(g)}})},f:(a,b,c,d,e,f)=>{ec[a]={name:V(b),Db:X(c,d),Ra:X(e,f),Nb:[]}},b:(a,b,c,d,e,f,g,h,k,m)=>{ec[a].Nb.push({$b:V(b),dc:c,cb:X(d,e),cc:f,xc:g,wc:X(h,k),yc:m})},z:(a,b)=>{b=V(b);U(a,{oc:!0,name:b,Fa:()=>{},Ia:()=>{}})},H:()=>{Ga=!1;jd=0},E:()=>{throw Infinity;},d:(a,b,c)=>{var [d,...e]=md(a,b),f=d.Ia.bind(d),g=e.map(k=>k.Sa.bind(k)); -a--;var h=Array(a);b=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return ld(uc(b,(k,m,p,n)=>{for(var t=0,z=0;z>2]=Ec(k));return u}))},ia:Xc,fa:a=>{if(!a)return Ec(globalThis);a=od(a);return Ec(globalThis[a])},i:(a,b)=>{a=Yc(a);b=Yc(b);return Ec(a[b])},O:a=>{9kd[a](b, -c,d,e),ha:()=>Ec([]),ga:a=>Ec(od(a)),D:a=>{var b=Yc(a);fc(b);Xc(a)},P:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(pd(a.getFullYear())?qd:rd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},Q:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(pd(b.getFullYear())? -qd:rd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},M:function(a,b,c,d,e,f,g){e=-9007199254740992>e||9007199254740992>2]=k.Wa;D[g>>2]=m;return 0}catch(p){if("undefined"==typeof T||"ErrnoError"!==p.name)throw p;return-p.Ea}},N:function(a,b,c,d,e,f){f=-9007199254740992>f||9007199254740992{sd[a]&&(clearTimeout(sd[a].id),delete sd[a]);if(!b)return 0;var c=setTimeout(()=>{delete sd[a];vd(()=> -Ld(a,performance.now()))},b);sd[a]={id:c,Mc:b};return 0},R:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();D[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0=== -a?Date.now():performance.now())));return 0},m:(a,b,c)=>{wd.length=0;for(var d;d=v[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;wd.push(112==d?D[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]:sa[c>>3]);c+=e?8:4}return Kd[a](...wd)},aa:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.Wa[a]=void 0;c.Ob.push(a);0b.readyState&&b.abort()}},L:()=>2147483648,n:()=>performance.now(),ca:()=>!ba,K:a=>{var b=v.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536* -Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},ba:function(a,b,c,d,e){function f(C){t?C():vd(C)}var g=a+108,h=D[g+36>>2],k=D[g+40>>2],m=D[g+44>>2],p=D[g+48>>2],n=D[g+52>>2],t=!!(n&64),z=C=>{f(()=>{h?L(h)(C):b?.(C)})},u=C=>{f(()=>{m?L(m)(C):d?.(C)})},w=C=>{f(()=>{k?L(k)(C):c?.(C)})},x=C=>{f(()=>{p?L(p)(C):e?.(C)})},E=C=>{Bd(C,z,w,u,x)},F=(C,qa)=>{Ed(C,qa.response,Ia=>{f(()=>{h?L(h)(Ia):b?.(Ia)})}, -Ia=>{f(()=>{h?L(h)(Ia):b?.(Ia)})})},K=C=>{Bd(C,F,w,u,x)},y=bc(g+0),J=!!(n&16),I=!!(n&4);n=!!(n&32);if("EM_IDB_STORE"===y)E=D[g+84>>2],Ed(a,v.slice(E,E+D[g+88>>2]),z,w);else if("EM_IDB_DELETE"===y)Gd(a,z,w);else if(J){if(n)return 0;Bd(a,I?F:z,w,u,x)}else Fd(a,z,n?w:I?K:E);return a},U:(a,b)=>{var c=0,d=0,e;for(e of Jd()){var f=b+c;D[a+d>>2]=f;c+=N(e,v,f,Infinity)+1;d+=4}return 0},V:(a,b)=>{var c=Jd();D[a>>2]=c.length;a=0;for(var d of c)a+=Va(d)+1;D[b>>2]=a;return 0},ea:a=>{ma=a;ud(a)},o:function(a){try{var b= -R(a);Tb(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ea}},s:function(a,b,c,d){try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var m=e,p=h,n=k,t=f,z=r;if(0>n||0>t)throw new O(28);if(null===m.Ya)throw new O(8);if(1===(m.flags&2097155))throw new O(8);if(Q(m.node.mode))throw new O(31);if(!m.wa.read)throw new O(28);var u="undefined"!=typeof t;if(!u)t=m.position;else if(!m.seekable)throw new O(70);var w=m.wa.read(m,z,p,n,t);u||(m.position+= -w);var x=w;if(0>x){var E=-1;break a}b+=x;if(x>2]=E;return 0}catch(F){if("undefined"==typeof T||"ErrnoError"!==F.name)throw F;return F.Ea}},T:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.zb&&0===b&&0===c&&(e.zb=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.Ea}},r:function(a,b,c,d){try{a:{var e=R(a);a=b;for(var f, -g=b=0;g>2],k=D[a+4>>2];a+=8;var m=Vb(e,r,h,k,f);if(0>m){var p=-1;break a}b+=m;if(m>2]=p;return 0}catch(n){if("undefined"==typeof T||"ErrnoError"!==n.name)throw n;return n.Ea}},da:function(){var a=stackTrace(),b=Va(a)+1,c=Cd(b);N(a,v,c,b);return c},A:Pd,q:Qd,B:Rd,C:Sd,a:wa,G:ud,J:function(a,b){try{return Qa(v.subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ea}}}; -function Qd(a,b){var c=Od();try{L(a)(b)}catch(d){Nd(c);if(d!==d+0)throw d;Md(1,0)}}function Sd(a,b,c,d){var e=Od();try{L(a)(b,c,d)}catch(f){Nd(e);if(f!==f+0)throw f;Md(1,0)}}function Rd(a,b,c){var d=Od();try{L(a)(b,c)}catch(e){Nd(d);if(e!==e+0)throw e;Md(1,0)}}function Pd(a,b,c,d){var e=Od();try{return L(a)(b,c,d)}catch(f){Nd(e);if(f!==f+0)throw f;Md(1,0)}} -function Ud(){function a(){l.calledRun=!0;if(!la){ua=!0;if(!l.noFSInit&&!vb){var b,c;vb=!0;b??=l.stdin;c??=l.stdout;d??=l.stderr;b?Zb("/dev","stdin",b):Ob("/dev/tty","/dev/stdin");c?Zb("/dev","stdout",null,c):Ob("/dev/tty","/dev/stdout");d?Zb("/dev","stderr",null,d):Ob("/dev/tty1","/dev/stderr");Sb("/dev/stdin",0);Sb("/dev/stdout",1);Sb("/dev/stderr",1)}Vd.la();wb=!1;na?.(l);l.onRuntimeInitialized?.();if(l.postRun)for("function"==typeof l.postRun&&(l.postRun=[l.postRun]);l.postRun.length;){var d= -l.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>l.setStatus(""),1);a()},1)):a()}}var Vd; -Vd=await (async function(){function a(c){c=Vd=c.exports;Nc=c.ma;Cd=c.na;Oc=c.oa;cb=c.qa;Ld=c.ra;Md=c.sa;Nd=c.ta;Od=c.ua;Ja=c.pa;return Vd}var b={a:Td};if(l.instantiateWasm)return new Promise(c=>{l.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=l.locateFile?l.locateFile?l.locateFile("BlinkCardModule.wasm",fa):fa+"BlinkCardModule.wasm":(new URL("BlinkCardModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Ud();moduleRtn=ua?l:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.wasm b/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.wasm deleted file mode 100755 index 8638231c..00000000 Binary files a/packages/blinkcard-wasm/dist/advanced/BlinkCardModule.wasm and /dev/null differ diff --git a/packages/blinkcard-wasm/dist/basic/BlinkCardModule.data b/packages/blinkcard-wasm/dist/basic/BlinkCardModule.data deleted file mode 100644 index 7abdb179..00000000 Binary files a/packages/blinkcard-wasm/dist/basic/BlinkCardModule.data and /dev/null differ diff --git a/packages/blinkcard-wasm/dist/basic/BlinkCardModule.js b/packages/blinkcard-wasm/dist/basic/BlinkCardModule.js deleted file mode 100644 index 401b0dcd..00000000 --- a/packages/blinkcard-wasm/dist/basic/BlinkCardModule.js +++ /dev/null @@ -1,122 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var l=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=l).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);l.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,m){var p;(p=l).dataFileDownloads??(p.dataFileDownloads={});try{var n=await fetch(k)}catch(x){throw Error(`Network Error: ${k}`,{e:x});}if(!n.ok)throw Error(`${n.status}: ${n.url}`);p=[];m=Number(n.headers.get("Content-Length")??m);let t=0;l.setStatus?.("Downloading data...");for(n=n.body.getReader();;){var {done:z, -value:u}=await n.read();if(z)break;p.push(u);t+=u.length;l.dataFileDownloads[k]={loaded:t,total:m};let x=0,E=0;for(var w of Object.values(l.dataFileDownloads))x+=w.loaded,E+=w.total;l.setStatus?.(`Downloading data... (${x}/${E})`)}k=new Uint8Array(p.map(x=>x.length).reduce((x,E)=>x+E,0));w=0;for(const x of p)k.set(x,w),w+=x.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkcard",!0,!0);for(var m of b.files)k.addRunDependency(`fp ${m.filename}`); -k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/basic/BlinkCardModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/basic/BlinkCardModule.data"]={Ic:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var n of b.files){var t=n.filename;k.FS_createDataFile(t, -null,p.subarray(n.start,n.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkcard-wasm/dist/basic/BlinkCardModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=l.locateFile?.("BlinkCardModule.data", -"")??"BlinkCardModule.data",f=b.remote_package_size,g,h=l.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(l.calledRun)d(l);else{let k;((k=l).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkcard/Model_1118d9d674e23996f70c6416b2bf5a6ce6ef24a6ad2c92f0ddd1e198e5f05305.strop",start:0,end:19102},{filename:"/microblink/blinkcard/Model_349432d66ef2b216155673b634f7d5c47795bed35719b954f726b5f0856740f3.strop",start:19102,end:67419},{filename:"/microblink/blinkcard/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop", -start:67419,end:336140},{filename:"/microblink/blinkcard/Model_5065f3a3bc1c2fece482ee66e9275fc198b9be239547e08b6086c59f347ca72f.strop",start:336140,end:2591295},{filename:"/microblink/blinkcard/Model_830c13896f96c1cb6d5cad725f44e6aae470f8672d640d20b3272ed4bb839699.strop",start:2591295,end:2848318},{filename:"/microblink/blinkcard/Model_9f6734be0f5c1e4f3c6c621f4a72db8241feaf7c8705dc68a9cc07a7b634ee85.strop",start:2848318,end:2931954},{filename:"/microblink/blinkcard/Model_abb3e9795585a24a9bbd1dd41ec97daa2e1d7d42087aacd981411fd8b26bf493.strop", -start:2931954,end:3264110},{filename:"/microblink/blinkcard/Model_b9263312a9b623d1a3b75b643ccdcbc36aae52c278d721443468147c50e44583.strop",start:3264110,end:3532384},{filename:"/microblink/blinkcard/Model_c99d9c4b96e424a1b5a17758060a8116912f78d14318e471e0606709227b9497.strop",start:3532384,end:6369917},{filename:"/microblink/blinkcard/Model_cc1fab8df49d9a21de6c7b76ccf0dac40b17fcfb7073cc520eca073cbf8e33e9.strop",start:6369917,end:6373648},{filename:"/microblink/blinkcard/Model_f132d1bd7614b1274fafb8a41ec6c047b84b2a43654ae2da5ddd78a2765601c6.strop", -start:6373648,end:7208473},{filename:"/microblink/blinkcard/bin-database_1.0.zzip",start:7208473,end:8578325}],remote_package_size:8578325})})();l.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}};l="undefined"!==typeof l?l:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!l.locateFile&&(l.locateFile=function(d,e){return"BlinkCardModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,v,A,pa,B,D,ra,sa,G,ta,ua=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);v=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);D=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);G=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function H(a){l.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),H(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=l.preRun.shift();Ea.push(a)},Ga=!0,Ha=[],L=a=>{var b=Ha[a];b||(Ha[a]=b=Ja.get(a));return b},La=()=>{var a=B[+Ka>>2];Ka+=4;return a},Ma=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Na=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Ma(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b? -"/":"")+a},Oa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Pa=()=>a=>crypto.getRandomValues(a),Qa=a=>{(Qa=Pa())(a)},Ra=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ma(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."}, -Sa=globalThis.TextDecoder&&new TextDecoder,Ta=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},M=(a,b=0,c,d)=>{c=Ta(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}, -Ua=[],Va=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},N=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]= -128|g&63;f++}}b[c]=0;return c-e},Wa=a=>{var b=Array(Va(a)+1);a=N(a,b,0,b.length);b.length=a;return b},Xa=[];function Ya(a,b){Xa[a]={input:[],output:[],Va:b};Za(a,$a)} -var $a={open(a){var b=Xa[a.node.ib];if(!b)throw new O(43);a.Aa=b;a.seekable=!1},close(a){a.Aa.Va.nb(a.Aa)},nb(a){a.Aa.Va.nb(a.Aa)},read(a,b,c,d){if(!a.Aa||!a.Aa.Va.Pb)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=cb(65536,a);b&&v.fill(0,b,b+a);return b},P={Qa:null,Ua(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.Qa||(P.Qa={dir:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta,eb:P.ya.eb,qb:P.ya.qb,Tb:P.ya.Tb,vb:P.ya.vb,Ub:P.ya.Ub,Eb:P.ya.Eb,ub:P.ya.ub},stream:{Pa:P.wa.Pa}}, -file:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta},stream:{Pa:P.wa.Pa,read:P.wa.read,write:P.wa.write,fb:P.wa.fb,rb:P.wa.rb}},link:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta,jb:P.ya.jb},stream:{}},Jb:{node:{Oa:P.ya.Oa,Ta:P.ya.Ta},stream:eb}});c=fb(a,b,c,d);Q(c.mode)?(c.ya=P.Qa.dir.node,c.wa=P.Qa.dir.stream,c.xa={}):32768===(c.mode&61440)?(c.ya=P.Qa.file.node,c.wa=P.Qa.file.stream,c.Da=0,c.xa=null):40960===(c.mode&61440)?(c.ya=P.Qa.link.node,c.wa=P.Qa.link.stream):8192===(c.mode&61440)&&(c.ya=P.Qa.Jb.node,c.wa=P.Qa.Jb.stream); -c.Xa=c.La=c.Ka=Date.now();a&&(a.xa[b]=c,a.Xa=a.La=a.Ka=c.Xa);return c},Jc(a){return a.xa?a.xa.subarray?a.xa.subarray(0,a.Da):new Uint8Array(a.xa):new Uint8Array(0)},ya:{Oa(a){var b={};b.Yb=8192===(a.mode&61440)?a.id:1;b.hc=a.id;b.mode=a.mode;b.qc=1;b.uid=0;b.ec=0;b.ib=a.ib;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.Da:40960===(a.mode&61440)?a.link.length:0;b.Xa=new Date(a.Xa);b.La=new Date(a.La);b.Ka=new Date(a.Ka);b.Vb=4096;b.Wb=Math.ceil(b.size/b.Vb);return b},Ta(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Da!=b&&(0==b?(a.xa=null,a.Da=0):(c=a.xa,a.xa=new Uint8Array(b),c&&a.xa.set(c.subarray(0,Math.min(b,a.Da))),a.Da=b)))},eb(){P.xb||(P.xb=new O(44),P.xb.stack="");throw P.xb;},qb(a,b,c,d){return P.createNode(a,b,c,d)},Tb(a,b,c){try{var d=gb(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.xa)throw new O(55);hb(d)}delete a.parent.xa[a.name];b.xa[c]=a;a.name=c;b.Ka=b.La=a.parent.Ka=a.parent.La=Date.now()},vb(a, -b){delete a.xa[b];a.Ka=a.La=Date.now()},Ub(a,b){var c=gb(a,b),d;for(d in c.xa)throw new O(55);delete a.xa[b];a.Ka=a.La=Date.now()},Eb(a){return[".","..",...Object.keys(a.xa)]},ub(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},jb(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},wa:{read(a,b,c,d,e){var f=a.node.xa;if(e>=a.node.Da)return 0;a=Math.min(a.node.Da-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.xa,a.xa=new Uint8Array(f),0b)throw new O(28);return b},fb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.xa;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=db(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},jb=async a=>{a=await ha(a);return new Uint8Array(a)},kb=0,lb=null,mb=()=>{kb--;l.monitorRunDependencies?.(kb);if(0==kb&&lb){var a=lb;lb=null;a()}},nb=()=>{kb++;l.monitorRunDependencies?.(kb)},ob=[],pb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Kc();for(var c of ob)if(c.canHandle(b))return c.handle(a,b);return a},qb=null,rb={},sb=[],tb=1,ub=null,vb=!1,wb=!0,xb={},O=class{name="ErrnoError";constructor(a){this.Ea=a}},yb=class{tb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.tb.flags}set flags(a){this.tb.flags=a}get position(){return this.tb.position}set position(a){this.tb.position=a}},zb=class{ya={};wa={};sb=365;wb=146;gb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Ua=a.Ua;this.id=tb++;this.name=b;this.mode=c;this.ib=d;this.Xa=this.La=this.Ka=Date.now()}get read(){return(this.mode&this.sb)===this.sb}set read(a){a?this.mode|=this.sb:this.mode&=~this.sb}get write(){return(this.mode&this.wb)===this.wb}set write(a){a?this.mode|=this.wb: -this.mode&=~this.wb}get nc(){return Q(this.mode)}get mc(){return 8192===(this.mode&61440)}}; -function Ab(a,b={}){if(!a)throw new O(44);b.yb??(b.yb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=qb,e="/",f=0;f>>0)%ub.length} -function hb(a){var b=Cb(a.parent.id,a.name);if(ub[b]===a)ub[b]=a.$a;else for(b=ub[b];b;){if(b.$a===a){b.$a=a.$a;break}b=b.$a}}function gb(a,b){var c=Q(a.mode)?(c=Db(a,"x"))?c:a.ya.eb?0:2:54;if(c)throw new O(c);for(c=ub[Cb(a.id,b)];c;c=c.$a){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ya.eb(a,b)}function fb(a,b,c,d){a=new zb(a,b,c,d);b=Cb(a.parent.id,a.name);a.$a=ub[b];return ub[b]=a}function Q(a){return 16384===(a&61440)} -function Eb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Db(a,b){if(wb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Fb(a,b){if(!Q(a.mode))return 54;try{return gb(a,b),20}catch(c){}return Db(a,"wx")}function Gb(a){if(!a)throw new O(63);return a}function R(a){a=sb[a];if(!a)throw new O(8);return a} -function Hb(a,b=-1){a=Object.assign(new yb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!sb[b])break a;throw new O(33);}a.Ya=b;return sb[b]=a}function Ib(a,b=-1){a=Hb(a,b);a.wa?.Hc?.(a);return a}function Jb(a,b){var c=null?.wa.Ta,d=c?null:a;c??=a.ya.Ta;Gb(c);c(d,b)}var eb={open(a){a.wa=rb[a.node.ib].wa;a.wa.open?.(a)},Pa(){throw new O(70);}};function Za(a,b){rb[a]={wa:b}} -function Kb(a,b){var c="/"===b;if(c&&qb)throw new O(10);if(!c&&b){var d=Ab(b,{yb:!1});b=d.path;d=d.node;if(d.gb)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,Lc:{},Rb:b,pc:[]};a=a.Ua(b);a.Ua=b;b.root=a;c?qb=a:d&&(d.gb=b,d.Ua&&d.Ua.pc.push(b))}function Lb(a,b,c){var d=Ab(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Fb(d,a);if(e)throw new O(e);if(!d.ya.qb)throw new O(63);return d.ya.qb(d,a,b,c)} -function Mb(a,b=438){return Lb(a,b&4095|32768,0)}function S(a){return Lb(a,16895,0)}function Nb(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Lb(a,b|8192,c)}function Ob(a,b){if(!Ra(a))throw new O(44);var c=Ab(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Fb(c,b);if(d)throw new O(d);if(!c.ya.ub)throw new O(63);c.ya.ub(c,b,a)} -function Pb(a){var b=Ab(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=gb(b,a);a:{try{var d=gb(b,a)}catch(f){d=f.Ea;break a}var e=Db(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.ya.vb)throw new O(63);if(c.gb)throw new O(10);b.ya.vb(b,a);hb(c)}function Qb(a,b){a=Ab(a,{mb:!b}).node;return Gb(a.ya.Oa)(a)}function Rb(a,b){a="string"==typeof a?Ab(a,{mb:!0}).node:a;Jb(a,{mode:b&4095|a.mode&-4096,Ka:Date.now(),Gc:void 0})} -function Sb(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Ab(a,{mb:!(b&131072),rc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Lb(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Eb(b)||b&576)?31:Db(d,Eb(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Ab(e,{mb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Db(e,"w");if(g)throw new O(g);Jb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Hb({node:d,path:Bb(d),flags:b,seekable:!0,position:0,wa:d.wa,Ac:[],error:!1});e.wa.open&&e.wa.open(e);f&&Rb(d,c&511);!l.logReadFiles||b&1||a in xb||(xb[a]=1);return e} -function Tb(a){if(null===a.Ya)throw new O(8);a.zb&&(a.zb=null);try{a.wa.close&&a.wa.close(a)}catch(b){throw b;}finally{sb[a.Ya]=null}a.Ya=null}function Ub(a,b,c){if(null===a.Ya)throw new O(8);if(!a.seekable||!a.wa.Pa)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.wa.Pa(a,b,c);a.Ac=[]} -function Vb(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.Ya)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.wa.write)throw new O(28);a.seekable&&a.flags&1024&&Ub(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.wa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Wb(a,b){a="string"==typeof a?a:Bb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Na(a+"/"+c);try{S(d)}catch(e){if(20!=e.Ea)throw e;}a=d}}return d}function Xb(a,b,c,d){a=Na(("string"==typeof a?a:Bb(a))+"/"+b);return Mb(a,ib(c,d))} -function Yb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Bb(a),g=b?Na(a+"/"+b):a);a=ib(d,e);g=Mb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=n.length)return 0;u=Math.min(n.length-w,u);if(n.slice)for(var x=0;xthis.length-1||0>n)){var t=n%this.Kb;return this.cb(n/this.Kb|0)[t]}}vc(n){this.cb=n}Ib(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);200<=n.status&&300>n.status||304===n.status||H("Couldn't load "+c+". Status: "+n.status);var t=Number(n.getResponseHeader("Content-length")), -z,u=(z=n.getResponseHeader("Accept-Ranges"))&&"bytes"===z;n=(z=n.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;u||(w=t);var x=this;x.vc(E=>{var F=E*w,K=(E+1)*w-1;K=Math.min(K,t-1);if("undefined"==typeof x.lb[E]){var y=x.lb;F>K&&H("invalid range ("+F+", "+K+") or no bytes requested!");K>t-1&&H("only "+t+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);t!==w&&J.setRequestHeader("Range","bytes="+F+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||H("Couldn't load "+c+". Status: "+J.status);F=void 0!==J.response?new Uint8Array(J.response||[]):Wa(J.responseText||"");y[E]=F}"undefined"==typeof x.lb[E]&&H("doXHR failed!");return x.lb[E]});if(n||!t)w=t=1,w=t=this.cb(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.Hb=t;this.Gb=w;this.Bb=!0}get length(){this.Bb||this.Ib();return this.Hb}get Kb(){this.Bb|| -this.Ib();return this.Gb}}if(globalThis.XMLHttpRequest){ba||H("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var m=Xb(a,b,d,e);h?m.xa=h:k&&(m.xa=null,m.url=k);Object.defineProperties(m,{Da:{get:function(){return this.xa.length}}});var p={};Object.keys(m.wa).forEach(n=>{var t=m.wa[n];p[n]=(...z)=>{$b(m);return t(...z)}});p.read=(n,t,z,u,w)=>{$b(m);return f(n,t,z,u,w)};p.fb=(n,t,z)=>{$b(m); -var u=db(t);if(!u)throw new O(48);f(n,r,u,t,z);return{za:u,Wa:!0}};m.wa=p;return m}var T={},bc=(a,b,c)=>a?M(v,a,b,c):"";function cc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":R(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function dc(a,b){D[a>>2]=b.Yb;D[a+4>>2]=b.mode;D[a+8>>2]=b.qc;D[a+12>>2]=b.uid;D[a+16>>2]=b.ec;D[a+20>>2]=b.ib;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.Wb;var c=b.Xa.getTime(),d=b.La.getTime(),e=b.Ka.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));D[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));D[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));D[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.hc);return 0}var Ka=void 0,ec={},fc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function gc(a){return this.Fa(D[a>>2])} -var hc={},ic={},jc={},kc=class extends Error{constructor(a){super(a);this.name="InternalError"}},lc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new kc("Mismatched type converter count");for(var k=0;kjc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{ic.hasOwnProperty(h)?e[k]=ic[h]:(f.push(h),hc.hasOwnProperty(h)||(hc[h]=[]),hc[h].push(()=>{e[k]=ic[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},V=a=>{for(var b="";;){var c=v[a++];if(!c)return b; -b+=String.fromCharCode(c)}},W=class extends Error{constructor(a){super(a);this.name="BindingError"}};function mc(a,b,c={}){var d=b.name;if(!a)throw new W(`type "${d}" must have a positive integer typeid pointer`);if(ic.hasOwnProperty(a)){if(c.fc)return;throw new W(`Cannot register type '${d}' twice`);}ic[a]=b;delete jc[a];hc.hasOwnProperty(a)&&(b=hc[a],delete hc[a],b.forEach(e=>e()))}function U(a,b,c={}){return mc(a,b,c)} -var nc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>v[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>D[d>>2];case 8:return c?d=>G[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},oc=a=>{throw new W(a.va.Ca.Ba.name+" instance already deleted");},pc=!1,qc=()=>{},rc=a=>{if(!globalThis.FinalizationRegistry)return rc=b=>b,a;pc=new FinalizationRegistry(b=>{b=b.va;--b.count.value;0===b.count.value&&(b.Ha?b.Ma.Ra(b.Ha):b.Ca.Ba.Ra(b.za))});rc= -b=>{var c=b.va;c.Ha&&pc.register(b,{va:c},b);return b};qc=b=>{pc.unregister(b)};return rc(a)},sc=[];function tc(){} -var uc=(a,b)=>Object.defineProperty(b,"name",{value:a}),vc={},wc=(a,b,c)=>{if(void 0===a[b].Ga){var d=a[b];a[b]=function(...e){if(!a[b].Ga.hasOwnProperty(e.length))throw new W(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ga})!`);return a[b].Ga[e.length].apply(this,e)};a[b].Ga=[];a[b].Ga[d.ab]=d}},xc=(a,b,c)=>{if(l.hasOwnProperty(a)){if(void 0===c||void 0!==l[a].Ga&&void 0!==l[a].Ga[c])throw new W(`Cannot register public name '${a}' twice`);wc(l, -a,a);if(l[a].Ga.hasOwnProperty(c))throw new W(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);l[a].Ga[c]=b}else l[a]=b,l[a].ab=c},yc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function zc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Za=c;this.Ra=d;this.Ja=e;this.ac=f;this.kb=g;this.Zb=h;this.tc=[]} -var Ac=(a,b,c)=>{for(;b!==c;){if(!b.kb)throw new W(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.kb(a);b=b.Ja}return a},Bc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Cc(a,b){if(null===b){if(this.Ab)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.va)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.va.za)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);return Ac(b.va.za,b.va.Ca.Ba,this.Ba)} -function Dc(a,b){if(null===b){if(this.Ab)throw new W(`null is not a valid ${this.name}`);if(this.pb){var c=this.Db();null!==a&&a.push(this.Ra,c);return c}return 0}if(!b||!b.va)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.va.za)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.ob&&b.va.Ca.ob)throw new W(`Cannot convert argument of type ${b.va.Ma?b.va.Ma.name:b.va.Ca.name} to parameter type ${this.name}`);c=Ac(b.va.za,b.va.Ca.Ba,this.Ba);if(this.pb){if(void 0=== -b.va.Ha)throw new W("Passing raw pointer to smart pointer is illegal");switch(this.zc){case 0:if(b.va.Ma===this)c=b.va.Ha;else throw new W(`Cannot convert argument of type ${b.va.Ma?b.va.Ma.name:b.va.Ca.name} to parameter type ${this.name}`);break;case 1:c=b.va.Ha;break;case 2:if(b.va.Ma===this)c=b.va.Ha;else{var d=b.clone();c=this.uc(c,Ec(()=>d["delete"]()));null!==a&&a.push(this.Ra,c)}break;default:throw new W("Unsupporting sharing policy");}}return c} -function Fc(a,b){if(null===b){if(this.Ab)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.va)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.va.za)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.va.Ca.ob)throw new W(`Cannot convert argument of type ${b.va.Ca.name} to parameter type ${this.name}`);return Ac(b.va.za,b.va.Ca.Ba,this.Ba)} -var Gc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Ja)return null;a=Gc(a,b,c.Ja);return null===a?null:c.Zb(a)},Hc={},Ic=(a,b)=>{if(void 0===b)throw new W("ptr should not be undefined");for(;a.Ja;)b=a.kb(b),a=a.Ja;return Hc[b]},Jc=(a,b)=>{if(!b.Ca||!b.za)throw new kc("makeClassHandle requires ptr and ptrType");if(!!b.Ma!==!!b.Ha)throw new kc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return rc(Object.create(a,{va:{value:b,writable:!0}}))}; -function Kc(a,b,c,d,e,f,g,h,k,m,p){this.name=a;this.Ba=b;this.Ab=c;this.ob=d;this.pb=e;this.sc=f;this.zc=g;this.Sb=h;this.Db=k;this.uc=m;this.Ra=p;e||void 0!==b.Ja?this.Ia=Dc:(this.Ia=d?Cc:Fc,this.Na=null)}var Lc=(a,b,c)=>{if(!l.hasOwnProperty(a))throw new kc("Replacing nonexistent public symbol");void 0!==l[a].Ga&&void 0!==c?l[a].Ga[c]=b:(l[a]=b,l[a].ab=c)},X=(a,b)=>{a=V(a);var c=L(b);if("function"!=typeof c)throw new W(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Mc extends Error{}var Pc=a=>{a=Nc(a);var b=V(a);Oc(a);return b},Qc=(a,b)=>{function c(f){e[f]||ic[f]||(jc[f]?jc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Mc(`${a}: `+d.map(Pc).join([", "]));};function Rc(a){for(var b=1;bf)throw new W("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Rc(b),k=!b[0].oc,m=f-2,p=Array(m),n=[],t=[];return uc(a,function(...z){t.length=0;n.length=g?2:1;n[0]=e;if(g){var u=b[1].Ia(t,this);n[1]=u}for(var w=0;w{for(var c=[],d=0;d>2]);return c},Uc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Vc=[],Wc=[0,1,,1,null,1,!0,1,!1,1],Xc=a=>{9{if(!a)throw new W(`Cannot use deleted val. handle = ${a}`);return Wc[a]},Ec=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Vc.pop()||Wc.length;Wc[b]=a;Wc[b+1]=1;return b}},Zc={name:"emscripten::val",Fa:a=>{var b= -Yc(a);Xc(a);return b},Ia:(a,b)=>Ec(b),Sa:gc,Na:null},$c=(a,b)=>{switch(b){case 4:return function(c){return this.Fa(ra[c>>2])};case 8:return function(c){return this.Fa(sa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ad=Object.assign({optional:!0},Zc),bd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,cd=(a,b,c)=>{a>>=1;b=Ta(pa,a,b/2,c);if(16{c??=2147483647; -if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},ed=a=>2*a.length,fd=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=D[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},gd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},hd=a=>{for(var b=0,c=0;c{var b=kd.length;kd.push(a);return b},md=(a,b)=>{for(var c=Array(a),d=0;d>2],g=ic[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Pc(f)}`,new W(a);c[e]=g}return c},nd={},od=a=>{var b=nd[a];return void 0===b?V(a):b},pd=a=>0===a%4&&(0!==a%100||0===a%400),qd=[0,31,60,91,121,152,182,213,244,274,305,335],rd=[0,31,59,90,120,151,181,212,243,273,304,334],sd={},td=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},ud=a=>{ma=a;Ga|| -0{if(!la)try{if(a(),!(Ga||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Ad; -function Bd(a,b,c,d,e){function f(){var I=0,C=0;y.response&&E&&0===D[a+12>>2]&&(C=y.response.byteLength);0>2]=I;Z(a+16,C);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);A[a+40>>1]=y.readyState;A[a+42>>1]=y.status;y.statusText&&N(y.statusText,v,a+44,64);K&&(I=Dd(y.responseURL),D[a+200>>2]=I)}var g=D[a+8>>2];if(g){var h=g?M(v,g):"",k=a+108,m=bc(k+0);m||="GET";var p=D[k+56>>2],n=D[k+68>>2],t=D[k+72>>2];g=D[k+76>>2];var z=D[k+80>>2], -u=D[k+84>>2],w=D[k+88>>2],x=D[k+52>>2],E=!!(x&1),F=!!(x&2),K=!!(x&64);n=n?n?M(v,n):"":void 0;t=t?t?M(v,t):"":void 0;var y=new XMLHttpRequest;y.withCredentials=!!v[k+60];y.open(m,h,!K,n,t);K||(y.timeout=p);y.Nc=h;y.responseType="arraybuffer";z&&(h=z?M(v,z):"",y.overrideMimeType(h));if(g)for(;;){k=D[g>>2];if(!k)break;h=D[g+4>>2];if(!h)break;g+=8;k=k?M(v,k):"";h=h?M(v,h):"";y.setRequestHeader(k,h)}var J=xd(y);D[a>>2]=J;g=u&&w?v.slice(u,u+w):null;y.onload=I=>{Y.has(J)&&(f(),200<=y.status&&300>y.status? -b(a,y,I):c(a,I))};y.onerror=I=>{Y.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Y.has(J)&&c(a,I)};y.onprogress=I=>{if(Y.has(J)){var C=E&&F&&y.response?y.response.byteLength:0,qa=0;0>2]=qa;Z(a+16,C);Z(a+24,I.loaded-C);Z(a+32,I.total);A[a+40>>1]=y.readyState;C=y.status;3<=y.readyState&&0===y.status&&0>1]=C;y.statusText&&N(y.statusText,v,a+44,64);d(a,I);Oc(qa)}};y.onreadystatechange=I=>{if(Y.has(J)){A[a+40>>1]=y.readyState; -2<=y.readyState&&(A[a+42>>1]=y.status);if(!K&&2===y.readyState&&0>2]=C}e(a,I)}};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{D[a>>2]=b;D[a+4>>2]=(b-D[a>>2])/4294967296},Dd=a=>{var b=Va(a)+1,c=Cd(b);c&&N(a,v,c,b);return c}; -function Ed(a,b,c,d){var e=Ad;if(e){var f=D[a+108+64>>2];f||=D[a+8>>2];var g=f?M(v,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;N("Payload Too Large",v,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Fd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Cd(h);v.set(new Uint8Array(g),k);D[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,N("Not Found",v,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found", -v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;D[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found",v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Hd={},Jd=()=>{if(!Id){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Hd)void 0===Hd[b]?delete a[b]:a[b]=Hd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Id=c}return Id},Id;ub=Array(4096);Kb(P,"/");S("/tmp");S("/home");S("/home/web_user"); -(function(){S("/dev");Za(259,{read:()=>0,write:(d,e,f,g)=>g,Pa:()=>0});Nb("/dev/null",259);Ya(1280,ab);Ya(1536,bb);Nb("/dev/tty",1280);Nb("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Qa(a),b=a.byteLength);return a[--b]};Zb("/dev","random",c);Zb("/dev","urandom",c);S("/dev/shm");S("/dev/shm/tmp")})(); -(function(){S("/proc");var a=S("/proc/self");S("/proc/self/fd");Kb({Ua(){var b=fb(a,"fd",16895,73);b.wa={Pa:P.wa.Pa};b.ya={eb(c,d){c=+d;var e=R(c);c={parent:null,Ua:{Rb:"fake"},ya:{jb:()=>e.path},id:c+1};return c.parent=c},Eb(){return Array.from(sb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=tc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof tc&&c instanceof tc))return!1;var d=this.va.Ca.Ba,e=this.va.za;c.va=c.va;var f=c.va.Ca.Ba;for(c=c.va.za;d.Ja;)e=d.kb(e),d=d.Ja;for(;f.Ja;)c=f.kb(c),f=f.Ja;return d===f&&e===c},clone:function(){this.va.za||oc(this);if(this.va.hb)return this.va.count.value+=1,this;var c=rc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.va;c=c(e.call(d,f,{va:{value:{count:g.count,bb:g.bb,hb:g.hb,za:g.za,Ca:g.Ca,Ha:g.Ha,Ma:g.Ma}}})); -c.va.count.value+=1;c.va.bb=!1;return c},["delete"](){this.va.za||oc(this);if(this.va.bb&&!this.va.hb)throw new W("Object already scheduled for deletion");qc(this);var c=this.va;--c.count.value;0===c.count.value&&(c.Ha?c.Ma.Ra(c.Ha):c.Ca.Ba.Ra(c.za));this.va.hb||(this.va.Ha=void 0,this.va.za=void 0)},isDeleted:function(){return!this.va.za},deleteLater:function(){this.va.za||oc(this);if(this.va.bb&&!this.va.hb)throw new W("Object already scheduled for deletion");sc.push(this);this.va.bb=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Kc.prototype,{bc(a){this.Sb&&(a=this.Sb(a));return a},Mb(a){this.Ra?.(a)},Sa:gc,Fa:function(a){function b(){return this.pb?Jc(this.Ba.Za,{Ca:this.sc,za:c,Ma:this,Ha:a}):Jc(this.Ba.Za,{Ca:this,za:a})}var c=this.bc(a);if(!c)return this.Mb(a),null;var d=Ic(this.Ba,c);if(void 0!==d){if(0===d.va.count.value)return d.va.za=c,d.va.Ha=a,d.clone();d=d.clone();this.Mb(a);return d}d=this.Ba.ac(c);d=vc[d];if(!d)return b.call(this);d=this.ob?d.Xb:d.pointerType;var e=Gc(c,this.Ba,d.Ba);return null=== -e?b.call(this):this.pb?Jc(d.Ba.Za,{Ca:d,za:e,Ma:this,Ha:a}):Jc(d.Ba.Za,{Ca:d,za:e})}});(async function(){Y=new yd;nb("library_fetch_init");try{Ad=await zd()}catch(a){Ad=!1}finally{mb("library_fetch_init")}})();wa=l.wasmMemory?l.wasmMemory:new WebAssembly.Memory({initial:(l.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();l.noExitRuntime&&(Ga=l.noExitRuntime);l.preloadPlugins&&(ob=l.preloadPlugins);l.print&&(ja=l.print);l.printErr&&(q=l.printErr);l.wasmBinary&&(ka=l.wasmBinary); -l.thisProgram&&(da=l.thisProgram);if(l.preInit)for("function"==typeof l.preInit&&(l.preInit=[l.preInit]);0{var k=b?Ra(Na(a+"/"+b)):a,m=`cp ${k}`;nb(m);try{var p=c;"string"==typeof c&&(p=await jb(c));p=await pb(p,k);h?.();f||Yb(a,b,p,d,e,g)}finally{mb(m)}};l.FS_unlink=(...a)=>Pb(...a);l.FS_createPath=(...a)=>Wb(...a);l.FS_createDevice=(...a)=>Zb(...a); -l.FS_createDataFile=(...a)=>Yb(...a);l.FS_createLazyFile=(...a)=>ac(...a);var Kd={204249:(a,b,c,d)=>{a=a?M(v,a):"";b=b?M(v,b):"";c=c?M(v,c):"";d=d?M(v,d):"";throw Error(a+b+c+d);},204465:(a,b)=>{a=a?M(v,a):"";b=b?M(v,b):"";throw Error(a+b);},204575:a=>{a=a?M(v,a):"";throw Error(a);},204643:a=>{a=a?M(v,a):"";throw Error(a);}},Nc,Cd,Oc,cb,Ld,Md,Nd,Od,Ja;l.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Td={F:(a,b)=>L(a)(b),t:function(a,b,c){Ka=c;try{var d=R(a);switch(b){case 0:var e=La();if(0>e)break;for(;sb[e];)e++;return Ib(d,e).Ya;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=La(),d.flags|=e,0;case 12:return e=La(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ea}},Z:function(a,b){try{var c=R(a),d=c.node,e=c.wa.Oa;a=e?c:d;e??=d.ya.Oa;Gb(e);var f=e(a);return dc(b,f)}catch(g){if("undefined"==typeof T|| -"ErrnoError"!==g.name)throw g;return-g.Ea}},_:function(a,b,c){Ka=c;try{var d=R(a);switch(b){case 21509:return d.Aa?0:-59;case 21505:if(!d.Aa)return-59;if(d.Aa.Va.jc){a=[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];var e=La();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Aa?0:-59;case 21506:case 21507:case 21508:if(!d.Aa)return-59;if(d.Aa.Va.kc)for(e=La(),a=[],f=0;32> -f;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.Aa)return-59;e=La();return B[e>>2]=0;case 21520:return d.Aa?-28:-59;case 21537:case 21531:e=La();if(!d.wa.ic)throw new O(59);return d.wa.ic(d,b,e);case 21523:if(!d.Aa)return-59;d.Aa.Va.lc&&(f=[24,80],e=La(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.Aa?0:-59;case 21515:return d.Aa?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ea}},X:function(a,b){try{return a=a?M(v,a):"",dc(b,Qb(a, -!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ea}},W:function(a,b,c,d){try{b=b?M(v,b):"";var e=d&256;b=cc(a,b,d&4096);return dc(c,e?Qb(b,!0):Qb(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ea}},u:function(a,b,c,d){Ka=d;try{b=b?M(v,b):"";b=cc(a,b);var e=d?La():0;return Sb(b,c,e).Ya}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ea}},Y:function(a,b){try{return a=a?M(v,a):"",dc(b,Qb(a))}catch(c){if("undefined"== -typeof T||"ErrnoError"!==c.name)throw c;return-c.Ea}},$:()=>H(""),e:a=>{var b=ec[a];delete ec[a];var c=b.Db,d=b.Ra,e=b.Nb,f=e.map(g=>g.dc).concat(e.map(g=>g.xc));lc([a],f,g=>{var h={};e.forEach((k,m)=>{var p=g[m],n=k.cb,t=k.cc,z=g[m+e.length],u=k.wc,w=k.yc;h[k.$b]={read:x=>p.Fa(n(t,x)),write:(x,E)=>{var F=[];u(w,x,z.Ia(F,E));fc(F)},optional:g[m].optional}});return[{name:b.name,Fa:k=>{var m={},p;for(p in h)m[p]=h[p].read(k);d(k);return m},Ia:(k,m)=>{for(var p in h)if(!(p in m||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var n=c();for(p in h)h[p].write(n,m[p]);null!==k&&k.push(d,n);return n},Sa:gc,Na:d}]})},w:(a,b,c,d,e)=>{b=V(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}U(a,{name:b,Fa:f,Ia:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},Sa:nc(b,c,!d),Na:null})},y:(a,b,c,d)=>{b=V(b);U(a,{name:b,Fa:function(e){return!!e},Ia:function(e,f){return f?c:d},Sa:function(e){return this.Fa(v[e])},Na:null})},ja:(a,b,c,d,e,f,g,h,k,m,p,n,t)=>{p=V(p);f=X(e,f);h&&=X(g,h);m&&=X(k,m);t=X(n,t);var z= -yc(p);xc(z,function(){Qc(`Cannot construct ${p} due to unbound types`,[d])});lc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var w=u.Ba;var x=w.Za}else x=tc.prototype;u=uc(p,function(...y){if(Object.getPrototypeOf(this)!==E)throw new W(`Use 'new' to construct ${p}`);if(void 0===F.Lb)throw new W(`${p} has no accessible constructor`);var J=F.Lb[y.length];if(void 0===J)throw new W(`Tried to invoke ctor of ${p} with invalid number of parameters (${y.length}) - expected (${Object.keys(F.Lb).toString()}) parameters instead!`); -return J.apply(this,y)});var E=Object.create(x,{constructor:{value:u}});u.prototype=E;var F=new zc(p,u,E,t,w,f,h,m);if(F.Ja){var K;(K=F.Ja).Fb??(K.Fb=[]);F.Ja.Fb.push(F)}w=new Kc(p,F,!0,!1,!1);K=new Kc(p+"*",F,!1,!1,!1);x=new Kc(p+" const*",F,!1,!0,!1);vc[a]={pointerType:K,Xb:x};Lc(z,u);return[w,K,x]})},l:(a,b,c,d,e,f,g,h)=>{var k=Tc(c,d);b=V(b);b=Uc(b);f=X(e,f);lc([],[a],m=>{function p(){Qc(`Cannot call ${n} due to unbound types`,k)}m=m[0];var n=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&m.Ba.tc.push(b);var t=m.Ba.Za,z=t[b];void 0===z||void 0===z.Ga&&z.className!==m.name&&z.ab===c-2?(p.ab=c-2,p.className=m.name,t[b]=p):(wc(t,b,n),t[b].Ga[c-2]=p);lc([],k,u=>{u=Sc(n,u,m,f,g);void 0===t[b].Ga?(u.ab=c-2,t[b]=u):t[b].Ga[c-2]=u;return[]});return[]})},ka:a=>U(a,Zc),v:(a,b,c)=>{b=V(b);U(a,{name:b,Fa:d=>d,Ia:(d,e)=>e,Sa:$c(b,c),Na:null})},h:(a,b,c,d,e,f)=>{var g=Tc(b,c);a=V(a);a=Uc(a);e=X(d,e);xc(a,function(){Qc(`Cannot call ${a} due to unbound types`,g)},b-1);lc([],g,h=>{Lc(a,Sc(a,[h[0], -null].concat(h.slice(1)),null,e,f),b-1);return[]})},j:(a,b,c,d,e)=>{b=V(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}U(a,{name:b,Fa:f,Ia:(h,k)=>k,Sa:nc(b,c,0!==d),Na:null})},g:(a,b,c)=>{function d(f){return new e(r.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=V(c);U(a,{name:c,Fa:d,Sa:d},{fc:!0})},k:a=>{U(a,ad)},x:(a,b)=>{b=V(b);U(a,{name:b,Fa(c){var d=bc(c+4,D[c>>2],!0); -Oc(c);return d},Ia(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new W("Cannot pass non-string to std::string");var f=e?Va(d):d.length;var g=Cd(4+f+1),h=g+4;D[g>>2]=f;e?N(d,v,h,f+1):v.set(d,h);null!==c&&c.push(Oc,g);return g},Sa:gc,Na(c){Oc(c)}})},p:(a,b,c)=>{c=V(c);if(2===b){var d=cd;var e=dd;var f=ed}else d=fd,e=gd,f=hd;U(a,{name:c,Fa:g=>{var h=d(g+4,D[g>>2]*b,!0);Oc(g);return h},Ia:(g,h)=>{if("string"!= -typeof h)throw new W(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),m=Cd(4+k+b);D[m>>2]=k/b;e(h,m+4,k+b);null!==g&&g.push(Oc,m);return m},Sa:gc,Na(g){Oc(g)}})},f:(a,b,c,d,e,f)=>{ec[a]={name:V(b),Db:X(c,d),Ra:X(e,f),Nb:[]}},b:(a,b,c,d,e,f,g,h,k,m)=>{ec[a].Nb.push({$b:V(b),dc:c,cb:X(d,e),cc:f,xc:g,wc:X(h,k),yc:m})},z:(a,b)=>{b=V(b);U(a,{oc:!0,name:b,Fa:()=>{},Ia:()=>{}})},H:()=>{Ga=!1;jd=0},E:()=>{throw Infinity;},d:(a,b,c)=>{var [d,...e]=md(a,b),f=d.Ia.bind(d),g=e.map(k=>k.Sa.bind(k)); -a--;var h=Array(a);b=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return ld(uc(b,(k,m,p,n)=>{for(var t=0,z=0;z>2]=Ec(k));return u}))},ia:Xc,fa:a=>{if(!a)return Ec(globalThis);a=od(a);return Ec(globalThis[a])},i:(a,b)=>{a=Yc(a);b=Yc(b);return Ec(a[b])},O:a=>{9kd[a](b, -c,d,e),ha:()=>Ec([]),ga:a=>Ec(od(a)),D:a=>{var b=Yc(a);fc(b);Xc(a)},P:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(pd(a.getFullYear())?qd:rd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},Q:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(pd(b.getFullYear())? -qd:rd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},M:function(a,b,c,d,e,f,g){e=-9007199254740992>e||9007199254740992>2]=k.Wa;D[g>>2]=m;return 0}catch(p){if("undefined"==typeof T||"ErrnoError"!==p.name)throw p;return-p.Ea}},N:function(a,b,c,d,e,f){f=-9007199254740992>f||9007199254740992{sd[a]&&(clearTimeout(sd[a].id),delete sd[a]);if(!b)return 0;var c=setTimeout(()=>{delete sd[a];vd(()=> -Ld(a,performance.now()))},b);sd[a]={id:c,Mc:b};return 0},R:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();D[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0=== -a?Date.now():performance.now())));return 0},m:(a,b,c)=>{wd.length=0;for(var d;d=v[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;wd.push(112==d?D[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]:sa[c>>3]);c+=e?8:4}return Kd[a](...wd)},aa:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.Wa[a]=void 0;c.Ob.push(a);0b.readyState&&b.abort()}},L:()=>2147483648,n:()=>performance.now(),ca:()=>!ba,K:a=>{var b=v.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536* -Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},ba:function(a,b,c,d,e){function f(C){t?C():vd(C)}var g=a+108,h=D[g+36>>2],k=D[g+40>>2],m=D[g+44>>2],p=D[g+48>>2],n=D[g+52>>2],t=!!(n&64),z=C=>{f(()=>{h?L(h)(C):b?.(C)})},u=C=>{f(()=>{m?L(m)(C):d?.(C)})},w=C=>{f(()=>{k?L(k)(C):c?.(C)})},x=C=>{f(()=>{p?L(p)(C):e?.(C)})},E=C=>{Bd(C,z,w,u,x)},F=(C,qa)=>{Ed(C,qa.response,Ia=>{f(()=>{h?L(h)(Ia):b?.(Ia)})}, -Ia=>{f(()=>{h?L(h)(Ia):b?.(Ia)})})},K=C=>{Bd(C,F,w,u,x)},y=bc(g+0),J=!!(n&16),I=!!(n&4);n=!!(n&32);if("EM_IDB_STORE"===y)E=D[g+84>>2],Ed(a,v.slice(E,E+D[g+88>>2]),z,w);else if("EM_IDB_DELETE"===y)Gd(a,z,w);else if(J){if(n)return 0;Bd(a,I?F:z,w,u,x)}else Fd(a,z,n?w:I?K:E);return a},U:(a,b)=>{var c=0,d=0,e;for(e of Jd()){var f=b+c;D[a+d>>2]=f;c+=N(e,v,f,Infinity)+1;d+=4}return 0},V:(a,b)=>{var c=Jd();D[a>>2]=c.length;a=0;for(var d of c)a+=Va(d)+1;D[b>>2]=a;return 0},ea:a=>{ma=a;ud(a)},o:function(a){try{var b= -R(a);Tb(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ea}},s:function(a,b,c,d){try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var m=e,p=h,n=k,t=f,z=r;if(0>n||0>t)throw new O(28);if(null===m.Ya)throw new O(8);if(1===(m.flags&2097155))throw new O(8);if(Q(m.node.mode))throw new O(31);if(!m.wa.read)throw new O(28);var u="undefined"!=typeof t;if(!u)t=m.position;else if(!m.seekable)throw new O(70);var w=m.wa.read(m,z,p,n,t);u||(m.position+= -w);var x=w;if(0>x){var E=-1;break a}b+=x;if(x>2]=E;return 0}catch(F){if("undefined"==typeof T||"ErrnoError"!==F.name)throw F;return F.Ea}},T:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.zb&&0===b&&0===c&&(e.zb=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.Ea}},r:function(a,b,c,d){try{a:{var e=R(a);a=b;for(var f, -g=b=0;g>2],k=D[a+4>>2];a+=8;var m=Vb(e,r,h,k,f);if(0>m){var p=-1;break a}b+=m;if(m>2]=p;return 0}catch(n){if("undefined"==typeof T||"ErrnoError"!==n.name)throw n;return n.Ea}},da:function(){var a=stackTrace(),b=Va(a)+1,c=Cd(b);N(a,v,c,b);return c},A:Pd,q:Qd,B:Rd,C:Sd,a:wa,G:ud,J:function(a,b){try{return Qa(v.subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ea}}}; -function Qd(a,b){var c=Od();try{L(a)(b)}catch(d){Nd(c);if(d!==d+0)throw d;Md(1,0)}}function Sd(a,b,c,d){var e=Od();try{L(a)(b,c,d)}catch(f){Nd(e);if(f!==f+0)throw f;Md(1,0)}}function Rd(a,b,c){var d=Od();try{L(a)(b,c)}catch(e){Nd(d);if(e!==e+0)throw e;Md(1,0)}}function Pd(a,b,c,d){var e=Od();try{return L(a)(b,c,d)}catch(f){Nd(e);if(f!==f+0)throw f;Md(1,0)}} -function Ud(){function a(){l.calledRun=!0;if(!la){ua=!0;if(!l.noFSInit&&!vb){var b,c;vb=!0;b??=l.stdin;c??=l.stdout;d??=l.stderr;b?Zb("/dev","stdin",b):Ob("/dev/tty","/dev/stdin");c?Zb("/dev","stdout",null,c):Ob("/dev/tty","/dev/stdout");d?Zb("/dev","stderr",null,d):Ob("/dev/tty1","/dev/stderr");Sb("/dev/stdin",0);Sb("/dev/stdout",1);Sb("/dev/stderr",1)}Vd.la();wb=!1;na?.(l);l.onRuntimeInitialized?.();if(l.postRun)for("function"==typeof l.postRun&&(l.postRun=[l.postRun]);l.postRun.length;){var d= -l.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>l.setStatus(""),1);a()},1)):a()}}var Vd; -Vd=await (async function(){function a(c){c=Vd=c.exports;Nc=c.ma;Cd=c.na;Oc=c.oa;cb=c.qa;Ld=c.ra;Md=c.sa;Nd=c.ta;Od=c.ua;Ja=c.pa;return Vd}var b={a:Td};if(l.instantiateWasm)return new Promise(c=>{l.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=l.locateFile?l.locateFile?l.locateFile("BlinkCardModule.wasm",fa):fa+"BlinkCardModule.wasm":(new URL("BlinkCardModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Ud();moduleRtn=ua?l:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkcard-wasm/dist/basic/BlinkCardModule.wasm b/packages/blinkcard-wasm/dist/basic/BlinkCardModule.wasm deleted file mode 100755 index 9570f2d7..00000000 Binary files a/packages/blinkcard-wasm/dist/basic/BlinkCardModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.data b/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.data similarity index 59% rename from packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.data rename to packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.data index f7fb2264..2392f4a8 100644 Binary files a/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.data and b/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.data differ diff --git a/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.js b/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.js new file mode 100644 index 00000000..62565f56 --- /dev/null +++ b/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.js @@ -0,0 +1,107 @@ +async function createModule(moduleArg={}){var Module=moduleArg;var aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,h=ba&&globalThis.name=="em-pthread";Module.expectedDataFileDownloads||(Module.expectedDataFileDownloads=0);Module.expectedDataFileDownloads++;(()=>{var a=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;typeof h!="undefined"&&h||a||async function(b){async function c(m,n){Module.dataFileDownloads||(Module.dataFileDownloads={});try{var l=await fetch(m)}catch(B){throw Error(`Network Error: ${m}`,{e:B});}if(!l.ok)throw Error(`${l.status}: ${l.url}`); +var q=[];n=Number(l.headers.get("Content-Length")||n);var r=0;Module.setStatus&&Module.setStatus("Downloading data...");for(l=l.body.getReader();;){var t;({done:t,value:u}=await l.read());if(t)break;q.push(u);r+=u.length;Module.dataFileDownloads[m]={loaded:r,total:n};var u=t=0;for(var v of Object.values(Module.dataFileDownloads))t+=v.loaded,u+=v.total;Module.setStatus&&Module.setStatus(`Downloading data... (${t}/${u})`)}m=new Uint8Array(q.map(B=>B.length).reduce((B,G)=>B+G,0));v=0;for(let B of q)m.set(B, +v),v+=B.length;return m.buffer}async function d(m){m.FS_createPath("/","microblink",!0,!0);m.FS_createPath("/microblink","blinkcard",!0,!0);m.addRunDependency("datafile_bazel-out/wasm-opt-ST-ca8fd47425d1/bin/packages/blinkcard-wasm/binding/simd-threads/BlinkCardModule.data");m.preloadResults||(m.preloadResults={});m.preloadResults["bazel-out/wasm-opt-ST-ca8fd47425d1/bin/packages/blinkcard-wasm/binding/simd-threads/BlinkCardModule.data"]={xd:!1};k||=await g;await async function(n){if(!n)throw Error("Loading data file failed."); +if(n.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData "+n.constructor.name);n=new Uint8Array(n);for(var l of b.files)m.FS_createDataFile(l.filename,null,n.subarray(l.start,l.end),!0,!0,!0);m.removeRunDependency("datafile_bazel-out/wasm-opt-ST-ca8fd47425d1/bin/packages/blinkcard-wasm/binding/simd-threads/BlinkCardModule.data")}(k)}typeof window==="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):typeof process=== +"undefined"&&typeof location!=="undefined"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=Module.locateFile?Module.locateFile("BlinkCardModule.data",""):"BlinkCardModule.data",f=b.remote_package_size,g,k=Module.getPreloadedPackage&&Module.getPreloadedPackage(e,f);k||(g=c(e,f));Module.FS_createPath?d(Module):(Module.preRun||(Module.preRun=[]),Module.preRun.push(d))}({files:[{filename:"/microblink/blinkcard/Model_0d310639.strop",start:0,end:758096}, +{filename:"/microblink/blinkcard/Model_1aafbaf8.strop",start:758096,end:806794},{filename:"/microblink/blinkcard/Model_2b2bfd02.strop",start:806794,end:1007025},{filename:"/microblink/blinkcard/Model_3ec17c77.strop",start:1007025,end:2456766},{filename:"/microblink/blinkcard/Model_4cf0c927.strop",start:2456766,end:2790168},{filename:"/microblink/blinkcard/Model_54df55fc.strop",start:2790168,end:2794366},{filename:"/microblink/blinkcard/Model_60fc9f0c.strop",start:2794366,end:3575077},{filename:"/microblink/blinkcard/Model_6bb8569f.strop", +start:3575077,end:3832452},{filename:"/microblink/blinkcard/Model_7d1c3b79.strop",start:3832452,end:3900260},{filename:"/microblink/blinkcard/Model_81826329.strop",start:3900260,end:4169376},{filename:"/microblink/blinkcard/Model_9d50becd.strop",start:4169376,end:7011021},{filename:"/microblink/blinkcard/Model_a91e7e31.strop",start:7011021,end:7280563},{filename:"/microblink/blinkcard/Model_a958c31c.strop",start:7280563,end:7625651},{filename:"/microblink/blinkcard/Model_aa452ab8.strop",start:7625651, +end:8461113},{filename:"/microblink/blinkcard/Model_bdf3050e.strop",start:8461113,end:8545219},{filename:"/microblink/blinkcard/Model_c8930677.strop",start:8545219,end:8564849},{filename:"/microblink/blinkcard/Model_caa82284.strop",start:8564849,end:10821885},{filename:"/microblink/blinkcard/bin-database_1.0.zzip",start:10821885,end:12191737}],remote_package_size:12191737})})();var ca=import.meta.url,da="",ea,fa;if(aa||ba){try{da=(new URL(".",ca)).href}catch{}ba&&(fa=a=>{var b=new XMLHttpRequest; +b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ea=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ia=console.log.bind(console),p=console.error.bind(console),ja,ka,la=!1,ma;class na{}class oa extends na{}function w(){x.buffer!=y.buffer&&pa()}var qa;if(h){var ra=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.ub;if(d==1){let e=[];self.onmessage= +f=>e.push(f);qa=()=>{postMessage({ub:3});for(let f of e)a(f);self.onmessage=a};for(let f of c.Oc)if(!Module[f]||Module[f].proxy)Module[f]=(...g)=>{postMessage({ub:9,Nc:f,Ac:g})},f=="print"&&(ia=Module[f]),f=="printErr"&&(p=Module[f]);x=c.od;pa();ka=c.pd;sa();ta()}else if(d==2){ua(c.rb);va(c.rb,0,0,1,0,0);wa();xa(c.rb);ra||(ya(),ra=!0);try{za(c.kd,c.Yb)}catch(e){if(e!="unwind")throw e;}}else d==4?ra&&Aa():d&&(p(`worker: received unknown command ${d}`),p(c))}catch(e){throw Ba&&Ca(),e;}}self.onmessage= +a}var Ba=!1;function pa(){if(!y?.buffer?.yd){var a=x.buffer;y=new Int8Array(a);z=new Int16Array(a);A=new Uint8Array(a);Da=new Uint16Array(a);D=new Int32Array(a);E=new Uint32Array(a);Ea=new Float32Array(a);Fa=new Float64Array(a);H=new BigInt64Array(a);Ga=new BigUint64Array(a)}}function Ha(){Ba=!0;h?qa():(Module.noFSInit||Ia||(Ia=!0,Ja("/dev/tty","/dev/stdin"),Ja("/dev/tty","/dev/stdout"),Ja("/dev/tty1","/dev/stderr"),Ka("/dev/stdin",0),Ka("/dev/stdout",1),Ka("/dev/stderr",1)),La.xa(),Ma=!1)}function I(a){Module.onAbort?.(a); +a=`Aborted(${a})`;p(a);la=!0;throw new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");}var Na;async function Oa(a){if(!ja)try{var b=await ea(a);return new Uint8Array(b)}catch{}if(a==Na&&ja)a=new Uint8Array(ja);else if(fa)a=fa(a);else throw"both async and sync fetching of the wasm failed";return a}async function Pa(a,b){try{var c=await Oa(a);return await WebAssembly.instantiate(c,b)}catch(d){p(`failed to asynchronously prepare wasm: ${d}`),I(d)}}async function Qa(a){var b=Na; +if(!ja)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){p(`wasm streaming compile failed: ${d}`),p("falling back to ArrayBuffer instantiation")}return Pa(b,a)}function Ra(){Sa={J:Ta,m:Ua,R:Va,y:Wa,ga:Xa,ha:Ya,ea:Za,da:$a,x:ab,fa:bb,ka:cb,f:db,A:eb,oa:fb,la:gb,l:hb,ma:ib,z:jb,h:kb,i:lb,g:mb,j:nb,na:ob,r:pb,e:qb,b:rb,pa:sb,_:tb,P:ub,v:vb,L:wb,t:xb,Z:xa,ja:yb,I:zb,d:Ab,$:Bb,qa:Cb,k:Db,va:Eb,c:Fb,ua:Gb,ta:Hb,wa:Ib,U:Jb,V:Kb,S:Lb,T:Mb,M:Nb,W:Ob, +E:Pb,X:Qb,o:Rb,u:Sb,ia:Tb,B:Ub,Q:Vb,n:Wb,C:Xb,O:Yb,ra:Zb,ba:$b,ca:ac,D:bc,q:cc,aa:dc,w:ec,Y:fc,p:hc,F:ic,s:jc,G:kc,H:lc,a:x,K:mc,N:nc,sa:oc};return{a:Sa}}async function sa(){function a(c,d){La=c.exports;pc.push(La.Fa);c=La;qc=c.ya;rc=c.za;sc=Module._mbPingRequestFinished=c.Aa;J=c.Ba;tc=c.Da;ya=c.Ea;uc=c.Ga;va=c.Ia;Ca=c.Ka;vc=c.La;wc=c.Ma;xc=c.Na;yc=c.Oa;zc=c.Pa;Ac=c.Qa;Bc=c.Ra;Cc=c.Sa;Dc=c.Ta;Ec=c.Ua;Fc=c.Va;Module.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=c.Ca.value;Gc=c.Ha;ka=d; +return La}var b=Ra();if(h)return b=new WebAssembly.Instance(ka,Ra()),a(b,ka);Na??=Module.locateFile?Module.locateFile?Module.locateFile("BlinkCardModule.wasm",da):da+"BlinkCardModule.wasm":(new URL("BlinkCardModule.wasm",import.meta.url)).href;return function(c){return a(c.instance,c.module)}(await Qa(b))}class Hc{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}var z,D,H,y,Ea,Fa,Da,E,Ga,A,Ic=a=>{a.terminate();a.onmessage=()=>{}},Jc=[],Kc=null,Lc=async()=> +Kc,Mc=0,Nc=()=>{Mc--;Mc||Kc.resolve()},Oc=()=>{if(!Mc){var a;Kc=new Promise(b=>a=b);Kc.resolve=a}Mc++},Sc=a=>{if(Pc.length==0){var b=Qc();Rc(b)}b=Pc.pop();if(!b)return 6;K[a.rb]=b;b.rb=a.rb;b.postMessage({ub:2,kd:a.jd,Yb:a.Yb,rb:a.rb},a.md);return 0},L=0,M=(a,b,...c)=>{var d=8*c.length*2,e=Fc(),f=Ec(d),g=f>>3,k;for(k of c)typeof k=="bigint"?((w(),H)[g++]=1n,(w(),H)[g++]=k):((w(),H)[g++]=0n,(w(),Fa)[g++]=k);a=wc(a,0,d,f,b);Dc(e);return a};function mc(a){if(h)return M(0,1,a);ma=a;if(!(Tc||L>0)){for(var b of Object.values(K))Ic(b); +for(b of Pc)Ic(b);Pc=[];K={};la=!0}throw new Hc(a);}function Uc(a){if(h)return M(1,0,a);bc(a)}var bc=a=>{ma=a;if(h)throw Uc(a),"unwind";mc(a)},Vc=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)||[])[2])<91,Pc=[],pc=[],K={};function Wc(){for(var a=Math.min(navigator.hardwareConcurrency,16);a--;)Qc();Jc.push(async()=>{var b=Xc();Oc("loading-workers");await b;Nc("loading-workers")})}var Yc=a=>{var b=a.rb;delete K[b];Pc.push(a);a.rb=0; +xc(b)};function wa(){pc.forEach(a=>a())}var Rc=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.ub;if(g.zc)K[g.zc]?.postMessage(g);else if(g==="setimmediate"||g==="_si")a.postMessage(g);else switch(f){case 4:Aa();break;case 5:Sc(g);break;case 6:Zc(()=>{Yc(K[g.ld])});break;case 3:b(a);break;case 9:Module[g.Nc](...g.Ac);break;default:f&&p(`worker sent an unknown command ${f}`)}};a.onerror=f=>{p(`worker sent an error! ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onAbort","printErr"], +e;for(e of d)Module.propertyIsEnumerable(e)&&c.push(e);a.postMessage({ub:1,Oc:c,od:x,pd:ka})});async function Xc(){if(!h)return Promise.all(Pc.map(Rc))}function Qc(){if(Module.mainScriptUrlOrBlob){var a=Module.mainScriptUrlOrBlob;typeof a!="string"&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkCardModule",import.meta.url),{type:"module",name:"em-pthread"});Pc.push(a);return a}function ua(a){var b=(w(),E)[a+48>>2];a=(w(),E)[a+52>>2];Cc(b, +b-a);Dc(b)}var $c=[],N=a=>{var b=$c[a];b||($c[a]=b=Gc.get(a));return b},za=(a,b)=>{Tc=L=0;a=N(a)(b);Tc||L>0?ma=a:yc(a)},Tc=!0,x,Ta=(a,b)=>N(a)(b);class ad{constructor(a){this.Ya=a-24}init(a,b){(w(),E)[this.Ya+16>>2]=0;(w(),E)[this.Ya+4>>2]=a;(w(),E)[this.Ya+8>>2]=b}}var bd=0,Ua=(a,b,c)=>{(new ad(a)).init(b,c);bd++;I()};function cd(a,b,c,d){return h?M(2,1,a,b,c,d):Va(a,b,c,d)}var Xb=()=>!!globalThis.SharedArrayBuffer,Va=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(h&&e.length=== +0)return cd(a,b,c,d);a={jd:c,rb:a,Yb:d,md:e};return h?(a.ub=5,postMessage(a,e),0):Sc(a)},O=()=>{var a=(w(),D)[+dd>>2];dd+=4;return a},ed=(a,b)=>{for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];e==="."?a.splice(d,1):e===".."?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},fd=a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=ed(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},gd=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1); +a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},hd=()=>a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),0),jd=a=>(jd=hd())(a),kd=(...a)=>{for(var b="",c=!1,d=a.length-1;d>=-1&&!c;d--){c=d>=0?a[d]:"/";if(typeof c!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=ed(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},ld=globalThis.TextDecoder&&new TextDecoder,md=(a,b,c,d)=>{c=b+c;if(d)return c; +for(;a[b]&&!(b>=c);)++b;return b},nd=(a,b=0,c,d)=>{c=md(a,b,c,d);if(c-b>16&&a.buffer&&ld)return ld.decode(a.buffer instanceof ArrayBuffer?a.subarray(b,c):a.slice(b,c));for(d="";b>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},od=[], +pd=a=>{for(var b=0,c=0;c=55296&&d<=57343?(b+=4,++c):b+=3}return b},qd=(a,b,c,d)=>{if(!(d>0))return 0;var e=c;d=c+d-1;for(var f=0;f=d)break;b[c++]=g}else if(g<=2047){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(g<=65535){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128| +g&63;f++}}b[c]=0;return c-e},rd=a=>{var b=Array(pd(a)+1);a=qd(a,b,0,b.length);b.length=a;return b},sd=[];function td(a,b){sd[a]={input:[],output:[],xb:b};ud(a,wd)}var wd={open(a){var b=sd[a.node.Kb];if(!b)throw new P(43);a.$a=b;a.seekable=!1},close(a){a.$a.xb.Pb(a.$a)},Pb(a){a.$a.xb.Pb(a.$a)},read(a,b,c,d){if(!a.$a||!a.$a.xb.tc)throw new P(60);for(var e=0,f=0;f0&&(ia(nd(a.output)), +a.output=[])},Sc(){return{sd:25856,ud:5,rd:191,td:35387,qd:[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]}},Tc(){return 0},Uc(){return[24,80]}},yd={dc(a,b){b===null||b===10?(p(nd(a.output)),a.output=[]):b!=0&&a.output.push(b)},Pb(a){a.output?.length>0&&(p(nd(a.output)),a.output=[])}},zd=a=>{a=Math.ceil(a/65536)*65536;var b=uc(65536,a);b&&(w(),A).fill(0,b,b+a);return b},Q={qb:null,wb(){return Q.createNode(null,"/",16895,0)},createNode(a,b,c,d){if((c&61440)===24576||(c& +61440)===4096)throw new P(63);Q.qb||(Q.qb={dir:{node:{ob:Q.Xa.ob,yb:Q.Xa.yb,Gb:Q.Xa.Gb,Sb:Q.Xa.Sb,xc:Q.Xa.xc,Wb:Q.Xa.Wb,yc:Q.Xa.yc,fc:Q.Xa.fc,Vb:Q.Xa.Vb},stream:{pb:Q.Wa.pb}},file:{node:{ob:Q.Xa.ob,yb:Q.Xa.yb},stream:{pb:Q.Wa.pb,read:Q.Wa.read,write:Q.Wa.write,Hb:Q.Wa.Hb,Tb:Q.Wa.Tb}},link:{node:{ob:Q.Xa.ob,yb:Q.Xa.yb,Lb:Q.Xa.Lb},stream:{}},nc:{node:{ob:Q.Xa.ob,yb:Q.Xa.yb},stream:Ad}});c=Bd(a,b,c,d);R(c.mode)?(c.Xa=Q.qb.dir.node,c.Wa=Q.qb.dir.stream,c.Za={}):(c.mode&61440)===32768?(c.Xa=Q.qb.file.node, +c.Wa=Q.qb.file.stream,c.ib=0,c.Za=Q.Gc??(Q.Gc=new Uint8Array(0))):(c.mode&61440)===40960?(c.Xa=Q.qb.link.node,c.Wa=Q.qb.link.stream):(c.mode&61440)===8192&&(c.Xa=Q.qb.nc.node,c.Wa=Q.qb.nc.stream);c.zb=c.lb=c.kb=Date.now();a&&(a.Za[b]=c,a.zb=a.lb=a.kb=c.zb);return c},Xa:{ob(a){var b={};b.Ec=(a.mode&61440)===8192?a.id:1;b.Qc=a.id;b.mode=a.mode;b.Zc=1;b.uid=0;b.Mc=0;b.Kb=a.Kb;b.size=R(a.mode)?4096:(a.mode&61440)===32768?a.ib:(a.mode&61440)===40960?a.link.length:0;b.zb=new Date(a.zb);b.lb=new Date(a.lb); +b.kb=new Date(a.kb);b.Bc=4096;b.Cc=Math.ceil(b.size/b.Bc);return b},yb(a,b){for(var c of["mode","atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!==void 0&&(b=b.size,a.ib!=b&&(c=a.Za,a.Za=new Uint8Array(b),a.Za.set(c.subarray(0,Math.min(b,a.ib))),a.ib=b))},Gb(){Q.Zb||(Q.Zb=new P(44),Q.Zb.stack="");throw Q.Zb;},Sb(a,b,c,d){return Q.createNode(a,b,c,d)},xc(a,b,c){try{var d=Cd(b,c)}catch(f){}if(d){if(R(a.mode))for(var e in d.Za)throw new P(55);Dd(d)}delete a.parent.Za[a.name]; +b.Za[c]=a;a.name=c;b.kb=b.lb=a.parent.kb=a.parent.lb=Date.now()},Wb(a,b){delete a.Za[b];a.kb=a.lb=Date.now()},yc(a,b){var c=Cd(a,b),d;for(d in c.Za)throw new P(55);delete a.Za[b];a.kb=a.lb=Date.now()},fc(a){return[".","..",...Object.keys(a.Za)]},Vb(a,b,c){a=Q.createNode(a,b,41471,0);a.link=c;return a},Lb(a){if((a.mode&61440)!==40960)throw new P(28);return a.link}},Wa:{read(a,b,c,d,e){if(e>=a.node.ib)return 0;d=Math.min(a.node.ib-e,d);b.set(a.node.Za.subarray(e,e+d),c);return d},write(a,b,c,d,e,f){b.buffer=== +(w(),y).buffer&&(f=!1);if(!d)return 0;a=a.node;a.lb=a.kb=Date.now();if(f)a.Za=b.subarray(c,c+d),a.ib=d;else if(a.ib===0&&e===0)a.Za=b.slice(c,c+d),a.ib=d;else{f=e+d;var g=a.Za.length;g>=f||(f=Math.max(f,g*(g<1048576?2:1.125)>>>0),g&&(f=Math.max(f,256)),g=a.Za.subarray(0,a.ib),a.Za=new Uint8Array(f),a.Za.set(g));a.Za.set(b.subarray(c,c+d),e);a.ib=Math.max(a.ib,e+d)}return d},pb(a,b,c){c===1?b+=a.position:c===2&&(a.node.mode&61440)===32768&&(b+=a.node.ib);if(b<0)throw new P(28);return b},Hb(a,b,c,d, +e){if((a.node.mode&61440)!==32768)throw new P(43);a=a.node.Za;if(e&2||a.buffer!==(w(),y).buffer){d=!0;e=zd(b);if(!e)throw new P(48);if(a){if(c>0||c+b{var c=0;a&&(c|=365);b&&(c|=146);return c},Fd=async a=>{a=await ea(a);return new Uint8Array(a)},Gd=[],Hd=async(a,b)=>{typeof Browser!="undefined"&&Browser.init(); +for(var c of Gd)if(c.canHandle(b))return c.handle(a,b);return a},Id=null,Jd={},Kd=[],Ld=1,Md=null,Ia=!1,Ma=!0,P=class{name="ErrnoError";constructor(a){this.cb=a}},Nd=class{shared={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},Od=class{Xa={};Wa={};Ub=365;Xb=146;Ib=null;constructor(a,b,c,d){a||=this;this.parent=a;this.wb=a.wb; +this.id=Ld++;this.name=b;this.mode=c;this.Kb=d;this.zb=this.lb=this.kb=Date.now()}get read(){return(this.mode&this.Ub)===this.Ub}set read(a){a?this.mode|=this.Ub:this.mode&=~this.Ub}get write(){return(this.mode&this.Xb)===this.Xb}set write(a){a?this.mode|=this.Xb:this.mode&=~this.Xb}get Wc(){return R(this.mode)}get Vc(){return(this.mode&61440)===8192}};function Pd(a,b={}){if(!a)throw new P(44);b.$b??(b.$b=!0);a.charAt(0)==="/"||(a="//"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(k=>!!k);for(var d= +Id,e="/",f=0;f>>0)%Md.length}function Dd(a){var b=Rd(a.parent.id,a.name);if(Md[b]===a)Md[b]=a.Cb;else for(b=Md[b];b;){if(b.Cb===a){b.Cb=a.Cb;break}b=b.Cb}}function Cd(a,b){var c=R(a.mode)?(c=Sd(a,"x"))?c:a.Xa.Gb?0:2:54;if(c)throw new P(c);for(c=Md[Rd(a.id,b)];c;c=c.Cb){var d=c.name;if(c.parent.id=== +a.id&&d===b)return c}return a.Xa.Gb(a,b)}function Bd(a,b,c,d){a=new Od(a,b,c,d);b=Rd(a.parent.id,a.name);a.Cb=Md[b];return Md[b]=a}function R(a){return(a&61440)===16384}function Sd(a,b){return Ma?0:b.includes("r")&&!(a.mode&292)||b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73)?2:0}function Td(a,b){if(!R(a.mode))return 54;try{return Cd(a,b),20}catch(c){}return Sd(a,"wx")}function Ud(a){if(!a)throw new P(63);return a}function S(a){a=Kd[a];if(!a)throw new P(8);return a}function Vd(a,b= +-1){a=Object.assign(new Nd,a);if(b==-1)a:{for(b=0;b<=4096;b++)if(!Kd[b])break a;throw new P(33);}a.Ab=b;return Kd[b]=a}function Wd(a,b=-1){a=Vd(a,b);a.Wa?.wd?.(a);return a}function Xd(a,b){var c=void 0,d=c?null:a;c??=a.Xa.yb;Ud(c);try{c(d,b)}catch(e){if(e instanceof RangeError)throw new P(22);throw e;}}var Ad={open(a){a.Wa=Jd[a.node.Kb].Wa;a.Wa.open?.(a)},pb(){throw new P(70);}};function ud(a,b){Jd[a]={Wa:b}}function Yd(a,b){var c=b==="/";if(c&&Id)throw new P(10);if(!c&&b){var d=Pd(b,{$b:!1});b=d.path; +d=d.node;if(d.Ib)throw new P(10);if(!R(d.mode))throw new P(54);}b={type:a,zd:{},vc:b,Yc:[]};a=a.wb(b);a.wb=b;b.root=a;c?Id=a:d&&(d.Ib=b,d.wb&&d.wb.Yc.push(b))}function Zd(a,b,c){var d=Pd(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new P(28);if(a==="."||a==="..")throw new P(20);var e=Td(d,a);if(e)throw new P(e);if(!d.Xa.Sb)throw new P(63);return d.Xa.Sb(d,a,b,c)}function $d(a,b=438){return Zd(a,b&4095|32768,0)}function T(a){return Zd(a,16895,0)}function ae(a,b,c){typeof c=="undefined"&& +(c=b,b=438);return Zd(a,b|8192,c)}function Ja(a,b){if(!kd(a))throw new P(44);var c=Pd(b,{parent:!0}).node;if(!c)throw new P(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Td(c,b);if(d)throw new P(d);if(!c.Xa.Vb)throw new P(63);c.Xa.Vb(c,b,a)}function be(a){var b=Pd(a,{parent:!0}).node;if(!b)throw new P(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=Cd(b,a);a:{try{var d=Cd(b,a)}catch(f){d=f.cb;break a}var e=Sd(b,"wx");d=e?e:R(d.mode)?31:0}if(d)throw new P(d);if(!b.Xa.Wb)throw new P(63);if(c.Ib)throw new P(10); +b.Xa.Wb(b,a);Dd(c)}function ce(a,b){a=Pd(a,{Ob:!b}).node;return Ud(a.Xa.ob)(a)}function de(a,b){a=typeof a=="string"?Pd(a,{Ob:!0}).node:a;Xd(a,{mode:b&4095|a.mode&-4096,kb:Date.now(),vd:void 0})}function Ka(a,b,c=438){if(a==="")throw new P(44);if(typeof b=="string"){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof d=="undefined")throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if(typeof a=="object")d=a;else{var e=a.endsWith("/");var f=Pd(a,{Ob:!(b&131072),$c:!0}); +d=f.node;a=f.path}f=!1;if(b&64)if(d){if(b&128)throw new P(20);}else{if(e)throw new P(31);d=Zd(a,c|511,0);f=!0}if(!d)throw new P(44);(d.mode&61440)===8192&&(b&=-513);if(b&65536&&!R(d.mode))throw new P(54);if(!f&&(d?(d.mode&61440)===40960?e=32:(e=["r","w","rw"][b&3],b&512&&(e+="w"),e=R(d.mode)&&(e!=="r"||b&576)?31:Sd(d,e)):e=44,e))throw new P(e);if(b&512&&!f){e=d;e=typeof e=="string"?Pd(e,{Ob:!0}).node:e;if(R(e.mode))throw new P(31);if((e.mode&61440)!==32768)throw new P(28);if(a=Sd(e,"w"))throw new P(a); +Xd(e,{size:0,timestamp:Date.now()})}b=Vd({node:d,path:Qd(d),flags:b&-131713,seekable:!0,position:0,Wa:d.Wa,nd:[],error:!1});b.Wa.open&&b.Wa.open(b);f&&de(d,c&511);return b}function ee(a){if(a.Ab===null)throw new P(8);a.ac&&(a.ac=null);try{a.Wa.close&&a.Wa.close(a)}catch(b){throw b;}finally{Kd[a.Ab]=null}a.Ab=null}function fe(a,b,c){if(a.Ab===null)throw new P(8);if(!a.seekable||!a.Wa.pb)throw new P(70);if(c!=0&&c!=1&&c!=2)throw new P(28);a.position=a.Wa.pb(a,b,c);a.nd=[]}function ge(a,b,c,d,e,f){if(d< +0||e<0)throw new P(28);if(a.Ab===null)throw new P(8);if((a.flags&2097155)===0)throw new P(8);if(R(a.node.mode))throw new P(31);if(!a.Wa.write)throw new P(28);a.seekable&&a.flags&1024&&fe(a,0,2);var g=typeof e!="undefined";if(!g)e=a.position;else if(!a.seekable)throw new P(70);b=a.Wa.write(a,b,c,d,e,f);g||(a.position+=b);return b}function he(a,b){a=typeof a=="string"?a:Qd(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=fd(a+"/"+c);try{T(d)}catch(e){if(e.cb!=20)throw e;}a=d}}return d} +function ie(a,b,c,d){a=fd((typeof a=="string"?a:Qd(a))+"/"+b);return $d(a,Ed(c,d))}function je(a,b,c,d,e,f){var g=b;a&&(a=typeof a=="string"?a:Qd(a),g=b?fd(a+"/"+b):a);a=Ed(d,e);g=$d(g,a);c&&(typeof c=="string"&&(c=rd(c)),c.subarray||(c=new Uint8Array(c)),de(g,a|146),b=Ka(g,577),ge(b,c,0,c.length,0,f),ee(b),de(g,a))}function ke(a,b,c,d){a=fd((typeof a=="string"?a:Qd(a))+"/"+b);b=Ed(!!c,!!d);ke.uc??(ke.uc=64);var e=ke.uc++<<8|0;ud(e,{open(f){f.seekable=!1},close(){d?.buffer?.length&&d(10)},read(f, +g,k,m){for(var n=0,l=0;l=l.length)return 0;t=Math.min(l.length-u,t);if(l.slice)for(var v=0;vthis.length-1||l<0)){var q=l%this.oc;return this.Fb(l/this.oc|0)[q]}}dd(l){this.Fb=l}mc(){var l=new XMLHttpRequest;l.open("HEAD",c,!1);l.send(null);l.status>=200&&l.status<300||l.status===304||I("Couldn't load "+ +c+". Status: "+l.status);var q=Number(l.getResponseHeader("Content-length")),r,t=(r=l.getResponseHeader("Accept-Ranges"))&&r==="bytes";l=(r=l.getResponseHeader("Content-Encoding"))&&r==="gzip";var u=1048576;t||(u=q);var v=this;v.dd(B=>{var G=B*u,C=(B+1)*u-1;C=Math.min(C,q-1);if(typeof v.Nb[B]=="undefined"){var ha=v.Nb;G>C&&I(`invalid range (${G}, ${C}) or no bytes requested!`);C>q-1&&I(`only ${q} bytes available! programmer error!`);var F=new XMLHttpRequest;F.open("GET",c,!1);q!==u&&F.setRequestHeader("Range", +"bytes="+G+"-"+C);F.responseType="arraybuffer";F.overrideMimeType&&F.overrideMimeType("text/plain; charset=x-user-defined");F.send(null);F.status>=200&&F.status<300||F.status===304||I("Couldn't load "+c+". Status: "+F.status);G=F.response!==void 0?new Uint8Array(F.response||[]):rd(F.responseText??"");ha[B]=G}typeof v.Nb[B]=="undefined"&&I("doXHR failed!");return v.Nb[B]});if(l||!q)u=q=1,u=q=this.Fb(0).length,ia("LazyFiles on gzip forces download of the whole file when length is accessed");this.kc= +q;this.jc=u;this.cc=!0}get length(){this.cc||this.mc();return this.kc}get oc(){this.cc||this.mc();return this.jc}}if(globalThis.XMLHttpRequest){ba||I("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var k=new g;var m=void 0}else m=c,k=void 0;var n=ie(a,b,d,e);k?n.Za=k:m&&(n.Za=null,n.url=m);Object.defineProperties(n,{ib:{get:function(){return this.Za.length}}});a={};for(let [l,q]of Object.entries(n.Wa))a[l]=(...r)=>{le(n);return q(...r)}; +a.read=(l,q,r,t,u)=>{le(n);return f(l,q,r,t,u)};a.Hb=(l,q,r)=>{le(n);var t=zd(q);if(!t)throw new P(48);f(l,(w(),y),t,q,r);return{Ya:t,lc:!0}};n.Wa=a;return n}var U={},V=(a,b,c)=>a?nd((w(),A),a,b,c):"",ne=18;function oe(a,b,c){if(b.charAt(0)==="/")return b;a=a===-100?"/":S(a).path;if(b.length==0){if(!c)throw new P(44);return a}return a+"/"+b}function pe(a,b){(w(),E)[a>>2]=b.Ec;(w(),E)[a+4>>2]=b.mode;(w(),E)[a+8>>2]=b.Zc;(w(),E)[a+12>>2]=b.uid;(w(),E)[a+16>>2]=b.Mc;(w(),E)[a+20>>2]=b.Kb;(w(),H)[a+24>> +3]=BigInt(b.size);(w(),D)[a+32>>2]=4096;(w(),D)[a+36>>2]=b.Cc;var c=b.zb.getTime(),d=b.lb.getTime(),e=b.kb.getTime();(w(),H)[a+40>>3]=BigInt(Math.floor(c/1E3));(w(),E)[a+48>>2]=c%1E3*1E3*1E3;(w(),H)[a+56>>3]=BigInt(Math.floor(d/1E3));(w(),E)[a+64>>2]=d%1E3*1E3*1E3;(w(),H)[a+72>>3]=BigInt(Math.floor(e/1E3));(w(),E)[a+80>>2]=e%1E3*1E3*1E3;(w(),H)[a+88>>3]=BigInt(b.Qc);return 0}var dd=void 0;function Wa(a,b,c){if(h)return M(3,1,a,b,c);dd=c;try{var d=S(a);switch(b){case 0:var e=O();if(e<0)break;for(;Kd[e];)e++; +return Wd(d,e).Ab;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=O(),d.flags=d.flags&-289793|e&289792,0;case 12:return e=O(),(w(),z)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if(typeof U=="undefined"||f.name!=="ErrnoError")throw f;return-f.cb}}function Xa(a,b){if(h)return M(4,1,a,b);try{var c=S(a),d=c.node,e=c.Wa.ob;a=e?c:d;e??=d.Xa.ob;Ud(e);var f=e(a);return pe(b,f)}catch(g){if(typeof U=="undefined"||g.name!=="ErrnoError")throw g;return-g.cb}}function Ya(a,b,c){if(h)return M(5, +1,a,b,c);dd=c;try{var d=S(a);switch(b){case 21509:return d.$a?0:-59;case 21505:if(!d.$a)return-59;if(d.$a.xb.Sc){a=[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];var e=O();(w(),D)[e>>2]=25856;(w(),D)[e+4>>2]=5;(w(),D)[e+8>>2]=191;(w(),D)[e+12>>2]=35387;for(var f=0;f<32;f++)(w(),y)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.$a?0:-59;case 21506:case 21507:case 21508:if(!d.$a)return-59;if(d.$a.xb.Tc)for(e=O(),w(),w(),w(),w(),a=[],f=0;f<32;f++)a.push((w(), +y)[e+f+17]);return 0;case 21519:if(!d.$a)return-59;e=O();return(w(),D)[e>>2]=0;case 21520:return d.$a?-28:-59;case 21537:case 21531:e=O();if(!d.Wa.Rc)throw new P(59);return d.Wa.Rc(d,b,e);case 21523:if(!d.$a)return-59;d.$a.xb.Uc&&(f=[24,80],e=O(),(w(),z)[e>>1]=f[0],(w(),z)[e+2>>1]=f[1]);return 0;case 21524:return d.$a?0:-59;case 21515:return d.$a?0:-59;default:return-28}}catch(g){if(typeof U=="undefined"||g.name!=="ErrnoError")throw g;return-g.cb}}function Za(a,b){if(h)return M(6,1,a,b);try{return a= +V(a),pe(b,ce(a,!0))}catch(c){if(typeof U=="undefined"||c.name!=="ErrnoError")throw c;return-c.cb}}function $a(a,b,c,d){if(h)return M(7,1,a,b,c,d);try{b=V(b);var e=d&256;b=oe(a,b,d&4096);return pe(c,e?ce(b,!0):ce(b))}catch(f){if(typeof U=="undefined"||f.name!=="ErrnoError")throw f;return-f.cb}}function ab(a,b,c,d){if(h)return M(8,1,a,b,c,d);dd=d;try{b=V(b);b=oe(a,b);var e=d?O():0;c&64&&(e&=~ne);return Ka(b,c,e).Ab}catch(f){if(typeof U=="undefined"||f.name!=="ErrnoError")throw f;return-f.cb}}function bb(a, +b){if(h)return M(9,1,a,b);try{return a=V(a),pe(b,ce(a))}catch(c){if(typeof U=="undefined"||c.name!=="ErrnoError")throw c;return-c.cb}}var cb=()=>I(""),qe={},re=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function se(a){return this.eb((w(),E)[a>>2])}var te={},ue={},ve={},we=class extends Error{constructor(a){super(a);this.name="InternalError"}},xe=(a,b,c)=>{function d(k){k=c(k);if(k.length!==a.length)throw new we("Mismatched type converter count");for(var m=0;m +ve[k]=b);var e=Array(b.length),f=[],g=0;for(let [k,m]of b.entries())ue.hasOwnProperty(m)?e[k]=ue[m]:(f.push(m),te.hasOwnProperty(m)||(te[m]=[]),te[m].push(()=>{e[k]=ue[m];++g;g===f.length&&d(e)}));0===f.length&&d(e)},db=a=>{var b=qe[a];delete qe[a];var c=b.ec,d=b.sb,e=b.sc,f=e.map(g=>g.Lc).concat(e.map(g=>g.fd));xe([a],f,g=>{var k={},m,n;for([m,n]of e.entries()){let l=g[m],q=n.Fb,r=n.Kc,t=g[m+e.length],u=n.ed,v=n.gd;k[n.Hc]={read:B=>l.eb(q(r,B)),write:(B,G)=>{var C=[];u(v,B,t.hb(C,G));re(C)},optional:l.optional}}return[{name:b.name, +eb:l=>{var q={},r;for(r in k)q[r]=k[r].read(l);d(l);return q},hb:(l,q)=>{for(var r in k)if(!(r in q||k[r].optional))throw new TypeError(`Missing field: "${r}"`);var t=c();for(r in k)k[r].write(t,q[r]);l!==null&&l.push(d,t);return t},tb:se,nb:d}]})},X=a=>{for(var b="";;){var c=(w(),A)[a++];if(!c)return b;b+=String.fromCharCode(c)}},Y=class extends Error{constructor(a){super(a);this.name="BindingError"}};function ye(a,b,c={}){var d=b.name;if(!a)throw new Y(`type "${d}" must have a positive integer typeid pointer`); +if(ue.hasOwnProperty(a)){if(c.Pc)return;throw new Y(`Cannot register type '${d}' twice`);}ue[a]=b;delete ve[a];te.hasOwnProperty(a)&&(b=te[a],delete te[a],b.forEach(e=>e()))}function W(a,b,c={}){return ye(a,b,c)}var ze=(a,b,c)=>{switch(b){case 1:return c?d=>(w(),y)[d]:d=>(w(),A)[d];case 2:return c?d=>(w(),z)[d>>1]:d=>(w(),Da)[d>>1];case 4:return c?d=>(w(),D)[d>>2]:d=>(w(),E)[d>>2];case 8:return c?d=>(w(),H)[d>>3]:d=>(w(),Ga)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`); +}},eb=(a,b,c,d,e)=>{b=X(b);d=d===0n;var f=g=>g;if(d){let g=c*8;f=k=>BigInt.asUintN(g,k);e=f(e)}W(a,{name:b,eb:f,hb:(g,k)=>{typeof k=="number"&&(k=BigInt(k));return k},tb:ze(b,c,!d),nb:null})},fb=(a,b,c,d)=>{b=X(b);W(a,{name:b,eb:function(e){return!!e},hb:function(e,f){return f?c:d},tb:function(e){return this.eb((w(),A)[e])},nb:null})},Ae=a=>{throw new Y(a.Ja.bb.ab.name+" instance already deleted");},Be=!1,Ce=()=>{},De=a=>{if(!globalThis.FinalizationRegistry)return De=b=>b,a;Be=new FinalizationRegistry(b=> +{b=b.Ja;--b.count.value;0===b.count.value&&(b.gb?b.mb.sb(b.gb):b.bb.ab.sb(b.Ya))});De=b=>{var c=b.Ja;c.gb&&Be.register(b,{Ja:c},b);return b};Ce=b=>{Be.unregister(b)};return De(a)},Ee=[];function Fe(){}var Ge=(a,b)=>Object.defineProperty(b,"name",{value:a}),He={},Ie=(a,b,c)=>{if(void 0===a[b].fb){var d=a[b];a[b]=function(...e){if(!a[b].fb.hasOwnProperty(e.length))throw new Y(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].fb})!`);return a[b].fb[e.length].apply(this, +e)};a[b].fb=[];a[b].fb[d.Db]=d}},Je=(a,b,c)=>{if(Module.hasOwnProperty(a)){if(void 0===c||void 0!==Module[a].fb&&void 0!==Module[a].fb[c])throw new Y(`Cannot register public name '${a}' twice`);Ie(Module,a,a);if(Module[a].fb.hasOwnProperty(c))throw new Y(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);Module[a].fb[c]=b}else Module[a]=b,Module[a].Db=c},Ke=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return b>=48&&b<=57?`_${a}`:a};function Le(a, +b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.Bb=c;this.sb=d;this.jb=e;this.Ic=f;this.Mb=g;this.Fc=k;this.bd=[]}var Me=(a,b,c)=>{for(;b!==c;){if(!b.Mb)throw new Y(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Mb(a);b=b.jb}return a},Ne=a=>{if(a===null)return"null";var b=typeof a;return b==="object"||b==="array"||b==="function"?a.toString():""+a};function Oe(a,b){if(b===null){if(this.bc)throw new Y(`null is not a valid ${this.name}`);return 0}if(!b.Ja)throw new Y(`Cannot pass "${Ne(b)}" as a ${this.name}`); +if(!b.Ja.Ya)throw new Y(`Cannot pass deleted object as a pointer of type ${this.name}`);return Me(b.Ja.Ya,b.Ja.bb.ab,this.ab)}function Pe(a,b){if(b===null){if(this.bc)throw new Y(`null is not a valid ${this.name}`);if(this.Rb){var c=this.ec();a!==null&&a.push(this.sb,c);return c}return 0}if(!b||!b.Ja)throw new Y(`Cannot pass "${Ne(b)}" as a ${this.name}`);if(!b.Ja.Ya)throw new Y(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Qb&&b.Ja.bb.Qb)throw new Y(`Cannot convert argument of type ${b.Ja.mb? +b.Ja.mb.name:b.Ja.bb.name} to parameter type ${this.name}`);c=Me(b.Ja.Ya,b.Ja.bb.ab,this.ab);if(this.Rb){if(void 0===b.Ja.gb)throw new Y("Passing raw pointer to smart pointer is illegal");switch(this.hd){case 0:if(b.Ja.mb===this)c=b.Ja.gb;else throw new Y(`Cannot convert argument of type ${b.Ja.mb?b.Ja.mb.name:b.Ja.bb.name} to parameter type ${this.name}`);break;case 1:c=b.Ja.gb;break;case 2:if(b.Ja.mb===this)c=b.Ja.gb;else{var d=b.clone();c=this.cd(c,Qe(()=>d["delete"]()));a!==null&&a.push(this.sb, +c)}break;default:throw new Y("Unsupported sharing policy");}}return c}function Re(a,b){if(b===null){if(this.bc)throw new Y(`null is not a valid ${this.name}`);return 0}if(!b.Ja)throw new Y(`Cannot pass "${Ne(b)}" as a ${this.name}`);if(!b.Ja.Ya)throw new Y(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Ja.bb.Qb)throw new Y(`Cannot convert argument of type ${b.Ja.bb.name} to parameter type ${this.name}`);return Me(b.Ja.Ya,b.Ja.bb.ab,this.ab)}var Se=(a,b,c)=>{if(b===c)return a; +if(void 0===c.jb)return null;a=Se(a,b,c.jb);return a===null?null:c.Fc(a)},Te={},Ue=(a,b)=>{if(b===void 0)throw new Y("ptr should not be undefined");for(;a.jb;)b=a.Mb(b),a=a.jb;return Te[b]},Ve=(a,b)=>{if(!b.bb||!b.Ya)throw new we("makeClassHandle requires ptr and ptrType");if(!!b.mb!==!!b.gb)throw new we("Both smartPtrType and smartPtr must be specified");b.count={value:1};return De(Object.create(a,{Ja:{value:b,writable:!0}}))};function We(a,b,c,d,e,f,g,k,m,n,l){this.name=a;this.ab=b;this.bc=c;this.Qb= +d;this.Rb=e;this.ad=f;this.hd=g;this.wc=k;this.ec=m;this.cd=n;this.sb=l;e||b.jb!==void 0?this.hb=Pe:(this.hb=d?Oe:Re,this.nb=null)}var Xe=(a,b,c)=>{if(!Module.hasOwnProperty(a))throw new we("Replacing nonexistent public symbol");void 0!==Module[a].fb&&void 0!==c?Module[a].fb[c]=b:(Module[a]=b,Module[a].Db=c)},Z=(a,b)=>{a=X(a);var c=N(b);if(typeof c!="function")throw new Y(`unknown function pointer with signature ${a}: ${b}`);return c};class Ye extends Error{}var Ze=a=>{a=tc(a);var b=X(a);J(a);return b}, +$e=(a,b)=>{function c(f){e[f]||ue[f]||(ve[f]?ve[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Ye(`${a}: `+d.map(Ze).join([", "]));},gb=(a,b,c,d,e,f,g,k,m,n,l,q,r)=>{l=X(l);f=Z(e,f);k&&=Z(g,k);n&&=Z(m,n);r=Z(q,r);var t=Ke(l);Je(t,function(){$e(`Cannot construct ${l} due to unbound types`,[d])});xe([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var v=u.ab;var B=v.Bb}else B=Fe.prototype;u=Ge(l,function(...F){if(Object.getPrototypeOf(this)!==G)throw new Y(`Use 'new' to construct ${l}`);if(void 0=== +C.qc)throw new Y(`${l} has no accessible constructor`);var vd=C.qc[F.length];if(void 0===vd)throw new Y(`Tried to invoke ctor of ${l} with invalid number of parameters (${F.length}) - expected (${Object.keys(C.qc).toString()}) parameters instead!`);return vd.apply(this,F)});var G=Object.create(B,{constructor:{value:u}});u.prototype=G;var C=new Le(l,u,G,r,v,f,k,n);if(C.jb){var ha;(ha=C.jb).hc??(ha.hc=[]);C.jb.hc.push(C)}v=new We(l,C,!0,!1,!1);ha=new We(l+"*",C,!1,!1,!1);B=new We(l+" const*",C,!1,!0, +!1);He[a]={pointerType:ha,Dc:B};Xe(t,u);return[v,ha,B]})};function af(a){for(var b=1;b{for(var c=[],d=0;d>2]);return c},df=a=>{a=a.trim();var b=a.indexOf("(");return b===-1?a:a.slice(0,b)},hb=(a,b,c,d,e,f,g,k)=>{var m=cf(c,d);b=X(b);b=df(b);f=Z(e,f);xe([],[a],n=>{function l(){$e(`Cannot call ${q} due to unbound types`,m)}n=n[0];var q=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); +k&&n.ab.bd.push(b);var r=n.ab.Bb,t=r[b];void 0===t||void 0===t.fb&&t.className!==n.name&&t.Db===c-2?(l.Db=c-2,l.className=n.name,r[b]=l):(Ie(r,b,q),r[b].fb[c-2]=l);xe([],m,u=>{u=bf(q,u,n,f,g);void 0===r[b].fb?(u.Db=c-2,r[b]=u):r[b].fb[c-2]=u;return[]});return[]})},ef=[],ff=[0,1,,1,null,1,!0,1,!1,1],Bb=a=>{a>9&&0===--ff[a+1]&&(ff[a]=void 0,ef.push(a))},gf=a=>{if(!a)throw new Y(`Cannot use deleted val. handle = ${a}`);return ff[a]},Qe=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6; +case !1:return 8;default:let b=ef.pop()||ff.length;ff[b]=a;ff[b+1]=1;return b}},hf={name:"emscripten::val",eb:a=>{var b=gf(a);Bb(a);return b},hb:(a,b)=>Qe(b),tb:se,nb:null},ib=a=>W(a,hf),jf=(a,b)=>{switch(b){case 4:return function(c){return this.eb((w(),Ea)[c>>2])};case 8:return function(c){return this.eb((w(),Fa)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},jb=(a,b,c)=>{b=X(b);W(a,{name:b,eb:d=>d,hb:(d,e)=>e,tb:jf(b,c),nb:null})},kb=(a,b,c,d,e,f)=>{var g=cf(b,c);a=X(a); +a=df(a);e=Z(d,e);Je(a,function(){$e(`Cannot call ${a} due to unbound types`,g)},b-1);xe([],g,k=>{Xe(a,bf(a,[k[0],null].concat(k.slice(1)),null,e,f),b-1);return[]})},lb=(a,b,c,d,e)=>{b=X(b);var f=k=>k;if(d===0){var g=32-8*c;f=k=>k<>>g;e=f(e)}W(a,{name:b,eb:f,hb:(k,m)=>m,tb:ze(b,c,d!==0),nb:null})},mb=(a,b,c)=>{function d(f){var g=(w(),E)[f>>2];f=(w(),E)[f+4>>2];return new e((w(),y).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array, +BigUint64Array][b];c=X(c);W(a,{name:c,eb:d,tb:d},{Pc:!0})},kf=Object.assign({optional:!0},hf),nb=a=>{W(a,kf)},lf=(a,b,c)=>qd(a,(w(),A),b,c),ob=(a,b)=>{b=X(b);W(a,{name:b,eb(c){var d=(w(),E)[c>>2];d=V(c+4,d,!0);J(c);return d},hb(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e=typeof d=="string";if(!(e||ArrayBuffer.isView(d)&&d.BYTES_PER_ELEMENT==1))throw new Y("Cannot pass non-string to std::string");var f=e?pd(d):d.length;var g=rc(4+f+1),k=g+4;(w(),E)[g>>2]=f;e?lf(d,k,f+1):(w(),A).set(d, +k);c!==null&&c.push(J,g);return g},tb:se,nb(c){J(c)}})},mf=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,nf=(a,b,c)=>{a>>=1;b=md((w(),Da),a,b/2,c);if(b-a>16&&mf)return mf.decode((w(),Da).slice(a,b));for(c="";a{if(c<2)return 0;c-=2;var d=b;c=c>1]=f;b+=2}(w(),z)[b>>1]=0;return b-d},pf=a=>a.length*2,qf=(a,b,c)=>{var d="";a>>=2; +for(var e=0;!(e>=b/4);e++){var f=(w(),E)[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},rf=(a,b,c=2147483647)=>{if(c<4)return 0;var d=b;c=d+c-4;for(var e=0;e65535&&e++;(w(),D)[b>>2]=f;b+=4;if(b+4>c)break}(w(),D)[b>>2]=0;return b-d},sf=a=>{for(var b=0,c=0;c65535&&c++,b+=4;return b},pb=(a,b,c)=>{c=X(c);if(b===2){var d=nf;var e=of;var f=pf}else d=qf,e=rf,f=sf;W(a,{name:c,eb:g=>{var k=(w(),E)[g>>2];k=d(g+4,k*b,!0);J(g); +return k},hb:(g,k)=>{if(typeof k!="string")throw new Y(`Cannot pass non-string to C++ string type ${c}`);var m=f(k),n=rc(4+m+b);(w(),E)[n>>2]=m/b;e(k,n+4,m+b);g!==null&&g.push(J,n);return n},tb:se,nb(g){J(g)}})},qb=(a,b,c,d,e,f)=>{qe[a]={name:X(b),ec:Z(c,d),sb:Z(e,f),sc:[]}},rb=(a,b,c,d,e,f,g,k,m,n)=>{qe[a].sc.push({Hc:X(b),Lc:c,Fb:Z(d,e),Kc:f,fd:g,ed:Z(k,m),gd:n})},sb=(a,b)=>{b=X(b);W(a,{Xc:!0,name:b,eb:()=>{},hb:()=>{}})},tb=a=>{var b=!aa;try{Atomics.wait((w(),D),0,0,0),b=!0}catch(c){}va(a,!ba, +1,b,262144,!1);wa()},tf=a=>{if(!(a instanceof Hc||a=="unwind"))throw a;},Zc=a=>{if(!la)try{a()}catch(b){tf(b)}finally{if(!(Tc||L>0))try{h?qc()&&yc(ma):bc(ma)}catch(b){tf(b)}}},xa=a=>{Vc||(Atomics.waitAsync((w(),D),a>>2,a).value.then(Aa),a+=112,Atomics.store((w(),D),a>>2,1))},Aa=()=>{var a=qc();a&&Zc(()=>{xa(a);Ac()})},ub=(a,b)=>{a==b?setTimeout(Aa):h?postMessage({zc:a,ub:4}):(a=K[a])&&a.postMessage({ub:4})},uf=[],vb=(a,b,c,d,e,f,g)=>{uf.length=0;c=e>>3;for(d=e+d>>3;cvc(f,g,k));else return a},wb=()=>{Tc=!1;L=0},xb=a=>{h?postMessage({ub:6,ld:a}):Yc(K[a])},yb=()=>{},zb=()=>{throw new oa;},xf=[],yf=a=>{var b=xf.length;xf.push(a);return b},zf=(a,b)=>{for(var c=Array(a),d=0;d>2],g=ue[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Ze(f)}`,new Y(a);c[e]=g}return c},Af={},Bf=a=>{var b=Af[a];return b===void 0?X(a):b},Ab=(a,b,c)=>{var d;[b,...d]=zf(a,b);var e= +b.hb.bind(b),f=d.map(k=>k.tb.bind(k));a--;var g=Array(a);b=`methodCaller<(${d.map(k=>k.name)}) => ${b.name}>`;return yf(Ge(b,(k,m,n,l)=>{for(var q=0,r=0;r>2]=Qe(k));return t}))},Cb=a=>{if(!a)return Qe(globalThis);a=Bf(a);return Qe(globalThis[a])},Db=(a,b)=>{a=gf(a);b=gf(b);return Qe(a[b])},Eb=a=>{a> +9&&(ff[a+1]+=1)},Fb=(a,b,c,d,e)=>xf[a](b,c,d,e),Gb=()=>Qe([]),Hb=a=>Qe(Bf(a)),Ib=a=>{var b=gf(a);re(b);Bb(a)},Cf=a=>a%4===0&&(a%100!==0||a%400===0),Df=[0,31,60,91,121,152,182,213,244,274,305,335],Ef=[0,31,59,90,120,151,181,212,243,273,304,334];function Jb(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);if(isNaN(a.getTime()))return 1;(w(),D)[b>>2]=a.getSeconds();(w(),D)[b+4>>2]=a.getMinutes();(w(),D)[b+8>>2]=a.getHours();(w(),D)[b+12>>2]=a.getDate();(w(),D)[b+16>>2]= +a.getMonth();(w(),D)[b+20>>2]=a.getFullYear()-1900;(w(),D)[b+24>>2]=a.getDay();var c=(Cf(a.getFullYear())?Df:Ef)[a.getMonth()]+a.getDate()-1|0;(w(),D)[b+28>>2]=c;(w(),D)[b+36>>2]=-(a.getTimezoneOffset()*60);c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(w(),D)[b+32>>2]=a;return 0}function Kb(a){var b=(()=>{var c=new Date((w(),D)[a+20>>2]+1900,(w(),D)[a+16>>2],(w(),D)[a+12>>2],(w(),D)[a+ +8>>2],(w(),D)[a+4>>2],(w(),D)[a>>2],0);if(isNaN(c.getTime()))return-1;var d=(w(),D)[a+32>>2],e=c.getTimezoneOffset(),f=(new Date(c.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(c.getFullYear(),0,1)).getTimezoneOffset(),k=Math.min(g,f);if(d<0)d=Number(f!=g&&k==e);else if(d>0!=(k==e)&&(f=Math.max(g,f),c.setTime(c.getTime()+((d>0?k:f)-e)*6E4),isNaN(c.getTime())))return-1;(w(),D)[a+32>>2]=d;(w(),D)[a+24>>2]=c.getDay();d=(Cf(c.getFullYear())?Df:Ef)[c.getMonth()]+c.getDate()-1|0;(w(),D)[a+28>>2]= +d;(w(),D)[a>>2]=c.getSeconds();(w(),D)[a+4>>2]=c.getMinutes();(w(),D)[a+8>>2]=c.getHours();(w(),D)[a+12>>2]=c.getDate();(w(),D)[a+16>>2]=c.getMonth();(w(),D)[a+20>>2]=c.getYear();return c.getTime()/1E3})();return BigInt(b)}function Lb(a,b,c,d,e,f,g){if(h)return M(10,1,a,b,c,d,e,f,g);e=e<-9007199254740992||e>9007199254740992?NaN:Number(e);try{var k=S(d);if((b&2)!==0&&(c&2)===0&&(k.flags&2097155)!==2)throw new P(2);if((k.flags&2097155)===1)throw new P(2);if(!k.Wa.Hb)throw new P(43);if(!a)throw new P(28); +var m=k.Wa.Hb(k,a,e,b,c);var n=m.Ya;(w(),D)[f>>2]=m.lc;(w(),E)[g>>2]=n;return 0}catch(l){if(typeof U=="undefined"||l.name!=="ErrnoError")throw l;return-l.cb}}function Mb(a,b,c,d,e,f){if(h)return M(11,1,a,b,c,d,e,f);f=f<-9007199254740992||f>9007199254740992?NaN:Number(f);try{var g=S(e);if(c&2){c=f;if((g.node.mode&61440)!==32768)throw new P(43);if(!(d&2)){var k=(w(),A).subarray(a,a+b);g.Wa.Tb&&g.Wa.Tb(g,k,c,b,d)}}}catch(m){if(typeof U=="undefined"||m.name!=="ErrnoError")throw m;return-m.cb}}var Ff= +{},Wb=()=>performance.timeOrigin+performance.now();function Nb(a,b){if(h)return M(12,1,a,b);Ff[a]&&(clearTimeout(Ff[a].id),delete Ff[a]);if(!b)return 0;var c=setTimeout(()=>{delete Ff[a];Zc(()=>zc(a,performance.timeOrigin+performance.now()))},b);Ff[a]={id:c,Ad:b};return 0}var Ob=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(w(),E)[a>>2]=g*60;(w(),D)[b>>2]=Number(f!=e);b=k=>{var m=Math.abs(k);return`UTC${k>= +0?"-":"+"}${String(Math.floor(m/60)).padStart(2,"0")}${String(m%60).padStart(2,"0")}`};a=b(f);b=b(e);e=0&&a<=3))return 28;if(a===0)a=Date.now();else if(Gf)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(a*1E3*1E3);(w(),H)[c>>3]=BigInt(a);return 0}var Hf=[],Rb=(a,b,c)=>{Hf.length=0;for(var d;d=(w(),A)[b++];){var e=d!=105;e&=d!=112;c+=e&&c%8?4:0;Hf.push(d==112?(w(),E)[c>>2]:d==106?(w(),H)[c>>3]: +d==105?(w(),D)[c>>2]:(w(),Fa)[c>>3]);c+=e?8:4}return vf[a](...Hf)},Sb=()=>{},Tb=()=>{L+=1;throw"unwind";},Ub=(a,b,c)=>{var d=Error().stack.toString(),e=d.split("\n");d="";var f=RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),g=RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"),k;for(k of e){var m=g.exec(k);if(m?.length==5){e=m[1];var n=m[2];var l=m[3];m=m[4]}else if(m=f.exec(k),m?.length>=4)e=m[1],n=m[2],l=m[3],m=m[4]|0;else{d+=k+"\n";continue}e=="_emscripten_log"||e=="_emscripten_get_callstack"?d="":a&24&& +(a&64&&(n=n.substring(n.replace(/\\/g,"/").lastIndexOf("/")+1)),d+=` at ${e} (${n}:${l}:${m})\n`)}a=d=d.replace(/\s+$/,"");return!b||c<=0?pd(a)+1:lf(a,b,c)+1},Vb=()=>2147483648,Yb=a=>{var b=(w(),A).length;a>>>=0;if(a<=b||a>2147483648)return!1;for(var c=1;c<=4;c*=2){a:{var d=(Math.min(2147483648,Math.ceil(Math.max(a,b+2097152/c)/65536)*65536)-x.buffer.byteLength+65535)/65536|0;try{x.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},If=(a,b)=>{L+=1;return setTimeout(()=>{--L; +Zc(a)},b)},Zb=(a,b,c)=>If(()=>N(a)(c),b),Jf={},Lf=()=>{if(!Kf){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in Jf)Jf[b]===void 0?delete a[b]:a[b]=Jf[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Kf=c}return Kf},Kf;function $b(a,b){if(h)return M(13,1,a,b);var c=0,d=0,e;for(e of Lf()){var f=b+c;(w(),E)[a+d>>2]=f;c+=lf(e,f,Infinity)+1;d+=4}return 0}function ac(a,b){if(h)return M(14, +1,a,b);var c=Lf();(w(),E)[a>>2]=c.length;a=0;for(var d of c)a+=pd(d)+1;(w(),E)[b>>2]=a;return 0}function cc(a){if(h)return M(15,1,a);try{var b=S(a);ee(b);return 0}catch(c){if(typeof U=="undefined"||c.name!=="ErrnoError")throw c;return c.cb}}function dc(a,b){if(h)return M(16,1,a,b);try{var c=S(a),d=c.$a?2:R(c.mode)?3:(c.mode&61440)===40960?7:4;(w(),y)[b]=d;(w(),z)[b+2>>1]=0;(w(),H)[b+8>>3]=BigInt(0);(w(),H)[b+16>>3]=BigInt(0);return 0}catch(e){if(typeof U=="undefined"||e.name!=="ErrnoError")throw e; +return e.cb}}function ec(a,b,c,d){if(h)return M(17,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],m=(w(),E)[a+4>>2];a+=8;var n=e,l=(w(),y),q=k,r=m,t=f;if(r<0||t<0)throw new P(28);if(n.Ab===null)throw new P(8);if((n.flags&2097155)===1)throw new P(8);if(R(n.node.mode))throw new P(31);if(!n.Wa.read)throw new P(28);var u=typeof t!="undefined";if(!u)t=n.position;else if(!n.seekable)throw new P(70);var v=n.Wa.read(n,l,q,r,t);u||(n.position+=v);var B=v;if(B<0){var G=-1;break a}b+= +B;if(B>2]=G;return 0}catch(C){if(typeof U=="undefined"||C.name!=="ErrnoError")throw C;return C.cb}}function fc(a,b,c,d){if(h)return M(18,1,a,b,c,d);b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 22;var e=S(a);fe(e,b,c);(w(),H)[d>>3]=BigInt(e.position);e.ac&&b===0&&c===0&&(e.ac=null);return 0}catch(f){if(typeof U=="undefined"||f.name!=="ErrnoError")throw f;return f.cb}}function hc(a,b,c,d){if(h)return M(19,1,a,b,c, +d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],m=(w(),E)[a+4>>2];a+=8;var n=ge(e,(w(),y),k,m,f);if(n<0){var l=-1;break a}b+=n;if(n>2]=l;return 0}catch(q){if(typeof U=="undefined"||q.name!=="ErrnoError")throw q;return q.cb}}var nc=(a,b)=>jd((w(),A).subarray(a,a+b));h||Wc();Md=Array(4096);Yd(Q,"/");T("/tmp");T("/home");T("/home/web_user");(function(){T("/dev");ud(259,{read:()=>0,write:(d,e,f,g)=>g,pb:()=>0});ae("/dev/null", +259);td(1280,xd);td(1536,yd);ae("/dev/tty",1280);ae("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(jd(a),b=a.byteLength);return a[--b]};ke("/dev","random",c);ke("/dev","urandom",c);T("/dev/shm");T("/dev/shm/tmp")})();(function(){T("/proc");var a=T("/proc/self");T("/proc/self/fd");Yd({wb(){var b=Bd(a,"fd",16895,73);b.Wa={pb:Q.Wa.pb};b.Xa={Gb(c,d){c=+d;var e=S(c);c={parent:null,wb:{vc:"fake"},Xa:{Lb:()=>e.path},id:c+1};return c.parent=c},fc(){return Array.from(Kd.entries()).filter(([, +c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})();(()=>{var a=Fe.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof Fe&&c instanceof Fe))return!1;var d=this.Ja.bb.ab,e=this.Ja.Ya;c.Ja=c.Ja;var f=c.Ja.bb.ab;for(c=c.Ja.Ya;d.jb;)e=d.Mb(e),d=d.jb;for(;f.jb;)c=f.Mb(c),f=f.jb;return d===f&&e===c},clone:function(){this.Ja.Ya||Ae(this);if(this.Ja.Jb)return this.Ja.count.value+=1,this;var c=De,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.Ja;c=c(e.call(d,f,{Ja:{value:{count:g.count, +Eb:g.Eb,Jb:g.Jb,Ya:g.Ya,bb:g.bb,gb:g.gb,mb:g.mb}}}));c.Ja.count.value+=1;c.Ja.Eb=!1;return c},["delete"](){this.Ja.Ya||Ae(this);if(this.Ja.Eb&&!this.Ja.Jb)throw new Y("Object already scheduled for deletion");Ce(this);var c=this.Ja;--c.count.value;0===c.count.value&&(c.gb?c.mb.sb(c.gb):c.bb.ab.sb(c.Ya));this.Ja.Jb||(this.Ja.gb=void 0,this.Ja.Ya=void 0)},isDeleted:function(){return!this.Ja.Ya},deleteLater:function(){this.Ja.Ya||Ae(this);if(this.Ja.Eb&&!this.Ja.Jb)throw new Y("Object already scheduled for deletion"); +Ee.push(this);this.Ja.Eb=!0;return this}});var b=Symbol.dispose;b&&(a[b]=a["delete"])})();Object.assign(We.prototype,{Jc(a){this.wc&&(a=this.wc(a));return a},rc(a){this.sb?.(a)},tb:se,eb:function(a){function b(){return this.Rb?Ve(this.ab.Bb,{bb:this.ad,Ya:c,mb:this,gb:a}):Ve(this.ab.Bb,{bb:this,Ya:a})}var c=this.Jc(a);if(!c)return this.rc(a),null;var d=Ue(this.ab,c);if(void 0!==d){if(0===d.Ja.count.value)return d.Ja.Ya=c,d.Ja.gb=a,d.clone();d=d.clone();this.rc(a);return d}d=this.ab.Ic(c);d=He[d]; +if(!d)return b.call(this);d=this.Qb?d.Dc:d.pointerType;var e=Se(c,this.ab,d.ab);return e===null?b.call(this):this.Rb?Ve(d.ab.Bb,{bb:d,Ya:e,mb:this,gb:a}):Ve(d.ab.Bb,{bb:d,Ya:e})}});h||(x=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:(Module.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());Module.noExitRuntime&&(Tc=Module.noExitRuntime);Module.printErr&&(p=Module.printErr);Module.wasmBinary&&(ja=Module.wasmBinary);Module.addRunDependency=Oc;Module.removeRunDependency= +Nc;Module.FS_preloadFile=async(a,b,c,d,e,f,g,k)=>{var m=b?kd(fd(a+"/"+b)):a,n=`cp ${m}`;Oc(n);try{var l=c;typeof c=="string"&&(l=await Fd(c));l=await Hd(l,m);k?.();f||je(a,b,l,d,e,g)}finally{Nc(n)}};Module.FS_unlink=(...a)=>be(...a);Module.FS_createPath=(...a)=>he(...a);Module.FS_createDevice=(...a)=>ke(...a);Module.FS_createDataFile=(...a)=>je(...a);Module.FS_createLazyFile=(...a)=>me(...a);var wf=[mc,Uc,cd,Wa,Xa,Ya,Za,$a,ab,bb,Lb,Mb,Nb,$b,ac,cc,dc,ec,fc,hc],vf={231569:(a,b,c,d)=>{a=V(a);b=V(b); +c=V(c);d=V(d);throw Error(a+b+c+d);},231785:(a,b)=>{a=V(a);b=V(b);throw Error(a+b);},231895:a=>{a=V(a);throw Error(a);},231963:a=>{a=V(a);throw Error(a);}};function Pb(){var a=Module.allowedThreads;return a?a:navigator.hardwareConcurrency}function oc(a,b,c,d,e){var f=!1,g=m=>{f||(f=!0,clearTimeout(k),sc(a,m))};try{let m=new AbortController,n=new Uint8Array(d);n.set((w(),A).subarray(c,c+d));var k=setTimeout(()=>m.abort(),e);fetch(V(b),{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"}, +body:n,signal:m.signal}).then(l=>g(l.status),()=>g(0))}catch{g(0)}}var qc,rc,sc,J,tc,ya,uc,va,Ca,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Sa;function jc(a,b){var c=Fc();try{N(a)(b)}catch(d){Dc(c);if(!(d instanceof na))throw d;Bc(1,0)}}function lc(a,b,c,d){var e=Fc();try{N(a)(b,c,d)}catch(f){Dc(e);if(!(f instanceof na))throw f;Bc(1,0)}}function kc(a,b,c){var d=Fc();try{N(a)(b,c)}catch(e){Dc(d);if(!(e instanceof na))throw e;Bc(1,0)}}function ic(a,b,c,d){var e=Fc();try{return N(a)(b,c,d)}catch(f){Dc(e);if(!(f instanceof +na))throw f;Bc(1,0)}}async function ta(){if(h)Ha();else{var a=Module.preRun;a&&(typeof a=="function"&&(a=[a]),Jc.push(...a));for(a=Jc;a.length>0;)a.shift()(Module);Mc&&await Lc();la||Ha()}}var La;h||(La=await (sa()),await (ta()));;return Module}export default createModule;var isPthread=globalThis.name=="em-pthread";isPthread&&createModule(); diff --git a/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.wasm b/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.wasm new file mode 100644 index 00000000..3582878f Binary files /dev/null and b/packages/blinkcard-wasm/dist/simd-threads/BlinkCardModule.wasm differ diff --git a/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.data b/packages/blinkcard-wasm/dist/simd/BlinkCardModule.data similarity index 59% rename from packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.data rename to packages/blinkcard-wasm/dist/simd/BlinkCardModule.data index f7fb2264..2392f4a8 100644 Binary files a/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.data and b/packages/blinkcard-wasm/dist/simd/BlinkCardModule.data differ diff --git a/packages/blinkcard-wasm/dist/simd/BlinkCardModule.js b/packages/blinkcard-wasm/dist/simd/BlinkCardModule.js new file mode 100644 index 00000000..a644c4b8 --- /dev/null +++ b/packages/blinkcard-wasm/dist/simd/BlinkCardModule.js @@ -0,0 +1,94 @@ +async function createModule(moduleArg={}){var Module=moduleArg;var aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;Module.expectedDataFileDownloads||(Module.expectedDataFileDownloads=0);Module.expectedDataFileDownloads++;(()=>{var a=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(m,l){Module.dataFileDownloads||(Module.dataFileDownloads={});try{var k=await fetch(m)}catch(z){throw Error(`Network Error: ${m}`,{e:z});}if(!k.ok)throw Error(`${k.status}: ${k.url}`); +var p=[];l=Number(k.headers.get("Content-Length")||l);var q=0;Module.setStatus&&Module.setStatus("Downloading data...");for(k=k.body.getReader();;){var r;({done:r,value:t}=await k.read());if(r)break;p.push(t);q+=t.length;Module.dataFileDownloads[m]={loaded:q,total:l};var t=r=0;for(var u of Object.values(Module.dataFileDownloads))r+=u.loaded,t+=u.total;Module.setStatus&&Module.setStatus(`Downloading data... (${r}/${t})`)}m=new Uint8Array(p.map(z=>z.length).reduce((z,E)=>z+E,0));u=0;for(let z of p)m.set(z, +u),u+=z.length;return m.buffer}async function d(m){m.FS_createPath("/","microblink",!0,!0);m.FS_createPath("/microblink","blinkcard",!0,!0);m.addRunDependency("datafile_bazel-out/wasm-opt-ST-0e72d3c32124/bin/packages/blinkcard-wasm/binding/simd/BlinkCardModule.data");m.preloadResults||(m.preloadResults={});m.preloadResults["bazel-out/wasm-opt-ST-0e72d3c32124/bin/packages/blinkcard-wasm/binding/simd/BlinkCardModule.data"]={Mc:!1};h||=await g;await async function(l){if(!l)throw Error("Loading data file failed."); +if(l.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData "+l.constructor.name);l=new Uint8Array(l);for(var k of b.files)m.FS_createDataFile(k.filename,null,l.subarray(k.start,k.end),!0,!0,!0);m.removeRunDependency("datafile_bazel-out/wasm-opt-ST-0e72d3c32124/bin/packages/blinkcard-wasm/binding/simd/BlinkCardModule.data")}(h)}typeof window==="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):typeof process=== +"undefined"&&typeof location!=="undefined"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=Module.locateFile?Module.locateFile("BlinkCardModule.data",""):"BlinkCardModule.data",f=b.remote_package_size,g,h=Module.getPreloadedPackage&&Module.getPreloadedPackage(e,f);h||(g=c(e,f));Module.FS_createPath?d(Module):(Module.preRun||(Module.preRun=[]),Module.preRun.push(d))}({files:[{filename:"/microblink/blinkcard/Model_0d310639.strop",start:0,end:758096}, +{filename:"/microblink/blinkcard/Model_1aafbaf8.strop",start:758096,end:806794},{filename:"/microblink/blinkcard/Model_2b2bfd02.strop",start:806794,end:1007025},{filename:"/microblink/blinkcard/Model_3ec17c77.strop",start:1007025,end:2456766},{filename:"/microblink/blinkcard/Model_4cf0c927.strop",start:2456766,end:2790168},{filename:"/microblink/blinkcard/Model_54df55fc.strop",start:2790168,end:2794366},{filename:"/microblink/blinkcard/Model_60fc9f0c.strop",start:2794366,end:3575077},{filename:"/microblink/blinkcard/Model_6bb8569f.strop", +start:3575077,end:3832452},{filename:"/microblink/blinkcard/Model_7d1c3b79.strop",start:3832452,end:3900260},{filename:"/microblink/blinkcard/Model_81826329.strop",start:3900260,end:4169376},{filename:"/microblink/blinkcard/Model_9d50becd.strop",start:4169376,end:7011021},{filename:"/microblink/blinkcard/Model_a91e7e31.strop",start:7011021,end:7280563},{filename:"/microblink/blinkcard/Model_a958c31c.strop",start:7280563,end:7625651},{filename:"/microblink/blinkcard/Model_aa452ab8.strop",start:7625651, +end:8461113},{filename:"/microblink/blinkcard/Model_bdf3050e.strop",start:8461113,end:8545219},{filename:"/microblink/blinkcard/Model_c8930677.strop",start:8545219,end:8564849},{filename:"/microblink/blinkcard/Model_caa82284.strop",start:8564849,end:10821885},{filename:"/microblink/blinkcard/bin-database_1.0.zzip",start:10821885,end:12191737}],remote_package_size:12191737})})();var ca=import.meta.url,da="",ea,fa;if(aa||ba){try{da=(new URL(".",ca)).href}catch{}ba&&(fa=a=>{var b=new XMLHttpRequest; +b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ea=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ha=console.log.bind(console),n=console.error.bind(console),ia,ja=!1,ka;class la{}class ma extends la{}function na(){if(!v?.buffer?.Oc){var a=oa.buffer;v=new Int8Array(a);w=new Int16Array(a);x=new Uint8Array(a);pa=new Uint16Array(a);y=new Int32Array(a);A=new Uint32Array(a);qa= +new Float32Array(a);ra=new Float64Array(a);C=new BigInt64Array(a);sa=new BigUint64Array(a)}}function F(a){Module.onAbort?.(a);a=`Aborted(${a})`;n(a);ja=!0;throw new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");}var ta;async function ua(a){if(!ia)try{var b=await ea(a);return new Uint8Array(b)}catch{}if(a==ta&&ia)a=new Uint8Array(ia);else if(fa)a=fa(a);else throw"both async and sync fetching of the wasm failed";return a}async function va(a,b){try{var c=await ua(a);return await WebAssembly.instantiate(c, +b)}catch(d){n(`failed to asynchronously prepare wasm: ${d}`),F(d)}}async function wa(a){var b=ta;if(!ia)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){n(`wasm streaming compile failed: ${d}`),n("falling back to ArrayBuffer instantiation")}return va(b,a)}class xa{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}var w,y,C,v,qa,ra,pa,A,sa,x,ya=[],za=!0,oa,Aa=[],G=a=>{var b=Aa[a];b||(Aa[a]=b=Ba.get(a)); +return b};class Ca{constructor(a){this.Aa=a-24}init(a,b){A[this.Aa+16>>2]=0;A[this.Aa+4>>2]=a;A[this.Aa+8>>2]=b}}var Da=0,H=()=>{var a=y[+Ea>>2];Ea+=4;return a},Fa=(a,b)=>{for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];e==="."?a.splice(d,1):e===".."?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Ga=a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=Fa(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},Ha=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1); +a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Ia=()=>a=>(crypto.getRandomValues(a),0),Ja=a=>(Ja=Ia())(a),Ka=(...a)=>{for(var b="",c=!1,d=a.length-1;d>=-1&&!c;d--){c=d>=0?a[d]:"/";if(typeof c!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=Fa(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},La=globalThis.TextDecoder&&new TextDecoder,Ma=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b; +return b},I=(a,b=0,c,d)=>{c=Ma(a,b,c,d);if(c-b>16&&a.buffer&&La)return La.decode(a.subarray(b,c));for(d="";b>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},Na=[],Oa=a=>{for(var b=0,c=0;c=55296&&d<=57343?(b+=4,++c):b+=3}return b},J=(a,b,c,d)=>{if(!(d>0))return 0;var e=c;d=c+d-1;for(var f=0;f=d)break;b[c++]=g}else if(g<=2047){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(g<=65535){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},Pa=a=>{var b=Array(Oa(a)+1);a=J(a,b,0,b.length); +b.length=a;return b},Qa=[];function Ra(a,b){Qa[a]={input:[],output:[],Wa:b};Sa(a,Ta)}var Ta={open(a){var b=Qa[a.node.jb];if(!b)throw new K(43);a.Ca=b;a.seekable=!1},close(a){a.Ca.Wa.ob(a.Ca)},ob(a){a.Ca.Wa.ob(a.Ca)},read(a,b,c,d){if(!a.Ca||!a.Ca.Wa.Qb)throw new K(60);for(var e=0,f=0;f0&&(ha(I(a.output)),a.output=[])},mc(){return{Hc:25856,Jc:5,Gc:191,Ic:35387,Fc:[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]}},nc(){return 0},oc(){return[24,80]}},Va={Db(a,b){b===null||b===10?(n(I(a.output)),a.output=[]):b!=0&&a.output.push(b)},ob(a){a.output?.length>0&&(n(I(a.output)),a.output=[])}},Xa=a=>{a=Math.ceil(a/65536)*65536;var b=Wa(65536,a);b&&x.fill(0,b,b+a);return b},L={Sa:null,Va(){return L.createNode(null,"/",16895,0)},createNode(a,b,c,d){if((c&61440)===24576||(c&61440)===4096)throw new K(63);L.Sa||(L.Sa={dir:{node:{Qa:L.za.Qa,Xa:L.za.Xa,fb:L.za.fb,rb:L.za.rb, +Ub:L.za.Ub,wb:L.za.wb,Vb:L.za.Vb,Fb:L.za.Fb,ub:L.za.ub},stream:{Ra:L.ya.Ra}},file:{node:{Qa:L.za.Qa,Xa:L.za.Xa},stream:{Ra:L.ya.Ra,read:L.ya.read,write:L.ya.write,gb:L.ya.gb,sb:L.ya.sb}},link:{node:{Qa:L.za.Qa,Xa:L.za.Xa,kb:L.za.kb},stream:{}},Lb:{node:{Qa:L.za.Qa,Xa:L.za.Xa},stream:Ya}});c=Za(a,b,c,d);M(c.mode)?(c.za=L.Sa.dir.node,c.ya=L.Sa.dir.stream,c.Ba={}):(c.mode&61440)===32768?(c.za=L.Sa.file.node,c.ya=L.Sa.file.stream,c.Ka=0,c.Ba=L.ac??(L.ac=new Uint8Array(0))):(c.mode&61440)===40960?(c.za= +L.Sa.link.node,c.ya=L.Sa.link.stream):(c.mode&61440)===8192&&(c.za=L.Sa.Lb.node,c.ya=L.Sa.Lb.stream);c.Ya=c.Na=c.Ma=Date.now();a&&(a.Ba[b]=c,a.Ya=a.Na=a.Ma=c.Ya);return c},za:{Qa(a){var b={};b.Zb=(a.mode&61440)===8192?a.id:1;b.kc=a.id;b.mode=a.mode;b.uc=1;b.uid=0;b.hc=0;b.jb=a.jb;b.size=M(a.mode)?4096:(a.mode&61440)===32768?a.Ka:(a.mode&61440)===40960?a.link.length:0;b.Ya=new Date(a.Ya);b.Na=new Date(a.Na);b.Ma=new Date(a.Ma);b.Wb=4096;b.Xb=Math.ceil(b.size/b.Wb);return b},Xa(a,b){for(var c of["mode", +"atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!==void 0&&(b=b.size,a.Ka!=b&&(c=a.Ba,a.Ba=new Uint8Array(b),a.Ba.set(c.subarray(0,Math.min(b,a.Ka))),a.Ka=b))},fb(){L.yb||(L.yb=new K(44),L.yb.stack="");throw L.yb;},rb(a,b,c,d){return L.createNode(a,b,c,d)},Ub(a,b,c){try{var d=$a(b,c)}catch(f){}if(d){if(M(a.mode))for(var e in d.Ba)throw new K(55);ab(d)}delete a.parent.Ba[a.name];b.Ba[c]=a;a.name=c;b.Ma=b.Na=a.parent.Ma=a.parent.Na=Date.now()},wb(a,b){delete a.Ba[b]; +a.Ma=a.Na=Date.now()},Vb(a,b){var c=$a(a,b),d;for(d in c.Ba)throw new K(55);delete a.Ba[b];a.Ma=a.Na=Date.now()},Fb(a){return[".","..",...Object.keys(a.Ba)]},ub(a,b,c){a=L.createNode(a,b,41471,0);a.link=c;return a},kb(a){if((a.mode&61440)!==40960)throw new K(28);return a.link}},ya:{read(a,b,c,d,e){if(e>=a.node.Ka)return 0;d=Math.min(a.node.Ka-e,d);b.set(a.node.Ba.subarray(e,e+d),c);return d},write(a,b,c,d,e,f){b.buffer===v.buffer&&(f=!1);if(!d)return 0;a=a.node;a.Na=a.Ma=Date.now();if(f)a.Ba=b.subarray(c, +c+d),a.Ka=d;else if(a.Ka===0&&e===0)a.Ba=b.slice(c,c+d),a.Ka=d;else{f=e+d;var g=a.Ba.length;g>=f||(f=Math.max(f,g*(g<1048576?2:1.125)>>>0),g&&(f=Math.max(f,256)),g=a.Ba.subarray(0,a.Ka),a.Ba=new Uint8Array(f),a.Ba.set(g));a.Ba.set(b.subarray(c,c+d),e);a.Ka=Math.max(a.Ka,e+d)}return d},Ra(a,b,c){c===1?b+=a.position:c===2&&(a.node.mode&61440)===32768&&(b+=a.node.Ka);if(b<0)throw new K(28);return b},gb(a,b,c,d,e){if((a.node.mode&61440)!==32768)throw new K(43);a=a.node.Ba;if(e&2||a.buffer!==v.buffer){d= +!0;e=Xa(b);if(!e)throw new K(48);if(a){if(c>0||c+b{var c=0;a&&(c|=365);b&&(c|=146);return c},cb=async a=>{a=await ea(a);return new Uint8Array(a)},db=null,eb=async()=>db,fb=0,gb=()=>{fb--;fb||db.resolve()},hb=()=>{if(!fb){var a;db=new Promise(b=>a=b);db.resolve=a}fb++},ib=[],jb=async(a,b)=>{typeof Browser!="undefined"&& +Browser.init();for(var c of ib)if(c.canHandle(b))return c.handle(a,b);return a},kb=null,lb={},mb=[],nb=1,N=null,ob=!1,pb=!0,K=class{name="ErrnoError";constructor(a){this.Fa=a}},qb=class{shared={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},rb=class{za={};ya={};tb=365;xb=146;hb=null;constructor(a,b,c,d){a||=this;this.parent= +a;this.Va=a.Va;this.id=nb++;this.name=b;this.mode=c;this.jb=d;this.Ya=this.Na=this.Ma=Date.now()}get read(){return(this.mode&this.tb)===this.tb}set read(a){a?this.mode|=this.tb:this.mode&=~this.tb}get write(){return(this.mode&this.xb)===this.xb}set write(a){a?this.mode|=this.xb:this.mode&=~this.xb}get rc(){return M(this.mode)}get qc(){return(this.mode&61440)===8192}};function O(a,b={}){if(!a)throw new K(44);b.zb??(b.zb=!0);a.charAt(0)==="/"||(a="//"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(h=> +!!h);for(var d=kb,e="/",f=0;f>>0)%N.length}function ab(a){var b=tb(a.parent.id,a.name);if(N[b]===a)N[b]=a.ab;else for(b=N[b];b;){if(b.ab===a){b.ab=a.ab;break}b=b.ab}}function $a(a,b){var c=M(a.mode)?(c=ub(a,"x"))?c:a.za.fb?0:2:54;if(c)throw new K(c);for(c=N[tb(a.id,b)];c;c=c.ab){var d= +c.name;if(c.parent.id===a.id&&d===b)return c}return a.za.fb(a,b)}function Za(a,b,c,d){a=new rb(a,b,c,d);b=tb(a.parent.id,a.name);a.ab=N[b];return N[b]=a}function M(a){return(a&61440)===16384}function ub(a,b){return pb?0:b.includes("r")&&!(a.mode&292)||b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73)?2:0}function vb(a,b){if(!M(a.mode))return 54;try{return $a(a,b),20}catch(c){}return ub(a,"wx")}function wb(a){if(!a)throw new K(63);return a}function P(a){a=mb[a];if(!a)throw new K(8);return a} +function xb(a,b=-1){a=Object.assign(new qb,a);if(b==-1)a:{for(b=0;b<=4096;b++)if(!mb[b])break a;throw new K(33);}a.Za=b;return mb[b]=a}function yb(a,b=-1){a=xb(a,b);a.ya?.Lc?.(a);return a}function zb(a,b){var c=void 0,d=c?null:a;c??=a.za.Xa;wb(c);try{c(d,b)}catch(e){if(e instanceof RangeError)throw new K(22);throw e;}}var Ya={open(a){a.ya=lb[a.node.jb].ya;a.ya.open?.(a)},Ra(){throw new K(70);}};function Sa(a,b){lb[a]={ya:b}}function Ab(a,b){var c=b==="/";if(c&&kb)throw new K(10);if(!c&&b){var d=O(b, +{zb:!1});b=d.path;d=d.node;if(d.hb)throw new K(10);if(!M(d.mode))throw new K(54);}b={type:a,Nc:{},Sb:b,tc:[]};a=a.Va(b);a.Va=b;b.root=a;c?kb=a:d&&(d.hb=b,d.Va&&d.Va.tc.push(b))}function Bb(a,b,c){var d=O(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new K(28);if(a==="."||a==="..")throw new K(20);var e=vb(d,a);if(e)throw new K(e);if(!d.za.rb)throw new K(63);return d.za.rb(d,a,b,c)}function Cb(a,b=438){return Bb(a,b&4095|32768,0)}function Q(a){return Bb(a,16895,0)}function Db(a, +b,c){typeof c=="undefined"&&(c=b,b=438);return Bb(a,b|8192,c)}function Eb(a,b){if(!Ka(a))throw new K(44);var c=O(b,{parent:!0}).node;if(!c)throw new K(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=vb(c,b);if(d)throw new K(d);if(!c.za.ub)throw new K(63);c.za.ub(c,b,a)}function Fb(a){var b=O(a,{parent:!0}).node;if(!b)throw new K(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=$a(b,a);a:{try{var d=$a(b,a)}catch(f){d=f.Fa;break a}var e=ub(b,"wx");d=e?e:M(d.mode)?31:0}if(d)throw new K(d);if(!b.za.wb)throw new K(63); +if(c.hb)throw new K(10);b.za.wb(b,a);ab(c)}function Gb(a,b){a=O(a,{nb:!b}).node;return wb(a.za.Qa)(a)}function Hb(a,b){a=typeof a=="string"?O(a,{nb:!0}).node:a;zb(a,{mode:b&4095|a.mode&-4096,Ma:Date.now(),Kc:void 0})}function Ib(a,b,c=438){if(a==="")throw new K(44);if(typeof b=="string"){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof d=="undefined")throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if(typeof a=="object")d=a;else{var e=a.endsWith("/");var f=O(a, +{nb:!(b&131072),vc:!0});d=f.node;a=f.path}f=!1;if(b&64)if(d){if(b&128)throw new K(20);}else{if(e)throw new K(31);d=Bb(a,c|511,0);f=!0}if(!d)throw new K(44);(d.mode&61440)===8192&&(b&=-513);if(b&65536&&!M(d.mode))throw new K(54);if(!f&&(d?(d.mode&61440)===40960?e=32:(e=["r","w","rw"][b&3],b&512&&(e+="w"),e=M(d.mode)&&(e!=="r"||b&576)?31:ub(d,e)):e=44,e))throw new K(e);if(b&512&&!f){e=d;e=typeof e=="string"?O(e,{nb:!0}).node:e;if(M(e.mode))throw new K(31);if((e.mode&61440)!==32768)throw new K(28);if(a= +ub(e,"w"))throw new K(a);zb(e,{size:0,timestamp:Date.now()})}b=xb({node:d,path:sb(d),flags:b&-131713,seekable:!0,position:0,ya:d.ya,Ec:[],error:!1});b.ya.open&&b.ya.open(b);f&&Hb(d,c&511);return b}function Jb(a){if(a.Za===null)throw new K(8);a.Ab&&(a.Ab=null);try{a.ya.close&&a.ya.close(a)}catch(b){throw b;}finally{mb[a.Za]=null}a.Za=null}function Kb(a,b,c){if(a.Za===null)throw new K(8);if(!a.seekable||!a.ya.Ra)throw new K(70);if(c!=0&&c!=1&&c!=2)throw new K(28);a.position=a.ya.Ra(a,b,c);a.Ec=[]}function Lb(a, +b,c,d,e,f){if(d<0||e<0)throw new K(28);if(a.Za===null)throw new K(8);if((a.flags&2097155)===0)throw new K(8);if(M(a.node.mode))throw new K(31);if(!a.ya.write)throw new K(28);a.seekable&&a.flags&1024&&Kb(a,0,2);var g=typeof e!="undefined";if(!g)e=a.position;else if(!a.seekable)throw new K(70);b=a.ya.write(a,b,c,d,e,f);g||(a.position+=b);return b}function Mb(a,b){a=typeof a=="string"?a:sb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Ga(a+"/"+c);try{Q(d)}catch(e){if(e.Fa!=20)throw e; +}a=d}}return d}function Nb(a,b,c,d){a=Ga((typeof a=="string"?a:sb(a))+"/"+b);return Cb(a,bb(c,d))}function Ob(a,b,c,d,e,f){var g=b;a&&(a=typeof a=="string"?a:sb(a),g=b?Ga(a+"/"+b):a);a=bb(d,e);g=Cb(g,a);c&&(typeof c=="string"&&(c=Pa(c)),c.subarray||(c=new Uint8Array(c)),Hb(g,a|146),b=Ib(g,577),Lb(b,c,0,c.length,0,f),Jb(b),Hb(g,a))}function Pb(a,b,c,d){a=Ga((typeof a=="string"?a:sb(a))+"/"+b);b=bb(!!c,!!d);Pb.Rb??(Pb.Rb=64);var e=Pb.Rb++<<8|0;Sa(e,{open(f){f.seekable=!1},close(){d?.buffer?.length&& +d(10)},read(f,g,h,m){for(var l=0,k=0;k=k.length)return 0;r=Math.min(k.length-t,r);if(k.slice)for(var u=0;uthis.length-1||k<0)){var p=k%this.Mb;return this.eb(k/this.Mb|0)[p]}}zc(k){this.eb=k}Kb(){var k=new XMLHttpRequest;k.open("HEAD",c,!1);k.send(null);k.status>=200&&k.status<300||k.status===304||F("Couldn't load "+ +c+". Status: "+k.status);var p=Number(k.getResponseHeader("Content-length")),q,r=(q=k.getResponseHeader("Accept-Ranges"))&&q==="bytes";k=(q=k.getResponseHeader("Content-Encoding"))&&q==="gzip";var t=1048576;r||(t=p);var u=this;u.zc(z=>{var E=z*t,B=(z+1)*t-1;B=Math.min(B,p-1);if(typeof u.mb[z]=="undefined"){var Z=u.mb;E>B&&F(`invalid range (${E}, ${B}) or no bytes requested!`);B>p-1&&F(`only ${p} bytes available! programmer error!`);var D=new XMLHttpRequest;D.open("GET",c,!1);p!==t&&D.setRequestHeader("Range", +"bytes="+E+"-"+B);D.responseType="arraybuffer";D.overrideMimeType&&D.overrideMimeType("text/plain; charset=x-user-defined");D.send(null);D.status>=200&&D.status<300||D.status===304||F("Couldn't load "+c+". Status: "+D.status);E=D.response!==void 0?new Uint8Array(D.response||[]):Pa(D.responseText??"");Z[z]=E}typeof u.mb[z]=="undefined"&&F("doXHR failed!");return u.mb[z]});if(k||!p)t=p=1,t=p=this.eb(0).length,ha("LazyFiles on gzip forces download of the whole file when length is accessed");this.Ib= +p;this.Hb=t;this.Cb=!0}get length(){this.Cb||this.Kb();return this.Ib}get Mb(){this.Cb||this.Kb();return this.Hb}}if(globalThis.XMLHttpRequest){ba||F("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var m=void 0}else m=c,h=void 0;var l=Nb(a,b,d,e);h?l.Ba=h:m&&(l.Ba=null,l.url=m);Object.defineProperties(l,{Ka:{get:function(){return this.Ba.length}}});a={};for(let [k,p]of Object.entries(l.ya))a[k]=(...q)=>{Qb(l);return p(...q)}; +a.read=(k,p,q,r,t)=>{Qb(l);return f(k,p,q,r,t)};a.gb=(k,p,q)=>{Qb(l);var r=Xa(p);if(!r)throw new K(48);f(k,v,r,p,q);return{Aa:r,Jb:!0}};l.ya=a;return l}var R={};function Sb(a,b,c){if(b.charAt(0)==="/")return b;a=a===-100?"/":P(a).path;if(b.length==0){if(!c)throw new K(44);return a}return a+"/"+b}function Tb(a,b){A[a>>2]=b.Zb;A[a+4>>2]=b.mode;A[a+8>>2]=b.uc;A[a+12>>2]=b.uid;A[a+16>>2]=b.hc;A[a+20>>2]=b.jb;C[a+24>>3]=BigInt(b.size);y[a+32>>2]=4096;y[a+36>>2]=b.Xb;var c=b.Ya.getTime(),d=b.Na.getTime(), +e=b.Ma.getTime();C[a+40>>3]=BigInt(Math.floor(c/1E3));A[a+48>>2]=c%1E3*1E3*1E3;C[a+56>>3]=BigInt(Math.floor(d/1E3));A[a+64>>2]=d%1E3*1E3*1E3;C[a+72>>3]=BigInt(Math.floor(e/1E3));A[a+80>>2]=e%1E3*1E3*1E3;C[a+88>>3]=BigInt(b.kc);return 0}var Ea=void 0,Ub={},Vb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Wb(a){return this.Ga(A[a>>2])}var Xb={},Yb={},Zb={},$b=class extends Error{constructor(a){super(a);this.name="InternalError"}},ac=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new $b("Mismatched type converter count"); +for(var m=0;mZb[h]=b);var e=Array(b.length),f=[],g=0;for(let [h,m]of b.entries())Yb.hasOwnProperty(m)?e[h]=Yb[m]:(f.push(m),Xb.hasOwnProperty(m)||(Xb[m]=[]),Xb[m].push(()=>{e[h]=Yb[m];++g;g===f.length&&d(e)}));0===f.length&&d(e)},T=a=>{for(var b="";;){var c=x[a++];if(!c)return b;b+=String.fromCharCode(c)}},U=class extends Error{constructor(a){super(a);this.name="BindingError"}};function bc(a,b,c={}){var d=b.name;if(!a)throw new U(`type "${d}" must have a positive integer typeid pointer`); +if(Yb.hasOwnProperty(a)){if(c.jc)return;throw new U(`Cannot register type '${d}' twice`);}Yb[a]=b;delete Zb[a];Xb.hasOwnProperty(a)&&(b=Xb[a],delete Xb[a],b.forEach(e=>e()))}function S(a,b,c={}){return bc(a,b,c)}var cc=(a,b,c)=>{switch(b){case 1:return c?d=>v[d]:d=>x[d];case 2:return c?d=>w[d>>1]:d=>pa[d>>1];case 4:return c?d=>y[d>>2]:d=>A[d>>2];case 8:return c?d=>C[d>>3]:d=>sa[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},dc=a=>{throw new U(a.xa.Ea.Da.name+" instance already deleted"); +},ec=!1,fc=()=>{},hc=a=>{if(!globalThis.FinalizationRegistry)return hc=b=>b,a;ec=new FinalizationRegistry(b=>{b=b.xa;--b.count.value;0===b.count.value&&(b.Ia?b.Oa.Ta(b.Ia):b.Ea.Da.Ta(b.Aa))});hc=b=>{var c=b.xa;c.Ia&&ec.register(b,{xa:c},b);return b};fc=b=>{ec.unregister(b)};return hc(a)},ic=[];function jc(){}var kc=(a,b)=>Object.defineProperty(b,"name",{value:a}),lc={},mc=(a,b,c)=>{if(void 0===a[b].Ha){var d=a[b];a[b]=function(...e){if(!a[b].Ha.hasOwnProperty(e.length))throw new U(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ha})!`); +return a[b].Ha[e.length].apply(this,e)};a[b].Ha=[];a[b].Ha[d.bb]=d}},nc=(a,b,c)=>{if(Module.hasOwnProperty(a)){if(void 0===c||void 0!==Module[a].Ha&&void 0!==Module[a].Ha[c])throw new U(`Cannot register public name '${a}' twice`);mc(Module,a,a);if(Module[a].Ha.hasOwnProperty(c))throw new U(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);Module[a].Ha[c]=b}else Module[a]=b,Module[a].bb=c},oc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return b>= +48&&b<=57?`_${a}`:a};function pc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.$a=c;this.Ta=d;this.La=e;this.cc=f;this.lb=g;this.$b=h;this.xc=[]}var qc=(a,b,c)=>{for(;b!==c;){if(!b.lb)throw new U(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.lb(a);b=b.La}return a},rc=a=>{if(a===null)return"null";var b=typeof a;return b==="object"||b==="array"||b==="function"?a.toString():""+a};function sc(a,b){if(b===null){if(this.Bb)throw new U(`null is not a valid ${this.name}`); +return 0}if(!b.xa)throw new U(`Cannot pass "${rc(b)}" as a ${this.name}`);if(!b.xa.Aa)throw new U(`Cannot pass deleted object as a pointer of type ${this.name}`);return qc(b.xa.Aa,b.xa.Ea.Da,this.Da)}function tc(a,b){if(b===null){if(this.Bb)throw new U(`null is not a valid ${this.name}`);if(this.qb){var c=this.Eb();a!==null&&a.push(this.Ta,c);return c}return 0}if(!b||!b.xa)throw new U(`Cannot pass "${rc(b)}" as a ${this.name}`);if(!b.xa.Aa)throw new U(`Cannot pass deleted object as a pointer of type ${this.name}`); +if(!this.pb&&b.xa.Ea.pb)throw new U(`Cannot convert argument of type ${b.xa.Oa?b.xa.Oa.name:b.xa.Ea.name} to parameter type ${this.name}`);c=qc(b.xa.Aa,b.xa.Ea.Da,this.Da);if(this.qb){if(void 0===b.xa.Ia)throw new U("Passing raw pointer to smart pointer is illegal");switch(this.Dc){case 0:if(b.xa.Oa===this)c=b.xa.Ia;else throw new U(`Cannot convert argument of type ${b.xa.Oa?b.xa.Oa.name:b.xa.Ea.name} to parameter type ${this.name}`);break;case 1:c=b.xa.Ia;break;case 2:if(b.xa.Oa===this)c=b.xa.Ia; +else{var d=b.clone();c=this.yc(c,V(()=>d["delete"]()));a!==null&&a.push(this.Ta,c)}break;default:throw new U("Unsupported sharing policy");}}return c}function uc(a,b){if(b===null){if(this.Bb)throw new U(`null is not a valid ${this.name}`);return 0}if(!b.xa)throw new U(`Cannot pass "${rc(b)}" as a ${this.name}`);if(!b.xa.Aa)throw new U(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.xa.Ea.pb)throw new U(`Cannot convert argument of type ${b.xa.Ea.name} to parameter type ${this.name}`); +return qc(b.xa.Aa,b.xa.Ea.Da,this.Da)}var vc=(a,b,c)=>{if(b===c)return a;if(void 0===c.La)return null;a=vc(a,b,c.La);return a===null?null:c.$b(a)},wc={},xc=(a,b)=>{if(b===void 0)throw new U("ptr should not be undefined");for(;a.La;)b=a.lb(b),a=a.La;return wc[b]},yc=(a,b)=>{if(!b.Ea||!b.Aa)throw new $b("makeClassHandle requires ptr and ptrType");if(!!b.Oa!==!!b.Ia)throw new $b("Both smartPtrType and smartPtr must be specified");b.count={value:1};return hc(Object.create(a,{xa:{value:b,writable:!0}}))}; +function Ac(a,b,c,d,e,f,g,h,m,l,k){this.name=a;this.Da=b;this.Bb=c;this.pb=d;this.qb=e;this.wc=f;this.Dc=g;this.Tb=h;this.Eb=m;this.yc=l;this.Ta=k;e||b.La!==void 0?this.Ja=tc:(this.Ja=d?sc:uc,this.Pa=null)}var Bc=(a,b,c)=>{if(!Module.hasOwnProperty(a))throw new $b("Replacing nonexistent public symbol");void 0!==Module[a].Ha&&void 0!==c?Module[a].Ha[c]=b:(Module[a]=b,Module[a].bb=c)},W=(a,b)=>{a=T(a);var c=G(b);if(typeof c!="function")throw new U(`unknown function pointer with signature ${a}: ${b}`); +return c};class Cc extends Error{}var Ec=a=>{a=Dc(a);var b=T(a);X(a);return b},Fc=(a,b)=>{function c(f){e[f]||Yb[f]||(Zb[f]?Zb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Cc(`${a}: `+d.map(Ec).join([", "]));};function Gc(a){for(var b=1;b{for(var c=[],d=0;d>2]);return c},Jc=a=>{a=a.trim();var b=a.indexOf("(");return b===-1?a:a.slice(0,b)},Kc=[],Y=[0,1,,1,null,1,!0,1,!1,1],Lc=a=> +{a>9&&0===--Y[a+1]&&(Y[a]=void 0,Kc.push(a))},Mc=a=>{if(!a)throw new U(`Cannot use deleted val. handle = ${a}`);return Y[a]},V=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:let b=Kc.pop()||Y.length;Y[b]=a;Y[b+1]=1;return b}},Nc={name:"emscripten::val",Ga:a=>{var b=Mc(a);Lc(a);return b},Ja:(a,b)=>V(b),Ua:Wb,Pa:null},Oc=(a,b)=>{switch(b){case 4:return function(c){return this.Ga(qa[c>>2])};case 8:return function(c){return this.Ga(ra[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`); +}},Pc=Object.assign({optional:!0},Nc),Qc=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Rc=(a,b,c)=>{a>>=1;b=Ma(pa,a,b/2,c);if(b-a>16&&Qc)return Qc.decode(pa.subarray(a,b));for(c="";a{if(c<2)return 0;c-=2;var d=b;c=c>1]=a.charCodeAt(e),b+=2;w[b>>1]=0;return b-d},Tc=a=>a.length*2,Uc=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=A[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d}, +Vc=(a,b,c=2147483647)=>{if(c<4)return 0;var d=b;c=d+c-4;for(var e=0;e65535&&e++;y[b>>2]=f;b+=4;if(b+4>c)break}y[b>>2]=0;return b-d},Wc=a=>{for(var b=0,c=0;c65535&&c++,b+=4;return b},Xc=0,Yc=[],Zc=a=>{var b=Yc.length;Yc.push(a);return b},$c=(a,b)=>{for(var c=Array(a),d=0;d>2],g=Yb[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Ec(f)}`,new U(a);c[e]=g}return c},ad={},bd=a=>{var b=ad[a]; +return b===void 0?T(a):b},cd=a=>a%4===0&&(a%100!==0||a%400===0),dd=[0,31,60,91,121,152,182,213,244,274,305,335],ed=[0,31,59,90,120,151,181,212,243,273,304,334],fd={},gd=a=>{if(!(a instanceof xa||a=="unwind"))throw a;},hd=a=>{ka=a;za||Xc>0||(ja=!0);throw new xa(a);},jd=a=>{if(!ja)try{a()}catch(b){gd(b)}finally{if(!(za||Xc>0))try{ka=a=ka,hd(a)}catch(b){gd(b)}}},kd=[],ld=(a,b)=>setTimeout(()=>{jd(a)},b),md={},od=()=>{if(!nd){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user", +LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in md)md[b]===void 0?delete a[b]:a[b]=md[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);nd=c}return nd},nd;N=Array(4096);Ab(L,"/");Q("/tmp");Q("/home");Q("/home/web_user");(function(){Q("/dev");Sa(259,{read:()=>0,write:(d,e,f,g)=>g,Ra:()=>0});Db("/dev/null",259);Ra(1280,Ua);Ra(1536,Va);Db("/dev/tty",1280);Db("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(Ja(a),b=a.byteLength);return a[--b]}; +Pb("/dev","random",c);Pb("/dev","urandom",c);Q("/dev/shm");Q("/dev/shm/tmp")})();(function(){Q("/proc");var a=Q("/proc/self");Q("/proc/self/fd");Ab({Va(){var b=Za(a,"fd",16895,73);b.ya={Ra:L.ya.Ra};b.za={fb(c,d){c=+d;var e=P(c);c={parent:null,Va:{Sb:"fake"},za:{kb:()=>e.path},id:c+1};return c.parent=c},Fb(){return Array.from(mb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})();(()=>{var a=jc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof +jc&&c instanceof jc))return!1;var d=this.xa.Ea.Da,e=this.xa.Aa;c.xa=c.xa;var f=c.xa.Ea.Da;for(c=c.xa.Aa;d.La;)e=d.lb(e),d=d.La;for(;f.La;)c=f.lb(c),f=f.La;return d===f&&e===c},clone:function(){this.xa.Aa||dc(this);if(this.xa.ib)return this.xa.count.value+=1,this;var c=hc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.xa;c=c(e.call(d,f,{xa:{value:{count:g.count,cb:g.cb,ib:g.ib,Aa:g.Aa,Ea:g.Ea,Ia:g.Ia,Oa:g.Oa}}}));c.xa.count.value+=1;c.xa.cb=!1;return c},["delete"](){this.xa.Aa||dc(this); +if(this.xa.cb&&!this.xa.ib)throw new U("Object already scheduled for deletion");fc(this);var c=this.xa;--c.count.value;0===c.count.value&&(c.Ia?c.Oa.Ta(c.Ia):c.Ea.Da.Ta(c.Aa));this.xa.ib||(this.xa.Ia=void 0,this.xa.Aa=void 0)},isDeleted:function(){return!this.xa.Aa},deleteLater:function(){this.xa.Aa||dc(this);if(this.xa.cb&&!this.xa.ib)throw new U("Object already scheduled for deletion");ic.push(this);this.xa.cb=!0;return this}});var b=Symbol.dispose;b&&(a[b]=a["delete"])})();Object.assign(Ac.prototype, +{dc(a){this.Tb&&(a=this.Tb(a));return a},Ob(a){this.Ta?.(a)},Ua:Wb,Ga:function(a){function b(){return this.qb?yc(this.Da.$a,{Ea:this.wc,Aa:c,Oa:this,Ia:a}):yc(this.Da.$a,{Ea:this,Aa:a})}var c=this.dc(a);if(!c)return this.Ob(a),null;var d=xc(this.Da,c);if(void 0!==d){if(0===d.xa.count.value)return d.xa.Aa=c,d.xa.Ia=a,d.clone();d=d.clone();this.Ob(a);return d}d=this.Da.cc(c);d=lc[d];if(!d)return b.call(this);d=this.pb?d.Yb:d.pointerType;var e=vc(c,this.Da,d.Da);return e===null?b.call(this):this.qb? +yc(d.Da.$a,{Ea:d,Aa:e,Oa:this,Ia:a}):yc(d.Da.$a,{Ea:d,Aa:e})}});oa=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:(Module.INITIAL_MEMORY||209715200)/65536,maximum:32768});na();Module.noExitRuntime&&(za=Module.noExitRuntime);Module.printErr&&(n=Module.printErr);Module.wasmBinary&&(ia=Module.wasmBinary);Module.addRunDependency=hb;Module.removeRunDependency=gb;Module.FS_preloadFile=async(a,b,c,d,e,f,g,h)=>{var m=b?Ka(Ga(a+"/"+b)):a,l=`cp ${m}`;hb(l);try{var k=c;typeof c=="string"&& +(k=await cb(c));k=await jb(k,m);h?.();f||Ob(a,b,k,d,e,g)}finally{gb(l)}};Module.FS_unlink=(...a)=>Fb(...a);Module.FS_createPath=(...a)=>Mb(...a);Module.FS_createDevice=(...a)=>Pb(...a);Module.FS_createDataFile=(...a)=>Ob(...a);Module.FS_createLazyFile=(...a)=>Rb(...a);var pd={230277:(a,b,c,d)=>{a=a?I(x,a):"";b=b?I(x,b):"";c=c?I(x,c):"";d=d?I(x,d):"";throw Error(a+b+c+d);},230493:(a,b)=>{a=a?I(x,a):"";b=b?I(x,b):"";throw Error(a+b);},230603:a=>{a=a?I(x,a):"";throw Error(a);},230671:a=>{a=a?I(x,a): +"";throw Error(a);}},qd,rd,X,Dc,Wa,sd,td,ud,vd,Ba,Ad={K:(a,b)=>G(a)(b),m:(a,b,c)=>{(new Ca(a)).init(b,c);Da++;F()},w:function(a,b,c){Ea=c;try{var d=P(a);switch(b){case 0:var e=H();if(e<0)break;for(;mb[e];)e++;return yb(d,e).Za;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=H(),d.flags=d.flags&-289793|e&289792,0;case 12:return e=H(),w[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if(typeof R=="undefined"||f.name!=="ErrnoError")throw f;return-f.Fa}},$:function(a,b){try{var c= +P(a),d=c.node,e=c.ya.Qa;a=e?c:d;e??=d.za.Qa;wb(e);var f=e(a);return Tb(b,f)}catch(g){if(typeof R=="undefined"||g.name!=="ErrnoError")throw g;return-g.Fa}},aa:function(a,b,c){Ea=c;try{var d=P(a);switch(b){case 21509:return d.Ca?0:-59;case 21505:if(!d.Ca)return-59;if(d.Ca.Wa.mc){a=[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];var e=H();y[e>>2]=25856;y[e+4>>2]=5;y[e+8>>2]=191;y[e+12>>2]=35387;for(var f=0;f<32;f++)v[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Ca? +0:-59;case 21506:case 21507:case 21508:if(!d.Ca)return-59;if(d.Ca.Wa.nc)for(e=H(),a=[],f=0;f<32;f++)a.push(v[e+f+17]);return 0;case 21519:if(!d.Ca)return-59;e=H();return y[e>>2]=0;case 21520:return d.Ca?-28:-59;case 21537:case 21531:e=H();if(!d.ya.lc)throw new K(59);return d.ya.lc(d,b,e);case 21523:if(!d.Ca)return-59;d.Ca.Wa.oc&&(f=[24,80],e=H(),w[e>>1]=f[0],w[e+2>>1]=f[1]);return 0;case 21524:return d.Ca?0:-59;case 21515:return d.Ca?0:-59;default:return-28}}catch(g){if(typeof R=="undefined"||g.name!== +"ErrnoError")throw g;return-g.Fa}},Y:function(a,b){try{return a=a?I(x,a):"",Tb(b,Gb(a,!0))}catch(c){if(typeof R=="undefined"||c.name!=="ErrnoError")throw c;return-c.Fa}},X:function(a,b,c,d){try{b=b?I(x,b):"";var e=d&256;b=Sb(a,b,d&4096);return Tb(c,e?Gb(b,!0):Gb(b))}catch(f){if(typeof R=="undefined"||f.name!=="ErrnoError")throw f;return-f.Fa}},v:function(a,b,c,d){Ea=d;try{b=b?I(x,b):"";b=Sb(a,b);var e=d?H():0;c&64&&(e&=-19);return Ib(b,c,e).Za}catch(f){if(typeof R=="undefined"||f.name!=="ErrnoError")throw f; +return-f.Fa}},_:function(a,b){try{return a=a?I(x,a):"",Tb(b,Gb(a))}catch(c){if(typeof R=="undefined"||c.name!=="ErrnoError")throw c;return-c.Fa}},ba:()=>F(""),f:a=>{var b=Ub[a];delete Ub[a];var c=b.Eb,d=b.Ta,e=b.Pb,f=e.map(g=>g.fc).concat(e.map(g=>g.Bc));ac([a],f,g=>{var h={},m,l;for([m,l]of e.entries()){let k=g[m],p=l.eb,q=l.ec,r=g[m+e.length],t=l.Ac,u=l.Cc;h[l.bc]={read:z=>k.Ga(p(q,z)),write:(z,E)=>{var B=[];t(u,z,r.Ja(B,E));Vb(B)},optional:k.optional}}return[{name:b.name,Ga:k=>{var p={},q;for(q in h)p[q]= +h[q].read(k);d(k);return p},Ja:(k,p)=>{for(var q in h)if(!(q in p||h[q].optional))throw new TypeError(`Missing field: "${q}"`);var r=c();for(q in h)h[q].write(r,p[q]);k!==null&&k.push(d,r);return r},Ua:Wb,Pa:d}]})},y:(a,b,c,d,e)=>{b=T(b);d=d===0n;var f=g=>g;if(d){let g=c*8;f=h=>BigInt.asUintN(g,h);e=f(e)}S(a,{name:b,Ga:f,Ja:(g,h)=>{typeof h=="number"&&(h=BigInt(h));return h},Ua:cc(b,c,!d),Pa:null})},ea:(a,b,c,d)=>{b=T(b);S(a,{name:b,Ga:function(e){return!!e},Ja:function(e,f){return f?c:d},Ua:function(e){return this.Ga(x[e])}, +Pa:null})},ga:(a,b,c,d,e,f,g,h,m,l,k,p,q)=>{k=T(k);f=W(e,f);h&&=W(g,h);l&&=W(m,l);q=W(p,q);var r=oc(k);nc(r,function(){Fc(`Cannot construct ${k} due to unbound types`,[d])});ac([a,b,c],d?[d]:[],t=>{t=t[0];if(d){var u=t.Da;var z=u.$a}else z=jc.prototype;t=kc(k,function(...D){if(Object.getPrototypeOf(this)!==E)throw new U(`Use 'new' to construct ${k}`);if(void 0===B.Nb)throw new U(`${k} has no accessible constructor`);var zc=B.Nb[D.length];if(void 0===zc)throw new U(`Tried to invoke ctor of ${k} with invalid number of parameters (${D.length}) - expected (${Object.keys(B.Nb).toString()}) parameters instead!`); +return zc.apply(this,D)});var E=Object.create(z,{constructor:{value:t}});t.prototype=E;var B=new pc(k,t,E,q,u,f,h,l);if(B.La){var Z;(Z=B.La).Gb??(Z.Gb=[]);B.La.Gb.push(B)}u=new Ac(k,B,!0,!1,!1);Z=new Ac(k+"*",B,!1,!1,!1);z=new Ac(k+" const*",B,!1,!0,!1);lc[a]={pointerType:Z,Yb:z};Bc(r,t);return[u,Z,z]})},l:(a,b,c,d,e,f,g,h)=>{var m=Ic(c,d);b=T(b);b=Jc(b);f=W(e,f);ac([],[a],l=>{function k(){Fc(`Cannot call ${p} due to unbound types`,m)}l=l[0];var p=`${l.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); +h&&l.Da.xc.push(b);var q=l.Da.$a,r=q[b];void 0===r||void 0===r.Ha&&r.className!==l.name&&r.bb===c-2?(k.bb=c-2,k.className=l.name,q[b]=k):(mc(q,b,p),q[b].Ha[c-2]=k);ac([],m,t=>{t=Hc(p,t,l,f,g);void 0===q[b].Ha?(t.bb=c-2,q[b]=t):q[b].Ha[c-2]=t;return[]});return[]})},ca:a=>S(a,Nc),x:(a,b,c)=>{b=T(b);S(a,{name:b,Ga:d=>d,Ja:(d,e)=>e,Ua:Oc(b,c),Pa:null})},h:(a,b,c,d,e,f)=>{var g=Ic(b,c);a=T(a);a=Jc(a);e=W(d,e);nc(a,function(){Fc(`Cannot call ${a} due to unbound types`,g)},b-1);ac([],g,h=>{Bc(a,Hc(a,[h[0], +null].concat(h.slice(1)),null,e,f),b-1);return[]})},i:(a,b,c,d,e)=>{b=T(b);var f=h=>h;if(d===0){var g=32-8*c;f=h=>h<>>g;e=f(e)}S(a,{name:b,Ga:f,Ja:(h,m)=>m,Ua:cc(b,c,d!==0),Pa:null})},g:(a,b,c)=>{function d(f){return new e(v.buffer,A[f+4>>2],A[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=T(c);S(a,{name:c,Ga:d,Ua:d},{jc:!0})},j:a=>{S(a,Pc)},da:(a,b)=>{b=T(b);S(a,{name:b,Ga(c){var d=(d=c+4)?I(x,d,A[c>> +2],!0):"";X(c);return d},Ja(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e=typeof d=="string";if(!(e||ArrayBuffer.isView(d)&&d.BYTES_PER_ELEMENT==1))throw new U("Cannot pass non-string to std::string");var f=e?Oa(d):d.length;var g=qd(4+f+1),h=g+4;A[g>>2]=f;e?J(d,x,h,f+1):x.set(d,h);c!==null&&c.push(X,g);return g},Ua:Wb,Pa(c){X(c)}})},s:(a,b,c)=>{c=T(c);if(b===2){var d=Rc;var e=Sc;var f=Tc}else d=Uc,e=Vc,f=Wc;S(a,{name:c,Ga:g=>{var h=d(g+4,A[g>>2]*b,!0);X(g);return h},Ja:(g,h)=>{if(typeof h!= +"string")throw new U(`Cannot pass non-string to C++ string type ${c}`);var m=f(h),l=qd(4+m+b);A[l>>2]=m/b;e(h,l+4,m+b);g!==null&&g.push(X,l);return l},Ua:Wb,Pa(g){X(g)}})},e:(a,b,c,d,e,f)=>{Ub[a]={name:T(b),Eb:W(c,d),Ta:W(e,f),Pb:[]}},b:(a,b,c,d,e,f,g,h,m,l)=>{Ub[a].Pb.push({bc:T(b),fc:c,eb:W(d,e),ec:f,Bc:g,Ac:W(h,m),Cc:l})},fa:(a,b)=>{b=T(b);S(a,{sc:!0,name:b,Ga:()=>{},Ja:()=>{}})},M:()=>{za=!1;Xc=0},F:()=>{throw new ma;},d:(a,b,c)=>{var d;[b,...d]=$c(a,b);var e=b.Ja.bind(b),f=d.map(h=>h.Ua.bind(h)); +a--;var g=Array(a);b=`methodCaller<(${d.map(h=>h.name)}) => ${b.name}>`;return Zc(kc(b,(h,m,l,k)=>{for(var p=0,q=0;q>2]=V(h));return r}))},Z:Lc,o:a=>{if(!a)return V(globalThis);a=bd(a);return V(globalThis[a])},k:(a,b)=>{a=Mc(a);b=Mc(b);return V(a[b])},ka:a=>{a>9&&(Y[a+1]+=1)},c:(a,b,c,d,e)=>Yc[a](b,c,d,e), +A:()=>V([]),n:a=>V(bd(a)),B:a=>{var b=Mc(a);Vb(b);Lc(a)},P:function(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);if(isNaN(a.getTime()))return 1;y[b>>2]=a.getSeconds();y[b+4>>2]=a.getMinutes();y[b+8>>2]=a.getHours();y[b+12>>2]=a.getDate();y[b+16>>2]=a.getMonth();y[b+20>>2]=a.getFullYear()-1900;y[b+24>>2]=a.getDay();y[b+28>>2]=(cd(a.getFullYear())?dd:ed)[a.getMonth()]+a.getDate()-1|0;y[b+36>>2]=-(a.getTimezoneOffset()*60);var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(), +d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();y[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;return 0},Q:function(a){var b=(()=>{var c=new Date(y[a+20>>2]+1900,y[a+16>>2],y[a+12>>2],y[a+8>>2],y[a+4>>2],y[a>>2],0);if(isNaN(c.getTime()))return-1;var d=y[a+32>>2],e=c.getTimezoneOffset(),f=(new Date(c.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(c.getFullYear(),0,1)).getTimezoneOffset(),h=Math.min(g,f);if(d<0)d=Number(f!=g&&h==e);else if(d>0!=(h==e)&&(f=Math.max(g,f),c.setTime(c.getTime()+ +((d>0?h:f)-e)*6E4),isNaN(c.getTime())))return-1;y[a+32>>2]=d;y[a+24>>2]=c.getDay();y[a+28>>2]=(cd(c.getFullYear())?dd:ed)[c.getMonth()]+c.getDate()-1|0;y[a>>2]=c.getSeconds();y[a+4>>2]=c.getMinutes();y[a+8>>2]=c.getHours();y[a+12>>2]=c.getDate();y[a+16>>2]=c.getMonth();y[a+20>>2]=c.getYear();return c.getTime()/1E3})();return BigInt(b)},N:function(a,b,c,d,e,f,g){e=e<-9007199254740992||e>9007199254740992?NaN:Number(e);try{var h=P(d);if((b&2)!==0&&(c&2)===0&&(h.flags&2097155)!==2)throw new K(2);if((h.flags& +2097155)===1)throw new K(2);if(!h.ya.gb)throw new K(43);if(!a)throw new K(28);var m=h.ya.gb(h,a,e,b,c);var l=m.Aa;y[f>>2]=m.Jb;A[g>>2]=l;return 0}catch(k){if(typeof R=="undefined"||k.name!=="ErrnoError")throw k;return-k.Fa}},O:function(a,b,c,d,e,f){f=f<-9007199254740992||f>9007199254740992?NaN:Number(f);try{var g=P(e);if(c&2){if((g.node.mode&61440)!==32768)throw new K(43);d&2||g.ya.sb&&g.ya.sb(g,x.subarray(a,a+b),f,b,d)}}catch(h){if(typeof R=="undefined"||h.name!=="ErrnoError")throw h;return-h.Fa}}, +G:(a,b)=>{fd[a]&&(clearTimeout(fd[a].id),delete fd[a]);if(!b)return 0;var c=setTimeout(()=>{delete fd[a];jd(()=>sd(a,performance.now()))},b);fd[a]={id:c,Pc:b};return 0},R:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();A[a>>2]=Math.max(f,e)*60;y[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${g>=0?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=0&&a<=3))return 28;C[c>>3]=BigInt(Math.round((a===0?Date.now():performance.now())*1E3*1E3));return 0},p:(a,b,c)=>{kd.length=0;for(var d;d=x[b++];){var e=d!=105;e&=d!=112;c+=e&&c%8?4:0;kd.push(d==112?A[c>>2]:d==106?C[c>>3]:d==105?y[c>>2]:ra[c>>3]);c+=e?8:4}return pd[a](...kd)},z:(a,b,c)=>{var d=Error().stack.toString(),e=d.split("\n");d="";var f=RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),g=RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"),h; +for(h of e){var m=g.exec(h);if(m?.length==5){e=m[1];var l=m[2];var k=m[3];m=m[4]}else if(m=f.exec(h),m?.length>=4)e=m[1],l=m[2],k=m[3],m=m[4]|0;else{d+=h+"\n";continue}e=="_emscripten_log"||e=="_emscripten_get_callstack"?d="":a&24&&(a&64&&(l=l.substring(l.replace(/\\/g,"/").lastIndexOf("/")+1)),d+=` at ${e} (${l}:${k}:${m})\n`)}a=d=d.replace(/\s+$/,"");return!b||c<=0?Oa(a)+1:J(a,x,b,c)+1},J:()=>2147483648,I:a=>{var b=x.length;a>>>=0;if(a>2147483648)return!1;for(var c=1;c<=4;c*=2){a:{var d=(Math.min(2147483648, +Math.ceil(Math.max(a,b+2097152/c)/65536)*65536)-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);na();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},ia:(a,b,c)=>ld(()=>G(a)(c),b),V:(a,b)=>{var c=0,d=0,e;for(e of od()){var f=b+c;A[a+d>>2]=f;c+=J(e,x,f,Infinity)+1;d+=4}return 0},W:(a,b)=>{var c=od();A[a>>2]=c.length;a=0;for(var d of c)a+=Oa(d)+1;A[b>>2]=a;return 0},ha:a=>{ka=a;hd(a)},r:function(a){try{var b=P(a);Jb(b);return 0}catch(c){if(typeof R=="undefined"||c.name!=="ErrnoError")throw c; +return c.Fa}},U:function(a,b){try{var c=P(a);v[b]=c.Ca?2:M(c.mode)?3:(c.mode&61440)===40960?7:4;w[b+2>>1]=0;C[b+8>>3]=BigInt(0);C[b+16>>3]=BigInt(0);return 0}catch(d){if(typeof R=="undefined"||d.name!=="ErrnoError")throw d;return d.Fa}},u:function(a,b,c,d){try{a:{var e=P(a);a=b;for(var f,g=b=0;g>2],m=A[a+4>>2];a+=8;var l=e,k=h,p=m,q=f,r=v;if(p<0||q<0)throw new K(28);if(l.Za===null)throw new K(8);if((l.flags&2097155)===1)throw new K(8);if(M(l.node.mode))throw new K(31);if(!l.ya.read)throw new K(28); +var t=typeof q!="undefined";if(!t)q=l.position;else if(!l.seekable)throw new K(70);var u=l.ya.read(l,r,k,p,q);t||(l.position+=u);var z=u;if(z<0){var E=-1;break a}b+=z;if(z>2]=E;return 0}catch(B){if(typeof R=="undefined"||B.name!=="ErrnoError")throw B;return B.Fa}},T:function(a,b,c,d){b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 22;var e=P(a);Kb(e,b,c);C[d>>3]=BigInt(e.position);e.Ab&&b===0&&c===0&&(e.Ab=null);return 0}catch(f){if(typeof R== +"undefined"||f.name!=="ErrnoError")throw f;return f.Fa}},q:function(a,b,c,d){try{a:{var e=P(a);a=b;for(var f,g=b=0;g>2],m=A[a+4>>2];a+=8;var l=Lb(e,v,h,m,f);if(l<0){var k=-1;break a}b+=l;if(l>2]=k;return 0}catch(p){if(typeof R=="undefined"||p.name!=="ErrnoError")throw p;return p.Fa}},C:wd,t:xd,D:yd,E:zd,a:oa,L:hd,H:(a,b)=>Ja(x.subarray(a,a+b)),ja:function(a,b,c,d,e){var f=!1,g=m=>{f||(f=!0,clearTimeout(h),rd(a,m))};try{let m=new AbortController, +l=new Uint8Array(d);l.set(x.subarray(c,c+d));var h=setTimeout(()=>m.abort(),e);fetch(b?I(x,b):"",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:l,signal:m.signal}).then(k=>g(k.status),()=>g(0))}catch{g(0)}}};function xd(a,b){var c=vd();try{G(a)(b)}catch(d){ud(c);if(!(d instanceof la))throw d;td(1,0)}}function zd(a,b,c,d){var e=vd();try{G(a)(b,c,d)}catch(f){ud(e);if(!(f instanceof la))throw f;td(1,0)}}function yd(a,b,c){var d=vd();try{G(a)(b,c)}catch(e){ud(d);if(!(e instanceof +la))throw e;td(1,0)}}function wd(a,b,c,d){var e=vd();try{return G(a)(b,c,d)}catch(f){ud(e);if(!(f instanceof la))throw f;td(1,0)}}var Bd;Bd=await (async function(){var a={a:Ad};ta??=Module.locateFile?Module.locateFile?Module.locateFile("BlinkCardModule.wasm",da):da+"BlinkCardModule.wasm":(new URL("BlinkCardModule.wasm",import.meta.url)).href;a=Bd=(await wa(a)).instance.exports;qd=a.ma;rd=Module._mbPingRequestFinished=a.na;X=a.oa;Dc=a.qa;Wa=a.sa;sd=a.ta;td=a.ua;ud=a.va;vd=a.wa;Module.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE= +a.pa.value;Ba=a.ra;return Bd}());await (async function(){var a=Module.preRun;a&&(typeof a=="function"&&(a=[a]),ya.push(...a));for(;ya.length>0;)ya.shift()(Module);fb&&await eb();ja||(Module.noFSInit||ob||(ob=!0,Eb("/dev/tty","/dev/stdin"),Eb("/dev/tty","/dev/stdout"),Eb("/dev/tty1","/dev/stderr"),Ib("/dev/stdin",0),Ib("/dev/stdout",1),Ib("/dev/stderr",1)),Bd.la(),pb=!1)}());;return Module}export default createModule; diff --git a/packages/blinkcard-wasm/dist/simd/BlinkCardModule.wasm b/packages/blinkcard-wasm/dist/simd/BlinkCardModule.wasm new file mode 100644 index 00000000..fcf2c384 Binary files /dev/null and b/packages/blinkcard-wasm/dist/simd/BlinkCardModule.wasm differ diff --git a/packages/blinkcard-wasm/dist/size-manifest.json b/packages/blinkcard-wasm/dist/size-manifest.json index da01cce1..14fa676d 100644 --- a/packages/blinkcard-wasm/dist/size-manifest.json +++ b/packages/blinkcard-wasm/dist/size-manifest.json @@ -1,12 +1,10 @@ { "wasm": { - "basic": 2255156, - "advanced": 2258252, - "advanced-threads": 2282482 + "simd": 2146628, + "simd-threads": 2171427 }, "data": { - "basic": 8578325, - "advanced": 8578325, - "advanced-threads": 8578325 + "simd": 12191737, + "simd-threads": 12191737 } } \ No newline at end of file diff --git a/packages/blinkcard-wasm/docs/README.md b/packages/blinkcard-wasm/docs/README.md index 2cef2209..47bc61be 100644 --- a/packages/blinkcard-wasm/docs/README.md +++ b/packages/blinkcard-wasm/docs/README.md @@ -11,8 +11,6 @@ ## Type Aliases -- [AnonymizationMode](type-aliases/AnonymizationMode.md) -- [AnonymizationSettings](type-aliases/AnonymizationSettings.md) - [BlinkCardProcessResult](type-aliases/BlinkCardProcessResult.md) - [BlinkCardScanningResult](type-aliases/BlinkCardScanningResult.md) - [BlinkCardScanningSession](type-aliases/BlinkCardScanningSession.md) @@ -20,12 +18,11 @@ - [BlinkCardSessionSettingsInput](type-aliases/BlinkCardSessionSettingsInput.md) - [CardAccountResult](type-aliases/CardAccountResult.md) - [CardLivenessCheckResult](type-aliases/CardLivenessCheckResult.md) -- [CardNumberAnonymizationSettings](type-aliases/CardNumberAnonymizationSettings.md) +- [CardNumberRedactionSettings](type-aliases/CardNumberRedactionSettings.md) - [CardRotation](type-aliases/CardRotation.md) - [CheckResult](type-aliases/CheckResult.md) - [CroppedImageSettings](type-aliases/CroppedImageSettings.md) - [DateResult](type-aliases/DateResult.md) -- [DetectionLevel](type-aliases/DetectionLevel.md) - [DetectionStatus](type-aliases/DetectionStatus.md) - [ExtractionSettings](type-aliases/ExtractionSettings.md) - [FieldExtractionStatus](type-aliases/FieldExtractionStatus.md) @@ -39,22 +36,23 @@ - [LivenessSettings](type-aliases/LivenessSettings.md) - [PartialScanningSettingsInput](type-aliases/PartialScanningSettingsInput.md) - [ProcessingStatus](type-aliases/ProcessingStatus.md) +- [RedactionMode](type-aliases/RedactionMode.md) +- [RedactionSettings](type-aliases/RedactionSettings.md) - [ResourceFileType](type-aliases/ResourceFileType.md) - [ResultCompleteness](type-aliases/ResultCompleteness.md) - [ScanningSettings](type-aliases/ScanningSettings.md) - [ScanningSide](type-aliases/ScanningSide.md) - [ScanningStatus](type-aliases/ScanningStatus.md) +- [SensitivityLevel](type-aliases/SensitivityLevel.md) - [ServerPermissionErrorReason](type-aliases/ServerPermissionErrorReason.md) - [ServerPermissionSubmitError](type-aliases/ServerPermissionSubmitError.md) - [SingleSideScanningResult](type-aliases/SingleSideScanningResult.md) - [StrictnessLevel](type-aliases/StrictnessLevel.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) ## Variables - [resourceFileTypes](variables/resourceFileTypes.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) diff --git a/packages/blinkcard-wasm/docs/type-aliases/AnonymizationMode.md b/packages/blinkcard-wasm/docs/type-aliases/AnonymizationMode.md deleted file mode 100644 index 348ff2bd..00000000 --- a/packages/blinkcard-wasm/docs/type-aliases/AnonymizationMode.md +++ /dev/null @@ -1,12 +0,0 @@ -[**@microblink/blinkcard-wasm**](../README.md) - -*** - -[@microblink/blinkcard-wasm](../README.md) / AnonymizationMode - -# Type Alias: AnonymizationMode - -> **AnonymizationMode** = `"none"` \| `"image-only"` \| `"result-fields-only"` \| `"full-result"` - -AnonymizationMode is used to define level of anonymization performed on -recognizer result. diff --git a/packages/blinkcard-wasm/docs/type-aliases/AnonymizationSettings.md b/packages/blinkcard-wasm/docs/type-aliases/AnonymizationSettings.md deleted file mode 100644 index 6c6f1f3e..00000000 --- a/packages/blinkcard-wasm/docs/type-aliases/AnonymizationSettings.md +++ /dev/null @@ -1,51 +0,0 @@ -[**@microblink/blinkcard-wasm**](../README.md) - -*** - -[@microblink/blinkcard-wasm](../README.md) / AnonymizationSettings - -# Type Alias: AnonymizationSettings - -> **AnonymizationSettings** = `object` - -Holds the settings which control the anonymization of returned data. - -## Properties - -### cardholderNameAnonymizationMode - -> **cardholderNameAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of cardholder name anonymization. - -*** - -### cardNumberAnonymizationSettings - -> **cardNumberAnonymizationSettings**: [`CardNumberAnonymizationSettings`](CardNumberAnonymizationSettings.md) - -Defines the parameters of card number anonymization. - -*** - -### cardNumberPrefixAnonymizationMode - -> **cardNumberPrefixAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of card number prefix anonymization. - -*** - -### cvvAnonymizationMode - -> **cvvAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of CVV anonymization. - -*** - -### ibanAnonymizationMode - -> **ibanAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of IBAN anonymization. diff --git a/packages/blinkcard-wasm/docs/type-aliases/CardNumberAnonymizationSettings.md b/packages/blinkcard-wasm/docs/type-aliases/CardNumberAnonymizationSettings.md deleted file mode 100644 index 356bbd3b..00000000 --- a/packages/blinkcard-wasm/docs/type-aliases/CardNumberAnonymizationSettings.md +++ /dev/null @@ -1,37 +0,0 @@ -[**@microblink/blinkcard-wasm**](../README.md) - -*** - -[@microblink/blinkcard-wasm](../README.md) / CardNumberAnonymizationSettings - -# Type Alias: CardNumberAnonymizationSettings - -> **CardNumberAnonymizationSettings** = `object` - -Holds the settings which control card number anonymization. - -## Properties - -### mode - -> **mode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of card number anonymization. - -*** - -### prefixDigitsVisible - -> **prefixDigitsVisible**: `number` - -Defines how many digits at the beginning of the card number remain visible -after anonymization. - -*** - -### suffixDigitsVisible - -> **suffixDigitsVisible**: `number` - -Defines how many digits at the end of the card number remain visible after -anonymization. diff --git a/packages/blinkcard-wasm/docs/type-aliases/CardNumberRedactionSettings.md b/packages/blinkcard-wasm/docs/type-aliases/CardNumberRedactionSettings.md new file mode 100644 index 00000000..7b3514a5 --- /dev/null +++ b/packages/blinkcard-wasm/docs/type-aliases/CardNumberRedactionSettings.md @@ -0,0 +1,37 @@ +[**@microblink/blinkcard-wasm**](../README.md) + +*** + +[@microblink/blinkcard-wasm](../README.md) / CardNumberRedactionSettings + +# Type Alias: CardNumberRedactionSettings + +> **CardNumberRedactionSettings** = `object` + +Holds the settings which control card number redaction. + +## Properties + +### mode + +> **mode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of card number redaction. + +*** + +### prefixDigitsVisible + +> **prefixDigitsVisible**: `number` + +Defines how many digits at the beginning of the card number remain visible +after redaction. + +*** + +### suffixDigitsVisible + +> **suffixDigitsVisible**: `number` + +Defines how many digits at the end of the card number remain visible after +redaction. diff --git a/packages/blinkcard-wasm/docs/type-aliases/DetectionLevel.md b/packages/blinkcard-wasm/docs/type-aliases/DetectionLevel.md deleted file mode 100644 index 9d216c64..00000000 --- a/packages/blinkcard-wasm/docs/type-aliases/DetectionLevel.md +++ /dev/null @@ -1,15 +0,0 @@ -[**@microblink/blinkcard-wasm**](../README.md) - -*** - -[@microblink/blinkcard-wasm](../README.md) / DetectionLevel - -# Type Alias: DetectionLevel - -> **DetectionLevel** = `"off"` \| `"low"` \| `"mid"` \| `"high"` - -Represents the different levels of detection sensitivity. - -This type is used to configure detection thresholds and enable or disable -detection functionality. The levels range from turning detection off -completely to setting various levels of sensitivity (Low, Mid, High). diff --git a/packages/blinkcard-wasm/docs/type-aliases/PartialScanningSettingsInput.md b/packages/blinkcard-wasm/docs/type-aliases/PartialScanningSettingsInput.md index af0ea333..9642bbf1 100644 --- a/packages/blinkcard-wasm/docs/type-aliases/PartialScanningSettingsInput.md +++ b/packages/blinkcard-wasm/docs/type-aliases/PartialScanningSettingsInput.md @@ -6,7 +6,7 @@ # Type Alias: PartialScanningSettingsInput -> **PartialScanningSettingsInput** = `Partial`\<`OverrideProperties`\<[`ScanningSettings`](ScanningSettings.md), \{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<[`AnonymizationSettings`](AnonymizationSettings.md), \{ `cardNumberAnonymizationSettings`: `Partial`\<[`CardNumberAnonymizationSettings`](CardNumberAnonymizationSettings.md)\>; \}\>\>; `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](ExtractionSettings.md)\>; `livenessSettings`: `Partial`\<[`LivenessSettings`](LivenessSettings.md)\>; \}\>\> +> **PartialScanningSettingsInput** = `Partial`\<`OverrideProperties`\<[`ScanningSettings`](ScanningSettings.md), \{ `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](ExtractionSettings.md)\>; `livenessSettings`: `Partial`\<[`LivenessSettings`](LivenessSettings.md)\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<[`RedactionSettings`](RedactionSettings.md), \{ `cardNumberRedactionSettings`: `Partial`\<[`CardNumberRedactionSettings`](CardNumberRedactionSettings.md)\>; \}\>\>; \}\>\> Partial scanning settings with optional nested objects. Used when passing partial settings to the Wasm module. diff --git a/packages/blinkcard-wasm/docs/type-aliases/RedactionMode.md b/packages/blinkcard-wasm/docs/type-aliases/RedactionMode.md new file mode 100644 index 00000000..e4553412 --- /dev/null +++ b/packages/blinkcard-wasm/docs/type-aliases/RedactionMode.md @@ -0,0 +1,12 @@ +[**@microblink/blinkcard-wasm**](../README.md) + +*** + +[@microblink/blinkcard-wasm](../README.md) / RedactionMode + +# Type Alias: RedactionMode + +> **RedactionMode** = `"none"` \| `"image-only"` \| `"result-fields-only"` \| `"full-result"` + +RedactionMode is used to define level of redaction performed on +recognizer result. diff --git a/packages/blinkcard-wasm/docs/type-aliases/RedactionSettings.md b/packages/blinkcard-wasm/docs/type-aliases/RedactionSettings.md new file mode 100644 index 00000000..9e89b1b4 --- /dev/null +++ b/packages/blinkcard-wasm/docs/type-aliases/RedactionSettings.md @@ -0,0 +1,51 @@ +[**@microblink/blinkcard-wasm**](../README.md) + +*** + +[@microblink/blinkcard-wasm](../README.md) / RedactionSettings + +# Type Alias: RedactionSettings + +> **RedactionSettings** = `object` + +Holds the settings which control the redaction of returned data. + +## Properties + +### cardholderNameRedactionMode + +> **cardholderNameRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of cardholder name redaction. + +*** + +### cardNumberPrefixRedactionMode + +> **cardNumberPrefixRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of card number prefix redaction. + +*** + +### cardNumberRedactionSettings + +> **cardNumberRedactionSettings**: [`CardNumberRedactionSettings`](CardNumberRedactionSettings.md) + +Defines the parameters of card number redaction. + +*** + +### cvvRedactionMode + +> **cvvRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of CVV redaction. + +*** + +### ibanRedactionMode + +> **ibanRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of IBAN redaction. diff --git a/packages/blinkcard-wasm/docs/type-aliases/ScanningSettings.md b/packages/blinkcard-wasm/docs/type-aliases/ScanningSettings.md index 3b24c9bf..f1af3bcc 100644 --- a/packages/blinkcard-wasm/docs/type-aliases/ScanningSettings.md +++ b/packages/blinkcard-wasm/docs/type-aliases/ScanningSettings.md @@ -12,22 +12,11 @@ Represents the configurable settings for scanning a card. This structure defines various parameters and policies related to the scanning process, including image quality handling, data extraction, -anonymization, and liveness detection, along with options for frame +redaction, and liveness detection, along with options for frame processing and image extraction. ## Properties -### anonymizationSettings - -> **anonymizationSettings**: [`AnonymizationSettings`](AnonymizationSettings.md) - -Represents the configurable settings for data anonymization. - -This structure defines various parameters and policies related to the -anonymization of sensitive data extracted from the payment cards. - -*** - ### croppedImageSettings > **croppedImageSettings**: [`CroppedImageSettings`](CroppedImageSettings.md) @@ -75,6 +64,17 @@ analysis. *** +### redactionSettings + +> **redactionSettings**: [`RedactionSettings`](RedactionSettings.md) + +Represents the configurable settings for data redaction. + +This structure defines various parameters and policies related to the +redaction of sensitive data extracted from the payment cards. + +*** + ### skipImagesWithBlur > **skipImagesWithBlur**: `boolean` @@ -88,12 +88,11 @@ processed, and the blur status is reported in the *** -### tiltDetectionLevel +### tiltSensitivityLevel -> **tiltDetectionLevel**: [`DetectionLevel`](DetectionLevel.md) +> **tiltSensitivityLevel**: [`SensitivityLevel`](SensitivityLevel.md) The level of allowed detected tilt of the card in the image. -Defines the severity of allowed detected tilt of the card in the image, as -defined in `DetectionLevel`. Values range from `Off` (detection turned off) -to higher levels of allowed tilt. +Defines the severity of allowed detected tilt of the card in the image, as defined in `SensitivityLevel`. +Values range from `Off` (detection turned off) to higher levels of allowed tilt. diff --git a/packages/blinkcard-wasm/docs/type-aliases/SensitivityLevel.md b/packages/blinkcard-wasm/docs/type-aliases/SensitivityLevel.md new file mode 100644 index 00000000..aa53fd02 --- /dev/null +++ b/packages/blinkcard-wasm/docs/type-aliases/SensitivityLevel.md @@ -0,0 +1,15 @@ +[**@microblink/blinkcard-wasm**](../README.md) + +*** + +[@microblink/blinkcard-wasm](../README.md) / SensitivityLevel + +# Type Alias: SensitivityLevel + +> **SensitivityLevel** = `"off"` \| `"low"` \| `"mid"` \| `"high"` + +Represents the sensitivity levels for document quality analysis. + +This enum class is used to configure detection sensitivity thresholds and enable or +disable detection functionality. The levels range from turning detection +off completely to setting various levels of sensitivity (Low, Mid, High). diff --git a/packages/blinkcard-wasm/docs/type-aliases/WasmSimdVariant.md b/packages/blinkcard-wasm/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index 68925922..00000000 --- a/packages/blinkcard-wasm/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkcard-wasm**](../README.md) - -*** - -[@microblink/blinkcard-wasm](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkcard-wasm/docs/variables/wasmSimdVariants.md b/packages/blinkcard-wasm/docs/variables/wasmSimdVariants.md deleted file mode 100644 index bf10eb42..00000000 --- a/packages/blinkcard-wasm/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkcard-wasm**](../README.md) - -*** - -[@microblink/blinkcard-wasm](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkcard-wasm/docs/variables/wasmVariants.md b/packages/blinkcard-wasm/docs/variables/wasmVariants.md index 6b0758ed..fc34cc69 100644 --- a/packages/blinkcard-wasm/docs/variables/wasmVariants.md +++ b/packages/blinkcard-wasm/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkcard-wasm/package.json b/packages/blinkcard-wasm/package.json index 5267d81f..cf6c6fbe 100644 --- a/packages/blinkcard-wasm/package.json +++ b/packages/blinkcard-wasm/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkcard-wasm", "private": true, - "version": "3000.0.8", + "version": "3000.1.0-next", "scripts": { "build": "tsc", "build:publish": "tsc", diff --git a/packages/blinkcard-wasm/src/session/scanning-settings.ts b/packages/blinkcard-wasm/src/session/scanning-settings.ts index 45c24201..e90f2112 100644 --- a/packages/blinkcard-wasm/src/session/scanning-settings.ts +++ b/packages/blinkcard-wasm/src/session/scanning-settings.ts @@ -7,7 +7,7 @@ * * This structure defines various parameters and policies related to the * scanning process, including image quality handling, data extraction, - * anonymization, and liveness detection, along with options for frame + * redaction, and liveness detection, along with options for frame * processing and image extraction. */ export type ScanningSettings = { @@ -21,14 +21,13 @@ export type ScanningSettings = { */ skipImagesWithBlur: boolean; - /** - * The level of allowed detected tilt of the card in the image. - * - * Defines the severity of allowed detected tilt of the card in the image, as - * defined in `DetectionLevel`. Values range from `Off` (detection turned off) - * to higher levels of allowed tilt. - */ - tiltDetectionLevel: DetectionLevel; + /** + * The level of allowed detected tilt of the card in the image. + * + * Defines the severity of allowed detected tilt of the card in the image, as defined in `SensitivityLevel`. + * Values range from `Off` (detection turned off) to higher levels of allowed tilt. + */ + tiltSensitivityLevel: SensitivityLevel; /** * Defines the minimum required margin (in percentage) between the edge of the @@ -66,22 +65,22 @@ export type ScanningSettings = { livenessSettings: LivenessSettings; /** - * Represents the configurable settings for data anonymization. + * Represents the configurable settings for data redaction. * * This structure defines various parameters and policies related to the - * anonymization of sensitive data extracted from the payment cards. + * redaction of sensitive data extracted from the payment cards. */ - anonymizationSettings: AnonymizationSettings; + redactionSettings: RedactionSettings; }; /** - * Represents the different levels of detection sensitivity. + * Represents the sensitivity levels for document quality analysis. * - * This type is used to configure detection thresholds and enable or disable - * detection functionality. The levels range from turning detection off - * completely to setting various levels of sensitivity (Low, Mid, High). + * This enum class is used to configure detection sensitivity thresholds and enable or + * disable detection functionality. The levels range from turning detection + * off completely to setting various levels of sensitivity (Low, Mid, High). */ -export type DetectionLevel = "off" | "low" | "mid" | "high"; +export type SensitivityLevel = "off" | "low" | "mid" | "high"; /** * Controls which fields and images should be extracted from the payment card. @@ -220,11 +219,11 @@ export type StrictnessLevel = | "level-10"; /** - * AnonymizationMode is used to define level of anonymization performed on + * RedactionMode is used to define level of redaction performed on * recognizer result. */ -export type AnonymizationMode = - // Anonymization will not be performed. +export type RedactionMode = + // Redaction will not be performed. | "none" // DocumentImage is anonymized with black boxes // covering sensitive data. @@ -234,38 +233,38 @@ export type AnonymizationMode = // This mode is combination of ImageOnly and ResultFieldsOnly modes. | "full-result"; -/** Holds the settings which control card number anonymization. */ -export type CardNumberAnonymizationSettings = { - /** Defines the mode of card number anonymization. */ - mode: AnonymizationMode; +/** Holds the settings which control card number redaction. */ +export type CardNumberRedactionSettings = { + /** Defines the mode of card number redaction. */ + mode: RedactionMode; /** * Defines how many digits at the beginning of the card number remain visible - * after anonymization. + * after redaction. */ prefixDigitsVisible: number; /** * Defines how many digits at the end of the card number remain visible after - * anonymization. + * redaction. */ suffixDigitsVisible: number; }; -/** Holds the settings which control the anonymization of returned data. */ -export type AnonymizationSettings = { - /** Defines the parameters of card number anonymization. */ - cardNumberAnonymizationSettings: CardNumberAnonymizationSettings; +/** Holds the settings which control the redaction of returned data. */ +export type RedactionSettings = { + /** Defines the parameters of card number redaction. */ + cardNumberRedactionSettings: CardNumberRedactionSettings; - /** Defines the mode of card number prefix anonymization. */ - cardNumberPrefixAnonymizationMode: AnonymizationMode; + /** Defines the mode of card number prefix redaction. */ + cardNumberPrefixRedactionMode: RedactionMode; - /** Defines the mode of CVV anonymization. */ - cvvAnonymizationMode: AnonymizationMode; + /** Defines the mode of CVV redaction. */ + cvvRedactionMode: RedactionMode; - /** Defines the mode of IBAN anonymization. */ - ibanAnonymizationMode: AnonymizationMode; + /** Defines the mode of IBAN redaction. */ + ibanRedactionMode: RedactionMode; - /** Defines the mode of cardholder name anonymization. */ - cardholderNameAnonymizationMode: AnonymizationMode; -}; + /** Defines the mode of cardholder name redaction. */ + cardholderNameRedactionMode: RedactionMode; +}; \ No newline at end of file diff --git a/packages/blinkcard-wasm/src/session/session-settings.ts b/packages/blinkcard-wasm/src/session/session-settings.ts index fb11912d..c9607d2e 100644 --- a/packages/blinkcard-wasm/src/session/session-settings.ts +++ b/packages/blinkcard-wasm/src/session/session-settings.ts @@ -4,8 +4,8 @@ import type { OverrideProperties } from "type-fest"; import type { - AnonymizationSettings, - CardNumberAnonymizationSettings, + RedactionSettings, + CardNumberRedactionSettings, CroppedImageSettings, ExtractionSettings, LivenessSettings, @@ -48,11 +48,11 @@ export type PartialScanningSettingsInput = Partial< croppedImageSettings: Partial; extractionSettings: Partial; livenessSettings: Partial; - anonymizationSettings: Partial< + redactionSettings: Partial< OverrideProperties< - AnonymizationSettings, + RedactionSettings, { - cardNumberAnonymizationSettings: Partial; + cardNumberRedactionSettings: Partial; } > >; @@ -77,4 +77,4 @@ export type BlinkCardSessionSettingsInput = OverrideProperties< * This type is used to indicate whether an image was obtained from a video * stream or a single-source input such as a standalone photo. */ -export type InputImageSource = "photo" | "video"; +export type InputImageSource = "photo" | "video"; \ No newline at end of file diff --git a/packages/blinkcard-worker/CHANGELOG.md b/packages/blinkcard-worker/CHANGELOG.md index 66b6e82a..56343cc9 100644 --- a/packages/blinkcard-worker/CHANGELOG.md +++ b/packages/blinkcard-worker/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/blinkcard-worker +## 3000.1.0-next + +### Patch Changes + +- Updated dependencies + - @microblink/blinkcard-wasm@3000.1.0-next + - @microblink/analytics@2.0.2 + - @microblink/worker-common@1.0.5 + ## 3000.0.8 ### Patch Changes diff --git a/packages/blinkcard-worker/docs/classes/BlinkCardWorker.md b/packages/blinkcard-worker/docs/classes/BlinkCardWorker.md index 4bfe0ce2..3d20202a 100644 --- a/packages/blinkcard-worker/docs/classes/BlinkCardWorker.md +++ b/packages/blinkcard-worker/docs/classes/BlinkCardWorker.md @@ -64,7 +64,7 @@ set to `Video`. ###### scanningSettings? -`Partial`\<\{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<`AnonymizationSettings`, \{ `cardNumberAnonymizationSettings`: `Partial`\<`CardNumberAnonymizationSettings`\>; \}\>\>; `croppedImageSettings`: `Partial`\<`CroppedImageSettings`\>; `extractionSettings`: `Partial`\<`ExtractionSettings`\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<`LivenessSettings`\>; `skipImagesWithBlur`: `boolean`; `tiltDetectionLevel`: `DetectionLevel`; \}\> +`Partial`\<\{ `croppedImageSettings`: `Partial`\<`CroppedImageSettings`\>; `extractionSettings`: `Partial`\<`ExtractionSettings`\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<`LivenessSettings`\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<`RedactionSettings`, \{ `cardNumberRedactionSettings`: `Partial`\<`CardNumberRedactionSettings`\>; \}\>\>; `skipImagesWithBlur`: `boolean`; `tiltSensitivityLevel`: `SensitivityLevel`; \}\> #### Returns diff --git a/packages/blinkcard-worker/package.json b/packages/blinkcard-worker/package.json index ef41e29a..de7219da 100644 --- a/packages/blinkcard-worker/package.json +++ b/packages/blinkcard-worker/package.json @@ -2,7 +2,7 @@ "name": "@microblink/blinkcard-worker", "description": "Provides a worker which runs the BlinkCard WebAssembly in separate thread", "private": true, - "version": "3000.0.8", + "version": "3000.1.0-next", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", "build:js": "vite build --mode ${VITE_BUILD_MODE:-production}", diff --git a/packages/blinkcard-worker/src/BlinkCardWorker.initBlinkCard.test.ts b/packages/blinkcard-worker/src/BlinkCardWorker.initBlinkCard.test.ts index fe20ebca..95208e9b 100644 --- a/packages/blinkcard-worker/src/BlinkCardWorker.initBlinkCard.test.ts +++ b/packages/blinkcard-worker/src/BlinkCardWorker.initBlinkCard.test.ts @@ -31,7 +31,7 @@ let workerEventListeners = new Map(); /** Deterministic values for stubbed globals and mock return shapes. */ const hostName = "example.com" as const; const userId = "test-user" as const; -const wasmVariant = "advanced-threads" as const; +const wasmVariant = "simd-threads" as const; vi.mock("comlink", () => { const finalizer = Symbol("finalizer"); @@ -490,6 +490,48 @@ describe("BlinkCardWorker initBlinkCard ping flush and proxy ordering", () => { }); }); + it("passes the Emscripten 6 incoming module properties to createModule", async () => { + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkCardWorker(); + await worker.initBlinkCard(baseInitSettings); + + const moduleOverrides = getLastModuleOverrides(); + + // These properties are dead-stripped unless listed in INCOMING_MODULE_JS_API + // in the Emscripten 6 build, so the worker must keep passing them. + expect(moduleOverrides?.wasmBinary).toBeInstanceOf(ArrayBuffer); + expect(moduleOverrides?.wasmMemory).toBeInstanceOf(WebAssembly.Memory); + expect(moduleOverrides?.mainScriptUrlOrBlob).toEqual( + expect.stringContaining("wasmModuleFactory"), + ); + expect(moduleOverrides?.noExitRuntime).toBe(true); + }); + + it("resolves auxiliary files without duplicating the wasm variant segment", async () => { + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkCardWorker(); + await worker.initBlinkCard(baseInitSettings); + + const moduleOverrides = getLastModuleOverrides(); + const locateFile = moduleOverrides?.locateFile as (path: string) => string; + + expect(locateFile("BlinkCardModule.wasm")).toBe( + `https://${hostName}/resources/${wasmVariant}/BlinkCardModule.wasm`, + ); + // Regression guard: the variant segment must not appear twice. + expect(locateFile("BlinkCardModule.wasm")).not.toContain( + `${wasmVariant}/${wasmVariant}`, + ); + }); + it("reports scanning session creation failures as crash pinglets", async () => { const { module, spies } = createWasmModuleMock({ initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), diff --git a/packages/blinkcard-worker/src/BlinkCardWorker.test.ts b/packages/blinkcard-worker/src/BlinkCardWorker.test.ts index 4abfeb16..372a879b 100644 --- a/packages/blinkcard-worker/src/BlinkCardWorker.test.ts +++ b/packages/blinkcard-worker/src/BlinkCardWorker.test.ts @@ -55,7 +55,7 @@ describe("BlinkCardWorker", () => { const worker = new BlinkCardWorker(); const pinglet: Ping = { schemaName: "ping.sdk.init.start", - schemaVersion: "1.3.0", + schemaVersion: "2.0.0", sessionNumber: 0, data: { product: "BlinkCard", diff --git a/packages/blinkcard-worker/src/BlinkCardWorker.ts b/packages/blinkcard-worker/src/BlinkCardWorker.ts index b648ab3e..8500886b 100644 --- a/packages/blinkcard-worker/src/BlinkCardWorker.ts +++ b/packages/blinkcard-worker/src/BlinkCardWorker.ts @@ -155,7 +155,7 @@ export class BlinkCardWorker { const wasmMemory = new WebAssembly.Memory({ initial: mbToWasmPages(initialMemory), maximum: mbToWasmPages(2048), - shared: wasmVariant === "advanced-threads", + shared: wasmVariant === "simd-threads", }); // Create progress trackers for each download @@ -259,7 +259,8 @@ export class BlinkCardWorker { */ this.#wasmModule = await createModule({ locateFile: (path) => { - return `${variantUrl}/${wasmVariant}/${path}`; + // variantUrl already ends with the wasm variant segment + return `${variantUrl}/${path}`; }, onAbort: (what) => { if (!this.#wasmModule) { @@ -301,6 +302,9 @@ export class BlinkCardWorker { }, // pthreads build breaks without this: // "Failed to execute 'createObjectURL' on 'URL': Overload resolution failed." + // Emscripten 6.x's native `-sCROSS_ORIGIN` was evaluated as a replacement + // for this userspace cross-origin worker workaround but rejected: it is + // incompatible with our `-sDYNAMIC_EXECUTION=0` (no-eval) CSP hardening. mainScriptUrlOrBlob: crossOriginWorkerUrl, wasmBinary: preloadedWasm, getPreloadedPackage() { @@ -382,12 +386,14 @@ export class BlinkCardWorker { // Queue init pinglet before remote license check; flush only if init fails. this.reportPinglet({ schemaName: "ping.sdk.init.start", - schemaVersion: "1.3.0", + schemaVersion: "2.0.0", sessionNumber: 0, data: { packageName: self.location.hostname, platform: "Emscripten", - platformDetails: wasmVariant, + // TODO: update this after pinglets schema is updated + platformDetails: + wasmVariant === "simd" ? "advanced" : "advanced-threads", product: "BlinkCard", userId: this.#userId, ...getMicroblinkProxyPingFlags( diff --git a/packages/blinkcard/CHANGELOG.md b/packages/blinkcard/CHANGELOG.md index 6e3e7d9f..3a723450 100644 --- a/packages/blinkcard/CHANGELOG.md +++ b/packages/blinkcard/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/blinkcard +## 3000.1.0-next + +### Minor Changes + +- Updated the minimum browser requirements after removing the non-SIMD `basic` Wasm build. The SDKs now require WebAssembly SIMD support: Chrome/Edge 91+, Firefox 89+, Safari/iOS Safari 16.4+, and Samsung Internet 16+. +- Updated dependencies + - @microblink/blinkcard-core@3000.1.0-next + - @microblink/blinkcard-ux-manager@3000.1.0-next + ## 3000.0.8 ### Patch Changes diff --git a/packages/blinkcard/README.md b/packages/blinkcard/README.md index 6fcc02c7..5b8c9d0e 100644 --- a/packages/blinkcard/README.md +++ b/packages/blinkcard/README.md @@ -102,35 +102,30 @@ localhost. ### WebAssembly runtime -The SDK ships three Wasm build variants (`basic`, `advanced`, and -`advanced-threads`). The runtime selects the best supported variant automatically. +The SDK ships two Wasm build variants (`simd` and `simd-threads`). The runtime +selects the best supported variant automatically. -#### `basic` +#### `simd` -Requires mutable globals, reference types, bulk memory, non-trapping float-to-int -conversions, and sign-extension operators. - -#### `advanced` - -Requires all `basic` features plus +Requires the Emscripten-generated Wasm feature set used by the SDK plus [fixed-width SIMD](https://web-platform-dx.github.io/web-features-explorer/features/wasm-simd/). -#### `advanced-threads` +#### `simd-threads` -Requires all `advanced` features plus +Requires all `simd` features plus [Wasm threads and atomics](https://caniuse.com/wasm-threads). Multithreaded Wasm also requires cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp`). -Safari is excluded from `advanced-threads` even when it reports Wasm thread -support. Emscripten `advanced-threads` builds use pthreads that spawn workers +Safari is excluded from `simd-threads` even when it reports Wasm thread +support. Emscripten `simd-threads` builds use pthreads that spawn workers from inside a worker, and Safari historically lacked reliable nested worker support when Wasm threads shipped in Safari 16. There are also known Safari issues with shared memory in Emscripten pthread builds ([emscripten-core/emscripten#19374](https://github.com/emscripten-core/emscripten/issues/19374)). -For these reasons the runtime falls back to the single-threaded `advanced` -variant on Safari instead of loading `advanced-threads`. +For these reasons the runtime falls back to the single-threaded `simd` +variant on Safari instead of loading `simd-threads`. ### Firefox for Android diff --git a/packages/blinkcard/docs/README.md b/packages/blinkcard/docs/README.md index 8336333b..83ce4d67 100644 --- a/packages/blinkcard/docs/README.md +++ b/packages/blinkcard/docs/README.md @@ -27,8 +27,6 @@ ## Type Aliases -- [AnonymizationMode](type-aliases/AnonymizationMode.md) -- [AnonymizationSettings](type-aliases/AnonymizationSettings.md) - [BlinkCardComponent](type-aliases/BlinkCardComponent.md) - [BlinkCardComponentOptions](type-aliases/BlinkCardComponentOptions.md) - [BlinkCardCore](type-aliases/BlinkCardCore.md) @@ -66,13 +64,12 @@ - [CanvasRenderingMode](type-aliases/CanvasRenderingMode.md) - [CardAccountResult](type-aliases/CardAccountResult.md) - [CardLivenessCheckResult](type-aliases/CardLivenessCheckResult.md) -- [CardNumberAnonymizationSettings](type-aliases/CardNumberAnonymizationSettings.md) +- [CardNumberRedactionSettings](type-aliases/CardNumberRedactionSettings.md) - [CardRotation](type-aliases/CardRotation.md) - [CheckResult](type-aliases/CheckResult.md) - [CroppedImageSettings](type-aliases/CroppedImageSettings.md) - [DateResult](type-aliases/DateResult.md) - [DerivedDeviceInfo](type-aliases/DerivedDeviceInfo.md) -- [DetectionLevel](type-aliases/DetectionLevel.md) - [DetectionStatus](type-aliases/DetectionStatus.md) - [DeviceInfo](type-aliases/DeviceInfo.md) - [DeviceScreenInfo](type-aliases/DeviceScreenInfo.md) @@ -128,6 +125,8 @@ - [ProcessingStatus](type-aliases/ProcessingStatus.md) - [ProcessResultWithBuffer](type-aliases/ProcessResultWithBuffer.md) - [ProgressStatusCallback](type-aliases/ProgressStatusCallback.md) +- [RedactionMode](type-aliases/RedactionMode.md) +- [RedactionSettings](type-aliases/RedactionSettings.md) - [RemoteScanningSession](type-aliases/RemoteScanningSession.md) - [Resolution](type-aliases/Resolution.md) - [ResourceFileType](type-aliases/ResourceFileType.md) @@ -136,6 +135,7 @@ - [ScanningSide](type-aliases/ScanningSide.md) - [ScanningStatus](type-aliases/ScanningStatus.md) - [SchemaName](type-aliases/SchemaName.md) +- [SensitivityLevel](type-aliases/SensitivityLevel.md) - [ServerPermissionErrorReason](type-aliases/ServerPermissionErrorReason.md) - [ServerPermissionSubmitError](type-aliases/ServerPermissionSubmitError.md) - [SingleSideScanningResult](type-aliases/SingleSideScanningResult.md) @@ -147,7 +147,6 @@ - [VideoFrameProcessorInitOptions](type-aliases/VideoFrameProcessorInitOptions.md) - [VideoResolutionName](type-aliases/VideoResolutionName.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) - [WorkerScanningSession](type-aliases/WorkerScanningSession.md) @@ -170,7 +169,6 @@ - [resourceFileTypes](variables/resourceFileTypes.md) - [videoResolutions](variables/videoResolutions.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) ## Functions diff --git a/packages/blinkcard/docs/classes/AnalyticService.md b/packages/blinkcard/docs/classes/AnalyticService.md index e5d5b906..e58aa60c 100644 --- a/packages/blinkcard/docs/classes/AnalyticService.md +++ b/packages/blinkcard/docs/classes/AnalyticService.md @@ -293,6 +293,16 @@ Provides a clean interface for tracking user interactions and events *** +### logInactivityTimeoutEvent() + +> **logInactivityTimeoutEvent**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logInfo() > **logInfo**(`logMessage`): `Promise`\<`void`\> @@ -329,6 +339,16 @@ Provides a clean interface for tracking user interactions and events *** +### logUnsupportedBarcodeTimeout() + +> **logUnsupportedBarcodeTimeout**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logWarning() > **logWarning**(`logMessage`): `Promise`\<`void`\> diff --git a/packages/blinkcard/docs/classes/BlinkCardWorker.md b/packages/blinkcard/docs/classes/BlinkCardWorker.md index 984d5b38..27f872f7 100644 --- a/packages/blinkcard/docs/classes/BlinkCardWorker.md +++ b/packages/blinkcard/docs/classes/BlinkCardWorker.md @@ -64,7 +64,7 @@ set to `Video`. ###### scanningSettings? -`Partial`\<\{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<[`AnonymizationSettings`](../type-aliases/AnonymizationSettings.md), \{ `cardNumberAnonymizationSettings`: `Partial`\<[`CardNumberAnonymizationSettings`](../type-aliases/CardNumberAnonymizationSettings.md)\>; \}\>\>; `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](../type-aliases/CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](../type-aliases/ExtractionSettings.md)\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<[`LivenessSettings`](../type-aliases/LivenessSettings.md)\>; `skipImagesWithBlur`: `boolean`; `tiltDetectionLevel`: [`DetectionLevel`](../type-aliases/DetectionLevel.md); \}\> +`Partial`\<\{ `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](../type-aliases/CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](../type-aliases/ExtractionSettings.md)\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<[`LivenessSettings`](../type-aliases/LivenessSettings.md)\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<[`RedactionSettings`](../type-aliases/RedactionSettings.md), \{ `cardNumberRedactionSettings`: `Partial`\<[`CardNumberRedactionSettings`](../type-aliases/CardNumberRedactionSettings.md)\>; \}\>\>; `skipImagesWithBlur`: `boolean`; `tiltSensitivityLevel`: [`SensitivityLevel`](../type-aliases/SensitivityLevel.md); \}\> #### Returns diff --git a/packages/blinkcard/docs/functions/createBlinkCard.md b/packages/blinkcard/docs/functions/createBlinkCard.md index f41704a3..0fc605d7 100644 --- a/packages/blinkcard/docs/functions/createBlinkCard.md +++ b/packages/blinkcard/docs/functions/createBlinkCard.md @@ -84,7 +84,7 @@ Defaults to `window.location.href`, at the root of the current page. #### scanningSettings? -`Partial`\<\{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<[`AnonymizationSettings`](../type-aliases/AnonymizationSettings.md), \{ `cardNumberAnonymizationSettings`: `Partial`\<[`CardNumberAnonymizationSettings`](../type-aliases/CardNumberAnonymizationSettings.md)\>; \}\>\>; `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](../type-aliases/CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](../type-aliases/ExtractionSettings.md)\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<[`LivenessSettings`](../type-aliases/LivenessSettings.md)\>; `skipImagesWithBlur`: `boolean`; `tiltDetectionLevel`: [`DetectionLevel`](../type-aliases/DetectionLevel.md); \}\> +`Partial`\<\{ `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](../type-aliases/CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](../type-aliases/ExtractionSettings.md)\>; `inputImageMargin`: `number`; `livenessSettings`: `Partial`\<[`LivenessSettings`](../type-aliases/LivenessSettings.md)\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<[`RedactionSettings`](../type-aliases/RedactionSettings.md), \{ `cardNumberRedactionSettings`: `Partial`\<[`CardNumberRedactionSettings`](../type-aliases/CardNumberRedactionSettings.md)\>; \}\>\>; `skipImagesWithBlur`: `boolean`; `tiltSensitivityLevel`: [`SensitivityLevel`](../type-aliases/SensitivityLevel.md); \}\> #### targetNode? @@ -102,7 +102,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"basic"` \| `"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkcard/docs/functions/loadBlinkCardCore.md b/packages/blinkcard/docs/functions/loadBlinkCardCore.md index d7210dbe..81708b86 100644 --- a/packages/blinkcard/docs/functions/loadBlinkCardCore.md +++ b/packages/blinkcard/docs/functions/loadBlinkCardCore.md @@ -67,7 +67,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"basic"` \| `"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkcard/docs/type-aliases/AnonymizationMode.md b/packages/blinkcard/docs/type-aliases/AnonymizationMode.md deleted file mode 100644 index fc51a288..00000000 --- a/packages/blinkcard/docs/type-aliases/AnonymizationMode.md +++ /dev/null @@ -1,12 +0,0 @@ -[**@microblink/blinkcard**](../README.md) - -*** - -[@microblink/blinkcard](../README.md) / AnonymizationMode - -# Type Alias: AnonymizationMode - -> **AnonymizationMode** = `"none"` \| `"image-only"` \| `"result-fields-only"` \| `"full-result"` - -AnonymizationMode is used to define level of anonymization performed on -recognizer result. diff --git a/packages/blinkcard/docs/type-aliases/AnonymizationSettings.md b/packages/blinkcard/docs/type-aliases/AnonymizationSettings.md deleted file mode 100644 index f76aebc8..00000000 --- a/packages/blinkcard/docs/type-aliases/AnonymizationSettings.md +++ /dev/null @@ -1,51 +0,0 @@ -[**@microblink/blinkcard**](../README.md) - -*** - -[@microblink/blinkcard](../README.md) / AnonymizationSettings - -# Type Alias: AnonymizationSettings - -> **AnonymizationSettings** = `object` - -Holds the settings which control the anonymization of returned data. - -## Properties - -### cardholderNameAnonymizationMode - -> **cardholderNameAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of cardholder name anonymization. - -*** - -### cardNumberAnonymizationSettings - -> **cardNumberAnonymizationSettings**: [`CardNumberAnonymizationSettings`](CardNumberAnonymizationSettings.md) - -Defines the parameters of card number anonymization. - -*** - -### cardNumberPrefixAnonymizationMode - -> **cardNumberPrefixAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of card number prefix anonymization. - -*** - -### cvvAnonymizationMode - -> **cvvAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of CVV anonymization. - -*** - -### ibanAnonymizationMode - -> **ibanAnonymizationMode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of IBAN anonymization. diff --git a/packages/blinkcard/docs/type-aliases/CardNumberAnonymizationSettings.md b/packages/blinkcard/docs/type-aliases/CardNumberAnonymizationSettings.md deleted file mode 100644 index b0f9bf9d..00000000 --- a/packages/blinkcard/docs/type-aliases/CardNumberAnonymizationSettings.md +++ /dev/null @@ -1,37 +0,0 @@ -[**@microblink/blinkcard**](../README.md) - -*** - -[@microblink/blinkcard](../README.md) / CardNumberAnonymizationSettings - -# Type Alias: CardNumberAnonymizationSettings - -> **CardNumberAnonymizationSettings** = `object` - -Holds the settings which control card number anonymization. - -## Properties - -### mode - -> **mode**: [`AnonymizationMode`](AnonymizationMode.md) - -Defines the mode of card number anonymization. - -*** - -### prefixDigitsVisible - -> **prefixDigitsVisible**: `number` - -Defines how many digits at the beginning of the card number remain visible -after anonymization. - -*** - -### suffixDigitsVisible - -> **suffixDigitsVisible**: `number` - -Defines how many digits at the end of the card number remain visible after -anonymization. diff --git a/packages/blinkcard/docs/type-aliases/CardNumberRedactionSettings.md b/packages/blinkcard/docs/type-aliases/CardNumberRedactionSettings.md new file mode 100644 index 00000000..7d144551 --- /dev/null +++ b/packages/blinkcard/docs/type-aliases/CardNumberRedactionSettings.md @@ -0,0 +1,37 @@ +[**@microblink/blinkcard**](../README.md) + +*** + +[@microblink/blinkcard](../README.md) / CardNumberRedactionSettings + +# Type Alias: CardNumberRedactionSettings + +> **CardNumberRedactionSettings** = `object` + +Holds the settings which control card number redaction. + +## Properties + +### mode + +> **mode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of card number redaction. + +*** + +### prefixDigitsVisible + +> **prefixDigitsVisible**: `number` + +Defines how many digits at the beginning of the card number remain visible +after redaction. + +*** + +### suffixDigitsVisible + +> **suffixDigitsVisible**: `number` + +Defines how many digits at the end of the card number remain visible after +redaction. diff --git a/packages/blinkcard/docs/type-aliases/DetectionLevel.md b/packages/blinkcard/docs/type-aliases/DetectionLevel.md deleted file mode 100644 index 10641bb6..00000000 --- a/packages/blinkcard/docs/type-aliases/DetectionLevel.md +++ /dev/null @@ -1,15 +0,0 @@ -[**@microblink/blinkcard**](../README.md) - -*** - -[@microblink/blinkcard](../README.md) / DetectionLevel - -# Type Alias: DetectionLevel - -> **DetectionLevel** = `"off"` \| `"low"` \| `"mid"` \| `"high"` - -Represents the different levels of detection sensitivity. - -This type is used to configure detection thresholds and enable or disable -detection functionality. The levels range from turning detection off -completely to setting various levels of sensitivity (Low, Mid, High). diff --git a/packages/blinkcard/docs/type-aliases/PartialScanningSettingsInput.md b/packages/blinkcard/docs/type-aliases/PartialScanningSettingsInput.md index 45bf4097..c8061b11 100644 --- a/packages/blinkcard/docs/type-aliases/PartialScanningSettingsInput.md +++ b/packages/blinkcard/docs/type-aliases/PartialScanningSettingsInput.md @@ -6,7 +6,7 @@ # Type Alias: PartialScanningSettingsInput -> **PartialScanningSettingsInput** = `Partial`\<`OverrideProperties`\<[`ScanningSettings`](ScanningSettings.md), \{ `anonymizationSettings`: `Partial`\<`OverrideProperties`\<[`AnonymizationSettings`](AnonymizationSettings.md), \{ `cardNumberAnonymizationSettings`: `Partial`\<[`CardNumberAnonymizationSettings`](CardNumberAnonymizationSettings.md)\>; \}\>\>; `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](ExtractionSettings.md)\>; `livenessSettings`: `Partial`\<[`LivenessSettings`](LivenessSettings.md)\>; \}\>\> +> **PartialScanningSettingsInput** = `Partial`\<`OverrideProperties`\<[`ScanningSettings`](ScanningSettings.md), \{ `croppedImageSettings`: `Partial`\<[`CroppedImageSettings`](CroppedImageSettings.md)\>; `extractionSettings`: `Partial`\<[`ExtractionSettings`](ExtractionSettings.md)\>; `livenessSettings`: `Partial`\<[`LivenessSettings`](LivenessSettings.md)\>; `redactionSettings`: `Partial`\<`OverrideProperties`\<[`RedactionSettings`](RedactionSettings.md), \{ `cardNumberRedactionSettings`: `Partial`\<[`CardNumberRedactionSettings`](CardNumberRedactionSettings.md)\>; \}\>\>; \}\>\> Partial scanning settings with optional nested objects. Used when passing partial settings to the Wasm module. diff --git a/packages/blinkcard/docs/type-aliases/PingSdkInitStart.md b/packages/blinkcard/docs/type-aliases/PingSdkInitStart.md index de7b3140..6710fc5f 100644 --- a/packages/blinkcard/docs/type-aliases/PingSdkInitStart.md +++ b/packages/blinkcard/docs/type-aliases/PingSdkInitStart.md @@ -6,6 +6,6 @@ # Type Alias: PingSdkInitStart -> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"1.3.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> +> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"2.0.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> Ping type for ping.sdk.init.start diff --git a/packages/blinkcard/docs/type-aliases/PingUxEvent.md b/packages/blinkcard/docs/type-aliases/PingUxEvent.md index 9f13a492..3b45a40d 100644 --- a/packages/blinkcard/docs/type-aliases/PingUxEvent.md +++ b/packages/blinkcard/docs/type-aliases/PingUxEvent.md @@ -6,6 +6,6 @@ # Type Alias: PingUxEvent -> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.1.0"`, [`PingUxEventData`](PingUxEventData.md)\> +> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.2.0"`, [`PingUxEventData`](PingUxEventData.md)\> Ping type for ping.sdk.ux.event diff --git a/packages/blinkcard/docs/type-aliases/RedactionMode.md b/packages/blinkcard/docs/type-aliases/RedactionMode.md new file mode 100644 index 00000000..578ffb7d --- /dev/null +++ b/packages/blinkcard/docs/type-aliases/RedactionMode.md @@ -0,0 +1,12 @@ +[**@microblink/blinkcard**](../README.md) + +*** + +[@microblink/blinkcard](../README.md) / RedactionMode + +# Type Alias: RedactionMode + +> **RedactionMode** = `"none"` \| `"image-only"` \| `"result-fields-only"` \| `"full-result"` + +RedactionMode is used to define level of redaction performed on +recognizer result. diff --git a/packages/blinkcard/docs/type-aliases/RedactionSettings.md b/packages/blinkcard/docs/type-aliases/RedactionSettings.md new file mode 100644 index 00000000..c4fbed1e --- /dev/null +++ b/packages/blinkcard/docs/type-aliases/RedactionSettings.md @@ -0,0 +1,51 @@ +[**@microblink/blinkcard**](../README.md) + +*** + +[@microblink/blinkcard](../README.md) / RedactionSettings + +# Type Alias: RedactionSettings + +> **RedactionSettings** = `object` + +Holds the settings which control the redaction of returned data. + +## Properties + +### cardholderNameRedactionMode + +> **cardholderNameRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of cardholder name redaction. + +*** + +### cardNumberPrefixRedactionMode + +> **cardNumberPrefixRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of card number prefix redaction. + +*** + +### cardNumberRedactionSettings + +> **cardNumberRedactionSettings**: [`CardNumberRedactionSettings`](CardNumberRedactionSettings.md) + +Defines the parameters of card number redaction. + +*** + +### cvvRedactionMode + +> **cvvRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of CVV redaction. + +*** + +### ibanRedactionMode + +> **ibanRedactionMode**: [`RedactionMode`](RedactionMode.md) + +Defines the mode of IBAN redaction. diff --git a/packages/blinkcard/docs/type-aliases/ScanningSettings.md b/packages/blinkcard/docs/type-aliases/ScanningSettings.md index a6428c50..6a17c4a5 100644 --- a/packages/blinkcard/docs/type-aliases/ScanningSettings.md +++ b/packages/blinkcard/docs/type-aliases/ScanningSettings.md @@ -12,22 +12,11 @@ Represents the configurable settings for scanning a card. This structure defines various parameters and policies related to the scanning process, including image quality handling, data extraction, -anonymization, and liveness detection, along with options for frame +redaction, and liveness detection, along with options for frame processing and image extraction. ## Properties -### anonymizationSettings - -> **anonymizationSettings**: [`AnonymizationSettings`](AnonymizationSettings.md) - -Represents the configurable settings for data anonymization. - -This structure defines various parameters and policies related to the -anonymization of sensitive data extracted from the payment cards. - -*** - ### croppedImageSettings > **croppedImageSettings**: [`CroppedImageSettings`](CroppedImageSettings.md) @@ -75,6 +64,17 @@ analysis. *** +### redactionSettings + +> **redactionSettings**: [`RedactionSettings`](RedactionSettings.md) + +Represents the configurable settings for data redaction. + +This structure defines various parameters and policies related to the +redaction of sensitive data extracted from the payment cards. + +*** + ### skipImagesWithBlur > **skipImagesWithBlur**: `boolean` @@ -88,12 +88,11 @@ processed, and the blur status is reported in the *** -### tiltDetectionLevel +### tiltSensitivityLevel -> **tiltDetectionLevel**: [`DetectionLevel`](DetectionLevel.md) +> **tiltSensitivityLevel**: [`SensitivityLevel`](SensitivityLevel.md) The level of allowed detected tilt of the card in the image. -Defines the severity of allowed detected tilt of the card in the image, as -defined in `DetectionLevel`. Values range from `Off` (detection turned off) -to higher levels of allowed tilt. +Defines the severity of allowed detected tilt of the card in the image, as defined in `SensitivityLevel`. +Values range from `Off` (detection turned off) to higher levels of allowed tilt. diff --git a/packages/blinkcard/docs/type-aliases/SensitivityLevel.md b/packages/blinkcard/docs/type-aliases/SensitivityLevel.md new file mode 100644 index 00000000..44c5d0e0 --- /dev/null +++ b/packages/blinkcard/docs/type-aliases/SensitivityLevel.md @@ -0,0 +1,15 @@ +[**@microblink/blinkcard**](../README.md) + +*** + +[@microblink/blinkcard](../README.md) / SensitivityLevel + +# Type Alias: SensitivityLevel + +> **SensitivityLevel** = `"off"` \| `"low"` \| `"mid"` \| `"high"` + +Represents the sensitivity levels for document quality analysis. + +This enum class is used to configure detection sensitivity thresholds and enable or +disable detection functionality. The levels range from turning detection +off completely to setting various levels of sensitivity (Low, Mid, High). diff --git a/packages/blinkcard/docs/type-aliases/WasmSimdVariant.md b/packages/blinkcard/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index 10813db4..00000000 --- a/packages/blinkcard/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkcard**](../README.md) - -*** - -[@microblink/blinkcard](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkcard/docs/variables/wasmSimdVariants.md b/packages/blinkcard/docs/variables/wasmSimdVariants.md deleted file mode 100644 index e1dd23b2..00000000 --- a/packages/blinkcard/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkcard**](../README.md) - -*** - -[@microblink/blinkcard](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkcard/docs/variables/wasmVariants.md b/packages/blinkcard/docs/variables/wasmVariants.md index a2a1c082..f6cbed12 100644 --- a/packages/blinkcard/docs/variables/wasmVariants.md +++ b/packages/blinkcard/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkcard/package.json b/packages/blinkcard/package.json index 01602d5c..d164c260 100644 --- a/packages/blinkcard/package.json +++ b/packages/blinkcard/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkcard", "description": "All-in-one BlinkCard browser SDK for fast and accurate debit and credit card scanning and recognition in web applications.", - "version": "3000.0.8", + "version": "3000.1.0-next", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -19,7 +19,7 @@ "test:watch": "vitest", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm pack-check", + "publish-test": "pnpm pack-check", "type-rollup": "api-extractor run --local", "watch": "concurrently pnpm:watch:js pnpm:watch:types", "watch:js": "pnpm run build:js --watch --mode development", @@ -51,14 +51,14 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", + "@microblink/repo-utils": "workspace:*", "@microblink/test-utils": "workspace:*", "@microblink/tsconfig": "workspace:*", - "@vitest/browser": "^3.0.8", - "@microblink/repo-utils": "workspace:*", "@microsoft/api-extractor": "^7.52.4", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", + "@vitest/browser": "^3.0.8", "concurrently": "^9.1.2", "eslint": "^8.57.0", "eslint-config-prettier": "10.1.8", diff --git a/packages/blinkcard/src/createBlinkCard.test.ts b/packages/blinkcard/src/createBlinkCard.test.ts index f5df2206..e42e9f21 100644 --- a/packages/blinkcard/src/createBlinkCard.test.ts +++ b/packages/blinkcard/src/createBlinkCard.test.ts @@ -147,7 +147,7 @@ describe("createBlinkCard", () => { microblinkProxyUrl: "https://proxy.example.com", initialMemory: 32, resourcesLocation: "https://resources.example.com", - wasmVariant: "basic", + wasmVariant: "simd", }); expect(loadBlinkCardCore).toHaveBeenCalledTimes(1); @@ -156,7 +156,7 @@ describe("createBlinkCard", () => { microblinkProxyUrl: "https://proxy.example.com", initialMemory: 32, resourcesLocation: "https://resources.example.com", - wasmVariant: "basic", + wasmVariant: "simd", }); }); diff --git a/packages/blinkid-core/CHANGELOG.md b/packages/blinkid-core/CHANGELOG.md index dcde0850..b01bf58e 100644 --- a/packages/blinkid-core/CHANGELOG.md +++ b/packages/blinkid-core/CHANGELOG.md @@ -1,5 +1,21 @@ # @microblink/blinkid-core +## 8001.0.0 + +### Major Changes + +- **Breaking:** `DocumentClassInfo.country`, `region`, and `type` are now wrapper objects (`{ id?, rawValue }`) instead of plain string values. `id` carries the strongly-typed kebab-case value (`Country` / `Region` / `DocumentType`) when the document class is known at build time; `rawValue` always carries the raw classification token from the document knowledge database, including OTA-delivered document classes unknown at build time. Update comparisons such as `documentClassInfo.country === "usa"` to `documentClassInfo.country?.id === "usa"`, and use `id ?? rawValue` when displaying values. This affects `redactionSettingsResolver`, `addDocumentClassFilter`, `addOnDocumentFilteredCallback`, and the `documentClassInfo` fields on process and scanning results. + - Added the `DocumentClassComponent`, `DocumentClassCountry`, `DocumentClassRegion`, and `DocumentClassDocumentType` types. + - `countryName` and the ISO country-code fields on `DocumentClassInfo` are unchanged (plain strings, empty when unknown), and `documentClassInfo` on results remains non-optional — an unclassified document still yields `undefined` components and empty strings. + - Updated the native bindings to the new document classification API (enum identifiers renamed to `CountryID` / `RegionID` / `DocumentTypeID`; document class construction now goes through the document knowledge database). Unrecognized classification strings passed to `getDefaultRedactionSettings` no longer abort the Wasm module; they are forwarded as raw values instead. +- Adds browser OTA resource bootstrap through the `otaResources` initialization option. BlinkID always loads the hosted SDK baseline and checks the OTA provider for strictly newer resources by default; `checkForUpdates: false` skips only the provider check. +- Renamed `DocumentClassInfo.type` to `DocumentClassInfo.documentType` to align with other platforms. + - Migration: replace `documentClassInfo.type` with `documentClassInfo.documentType`. +- Updated dependencies + - @microblink/analytics@2.0.2 + - @microblink/blinkid-wasm@8001.0.0 + - @microblink/blinkid-worker@8001.0.0 + ## 8000.0.1 ### Patch Changes diff --git a/packages/blinkid-core/README.md b/packages/blinkid-core/README.md index 52bb87b9..910948f4 100644 --- a/packages/blinkid-core/README.md +++ b/packages/blinkid-core/README.md @@ -59,6 +59,51 @@ const core = await loadBlinkIdCore({ const session = await core.createScanningSession(); ``` +### OTA Document Support Updates + +BlinkID can download document-support resources over the air (OTA) during SDK +initialization. Every SDK build hosts baseline resources at: + +```text +{resourcesLocation}/resources/ota-resources/ +``` + +The directory contains the canonical files and `ota-resources.json`: + +```jsonc +{ + "resources": [ + { + "filename": "template-database.zzip", + "version": "1.0.1", + "url": "template-database.zzip", + }, + ], +} +``` + +Set `otaResources.resourcesLocation` to override the baseline directory. By +default, BlinkID also asks `https://blinkid-ota.microblink.com` for updates and +uses a provider resource only when its semantic version is newer. Override that +service with `otaResources.otaResourceProviderUrl`. + +The provider must expose: + +```text +GET {otaResourceProviderUrl}/api/v1/versions?generic_version={recognizerVersion} +``` + +The SDK supplies `generic_version` from the BlinkID recognizer. The OTA +settings are separate from top-level `resourcesLocation`, which points to the +static SDK `resources` directory, and from `microblinkProxyUrl`, which proxies +licensing and analytics traffic. Provider failures use the hosted baseline by +default; `otaResources.strict: true` makes them fatal. A missing hosted baseline +is always fatal because OTA files are no longer embedded in +`BlinkIdModule.data`. Set `otaResources.checkForUpdates` to `false` to load the +hosted baseline without contacting the provider. + +### Redaction Settings + You can also pass worker-side session options as the second argument. For example, use `redactionSettingsResolver` to choose result redaction per classified document: @@ -71,8 +116,8 @@ const session = await core.createScanningSession( { redactionSettingsResolver: (documentClassInfo) => { if ( - documentClassInfo.country === "germany" && - documentClassInfo.type === "id" + documentClassInfo.country?.id === "germany" && + documentClassInfo.type?.id === "id" ) { return { mode: "full-result", @@ -106,8 +151,8 @@ const session = await core.createScanningSession( getDefaultRedactionSettings, ) => { if ( - documentClassInfo.country === "germany" && - documentClassInfo.type === "id" + documentClassInfo.country?.id === "germany" && + documentClassInfo.type?.id === "id" ) { const defaults = await getDefaultRedactionSettings(documentClassInfo); @@ -134,7 +179,10 @@ const session = await core.createScanningSession( settings (`scanningSettings.anonymizationMode` and `scanningSettings.customDocumentAnonymizationSettings`). The resolver receives the classified `DocumentClassInfo`; return `RedactionSettings` for custom -redaction or `null` to keep the SDK defaults. See the +redaction or `null` to keep the SDK defaults. The `country`, `region`, and +`type` fields are wrapper objects: `id` holds the strongly-typed value when the +document class is known at build time, while `rawValue` always carries the raw +classification token (including OTA-delivered classes without an `id`). See the [BlinkID v8000 migration guide](https://docs.microblink.com/blinkid/migration-v8000) for the full migration. @@ -156,6 +204,13 @@ You must host the `dist/resources` directory from this package without modificat - WebAssembly `.wasm` and `.data` files - Emscripten JS glue code - The `@microblink/blinkid-worker` Web Worker script +- Baseline OTA document-support resources under `ota-resources/`, including + `ota-resources.json` and its canonical resource files + +Do not omit the `ota-resources/` directory: BlinkID always loads this hosted +baseline before optionally checking the OTA provider for updates. To host the +baseline separately, set `otaResources.resourcesLocation` to its directory URL +and preserve the manifest-relative file paths. ### Hosting requirements diff --git a/packages/blinkid-core/docs/README.md b/packages/blinkid-core/docs/README.md index 1111cc5b..b60c5b97 100644 --- a/packages/blinkid-core/docs/README.md +++ b/packages/blinkid-core/docs/README.md @@ -11,6 +11,7 @@ ## Interfaces +- [MemFSModule](interfaces/MemFSModule.md) - [PingBase](interfaces/PingBase.md) - [UADataValues](interfaces/UADataValues.md) - [WasmBindings](interfaces/WasmBindings.md) @@ -34,6 +35,7 @@ - [BlinkIdCore](type-aliases/BlinkIdCore.md) - [BlinkIdCreateScanningSessionOptions](type-aliases/BlinkIdCreateScanningSessionOptions.md) - [BlinkIdInitSettings](type-aliases/BlinkIdInitSettings.md) +- [BlinkIdOtaResourceSettings](type-aliases/BlinkIdOtaResourceSettings.md) - [BlinkIdProcessResult](type-aliases/BlinkIdProcessResult.md) - [BlinkIdScanningResult](type-aliases/BlinkIdScanningResult.md) - [BlinkIdScanningSession](type-aliases/BlinkIdScanningSession.md) @@ -63,7 +65,11 @@ - [DeviceInfo](type-aliases/DeviceInfo.md) - [DeviceScreenInfo](type-aliases/DeviceScreenInfo.md) - [DocumentCaptureModuleSettings](type-aliases/DocumentCaptureModuleSettings.md) +- [DocumentClassComponent](type-aliases/DocumentClassComponent.md) +- [DocumentClassCountry](type-aliases/DocumentClassCountry.md) +- [DocumentClassDocumentType](type-aliases/DocumentClassDocumentType.md) - [DocumentClassInfo](type-aliases/DocumentClassInfo.md) +- [DocumentClassRegion](type-aliases/DocumentClassRegion.md) - [DocumentImageColor](type-aliases/DocumentImageColor.md) - [DocumentNumberRedactionSettings](type-aliases/DocumentNumberRedactionSettings.md) - [DocumentOrientation](type-aliases/DocumentOrientation.md) @@ -85,6 +91,9 @@ - [ImageCompleteness](type-aliases/ImageCompleteness.md) - [ImageExtractionType](type-aliases/ImageExtractionType.md) - [InputImageAnalysisResult](type-aliases/InputImageAnalysisResult.md) +- [InputImageCropAnalysis](type-aliases/InputImageCropAnalysis.md) +- [InputImageCropType](type-aliases/InputImageCropType.md) +- [InputImageSelectionStrategy](type-aliases/InputImageSelectionStrategy.md) - [InputImageSource](type-aliases/InputImageSource.md) - [LicenseRequest](type-aliases/LicenseRequest.md) - [LicenseTokenState](type-aliases/LicenseTokenState.md) @@ -147,21 +156,21 @@ - [VehicleClassInfo](type-aliases/VehicleClassInfo.md) - [VehicleClassInfoCompleteness](type-aliases/VehicleClassInfoCompleteness.md) - [VizCompleteness](type-aliases/VizCompleteness.md) +- [VizExtractionType](type-aliases/VizExtractionType.md) - [VizFieldsCompleteness](type-aliases/VizFieldsCompleteness.md) - [VizModuleSettings](type-aliases/VizModuleSettings.md) - [VizResult](type-aliases/VizResult.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) - [WorkerScanningSession](type-aliases/WorkerScanningSession.md) ## Variables +- [DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL](variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md) - [DEFAULT\_REDACTION\_SETTINGS](variables/DEFAULT_REDACTION_SETTINGS.md) - [getCrossOriginWorkerURL](variables/getCrossOriginWorkerURL.md) - [resourceFileTypes](variables/resourceFileTypes.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) ## Functions diff --git a/packages/blinkid-core/docs/classes/AnalyticService.md b/packages/blinkid-core/docs/classes/AnalyticService.md index b07fbb49..a29bea2b 100644 --- a/packages/blinkid-core/docs/classes/AnalyticService.md +++ b/packages/blinkid-core/docs/classes/AnalyticService.md @@ -293,6 +293,16 @@ Provides a clean interface for tracking user interactions and events *** +### logInactivityTimeoutEvent() + +> **logInactivityTimeoutEvent**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logInfo() > **logInfo**(`logMessage`): `Promise`\<`void`\> @@ -329,6 +339,16 @@ Provides a clean interface for tracking user interactions and events *** +### logUnsupportedBarcodeTimeout() + +> **logUnsupportedBarcodeTimeout**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logWarning() > **logWarning**(`logMessage`): `Promise`\<`void`\> diff --git a/packages/blinkid-core/docs/functions/loadBlinkIdCore.md b/packages/blinkid-core/docs/functions/loadBlinkIdCore.md index c6051890..44bdbd24 100644 --- a/packages/blinkid-core/docs/functions/loadBlinkIdCore.md +++ b/packages/blinkid-core/docs/functions/loadBlinkIdCore.md @@ -51,6 +51,15 @@ The URL of the Microblink proxy server. This proxy handles requests to Microblin "https://your-proxy.example.com" ``` +#### otaResources? + +[`BlinkIdOtaResourceSettings`](../type-aliases/BlinkIdOtaResourceSettings.md) + +Optional browser-only OTA resource settings. + +Hosted baseline resources are always loaded. Provider update checks are +enabled by default; set `checkForUpdates` to `false` to skip the provider. + #### resourcesLocation? `string` @@ -74,7 +83,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"basic"` \| `"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-core/docs/interfaces/MemFSModule.md b/packages/blinkid-core/docs/interfaces/MemFSModule.md new file mode 100644 index 00000000..79d97ac1 --- /dev/null +++ b/packages/blinkid-core/docs/interfaces/MemFSModule.md @@ -0,0 +1,171 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / MemFSModule + +# Interface: MemFSModule + +## Properties + +### FS? + +> `optional` **FS**: `object` + +#### mkdirTree()? + +> `optional` **mkdirTree**(`path`): `void` + +##### Parameters + +###### path + +`string` + +##### Returns + +`void` + +#### readdir()? + +> `optional` **readdir**(`path`): `string`[] + +##### Parameters + +###### path + +`string` + +##### Returns + +`string`[] + +#### readFile()? + +> `optional` **readFile**(`path`): `Uint8Array` + +##### Parameters + +###### path + +`string` + +##### Returns + +`Uint8Array` + +#### stat()? + +> `optional` **stat**(`path`): `object` + +##### Parameters + +###### path + +`string` + +##### Returns + +`object` + +###### size + +> **size**: `number` + +#### writeFile()? + +> `optional` **writeFile**(`path`, `data`): `void` + +##### Parameters + +###### path + +`string` + +###### data + +`Uint8Array` + +##### Returns + +`void` + +*** + +### FS\_createDataFile()? + +> `optional` **FS\_createDataFile**: (`parent`, `name`, `data`, `canRead`, `canWrite`, `canOwn?`) => `void` + +#### Parameters + +##### parent + +`string` + +##### name + +`string` + +##### data + +`Uint8Array` + +##### canRead + +`boolean` + +##### canWrite + +`boolean` + +##### canOwn? + +`boolean` + +#### Returns + +`void` + +*** + +### FS\_createPath()? + +> `optional` **FS\_createPath**: (`parent`, `path`, `canRead`, `canWrite`) => `void` + +#### Parameters + +##### parent + +`string` + +##### path + +`string` + +##### canRead + +`boolean` + +##### canWrite + +`boolean` + +#### Returns + +`void` + +*** + +### FS\_unlink()? + +> `optional` **FS\_unlink**: (`path`) => `void` + +#### Parameters + +##### path + +`string` + +#### Returns + +`void` diff --git a/packages/blinkid-core/docs/type-aliases/BarcodeModuleSettings.md b/packages/blinkid-core/docs/type-aliases/BarcodeModuleSettings.md index d86f5afd..983742d3 100644 --- a/packages/blinkid-core/docs/type-aliases/BarcodeModuleSettings.md +++ b/packages/blinkid-core/docs/type-aliases/BarcodeModuleSettings.md @@ -25,6 +25,22 @@ extract barcode immediately at the initialization. ## Properties +### aztecScanningEnabled + +> **aztecScanningEnabled**: `boolean` + +Enables the scanning and processing of Aztec barcodes. + +This setting can be enabled only if `documentCaptureEnabled` is disabled. + +#### Default + +```ts +false +``` + +*** + ### barcodeImageReturnEnabled > **barcodeImageReturnEnabled**: `boolean` diff --git a/packages/blinkid-core/docs/type-aliases/BlinkIdOtaResourceSettings.md b/packages/blinkid-core/docs/type-aliases/BlinkIdOtaResourceSettings.md new file mode 100644 index 00000000..ad3360ea --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/BlinkIdOtaResourceSettings.md @@ -0,0 +1,80 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / BlinkIdOtaResourceSettings + +# Type Alias: BlinkIdOtaResourceSettings + +> **BlinkIdOtaResourceSettings** = `object` + +## Properties + +### checkForUpdates? + +> `optional` **checkForUpdates**: `boolean` + +Check the OTA provider for newer resources during SDK initialization. + +The hosted baseline resources are always loaded. + +#### Default Value + +`true` + +*** + +### otaResourceProviderUrl? + +> `optional` **otaResourceProviderUrl**: `string` + +Base URL of the OTA resource provider service. + +Use this when the SDK should ask an OTA API service for the current +resource download URLs. + +#### Default Value + +`"https://blinkid-ota.microblink.com"` + +*** + +### resourcesLocation? + +> `optional` **resourcesLocation**: `string` + +Base URL where the baseline OTA resource files are hosted. + +When omitted, the worker loads them from the SDK's +`resources/ota-resources` directory. + +*** + +### strict? + +> `optional` **strict**: `boolean` + +Fail SDK initialization when OTA resolve or download fails. + +#### Default Value + +`false` + +*** + +### timeoutMilis? + +> `optional` **timeoutMilis**: `number` + +#### Default + +```ts +20_000 +OTA resource download timeout. + +If strict is +``` + +#### True + +the SDK will throw TimeoutError DOMException on initialization if the download times out. diff --git a/packages/blinkid-core/docs/type-aliases/BlinkIdScanningResult.md b/packages/blinkid-core/docs/type-aliases/BlinkIdScanningResult.md index b1d1a089..46ee4ee2 100644 --- a/packages/blinkid-core/docs/type-aliases/BlinkIdScanningResult.md +++ b/packages/blinkid-core/docs/type-aliases/BlinkIdScanningResult.md @@ -157,11 +157,14 @@ The additional number of the document *** -### documentClassInfo +### documentClassInfo? -> **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) +> `optional` **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) -The document class information +The document class information. + +Absent when the document could not be classified (for example, for +unsupported documents without any extracted class info). *** @@ -229,6 +232,14 @@ The employer of the document owner *** +### ethnicity + +> **ethnicity**: [`StringResult`](StringResult.md) \| `undefined` + +The ethnicity of the document owner + +*** + ### faceImageScanningSide > **faceImageScanningSide**: [`ScanningSide`](ScanningSide.md) \| `undefined` diff --git a/packages/blinkid-core/docs/type-aliases/BlinkIdWorkerInitSettings.md b/packages/blinkid-core/docs/type-aliases/BlinkIdWorkerInitSettings.md index 6b71f6b2..41493155 100644 --- a/packages/blinkid-core/docs/type-aliases/BlinkIdWorkerInitSettings.md +++ b/packages/blinkid-core/docs/type-aliases/BlinkIdWorkerInitSettings.md @@ -56,6 +56,17 @@ The URL of the Microblink proxy server. This proxy handles requests to Microblin *** +### otaResources? + +> `optional` **otaResources**: [`BlinkIdOtaResourceSettings`](BlinkIdOtaResourceSettings.md) + +Optional browser-only OTA resource settings. + +Hosted baseline resources are always loaded. Provider update checks are +enabled by default; set `checkForUpdates` to `false` to skip the provider. + +*** + ### resourcesLocation? > `optional` **resourcesLocation**: `string` diff --git a/packages/blinkid-core/docs/type-aliases/DocumentCaptureModuleSettings.md b/packages/blinkid-core/docs/type-aliases/DocumentCaptureModuleSettings.md index 58f4ea1d..d0b84250 100644 --- a/packages/blinkid-core/docs/type-aliases/DocumentCaptureModuleSettings.md +++ b/packages/blinkid-core/docs/type-aliases/DocumentCaptureModuleSettings.md @@ -47,6 +47,31 @@ blur; it may detect as blur even something that only resembles blur. *** +### cropType + +> **cropType**: [`InputImageCropType`](InputImageCropType.md) + +Specifies whether the input image is already cropped, likely cropped, or +not cropped. + +When set to `"cropped"`, the input image must consist solely of the already +cropped and corrected document. + +When set to `"unknown"`, the recognizer first attempts extraction as if the +image is cropped, then falls back to the regular localization pipeline if +extraction fails. + +`"cropped"` and `"unknown"` are applicable only to `Photo` sources and will +cause a validation error for `Video`. + +#### Default + +```ts +"not-cropped" +``` + +*** + ### documentImageReturnEnabled > **documentImageReturnEnabled**: `boolean` @@ -227,12 +252,13 @@ document will be excluded from further processing. If occlusion is detected, `ProcessingStatus` will be `ImagePreprocessingFailed` and hand occlusion status will be reported in the `ProcessResult`. -Default behavior depends on `inputImageCropped`: +Default behavior depends on `cropType`: -- `true`: Defaults to `false`. This setting is not applicable. Setting this - to `true` while `inputImageCropped` is also `true` will result in a - settings validation failure. -- `false`: Defaults to `true`. Images with hand occlusion are rejected. +- `"cropped"`: Defaults to `false`. This setting is not applicable. Setting + this to `true` while `cropType` is `"cropped"` will result in a settings + validation failure. +- `"not-cropped"` and `"unknown"`: Defaults to `true`. Images with hand + occlusion are rejected. #### Default @@ -267,29 +293,6 @@ true *** -### inputImageCropped - -> **inputImageCropped**: `boolean` - -Indicates whether the input image is already cropped and -perspective-corrected. - -If `true`, the input image must consist solely of the already cropped and -corrected document. - -Default value is `false`. - -This setting is not applicable to `Video` sources and will cause a -validation error if set to true. - -#### Default - -```ts -false -``` - -*** - ### inputImageMargin > **inputImageMargin**: `number` @@ -333,6 +336,29 @@ false *** +### inputImageSelectionStrategy + +> **inputImageSelectionStrategy**: [`InputImageSelectionStrategy`](InputImageSelectionStrategy.md) + +Represents the strategy used to select the best input image from a pool of +stable input images. + +Available strategies are `"single-image"`, `"optimize-for-speed"`, +`"default"`, and `"optimize-for-quality"`. The `"default"` strategy +represents a trade-off between speed and quality, while +`"optimize-for-speed"` and `"optimize-for-quality"` are optimized for speed +and quality respectively. + +This setting is only applicable for the `Video` input image source. + +#### Default + +```ts +"default" +``` + +*** + ### passportDataPageScanOnly > **passportDataPageScanOnly**: `boolean` diff --git a/packages/blinkid-core/docs/type-aliases/DocumentClassComponent.md b/packages/blinkid-core/docs/type-aliases/DocumentClassComponent.md new file mode 100644 index 00000000..17c6f24f --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/DocumentClassComponent.md @@ -0,0 +1,37 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / DocumentClassComponent + +# Type Alias: DocumentClassComponent\ + +> **DocumentClassComponent**\<`TId`\> = `object` + +A single document classification component. + +`id` is present when the classification maps to a value known at build time. +`rawValue` always carries the raw classification token from the document +knowledge database, including OTA-delivered classes unknown at build time. + +## Type Parameters + +### TId + +`TId` *extends* `string` + +## Properties + +### id? + +> `optional` **id**: `TId` + +Strongly-typed identifier, when known at build time. + +*** + +### rawValue + +> **rawValue**: `string` + +Raw classification value (document knowledge database format). diff --git a/packages/blinkid-core/docs/type-aliases/DocumentClassCountry.md b/packages/blinkid-core/docs/type-aliases/DocumentClassCountry.md new file mode 100644 index 00000000..b0b53a83 --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/DocumentClassCountry.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / DocumentClassCountry + +# Type Alias: DocumentClassCountry + +> **DocumentClassCountry** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`Country`](Country.md)\> + +The document country classification. diff --git a/packages/blinkid-core/docs/type-aliases/DocumentClassDocumentType.md b/packages/blinkid-core/docs/type-aliases/DocumentClassDocumentType.md new file mode 100644 index 00000000..ab519a06 --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/DocumentClassDocumentType.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / DocumentClassDocumentType + +# Type Alias: DocumentClassDocumentType + +> **DocumentClassDocumentType** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`DocumentType`](DocumentType.md)\> + +The document type classification. diff --git a/packages/blinkid-core/docs/type-aliases/DocumentClassInfo.md b/packages/blinkid-core/docs/type-aliases/DocumentClassInfo.md index 75989a08..d82e9aad 100644 --- a/packages/blinkid-core/docs/type-aliases/DocumentClassInfo.md +++ b/packages/blinkid-core/docs/type-aliases/DocumentClassInfo.md @@ -14,54 +14,54 @@ Represents the document class information. ### country -> **country**: [`Country`](Country.md) \| `undefined` +> **country**: [`DocumentClassCountry`](DocumentClassCountry.md) \| `undefined` The document country. *** -### countryName +### countryName? -> **countryName**: `string` +> `optional` **countryName**: `string` The name of the country that issued the scanned document. *** -### isoAlpha2CountryCode +### documentType -> **isoAlpha2CountryCode**: `string` +> **documentType**: [`DocumentClassDocumentType`](DocumentClassDocumentType.md) \| `undefined` -The 2-letter ISO code of the country that issued the scanned document. +The type of the scanned document. *** -### isoAlpha3CountryCode +### isoAlpha2CountryCode? -> **isoAlpha3CountryCode**: `string` +> `optional` **isoAlpha2CountryCode**: `string` -The 3-letter ISO code of the country that issued the scanned document. +The 2-letter ISO code of the country that issued the scanned document. *** -### isoNumericCountryCode +### isoAlpha3CountryCode? -> **isoNumericCountryCode**: `string` +> `optional` **isoAlpha3CountryCode**: `string` -The ISO numeric code of the country that issued the scanned document. +The 3-letter ISO code of the country that issued the scanned document. *** -### region +### isoNumericCountryCode? -> **region**: [`Region`](Region.md) \| `undefined` +> `optional` **isoNumericCountryCode**: `string` -The document region. +The ISO numeric code of the country that issued the scanned document. *** -### type +### region -> **type**: [`DocumentType`](DocumentType.md) \| `undefined` +> **region**: [`DocumentClassRegion`](DocumentClassRegion.md) \| `undefined` -The type of the scanned document. +The document region. diff --git a/packages/blinkid-core/docs/type-aliases/DocumentClassRegion.md b/packages/blinkid-core/docs/type-aliases/DocumentClassRegion.md new file mode 100644 index 00000000..23aad857 --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/DocumentClassRegion.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / DocumentClassRegion + +# Type Alias: DocumentClassRegion + +> **DocumentClassRegion** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`Region`](Region.md)\> + +The document region classification. diff --git a/packages/blinkid-core/docs/type-aliases/FieldType.md b/packages/blinkid-core/docs/type-aliases/FieldType.md index 04b84f92..b50f5138 100644 --- a/packages/blinkid-core/docs/type-aliases/FieldType.md +++ b/packages/blinkid-core/docs/type-aliases/FieldType.md @@ -6,6 +6,6 @@ # Type Alias: FieldType -> **FieldType** = `"localizedName"` \| `"additionalAddressInformation"` \| `"additionalNameInformation"` \| `"additionalOptionalAddressInformation"` \| `"additionalPersonalIdNumber"` \| `"address"` \| `"bloodType"` \| `"classEffectiveDate"` \| `"classExpiryDate"` \| `"conditions"` \| `"dateOfBirth"` \| `"dateOfExpiry"` \| `"dateOfIssue"` \| `"documentAdditionalNumber"` \| `"documentNumber"` \| `"documentOptionalAdditionalNumber"` \| `"employer"` \| `"endorsements"` \| `"fathersName"` \| `"firstName"` \| `"fullName"` \| `"issuingAuthority"` \| `"lastName"` \| `"licenceType"` \| `"maritalStatus"` \| `"mothersName"` \| `"mrz"` \| `"nationality"` \| `"personalIdNumber"` \| `"placeOfBirth"` \| `"profession"` \| `"race"` \| `"religion"` \| `"residentialStatus"` \| `"restrictions"` \| `"sex"` \| `"sponsor"` \| `"vehicleClass"` \| `"visaType"` \| `"dependentDateOfBirth"` \| `"dependentDocumentNumber"` \| `"dependentFullName"` \| `"dependentSex"` \| `"documentSubtype"` \| `"eligibilityCategory"` \| `"manufacturingYear"` \| `"remarks"` \| `"residencePermitType"` \| `"specificDocumentValidity"` \| `"vehicleOwner"` \| `"vehicleType"` \| `"nationalInsuranceNumber"` \| `"countryCode"` \| `"certificateNumber"` \| `"municipalityOfRegistration"` \| `"localityCode"` \| `"maidenName"` \| `"stateCode"` \| `"dateOfEntry"` \| `"municipalityCode"` \| `"pollingStationCode"` \| `"sectionCode"` \| `"registrationCenterCode"` \| `"stateName"` \| `"effectiveDate"` \| `"parentsLastName"` \| `"workRestriction"` \| `"parentsFirstName"` \| `"socialSecurityStatus"` \| `"legalStatus"` \| `"husbandName"` \| `"cardAccessNumber"` +> **FieldType** = `"localizedName"` \| `"additionalAddressInformation"` \| `"additionalNameInformation"` \| `"additionalOptionalAddressInformation"` \| `"additionalPersonalIdNumber"` \| `"address"` \| `"bloodType"` \| `"classEffectiveDate"` \| `"classExpiryDate"` \| `"conditions"` \| `"dateOfBirth"` \| `"dateOfExpiry"` \| `"dateOfIssue"` \| `"documentAdditionalNumber"` \| `"documentNumber"` \| `"documentOptionalAdditionalNumber"` \| `"employer"` \| `"endorsements"` \| `"fathersName"` \| `"firstName"` \| `"fullName"` \| `"issuingAuthority"` \| `"lastName"` \| `"licenceType"` \| `"maritalStatus"` \| `"mothersName"` \| `"mrz"` \| `"nationality"` \| `"personalIdNumber"` \| `"placeOfBirth"` \| `"profession"` \| `"race"` \| `"religion"` \| `"residentialStatus"` \| `"restrictions"` \| `"sex"` \| `"sponsor"` \| `"vehicleClass"` \| `"visaType"` \| `"dependentDateOfBirth"` \| `"dependentDocumentNumber"` \| `"dependentFullName"` \| `"dependentSex"` \| `"documentSubtype"` \| `"eligibilityCategory"` \| `"manufacturingYear"` \| `"remarks"` \| `"residencePermitType"` \| `"specificDocumentValidity"` \| `"vehicleOwner"` \| `"vehicleType"` \| `"nationalInsuranceNumber"` \| `"countryCode"` \| `"certificateNumber"` \| `"municipalityOfRegistration"` \| `"localityCode"` \| `"maidenName"` \| `"stateCode"` \| `"dateOfEntry"` \| `"municipalityCode"` \| `"pollingStationCode"` \| `"sectionCode"` \| `"registrationCenterCode"` \| `"stateName"` \| `"effectiveDate"` \| `"parentsLastName"` \| `"workRestriction"` \| `"parentsFirstName"` \| `"socialSecurityStatus"` \| `"legalStatus"` \| `"husbandName"` \| `"cardAccessNumber"` \| `"parentFullName"` \| `"ethnicity"` Represents all possible field types that can be extracted from the document. diff --git a/packages/blinkid-core/docs/type-aliases/InputImageAnalysisResult.md b/packages/blinkid-core/docs/type-aliases/InputImageAnalysisResult.md index fcdc800c..41abfcb6 100644 --- a/packages/blinkid-core/docs/type-aliases/InputImageAnalysisResult.md +++ b/packages/blinkid-core/docs/type-aliases/InputImageAnalysisResult.md @@ -32,11 +32,14 @@ The status of blur detection *** -### documentClassInfo +### documentClassInfo? -> **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) +> `optional` **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) -Information about the document class +Information about the document class. + +Absent when the document could not be classified (for example, for +unsupported documents without any extracted class info). *** @@ -144,6 +147,19 @@ List of failed image extractions *** +### inputImageCropAnalysis + +> **inputImageCropAnalysis**: [`InputImageCropAnalysis`](InputImageCropAnalysis.md) + +Records the conclusion drawn about whether the input image was already +cropped and perspective-corrected. + +Only meaningful when the document capture module `cropType` was set to +`"unknown"` and the input source is `Photo`; otherwise always +`"not-available"`. + +*** + ### invalidCharacterFields > **invalidCharacterFields**: [`FieldType`](FieldType.md)[] @@ -190,3 +206,13 @@ The status of real ID detection > **scanningSide**: [`ScanningSide`](ScanningSide.md) Side of the document being scanned + +*** + +### vizExtractionType + +> **vizExtractionType**: [`VizExtractionType`](VizExtractionType.md) + +Type or availability status of VIZ extraction for this input image. + +The value is `"not-available"` until a document is scanned. diff --git a/packages/blinkid-core/docs/type-aliases/InputImageCropAnalysis.md b/packages/blinkid-core/docs/type-aliases/InputImageCropAnalysis.md new file mode 100644 index 00000000..207b1a9d --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/InputImageCropAnalysis.md @@ -0,0 +1,30 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / InputImageCropAnalysis + +# Type Alias: InputImageCropAnalysis + +> **InputImageCropAnalysis** = `"not-cropped"` \| `"cropped"` \| `"not-available"` \| `"undetermined"` + +Describes the conclusion drawn about whether the input image was already +cropped and perspective-corrected prior to being submitted for recognition. + +This analysis is only performed when the document capture module `cropType` +is set to `"unknown"` and the input source is `Photo`. In all other cases the +value is `"not-available"`. + +- `"not-cropped"`: The first attempt (treating the image as pre-cropped) did + not yield a valid result, so the standard detection-and-perspective- + correction pipeline was executed as a fallback and succeeded. Conclusion: + the input image was likely not pre-cropped. +- `"cropped"`: The first attempt (treating the image as pre-cropped) yielded a + valid result without running the document detector. Conclusion: the input + image was likely already cropped and perspective-corrected. +- `"not-available"`: The two-attempt analysis was not performed because + `cropType` was `"cropped"` or `"not-cropped"`, or the input source was + `Video`. +- `"undetermined"`: The analysis does not allow for a conclusion to be drawn + because a valid stage could not be reached, neither considering the image + as cropped nor as not cropped. diff --git a/packages/blinkid-core/docs/type-aliases/InputImageCropType.md b/packages/blinkid-core/docs/type-aliases/InputImageCropType.md new file mode 100644 index 00000000..24003baa --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/InputImageCropType.md @@ -0,0 +1,19 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / InputImageCropType + +# Type Alias: InputImageCropType + +> **InputImageCropType** = `"not-cropped"` \| `"unknown"` \| `"cropped"` + +Specifies whether the input image is already cropped, likely cropped, or not +cropped. + +- `"not-cropped"`: The image is considered raw and goes through document + detection and perspective correction. +- `"unknown"`: The image may already be cropped. The recognizer first tries + cropped processing and falls back to detection if extraction fails. +- `"cropped"`: The input image must contain only the cropped and + perspective-corrected document. diff --git a/packages/blinkid-core/docs/type-aliases/InputImageSelectionStrategy.md b/packages/blinkid-core/docs/type-aliases/InputImageSelectionStrategy.md new file mode 100644 index 00000000..34c02208 --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/InputImageSelectionStrategy.md @@ -0,0 +1,28 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / InputImageSelectionStrategy + +# Type Alias: InputImageSelectionStrategy + +> **InputImageSelectionStrategy** = `"single-image"` \| `"optimize-for-speed"` \| `"balanced"` \| `"optimize-for-quality"` + +Represents the strategy used to select the best input image from a pool of +stable input images. + +Before selecting the best-quality image, a sequence of stable input images +must be collected. From this pool, the one with the highest quality is +selected. An input image is considered stable when the image analysis results +are consistent across a consecutive stream of input images. + +A larger pool size increases the likelihood of capturing a high-quality image +but may introduce a slight delay, as more stable input images need to be +collected. + +- `"single-image"`: Selects the first acceptable stable input image. +- `"optimize-for-speed"`: Faster processing, but may select a lower-quality + image because a smaller pool of stable input images is considered. +- `"default"`: Trade-off between quality and speed. +- `"optimize-for-quality"`: Slower processing in order to select a high-quality + input image, because a larger pool of stable input images is considered. diff --git a/packages/blinkid-core/docs/type-aliases/PingSdkInitStart.md b/packages/blinkid-core/docs/type-aliases/PingSdkInitStart.md index 0145cb98..d309e618 100644 --- a/packages/blinkid-core/docs/type-aliases/PingSdkInitStart.md +++ b/packages/blinkid-core/docs/type-aliases/PingSdkInitStart.md @@ -6,6 +6,6 @@ # Type Alias: PingSdkInitStart -> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"1.3.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> +> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"2.0.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> Ping type for ping.sdk.init.start diff --git a/packages/blinkid-core/docs/type-aliases/PingUxEvent.md b/packages/blinkid-core/docs/type-aliases/PingUxEvent.md index e040c997..52eff441 100644 --- a/packages/blinkid-core/docs/type-aliases/PingUxEvent.md +++ b/packages/blinkid-core/docs/type-aliases/PingUxEvent.md @@ -6,6 +6,6 @@ # Type Alias: PingUxEvent -> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.1.0"`, [`PingUxEventData`](PingUxEventData.md)\> +> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.2.0"`, [`PingUxEventData`](PingUxEventData.md)\> Ping type for ping.sdk.ux.event diff --git a/packages/blinkid-core/docs/type-aliases/ProcessingStatus.md b/packages/blinkid-core/docs/type-aliases/ProcessingStatus.md index 05981986..47e94ee5 100644 --- a/packages/blinkid-core/docs/type-aliases/ProcessingStatus.md +++ b/packages/blinkid-core/docs/type-aliases/ProcessingStatus.md @@ -6,7 +6,7 @@ # Type Alias: ProcessingStatus -> **ProcessingStatus** = `"success"` \| `"detection-failed"` \| `"image-preprocessing-failed"` \| `"stability-test-failed"` \| `"scanning-wrong-side"` \| `"field-identification-failed"` \| `"mandatory-field-missing"` \| `"invalid-characters-found"` \| `"image-return-failed"` \| `"barcode-recognition-failed"` \| `"mrz-parsing-failed"` \| `"unsupported-document"` \| `"awaiting-other-side"` \| `"not-scanned"` \| `"barcode-detection-failed"` \| `"mrz-detection-failed"` \| `"input-image-not-focused"` \| `"canceled"` +> **ProcessingStatus** = `"success"` \| `"detection-failed"` \| `"image-preprocessing-failed"` \| `"stability-test-failed"` \| `"scanning-wrong-side"` \| `"field-identification-failed"` \| `"mandatory-field-missing"` \| `"invalid-characters-found"` \| `"image-return-failed"` \| `"barcode-recognition-failed"` \| `"mrz-parsing-failed"` \| `"unsupported-document"` \| `"awaiting-other-side"` \| `"not-scanned"` \| `"barcode-detection-failed"` \| `"mrz-detection-failed"` \| `"input-image-not-focused"` \| `"awaiting-more-stable-input-images"` \| `"canceled"` Represents the status of the document processing. @@ -45,4 +45,7 @@ stages of the recognition and extraction process. - `mrz-detection-failed` The MRZ was not found on the image. This processing status can only occur if document has mandatory MRZ. - `input-image-not-focused` Input image is not focused. +- `awaiting-more-stable-input-images` More stable input images are required to + proceed to data and image extraction. Available only for `Video` input + source. An input image is stable if it passed the stability test. - `canceled` Scanning was terminated by cancel delegate. diff --git a/packages/blinkid-core/docs/type-aliases/VizExtractionType.md b/packages/blinkid-core/docs/type-aliases/VizExtractionType.md new file mode 100644 index 00000000..5a47a622 --- /dev/null +++ b/packages/blinkid-core/docs/type-aliases/VizExtractionType.md @@ -0,0 +1,17 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / VizExtractionType + +# Type Alias: VizExtractionType + +> **VizExtractionType** = `"not-available"` \| `"segmentation"` \| `"templating"` \| `"unsupported"` + +Describes whether VIZ extraction was available for the processed input image +and which extraction path was selected. + +- `"not-available"`: VIZ extraction has not been evaluated yet. +- `"segmentation"`: VIZ data was extracted using segmentation. +- `"templating"`: VIZ data was extracted using a document template. +- `"unsupported"`: VIZ extraction is not supported for the processed image. diff --git a/packages/blinkid-core/docs/type-aliases/VizFieldsCompleteness.md b/packages/blinkid-core/docs/type-aliases/VizFieldsCompleteness.md index e224b0c6..be524ff4 100644 --- a/packages/blinkid-core/docs/type-aliases/VizFieldsCompleteness.md +++ b/packages/blinkid-core/docs/type-aliases/VizFieldsCompleteness.md @@ -142,6 +142,12 @@ *** +### ethnicity? + +> `optional` **ethnicity**: [`StringResultCompleteness`](StringResultCompleteness.md) + +*** + ### fathersName? > `optional` **fathersName**: [`StringResultCompleteness`](StringResultCompleteness.md) diff --git a/packages/blinkid-core/docs/type-aliases/VizResult.md b/packages/blinkid-core/docs/type-aliases/VizResult.md index 8435121a..bb5f2cf9 100644 --- a/packages/blinkid-core/docs/type-aliases/VizResult.md +++ b/packages/blinkid-core/docs/type-aliases/VizResult.md @@ -196,6 +196,14 @@ The employer of the document owner *** +### ethnicity + +> **ethnicity**: [`StringResult`](StringResult.md) \| `null` + +The ethnicity of the document owner + +*** + ### fathersName > **fathersName**: [`StringResult`](StringResult.md) \| `null` diff --git a/packages/blinkid-core/docs/type-aliases/WasmSimdVariant.md b/packages/blinkid-core/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index aa097020..00000000 --- a/packages/blinkid-core/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-core**](../README.md) - -*** - -[@microblink/blinkid-core](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkid-core/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md b/packages/blinkid-core/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md new file mode 100644 index 00000000..079b1fe0 --- /dev/null +++ b/packages/blinkid-core/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md @@ -0,0 +1,9 @@ +[**@microblink/blinkid-core**](../README.md) + +*** + +[@microblink/blinkid-core](../README.md) / DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL + +# Variable: DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL + +> `const` **DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL**: `"https://blinkid-ota.microblink.com"` = `"https://blinkid-ota.microblink.com"` diff --git a/packages/blinkid-core/docs/variables/wasmSimdVariants.md b/packages/blinkid-core/docs/variables/wasmSimdVariants.md deleted file mode 100644 index cf2ea0bb..00000000 --- a/packages/blinkid-core/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-core**](../README.md) - -*** - -[@microblink/blinkid-core](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkid-core/docs/variables/wasmVariants.md b/packages/blinkid-core/docs/variables/wasmVariants.md index 62679d30..86f4c2c1 100644 --- a/packages/blinkid-core/docs/variables/wasmVariants.md +++ b/packages/blinkid-core/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkid-core/package.json b/packages/blinkid-core/package.json index b6027a31..84e131f4 100644 --- a/packages/blinkid-core/package.json +++ b/packages/blinkid-core/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid-core", "description": "BlinkID Core SDK", - "version": "8000.0.1", + "version": "8001.0.0", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -17,7 +17,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm prepare-publish && pnpm pack-check", + "publish-test": "pnpm prepare-publish && pnpm pack-check", "test": "vitest run", "test:watch": "vitest", "type-rollup": "api-extractor run --local", @@ -54,7 +54,7 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@microblink/repo-utils": "workspace:*", "@microblink/test-utils": "workspace:*", "@microblink/tsconfig": "workspace:*", diff --git a/packages/blinkid-core/src/loadBlinkIdCore.test.ts b/packages/blinkid-core/src/loadBlinkIdCore.test.ts new file mode 100644 index 00000000..c313cb3e --- /dev/null +++ b/packages/blinkid-core/src/loadBlinkIdCore.test.ts @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import type { + BlinkIdWorkerInitSettings, + ProgressStatusCallback, +} from "@microblink/blinkid-worker"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import type { BlinkIdInitSettings } from "./loadBlinkIdCore"; + +const { + createProxyWorkerMock, + getUserIdMock, + proxyMock, + remoteWorker, + shouldUseLightweightBuildMock, +} = vi.hoisted(() => { + const initBlinkId = vi.fn(); + const sendPinglets = vi.fn(); + const createProxyWorkerMock = vi.fn().mockResolvedValue({ + initBlinkId, + sendPinglets, + }); + const getUserIdMock = vi.fn(() => "user-123"); + const proxyMock = vi.fn((callback: ProgressStatusCallback) => callback); + const shouldUseLightweightBuildMock = vi.fn().mockResolvedValue(false); + + return { + createProxyWorkerMock, + getUserIdMock, + proxyMock, + remoteWorker: { + initBlinkId, + sendPinglets, + }, + shouldUseLightweightBuildMock, + }; +}); + +vi.mock("@microblink/core-common/createProxyWorker", () => ({ + createProxyWorker: createProxyWorkerMock, +})); + +vi.mock("@microblink/core-common/getUserId", () => ({ + getUserId: getUserIdMock, +})); + +vi.mock("@microblink/core-common/shouldUseLightweightBuild", () => ({ + shouldUseLightweightBuild: shouldUseLightweightBuildMock, +})); + +vi.mock("comlink", () => ({ + proxy: proxyMock, +})); + +import { loadBlinkIdCore } from "./loadBlinkIdCore"; + +describe("loadBlinkIdCore", () => { + beforeEach(() => { + vi.clearAllMocks(); + createProxyWorkerMock.mockResolvedValue(remoteWorker); + remoteWorker.initBlinkId.mockResolvedValue(undefined); + shouldUseLightweightBuildMock.mockResolvedValue(false); + }); + + it("fills default userId, resourcesLocation, and useLightweightBuild", async () => { + const settings: BlinkIdInitSettings = { licenseKey: "test-key" }; + const expectedLocation = window.location.href; + + const result = await loadBlinkIdCore(settings); + + expect(result).toBe(remoteWorker); + expect(createProxyWorkerMock).toHaveBeenCalledWith( + expectedLocation, + "blinkid-worker.js", + ); + expect(getUserIdMock).toHaveBeenCalledWith("blinkid-userid"); + expect(shouldUseLightweightBuildMock).toHaveBeenCalledOnce(); + expect(settings.userId).toBe("user-123"); + expect(settings.resourcesLocation).toBe(expectedLocation); + expect(settings.useLightweightBuild).toBe(false); + expect(remoteWorker.initBlinkId).toHaveBeenCalledWith( + settings as BlinkIdWorkerInitSettings, + undefined, + ); + }); + + it("proxies progress callback and passes OTA resource settings to init", async () => { + const settings: BlinkIdInitSettings = { + licenseKey: "test-key", + resourcesLocation: "https://resources.example.com", + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + resourcesLocation: "https://cdn.example.com/blinkid-ota", + strict: true, + }, + useLightweightBuild: true, + }; + const progressCallback = vi.fn(); + + await loadBlinkIdCore(settings, progressCallback); + + expect(shouldUseLightweightBuildMock).not.toHaveBeenCalled(); + expect(proxyMock).toHaveBeenCalledWith(progressCallback); + expect(remoteWorker.initBlinkId).toHaveBeenCalledWith( + settings as BlinkIdWorkerInitSettings, + progressCallback, + ); + }); +}); diff --git a/packages/blinkid-core/src/utils.test.ts b/packages/blinkid-core/src/utils.test.ts index 620e73eb..9213c49f 100644 --- a/packages/blinkid-core/src/utils.test.ts +++ b/packages/blinkid-core/src/utils.test.ts @@ -31,8 +31,8 @@ const createMockBlinkIdScanningResult = ( overrides = {}, ): BlinkIdScanningResult => ({ documentClassInfo: { - country: "usa", - type: "id", + country: { id: "usa", rawValue: "USA" }, + documentType: { id: "id", rawValue: "ID" }, region: undefined, countryName: "", isoNumericCountryCode: "", @@ -54,6 +54,7 @@ const createMockBlinkIdScanningResult = ( dateOfExpiry: undefined, dateOfIssue: undefined, dependentsInfo: undefined, + ethnicity: undefined, documentAdditionalNumber: undefined, documentNumber: undefined, documentOptionalAdditionalNumber: undefined, diff --git a/packages/blinkid-ux-manager/CHANGELOG.md b/packages/blinkid-ux-manager/CHANGELOG.md index 648c9695..23fee8ca 100644 --- a/packages/blinkid-ux-manager/CHANGELOG.md +++ b/packages/blinkid-ux-manager/CHANGELOG.md @@ -1,5 +1,37 @@ # @microblink/blinkid-ux-manager +## 8001.0.0 + +### Major Changes + +- **Breaking:** `DocumentClassInfo.country`, `region`, and `type` are now wrapper objects (`{ id?, rawValue }`) instead of plain string values. `id` carries the strongly-typed kebab-case value (`Country` / `Region` / `DocumentType`) when the document class is known at build time; `rawValue` always carries the raw classification token from the document knowledge database, including OTA-delivered document classes unknown at build time. Update comparisons such as `documentClassInfo.country === "usa"` to `documentClassInfo.country?.id === "usa"`, and use `id ?? rawValue` when displaying values. This affects `redactionSettingsResolver`, `addDocumentClassFilter`, `addOnDocumentFilteredCallback`, and the `documentClassInfo` fields on process and scanning results. + - Added the `DocumentClassComponent`, `DocumentClassCountry`, `DocumentClassRegion`, and `DocumentClassDocumentType` types. + - `countryName` and the ISO country-code fields on `DocumentClassInfo` are unchanged (plain strings, empty when unknown), and `documentClassInfo` on results remains non-optional — an unclassified document still yields `undefined` components and empty strings. + - Updated the native bindings to the new document classification API (enum identifiers renamed to `CountryID` / `RegionID` / `DocumentTypeID`; document class construction now goes through the document knowledge database). Unrecognized classification strings passed to `getDefaultRedactionSettings` no longer abort the Wasm module; they are forwarded as raw values instead. +- Renamed `DocumentClassInfo.type` to `DocumentClassInfo.documentType` to align with other platforms. + - Migration: replace `documentClassInfo.type` with `documentClassInfo.documentType`. +- Adds new timeout dialog text + - Title updated to "Unable to read the document" from "Scan unsuccessful" + - Details updated from "Unable to read the document. Please try again." to + "Make sure your camera lens is clean and the document is fully visible, in focus, and well lit." for Desktop + "Make sure the document is well lit, fully visible, and free of glare." for Mobile +- Adds a new MRZ Extraction mode +- Adds new assets (images) for the MRZ extraction mode along with new feedback messages +- Renames the `keep_document_still` translation key to `keep_still` (used by the `BLUR_DETECTED` UI state), now resolving to `keep_still` on desktop and `blur_detected` on mobile. + - This is a breaking change. To migrate, rename any override of `keep_document_still` to `keep_still`. +- Improves the default timeout settings in UX Manager by enabling different timeout configurations for desktop and mobile environments. +- Improves analytics granularity when reporting timeout events. +- Updated `BlinkIdProcessingError` to support new timeout types, error "timeout" was removed and two new errors were added: `inactivity_timeout` and `scan_step_timeout` +- ```javascript + blinkid.addOnErrorCallback(err => { + // err can no longer be 'timeout', instead it will be one of these two + if (err === 'inactivity_timeout' || err === 'scan_step_timeout') + }) + ``` +- Fixed feedback UI localization merging so partial user string overrides preserve the default nested localized values instead of replacing whole sections. +- Updated dependencies + - @microblink/blinkid-core@8001.0.0 + ## 8000.0.1 ### Patch Changes diff --git a/packages/blinkid-ux-manager/README.md b/packages/blinkid-ux-manager/README.md index e0c8c16e..d552e217 100644 --- a/packages/blinkid-ux-manager/README.md +++ b/packages/blinkid-ux-manager/README.md @@ -345,15 +345,27 @@ Top-level groups in `en.ts`: | ----------------------- | --------------------------------------- | | `full-document` | `full_document` | | `document-with-barcode` | `document_with_barcode` | +| `document-with-mrz` | `document_with_mrz` | | `barcode-only` | `barcode_only` | -Feedback strings that depend on extraction mode (for example front vs barcode side) are selected in code via [`src/ui/feedbackMessages.ts`](src/ui/feedbackMessages.ts); new keys include `scan_the_barcode_side` and `keep_still` (used for the desktop blur path as a shorter “keep still” hint). +The `document-with-mrz` mode is selected for single-side scanning when document +capture is enabled and `mrzModule.presenceMandatory` is `true`. It provides +MRZ-specific help, onboarding, illustrations, and scanning guidance. + +Feedback strings that depend on extraction mode (for example front, barcode, +or MRZ side) are selected in code via +[`src/ui/feedbackMessages.ts`](src/ui/feedbackMessages.ts); new keys include +`scan_the_barcode_side`, `scan_the_mrz_side`, and `keep_still` (used for the +desktop blur path as a shorter “keep still” hint). #### English copy changes (not just nesting) - Several `feedback_messages` strings now say “**a** document” instead of “**the** document” where the copy is generic. -- New dedicated copy for **barcode-only** and **document + barcode** paths under `help_modal.barcode`, `help_modal.capture_barcode`, and matching `onboarding_modal` groups. -- New feedback keys: `scan_the_barcode_side`, `keep_still`. +- New dedicated copy for **barcode-only**, **document + barcode**, and + **document + MRZ** paths under `help_modal.barcode_only`, + `help_modal.document_with_barcode`, `help_modal.document_with_mrz`, and the + matching `onboarding_modal` groups. +- New feedback keys: `scan_the_barcode_side`, `scan_the_mrz_side`, `keep_still`. #### Other locales diff --git a/packages/blinkid-ux-manager/docs/interfaces/BlinkIdUxManager.md b/packages/blinkid-ux-manager/docs/interfaces/BlinkIdUxManager.md index fee0ee3e..7025fcc4 100644 --- a/packages/blinkid-ux-manager/docs/interfaces/BlinkIdUxManager.md +++ b/packages/blinkid-ux-manager/docs/interfaces/BlinkIdUxManager.md @@ -173,7 +173,7 @@ callback. ```ts const cleanup = manager.addDocumentClassFilter((docClassInfo) => { - return docClassInfo.country === 'usa'; + return docClassInfo.country?.id === 'usa'; }); // Later, to remove the callback: diff --git a/packages/blinkid-ux-manager/docs/type-aliases/BlinkIdProcessingError.md b/packages/blinkid-ux-manager/docs/type-aliases/BlinkIdProcessingError.md index 9bfb3638..63115577 100644 --- a/packages/blinkid-ux-manager/docs/type-aliases/BlinkIdProcessingError.md +++ b/packages/blinkid-ux-manager/docs/type-aliases/BlinkIdProcessingError.md @@ -6,7 +6,7 @@ # Type Alias: BlinkIdProcessingError -> **BlinkIdProcessingError** = `"timeout"` \| `"unsupported_document"` \| `"result_retrieval_failed"` \| `"unknown"` +> **BlinkIdProcessingError** = `"inactivity_timeout"` \| `"scan_step_timeout"` \| `"unsupported_document"` \| `"result_retrieval_failed"` \| `"unknown"` BlinkID processing error. These errors are usually unrecoverable and require the user to retry the scanning process. diff --git a/packages/blinkid-ux-manager/docs/type-aliases/DocumentClassFilter.md b/packages/blinkid-ux-manager/docs/type-aliases/DocumentClassFilter.md index 24f9c5bc..99051af3 100644 --- a/packages/blinkid-ux-manager/docs/type-aliases/DocumentClassFilter.md +++ b/packages/blinkid-ux-manager/docs/type-aliases/DocumentClassFilter.md @@ -24,6 +24,9 @@ marked as "unsupported-document". `DocumentClassInfo` Information about the document class, such as country and type. +Each classification component is a wrapper object — compare against its `id` +(e.g. `documentClassInfo.country?.id === "usa"`); `id` is absent for +OTA-delivered classes unknown at build time (use `rawValue` for those). ## Returns diff --git a/packages/blinkid-ux-manager/package.json b/packages/blinkid-ux-manager/package.json index fd08be50..95ecf1dc 100644 --- a/packages/blinkid-ux-manager/package.json +++ b/packages/blinkid-ux-manager/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid-ux-manager", "description": "BlinkID UX Manager provides user feedback based on the blinkid process results.", - "version": "8000.0.1", + "version": "8001.0.0", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -17,7 +17,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm pack-check", + "publish-test": "pnpm pack-check", "test": "vitest run", "test:watch": "vitest", "type-rollup": "api-extractor run --local", @@ -57,7 +57,7 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@microblink/feedback-stabilizer": "workspace:^", "@microblink/repo-utils": "workspace:*", "@microblink/shared-components": "workspace:^", @@ -110,4 +110,4 @@ "Safari >= 16.4", "iOS >= 16.4" ] -} \ No newline at end of file +} diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdProcessingError.ts b/packages/blinkid-ux-manager/src/core/BlinkIdProcessingError.ts index ef12c810..0fba83bf 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdProcessingError.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdProcessingError.ts @@ -8,7 +8,8 @@ */ export type BlinkIdProcessingError = // processing - | "timeout" + | "inactivity_timeout" + | "scan_step_timeout" | "unsupported_document" // result retrieval failed after successful document capture diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdTimeoutConfiguration.ts b/packages/blinkid-ux-manager/src/core/BlinkIdTimeoutConfiguration.ts index ff8e41a7..ad8dfee3 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdTimeoutConfiguration.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdTimeoutConfiguration.ts @@ -25,10 +25,41 @@ export type BlinkIdTimeoutConfiguration = { /** * The default BlinkID timeout configuration. */ -export const defaultBlinkIdTimeoutConfiguration: BlinkIdTimeoutConfiguration = { +export const defaultBlinkIdTimeoutConfiguration = { + inactivityTimeoutMs: 10_000, + scanStepTimeoutMs: 60_000, + partiallySupportedBarcodeResolveTimeoutMs: 3_000, +} as const satisfies BlinkIdTimeoutConfiguration; + +export const defaultBlinkIdDesktopTimeoutConfiguration = { inactivityTimeoutMs: 10_000, scanStepTimeoutMs: 60_000, partiallySupportedBarcodeResolveTimeoutMs: 8_000, +} as const satisfies BlinkIdTimeoutConfiguration; + +const resolveTimeoutConfiguration = ( + timeoutConfiguration: Partial, + isDesktop: boolean, +): BlinkIdTimeoutConfiguration => { + const defaultConfiguration = isDesktop + ? defaultBlinkIdDesktopTimeoutConfiguration + : defaultBlinkIdTimeoutConfiguration; + + return { + inactivityTimeoutMs: + timeoutConfiguration.inactivityTimeoutMs === undefined + ? defaultConfiguration.inactivityTimeoutMs + : timeoutConfiguration.inactivityTimeoutMs, + partiallySupportedBarcodeResolveTimeoutMs: + timeoutConfiguration.partiallySupportedBarcodeResolveTimeoutMs === + undefined + ? defaultConfiguration.partiallySupportedBarcodeResolveTimeoutMs + : timeoutConfiguration.partiallySupportedBarcodeResolveTimeoutMs, + scanStepTimeoutMs: + timeoutConfiguration.scanStepTimeoutMs === undefined + ? defaultConfiguration.scanStepTimeoutMs + : timeoutConfiguration.scanStepTimeoutMs, + }; }; /** @@ -52,11 +83,12 @@ const validateTimeoutDuration = ( */ export const normalizeBlinkIdTimeoutConfiguration = ( timeoutConfiguration: Partial = {}, + isDekstop: boolean, ): BlinkIdTimeoutConfiguration => { - const normalizedTimeoutConfiguration = { - ...defaultBlinkIdTimeoutConfiguration, - ...timeoutConfiguration, - }; + const normalizedTimeoutConfiguration = resolveTimeoutConfiguration( + timeoutConfiguration, + isDekstop, + ); validateTimeoutDuration( "inactivityTimeoutMs", diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.integration.test.ts b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.integration.test.ts index 5c101b0a..2c31b0c2 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.integration.test.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.integration.test.ts @@ -62,7 +62,10 @@ describe("BlinkIdUxManager integration smoke", () => { const processResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -100,7 +103,10 @@ describe("BlinkIdUxManager integration smoke", () => { const sideScannedProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -154,7 +160,7 @@ describe("BlinkIdUxManager integration smoke", () => { context.fakeCameraManager.emitPlaybackState("capturing"); await vi.advanceTimersByTimeAsync(100); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); expect(context.fakeCameraManager.stopFrameCapture).toHaveBeenCalled(); errorSpy.mockClear(); @@ -202,7 +208,10 @@ describe("BlinkIdUxManager integration smoke", () => { const processResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.session-status.test.ts b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.session-status.test.ts index a30c374a..b56dd5db 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.session-status.test.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.session-status.test.ts @@ -150,7 +150,7 @@ describe("BlinkIdUxManager session status integration", () => { singleSideDocumentWithBarcodeSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -188,7 +188,7 @@ describe("BlinkIdUxManager session status integration", () => { singleSideDocumentWithBarcodeSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -226,7 +226,7 @@ describe("BlinkIdUxManager session status integration", () => { barcodeOnlySettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -250,8 +250,8 @@ describe("BlinkIdUxManager session status integration", () => { documentDetectionStatus: "success", documentRotation: "zero", documentClassInfo: { - country: "usa", - type: "dl", + country: { id: "usa" }, + documentType: { id: "dl" }, }, }, }), @@ -269,7 +269,7 @@ describe("BlinkIdUxManager session status integration", () => { sessionSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -323,7 +323,7 @@ describe("BlinkIdUxManager session status integration", () => { sessionSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -379,7 +379,7 @@ describe("BlinkIdUxManager session status integration", () => { sessionSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -423,7 +423,7 @@ describe("BlinkIdUxManager session status integration", () => { sessionSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -465,7 +465,7 @@ describe("BlinkIdUxManager session status integration", () => { sessionSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); @@ -508,7 +508,7 @@ describe("BlinkIdUxManager session status integration", () => { sessionSettings, false, false, - {} as DeviceInfo, + { derivedDeviceInfo: { formFactors: ["Desktop"] } } as DeviceInfo, ); managers.add(manager); diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.test.ts b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.test.ts index ba9a3fcd..c4170453 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.test.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.test.ts @@ -449,7 +449,7 @@ describe("BlinkIdUxManager - package-specific: document class filtering", () => // Add filter that rejects USA documents const filterCleanup = manager.addDocumentClassFilter((docInfo) => { - return docInfo.country !== "usa"; + return docInfo.country?.id !== "usa"; }); await emitFrame(createFakeImageData()); @@ -485,7 +485,7 @@ describe("BlinkIdUxManager - package-specific: document class filtering", () => // Add filter that rejects USA documents const filterCleanup = manager.addDocumentClassFilter((docInfo) => { - return docInfo.country === "usa"; + return docInfo.country?.id === "usa"; }); await emitFrame(createFakeImageData()); @@ -964,8 +964,8 @@ describe("BlinkIdUxManager - session lifecycle: reset behavior", () => { inputImageAnalysisResult: { processingStatus: "success", documentClassInfo: { - country: "usa", - type: "dl", + country: { id: "usa" }, + documentType: { id: "dl" }, }, documentDetectionStatus: "success", }, @@ -1024,7 +1024,7 @@ describe("BlinkIdUxManager - timeout behavior", () => { // Advance timer to trigger timeout (fake timers: instant, no real wait) vi.advanceTimersByTime(timeoutDuration); - expect(errorCallback).toHaveBeenCalledWith("timeout"); + expect(errorCallback).toHaveBeenCalledWith("inactivity_timeout"); expect(cameraHarness.stopFrameCapture).toHaveBeenCalled(); }); @@ -1092,8 +1092,8 @@ describe("BlinkIdUxManager - timeout behavior", () => { inputImageAnalysisResult: { processingStatus: "success", documentClassInfo: { - country: "usa", - type: "dl", + country: { id: "usa" }, + documentType: { id: "dl" }, }, documentDetectionStatus: "success", }, @@ -1190,7 +1190,10 @@ describe( const mockSuccessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1227,7 +1230,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1267,7 +1273,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", blurDetectionStatus: "detected", }, @@ -1304,7 +1313,10 @@ describe( const mockSuccessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1325,7 +1337,10 @@ describe( const mockSuccessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1349,7 +1364,10 @@ describe( const mockSuccessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1429,7 +1447,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1525,7 +1546,10 @@ describe( // Mock process result for a captured side (not the full document) const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1562,7 +1586,10 @@ describe( createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }), @@ -1594,7 +1621,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1620,7 +1650,10 @@ describe( // Mock process result for a fully scanned document const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1648,7 +1681,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "failed", }, }); @@ -1670,7 +1706,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1704,7 +1743,10 @@ describe( const resolvedProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1800,7 +1842,10 @@ describe( const mockProcessResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "success", - documentClassInfo: { country: "usa", type: "dl" }, + documentClassInfo: { + country: { id: "usa" }, + documentType: { id: "dl" }, + }, documentDetectionStatus: "success", }, }); @@ -1833,7 +1878,7 @@ describe( // Verify timeout handling expect(cameraHarness.stopFrameCapture).toHaveBeenCalled(); - expect(errorCallback).toHaveBeenCalledWith("timeout"); + expect(errorCallback).toHaveBeenCalledWith("inactivity_timeout"); expect(mockScanningSession.getResult).not.toHaveBeenCalled(); }); diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.timeout.test.ts b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.timeout.test.ts index 23f4b12e..5e90f75c 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.timeout.test.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.timeout.test.ts @@ -21,7 +21,11 @@ import { } from "@microblink/test-utils/vitest"; import type { PartialDeep } from "type-fest"; import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; -import type { BlinkIdTimeoutConfiguration } from "./BlinkIdTimeoutConfiguration"; +import { + defaultBlinkIdDesktopTimeoutConfiguration, + defaultBlinkIdTimeoutConfiguration, + type BlinkIdTimeoutConfiguration, +} from "./BlinkIdTimeoutConfiguration"; import type { BlinkIdFrameProcessCallback, BlinkIdProgress, @@ -81,8 +85,8 @@ const sideScannedResult = () => documentDetectionStatus: "success", documentRotation: "zero", documentClassInfo: { - country: "usa", - type: "dl", + country: { id: "usa" }, + documentType: { id: "dl" }, }, }, }); @@ -113,6 +117,9 @@ const partiallySupportedBarcodeResult = () => const createManager = ( timeoutConfiguration?: Partial, managerSessionSettings: BlinkIdSessionSettings = sessionSettings, + opts?: { + deviceInfoFormFactors: DeviceInfo["derivedDeviceInfo"]["formFactors"]; + }, ) => { const cameraManager = new FakeCameraManager(); const scanningSession = createFakeScanningSession< @@ -134,7 +141,11 @@ const createManager = ( managerSessionSettings, false, false, - {} as DeviceInfo, + { + derivedDeviceInfo: { + formFactors: opts?.deviceInfoFormFactors ?? ["Desktop"], + }, + } as DeviceInfo, ); manager.addOnProgressCallback((progress) => { @@ -166,6 +177,42 @@ describe("BlinkIdUxManager timeout behavior", () => { vi.restoreAllMocks(); }); + test("timeout timer deviceInfo based resolver works on desktop", () => { + const { manager } = createManager( + { + partiallySupportedBarcodeResolveTimeoutMs: undefined, + }, + undefined, + { deviceInfoFormFactors: ["Desktop"] }, + ); + managers.add(manager); + + expect( + manager.getTimeoutConfiguration() + .partiallySupportedBarcodeResolveTimeoutMs, + ).toEqual( + defaultBlinkIdDesktopTimeoutConfiguration.partiallySupportedBarcodeResolveTimeoutMs, + ); + }); + + test("timeout timer deviceInfo based resolver works on mobile", () => { + const { manager } = createManager( + { + partiallySupportedBarcodeResolveTimeoutMs: undefined, + }, + undefined, + { deviceInfoFormFactors: ["Mobile"] }, + ); + managers.add(manager); + + expect( + manager.getTimeoutConfiguration() + .partiallySupportedBarcodeResolveTimeoutMs, + ).toEqual( + defaultBlinkIdTimeoutConfiguration.partiallySupportedBarcodeResolveTimeoutMs, + ); + }); + test("uses configured inactivity timeout and fires when mapped state does not change", async () => { const { cameraManager, scanningSession, manager } = createManager({ inactivityTimeoutMs: 100, @@ -185,7 +232,7 @@ describe("BlinkIdUxManager timeout behavior", () => { cameraManager.emitPlaybackState("capturing"); await vi.advanceTimersByTimeAsync(100); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); expect(cameraManager.stopFrameCapture).toHaveBeenCalledTimes(1); expect(scanningSession.reset).toHaveBeenCalledTimes(1); }); @@ -283,7 +330,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(1); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); }); test("fires scan-step timeout when the inactivity timeout is disabled", async () => { @@ -302,7 +349,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(1); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("scan_step_timeout"); }); test("does not fire inactivity timeout while PROCESSING_BARCODE is visible", async () => { @@ -368,7 +415,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(50); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("scan_step_timeout"); }); test("resets scan-step timeout when PROCESSING_BARCODE becomes visible", async () => { @@ -404,7 +451,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(50); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("scan_step_timeout"); }); test("keeps inactivity timeout active for BARCODE_NOT_IN_FRAME", async () => { @@ -438,7 +485,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(50); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); }); test("reports paused inactivity progress while PROCESSING_BARCODE is visible", async () => { @@ -818,7 +865,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(1); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); }); test("resets both timers after the flip-card transition when the second side starts", async () => { @@ -853,7 +900,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(10); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); }); test("resets both timers when the app returns from the background", async () => { @@ -889,7 +936,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(errorSpy).not.toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(10); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("inactivity_timeout"); }); test("advanceToNextStep restarts inactivity timeout only after the stabilized UI state changes", async () => { @@ -963,7 +1010,7 @@ describe("BlinkIdUxManager timeout behavior", () => { expect(trigger).toBeDefined(); trigger!(); - expect(errorSpy).toHaveBeenCalledWith("timeout"); + expect(errorSpy).toHaveBeenCalledWith("scan_step_timeout"); expect(cameraManager.stopFrameCapture).toHaveBeenCalled(); expect(scanningSession.reset).toHaveBeenCalled(); }); diff --git a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.ts b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.ts index 7af02497..125e80ad 100644 --- a/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.ts +++ b/packages/blinkid-ux-manager/src/core/BlinkIdUxManager.ts @@ -63,16 +63,14 @@ import { mapErrorStateKeyToAnalyticsType, type PingableErrorUiStateKey, } from "./uxAnalyticsMappers"; -import { - defaultBlinkIdTimeoutConfiguration, - normalizeBlinkIdTimeoutConfiguration, -} from "./BlinkIdTimeoutConfiguration"; +import { normalizeBlinkIdTimeoutConfiguration } from "./BlinkIdTimeoutConfiguration"; import type { BlinkIdTimeoutConfiguration } from "./BlinkIdTimeoutConfiguration"; import type { BlinkIdUxManagerOptions } from "./createBlinkIdUxManager"; import { getBlinkIdExtractionMode, type BlinkIdExtractionMode, } from "./extractionMode"; +import { match } from "ts-pattern"; type ProcessingLifecycleState = "ready" | "busy" | "terminal"; type ScanTimeoutKind = "inactivity" | "scan-step"; @@ -192,25 +190,17 @@ export class BlinkIdUxManager { /** True after destroy() is called; used to suppress late async work during teardown. */ #isDestroyed = false; /** BlinkID timeout configuration. */ - #timeoutConfiguration: BlinkIdTimeoutConfiguration = - defaultBlinkIdTimeoutConfiguration; + #timeoutConfiguration: BlinkIdTimeoutConfiguration; /** Last stabilized UI state key that reset the inactivity timer. */ #inactivityResetUiStateKey?: BlinkIdUiStateKey; /** Whether the current scan step should be timing. */ #isTimingActiveScanStep = false; /** State of the inactivity timeout timer. */ - #inactivityTimeoutState: ScanTimerState = { - remainingMs: defaultBlinkIdTimeoutConfiguration.inactivityTimeoutMs, - }; + #inactivityTimeoutState: ScanTimerState; /** State of the scan-step timeout timer. */ - #scanStepTimeoutState: ScanTimerState = { - remainingMs: defaultBlinkIdTimeoutConfiguration.scanStepTimeoutMs, - }; + #scanStepTimeoutState: ScanTimerState; /** State of the partially supported barcode resolve timer. */ - #partiallySupportedBarcodeResolveTimeoutState: ScanTimerState = { - remainingMs: - defaultBlinkIdTimeoutConfiguration.partiallySupportedBarcodeResolveTimeoutMs, - }; + #partiallySupportedBarcodeResolveTimeoutState: ScanTimerState; /** Whether the partially supported barcode resolve timer has been started. */ #partiallySupportedBarcodeResolveTimerStarted = false; /** Prevents repeated resolve attempts for the same barcode step. */ @@ -274,10 +264,25 @@ export class BlinkIdUxManager { this.showProductionOverlay = showProductionOverlay; this.deviceInfo = deviceInfo; this.#extractionMode = getBlinkIdExtractionMode(sessionSettings); + this.#timeoutConfiguration = normalizeBlinkIdTimeoutConfiguration( options.timeoutConfiguration, + this.#isDesktop, ); + this.#inactivityTimeoutState = { + remainingMs: this.#timeoutConfiguration.inactivityTimeoutMs, + }; + + this.#scanStepTimeoutState = { + remainingMs: this.#timeoutConfiguration.scanStepTimeoutMs, + }; + + this.#partiallySupportedBarcodeResolveTimeoutState = { + remainingMs: + this.#timeoutConfiguration.partiallySupportedBarcodeResolveTimeoutMs, + }; + if (options.initialUiStateKey) { this.#initialUiStateKey = options.initialUiStateKey; } @@ -337,6 +342,10 @@ export class BlinkIdUxManager { this.#rafLoop.stop(); } + get #isDesktop() { + return this.deviceInfo.derivedDeviceInfo.formFactors.includes("Desktop"); + } + #setupObservers() { let previousPlaybackState: "idle" | "playback" | "capturing" | undefined; @@ -766,7 +775,7 @@ export class BlinkIdUxManager { * * @example * const cleanup = manager.addDocumentClassFilter((docClassInfo) => { - * return docClassInfo.country === 'usa'; + * return docClassInfo.country?.id === 'usa'; * }); * * // Later, to remove the callback: @@ -991,10 +1000,13 @@ export class BlinkIdUxManager { setTimeoutConfiguration( timeoutConfiguration: Partial, ) { - this.#timeoutConfiguration = normalizeBlinkIdTimeoutConfiguration({ - ...this.#timeoutConfiguration, - ...timeoutConfiguration, - }); + this.#timeoutConfiguration = normalizeBlinkIdTimeoutConfiguration( + { + ...this.#timeoutConfiguration, + ...timeoutConfiguration, + }, + this.#isDesktop, + ); if (this.#isTimingActiveScanStep) { this.#resetScanTimeoutsForCurrentStep(); @@ -1239,6 +1251,8 @@ export class BlinkIdUxManager { ); this.#partiallySupportedBarcodeResolveTimeoutState.remainingMs = 0; + void this.#analytics.logUnsupportedBarcodeTimeout(); + try { await this.#advanceToNextStep(); } catch (error) { @@ -1355,13 +1369,26 @@ export class BlinkIdUxManager { return; } + const processingTimeoutError: BlinkIdProcessingError = match< + ScanTimeoutKind, + BlinkIdProcessingError + >(timeoutKind) + .with("inactivity", () => { + void this.#analytics.logInactivityTimeoutEvent(); + return "inactivity_timeout"; + }) + .with("scan-step", () => { + void this.#analytics.logStepTimeoutEvent(); + return "scan_step_timeout"; + }) + .exhaustive(); + console.debug(`⏳🟢 ${timeoutKind} timeout triggered`); this.clearScanTimeout(); this.cameraManager.stopFrameCapture(); - this.#invokeOnErrorCallbacks("timeout"); + this.#invokeOnErrorCallbacks(processingTimeoutError); - void this.#analytics.logStepTimeoutEvent(); void this.#analytics.sendPinglets(); void this.resetScanningSession(false); diff --git a/packages/blinkid-ux-manager/src/core/DocumentClassFilter.ts b/packages/blinkid-ux-manager/src/core/DocumentClassFilter.ts index 3559fb80..9bc91606 100644 --- a/packages/blinkid-ux-manager/src/core/DocumentClassFilter.ts +++ b/packages/blinkid-ux-manager/src/core/DocumentClassFilter.ts @@ -15,6 +15,9 @@ import { DocumentClassInfo } from "@microblink/blinkid-core"; * marked as "unsupported-document". * * @param documentClassInfo - Information about the document class, such as country and type. + * Each classification component is a wrapper object — compare against its `id` + * (e.g. `documentClassInfo.country?.id === "usa"`); `id` is absent for + * OTA-delivered classes unknown at build time (use `rawValue` for those). * * @returns A boolean indicating whether the document class is supported. */ diff --git a/packages/blinkid-ux-manager/src/core/__testdata/blankProcessResult.ts b/packages/blinkid-ux-manager/src/core/__testdata/blankProcessResult.ts index dfc8b1cc..f27ea097 100644 --- a/packages/blinkid-ux-manager/src/core/__testdata/blankProcessResult.ts +++ b/packages/blinkid-ux-manager/src/core/__testdata/blankProcessResult.ts @@ -12,6 +12,7 @@ export const blankProcessResult: ProcessResultWithBuffer = { invalidCharacterFields: [], extraPresentFields: [], imageExtractionFailures: [], + vizExtractionType: "not-available", scanningSide: "first", documentDetectionStatus: "failed", documentClassInfo: { @@ -19,7 +20,7 @@ export const blankProcessResult: ProcessResultWithBuffer = { isoNumericCountryCode: "", isoAlpha2CountryCode: "", isoAlpha3CountryCode: "", - type: undefined, + documentType: undefined, country: undefined, region: undefined, }, @@ -35,6 +36,7 @@ export const blankProcessResult: ProcessResultWithBuffer = { documentHandOcclusionStatus: "not-available", documentOrientation: "not-available", documentRotation: "not-available", + inputImageCropAnalysis: "not-available", }, resultCompleteness: { viz: [], diff --git a/packages/blinkid-ux-manager/src/core/blinkid-ui-state.test.ts b/packages/blinkid-ux-manager/src/core/blinkid-ui-state.test.ts index a8280be7..3243d993 100644 --- a/packages/blinkid-ux-manager/src/core/blinkid-ui-state.test.ts +++ b/packages/blinkid-ux-manager/src/core/blinkid-ui-state.test.ts @@ -100,15 +100,9 @@ describe("Passport utils", () => { describe("isPassportWithoutBarcode", () => { test("should return true for non-barcode passports", () => { expect( - isPassportWithoutBarcode({ - type: "passport", - country: "croatia", - region: undefined, - countryName: "", - isoNumericCountryCode: "", - isoAlpha2CountryCode: "", - isoAlpha3CountryCode: "", - }), + isPassportWithoutBarcode( + createDocumentClassInfo({ type: "passport", country: "croatia" }), + ), ).toBe(true); }); @@ -436,7 +430,10 @@ describe("getUiStateKey", () => { const processResult = createProcessResult({ inputImageAnalysisResult: { scanningSide: "second", - documentClassInfo: { type: "passport", country }, + documentClassInfo: { + documentType: { id: "passport" }, + country: country ? { id: country } : undefined, + }, documentRotation: rotation, }, }); @@ -487,7 +484,10 @@ describe("getUiStateKey", () => { inputImageAnalysisResult: { scanningSide: "second", processingStatus: "scanning-wrong-side", - documentClassInfo: { type: "passport", country }, + documentClassInfo: { + documentType: { id: "passport" }, + country: country ? { id: country } : undefined, + }, documentRotation: rotation, documentDetectionStatus: "success", }, @@ -690,6 +690,23 @@ describe("getUiStateKey", () => { expect(result).toBe("FRONT_PAGE_NOT_IN_FRAME"); }); + + test("should return undefined (no-op) while awaiting more stable input images", () => { + const processResult = createProcessResult({ + inputImageAnalysisResult: { + processingStatus: "awaiting-more-stable-input-images", + documentDetectionStatus: "success", + }, + }); + + const result = getUiStateKey( + "scanning-side-in-progress", + processResult.inputImageAnalysisResult, + getMergedScanningSettings(), + ); + + expect(result).toBeUndefined(); + }); }); describe("Priority Rules", () => { @@ -834,7 +851,7 @@ describe("getUiStateKey", () => { const processResult = createProcessResult({ inputImageAnalysisResult: { processingStatus: "awaiting-other-side", - documentClassInfo: { type: "passport" }, + documentClassInfo: { documentType: { id: "passport" } }, documentRotation: "zero", }, }); @@ -855,7 +872,7 @@ describe("getUiStateKey", () => { inputImageAnalysisResult: { scanningSide: "second", processingStatus: "scanning-wrong-side", - documentClassInfo: { type: "passport" }, + documentClassInfo: { documentType: { id: "passport" } }, documentRotation: "zero", }, }); @@ -874,7 +891,7 @@ describe("getUiStateKey", () => { inputImageAnalysisResult: { scanningSide: "second", processingStatus: "scanning-wrong-side", - documentClassInfo: { type: "passport" }, + documentClassInfo: { documentType: { id: "passport" } }, documentRotation: "zero", blurDetectionStatus: "detected", documentDetectionStatus: "success", diff --git a/packages/blinkid-ux-manager/src/core/blinkid-ui-state.ts b/packages/blinkid-ux-manager/src/core/blinkid-ui-state.ts index b502c894..ff8ab803 100644 --- a/packages/blinkid-ux-manager/src/core/blinkid-ui-state.ts +++ b/packages/blinkid-ux-manager/src/core/blinkid-ui-state.ts @@ -755,6 +755,16 @@ export function getUiStateKey( () => "PROCESSING_BARCODE", ) + // Explicit non-terminal status: core is collecting more stable input + // images (video) before extraction. Keep the active scan running without + // surfacing a new UI state. + .with( + { + processingStatus: "awaiting-more-stable-input-images", + }, + () => undefined, + ) + // fallback .otherwise(() => { // most likely stability test failing which should be a no-op diff --git a/packages/blinkid-ux-manager/src/core/extractionMode.test.ts b/packages/blinkid-ux-manager/src/core/extractionMode.test.ts index 2287e23e..d2561e6a 100644 --- a/packages/blinkid-ux-manager/src/core/extractionMode.test.ts +++ b/packages/blinkid-ux-manager/src/core/extractionMode.test.ts @@ -93,6 +93,39 @@ describe("getBlinkIdExtractionMode", () => { }, "barcode-only", ], + [ + "document with MRZ", + { + scanningMode: "single", + scanningSettings: { + documentCaptureModule: documentCaptureModule, + mrzModule: { presenceMandatory: true }, + }, + }, + "document-with-mrz", + ], + [ + "document with MRZ", + { + scanningMode: "single", + scanningSettings: { + documentCaptureModule: documentCaptureModule, + mrzModule: { presenceMandatory: false }, + }, + }, + "full-document", + ], + [ + "document with MRZ Automatic", + { + scanningMode: "automatic", + scanningSettings: { + documentCaptureModule: documentCaptureModule, + mrzModule: { presenceMandatory: true }, + }, + }, + "full-document", + ], ] as const)( "returns %s extraction mode", (_label, sessionSettings, expected) => { diff --git a/packages/blinkid-ux-manager/src/core/extractionMode.ts b/packages/blinkid-ux-manager/src/core/extractionMode.ts index 32fb8c59..b3362f0e 100644 --- a/packages/blinkid-ux-manager/src/core/extractionMode.ts +++ b/packages/blinkid-ux-manager/src/core/extractionMode.ts @@ -23,6 +23,7 @@ import type { export type BlinkIdExtractionMode = | "full-document" | "document-with-barcode" + | "document-with-mrz" | "barcode-only"; /** @@ -63,6 +64,7 @@ export function getBlinkIdExtractionMode( scanningSettings?.documentCaptureModule !== null; const barcodeEnabled = barcodeModule !== null; const mrzEnabled = scanningSettings?.mrzModule !== null; + const mrzModule = scanningSettings?.mrzModule; const vizEnabled = scanningSettings?.vizModule !== null; const isSingleSideScan = sessionSettings?.scanningMode === "single"; const mandatoryBarcode = barcodeModule?.presenceMandatory === true; @@ -78,6 +80,15 @@ export function getBlinkIdExtractionMode( return "document-with-barcode"; } + if ( + isSingleSideScan && + documentCaptureEnabled && + mrzEnabled && + mrzModule?.presenceMandatory + ) { + return "document-with-mrz"; + } + if (!documentCaptureEnabled && barcodeEnabled && !mrzEnabled && !vizEnabled) { return "barcode-only"; } diff --git a/packages/blinkid-ux-manager/src/core/test-utils.ts b/packages/blinkid-ux-manager/src/core/test-utils.ts index b146a5a1..7cd73e25 100644 --- a/packages/blinkid-ux-manager/src/core/test-utils.ts +++ b/packages/blinkid-ux-manager/src/core/test-utils.ts @@ -4,11 +4,24 @@ import { Country, + DocumentClassComponent, DocumentClassInfo, DocumentType, Region, } from "@microblink/blinkid-core"; +/** + * Wraps a plain classification value into a document class component, + * deriving `rawValue` in the document-knowledge-DB format (e.g. + * "bosnia-and-herzegovina" -> "BOSNIA AND HERZEGOVINA"). + */ +const toComponent = ( + id: TId | undefined, +): DocumentClassComponent | undefined => + id === undefined + ? undefined + : { id, rawValue: id.toUpperCase().replaceAll("-", " ") }; + export const createDocumentClassInfo = ({ type = undefined, country = undefined, @@ -27,9 +40,9 @@ export const createDocumentClassInfo = ({ isoAlpha3CountryCode?: string; }): DocumentClassInfo => { return { - type, - country, - region, + documentType: toComponent(type), + country: toComponent(country), + region: toComponent(region), countryName, isoNumericCountryCode, isoAlpha2CountryCode, diff --git a/packages/blinkid-ux-manager/src/core/ui-state-utils.ts b/packages/blinkid-ux-manager/src/core/ui-state-utils.ts index d14f9bc4..d955c336 100644 --- a/packages/blinkid-ux-manager/src/core/ui-state-utils.ts +++ b/packages/blinkid-ux-manager/src/core/ui-state-utils.ts @@ -24,11 +24,11 @@ export function extractDocumentClassInfo(processResult: BlinkIdProcessResult) { * @returns Whether the document class is classified. */ export function isDocumentClassified( - documentClassInfo: DocumentClassInfo, -): boolean { + documentClassInfo: DocumentClassInfo | undefined, +): documentClassInfo is DocumentClassInfo { return ( documentClassInfo?.country !== undefined && - documentClassInfo?.type !== undefined + documentClassInfo?.documentType !== undefined ); } @@ -44,7 +44,7 @@ export function getDocumentRotation(processResult: BlinkIdProcessResult) { */ export function isPassport(docClass: DocumentClassInfo | undefined) { - return docClass?.type === "passport"; + return docClass?.documentType?.id === "passport"; } /** * Checks if the document is a passport and has a barcode on the last page (USA or India). @@ -56,7 +56,7 @@ export function isPassport(docClass: DocumentClassInfo | undefined) { export function isPassportWithBarcode(docClass: DocumentClassInfo | undefined) { return ( isPassport(docClass) && - (docClass?.country === "usa" || docClass?.country === "india") + (docClass?.country?.id === "usa" || docClass?.country?.id === "india") ); } /** @@ -71,8 +71,8 @@ export function isPassportWithoutBarcode( ) { return ( isPassport(docClass) && - docClass?.country !== "usa" && - docClass?.country !== "india" + docClass?.country?.id !== "usa" && + docClass?.country?.id !== "india" ); } @@ -80,9 +80,7 @@ export function isPassportWithoutBarcode( * Utility type for document pagination types. */ export type DocumentPagination = - | "passport-no-barcode" - | "passport-with-barcode" - | "other"; + "passport-no-barcode" | "passport-with-barcode" | "other"; /** * Determines the document pagination type based on the document class info. * diff --git a/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.test.ts b/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.test.ts new file mode 100644 index 00000000..e980b207 --- /dev/null +++ b/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.test.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { describe, expect, test } from "vitest"; +import { getTimeoutAlertType } from "./BlinkIdFeedbackUi"; + +describe("getTimeoutAlertType", () => { + test("maps inactivity timeouts to inactivity alerts", () => { + expect(getTimeoutAlertType("inactivity_timeout")).toBe("InactivityTimeout"); + }); + + test("maps scan-step timeouts to step alerts", () => { + expect(getTimeoutAlertType("scan_step_timeout")).toBe("StepTimeout"); + }); + + test("does not map unrelated errors", () => { + expect(getTimeoutAlertType("unsupported_document")).toBeUndefined(); + }); +}); diff --git a/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.tsx b/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.tsx index d7afae25..0ee33f8a 100644 --- a/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.tsx +++ b/packages/blinkid-ux-manager/src/ui/BlinkIdFeedbackUi.tsx @@ -15,6 +15,7 @@ import { Switch, } from "solid-js"; import { createWithSignal } from "solid-zustand"; +import type { BlinkIdProcessingError } from "../core/BlinkIdProcessingError"; import { BlinkIdUiState } from "../core/blinkid-ui-state"; import { LocalizationProvider, @@ -33,6 +34,20 @@ import { ErrorModal } from "./dialogs/ErrorModal"; import { HelpButton, HelpModal } from "./dialogs/HelpModal"; import { OnboardingGuideModal } from "./dialogs/OnboardingGuideModal"; +export const getTimeoutAlertType = ( + errorState: BlinkIdProcessingError | undefined, +): "InactivityTimeout" | "StepTimeout" | undefined => { + if (errorState === "inactivity_timeout") { + return "InactivityTimeout"; + } + + if (errorState === "scan_step_timeout") { + return "StepTimeout"; + } + + return undefined; +}; + /** * The BlinkIdFeedbackUi component. This is the main component that renders the * feedback UI for the BlinkID SDK. It is responsible for rendering the feedback @@ -99,8 +114,10 @@ export const BlinkIdFeedbackUi: Component<{ // TODO: Cover cases where frame processing is paused by 3rd party modal dialogs const shouldShowFeedback = () => !isModalOpen(); - const displayTimeoutModal = () => - Boolean(store.showTimeoutModal) && store.errorState === "timeout"; + const displayedTimeoutAlertType = () => + store.showTimeoutModal ? getTimeoutAlertType(store.errorState) : undefined; + + const displayTimeoutModal = () => displayedTimeoutAlertType() !== undefined; const displayUnsupportedDocumentModal = () => Boolean(store.showUnsupportedDocumentModal) && @@ -158,10 +175,10 @@ export const BlinkIdFeedbackUi: Component<{ const extractionMode = store.blinkIdUxManager.extractionMode; createEffect(() => { - if (displayTimeoutModal()) { - void store.blinkIdUxManager.analytics.logAlertDisplayedEvent( - "StepTimeout", - ); + const alertType = displayedTimeoutAlertType(); + + if (alertType) { + void store.blinkIdUxManager.analytics.logAlertDisplayedEvent(alertType); } }); @@ -193,13 +210,18 @@ export const BlinkIdFeedbackUi: Component<{ dialog_title: t.sdk_aria, }); + const timeoutModalText = () => + isDesktop() + ? t.timeout_modal.details_desktop + : t.timeout_modal.details; + return ( <> diff --git a/packages/blinkid-ux-manager/src/ui/LocalizationContext.test.tsx b/packages/blinkid-ux-manager/src/ui/LocalizationContext.test.tsx new file mode 100644 index 00000000..1c27461e --- /dev/null +++ b/packages/blinkid-ux-manager/src/ui/LocalizationContext.test.tsx @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { afterEach, describe, expect, test } from "vitest"; +import { render } from "solid-js/web"; +import { type Component } from "solid-js"; +import { blinkIdUiStateMap } from "../core/blinkid-ui-state"; + +import en from "./locales/en"; + +import { + LocalizationProvider, + PartialLocalizationStrings, +} from "./LocalizationContext"; +import { UiFeedbackOverlay } from "./UiFeedbackOverlay"; + +const TestFeedbackUi: Component<{ + localization?: PartialLocalizationStrings; +}> = (props) => ( + + + + +); + +describe("LocalizationProvider", () => { + let cleanup: (() => void) | undefined; + + afterEach(() => { + cleanup?.(); + cleanup = undefined; + document.body.replaceChildren(); + }); + + test("preserves default nested feedback messages when one string is overridden", () => { + cleanup = render( + () => ( + + ), + document.body, + ); + + expect(document.body.textContent).toContain( + "Custom front side instruction", + ); + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); + + test("preserves default nested feedback messages when nothing is overridden", () => { + cleanup = render(() => , document.body); + + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); + + test("preserves default nested feedback messages when undefined is provided", () => { + cleanup = render(() => , document.body); + + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); +}); diff --git a/packages/blinkid-ux-manager/src/ui/LocalizationContext.tsx b/packages/blinkid-ux-manager/src/ui/LocalizationContext.tsx index 6fec0adc..bbc7ee09 100644 --- a/packages/blinkid-ux-manager/src/ui/LocalizationContext.tsx +++ b/packages/blinkid-ux-manager/src/ui/LocalizationContext.tsx @@ -11,6 +11,7 @@ import { import { SetStoreFunction, createStore } from "solid-js/store"; import enLocaleStrings from "./locales/en"; +import { merge } from "merge-anything"; /** * The locale record type. @@ -22,11 +23,10 @@ export type LocaleRecord = typeof enLocaleStrings; */ export type LocalizedValue = T extends Record - ? - | { - [K in keyof T]: LocalizedValue; - } - | (string & Record) + ? | { + [K in keyof T]: LocalizedValue; + } + | (string & Record) : T | (string & Record); /** @@ -70,13 +70,8 @@ export const LocalizationProvider: ParentComponent<{ userStrings?: PartialLocalizationStrings; }> = (props) => { const mergedStrings = (): LocalizationStrings => - ({ - ...enLocaleStrings, - ...props.userStrings, - }) as LocalizationStrings; + merge(enLocaleStrings, props.userStrings ?? {}) as LocalizationStrings; - // avoid initing with original as proxying to the original object will - // mutate the original object on store updates const [localizationStore, updateLocalizationStore] = createStore(mergedStrings()); diff --git a/packages/blinkid-ux-manager/src/ui/assets/help/help_document_with_mrz_visible.svg b/packages/blinkid-ux-manager/src/ui/assets/help/help_document_with_mrz_visible.svg new file mode 100644 index 00000000..f86607c9 --- /dev/null +++ b/packages/blinkid-ux-manager/src/ui/assets/help/help_document_with_mrz_visible.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/blinkid-ux-manager/src/ui/assets/onboarding/document_with_mrz.svg b/packages/blinkid-ux-manager/src/ui/assets/onboarding/document_with_mrz.svg new file mode 100644 index 00000000..6c48a81e --- /dev/null +++ b/packages/blinkid-ux-manager/src/ui/assets/onboarding/document_with_mrz.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/blinkid-ux-manager/src/ui/assets/onboarding/document_with_mrz_desktop.svg b/packages/blinkid-ux-manager/src/ui/assets/onboarding/document_with_mrz_desktop.svg new file mode 100644 index 00000000..a57a6b95 --- /dev/null +++ b/packages/blinkid-ux-manager/src/ui/assets/onboarding/document_with_mrz_desktop.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/blinkid-ux-manager/src/ui/dialogs/HelpModal.tsx b/packages/blinkid-ux-manager/src/ui/dialogs/HelpModal.tsx index 3198f8ae..e93a9982 100644 --- a/packages/blinkid-ux-manager/src/ui/dialogs/HelpModal.tsx +++ b/packages/blinkid-ux-manager/src/ui/dialogs/HelpModal.tsx @@ -20,6 +20,8 @@ import { Tooltip } from "@ark-ui/solid"; import HelpBarcodeOnlyBlur from "../assets/help/help_barcode_only_blur.svg?component-solid"; import HelpBarcodeOnlyLighting from "../assets/help/help_barcode_only_lighting.svg?component-solid"; import HelpBarcodeOnlyVisible from "../assets/help/help_barcode_only_occlusion.svg?component-solid"; +import HelpDocumentWithMrzVisible from "../assets/help/help_document_with_mrz_visible.svg?component-solid"; +import HelpDocumentWithMrzLocate from "../assets/help/help_document_with_mrz_locate.svg?component-solid"; import HelpCameraLens from "../assets/help/help_camera_lens.svg?component-solid"; import HelpBlur from "../assets/help/help_blur.svg?component-solid"; import HelpDocumentCaptureBarcodeFieldsVisible from "../assets/help/help_document_with_barcode_fields_visible.svg?component-solid"; @@ -79,6 +81,14 @@ export const helpModalContentByExtractionMode = { { localeKey: "blur", image: HelpBarcodeOnlyBlur }, ], }, + "document-with-mrz": { + localeGroup: "document_with_mrz", + scanSteps: [ + { localeKey: "visibility", image: HelpDocumentWithMrzVisible }, + { localeKey: "lighting", image: HelpLighting }, + { localeKey: "blur", image: HelpBlur }, + ], + }, } as const satisfies Record; /** diff --git a/packages/blinkid-ux-manager/src/ui/dialogs/OnboardingGuideModal.tsx b/packages/blinkid-ux-manager/src/ui/dialogs/OnboardingGuideModal.tsx index 1d897b4f..fa903eac 100644 --- a/packages/blinkid-ux-manager/src/ui/dialogs/OnboardingGuideModal.tsx +++ b/packages/blinkid-ux-manager/src/ui/dialogs/OnboardingGuideModal.tsx @@ -12,6 +12,8 @@ import CorrectFraming from "../assets/onboarding/correct_framing.svg?component-s import CorrectFramingDesktop from "../assets/onboarding/correct_framing_desktop.svg?component-solid"; import DocumentWithBarcode from "../assets/onboarding/document_with_barcode.svg?component-solid"; import DocumentWithBarcodeDesktop from "../assets/onboarding/document_with_barcode_desktop.svg?component-solid"; +import DocumentWithMrz from "../assets/onboarding/document_with_mrz.svg?component-solid"; +import DocumentWithMrzDesktop from "../assets/onboarding/document_with_mrz_desktop.svg?component-solid"; import { Dialog } from "@ark-ui/solid"; import { Dynamic } from "solid-js/web"; @@ -54,6 +56,13 @@ export const onboardingModalContentByExtractionMode = { desktop: BarcodeOnlyDesktop, }, }, + "document-with-mrz": { + localeGroup: "document_with_mrz", + images: { + mobile: DocumentWithMrz, + desktop: DocumentWithMrzDesktop, + }, + }, } as const satisfies Record; /** diff --git a/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.test.ts b/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.test.ts index fd04b700..b7fb94fd 100644 --- a/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.test.ts +++ b/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.test.ts @@ -18,6 +18,7 @@ describe("modal extraction mode content", () => { "full-document": "full_document", "document-with-barcode": "document_with_barcode", "barcode-only": "barcode_only", + "document-with-mrz": "document_with_mrz", }); }); @@ -32,6 +33,7 @@ describe("modal extraction mode content", () => { "full-document": "full_document", "document-with-barcode": "document_with_barcode", "barcode-only": "barcode_only", + "document-with-mrz": "document_with_mrz", }); }); diff --git a/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.ts b/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.ts index cd1e399b..e92e9581 100644 --- a/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.ts +++ b/packages/blinkid-ux-manager/src/ui/dialogs/modalExtractionMode.ts @@ -9,4 +9,5 @@ export type BlinkIdModalExtractionMode = BlinkIdExtractionMode; export type BlinkIdModalLocaleGroup = | "full_document" | "document_with_barcode" + | "document_with_mrz" | "barcode_only"; diff --git a/packages/blinkid-ux-manager/src/ui/feedbackMessages.ts b/packages/blinkid-ux-manager/src/ui/feedbackMessages.ts index 91d3ef99..91fc3700 100644 --- a/packages/blinkid-ux-manager/src/ui/feedbackMessages.ts +++ b/packages/blinkid-ux-manager/src/ui/feedbackMessages.ts @@ -2,6 +2,7 @@ * Copyright (c) 2026 Microblink Ltd. All rights reserved. */ +import { match } from "ts-pattern"; import { BlinkIdUiStateKey } from "../core/blinkid-ui-state"; import type { BlinkIdExtractionMode } from "../core/extractionMode"; import { LocalizationStrings } from "./LocalizationContext"; @@ -21,9 +22,13 @@ export const feedbackMessages: Partial< // intro states INTRO_DATA_PAGE: () => "scan_data_page", INTRO_FRONT_PAGE: (_, blinkIdExtractionMode) => - blinkIdExtractionMode === "document-with-barcode" - ? "scan_the_barcode_side" - : "scan_the_front_side", + match< + BlinkIdExtractionMode | undefined, + keyof LocalizationStrings["feedback_messages"] + >(blinkIdExtractionMode) + .with("document-with-barcode", () => "scan_the_barcode_side") + .with("document-with-mrz", () => "scan_the_mrz_side") + .otherwise(() => "scan_the_front_side"), INTRO_BACK_PAGE: () => "scan_the_back_side", INTRO_TOP_PAGE: () => "scan_top_page", INTRO_LEFT_PAGE: () => "scan_left_page", @@ -45,7 +50,7 @@ export const feedbackMessages: Partial< WRONG_LAST_PAGE: () => "scan_last_page_barcode", // occlusion BLUR_DETECTED: (isDesktop?: boolean) => - isDesktop ? "keep_document_still" : "blur_detected", + isDesktop ? "keep_still" : "blur_detected", GLARE_DETECTED: () => "glare_detected", OCCLUDED: () => "occluded", // image @@ -58,9 +63,13 @@ export const feedbackMessages: Partial< isDesktop ? "keep_document_parallel" : "camera_angle_too_steep", // no document FRONT_PAGE_NOT_IN_FRAME: (_, blinkIdExtractionMode) => - blinkIdExtractionMode === "document-with-barcode" - ? "scan_the_barcode_side" - : "scan_the_front_side", + match< + BlinkIdExtractionMode | undefined, + keyof LocalizationStrings["feedback_messages"] + >(blinkIdExtractionMode) + .with("document-with-barcode", () => "scan_the_barcode_side") + .with("document-with-mrz", () => "scan_the_mrz_side") + .otherwise(() => "scan_the_front_side"), BACK_PAGE_NOT_IN_FRAME: () => "scan_the_back_side", DATA_PAGE_NOT_IN_FRAME: () => "scan_data_page", TOP_PAGE_NOT_IN_FRAME: () => "scan_top_page", diff --git a/packages/blinkid-ux-manager/src/ui/locales/ak.ts b/packages/blinkid-ux-manager/src/ui/locales/ak.ts index 7b2f5e1f..432aaa39 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ak.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ak.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Ayɛ yie! Wɔaskaane anim", glare_detected: "Woso anaa dane krataa no na fa yi ne sunsuma no", keep_document_parallel: "Ma nhoma no ani nkyerɛ skriin no tee", - keep_document_still: "Ma krataa ne afiri no nna faako", keep_still: "Nkeka wo ho", move_closer: "Bɛn ho", move_farther: "Kɔ akyirikyiri", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skane barkoodu no", scan_the_barcode_side: "Skane barkodu afa hɔ wɔ krataa no so", scan_the_front_side: "Skane krataa no anim", + scan_the_mrz_side: "Skane krataa no nkyɛn a ɛwɔ MRZ no", scan_top_page: "Skane soro", too_bright: "Dane kɔ baabi a hann nni hɔ papa", too_dark: "Dane kɔ baabi a ɛhyerɛn", @@ -115,6 +115,37 @@ export default { title_desktop: "Hwɛ sɛ wobehu barkodu no yiye", }, }, + document_with_mrz: { + blur: { + details: + "Bɔ mmɔden sɛ worenwoso krataa no ne fon no abere a woreskane. Sɛ wo wosow emu biara a ebetumi ama mfonini no ayɛ kusuu na ama no ayɛ den sɛ wobɛkenkan krataa no.", + details_desktop: + "Bɔ mmɔden sɛ worenkeka wo ho bere a wo skane no. Sɛ wokeka wo ho a ebetumi ama mfonini no ani ayɛ kusuu na ɛbɛyɛ den sɛ wobetumi akan krataa no.", + title: "Gyina faako abere a woreskanee no", + title_desktop: "Gyina faako abere a woreskanee no", + }, + camera_lens: { + details_desktop: + "Hwɛ sɛ nkekae anaa mfuturu nni wo lɛns no so. Lɛns a ani ayɛ fi ma mfonini no anim nna hɔ, ɛyɛ den sɛ wɔbɛkenkan nhoma no so nkyerɛw na ɛmma wontumi nskane nsɛm a ɛwɔ so yiye.", + title_desktop: "Popa wo kamɛra lɛns", + }, + lighting: { + details: + "Kwati kanea a ano yɛ den a ɛhwɛ so tẽẽ efisɛ ɛtɔ krataa bi so na ebetumi ama krataa no afã horow bi ayɛ den sɛ wobɛkenkan. Sɛ wuntumi nkenkan nsɛm a ɛwɔ krataa no so a, saa ara na wontumi nhu no yiye wɔ kamara so nso.", + details_desktop: + "Kwati kanea a ano yɛ den a ɛhwɛ so tẽẽ efisɛ ɛtɔ krataa bi so na ebetumi ama krataa no afã horow bi ayɛ den sɛ wobɛkenkan. Sɛ wuntumi nkenkan nsɛm a ɛwɔ krataa no so a, saa ara na wontumi nhu no yiye wɔ kamara so nso.", + title: "Hwɛ hann a ano yɛ den kwan", + title_desktop: "Hwɛ hann a ano yɛ den kwan", + }, + visibility: { + details: + "Hwɛ sɛ womfa wo nsateaa nkata MRZ no afã horow so. Afei nso, hwɛ sɛ wobehu sunsuma a ɛnam MRZ no so na ɛma wontumi nkenkan.", + details_desktop: + "Hwɛ sɛ womfa wo nsateaa nkata MRZ no afã horow so. Afei nso, hwɛ sɛ wobehu sunsuma a ɛnam MRZ no so na ɛma wontumi nkenkan.", + title: "Ma wonhu MRZ no", + title_desktop: "Ma wonhu MRZ no", + }, + }, done_btn: "Awiei", done_btn_aria: "Toa skaane no so", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Fi ase skaane", document_with_barcode: { details: - "IDs ahorow bɛwɔ barkodu ahorow ne baabi a ɛwɔ. Hwɛ ID no anim ne akyi sɛ wobehu barkodu a.", + "Ebia nkrataa ahorow betumi awɔ baakoodu fɔmat ne mmeae ahorow. Hwɛ krataa no anim ne akyi sɛ wobehu baakoodu a.", details_desktop: - "Hwɛ ID no anim ne akyi sɛ wobehu barkodu no anaa. Hwɛ sɛ fi biara nni wo kamara no ani na wotumi hu krataa no yiye.", - title: "Hwehwɛ barkodu no wɔ ID no so", + "Hwɛ krataa no anim ne akyi sɛ wobehu baakoodu a. Hwɛ hu sɛ nkekae biara nni wo kamara no anim na wotumi hu krataa no yiye.", + title: "Hwehwɛ baakoodu wɔ krataa no so", title_desktop: "Pepa wo lɛns no anim na hwehwɛ barkodu", }, + document_with_mrz: { + details: + "Wubehu nkyerɛwde atenten bi wɔ krataa no ase wɔ n’anim anaa n’akyi, a wɔakyekyɛ mu ayɛ no nkyerɛwde 2 anaa 3 na wɔde aro (<< anaa >>) atew ntam.", + details_desktop: + "Hwɛ krataa no anim ne akyi sɛ wobehu MRZ anaa. Hwehwɛ nkyerɛwde ne aro agyiraehyɛde (<<) nkyerɛwde 2–3 wɔ krataa no ase. Hwɛ hu sɛ wobɛma wo kamara no anim ayɛ nea efi biara nnim na krataa no nso nkekae biara.", + title: "Hwehwɛ MRZ wɔ krataa no so", + title_desktop: "Pepa w’ahwehwɛ no anim na hwehwɛ MRZ", + }, full_document: { details: "Hwɛ hu sɛ wobɛma han atɔ krataa no so yiye. Ɛsɛ sɛ wohu krataa a no afa nyinaa wɔ kamara no skreen so.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Skriin a wɔde skaane nhoma", timeout_modal: { - details: "Wontumi nkan krataa no. Yɛsrɛw san yɛ bio.", - title: "Skane no ankɔ yiye", + details: + "Hwɛ hu sɛ nkekae biara nni krataa no so, wotumi hu no yiye, na asum biara nni so.", + details_desktop: + "Hwɛ hu sɛ nkekae biara nni wo kamara no anim na wotumi hu krataa no yiye, emu da hɔ, na esum biara nni so.", + title: "Wontumi nkenkan krataa no", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/am.ts b/packages/blinkid-ux-manager/src/ui/locales/am.ts index adf6f8a7..c38e524b 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/am.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/am.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "ተሳክቷል! የፊት ጎኑ ተቃኝቷል", glare_detected: "ነጸብራቅን ለማስወገድ ሰነድ ያዘንብሉት ወይም ያስወግዱት", keep_document_parallel: "ሰነዱን ከመሳሪያው ጋር ትይዩ ይያዙት", - keep_document_still: "ሰነድ እና መሳርያው ጸንተው ይያዙ", keep_still: "ቀጥ አድርገው ይያዙ", move_closer: "ይቅረቡ", move_farther: "ራቅ ብለው ይሂዱ", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "ባርኮዱን ይቃኙ", scan_the_barcode_side: "የሰነዱ የባር ኮድ ገፅን ይቃኙ", scan_the_front_side: "የሰነዱ የፊት ገፅን ይቃኙ", + scan_the_mrz_side: "የሰነዱ የMRZ ገፅን ይቃኙ", scan_top_page: "የላይኛውን ገጽ ይቃኙ", too_bright: "አነስ ያለ ብርሃን ወዳለው ቦታ ይንቀሳቀሱ", too_dark: "ብሩህ ወደሆነ ቦታ ይንቀሳቀሱ", @@ -115,6 +115,37 @@ export default { title_desktop: "ባር ኮዱ ሙሉ በሙሉ እንዲታይ ያድርጉ", }, }, + document_with_mrz: { + blur: { + details: + "በሚቃኙበት ጊዜ ስልኩን እና ሰነዱን ጸንተው ይዘው ለማቆየት ይሞክሩ። አንዱን ማንቀሳቀስ ምስሉን ሊያደበዝዝ እና በሰነዱ ላይ ያለውን ውሂብ የማይነበብ እንዲሆን ያደርገዋል።", + details_desktop: + "በሚቃኙበት ጊዜ ጸንተው ይዘው ለማቆየት ይሞክሩ። አንዱን ማንቀሳቀስ ምስሉን ሊያደበዝዝ እና በሰነዱ ላይ ያለውን ውሂብ የማይነበብ እንዲሆን ያደርገዋል።", + title: "በሚቃኙበት ጊዜ ሳይንቀሳቀሱ ይቆዩ", + title_desktop: "በሚቃኙበት ጊዜ ሳይንቀሳቀሱ ይቆዩ", + }, + camera_lens: { + details_desktop: + "የካሜራዎ ሌንሶች ቆሻሻ ወይም አቧራ መኖሩን ይፈትሹ። የቆሸሹ ሌንሶች የመጨረሻው ምስል እንዲደበዝዝ ያደርጋሉ፣ ይህም የሰነዱ ዝርዝሮች እንዳይነበቡ በማድረግ የተሳካ የውሂቡን ቅኝት ይከላከላል።", + title_desktop: "የካሜራዎን ሌንሶች ያጽዱ", + }, + lighting: { + details: + "ሰነዱ ላይ ስለሚያንፀባርቅ እና የሰነዱን ክፍሎች እንዳይነበብ ስለሚያደርግ ቀጥተኛ ኃይለኛ ብርሃንን ያስወግዱ፣ በሰነዱ ላይ ያለውን ውሂብ ማንበብ ካልቻሉ ለካሜራም የሚታይ አይሆንም።", + details_desktop: + "ሰነዱ ላይ ስለሚያንፀባርቅ እና የሰነዱን ክፍሎች እንዳይነበብ ስለሚያደርግ ቀጥተኛ ኃይለኛ ብርሃንን ያስወግዱ፣ በሰነዱ ላይ ያለውን ውሂብ ማንበብ ካልቻሉ ለካሜራም የሚታይ አይሆንም።", + title: "ከአደገኛ ብርሃን ይጠንቀቁ", + title_desktop: "ከአደገኛ ብርሃን ይጠንቀቁ", + }, + visibility: { + details: + "MRZን በጣትዎ አለመሸፈንዎን ያረጋግጡ። እንዲሁም በMRZ ላይ የሚያርፉና ለማንበብ አስቸጋሪ ሊያደርጉ የሚችሉ የብርሃን ነጸብራቆችን ያስወግዱ።", + details_desktop: + "MRZን በጣትዎ አለመሸፈንዎን ያረጋግጡ። እንዲሁም በMRZ ላይ የሚያርፉና ለማንበብ አስቸጋሪ ሊያደርጉ የሚችሉ የብርሃን ነጸብራቆችን ያስወግዱ።", + title: "MRZ ሙሉ በሙሉ እንዲታይ ያድርጉ", + title_desktop: "MRZ ሙሉ በሙሉ እንዲታይ ያድርጉ", + }, + }, done_btn: "ተከናውኗል", done_btn_aria: "መቃኘት ቀጥል", full_document: { @@ -163,12 +194,20 @@ export default { btn: "መቃኘት ጀምር", document_with_barcode: { details: - "የተለያዩ የመታወቂያ አይነቶች የተለያየ የባርኮድ ቅርጽና መገኛ ቦታ ሊኖራቸው ይችላል። ባርኮድ መኖሩን ለማረጋገጥ የመታወቂያውን የፊትና የጀርባ ገጽ ይመልከቱ።", + "የተለያዩ የሰነድ አይነቶች የተለያየ የባርኮድ ቅርጽና መገኛ ቦታ ሊኖራቸው ይችላል። ባርኮድ መኖሩን ለማረጋገጥ የሰነዱን የፊትና የጀርባ ገጽ ይመልከቱ።", details_desktop: - "ባርኮድን በመታወቂያው ፊት እና ጀርባ ይፈልጉ። የካሜራ ሌንስዎ ንጹህ መሆኑን እና ባርኮዱ በደንብ ብርሃን እንደሚያገኝ ያረጋግጡ።", - title: "ባርኮዱን በመታወቂያው ላይ ይፈልጉ", + "ባርኮድን በሰነዱ ፊት እና ጀርባ ይፈልጉ። የካሜራ ሌንስዎ ንጹህ መሆኑን እና ሰነዱ በደንብ ብርሃን እንደሚያገኝ ያረጋግጡ።", + title: "የሰነዱ የባርኮድ ገፅን ያግኙ", title_desktop: "ሌንሱን ያጽዱ እና ባርኮዱን ይፈልጉ", }, + document_with_mrz: { + details: + "በሰነዱ ፊት ወይም ጀርባ የታችኛው ክፍል ላይ፣ በ2 ወይም 3 መስመሮች የተከፈለና በቀስቶች (<< ወይም >>) የተለያየ ረጅም የቁምፊዎች ተርታ ያገኛሉ።", + details_desktop: + "MRZን በሰነዱ ፊት እና ጀርባ ይፈልጉ። በሰነዱ ታችኛው ክፍል 2–3 የቁምፊ መስመሮች እና የቀስት ምልክቶች (<<) ይፈልጉ። የካሜራ ሌንስዎ ንጹህ እና ሰነዱ በደንብ ብርሃን እንደሚያገኝ ያረጋግጡ።", + title: "የሰነዱ የMRZ ገፅን ያግኙ", + title_desktop: "ሌንሱን ያጽዱ እና MRZን ይፈልጉ", + }, full_document: { details: "ሰነዱ በቂ ብርሃን ማግኘቱን ያረጋግጡ። ሁሉም የሰነድ መስኮች በካሜራ ማያ ገጽ ላይ መታየት አለባቸው።", @@ -180,7 +219,9 @@ export default { }, sdk_aria: "የሰነድ ቅኝት ማያ ገጽ", timeout_modal: { - details: "ሰነዱን ማንበብ አልተቻለም እባክዎ እንደገና ይሞክሩ።", - title: "መቃኘት አልተሳካም", + details: "የሰነዱ ቦታ በቂ ብርሃን እንደሚያገኝ፣ በደንብ እንደሚታይና ነጸብራቅ እንደሌለበት ያረጋግጡ።", + details_desktop: + "የካሜራ ሌንስዎ ንጹህ መሆኑን፣ ሰነዱ ሙሉ በሙሉ የሚታይ፣ ትኩረት ያለው እና በደንብ ብርሃን እንደሚያገኝ ያረጋግጡ።", + title: "ሰነዱን ማንበብ አልተቻለም", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ar.ts b/packages/blinkid-ux-manager/src/ui/locales/ar.ts index 81b8a5a5..3227d857 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ar.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ar.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "نجحت العملية! تم مسح الجانب الأمامي ضوئياً", glare_detected: "أمِل المستند أو حرّكه لتتخلص من الانعكاس", keep_document_parallel: "الرجاء الحفاظ على المستند موازياً للشاشة", - keep_document_still: "الرجاء الحفاظ على ثبات المستند والجهاز", keep_still: "اثبت", move_closer: "انقل إلى موضع أقرب", move_farther: "انقل إلى موضع أبعد", @@ -42,6 +41,8 @@ export default { scan_the_barcode: "امسح الرمز الشريطي", scan_the_barcode_side: "امسح جانب الباركود للمستند", scan_the_front_side: "مسح وجه\\nمستند", + scan_the_mrz_side: + "امسح الجانب الذي يحتوي على منطقة القراءة الآلية (MRZ) من المستند ضوئيًا", scan_top_page: "مسح الصفحة العليا ضوئياً", too_bright: "انتقل إلى مكان ذي إضاءة أقل", too_dark: "انتقل إلى مكان ذي إضاءة أعلى", @@ -115,6 +116,37 @@ export default { title_desktop: "احرص على ظهور الباركود", }, }, + document_with_mrz: { + blur: { + details: + "حاول الحفاظ على ثبات الهاتف والمستند أثناء المسح. يمكن أن يؤدي تحريك أي منهما إلى تعتيم الصورة وجعل البيانات الموجودة في المستند غير مقروءة.", + details_desktop: + "حاول أن تبقى ثابتاً في المسح. الحركة قد تُسبب تشويش الصورة وتجعل البيانات الموجودة في المستند غير قابلة للقراءة.", + title: "حافظ على الثبات أثناء إجراء المسح", + title_desktop: "حافظ على الثبات أثناء إجراء المسح", + }, + camera_lens: { + details_desktop: + "يجب الحرص على خلو عدسة الكاميرا من البقع أو الغبار. العدسة المتسخة تتسبب في تشويش الصورة النهائية، وهذا يجعل تفاصيل المستند غير قابلة للقراءة ويمنع مسح البيانات بنجاح.", + title_desktop: "يرجى تنظيف عدسة الكاميرا", + }, + lighting: { + details: + "تجنب التعرض المباشر للإضاءة الساطعة لأنها تنعكس على المستند ويمكن أن تجعل أجزاء من المستند غير مقروءة. في حالة لم تتمكن من قراءة البيانات الموجودة في المستند، فلن تكون واضحة للكاميرا أيضاً.", + details_desktop: + "تجنب التعرض المباشر للإضاءة الساطعة لأنها تنعكس على المستند ويمكن أن تجعل أجزاء من المستند غير مقروءة. في حالة لم تتمكن من قراءة البيانات الموجودة في المستند، فلن تكون واضحة للكاميرا أيضاً.", + title: "احترس من الإضاءة الساطعة", + title_desktop: "احترس من الإضاءة الساطعة", + }, + visibility: { + details: + "تأكد من عدم تغطية أجزاء من منطقة القراءة الآلية (MRZ) بإصبعك. كما يجب الانتباه إلى الانعكاسات التي تقع فوق منطقة القراءة الآلية (MRZ) والتي قد تجعلها غير قابلة للقراءة.", + details_desktop: + "تأكد من عدم تغطية أجزاء من منطقة القراءة الآلية (MRZ) بإصبعك. كما يجب الانتباه إلى الانعكاسات التي تقع فوق منطقة القراءة الآلية (MRZ) والتي قد تجعلها غير قابلة للقراءة.", + title: "يجب أن تظل منطقة القراءة الآلية (MRZ) مرئية", + title_desktop: "يجب أن تظل منطقة القراءة الآلية (MRZ) مرئية", + }, + }, done_btn: "انتهى", done_btn_aria: "استئناف المسح الضوئي", full_document: { @@ -163,12 +195,20 @@ export default { btn: "بدء المسح", document_with_barcode: { details: - "قد تتنوع صيغ الباركود ومواضعه على الهويات المختلفة. تحقق من الجهة الأمامية والخلفية للهوية للعثور على الباركود.", + "قد تحتوي أنواع المستندات المختلفة على صيغ وأماكن مختلفة للرموز الشريطية. ابحث عن الرمز الشريطي في وجه المستند وظهره.", details_desktop: - "تحقق من الجهة الأمامية والخلفية لبطاقة الهوية بحثاً عن الباركود. احرص على إبقاء عدسة الكاميرا نظيفة وإضاءة المستند جيداً.", - title: "حدد موضع الباركود على الهوية", + "تحقق من وجود رمز شريطي على وجه المستند وظهره. تأكد من نظافة عدسة الكاميرا ومن وجود إضاءة كافية على المستند.", + title: "حدد مكان الرمز الشريطي على المستند", title_desktop: "نظف العدسة وحدد موضع الباركود", }, + document_with_mrz: { + details: + "ستجد سلسلة طويلة من الأحرف في أسفل الصفحة الأمامية أو الخلفية للمستند، مقسمة إلى سطرين أو 3 أسطر ومفصولة بأسهم (<< أو >>).", + details_desktop: + "تحقق من وجود منطقة القراءة الآلية (MRZ) في وجهي المستند الأمامي والخلفي. ابحث عن سطرين أو 3 أسطر من الأحرف ورموز الأسهم (<<) في أسفل المستند. تأكد من نظافة عدسة الكاميرا ومن وجود إضاءة كافية على المستند.", + title: "حدد مكان منطقة القراءة الآلية (MRZ) في المستند", + title_desktop: "نظف العدسة وحدد مكان منطقة القراءة الآلية (MRZ)", + }, full_document: { details: "تأكد من إبقاء المستند مضاءً بشكل جيد. كما يجب أن تكون جميع خانات المستندات واضحة على شاشة الكاميرا.", @@ -180,7 +220,10 @@ export default { }, sdk_aria: "شاشة مسح المستندات", timeout_modal: { - details: "غير قادر على قراءة المستند. يُرجى المحاولة مرة أخرى.", - title: "تمت عملية المسح بنجاح", + details: + "تأكد من أن المستند مضاء جيدًا ومرئي بالكامل وخالٍ من الانعكاسات الضوئية.", + details_desktop: + "تأكد من أن عدسة الكاميرا نظيفة وأن المستند مرئي بالكامل ومُركَّز عليه ومضاء جيدًا.", + title: "تتعذر قراءة المستند", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/bn.ts b/packages/blinkid-ux-manager/src/ui/locales/bn.ts index e19b41da..f19d7cf6 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/bn.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/bn.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "সফল! সামনের দিকটি স্ক্যান হয়েছে", glare_detected: "প্রতিফলন দূর করতে ডকুমেন্টটি বাঁকান বা সরান", keep_document_parallel: "ডকুমেন্টটি স্ক্রীনের সাথে সমান্তরাল রাখুন", - keep_document_still: "ডকুমেন্ট এবং ডিভাইস স্থির রাখুন", keep_still: "স্থির হয়ে থাকুন", move_closer: "আরও কাছে যান", move_farther: "আরও দূরে যান", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "বারকোড স্ক্যান করুন", scan_the_barcode_side: "একটি নথির বারকোড থাকা দিকটি স্ক্যান করুন", scan_the_front_side: "ডকুমেন্টের সামনের দিক স্ক্যান করুন", + scan_the_mrz_side: "নথির MRZ-যুক্ত অংশটি স্ক্যান করুন", scan_top_page: "উপরের পৃষ্ঠা স্ক্যান করুন", too_bright: "কম আলোযুক্ত স্থানে যান", too_dark: "উজ্জ্বল স্থানে যান", @@ -115,6 +115,37 @@ export default { title_desktop: "বারকোডটি দৃশ্যমান রাখুন", }, }, + document_with_mrz: { + blur: { + details: + "স্ক্যান করার সময় ফোন এবং ডকুমেন্ট উভয়ই স্থির রাখার চেষ্টা করুন। যেকোনো একটি নাড়াচাড়া করলে ছবি ঝাপসা হয়ে যাবে এবং ডকুমেন্টের তথ্য অপঠনীয় হয়ে যাবে।", + details_desktop: + "স্ক্যান করার সময় স্থির থাকার চেষ্টা করুন। নড়াচড়া করলে ছবিটি ঝাপসা হয়ে যেতে পারে এবং নথিতে থাকা তথ্য অপঠনযোগ্য হয়ে পড়তে পারে।", + title: "স্ক্যান করার সময় স্থির থাকুন", + title_desktop: "স্ক্যান করার সময় স্থির থাকুন", + }, + camera_lens: { + details_desktop: + "আপনার ক্যামেরার লেন্সে ময়লা বা দাগ আছে কিনা পরীক্ষা করুন। লেন্স নোংরা হলে ছবিটি ঝাপসা হয়ে যায়, ফলে ডকুমেন্টের তথ্য পড়া যায় না এবং ডেটা সফলভাবে স্ক্যান করা সম্ভব হয় না।", + title_desktop: "আপনার ক্যামেরার লেন্স পরিষ্কার করুন", + }, + lighting: { + details: + "সরাসরি তীব্র আলো এড়িয়ে চলুন, কারণ এটি ডকুমেন্ট থেকে প্রতিফলিত হয়ে ডকুমেন্টের কিছু অংশ অপঠনীয় করে তুলতে পারে। যদি আপনি ডকুমেন্টের তথ্যগুলো পড়তে না পারেন, তাহলে ক্যামেরাও সেগুলো ধরতে পারবে না।", + details_desktop: + "সরাসরি তীব্র আলো এড়িয়ে চলুন, কারণ এটি ডকুমেন্ট থেকে প্রতিফলিত হয়ে ডকুমেন্টের কিছু অংশ অপঠনীয় করে তুলতে পারে। যদি আপনি ডকুমেন্টের তথ্যগুলো পড়তে না পারেন, তাহলে ক্যামেরাও সেগুলো ধরতে পারবে না।", + title: "তীব্র আলো এড়িয়ে চলুন", + title_desktop: "তীব্র আলো এড়িয়ে চলুন", + }, + visibility: { + details: + "নিশ্চিত করুন যে আপনি আঙুল দিয়ে MRZ-এর কোনো অংশ ঢেকে রাখছেন না। এছাড়া, MRZ-এর ওপর আলোর প্রতিফলন যেন না পড়ে সেদিকেও খেয়াল রাখবেন, কারণ এর ফলে এটি পড়া অসম্ভব হয়ে পড়তে পারে।", + details_desktop: + "নিশ্চিত করুন যে আপনি আঙুল দিয়ে MRZ-এর কোনো অংশ ঢেকে রাখছেন না। এছাড়া, MRZ-এর ওপর আলোর প্রতিফলন যেন না পড়ে সেদিকেও খেয়াল রাখবেন, কারণ এর ফলে এটি পড়া অসম্ভব হয়ে পড়তে পারে।", + title: "MRZ দৃশ্যমান রাখুন", + title_desktop: "MRZ দৃশ্যমান রাখুন", + }, + }, done_btn: "সম্পন্ন", done_btn_aria: "স্ক্যানিং পুনরায় শুরু করুন", full_document: { @@ -163,12 +194,20 @@ export default { btn: "স্ক্যান শুরু করুন", document_with_barcode: { details: - "বিভিন্ন ধরণের আইডিতে ভিন্ন বারকোডের ফরম্যাট ও অবস্থান থাকতে পারে। বারকোডটি খুঁজে পেতে আইডির সামনের ও পেছনের দিকটি দেখুন।", + "বিভিন্ন ধরণের নথিপত্রে বারকোডের বিন্যাস ও অবস্থান ভিন্ন হতে পারে। বারকোডটি খুঁজে পেতে নথিপত্রটির সামনের ও পেছনের অংশ দেখুন।", details_desktop: - "আইডির সামনের ও পেছনের অংশে বারকোড আছে কি না, তা পরীক্ষা করুন। নিশ্চিত করুন যেন আপনার ক্যামেরার লেন্সটি পরিষ্কার থাকে এবং নথিপত্রটি পর্যাপ্ত আলোতে থাকে।", - title: "আইডিতে বারকোডটি খুঁজুন", + "নথির সামনের ও পেছনের অংশে বারকোড আছে কিনা, তা পরীক্ষা করুন। খেয়াল রাখবেন যেন আপনার ক্যামেরার লেন্স পরিষ্কার থাকে এবং নথিতে পর্যাপ্ত আলো পড়ে।", + title: "নথিতে বারকোডটি খুঁজে বের করুন", title_desktop: "আপনার লেন্সটি পরিষ্কার করুন এবং বারকোডটি খুঁজে বের করুন", }, + document_with_mrz: { + details: + "নথির সামনের বা পেছনের অংশের নিচের দিকে আপনি অক্ষর ও চিহ্নের একটি দীর্ঘ সারি দেখতে পাবেন, যা দুই বা তিনটি লাইনে বিভক্ত এবং তীরচিহ্ন (<< বা >>) দ্বারা আলাদা করা।", + details_desktop: + "নথিটির সামনের ও পেছনের অংশে MRZ আছে কিনা, তা পরীক্ষা করুন। নথির নিচের দিকে 2–3 লাইনের অক্ষর এবং তীর-চিহ্ন (<<) আছে কিনা, তা খেয়াল করুন। নিশ্চিত করুন যে আপনার ক্যামেরার লেন্স পরিষ্কার আছে এবং নথির ওপর পর্যাপ্ত আলো পড়ছে।", + title: "নথিতে MRZ খুঁজে বের করুন", + title_desktop: "আপনার লেন্স পরিষ্কার করুন এবং MRZ খুঁজে বের করুন", + }, full_document: { details: "নিশ্চিত করুন যে আপনার ডকুমেন্টটি ভালোভাবে আলোকিত আছে। ক্যামেরার স্ক্রিনে ডকুমেন্টের সমস্ত তথ্য স্পষ্টভাবে দৃশ্যমান হবে।", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "ডকুমেন্ট স্ক্যান করার স্ক্রীন", timeout_modal: { - details: "ডকুমেন্টটি পড়া যাচ্ছে না। অনুগ্রহ করে পুনরায় চেষ্টা করুন।", - title: "স্ক্যান ব্যর্থ হয়েছে", + details: + "নিশ্চিত করুন যে নথিতে পর্যাপ্ত আলো রয়েছে, এটি সম্পূর্ণ দৃশ্যমান এবং এতে কোনো চকচকে ভাব নেই।", + details_desktop: + "নিশ্চিত করুন যে আপনার ক্যামেরার লেন্স পরিষ্কার আছে এবং নথিপত্রটি সম্পূর্ণ দৃশ্যমান, ফোকাসড ও পর্যাপ্ত আলোযুক্ত আছে।", + title: "নথিটি পড়া যাচ্ছে না", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/cs.ts b/packages/blinkid-ux-manager/src/ui/locales/cs.ts index 9c9fd7c3..82f28742 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/cs.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/cs.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Úspěch! Čelní strana byla naskenována", glare_detected: "Nakloňte nebo přesuňte dokument pro odstranění odrazů", keep_document_parallel: "Držte dokument rovnoběžně s obrazovkou", - keep_document_still: "Držte dokument a zařízení v klidu", keep_still: "Nehýbat", move_closer: "Kousek blíž", move_farther: "Kousek dál", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Naskenujte čárový kód", scan_the_barcode_side: "Naskenujte stranu dokumentu s čárovým kódem", scan_the_front_side: "Naskenujte přední\\nstranu dokumentu.", + scan_the_mrz_side: "Naskenujte stranu dokumentu obsahující MRZ kód", scan_top_page: "Naskenujte horní stránku", too_bright: "Přesuňte se na méně osvětlené místo", too_dark: "Přesuňte se na lépe osvětlené místo", @@ -116,6 +116,37 @@ export default { title_desktop: "Nezakrývejte čárový kód", }, }, + document_with_mrz: { + blur: { + details: + "Při skenování se snažte držet telefon a dokument v klidu. Pohyb může obraz rozmazat a způsobit, že data na dokumentu nebudou čitelná.", + details_desktop: + "Při skenování se snažte nebýhat. Pohyb může obraz rozmazat a způsobit, že data na dokumentu nebudou čitelná.", + title: "Při skenování se nehýbejte", + title_desktop: "Při skenování se nehýbejte", + }, + camera_lens: { + details_desktop: + "Zkontrolujte, zda na objektivu fotoaparátu nejsou šmouhy nebo prach. Špinavý objektiv způsobuje rozmazání výsledného obrazu, což znemožňuje přečtení údajů v dokumentu a úspěšné naskenování dat.", + title_desktop: "Vyčistěte objektiv fotoaparátu", + }, + lighting: { + details: + "Vyhněte se přímému ostrému světlu, protože se odráží od dokumentu a může způsobit, že části dokumentu nebudou čitelné. Pokud nelze údaje na dokumentu přečíst, nebudou viditelné ani pro fotoaparát.", + details_desktop: + "Vyhněte se přímému ostrému světlu, protože se odráží od dokumentu a může způsobit, že části dokumentu nebudou čitelné. Pokud nelze údaje na dokumentu přečíst, nebudou viditelné ani pro fotoaparát.", + title: "Dávejte pozor na ostré světlo", + title_desktop: "Dávejte pozor na ostré světlo", + }, + visibility: { + details: + "Zkontrolujte, zda část MRZ kódu nezakrýváte prstem. Také dejte pozor na odlesky, které by mohly zapříčinit, že bude nečitelný.", + details_desktop: + "Zkontrolujte, zda část MRZ kódu nezakrýváte prstem. Také dejte pozor na odlesky, které by mohly zapříčinit, že bude nečitelný.", + title: "Nezakrývejte MRZ kód", + title_desktop: "Nezakrývejte MRZ kód", + }, + }, done_btn: "Hotovo", done_btn_aria: "Pokračovat ve skenování", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Spustit skenování", document_with_barcode: { details: - "Různé typy průkazů totožnosti se mohou lišit formátem a umístěním čárového kódu. Kód může být jak na přední, tak na zadní straně průkazu totožnosti.", + "Různé typy dokumentů se mohou lišit formátem a umístěním čárového kódu. Kód může být jak na přední, tak na zadní straně dokumentu.", details_desktop: - "Najděte čárový kód na přední nebo zadní straně průkazu totožnosti. Ujistěte se, že je objektiv fotoaparátu čistý a dokument je dobře osvětlený.", - title: "Vyhledejte na průkazu totožnosti čárový kód", + "Najděte čárový kód na přední nebo zadní straně dokumentu. Ujistěte se, že je objektiv fotoaparátu čistý a dokument je dobře osvětlený.", + title: "Vyhledejte na dokumentu čárový kód", title_desktop: "Vyčistěte objektiv a najděte čárový kód", }, + document_with_mrz: { + details: + "Ve spodní části přední či zadní strany dokumentu najdete dlouhý řetězec znaků, který je rozdělený do 2 nebo 3 řádků a přerušovaný šipkami (<< nebo >>).", + details_desktop: + "Najděte MRZ kód na přední nebo zadní straně dokumentu. V dolní části dokumentu najděte 2–3 řádky znaků a symboly šipek (<<). Ujistěte se, že je objektiv fotoaparátu čistý a dokument je dobře osvětlený.", + title: "Vyhledejte na dokumentu MRZ kód", + title_desktop: "Vyčistěte objektiv a najděte MRZ kód", + }, full_document: { details: "Ujistěte se, že je dokument dobře osvětlen. Na obrazovce fotoaparátu by měla být vidět všechna pole dokumentu.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Obrazovka skenování dokumentu", timeout_modal: { - details: "Dokument se nepodařilo přečíst. Zkuste to znovu.", - title: "Skenování neúspěšné", + details: + "Ujistěte se, že je dokument dobře osvětlený, zcela viditelný a bez odlesků.", + details_desktop: + "Ujistěte se, že je objektiv fotoaparátu čistý a že je dokument zcela viditelný, zaostřený a dobře osvětlený.", + title: "Dokument nelze přečíst", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/da.ts b/packages/blinkid-ux-manager/src/ui/locales/da.ts index 6d22dfe1..8c41c5eb 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/da.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/da.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Det lykkedes! Forsiden er scannet.", glare_detected: "Vip eller flyt dokumentet for at fjerne reflektionen", keep_document_parallel: "Hold dokumentet parallelt med skærmen", - keep_document_still: "Hold dokumentet og enheden stille", keep_still: "Undgå at bevæge tingene", move_closer: "Flyt tættere på", move_farther: "Flyt længere væk", @@ -43,6 +42,7 @@ export default { scan_the_barcode_side: "Scan den side af dokumentet, hvor der er en stregkode", scan_the_front_side: "Scan dokumentets forside", + scan_the_mrz_side: "Scan den side af dokumentet, hvor der er en MRZ", scan_top_page: "Scan den øverste side", too_bright: "Flyt til en sted med mindre lys", too_dark: "Flyt til et lysere sted", @@ -116,6 +116,37 @@ export default { title_desktop: "Sørg for, at stregkoden er synlig", }, }, + document_with_mrz: { + blur: { + details: + "Prøv at holde telefonen og dokumentet stille, mens du scanner. Bevægelse kan enten sløre billedet eller gøre dataene på dokumentet ulæselige.", + details_desktop: + "Prøv at undgå at bevæge tingene, mens du scanner. Bevægelse kan gøre billedet uskarpt, så dataene på dokumentet bliver ulæselige.", + title: "Undgå bevægelse, mens du scanner", + title_desktop: "Undgå bevægelse, mens du scanner", + }, + camera_lens: { + details_desktop: + "Tjek, om der er snavs eller støv på din kameralinse. En snavset linse gør billedet sløret, hvilket gør dokumentets oplysninger ulæselige og forhindrer scanning af dataene.", + title_desktop: "Rens din kameralinse", + }, + lighting: { + details: + "Undgå direkte og skarpt lys, fordi de giver genskin fra dokumentet og kan gøre dele af dokumentet ulæselige. Hvis du ikke kan læse dataene på dokumentet, vil de ikke være synlige på kameraet.", + details_desktop: + "Undgå direkte og skarpt lys, fordi de giver genskin fra dokumentet og kan gøre dele af dokumentet ulæselige. Hvis du ikke kan læse dataene på dokumentet, vil de ikke være synlige på kameraet.", + title: "Vær opmærksom på skarpt lys", + title_desktop: "Vær opmærksom på skarpt lys", + }, + visibility: { + details: + "Sørg for, at du ikke dækker dele af MRZ'en med en finger. Pas også på refleksioner henover MRZ'en, da de kan gøre den ulæselig.", + details_desktop: + "Sørg for, at du ikke dækker dele af MRZ'en med en finger. Pas også på refleksioner henover MRZ'en, da de kan gøre den ulæselig.", + title: "Hold MRZ'en synlig", + title_desktop: "Hold MRZ'en synlig", + }, + }, done_btn: "Færdig", done_btn_aria: "Genoptag scanning", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Start scanning", document_with_barcode: { details: - "På forskellige typer ID kan stregkoden have forskellige formater og placeringer. Du finder stregkoden på forsiden eller bagsiden af ID'et.", + "Forskellige typer dokumenter kan have forskellige stregkodeformater og -placeringer. Se på forsiden og bagsiden af dokumentet for at finde en stregkode.", details_desktop: - "Find stregkoden på forsiden eller bagsiden af dit ID. Sørg for, at kameralinsen er ren, og at dokumentet er velbelyst.", - title: "Find stregkoden på ID'et", + "Find stregkoden på forsiden eller bagsiden af dokumentet. Sørg for, at kameralinsen er ren, og at dokumentet er godt belyst.", + title: "Find stregkoden på dokumentet", title_desktop: "Gør linsen ren, og find stregkoden", }, + document_with_mrz: { + details: + "Du finder en lang række tegn nederst på forsiden eller bagsiden af dokumentet, opdelt i 2 eller 3 linjer og adskilt af pile (<< eller >>).", + details_desktop: + "Kig efter en MRZ på forsiden og bagsiden af dokumentet. Se efter 2-3 linjer med tegn og pilesymboler (<<) nederst i dokumentet. Sørg for at holde kameralinsen ren og dokumentet godt belyst.", + title: "Find MRZ på dokumentet", + title_desktop: "Gør linsen ren, og find MRZ'en", + }, full_document: { details: "Sørg for, at dokumentet er godt oplyst. Alle dokumentets felter skal være synlige på kameraskærmen.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Skærm til dokumentscanning", timeout_modal: { - details: "Kunne ikke læse dokumentet. Prøv igen.", - title: "Scanning mislykkedes", + details: + "Sørg for, at dokumentet er godt belyst og fuldt ud synligt, samt at der ikke er noget genskin.", + details_desktop: + "Sørg for, at din kameralinse er ren, og at dokumentet er fuldt ud synligt, i fokus og godt belyst.", + title: "Dokumentet kunne ikke læses", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/de.ts b/packages/blinkid-ux-manager/src/ui/locales/de.ts index 2ed247b2..55b5133a 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/de.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/de.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Dokument neigen oder bewegen, um die Spiegelung zu beseitigen", keep_document_parallel: "Dokument parallel zum Bildschirm halten", - keep_document_still: "Dokument und Gerät ruhig halten", keep_still: "Ruhig halten", move_closer: "Kommen Sie näher", move_farther: "Bewegen Sie sich weiter weg", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Scannen Sie den Barcode", scan_the_barcode_side: "Scannen Sie die Barcode-Seite eines Dokuments", scan_the_front_side: "Scannen Sie die Vorderseite \\n eines Dokuments", + scan_the_mrz_side: "Scannen Sie die MRZ-Seite eines Dokuments", scan_top_page: "Oberste Seite scannen", too_bright: "An eine Stelle mit weniger Licht gehen", too_dark: "An eine hellere Stelle gehen", @@ -116,6 +116,37 @@ export default { title_desktop: "Der Barcode muss sichtbar bleiben", }, }, + document_with_mrz: { + blur: { + details: + "Versuchen Sie, das Telefon und das Dokument während des Scanvorgangs ruhig zu halten. Jede Bewegung kann das Bild unscharf und die Daten auf dem Dokument unlesbar machen.", + details_desktop: + "Vermeiden Sie Bewegungen während des Scanvorgangs. Jede Bewegung kann das Bild unscharf und die Daten auf dem Dokument unlesbar machen.", + title: "Halten Sie während des Scanvorgangs still", + title_desktop: "Halten Sie während des Scanvorgangs still", + }, + camera_lens: { + details_desktop: + "Überprüfen Sie Ihr Kameraobjektiv auf Verschmutzungen oder Staub. Ein verschmutztes Objektiv führt dazu, dass das endgültige Bild unscharf wird, wodurch die Dokumentendetails unleserlich werden und ein erfolgreiches Scannen der Daten verhindert wird.", + title_desktop: "Reinigen Sie Ihr Kameraobjektiv", + }, + lighting: { + details: + "Meiden Sie direktes, grelles Licht, da dieses vom Dokument reflektiert wird und so Teile des Dokuments unkenntlich machen kann. Wenn Sie keine Daten auf dem Dokument lesen können, sind diese auch für die Kamera nicht sichtbar.", + details_desktop: + "Meiden Sie direktes, grelles Licht, da dieses vom Dokument reflektiert wird und so Teile des Dokuments unkenntlich machen kann. Wenn Sie keine Daten auf dem Dokument lesen können, sind diese auch für die Kamera nicht sichtbar.", + title: "Achten Sie auf grelles Licht", + title_desktop: "Achten Sie auf grelles Licht", + }, + visibility: { + details: + "Achten Sie darauf, dass Sie Teile des MRZ nicht mit einem Finger verdecken. Achten Sie außerdem auf Reflexionen, die über den MRZ fallen und diesen unlesbar machen könnten.", + details_desktop: + "Achten Sie darauf, dass Sie Teile des MRZ nicht mit einem Finger verdecken. Achten Sie außerdem auf Reflexionen, die über den MRZ fallen und diesen unlesbar machen könnten.", + title: "Der MRZ muss sichtbar sein", + title_desktop: "Der MRZ muss sichtbar sein", + }, + }, done_btn: "Fertig", done_btn_aria: "Scannen fortsetzen", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Scannen beginnen", document_with_barcode: { details: - "Verschiedene Arten von Ausweisen können unterschiedliche Barcodeformate und -positionen haben. Suchen Sie auf der Vorder- und Rückseite des Ausweises nach einem Barcode.", + "Verschiedene Arten von Dokumenten können unterschiedliche Barcodeformate und -positionen haben. Suchen Sie auf der Vorder- und Rückseite des Dokuments nach einem Barcode.", details_desktop: - "Überprüfen Sie die Vorder- und Rückseite des Ausweises auf den Barcode. Sorgen Sie dafür, dass Ihr Kameraobjektiv sauber ist und das Dokument gut belichtet ist.", - title: "Barcode auf Ausweis lokalisieren", + "Überprüfen Sie die Vorder- und Rückseite des Dokuments auf einen Barcode. Sorgen Sie dafür, dass Ihr Kameraobjektiv sauber ist und das Dokument gut belichtet ist.", + title: "Finden Sie den Barcode auf dem Dokument", title_desktop: "Objektiv reinigen und Barcode lokalisieren", }, + document_with_mrz: { + details: + "Am unteren Rand der Vorder- oder Rückseite des Dokuments finden Sie eine lange Zeichenfolge. Sie ist in 2 oder 3 Zeilen geteilt und durch Pfeile (<< oder >>) getrennt.", + details_desktop: + "Überprüfen Sie die Vorder- und Rückseite des Dokuments auf einen MRZ. Achten Sie auf 2–3 Zeilen mit Zeichen und Pfeilsymbolen (<<) am unteren Rand des Dokuments. Achten Sie darauf, dass das Kameraobjektiv sauber und das Dokument gut beleuchtet ist.", + title: "Finden Sie den MRZ auf dem Dokument", + title_desktop: "Reinigen Sie Ihr Objektiv und suchen Sie den MRZ", + }, full_document: { details: "Sorgen Sie dafür, dass das Dokument gut belichtet ist. Alle Bereiche des Dokuments sollten auf dem Kamerabildschirm sichtbar sein.", @@ -182,7 +221,9 @@ export default { sdk_aria: "Dokumentenscanner-Bildschirm", timeout_modal: { details: - "Das Dokument kann nicht gelesen werden. Bitte versuchen Sie es erneut.", - title: "Scan nicht erfolgreich", + "Achten Sie darauf, dass das Dokument gut belichtet und vollständig sichtbar ist und nicht blendet.", + details_desktop: + "Achten Sie darauf, dass Ihr Kameraobjektiv sauber ist und das Dokument vollständig sichtbar und gut belichtet ist.", + title: "Das Dokument kann nicht gelesen werden", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/el.ts b/packages/blinkid-ux-manager/src/ui/locales/el.ts index c87a0921..d0668eec 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/el.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/el.ts @@ -28,7 +28,6 @@ export default { glare_detected: "Γείρετε ή μετακινήστε το έγγραφο για να αφαιρέσετε την αντανάκλαση", keep_document_parallel: "Κρατήστε το έγγραφο παράλληλα με την οθόνη", - keep_document_still: "Κρατήστε το έγγραφο και τη συσκευή ακίνητα", keep_still: "Κρατήστε την κάμερα ακίνητη", move_closer: "Πλησιάστε", move_farther: "Απομακρυνθείτε", @@ -45,6 +44,7 @@ export default { scan_the_barcode_side: "Σαρώστε την όψη του εγγράφου που περιέχει τον γραμμωτό κώδικα", scan_the_front_side: "Σαρώστε την μπροστινή όψη του εγγράφου", + scan_the_mrz_side: "Σαρώστε την πλευρά του εγγράφου που περιέχει το MRZ", scan_top_page: "Σαρώστε την πρώτη σελίδα", too_bright: "Μετακινηθείτε σε σημείο με λιγότερο φωτισμό", too_dark: "Μετακινηθείτε σε πιο φωτεινό σημείο", @@ -118,6 +118,37 @@ export default { title_desktop: "Φροντίστε να είναι ορατός ο κώδικας", }, }, + document_with_mrz: { + blur: { + details: + "Προσπαθήστε να κρατήσετε το τηλέφωνο και το έγγραφο ακίνητα κατά τη σάρωση. Η μετακίνηση οποιουδήποτε από τα δύο μπορεί να θολώσει την εικόνα και να καταστήσει τα δεδομένα στο έγγραφο δυσανάγνωστα.", + details_desktop: + "Προσπαθήστε να μείνετε ακίνητοι κατά τη σάρωση. Οποιαδήποτε κίνηση μπορεί να θολώσει την εικόνα και να καταστήσει τα δεδομένα του εγγράφου δυσανάγνωστα.", + title: "Μείνετε ακίνητοι κατά τη σάρωση", + title_desktop: "Μείνετε ακίνητοι κατά τη σάρωση", + }, + camera_lens: { + details_desktop: + "Ελέγξτε τον φακό της κάμεράς σας για λεκέδες ή σκόνη. Ένας βρώμικος φακός προκαλεί θάμπωμα της τελικής εικόνας, καθιστώντας τα στοιχεία του εγγράφου δυσανάγνωστα και εμποδίζοντας την επιτυχή σάρωση των δεδομένων.", + title_desktop: "Καθαρίστε τον φακό της κάμεράς σας", + }, + lighting: { + details: + "Αποφύγετε το άμεσο, έντονο φως, επειδή αντανακλάται από το έγγραφο και μπορεί να κάνει ορισμένα μέρη του εγγράφου δυσανάγνωστα. Εάν δεν μπορείτε να διαβάσετε δεδομένα στο έγγραφο, δεν θα είναι ορατά ούτε στην κάμερα.", + details_desktop: + "Αποφύγετε το άμεσο, έντονο φως, επειδή αντανακλάται από το έγγραφο και μπορεί να κάνει ορισμένα μέρη του εγγράφου δυσανάγνωστα. Εάν δεν μπορείτε να διαβάσετε δεδομένα στο έγγραφο, δεν θα είναι ορατά ούτε στην κάμερα.", + title: "Προσέξτε το έντονο φως", + title_desktop: "Προσέξτε το έντονο φως", + }, + visibility: { + details: + "Βεβαιωθείτε ότι δεν καλύπτετε μέρη του MRZ με το δάχτυλό σας, Επίσης, προσέξτε τις αντανακλάσεις που καλύπτουν το MRZ και μπορεί να τo καταστήσουν μη αναγνώσιμο.", + details_desktop: + "Βεβαιωθείτε ότι δεν καλύπτετε μέρη του MRZ με το δάχτυλό σας, Επίσης, προσέξτε τις αντανακλάσεις που καλύπτουν το MRZ και μπορεί να τo καταστήσουν μη αναγνώσιμο.", + title: "Φροντίστε να είναι ορατό το MRZ", + title_desktop: "Φροντίστε να είναι ορατό το MRZ", + }, + }, done_btn: "Τέλος", done_btn_aria: "Συνέχιση σάρωσης", full_document: { @@ -166,12 +197,20 @@ export default { btn: "Έναρξη σάρωσης", document_with_barcode: { details: - "Διαφορετικοί τύποι εγγράφων ταυτότητας ενδέχεται να περιέχουν διαφορετική μορφή και θέση γραμμωτών κωδικών. Κοιτάξτε στην μπροστινή και την πίσω όψη της ταυτότητας για τον γραμμωτό κώδικα.", + "Διαφορετικοί τύποι εγγράφων ενδέχεται να περιέχουν διαφορετική μορφή και θέση γραμμωτών κωδικών. Κοιτάξτε στην μπροστινή και την πίσω όψη του εγγράφου για τον γραμμωτό κώδικα.", details_desktop: - "Ελέγξτε την μπροστινή και την πίσω πλευρά της ταυτότητας για γραμμωτό κώδικα. Βεβαιωθείτε ότι ο φακός της κάμερας είναι καθαρός και το έγγραφο καλά φωτισμένο.", - title: "Εντοπίστε τον γραμμωτό κώδικα στην ταυτότητα", + "Ελέγξτε την μπροστινή και την πίσω πλευρά του εγγράφου για γραμμωτό κώδικα. Βεβαιωθείτε ότι ο φακός της κάμερας είναι καθαρός και το έγγραφο καλά φωτισμένο.", + title: "Εντοπίστε τον γραμμωτό κώδικα στο έγγραφο", title_desktop: "Καθαρίστε τον φακό και εντοπίστε τον γραμμωτό κώδικα", }, + document_with_mrz: { + details: + "Θα βρείτε μια μεγάλη αλληλουχία χαρακτήρων στο κάτω μέρος της μπροστινής ή της πίσω πλευράς του εγγράφου, διαχωρισμένη σε 2 ή 3 γραμμές με βέλη (<< ή >>).", + details_desktop: + "Ελέγξτε την μπροστινή και πίσω πλευρά του εγγράφου για MRZ. Αναζητήστε 2-3 γραμμές χαρακτήρων και συμβόλων βέλους (<<) στο κάτω μέρος του εγγράφου. Βεβαιωθείτε ότι ο φακός της κάμερας είναι καθαρός και το έγγραφο καλά φωτισμένο.", + title: "Εντοπίστε το MRZ στο έγγραφο", + title_desktop: "Καθαρίστε τον φακό και εντοπίστε το MRZ", + }, full_document: { details: "Φροντίστε το έγγραφο να είναι καλά φωτισμένο. Όλα τα πεδία του εγγράφου θα πρέπει να είναι ορατά στην οθόνη της κάμερας.", @@ -183,7 +222,10 @@ export default { }, sdk_aria: "Οθόνη σάρωσης εγγράφου", timeout_modal: { - details: "Δεν είναι δυνατή η ανάγνωση του εγγράφου. Δοκιμάστε ξανά.", - title: "Η σάρωση ήταν ανεπιτυχής.", + details: + "Βεβαιωθείτε ότι το έγγραφο είναι καλά φωτισμένο, πλήρως ορατό και δεν έχει αντανακλάσεις.", + details_desktop: + "Βεβαιωθείτε ότι ο φακός της κάμερας είναι καθαρός και το έγγραφο πλήρως ορατό, εστιασμένο και καλά φωτισμένο.", + title: "Δεν είναι δυνατή η ανάγνωση του εγγράφου", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/en.ts b/packages/blinkid-ux-manager/src/ui/locales/en.ts index ee20e11b..85d4639f 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/en.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/en.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Success! Front side scanned", glare_detected: "Tilt or move document to remove reflection", keep_document_parallel: "Keep document parallel with screen", - keep_document_still: "Keep document and device still", keep_still: "Keep still", move_closer: "Move closer", move_farther: "Move farther", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Scan the barcode", scan_the_barcode_side: "Scan the barcode side of a document", scan_the_front_side: "Scan the front side of a document", + scan_the_mrz_side: "Scan the MRZ side of a document", scan_top_page: "Scan the top page", too_bright: "Move to spot with less lighting", too_dark: "Move to brighter spot", @@ -115,6 +115,37 @@ export default { title_desktop: "Keep the barcode visible", }, }, + document_with_mrz: { + blur: { + details: + "Try to keep the phone and document still while scanning. Moving either can blur the image and make data on the document unreadable.", + details_desktop: + "Try to keep still while scanning. Moving can blur the image and make data on the document unreadable.", + title: "Keep still while scanning", + title_desktop: "Keep still while scanning", + }, + camera_lens: { + details_desktop: + "Check your camera lens for smudges or dust. A dirty lens causes the final image to blur, making the document details unreadable and preventing successful scan of the data.", + title_desktop: "Clean your camera lens", + }, + lighting: { + details: + "Avoid direct harsh light because it reflects from the document and can make parts of the document unreadable. If you can’t read data on the document, it won’t be visible to the camera either.", + details_desktop: + "Avoid direct harsh light because it reflects from the document and can make parts of the document unreadable. If you can’t read data on the document, it won’t be visible to the camera either.", + title: "Watch out for harsh light", + title_desktop: "Watch out for harsh light", + }, + visibility: { + details: + "Make sure you aren’t covering parts of the MRZ with a finger. Also, watch out for reflections that go over the MRZ and could make it unreadable.", + details_desktop: + "Make sure you aren’t covering parts of the MRZ with a finger. Also, watch out for reflections that go over the MRZ and could make it unreadable.", + title: "Keep the MRZ visible", + title_desktop: "Keep the MRZ visible", + }, + }, done_btn: "Done", done_btn_aria: "Resume scanning", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Start scanning", document_with_barcode: { details: - "Different types of IDs may have different barcode formats and locations. Look at the front and back of the ID for a barcode.", + "Different types of documents may have different barcode formats and locations. Look at the front and back of the document for a barcode.", details_desktop: - "Check the front and back of the ID for a barcode. Make sure you keep your camera lens clean and the document well lit.", - title: "Locate barcode on ID", + "Check the front and back of the document for a barcode. Make sure you keep your camera lens clean and the document well lit.", + title: "Locate barcode on the document", title_desktop: "Clean your lens and locate barcode", }, + document_with_mrz: { + details: + "You’ll find a long string of characters at the bottom of the front or back of the document, split into 2 or 3 lines and separated by arrows (<< or >>).", + details_desktop: + "Check the front and back of the document for an MRZ. Look for 2–3 lines of characters and arrow symbols (<<) at the bottom of the document. Make sure you keep your camera lens clean and the document well lit.", + title: "Locate MRZ on the document", + title_desktop: "Clean your lens and locate MRZ", + }, full_document: { details: "Make sure you keep the document well lit. All document fields should be visible on the camera screen.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Document scanning screen", timeout_modal: { - details: "Unable to read the document. Please try again.", - title: "Scan unsuccessful", + details: + "Make sure the document is well lit, fully visible, and free of glare.", + details_desktop: + "Make sure your camera lens is clean and the document is fully visible, in focus, and well lit.", + title: "Unable to read the document", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/en_GB.ts b/packages/blinkid-ux-manager/src/ui/locales/en_GB.ts index b5ce2b75..3522223b 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/en_GB.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/en_GB.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Success! Front side scanned", glare_detected: "Tilt or move document to remove reflection", keep_document_parallel: "Keep document parallel with screen", - keep_document_still: "Keep document and device still", keep_still: "Keep still", move_closer: "Move closer", move_farther: "Move farther", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Scan the barcode", scan_the_barcode_side: "Scan the barcode side of a document", scan_the_front_side: "Scan the front side of the document", + scan_the_mrz_side: "Scan the MRZ side of a document", scan_top_page: "Scan the top page", too_bright: "Move to spot with less lighting", too_dark: "Move to brighter spot", @@ -115,6 +115,37 @@ export default { title_desktop: "Keep the barcode visible", }, }, + document_with_mrz: { + blur: { + details: + "Try to keep the phone and document still while scanning. Moving either can blur the image and make data on the document unreadable.", + details_desktop: + "Try to keep still while scanning. Moving may blur the image and make data on the document unreadable.", + title: "Keep still while scanning", + title_desktop: "Keep still while scanning", + }, + camera_lens: { + details_desktop: + "Check the camera lens for smudges or dust. A dirty lens can blur the image and make the document details unreadable, preventing a successful scan.", + title_desktop: "Clean your camera lens", + }, + lighting: { + details: + "Avoid direct harsh light because it reflects from the document and can make parts of the document unreadable. If you can’t read data on the document, it won’t be visible to the camera either.", + details_desktop: + "Avoid direct harsh light because it reflects from the document and can make parts of the document unreadable. If you can’t read data on the document, it won’t be visible to the camera either.", + title: "Watch out for harsh light", + title_desktop: "Watch out for harsh light", + }, + visibility: { + details: + "Make sure you are not covering any part of the MRZ with a finger. Also, watch out for glare across the MRZ, as it may make it unreadable.", + details_desktop: + "Make sure you are not covering any part of the MRZ with a finger. Also, watch out for glare across the MRZ, as it may make it unreadable.", + title: "Keep the MRZ visible", + title_desktop: "Keep the MRZ visible", + }, + }, done_btn: "Done", done_btn_aria: "Resume scanning", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Start Scanning", document_with_barcode: { details: - "Different types of IDs may have different barcode formats and locations. Look at the front and back of the ID for a barcode.", + "Different types of document may have different barcode formats and locations. Check both the front and back of the document for a barcode.", details_desktop: - "Check the front and back of the ID for a barcode. Make sure you keep your camera lens clean and the document well lit.", - title: "Locate barcode on ID", + "Check the front and back of the document for a barcode. Make sure your camera lens is clean and the document is well lit.", + title: "Locate the barcode on the document", title_desktop: "Clean your lens and locate barcode", }, + document_with_mrz: { + details: + "You'll find a long string of characters at the bottom of the front or back of the document, arranged in 2 or 3 lines and separated by chevrons (<< or >>).", + details_desktop: + "Check the front and back of the document for an MRZ. Look for 2 or 3 lines of characters and chevrons (<<) at the bottom of the document. Make sure your camera lens is clean and the document is well lit.", + title: "Locate the MRZ on the document.", + title_desktop: "Clean your lens and locate the MRZ", + }, full_document: { details: "Make sure you keep the document well lit. All document fields should be visible on the camera screen.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Document scanning screen", timeout_modal: { - details: "Unable to read the document. Please try again.", - title: "Scan unsuccessful", + details: + "Make sure the document is well lit, fully visible and free from glare.", + details_desktop: + "Make sure your camera lens is clean and the document is fully visible, in focus and well lit.", + title: "Unable to read the document", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/es.ts b/packages/blinkid-ux-manager/src/ui/locales/es.ts index a5c3634e..994dd441 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/es.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/es.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "¡Bien! Cara frontal escaneada", glare_detected: "Incline o mueva el documento para evitar los reflejos", keep_document_parallel: "Mantén el documento paralelo a la pantalla", - keep_document_still: "No muevas ni el documento ni el dispositivo", keep_still: "No lo muevas", move_closer: "Acercarse", move_farther: "Alejarse", @@ -44,6 +43,7 @@ export default { scan_the_barcode_side: "Escanea el reverso del documento con el código de barras", scan_the_front_side: "Escaneo de la parte frontal\\nde un documento", + scan_the_mrz_side: "Escanea el lado del MRZ de un documento", scan_top_page: "Escanear la página superior", too_bright: "Muévase a un lugar con menos luz", too_dark: "Muévase a un lugar con más luz", @@ -117,6 +117,37 @@ export default { title_desktop: "Mantén el código de barras visible", }, }, + document_with_mrz: { + blur: { + details: + "Intente mantener el teléfono y el documento quietos mientras escanea. Mover cualquiera de los dos puede difuminar la imagen y hacer que los datos del documento sean ilegibles.", + details_desktop: + "Intenta no mover el documento mientras escaneas. Si se mueve, la imagen puede salir borrosa y los datos del documento podrían no leerse correctamente.", + title: "No se mueva mientras escanea", + title_desktop: "No se mueva mientras escanea", + }, + camera_lens: { + details_desktop: + "Revisa que no haya manchas ni polvo en la lente de la cámara. Una lente sucia hace que la imagen final salga borrosa, lo que hace que los datos del documento sean ilegibles e impide escanear la información correctamente.", + title_desktop: "Limpia la lente de la cámara", + }, + lighting: { + details: + "Evite la luz intensa directa porque se refleja en el documento y puede hacer que algunas partes del documento sean ilegibles. Si no puede leer los datos del documento, tampoco serán visibles para la cámara.", + details_desktop: + "Evite la luz intensa directa porque se refleja en el documento y puede hacer que algunas partes del documento sean ilegibles. Si no puede leer los datos del documento, tampoco serán visibles para la cámara.", + title: "Cuidado con la luz intensa", + title_desktop: "Cuidado con la luz intensa", + }, + visibility: { + details: + "Asegúrate de no cubrir partes del MRZ con el dedo. También ten cuidado con los reflejos que puedan cubrirlo y hacerlo ilegible.", + details_desktop: + "Asegúrate de no cubrir partes del MRZ con el dedo. También ten cuidado con los reflejos que puedan cubrirlo y hacerlo ilegible.", + title: "Mantén el MRZ visible", + title_desktop: "Mantén el MRZ visible", + }, + }, done_btn: "Hecho", done_btn_aria: "Reanudar escaneo", full_document: { @@ -165,12 +196,20 @@ export default { btn: "Empezar a escanear", document_with_barcode: { details: - "El código de barras puede variar en formato y en su ubicación dentro del documento, según el tipo de identificación. Busca el código de barras tanto en el anverso como en el reverso del documento.", + "Cada tipo de documento puede tener un formato y una ubicación del código de barras diferente. Busca el código de barras tanto en la parte frontal como en el reverso del documento.", details_desktop: "Comprueba el anverso y el reverso del documento en busca de un código de barras. Asegúrate de que la lente de la cámara esté limpia y de que el documento esté bien iluminado.", - title: "Busca el código de barras en el documento de identidad", + title: "Localiza el código de barras en el documento", title_desktop: "Limpia la lente y busca el código de barras", }, + document_with_mrz: { + details: + "En la parte inferior de la parte frontal o del reverso del documento encontrarás una larga cadena de caracteres dividida en 2 o 3 líneas y separada por flechas (<< o >>).", + details_desktop: + "Comprueba si hay un MRZ en el anverso y el reverso del documento. Busca entre 2 y 3 líneas de caracteres y símbolos de flecha (<<) en la parte inferior del documento. Asegúrate de que la lente de la cámara esté limpia y de que el documento esté bien iluminado.", + title: "Localiza el MRZ en el documento", + title_desktop: "Limpia la lente y busca el MRZ", + }, full_document: { details: "Asegúrese de mantener el documento bien iluminado. Todos los campos del documento deben ser visibles en la pantalla de la cámara.", @@ -182,7 +221,10 @@ export default { }, sdk_aria: "Pantalla de escaneo de documentos", timeout_modal: { - details: "No se puede leer el documento. Por favor, inténtelo de nuevo.", - title: "Escaneo fallido", + details: + "Asegúrate de que el documento esté bien iluminado, se vea completamente y no haya reflejos.", + details_desktop: + "Asegúrate de que la lente de la cámara esté limpia y de que el documento se vea completamente, esté enfocado y bien iluminado.", + title: "No se ha podido leer el documento", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/es_MX.ts b/packages/blinkid-ux-manager/src/ui/locales/es_MX.ts index b4c3c0a5..22ca9f69 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/es_MX.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/es_MX.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "¡Completado! Lado frontal escaneado", glare_detected: "Inclinar o mover el documento para evitar reflejos", keep_document_parallel: "Mantén el documento paralelo a la pantalla.", - keep_document_still: "Mantén el documento y el dispositivo quietos.", keep_still: "Manténgase quieto", move_closer: "Acercar más", move_farther: "Alejar más", @@ -43,6 +42,7 @@ export default { scan_the_barcode_side: "Escanea el código de carras a un lado del documento", scan_the_front_side: "Escanear la parte delantera del documento", + scan_the_mrz_side: "Escanee el lado del documento con la MRZ", scan_top_page: "Escanear la página principal", too_bright: "Mover a un sitio con menos luz", too_dark: "Mover a un sitio con más luz", @@ -116,6 +116,37 @@ export default { title_desktop: "Mantenga su código de barras visible", }, }, + document_with_mrz: { + blur: { + details: + "Trata de no mover el celular ni el documento mientras se esté escaneando. Si se mueven, puede desenfocarse la imagen y provocar que el documento no pueda leerse.", + details_desktop: + "Trate de mantenerse quieto mientras escanea. Al moverse puede hacer que la imagen se vea borrosa y esto hará que los datos del documento sean ilegibles.", + title: "No mover durante el escaneo", + title_desktop: "No mover durante el escaneo", + }, + camera_lens: { + details_desktop: + "Revisa si hay manchas o polvo en la lente de la cámara. Si la lente está sucia, la imagen final saldrá borrosa, por lo que los detalles del documento serán ilegibles y no se podrán escanear los datos correctamente.", + title_desktop: "Limpie la lente de la cámara", + }, + lighting: { + details: + "Evita el exceso de luz directa, ya que se refleja en el documento y puede provocar que algunas partes no puedan leerse. Si no alcanzas a leer los datos del documento, tampoco serán visibles para la cámara.", + details_desktop: + "Evita el exceso de luz directa, ya que se refleja en el documento y puede provocar que algunas partes no puedan leerse. Si no alcanzas a leer los datos del documento, tampoco serán visibles para la cámara.", + title: "Atención al exceso de luz", + title_desktop: "Atención al exceso de luz", + }, + visibility: { + details: + "Asegúrate de no cubrir partes de la MRZ con un dedo. También, tenga cuidado con los reflejos que puedan pasar sobre la MRZ, ya que podrían hacerla ilegible.", + details_desktop: + "Asegúrate de no cubrir partes de la MRZ con un dedo. También, tenga cuidado con los reflejos que puedan pasar sobre la MRZ, ya que podrían hacerla ilegible.", + title: "Mantenga la MRZ visible", + title_desktop: "Mantenga la MRZ visible", + }, + }, done_btn: "Finalizar", done_btn_aria: "Escaneo de currículums", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Comience a escanear", document_with_barcode: { details: - "Diferentes tipos de ID pueden tener diferentes formatos de código de barras así como su ubicación. Busque al frente y por detrás por el código de barras de la ID.", + "Diferentes tipos de documentos pueden tener diferentes formatos de códigos de barras y ubicaciones. Revise el frente y reverso del documento para verificar si tiene un código de barras.", details_desktop: - "Busque un código de barras por delante y por detrás de la ID. Asegúrese de mantener el lente de su cámara limpio y el código de barras bien iluminado.", - title: "Ubique el código de barras en la ID", + "Revise el frente y el reverso del documento para verificar si tiene un código de barras. Asegúrese de mantener el lente de su cámara limpio y el documento bien iluminado.", + title: "Localice el código de barras en el documento", title_desktop: "Limpie su lente y ubique el código de barras.", }, + document_with_mrz: { + details: + "Encontrará una larga cadena de caracteres en la parte inferior del frente o el reverso del documento, dividida en 2 o 3 líneas y separada por flechas (<< o >>).", + details_desktop: + "Revisa el frente y el reverso del documento para verificar si tiene una MRZ. Busca 2 o 3 líneas de caracteres con símbolos de flecha (<<) en la parte inferior del documento. Asegúrese de mantener el lente de la cámara limpio y el documento bien iluminado.", + title: "Localice la MRZ en el documento", + title_desktop: "Limpie su lente y localice la MRZ", + }, full_document: { details: "Asegúrate de que el documento esté bien iluminado. Deberán verse todos los campos del documento en la pantalla de la cámara.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Pantalla para escanear documentos", timeout_modal: { - details: "No se puede leer el documento. Inténtalo de nuevo.", - title: "Error de escaneo", + details: + "Asegúrese de que el documento esté bien iluminado, completamente visible y libre de reflejos.", + details_desktop: + "Asegúrese de que el lente de su cámara esté limpio y que el documento sea completamente visible, enfocado y bien iluminado.", + title: "No se pudo leer el documento", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/fa-latn.ts b/packages/blinkid-ux-manager/src/ui/locales/fa-latn.ts index e83cedca..00305da3 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/fa-latn.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/fa-latn.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "با موفقیت اسکن از جلو انجام شد!", glare_detected: "برای حذف انعکاس، سند را کج یا جابجا کنید", keep_document_parallel: "سند را موازی با صفحه نمایش نگه دارید", - keep_document_still: "سند و دستگاه را ثابت نگه دارید", keep_still: "بی‌حرکت بمانید", move_closer: "نزدیکتر حرکت کن", move_farther: "دورتر حرکت کن", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "بارکد را اسکن کنید", scan_the_barcode_side: "اسکن بارکد سمت یک سند", scan_the_front_side: "از قسمت جلوی سند اسکن بگیرید", + scan_the_mrz_side: "اسکن سمت MRZ یک سند", scan_top_page: "اسکن صفحه بالا", too_bright: "به نقطه‌ای با نور کمتر بروید", too_dark: "به نقطه روشن‌تر نقل مکان کنید", @@ -115,6 +115,37 @@ export default { title_desktop: "بارکد را قابل مشاهده نگه دارید", }, }, + document_with_mrz: { + blur: { + details: + "سعی کنید هنگام اسکن، گوشی و سند را ثابت نگه دارید. حرکت دادن هر یک از آنها می‌تواند تصویر را تار کند و داده‌های روی سند را غیرقابل خواندن کند.", + details_desktop: + "سعی کنید هنگام اسکن کردن بی‌حرکت بمانید. حرکت می‌تواند تصویر را تار کند و داده‌های روی سند را غیرقابل خواندن کند.", + title: "هنگام اسکن کردن بی‌حرکت بمانید", + title_desktop: "هنگام اسکن کردن بی‌حرکت بمانید", + }, + camera_lens: { + details_desktop: + "لنز دوربین خود را از نظر لکه یا گرد و غبار بررسی کنید. لنز کثیف باعث تار شدن تصویر نهایی می‌شود و جزئیات سند را غیرقابل خواندن می‌کند و مانع از اسکن موفقیت‌آمیز داده‌ها می‌شود.", + title_desktop: "لنز دوربین خود را تمیز کنید", + }, + lighting: { + details: + "از نور مستقیم و شدید پرهیز کنید زیرا از سند منعکس می‌شود و می‌تواند بخش‌هایی از سند را غیرقابل خواندن کند. اگر نتوانید داده‌های روی سند را بخوانید، برای دوربین نیز قابل مشاهده نخواهد بود.", + details_desktop: + "از نور مستقیم و شدید پرهیز کنید زیرا از سند منعکس می‌شود و می‌تواند بخش‌هایی از سند را غیرقابل خواندن کند. اگر نتوانید داده‌های روی سند را بخوانید، برای دوربین نیز قابل مشاهده نخواهد بود.", + title: "مراقب نور شدید باشید", + title_desktop: "مراقب نور شدید باشید", + }, + visibility: { + details: + "مطمئن شوید که قسمت‌هایی از MRZ را با انگشت نمی‌پوشانید. همچنین، مراقب بازتاب‌هایی باشید که از MRZ عبور می‌کنند و می‌توانند آن را غیرقابل خواندن کنند.", + details_desktop: + "مطمئن شوید که قسمت‌هایی از MRZ را با انگشت نمی‌پوشانید. همچنین، مراقب بازتاب‌هایی باشید که از MRZ عبور می‌کنند و می‌توانند آن را غیرقابل خواندن کنند.", + title: "MRZ را قابل مشاهده نگه دارید", + title_desktop: "MRZ را قابل مشاهده نگه دارید", + }, + }, done_btn: "انجام شد", done_btn_aria: "اسکن را از سر بگیرید", full_document: { @@ -163,12 +194,20 @@ export default { btn: "شروع اسکن", document_with_barcode: { details: - "انواع مختلف کارت‌های شناسایی ممکن است قالب‌ها و مکان‌های بارکد متفاوتی داشته باشند. برای یافتن بارکد، به جلو و عقب کارت شناسایی نگاه کنید.", + "انواع مختلف اسناد ممکن است قالب‌ها و مکان‌های بارکد متفاوتی داشته باشند. برای یافتن بارکد، به جلو و عقب سند نگاه کنید.", details_desktop: - "جلو و عقب کارت شناسایی را برای بارکد بررسی کنید. مطمئن شوید که لنز دوربین خود را تمیز نگه داشته‌اید و سند به خوبی روشن است.", - title: "بارکد را روی کارت شناسایی پیدا کنید", + "جلو و عقب سند را برای بارکد بررسی کنید. مطمئن شوید که لنز دوربین خود را تمیز نگه داشته‌اید و سند به خوبی روشن است.", + title: "پیدا کردن بارکد روی سند", title_desktop: "لنز خود را تمیز کنید و بارکد را پیدا کنید", }, + document_with_mrz: { + details: + "شما یک رشته طولانی از کاراکترها را در پایین جلو یا عقب سند خواهید یافت که به ۲ یا ۳ خط تقسیم شده و با فلش (<< یا >>) از هم جدا شده‌اند.", + details_desktop: + "جلو و عقب سند را برای MRZ بررسی کنید. در پایین سند به دنبال ۲ تا ۳ خط کاراکتر و علامت فلش (<<) باشید. مطمئن شوید که لنز دوربین خود را تمیز نگه داشته‌اید و سند به خوبی روشن است.", + title: "MRZ را روی سند پیدا کنید", + title_desktop: "لنز خود را تمیز کنید و MRZ را پیدا کنید", + }, full_document: { details: "مطمئن شوید که سند را به خوبی روشن نگه داشته‌اید. تمام فیلدهای سند باید روی صفحه دوربین قابل مشاهده باشند.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "صفحه اسکن اسناد", timeout_modal: { - details: "قادر به خواندن سند نیست. لطفاً دوباره امتحان کنید.", - title: "اسکن ناموفق بود", + details: + "مطمئن شوید که سند به خوبی روشن، کاملاً قابل مشاهده و بدون تابش خیره کننده باشد.", + details_desktop: + "مطمئن شوید که لنز دوربین شما تمیز است و سند کاملاً قابل مشاهده، فوکوس شده و دارای نور کافی است.", + title: "قادر به خواندن سند نیست", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/fi.ts b/packages/blinkid-ux-manager/src/ui/locales/fi.ts index 2794431e..8beee7b9 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/fi.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/fi.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Onnistui! Etupuoli skannattu", glare_detected: "Kallista tai siirrä asiakirjaa heijastuksen poistamiseksi", keep_document_parallel: "Pidä asiakirja näytön suuntaisena", - keep_document_still: "Pidä asiakirja ja laite paikoillaan", keep_still: "Pysy liikkumatta", move_closer: "Siirry lähemmäs", move_farther: "Siirry kauemmas", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skannaa viivakoodi", scan_the_barcode_side: "Skannaa asiakirjan viivakoodipuoli", scan_the_front_side: "Skannaa asiakirjan etupuoli", + scan_the_mrz_side: "Lue asiakirjan MRZ-puoli", scan_top_page: "Skannaa yläsivu", too_bright: "Siirry himmeämmin valaistuun paikkaan", too_dark: "Siirry kirkkaampaan paikkaan", @@ -115,6 +115,37 @@ export default { title_desktop: "Pidä viivakoodi näkyvissä", }, }, + document_with_mrz: { + blur: { + details: + "Yritä pitää puhelin ja asiakirja paikallaan skannauksen aikana. Jommankumman liikkuminen voi tehdä kuvasta epäselvän ja asiakirjan tiedoista lukukelvottomia.", + details_desktop: + "Yritä pysyä liikkumatta skannauksen aikana. Liikkuminen voi sumentaa kuvaa ja tehdä asiakirjan tiedoista lukukelvottomia.", + title: "Pysy paikallasi skannauksen aikana", + title_desktop: "Pysy paikallasi skannauksen aikana", + }, + camera_lens: { + details_desktop: + "Tarkista kameran linssi tahrojen tai pölyn varalta. Likainen linssi aiheuttaa lopullisen kuvan sumenemista ja tekee asiakirjan tiedoista lukukelvottomia, jolloin tietojen skannaus ei onnistu.", + title_desktop: "Puhdista kameran linssi", + }, + lighting: { + details: + "Vältä suoraa voimakasta valoa, koska se heijastuu asiakirjasta ja voi tehdä osia siitä lukukelvottomiksi. Jos et pysty lukemaan asiakirjan tietoja, ne eivät näy myöskään kameralle.", + details_desktop: + "Vältä suoraa voimakasta valoa, koska se heijastuu asiakirjasta ja voi tehdä osia siitä lukukelvottomiksi. Jos et pysty lukemaan asiakirjan tietoja, ne eivät näy myöskään kameralle.", + title: "Varo voimakasta valoa", + title_desktop: "Varo voimakasta valoa", + }, + visibility: { + details: + "Varmista, ettet peitä mitään MRZ-alueen osaa sormella. Kiinnitä lisäksi huomiota MRZ-alueella oleviin heijastuksiin, jotka voisivat estää sen lukemisen.", + details_desktop: + "Varmista, ettet peitä mitään MRZ-alueen osaa sormella. Kiinnitä lisäksi huomiota MRZ-alueella oleviin heijastuksiin, jotka voisivat estää sen lukemisen.", + title: "Pidä MRZ näkyvissä", + title_desktop: "Pidä MRZ näkyvissä", + }, + }, done_btn: "Valmis", done_btn_aria: "Jatka skannausta", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Aloita skannaus", document_with_barcode: { details: - "Erityyppisten henkilötodistusten viivakoodi voi olla eri muodossa tai eri paikassa. Etsi viivakoodi henkilötodistuksen etu- tai taustapuolelta.", + "Erityyppisten asiakirjojen viivakoodin muoto ja sijainti saattavat vaihdella. Etsi viivakoodi tarkistamalla asiakirjan etu- ja kääntöpuoli.", details_desktop: - "Etsi viivakoodi henkilötodistuksen etu- tai taustapuolelta. Varmista, että kameran linssi on puhdas ja viivakoodi hyvin valaistu.", - title: "Etsi viivakoodi henkilötodistuksesta", + "Etsi viivakoodi tarkistamalla asiakirjan etu- ja kääntöpuoli. Varmista, että kameran linssi on puhdas ja asiakirja on hyvin valaistu.", + title: "Etsi asiakirjan viivakoodi", title_desktop: "Puhdsta linssi ja etsi viivakoodi", }, + document_with_mrz: { + details: + "Löydät asiakirjan etu- tai kääntöpuolen alareunasta pitkän merkkijonon, joka on jaettu 2 tai 3 riville ja jonka osat on erotettu toisistaan nuolilla (<< tai >>).", + details_desktop: + "Etsi MRZ tarkistamalla asiakirjan etu- ja kääntöpuoli. MRZ on asiakirjan alareunassa oleva alue, jolla on 2–3 riviä merkkejä ja nuolisymboleja (<<). Varmista, että kameran linssi on puhdas ja asiakirja on hyvin valaistu.", + title: "Etsi asiakirjan MRZ", + title_desktop: "Puhdista linssi ja etsi MRZ", + }, full_document: { details: "Varmista, että asiakirja on hyvin valaistu. Kaikkien asiakirjan kenttien tulee näkyä kameran näytöllä.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Asiakirjan skannausnäyttö", timeout_modal: { - details: "Asiakirjan lukeminen ei onnistu. Yritä uudelleen.", - title: "Skannaus epäonnistui", + details: + "Varmista, että asiakirja on hyvin valaistu, se näkyy kokonaisuudessaan eikä siinä ole heijastuksia.", + details_desktop: + "Varmista, että kameran linssi on puhdas ja että asiakirja näkyy kokonaisuudessaan, se on hyvin valaistu ja tarkennus on terävä.", + title: "Asiakirjaa ei voitu lukea", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/fil.ts b/packages/blinkid-ux-manager/src/ui/locales/fil.ts index 500a83ea..500da70c 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/fil.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/fil.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Tagumpay! Na-scan ang harap na bahagi", glare_detected: "I-tilt o iusog ang dokumento para maalis ang reflection", keep_document_parallel: "Panatilihing nakatapat ang dokumento sa screen", - keep_document_still: "Panatilihing hindi gumagalaw ang dokumento at device", keep_still: "Huwag gumalaw", move_closer: "Ilapit pa", move_farther: "Ilayo pa", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "I-scan ang barcode", scan_the_barcode_side: "I-scan ang barcode na bahagi ng dokumento", scan_the_front_side: "I-scan ang unahang bahagi ng dokumento", + scan_the_mrz_side: "I-scan ang bahagi ng dokumento na may MRZ", scan_top_page: "I-scan ang itaas ng page", too_bright: "Iusog sa bahaging hindi masyadong maliwanag", too_dark: "Iusog sa bahaging mas malinawag", @@ -116,6 +116,37 @@ export default { title_desktop: "Panatilihing nakikita ang barcode", }, }, + document_with_mrz: { + blur: { + details: + "Panatilihing ito gumagalaw ang telepono at dokumento habang nag-i-scan. Puwedeng maging malabo at hindi nababasa ang data sa dokumento kapag gumalaw.", + details_desktop: + "Panatilihing hindi gumagalaw habang nag-i-scan. Puwedeng maging malabo at hindi mabasa ang data sa dokumento kapag gumagalaw.", + title: "Panatilihing hindi gumagalaw habang nag-i-scan", + title_desktop: "Panatilihing hindi gumagalaw habang nag-i-scan", + }, + camera_lens: { + details_desktop: + "Suriin kung may mga mantsa o alikabok ang lens ng camera mo. Nagdudulot ng paglabo ng pinal na larawan ang maruruming lens, na dahilan para hindi mabasa ang mga detalye ng dokumento at hindi pag-scan sa data.", + title_desktop: "Linisin ang mga lens ng camera mo", + }, + lighting: { + details: + "Iwasan ang direktang nakakasilaw na liwanag dahil umaaninag ito mula sa dokumento at puwedeng gawing hindi nababasa ang mga bahagi ng dokumento. Kung hindi mo mabasa ang data sa dokuemnto, hindi rin ito makikita ng camera.", + details_desktop: + "Iwasan ang direktang nakakasilaw na liwanag dahil umaaninag ito mula sa dokumento at puwedeng gawing hindi nababasa ang mga bahagi ng dokumento. Kung hindi mo mabasa ang data sa dokuemnto, hindi rin ito makikita ng camera.", + title: "Tingnan kung may nakakasilaw na liwanag", + title_desktop: "Tingnan kung may nakakasilaw na liwanag", + }, + visibility: { + details: + "Siguradhing hindi mo natatakpan ng daliri ang mga bahagi ng MRZ. Tingnan din kung may mga reflection sa MRZ na dahilan para hindi mabasa ito.", + details_desktop: + "Siguradhing hindi mo natatakpan ng daliri ang mga bahagi ng MRZ. Tingnan din kung may mga reflection sa MRZ na dahilan para hindi mabasa ito.", + title: "Panatilihing nakikita ang MRZ", + title_desktop: "Panatilihing nakikita ang MRZ", + }, + }, done_btn: "Tapos na", done_btn_aria: "I-resume ang pag-scan", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Simulan ang Pag-scan", document_with_barcode: { details: - "Maaaring may iba't ibang format at lokasyon ng barcode ang iba't ibang uri ng ID. Tingnan ang harap at likod ng ID para sa barcode.", + "Maaaring may iba't ibang format at lokasyon ng barcode ang iba't ibang uri ng mga dokumento. Tingnan ang harap at likod ng dokumento para sa barcode.", details_desktop: - "Tingnan ang harap at likod ng ID para sa barcode. Siguraduhing malinis ang lens ng camera mo at lubos na naiilawan ang barcode.", - title: "Hanapin ang barcode sa ID", + "Tingnan ang harap at likod ng dokumento para sa barcode. Siguraduhing malinis ang lens ng camera mo at sapat na naiilawan ang dokumento.", + title: "Hanapin ang barcode sa dokumento", title_desktop: "Linisin ang lens mo at hanapin ang barcode", }, + document_with_mrz: { + details: + "Makakakita ka ng mahabang string ng mga character sa ibaba ng harap o likod ng dokumento. Nahahati ito sa 2 o 3 linya at pinaghihiwalay ng mga arrow (<< o >>).", + details_desktop: + "Tingnan ang harap at likod ng dokumento para sa MRZ. Hanapin ang 2–3 linya ng mga character at mga simbolo ng arrow (<<) sa ibaba ng dokumento. Siguraduhing malinis ang lens ng camera mo at sapat na naiilawan ang dokumento.", + title: "Hanapin ang MRZ sa dokumento", + title_desktop: "Linisin ang lens mo at hanapin ang MRZ", + }, full_document: { details: "Tiyaki na lubos na naiilawan ang dokumento. Dapat nakikita sa screen ng camera ang lahat ng field ng dokumento.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Screen ng pag-scan ng dokumento", timeout_modal: { - details: "Hindi mabasa ang dokumento. Pakisubukan ulit.", - title: "Hindi matagumpay ang pag-scan", + details: + "Siguraduhing sapat na naiilawan ang dokumento, ganap na nakikita, at walang glare.", + details_desktop: + "Siguraduhing malinis ang lens ng camera mo at ganap na nakikita ang dokumento, naka-focus, at sapat na naiilawan.", + title: "Hindi mabasa ang dokumento", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/fr.ts b/packages/blinkid-ux-manager/src/ui/locales/fr.ts index 301265c7..21d93f07 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/fr.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/fr.ts @@ -28,7 +28,6 @@ export default { glare_detected: "Incliner ou déplacer le document afin d'éliminer les reflets", keep_document_parallel: "Maintenez le document parallèle à l’écran", - keep_document_still: "Gardez le document et l’appareil immobiles", keep_still: "Restez immobile", move_closer: "Rapprochez-vous", move_farther: "Éloignez-vous", @@ -44,6 +43,7 @@ export default { scan_the_barcode: "Scanner le code-barres", scan_the_barcode_side: "Numériser le code-barres d’un document", scan_the_front_side: "Numérisez le recto\\nd'un document", + scan_the_mrz_side: "Scannez le côté MRZ d’un document", scan_top_page: "Numériser la première page", too_bright: "Se déplacer vers un endroit moins éclairé", too_dark: "Déplacer le document vers un endroit plus lumineux", @@ -117,6 +117,37 @@ export default { title_desktop: "Gardez le code-barres visible", }, }, + document_with_mrz: { + blur: { + details: + "Essayez de garder le téléphone et le document immobiles pendant la numérisation. Tout mouvement de l'un ou l'autre peut brouiller l'image et rendre les données du document illisibles.", + details_desktop: + "Essayez de rester immobile pendant la numérisation. Tout mouvement peut brouiller l’image et rendre les données du document illisibles.", + title: "Restez immobile pendant la numérisation", + title_desktop: "Restez immobile pendant la numérisation", + }, + camera_lens: { + details_desktop: + "Vérifiez que l’objectif de votre appareil photo ne présente aucune trace ni poussière. Un objectif sale rend l’image finale floue, ce qui empêche la lecture des informations du document ainsi que la numérisation des données.", + title_desktop: "Nettoyez l’objectif de votre appareil photo", + }, + lighting: { + details: + "Évitez toute lumière directe et vive, car elle se reflète sur le document et peut rendre certaines parties du document illisibles. Si les données ne sont pas lisibles sur le document, elles ne le seront pas non plus pour la caméra.", + details_desktop: + "Évitez toute lumière directe et vive, car elle se reflète sur le document et peut rendre certaines parties du document illisibles. Si les données ne sont pas lisibles sur le document, elles ne le seront pas non plus pour la caméra.", + title: "Faites attention aux lumières trop vives", + title_desktop: "Faites attention aux lumières trop vives", + }, + visibility: { + details: + "Veillez à ce que votre doigt ne recouvre pas certaines parties du MRZ. Faites également attention aux reflets qui masquent le MRZ et peuvent le rendre illisible.", + details_desktop: + "Veillez à ce que votre doigt ne recouvre pas certaines parties du MRZ. Faites également attention aux reflets qui masquent le MRZ et peuvent le rendre illisible.", + title: "Gardez le MRZ visible", + title_desktop: "Gardez le MRZ visible", + }, + }, done_btn: "Terminé", done_btn_aria: "Reprendre la numérisation", full_document: { @@ -165,12 +196,20 @@ export default { btn: "Commencer à numériser", document_with_barcode: { details: - "Les différents types de pièces d’identité peuvent avoir des formats et des emplacements de codes-barres différents. Examinez le recto et le verso de la pièce d’identité à la recherche d’un code-barres.", + "Les différents types de documents peuvent avoir des formats et des emplacements de codes-barres différents. Examinez le recto et le verso du document à la recherche d’un code-barres.", details_desktop: - "Cherchez un code-barres au recto et au verso de la pièce d’identité. Assurez-vous que l’objectif de votre appareil photo est propre et que le document est bien éclairé.", - title: "Localiser le code-barres sur la pièce d’identité", + "Cherchez un code-barres au recto et au verso du document. Assurez-vous que l’objectif de votre appareil photo est propre et que le document est bien éclairé.", + title: "Repérez le code-barres sur le document", title_desktop: "Nettoyez votre objectif et localisez le code-barres", }, + document_with_mrz: { + details: + "Vous trouverez une longue chaîne de caractères en bas du recto ou du verso du document, divisée en deux ou trois lignes et séparée par des flèches (<< ou >>).", + details_desktop: + "Cherchez un MRZ au recto et au verso du document. Repérez deux à trois lignes de caractères et des symboles fléchés (<<) en bas du document. Assurez-vous que l’objectif de votre appareil photo est propre et que le document est bien éclairé.", + title: "Repérez MRZ sur le document", + title_desktop: "Nettoyez votre objectif et repérez le MRZ", + }, full_document: { details: "Prenez soin de garder le document bien éclairé. Tous les champs du document doivent être visibles sur l'écran de la caméra.", @@ -182,7 +221,10 @@ export default { }, sdk_aria: "Écran de numérisation du document", timeout_modal: { - details: "Impossible de lire le document. Veuillez réessayer.", - title: "Numérisation infructueuse", + details: + "Assurez-vous que le document est bien éclairé, entièrement visible et sans reflet.", + details_desktop: + "Assurez-vous que l’objectif de votre appareil photo est propre et que le document est bien visible, net et bien éclairé.", + title: "Impossible de lire le document", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/fr_CA.ts b/packages/blinkid-ux-manager/src/ui/locales/fr_CA.ts index 7057d791..48811eeb 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/fr_CA.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/fr_CA.ts @@ -28,8 +28,6 @@ export default { glare_detected: "Veuillez incliner ou déplacer le document pour éliminer les reflets.", keep_document_parallel: "Maintenez le document parallèle à l'écran", - keep_document_still: - "Veuillez maintenir le document et l'appareil immobiles.", keep_still: "Restez immobile", move_closer: "Rapprochez-vous", move_farther: "Éloignez-vous", @@ -46,6 +44,8 @@ export default { scan_the_barcode_side: "Numérisez la face du document sur laquelle se trouve le code-barres", scan_the_front_side: "Numérisez le recto du document", + scan_the_mrz_side: + "Numérisez la face du document sur laquelle se trouve la ZLA", scan_top_page: "Veuillez numériser la page supérieure.", too_bright: "Veuillez vous déplacer vers un endroit moins éclairé.", too_dark: "Veuillez vous déplacer vers un endroit plus éclairé.", @@ -119,6 +119,37 @@ export default { title_desktop: "Gardez le code-barres visible", }, }, + document_with_mrz: { + blur: { + details: + "Essayez de maintenir le téléphone et le document immobiles pendant la numérisation. Tout mouvement peut rendre l'image floue et les données du document illisibles.", + details_desktop: + "Essayez de rester immobile pendant la numérisation. Tout mouvement peut rendre l'image floue et les données du document illisibles.", + title: "Restez immobile pendant le scan.", + title_desktop: "Restez immobile pendant le scan.", + }, + camera_lens: { + details_desktop: + "Vérifiez que l'objectif de votre appareil photo ne présente pas de trace ou de poussière. Un objectif sale rend l'image finale floue, les détails du document illisibles et empêche la bonne numérisation des données.", + title_desktop: "Nettoyez l'objectif de votre appareil photo", + }, + lighting: { + details: + "Évitez la lumière directe et intense, car elle se reflète sur le document et peut rendre certaines parties illisibles. Si vous ne pouvez pas lire les données sur le document, elles ne seront pas visibles non plus pour l'appareil photo.", + details_desktop: + "Évitez la lumière directe et intense, car elle se reflète sur le document et peut rendre certaines parties illisibles. Si vous ne pouvez pas lire les données sur le document, elles ne seront pas visibles non plus pour l'appareil photo.", + title: "Faites attention à la lumière vive", + title_desktop: "Faites attention à la lumière vive", + }, + visibility: { + details: + "Assurez-vous de ne pas couvrir certaines parties de la ZLA avec un doigt. Faites également attention aux reflets qui pourraient apparaître sur le code-barres et le rendre illisible.", + details_desktop: + "Assurez-vous de ne pas couvrir certaines parties de la ZLA avec un doigt. Faites également attention aux reflets qui pourraient apparaître sur le code-barres et le rendre illisible.", + title: "Gardez la ZLA visible", + title_desktop: "Gardez la ZLA visible", + }, + }, done_btn: "Terminé", done_btn_aria: "Reprendre la numérisation", full_document: { @@ -167,12 +198,20 @@ export default { btn: "Commencer le balayage", document_with_barcode: { details: - "Les différents types de pièces d'identité peuvent posséder des formats et des emplacements de code-barres différents. Vérifiez la présence d'un code-barres au recto et au verso de la pièce d'identité.", + "Les différents types de document peuvent posséder des formats et des emplacements de code-barres distincts. Vérifiez la présence d'un code-barres au recto et au verso du document.", details_desktop: - "Assurez-vous que recto ou le verso de la pièce d'identité comporte un code-barres. Vérifiez que l'objectif de votre appareil photo est propre et le document bien éclairé.", - title: "Localisez le code-barres sur la pièce d'identité", + "Assurez-vous que recto ou le verso du document comporte un code-barres. Vérifiez que l'objectif de votre appareil photo est propre et le document bien éclairé.", + title: "Localisez le code-barres sur le document", title_desktop: "Nettoyez votre objectif et localisez le code-barres", }, + document_with_mrz: { + details: + "Vous trouverez une longue suite de caractères au bas de la première ou de la dernière page du document, répartie sur deux ou trois lignes et séparée par des flèches (<< ou >>).", + details_desktop: + "Vérifiez la présence d'une ZLA au recto et au verso du document. Recherchez 2 à 3 lignes de caractères et des flèches (<<) au bas du document. Veillez à ce que l'objectif de votre appareil photo soit propre et que le document soit bien éclairé.", + title: "Localisez la ZLA sur le document", + title_desktop: "Nettoyez votre objectif et localisez la ZLA", + }, full_document: { details: "Assurez-vous que le document est bien éclairé. Tous les champs du document doivent être visibles sur l'écran de l'appareil photo.", @@ -184,7 +223,10 @@ export default { }, sdk_aria: "Écran de numérisation du document", timeout_modal: { - details: "Impossible de lire le document. Veuillez réessayer.", - title: "Échec de la numérisation", + details: + "Vérifiez que le document est bien éclairé, entièrement visible et exempt de reflets.", + details_desktop: + "Assurez-vous que l'objectif de votre appareil photo est propre et que le document est entièrement visible, net et bien éclairé.", + title: "Impossible de lire le document", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ha.ts b/packages/blinkid-ux-manager/src/ui/locales/ha.ts index a8e318c2..337dd68a 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ha.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ha.ts @@ -28,7 +28,6 @@ export default { glare_detected: "A karkata ko a matsar da takarda domin a cire dau da hasken yake yi", keep_document_parallel: "Sanya takarda a saitin sikirin ɗin", - keep_document_still: "A daina motsa takarda da na'ura", keep_still: "A daina jijjigawa", move_closer: "Matsa kusa", move_farther: "Matsa baya", @@ -45,6 +44,7 @@ export default { scan_the_barcode_side: "A ɗauki hoton ɓangaren takardar da ke ɗauke da barcode", scan_the_front_side: "A ɗauki hoton gaban takardar", + scan_the_mrz_side: "Yi sikanin gefen MRZ na takardar", scan_top_page: "Ɗauki hoton shafin sama", too_bright: "Matsa zuwa wuri mai ƙarancin haske", too_dark: "Matsa zuwa wuri mai haske", @@ -118,6 +118,37 @@ export default { title_desktop: "A daidaita yadda za a iya kallon barcode ɗin", }, }, + document_with_mrz: { + blur: { + details: + "A daina motsa waya da takarda yayin ɗaukar hoto. Motsa ɗaya daga cikinsu zai sa hoton ya yi dishi-dishi sannan zai sa ba za a iya karanta bayanan da suke kan takardar ba.", + details_desktop: + "A daina motsawa yayin ɗaukar hoto. Motsawa zai sa hoton ya yi dishi-dishi sannan zai sa ba za a iya karanta bayanan da suke kan takardar ba.", + title: "Kada a motsa yayin ɗaukar hoto", + title_desktop: "Kada a motsa yayin ɗaukar hoto", + }, + camera_lens: { + details_desktop: + "A duba domin tabbatar da gilashin kamerarku bai yi dishi-dishi ba, kuma ba ya ɗauke da ƙura. Gilashin kamera mai datti yakan sa hoton ya yi bishi-bishi, wanda hakan zai sa ba za a iya karanta bayanan da suke kan takardar ba sannan zai hana a ɗauki hoton bayanna yadda ya kamata.", + title_desktop: "Ku tsaftace gilashin kamerarku", + }, + lighting: { + details: + "Kada a yi amfani da haske mai ƙarfi domin zai yi dau a kan takardar sannan zai sa ba za a iya karanta wasu ɓangarorin takardar ba. Idan ba za ku iya karanta bayanan da suke kan takardar ba, to kemara ma ba za ta iya ganin su ba.", + details_desktop: + "Kada a yi amfani da haske mai ƙarfi domin zai yi dau a kan takardar sannan zai sa ba za a iya karanta wasu ɓangarorin takardar ba. Idan ba za ku iya karanta bayanan da suke kan takardar ba, to kemara ma ba za ta iya ganin su ba.", + title: "A duba haske mai ƙarfi", + title_desktop: "A duba haske mai ƙarfi", + }, + visibility: { + details: + "A tabbatar da cewa ba a rufe wasu ɓangarorin MRZ da yatsa ba. Bayan haka, a duba ko akwai wani dau na haske da ya hau kan MRZ ɗin wanda zai iya sa ba zai karantu ba.", + details_desktop: + "A tabbatar da cewa ba a rufe wasu ɓangarorin MRZ da yatsa ba. Bayan haka, a duba ko akwai wani dau na haske da ya hau kan MRZ ɗin wanda zai iya sa ba zai karantu ba.", + title: "Ajiye yadda za a iya kallon MRZ", + title_desktop: "Ajiye yadda za a iya kallon MRZ", + }, + }, done_btn: "Kammala", done_btn_aria: "Ci gaba da ɗaukar hoto", full_document: { @@ -166,12 +197,20 @@ export default { btn: "Fara ɗaukar hoto", document_with_barcode: { details: - "Katunan shaida mabambanta suna iya zuwa da tsarin barcode mabambanta sanan a wuri daban-daban. A duba gaba da bayan katin shaida domin ganin barcode ɗin.", + "Takardu mabambanta suna iya zuwa da tsarin barcode mabambanta sanan da wuri daban-daban. A duba gaba da bayan takardar don barcode ɗin.", details_desktop: - "A duba gaba da bayan katin shaidar domin ganin barcode. Ku tabbatar da cewa gilashin kamerarku ba ya ɗauke da ƙura sannan a haska katin yadda ya kamata.", - title: "A dubo barcode a kan katin shaida", + "Duba gaba da bayan takardar don barcode. Tabbatar ka ajiye gilashin kemararku cikin tsabta kuma an haska takardar da kyau.", + title: "Nemi barcode akan takardar", title_desktop: "Ku tsaftace gilashin kamerarku sannan ku dubo barcode", }, + document_with_mrz: { + details: + "Za ka nemi dogon jerin haruffa a kasa a gaba ko bayan takardar, raba shi zuwa layuka 2 ko 3 kuma a raba da kibiyoyi (<< ko >>).", + details_desktop: + "A duba gaba da bayan takarda don MRZ. Nemi layuka 2-3 na haruffa da alomomin kibiyoyi (<<) a kasan takardar. Ku tabbatar da cewa kun ajiye gilashin kamerarku cikin tsabta sannan a haska takardar yadda ya kamata.", + title: "Nemi MRZ akan takardar", + title_desktop: "Goge gilashinku kuma ku nemi MRZ", + }, full_document: { details: "A tabbatar da an haska ɗaukacin takardar. Ya kasance ana ganin dukkannin ɓangarorin takardar a cikin sikirin ɗin kamera.", @@ -183,7 +222,10 @@ export default { }, sdk_aria: "Sikirin na ɗaukar hoton takarda", timeout_modal: { - details: "An kasa karanta takardar. A sake gwadawa.", - title: "An yi nasarar ɗaukar hoto", + details: + "Tabbatar cewa an haska takardar da kyau, ana gani cikakke, kuma ba wani dishi-dishi.", + details_desktop: + "Tabbatar cewa gilashin kamerarku yana da tsabta kuma ana ganin takardar gabaɗaya, cikin kula, kuma an haska shi da kyau.", + title: "An gaza karanta takardar", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/he.ts b/packages/blinkid-ux-manager/src/ui/locales/he.ts index 94147932..687b6211 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/he.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/he.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "הצלחה! הצד הקדמי נסרק", glare_detected: "הטו או הזיזו את המסמך כדי להסיר את ההשתקפות", keep_document_parallel: "יש לשמור על המסמך מקביל למסך", - keep_document_still: "נא לשמור שהמכשיר והמסמך לא זזים", keep_still: "לא לזוז", move_closer: "קרב/י", move_farther: "התרחק/י", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "לסרוק את הברקוד", scan_the_barcode_side: "סרקו את צד הברקוד של מסמך", scan_the_front_side: "לסרוק את הצד הקדמי של מסמך", + scan_the_mrz_side: "סרקו את הצד של המסמך עם ה-MRZ", scan_top_page: "סרוק את העמוד העליון", too_bright: "עברו למקום עם פחות תאורה", too_dark: "עברו למקום בהיר יותר", @@ -115,6 +115,37 @@ export default { title_desktop: "הקפידו שהברקוד יישאר גלוי", }, }, + document_with_mrz: { + blur: { + details: + "נסה לשמור על יציבות הטלפון והמסמך בזמן הסריקה. הזזתם עלולה לטשטש את התמונה ולהפוך את הנתונים במסמך לבלתי קריאים.", + details_desktop: + "נסו לא לזוז בזמן הסריקה. תנועה עלולה לטשטש את התמונה ולגרום לנתונים במסמך להיות בלתי קריאים.", + title: "הישאר יציב בזמן הסריקה", + title_desktop: "הישאר יציב בזמן הסריקה", + }, + camera_lens: { + details_desktop: + "בדקו את עדשת המצלמה שלכם לאיתור כתמים או אבק. עדשה מלוכלכת גורמת לטשטוש התמונה הסופית, מה שהופך את פרטי המסמך לבלתי קריאים ומונעת סריקה מוצלחת של הנתונים.", + title_desktop: "יש לנקות את עדשת המצלמה", + }, + lighting: { + details: + "הימנע מאור ישיר חזק מכיוון שהוא משתקף מהמסמך ועלול להפוך חלקים מהמסמך לבלתי קריאים. אם אינך יכול לקרוא את הנתונים במסמך, הם לא יהיו גלויים גם למצלמה.", + details_desktop: + "הימנע מאור ישיר חזק מכיוון שהוא משתקף מהמסמך ועלול להפוך חלקים מהמסמך לבלתי קריאים. אם אינך יכול לקרוא את הנתונים במסמך, הם לא יהיו גלויים גם למצלמה.", + title: "התרחק מאור חזק", + title_desktop: "התרחק מאור חזק", + }, + visibility: { + details: + "ודאו שאינכם מכסים חלקים מה-MRZ עם האצבע. כמו כן, היזהרו מהשתקפויות על גבי ה-MRZ שעלולות להפוך אותו לבלתי קריא.", + details_desktop: + "ודאו שאינכם מכסים חלקים מה-MRZ עם האצבע. כמו כן, היזהרו מהשתקפויות על גבי ה-MRZ שעלולות להפוך אותו לבלתי קריא.", + title: "הקפידו שה-MRZ יישאר גלוי", + title_desktop: "הקפידו שה-MRZ יישאר גלוי", + }, + }, done_btn: "בוצע", done_btn_aria: "המשך סריקה", full_document: { @@ -163,12 +194,20 @@ export default { btn: "התחלת סריקה", document_with_barcode: { details: - "הברקוד בסוגים שונים של מסמכי זיהוי עשויים להיות בפורמטים ובמיקומים שונים. חפשו ברקוד בחלק הקדמי והאחורי של מסמך הזיהוי.", + "לסוגים שונים של מסמכים עשויים להיות פורמטים ומיקומים שונים של ברקוד. חפשו ברקוד בחלק הקדמי והאחורי של המסמך.", details_desktop: - "בדקו את החלק הקדמי והאחורי של תעודת הזהות כדי לוודא שיש שם ברקוד. וודאו שעדשת המצלמה נקייה ושהמסמך מואר היטב.", - title: "אתרו את הברקוד על מסמך הזיהוי", + "בדקו את החלק הקדמי והאחורי של המסמך כדי לוודא שיש שם ברקוד. וודאו שעדשת המצלמה נקייה ושהמסמך מואר היטב.", + title: "אתרו ברקוד במסמך", title_desktop: "נקו את העדשה ואתרו את הברקוד", }, + document_with_mrz: { + details: + "תמצאו מחרוזת ארוכה של תווים בתחתית החלק הקדמי או האחורי של המסמך. היא מחולקת ל-2 או 3 שורות ומופרדת על ידי חיצים (<< ו->>).", + details_desktop: + "חפשו MRZ בחלק הקדמי והאחורי של המסמך. אלו יהיו 2-3 שורות של תווים וסמלי חצים (<<) בתחתית המסמך. ודאו שאתם שומרים על עדשת המצלמה נקייה ועל המסמך מואר היטב.", + title: "אתרו את ה-MRZ על המסמך", + title_desktop: "נקו את העדשה ואתרו את ה-MRZ", + }, full_document: { details: "המסמך חייב להיות מואר היטב. כל שדות המסמכים צריכים להיות גלויים על מסך המצלמה.", @@ -180,7 +219,9 @@ export default { }, sdk_aria: "מסך סריקת מסמך", timeout_modal: { - details: "לא ניתן לקרוא את המסמך. נא לנסות שוב.", - title: "הסריקה נכשלה", + details: 'ודא שהמסמך מואר היטב, גלוי לחלוטין ולא מוסתר כלל ע"י בוהק.', + details_desktop: + "וודאו שעדשת המצלמה נקייה ושהמסמך גלוי לחלוטין, בפוקוס ומואר היטב.", + title: "לא ניתן לקרוא את המסמך", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/hi.ts b/packages/blinkid-ux-manager/src/ui/locales/hi.ts index 7c1437bc..4ef4db58 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/hi.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/hi.ts @@ -28,7 +28,6 @@ export default { glare_detected: "प्रतिबिंब हटाने के लिए दस्तावेज़ को झुकाएँ या ट्रान्सफर करें", keep_document_parallel: "डॉक्यूमेंट को स्क्रीन के पैरेलल रखें", - keep_document_still: "डॉक्यूमेंट और डिवाइस को स्थिर रखें", keep_still: "स्थिर रखें", move_closer: "पास आएँ", move_farther: "दूर जाएँ", @@ -44,6 +43,7 @@ export default { scan_the_barcode: "बारकोड को स्कैन करें", scan_the_barcode_side: "दस्तावेज़ के बारकोड वाले हिस्से को स्कैन करें", scan_the_front_side: "दस्तावेज़ के सामने वाले भाग को स्कैन करें", + scan_the_mrz_side: "दस्तावेज़ के MRZ वाले हिस्से को स्कैन करें", scan_top_page: "टॉप पेज को स्कैन करें", too_bright: "कम रोशनी वाले स्थान पर जाएँ", too_dark: "अधिक रोशनी वाले स्थान पर जाएँ", @@ -117,6 +117,37 @@ export default { title_desktop: "बारकोड को दृश्यमान रखें", }, }, + document_with_mrz: { + blur: { + details: + "स्कैन करते समय फ़ोन और दस्तावेज़ को स्थिर रखने का प्रयास करें. किसी भी चीज़ को हिलाने से तस्वीर धुंधली हो सकती है और दस्तावेज़ पर मौजूद डेटा पढ़ने योग्य नहीं रहेगा.", + details_desktop: + "स्कैन करते समय यथासंभव स्थिर रहने की कोशिश करें। हिलने‑डुलने से छवि धुंधली हो सकती है और दस्तावेज़ पर मौजूद डेटा अपठनीय हो सकता है।", + title: "स्कैन करते समय स्थिर रहें", + title_desktop: "स्कैन करते समय स्थिर रहें", + }, + camera_lens: { + details_desktop: + "अपने कैमरे के लेंस पर धब्बे या धूल तो नहीं है, यह चेक करें। गंदे लेंस से फ़ाइनल इमेज धुंधली हो जाती है, जिससे डॉक्यूमेंट की डिटेल्स पढ़ने लायक नहीं रहतीं और डेटा का सफल स्कैन नहीं हो पाता।", + title_desktop: "अपने कैमरे के लेंस को साफ करें", + }, + lighting: { + details: + "सीधी और तेज़ रोशनी से बचें क्योंकि यह दस्तावेज़ से रिफ्लेक्ट होकर दस्तावेज़ के कुछ हिस्सों को पढ़ने में दिक्कत ला सकती है. अगर आप दस्तावेज़ पर मौजूद डेटा नहीं पढ़ पा रहे हैं, तो वह कैमरे को भी दिखाई नहीं देगा.", + details_desktop: + "सीधी और तेज़ रोशनी से बचें क्योंकि यह दस्तावेज़ से रिफ्लेक्ट होकर दस्तावेज़ के कुछ हिस्सों को पढ़ने में दिक्कत ला सकती है. अगर आप दस्तावेज़ पर मौजूद डेटा नहीं पढ़ पा रहे हैं, तो वह कैमरे को भी दिखाई नहीं देगा.", + title: "कठोर प्रकाश से सावधान रहें", + title_desktop: "कठोर प्रकाश से सावधान रहें", + }, + visibility: { + details: + "सुनिश्चित करें कि आप उंगली से MRZ के किसी हिस्से को ढक नहीं रहे हैं। साथ ही, उन प्रतिबिंबों से भी सावधान रहें जो MRZ पर पड़ सकते हैं और उसे अपठनीय बना सकते हैं।", + details_desktop: + "सुनिश्चित करें कि आप उंगली से MRZ के किसी हिस्से को ढक नहीं रहे हैं। साथ ही, उन प्रतिबिंबों से भी सावधान रहें जो MRZ पर पड़ सकते हैं और उसे अपठनीय बना सकते हैं।", + title: "MRZ को दृश्यमान रखें", + title_desktop: "MRZ को दृश्यमान रखें", + }, + }, done_btn: "हो गया", done_btn_aria: "स्कैनिंग फिर से शुरू करें", full_document: { @@ -165,12 +196,20 @@ export default { btn: "स्कैन करना शुरू करें", document_with_barcode: { details: - "विभिन्न प्रकार के पहचान पत्रों में बारकोड के फार्मेट और स्थान अलग-अलग हो सकते हैं। बारकोड के लिए पहचान पत्र के आगे और पीछे दोनों तरफ देखें।", + "विभिन्न प्रकार के दस्तावेज़ों में बारकोड के फार्मेट और स्थान अलग-अलग हो सकते हैं। बारकोड के लिए दस्तावेज़ के आगे और पीछे दोनों तरफ देखें।", details_desktop: - "आईडी के आगे और पीछे बारकोड की जाँच करें। सुनिश्चित करें कि आपका कैमरा लेंस साफ हो और दस्तावेज़ पर अच्छी रोशनी हो।", - title: "आईडी पर बारकोड ढूंढें", + "दस्तावेज़ के आगे और पीछे बारकोड की जाँच करें। सुनिश्चित करें कि आपका कैमरा लेंस साफ हो और दस्तावेज़ पर अच्छी रोशनी हो।", + title: "दस्तावेज़ पर बारकोड को ढूंढें", title_desktop: "अपने लेंस को साफ करें और बारकोड ढूंढें", }, + document_with_mrz: { + details: + "आप दस्तावेज़ के आगे या पीछे, सबसे नीचे अक्षरों की एक लंबी स्ट्रिंग पाएँगे, जो 2 या 3 पंक्तियों में बँटी होती है और तीर (<< या >>) से अलग की जाती है।", + details_desktop: + "दस्तावेज़ के आगे और पीछे MRZ चेक करें। दस्तावेज़ के नीचे 2–3 लाइन के कैरेक्टर और तीर के निशान (<<) देखें। पक्का करें कि आप अपने कैमरे का लेंस साफ रखें और दस्तावेज़ पर अच्छी रोशनी हो।", + title: "दस्तावेज़ पर MRZ को ढूंढें", + title_desktop: "अपने लेंस को साफ करें और MRZ ढूंढें", + }, full_document: { details: "सुनिश्चित करें कि दस्तावेज़ पर अच्छी रोशनी हो. सभी दस्तावेज़ फ़ील्ड कैमरा स्क्रीन पर दिखाई देने चाहिए.", @@ -182,7 +221,10 @@ export default { }, sdk_aria: "दस्तावेज़ स्कैनिंग स्क्रीन", timeout_modal: { - details: "दस्तावेज़ पढ़ा नहीं जा सका. कृपया दोबारा प्रयास करें.", - title: "स्कैन असफल हुआ", + details: + "सुनिश्चित करें कि दस्तावेज़ पर अच्छी रोशनी हो, वह पूरा दिख रहा हो और किसी भी तरह की चमक से मुक्त हो।", + details_desktop: + "सुनिश्चित करें कि आपका कैमरा लेंस साफ हो और दस्तावेज़ पूरा दिख रहा हो, फोकस में हो और उस पर अच्छी रोशनी हो।", + title: "दस्तावेज़ पढ़ा नहीं जा सका", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/hr.ts b/packages/blinkid-ux-manager/src/ui/locales/hr.ts index 06eb77b9..981d0a0a 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/hr.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/hr.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Nagnite ili premjestite dokument kako biste uklonili refleksiju", keep_document_parallel: "Držite dokument paralelno sa zaslonom", - keep_document_still: "Držite dokument i uređaj mirno", keep_still: "Ostanite mirni", move_closer: "Približite dokument", move_farther: "Udaljite dokument", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Skenirajte barkod", scan_the_barcode_side: "Skenirajte stranu dokumenta s barkodom", scan_the_front_side: "Skenirajte prednju stranu dokumenta", + scan_the_mrz_side: "Skenirajte stranu dokumenta s MRZ kodom", scan_top_page: "Skenirajte gornju stranicu", too_bright: "Pomaknite se na slabije osvijetljeno mjesto", too_dark: "Pomaknite se na više osvijetljeno mjesto", @@ -116,6 +116,37 @@ export default { title_desktop: "Držite barkod vidljivim", }, }, + document_with_mrz: { + blur: { + details: + "Pokušajte za vrijeme skeniranja što mirnije držati telefon i dokument. Pomicanjem može doći do zamućenja slike zbog čega podaci postaju nečitljivi.", + details_desktop: + "Pokušajte za vrijeme skeniranja biti što mirniji. Pomicanjem može doći do zamućenja slike zbog čega podaci postaju nečitljivi.", + title: "Mirno držite dokument", + title_desktop: "Mirno držite dokument", + }, + camera_lens: { + details_desktop: + "Provjerite je li kamera čista. Prljava kamera uzrokuje zamućenje slike pa podaci na dokumentu postaju nečitljivi i nemoguće ih je uspješno skenirati.", + title_desktop: "Očistite kameru", + }, + lighting: { + details: + "Izbjegavajte izravnu jaku svjetlost jer se reflektira s dokumenta i može učiniti dijelove dokumenta nečitljivima. Ako vi ne možete pročitati podatke na dokumentu, ni kamera ih neće moći vidjeti.", + details_desktop: + "Izbjegavajte izravnu jaku svjetlost jer se reflektira s dokumenta i može učiniti dijelove dokumenta nečitljivima. Ako vi ne možete pročitati podatke na dokumentu, ni kamera ih neće moći vidjeti.", + title: "Pazite na direktno osvjetljenje", + title_desktop: "Pazite na direktno osvjetljenje", + }, + visibility: { + details: + "Pripazite da ne prekrivate dijelove MRZ-a prstom. Također, pazite na refleksije koje mogu prelaziti preko MRZ-a i učiniti ga nečitljivim.", + details_desktop: + "Pripazite da ne prekrivate dijelove MRZ-a prstom. Također, pazite na refleksije koje mogu prelaziti preko MRZ-a i učiniti ga nečitljivim.", + title: "Držite MRZ vidljivim", + title_desktop: "Držite MRZ vidljivim", + }, + }, done_btn: "OK", done_btn_aria: "Nastavi skeniranje", full_document: { @@ -170,6 +201,14 @@ export default { title: "Locirajte barkod na dokumentu", title_desktop: "Očistite kameru i locirajte barkod", }, + document_with_mrz: { + details: + "Na dnu prednje ili stražnje strane dokumenta pronaći ćete dugačak niz znakova, raspoređen u 2 ili 3 retka i odvojen strelicama (<< ili >>).", + details_desktop: + "Provjerite prednju i stražnju stranu dokumenta kako biste pronašli MRZ. Potražite 2–3 retka znakova i simbola strelica (<<) pri dnu dokumenta. Pazite da je kamera čista i dokument dobro osvijetljen.", + title: "Locirajte MRZ na dokumentu", + title_desktop: "Očistite kameru i locirajte MRZ", + }, full_document: { details: "Pripazite da dokument bude dovoljno osvijetljen. Svi podaci s dokumenta trebaju biti vidljivi na ekranu vašeg uređaja.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Zaslon za skeniranje dokumenta", timeout_modal: { - details: "Dokument nije moguće očitati. Molimo pokušajte ponovo.", - title: "Skeniranje nije uspjelo", + details: + "Pripazite da je dokument dobro osvijetljen, u potpunosti vidljiv i bez odsjaja.", + details_desktop: + "Pobrinite se da je kamera čista te da je dokument u potpunosti vidljiv, izoštren i dobro osvijetljen.", + title: "Dokument nije moguće očitati.", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/hu.ts b/packages/blinkid-ux-manager/src/ui/locales/hu.ts index 05893a39..f533b20f 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/hu.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/hu.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Döntse meg vagy mozgassa a dokumentumot a tükröződés megszüntetéséhez", keep_document_parallel: "Tartsa a dokumentumot az eszközzel párhuzamosan", - keep_document_still: "Tartsa mozdulatlanul a dokumentumot és az eszközt", keep_still: "Ne mozogjon", move_closer: "Menjen közelebb", move_farther: "Menjen távolabb", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Szkennelje be a vonalkódot", scan_the_barcode_side: "Olvassa be a dokumentum vonalkódos oldalát", scan_the_front_side: "Szkennelje be egy dokumentum\\nelülső oldalát", + scan_the_mrz_side: "Olvassa be az okmány MRZ kódot tartalmazó oldalát", scan_top_page: "A felső oldal beolvasása", too_bright: "Menjen egy kevésbé megvilágított helyre", too_dark: "Menjen jobban megvilágított helyre", @@ -116,6 +116,37 @@ export default { title_desktop: "Tartsa láthatóan a vonalkódot", }, }, + document_with_mrz: { + blur: { + details: + "A szkennelés során próbálja mozdulatlanul tartani a telefont és a dokumentumot. Mozgás hatására a kép elmosódhat, a dokumentumon lévő adatok pedig olvashatatlanná válhatnak.", + details_desktop: + "Próbáljon mozdulatlan maradni a beolvasás közben. A mozgás elhomályosíthatja a képet, és olvashatatlanná teheti a dokumentumon lévő adatokat.", + title: "Maradjon mozdulatlan a szkennelés során", + title_desktop: "Maradjon mozdulatlan a szkennelés során", + }, + camera_lens: { + details_desktop: + "Ellenőrizze, hogy nincs-e folt vagy por a kamera lencséjén. A piszkos lencse elhomályosítja a végső képet, így a dokumentum részletei olvashatatlanná válnak, ami megakadályozza az adatok sikeres beolvasását.", + title_desktop: "Tisztítsa meg a kameralencsét", + }, + lighting: { + details: + "Kerülje a közvetlen, erős fényt, mivel visszaverődik a dokumentumról, és ennek hatására a dokumentum egyes részei olvashatatlanná válhatnak. Ha nem tudja leolvasni a dokumentumon lévő adatokat, akkor a kamera számára sem lesznek láthatók.", + details_desktop: + "Kerülje a közvetlen, erős fényt, mivel visszaverődik a dokumentumról, és ennek hatására a dokumentum egyes részei olvashatatlanná válhatnak. Ha nem tudja leolvasni a dokumentumon lévő adatokat, akkor a kamera számára sem lesznek láthatók.", + title: "Ügyeljen az erős fényre", + title_desktop: "Ügyeljen az erős fényre", + }, + visibility: { + details: + "Ügyeljen arra, hogy az MRZ egyes részeit ne takarja el az ujjával. Ezenkívül ügyeljen az MRZ kódot átfedő tükröződésekre is, amelyek olvashatatlanná tehetik.", + details_desktop: + "Ügyeljen arra, hogy az MRZ egyes részeit ne takarja el az ujjával. Ezenkívül ügyeljen az MRZ kódot átfedő tükröződésekre is, amelyek olvashatatlanná tehetik.", + title: "Ügyeljen arra, hogy az MRZ látható maradjon", + title_desktop: "Ügyeljen arra, hogy az MRZ látható maradjon", + }, + }, done_btn: "Kész", done_btn_aria: "Szkennelés folytatása", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Szkennelés megkezdése", document_with_barcode: { details: - "A különböző típusú dokumentumok eltérő vonalkód-formátummal és helyekkel rendelkezhetnek. Nézze meg az azonosító elejét és hátulját, hogy megtalálja a vonalkódot.", + "A különböző típusú okmányok eltérő vonalkód-formátummal és -helyekkel rendelkezhetnek. Nézze meg az okmány elejét és hátulját, hogy megtalálja a vonalkódot.", details_desktop: - "Ellenőrizze az igazolvány elejét és hátulját vonalkódot keresve. Ügyeljen rá, hogy a kamera lencséje tiszta legyen, és a dokumentum jól meg legyen világítva.", - title: "Keresse meg a vonalkódot az azonosítón", + "Ellenőrizze az okmány elejét és hátulját vonalkódot keresve. Ügyeljen rá, hogy a kamera lencséje tiszta legyen, és az okmány jól meg legyen világítva.", + title: "Keresse meg a vonalkódot az okmányon", title_desktop: "Tisztítsa meg a lencsét, és keresse meg a vonalkódot", }, + document_with_mrz: { + details: + "Az okmény elején vagy hátoldalán egy hosszú karaktersort talál, amely 2 vagy 3 sorra van osztva, valamint (<< vagy >>) nyilak választják el.", + details_desktop: + "Ellenőrizze az okmány elejét és hátoldalát, és keresse meg az MRZ kódot. Ez 2–3 karaktersorból és nyíl szimbólumokból (<<) áll, és az okmány alján helyezkedik el. Ügyeljen arra, hogy a kamera lencséje tiszta legyen, és a dokumentum jól meg legyen világítva.", + title: "Keresse meg az MRZ kódot az okmányon", + title_desktop: "Tisztítsa meg a lencsét, és keresse meg az MRZ kódot", + }, full_document: { details: "Ügyeljen a dokumentum megfelelő megvilágítására. Minden dokumentummezőnek láthatónak kell lennie a kameraképernyőn.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Dokumentumszkennelés képernyő", timeout_modal: { - details: "Nem sikerült elolvasni a dokumentumot. Kérjük, próbálja újra.", - title: "Sikertelen szkennelés", + details: + "Ügyeljen rá, hogy az okmány jól meg legyen világítva, teljesen látható legyen és ne legyen rajta becsillanás.", + details_desktop: + "Ügyeljen rá, hogy a kamera lencséje tiszta legyen, az okmány pedig teljesen látható és éles legyen, valamint jól meg legyen világítva.", + title: "Az okmány nem olvasható", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/id.ts b/packages/blinkid-ux-manager/src/ui/locales/id.ts index ca1630fe..f5c82323 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/id.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/id.ts @@ -28,7 +28,6 @@ export default { glare_detected: "Miringkan atau pindahkan dokumen untuk menghilangkan pantulan", keep_document_parallel: "Pastikan dokumen sejajar dengan layar", - keep_document_still: "Pastikan dokumen dan perangkat tidak goyang", keep_still: "Jangan bergerak", move_closer: "Mohon dekatkan", move_farther: "Mohon jauhkan", @@ -44,6 +43,7 @@ export default { scan_the_barcode: "Pindai kode batang", scan_the_barcode_side: "Pindai sisi kode batang dokumen", scan_the_front_side: "Pindai sisi depan\\ndokumen.", + scan_the_mrz_side: "Pindai sisi MRZ dokumen", scan_top_page: "Pindai halaman atas", too_bright: "Pindah ke tempat dengan pencahayaan yang lebih sedikit", too_dark: "Pindah ke tempat yang lebih terang", @@ -117,6 +117,37 @@ export default { title_desktop: "Pastikan kode batang tetap terlihat", }, }, + document_with_mrz: { + blur: { + details: + "Pastikan ponsel dan dokumen tidak bergerak saat pemindaian. Jika bergerak, gambar bisa kabur atau data di dokumen tidak terbaca.", + details_desktop: + "Usahakan tidak bergerak saat memindai. Jika bergerak, gambar menjadi buram dan data di dokumen tidak terbaca.", + title: "Pastikan dokumen tidak bergerak saat pemindaian", + title_desktop: "Pastikan dokumen tidak bergerak saat pemindaian", + }, + camera_lens: { + details_desktop: + "Pastikan tidak ada noda atau debu pada lensa kamera. Jika lensa kotor, hasil gambar menjadi buram. Akibatnya, detail dokumen tidak dapat terbaca dan data gagal dipindai.", + title_desktop: "Bersihkan lensa kamera", + }, + lighting: { + details: + "Hindari sorot cahaya tajam karena dapat memantul dari dokumen dan menyebabkan bagian dokumen tidak terbaca. Akibatnya, data di dokumen juga tidak akan terlihat di kamera.", + details_desktop: + "Hindari sorot cahaya tajam karena dapat memantul dari dokumen dan menyebabkan bagian dokumen tidak terbaca. Akibatnya, data di dokumen juga tidak akan terlihat di kamera.", + title: "Waspadai cahaya tajam", + title_desktop: "Waspadai cahaya tajam", + }, + visibility: { + details: + "Pastikan jari Anda tidak menutupi bagian MRZ. Selain itu, hindari pantulan cahaya pada MRZ yang dapat menjadikannya tidak terbaca.", + details_desktop: + "Pastikan jari Anda tidak menutupi bagian MRZ. Selain itu, hindari pantulan cahaya pada MRZ yang dapat menjadikannya tidak terbaca.", + title: "Pastikan MRZ tetap terlihat", + title_desktop: "Pastikan MRZ tetap terlihat", + }, + }, done_btn: "Selesai", done_btn_aria: "Lanjutkan pemindaian", full_document: { @@ -165,12 +196,20 @@ export default { btn: "Mulai Pemindaian", document_with_barcode: { details: - "Jenis ID berbeda dapat memiliki format dan lokasi kode batang yang berbeda juga. Lihat sisi depan dan belakang ID untuk menemukannya.", + "Jenis dokumen berbeda dapat memiliki format dan lokasi kode batang yang berbeda juga. Lihat sisi depan dan belakang dokumen untuk menemukannya.", details_desktop: - "Periksa sisi depan dan belakang ID untuk menemukan kode batang. Pastikan lensa kamera bersih dan dokumen cukup terang.", - title: "Temukan kode batang di ID", + "Periksa sisi depan dan belakang dokumen untuk menemukan kode batang. Pastikan lensa kamera bersih dan dokumen cukup terang.", + title: "Temukan kode batang pada dokumen", title_desktop: "Bersihkan lensa kamera dan temukan kode batang", }, + document_with_mrz: { + details: + "Anda akan menemukan deretan karakter panjang di bagian bawah sisi depan atau belakang dokumen, terbagi menjadi 2 atau 3 baris dan dipisahkan oleh tanda panah (<< atau >>).", + details_desktop: + "Periksa sisi depan dan belakang dokumen untuk menemukan MRZ. Cari 2–3 baris karakter dan simbol panah (<<) di bagian bawah dokumen. Pastikan lensa kamera bersih dan dokumen cukup terang.", + title: "Temukan MRZ pada dokumen", + title_desktop: "Bersihkan lensa kamera dan temukan MRZ", + }, full_document: { details: "Pastikan dokumen cukup diterangi cahaya. Semua bagian dokumen harus terlihat di layar kamera.", @@ -182,7 +221,10 @@ export default { }, sdk_aria: "Layar pemindaian dokumen", timeout_modal: { - details: "Tak dapat membaca dokumen. Silakan coba lagi.", - title: "Pemindaian gagal", + details: + "Pastikan dokumen cukup terang, terlihat sepenuhnya, dan bebas dari silau cahaya.", + details_desktop: + "Pastikan lensa kamera bersih dan dokumen terlihat sepenuhnya, fokus, dan cukup terang.", + title: "Tidak dapat membaca dokumen", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/is.ts b/packages/blinkid-ux-manager/src/ui/locales/is.ts index 0c7a2d66..f4ed6797 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/is.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/is.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Tókst! Framhlið skönnuð", glare_detected: "Hallið eða færið skjalið til að fjarlægja endurkast", keep_document_parallel: "Halldið skjalinu samhliða skjá", - keep_document_still: "Haldið skjali og tæki kyrru", keep_still: "Haltu kyrru", move_closer: "Færið nær", move_farther: "Færið fjær", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skannið strikamerkið", scan_the_barcode_side: "Skannaðu strikamerkjahlið skjals", scan_the_front_side: "Skannið framhliðina á skjalinu", + scan_the_mrz_side: "Skannaðu hlið véllesanlega svæði skjalsins", scan_top_page: "Skannið efstu síðuna", too_bright: "Farið á stað með minni lýsingu", too_dark: "Farið á bjartari stað", @@ -115,6 +115,37 @@ export default { title_desktop: "Haltu strikamerkinu sýnilegu", }, }, + document_with_mrz: { + blur: { + details: + "Reynið að halda símanum og skjalinu kyrrum á meðan skannað er. Að færa annað hvort getur gert myndina óskýra og gert gögnin í skjalinu ólæsileg.", + details_desktop: + "Reyndu að halda kyrru meðan verið er að skanna. Hreyfing getur gert myndina óskýra og gert gögn á skjalinu ólæsileg.", + title: "Verið kyrr á meðan skannað er", + title_desktop: "Verið kyrr á meðan skannað er", + }, + camera_lens: { + details_desktop: + "Athugið hvort blettir eða ryk séu á myndavélalinsunni. Skítug linsa veldur því að lokamyndin verður óskýr, sem gerir skjalupplýsingarnar ólæsilegar og kemur í veg fyrir að hægt sé að skanna gögnin með góðum árangri.", + title_desktop: "Hreinsið myndavélalinsuna", + }, + lighting: { + details: + "Forðist beint sterkt ljós því það endurkastast frá skjalinu og getur gert hluta skjalsins ólæsilega. Ef ekki er hægt að lesa gögnin í skjalinu mun myndavélin ekki heldur sjá þau.", + details_desktop: + "Forðist beint sterkt ljós því það endurkastast frá skjalinu og getur gert hluta skjalsins ólæsilega. Ef ekki er hægt að lesa gögnin í skjalinu mun myndavélin ekki heldur sjá þau.", + title: "Gætið að sterku ljósi", + title_desktop: "Gætið að sterku ljósi", + }, + visibility: { + details: + "Gakktu úr skugga um að þú hyljir ekki hluta af véllesanlega svæðinu með fingri. Passaðu þig líka á endurskinsljósi sem fellur yfir véllesanlega svæðið og gæti gert það ólæsilegt.", + details_desktop: + "Gakktu úr skugga um að þú hyljir ekki hluta af véllesanlega svæðinu með fingri. Passaðu þig líka á endurskinsljósi sem fellur yfir véllesanlega svæðið og gæti gert það ólæsilegt.", + title: "Haltu véllesanlega svæðinu sýnilegu", + title_desktop: "Haltu véllesanlega svæðinu sýnilegu", + }, + }, done_btn: "Lokið", done_btn_aria: "Halda áfram að skanna", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Byrja að skanna", document_with_barcode: { details: - "Mismunandi gerðir skilríkja geta haft mismunandi strikamerkjaform og staðsetningar. Leitaðu að strikamerki á fram- og bakhlið skilríkisins.", + "Mismunandi gerðir skjala geta haft mismunandi strikamerkjasnið og staðsetningar. Leitaðu að strikamerki á fram- og bakhlið skjalsins.", details_desktop: - "Athugaðu fram- og bakhlið skilríkjanna fyrir strikamerki. Gakktu úr skugga um að linsa myndavélarinnar sé hrein og skjalið vel upplýst.", - title: "Finndu strikamerkið á skilríkinu", + "Athugaðu fram- og bakhlið skjalsins hvort þar sé strikamerki. Gakktu úr skugga um að linsa myndavélarinnar sé hrein og skjalið vel upplýst.", + title: "Finndu strikamerki skjalsins", title_desktop: "Hreinsaðu myndavélarlinsuna og finndu strikamerkið", }, + document_with_mrz: { + details: + "Þú finnur langa röð af táknum neðst á forsíðu eða bakhlið skjalsins, skipt í 2 eða 3 línur og aðskilin með örvum (<< eða >>).", + details_desktop: + "Athugaðu fram- og bakhlið skjalsins hvort þar sé véllesanlegt svæði. Leitaðu að 2–3 línum af stöfum og örvatáknum (<<) neðst á skjalinu. Gakktu úr skugga um að linsa myndavélarinnar sé hrein og skjalið vel upplýst.", + title: "Finndu véllesanlega svæði skjalsins", + title_desktop: "Hreinsaðu linsuna og finndu véllesanlega svæðið", + }, full_document: { details: "Gangið úr skugga um að skjalið sé vel lýst. Allir reitir skjals ættu að vera sýnilegir á skjá myndavélarinnar.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Skjalaskönnunarskjár", timeout_modal: { - details: "Ekki tókst að lesa skjalið. Reynið aftur.", - title: "Skönnun mistókst", + details: + "Gakktu úr skugga um að skjalið sé vel upplýst, fulllega sýnilegt og laust við endurskin.", + details_desktop: + "Gakktu úr skugga um að myndavélarlinsан sé hrein og skjalið sé fullkomlega sýnilegt, í fókus og vel upplýst.", + title: "Ekki tókst að lesa skjalið", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/it.ts b/packages/blinkid-ux-manager/src/ui/locales/it.ts index 65d9d941..871f0aaa 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/it.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/it.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Perfetto! Fronte scansionato", glare_detected: "Inclina o muovi il documento per eliminare il riflesso", keep_document_parallel: "Tieni il documento parallelo allo schermo", - keep_document_still: "Tieni fermi il dispositivo e il documento", keep_still: "Tieni fermo", move_closer: "Avvicinati", move_farther: "Spostati più lontano", @@ -44,6 +43,7 @@ export default { scan_the_barcode_side: "Scansiona il lato del codice a barre di un documento", scan_the_front_side: "Scansiona il fronte \\ndi un documento", + scan_the_mrz_side: "Scansiona il lato con MRZ di un documento", scan_top_page: "Scansiona la pagina in alto", too_bright: "Sposta in un punto meno illuminato", too_dark: "Sposta in un punto più illuminato", @@ -117,6 +117,37 @@ export default { title_desktop: "Mantieni visibile il codice a barre", }, }, + document_with_mrz: { + blur: { + details: + "Cerca di tenere fermi il telefono e il documento durante la scansione. Muoverli può rendere l'immagine sfocata e i dati sul documento illeggibili.", + details_desktop: + "Cerca di tenere fermo il documento durante la scansione. Muoverlo può rendere l'immagine sfocata e i dati sul documento illeggibili.", + title: "Resta immobile durante la scansione", + title_desktop: "Resta immobile durante la scansione", + }, + camera_lens: { + details_desktop: + "Controlla che la lente della fotocamera sia priva di macchie o polvere. Una lente sporca sfoca l'immagine finale, rendendo illeggibili le informazioni riportate sul documento e impedendo la corretta scansione dei dati.", + title_desktop: "Pulisci la lente della fotocamera", + }, + lighting: { + details: + "Evita la luce intensa diretta, perché questa si riflette sul documento e può rendere illeggibili alcune sue parti. Se non riesci a leggere i dati sul documento, neanche la fotocamera potrà vederli.", + details_desktop: + "Evita la luce intensa diretta, perché questa si riflette sul documento e può rendere illeggibili alcune sue parti. Se non riesci a leggere i dati sul documento, neanche la fotocamera potrà vederli.", + title: "Attenzione alla luce intensa", + title_desktop: "Attenzione alla luce intensa", + }, + visibility: { + details: + "Assicurati di non coprire parte dell'MRZ con un dito. Verifica inoltre che non ci siano riflessi sull'MRZ che possano comprometterne la leggibilità.", + details_desktop: + "Assicurati di non coprire parte dell'MRZ con un dito. Verifica inoltre che non ci siano riflessi sull'MRZ che possano comprometterne la leggibilità.", + title: "Mantieni visibile l'MRZ", + title_desktop: "Mantieni visibile l'MRZ", + }, + }, done_btn: "Fatto", done_btn_aria: "Riprendi scansione", full_document: { @@ -165,12 +196,20 @@ export default { btn: "Avvia scansione", document_with_barcode: { details: - "Su tipi diversi di documenti d'identità possono essere riportati codici a barre con formati e posizioni differenti. Cerca un codice a barre sul fronte e sul retro del documento d'identità.", + "Diversi tipi di documenti possono riportare codici a barre con formati e posizioni differenti. Cerca un codice a barre sul fronte e sul retro del documento.", details_desktop: - "Cerca un codice a barre sul fronte e sul retro del documento d'identità. Assicurati di mantenere pulita la lente della fotocamera e che il documento sia ben illuminato.", - title: "Individua il codice a barre sul documento d'identità", + "Cerca un codice a barre sul fronte e sul retro del documento. Assicurati che la lente della fotocamera sia pulita e che il documento sia ben illuminato.", + title: "Individua il codice a barre sul documento", title_desktop: "Pulisci la lente e individua il codice a barre.", }, + document_with_mrz: { + details: + "Troverai una lunga serie di caratteri nella parte inferiore del fronte o del retro del documento, suddivisa in 2 o 3 righe e separata da frecce (<< o >>).", + details_desktop: + "Cerca l'MRZ sul fronte e sul retro del documento. Troverai 2-3 righe di caratteri e simboli freccia (<<) nella parte inferiore del documento. Assicurati che la lente della fotocamera sia pulita e che il documento sia ben illuminato.", + title: "Individua l'MRZ sul documento", + title_desktop: "Pulisci la lente e individua l'MRZ", + }, full_document: { details: "Controlla che il documento sia ben illuminato. Tutti i campi del documento devono essere visibili sullo schermo della fotocamera.", @@ -182,7 +221,10 @@ export default { }, sdk_aria: "Schermata di scansione del documento", timeout_modal: { - details: "Impossibile leggere il documento. Riprova.", - title: "Scansione non riuscita", + details: + "Assicurati che il documento sia ben illuminato, interamente visibile e senza riflessi.", + details_desktop: + "Assicurati che la lente della fotocamera sia pulita e che il documento sia interamente visibile, a fuoco e ben illuminato.", + title: "Lettura del documento non riuscita", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ja.ts b/packages/blinkid-ux-manager/src/ui/locales/ja.ts index 2a8ebd32..a31183e5 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ja.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ja.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "成功!表面をスキャンしました", glare_detected: "書類を傾けたり移動したりして反射を除去する", keep_document_parallel: "ドキュメントを画面と平行に保ってください", - keep_document_still: "ドキュメントと端末を動かさないでください", keep_still: "動かさないでください", move_closer: "近くへ移動", move_farther: "遠くへ移動", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "バーコードをスキャンしてください", scan_the_barcode_side: "書類のバーコード面をスキャンしてください", scan_the_front_side: "書類の表側をスキャンしてください", + scan_the_mrz_side: "書類のMRZがある面をスキャンしてください", scan_top_page: "上のページをスキャンする", too_bright: "暗い場所に移動してください", too_dark: "明るい場所に移動してください", @@ -115,6 +115,37 @@ export default { title_desktop: "バーコードをはっきりと写してください", }, }, + document_with_mrz: { + blur: { + details: + "スキャン中は,スマートフォンと書類を動かさないようにしてください。どちらかが動くと,画像がぼやけて書類上のデータが判読できなくなる可能性があります。", + details_desktop: + "スキャン中は、動かさないようにしてください。どちらかが動くと,画像がぼやけて書類上のデータが判読できなくなる可能性があります。", + title: "スキャン中は動かさないでください", + title_desktop: "スキャン中は動かさないでください", + }, + camera_lens: { + details_desktop: + "カメラのレンズに汚れやホコリが付いていないか確認してください。レンズが汚れていると最終画像がぼやけ、ドキュメントの詳細が読み取れなくなり、データのスキャンに失敗する原因になります。", + title_desktop: "カメラのレンズを拭いてください", + }, + lighting: { + details: + "強い光が書類に反射し,一部が判読できなくなる可能性があるため,直射日光は避けてください。書類上のデータが読み取れない場合は,カメラにも映りません。", + details_desktop: + "強い光が書類に反射し,一部が判読できなくなる可能性があるため,直射日光は避けてください。書類上のデータが読み取れない場合は,カメラにも映りません。", + title: "強い光にご注意ください", + title_desktop: "強い光にご注意ください", + }, + visibility: { + details: + "MRZの一部を指で覆わないようにしてください。また、MRZに光が反射して読み取れなくならないようご注意ください。", + details_desktop: + "MRZの一部を指で覆わないようにしてください。また、MRZに光が反射して読み取れなくならないようご注意ください。", + title: "MRZが見えるようにしてください", + title_desktop: "MRZが見えるようにしてください", + }, + }, done_btn: "完了", done_btn_aria: "スキャンを再開", full_document: { @@ -163,12 +194,20 @@ export default { btn: "スキャンを開始", document_with_barcode: { details: - "IDの種類が異なると、バーコードの形式と位置も異なる可能性があります。IDの表面と裏面のバーコードを確認してください。", + "書類の種類によって、バーコードの形式や位置は異なる場合があります。書類の表面と裏面を確認し、バーコードを探してください。", details_desktop: - "IDの表面と裏面のバーコードをチェックしてください。カメラのレンズを清潔に保ち、ドキュメントが十分明るくなるようにしてください。", - title: "IDのバーコードを見つけます", + "書類の表面と裏面を確認し、バーコードを探してください。カメラのレンズを清潔に保ち、書類全体が十分に明るく写るようにしてください。", + title: "書類にあるバーコードを探してください", title_desktop: "レンズをきれいにしてバーコードを見つけます", }, + document_with_mrz: { + details: + "書類の表面または裏面の下部に、「<<」または「>>」で区切られた2~3行の長い文字列があります。", + details_desktop: + "書類の表面と裏面にMRZ(機械可読領域)があるか確認してください。書類の下部にある、2~3行の文字列と矢印記号「<<」を探してください。カメラのレンズを清潔に保ち、書類全体が十分に明るく写るようにしてください。", + title: "書類のMRZを探してください", + title_desktop: "レンズをきれいにし、MRZを確認してください", + }, full_document: { details: "書類を十分に明るく保ち,カメラの画面に書類のすべての項目が映っていることを確認してください。", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "ドキュメントスキャン画面", timeout_modal: { - details: "書類を読み取れません。もう一度お試しください。", - title: "スキャンに失敗しました", + details: + "書類全体が十分に明るく写り、すべてが画面内に収まり、反射がないことを確認してください。", + details_desktop: + "カメラのレンズを清潔にし、書類全体が画面内に収まり、ピントが合っていて、十分に明るいことを確認してください。", + title: "書類を読み取りできません", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ka_GE.ts b/packages/blinkid-ux-manager/src/ui/locales/ka_GE.ts index f63970e6..a37fd70a 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ka_GE.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ka_GE.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "წარმატებული! წინა მხარე დასკანერებულია", glare_detected: "გადახარეთ ან გაამოძრავეთ დოკუმენტი ანარეკლის მოსაშორებლად", keep_document_parallel: "დოკუმენტი ეკრანის პარალელურად დაიჭირეთ", - keep_document_still: "არ გაამოძრაოთ მოწყობილობა და ტელეფონი", keep_still: "არ იმოძრაოთ", move_closer: "მიუახლოვდით", move_farther: "გადადით მოშორებით", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "დაასკანერეთ ბარკოდი", scan_the_barcode_side: "დაასკანერეთ დოკუმენტის შტრიხკოდის მხარე", scan_the_front_side: "დაასკანერეთ დოკუმენტის წინა მხარე", + scan_the_mrz_side: "დაასკანერეთ დოკუმენტის MRZ მხარე", scan_top_page: "დაასკანერეთ ზედა გვერდი", too_bright: "გადადით ნაკლებად განათებულ ადგილას", too_dark: "გადადით უფრო განათებულ ადგილას", @@ -115,6 +115,37 @@ export default { title_desktop: "შტრიხკოდი უნდა ჩანდეს", }, }, + document_with_mrz: { + blur: { + details: + "დასკანერებისას ეცადეთ არ გაამოძრაოთ ტელეფონი და დოკუმენტი. გამოძრავების შემთხვევაში ფოტო შეიძლება დაიბუროს და დოკუმენტში ასახული მონაცემები გარჩევადი არ იყოს.", + details_desktop: + "დასკანერებისას ეცადეთ არ იმოძრაოთ. გამოძრავების შემთხვევაში ფოტო შეიძლება დაიბუროს და დოკუმენტში ასახული მონაცემები გარჩევადი არ იყოს.", + title: "არ იმოძრაოთ დასკანერებისას", + title_desktop: "არ იმოძრაოთ დასკანერებისას", + }, + camera_lens: { + details_desktop: + "დაათვალიერეთ კამერის ლინზა ლაქების ან მტვრის აღმოსაჩენად. ჭუჭყიანი ლინზა გამოიწვევს საბოლოო ფოტოს დაბურვას, დოკუმენტის დეტალები გარჩევადი არ იქნება და მონაცემების წარმატებით დასკანერება ვერ მოხერხდება.", + title_desktop: "გაწმინდეთ თქვენი კამერის ლინზა", + }, + lighting: { + details: + "მოერიდეთ პირდაპირ მკვეთრ განათებას, რადგან ის დოკუმენტზე ანარეკლს აჩენს და დოკუმენტის ნაწილები შესაძლოა გარჩევადი აღარ იყოს. თუ დოკუმენტში მოცემულ მონაცემებს ვერ კითხულობთ, მას ვერც კამერა დააფიქსირებს.", + details_desktop: + "მოერიდეთ პირდაპირ მკვეთრ განათებას, რადგან ის დოკუმენტზე ანარეკლს აჩენს და დოკუმენტის ნაწილები შესაძლოა გარჩევადი აღარ იყოს. თუ დოკუმენტში მოცემულ მონაცემებს ვერ კითხულობთ, მას ვერც კამერა დააფიქსირებს.", + title: "მოერიდეთ მკვეთრ განათებას", + title_desktop: "მოერიდეთ მკვეთრ განათებას", + }, + visibility: { + details: + "დარწმუნდით, რომ თითით არ ფარავთ MRZ-ის არც ერთ ნაწილს. ასევე, ყურადღება მიაქციეთ, რომ MRZ-ზე არ იყოს ანარეკლი, რომელმაც შეიძლება მისი წაკითხვა შეუძლებელი გახადოს.", + details_desktop: + "დარწმუნდით, რომ თითით არ ფარავთ MRZ-ის არც ერთ ნაწილს. ასევე, ყურადღება მიაქციეთ, რომ MRZ-ზე არ იყოს ანარეკლი, რომელმაც შეიძლება მისი წაკითხვა შეუძლებელი გახადოს.", + title: "MRZ უნდა ჩანდეს", + title_desktop: "MRZ უნდა ჩანდეს", + }, + }, done_btn: "დასრულდა", done_btn_aria: "დასკანერების გაგრძელება", full_document: { @@ -163,12 +194,20 @@ export default { btn: "დასკანერების დაწყება", document_with_barcode: { details: - "სხვადასხვა ტიპის პირადობის მოწმობებზე შტრიხკოდები სხვადასხვა ფორმატით და სხვადასხვა ადგილას შეიძლება იყოს დატანილი. დაათვალიერეთ პირადობის მოწმობის წინა და უკანა მხარეს შტრიხკოდის სანახავად.", + "სხვადასხვა ტიპის დოკუმენტს შეიძლება სხვადასხვა ფორმატის შტრიხკოდი ჰქონდეს და ის სხვადასხვა ადგილას იყოს განთავსებული. დაათვალიერეთ დოკუმენტის წინა და უკანა მხარეები შტრიხკოდის საპოვნელად.", details_desktop: - "დაათვალიერეთ პირადობის მოწმობის წინა და უკანა მხარე შტრიხკოდის სანახავად. დარწმუნდით, რომ კამერის ლინზა სუფთაა და დოკუმენტი კარგად არის განათებული.", - title: "მოძებნეთ შტრიხკოდი პირადობის მოწმობაზე", + "დაათვალიერეთ დოკუმენტის წინა და უკანა მხარე შტრიხკოდის სანახავად. დარწმუნდით, რომ კამერის ლინზა სუფთაა და დოკუმენტი კარგად არის განათებული.", + title: "მოძებნეთ შტრიხკოდი დოკუმენტზე", title_desktop: "გაწმინდეთ თქვენი კამერის ლინზა და მოძებნეთ შტრიხკოდი", }, + document_with_mrz: { + details: + "დოკუმენტის წინა ან უკანა მხარეს, ქვედა ნაწილში ნახავთ სიმბოლოების გრძელ მიმდევრობას, რომელიც დაყოფილია 2 ან 3 სტრიქონად და შეიცავს გამყოფ ნიშნებს << ან >>.", + details_desktop: + "დაათვალიერეთ დოკუმენტის წინა და უკანა მხარე MRZ-ის სანახავად. მოძებნეთ დოკუმენტის ქვედა ნაწილში სიმბოლოებისა და << ნიშნებისგან შემდგარი 2–3 სტრიქონი. დარწმუნდით, რომ კამერის ლინზა სუფთაა და დოკუმენტი კარგად არის განათებული.", + title: "მოძებნეთ MRZ დოკუმენტზე", + title_desktop: "გაწმინდეთ თქვენი კამერის ლინზა და მოძებნეთ MRZ", + }, full_document: { details: "დარწმუნდით, რომ დოკუმენტი კარგად არის განათებული. კამერის ეკრანზე დოკუმენტის ყველა ველი უნდა ჩანდეს.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "დოკუმენტის დასკანერების ეტაპი", timeout_modal: { - details: "დოკუმენტის წაკითხვა ვერ ხერხდება. ხელახლა სცადეთ.", - title: "სკანირება წარუმატებელია", + details: + "დარწმუნდით, რომ დოკუმენტი კარგად არის განათებული, სრულად ჩანს კადრში და არ აქვს ანარეკლი.", + details_desktop: + "დარწმუნდით, რომ კამერის ლინზა სუფთაა, დოკუმენტი სრულად ჩანს კადრში, ფოკუსი გასწორებულია და კარგად არის განათებული.", + title: "დოკუმენტის წაკითხვა ვერ ხერხდება", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/kk.ts b/packages/blinkid-ux-manager/src/ui/locales/kk.ts index e323af76..69de3dd3 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/kk.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/kk.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Сәтті! Алдыңғы жағы сканерленді", glare_detected: "Шағылысуды жою үшін құжатты еңкейтіңіз немесе жылжытыңыз", keep_document_parallel: "Құжатты экранмен параллель етіп ұстаңыз", - keep_document_still: "Құжат пен құрылғыны қозғалтпай ұстаңыз", keep_still: "Қимылдамаңыз", move_closer: "Жақындатыңыз", move_farther: "Алыстаңыз", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Штрих-кодты сканерлеңіз", scan_the_barcode_side: "Құжаттың штрихкоды бар жағын сканерлеңіз", scan_the_front_side: "Құжаттың алдыңғы жағын сканерлеңіз", + scan_the_mrz_side: "Құжаттың машина оқитын аймақ жағын сканерлеңіз", scan_top_page: "Жоғарғы бетті сканерлеңіз", too_bright: "Жарығы азырақ жерге өтіңіз", too_dark: "Жарығырақ жерге өтіңіз", @@ -115,6 +115,38 @@ export default { title_desktop: "Штрихкод жақсы көрінуі тиіс", }, }, + document_with_mrz: { + blur: { + details: + "Сканерлеу кезінде телефон мен құжатты мүмкіндігінше қозғалтпай ұстаңыз. Екеуінің де қозғалысы суретті бұлыңғыр етіп, құжаттағы деректерді оқылмайтындай етіп жіберуі мүмкін.", + details_desktop: + "Сканерлеу кезінде қозғалмауға тырысыңыз. Қозғалcаңыз, сурет бұлыңғырлануы және құжаттағы деректер оқылмауы мүмкін.", + title: "Сканерлеу кезінде қозғалмаңыз", + title_desktop: "Сканерлеу кезінде қозғалмаңыз", + }, + camera_lens: { + details_desktop: + "Камера объективінде дақ немесе шаң бар-жоғын тексеріңіз. Лас объектив қорытынды кескіннің бұлыңғырлануына әкеледі, ал бұл өз кезегінде құжат деректерінің оқылмауына алып келеді және сканерлеуге кедергі келтіреді.", + title_desktop: "Камера объективін тазалаңыз", + }, + lighting: { + details: + "Тікелей және қатты жарықтан арырақ тұрыңыз, себебі ол құжаттан шағылысып, кейбір бөліктерін оқуға мүмкіндік бермейді. Егер құжаттағы деректер сізге көрінбесе, олар камераға да көрінбейді.", + details_desktop: + "Тікелей және қатты жарықтан арырақ тұрыңыз, себебі ол құжаттан шағылысып, кейбір бөліктерін оқуға мүмкіндік бермейді. Егер құжаттағы деректер сізге көрінбесе, олар камераға да көрінбейді.", + title: "Тым жарық жерден әрі тұрыңыз", + title_desktop: "Тым жарық жерден әрі тұрыңыз", + }, + visibility: { + details: + "Саусағыңызбен аймақ жолағын жауып қалмаңыз. Сондай-ақ, аймаққа түсетін жарықтың деректерді оқылмайтындай етіп бүркеп қалмағанына қарап қойыңыз.", + details_desktop: + "Саусағыңызбен аймақ жолағын жауып қалмаңыз. Сондай-ақ, аймаққа түсетін жарықтың деректерді оқылмайтындай етіп бүркеп қалмағанына қарап қойыңыз.", + title: "Машина оқитын аймақ жолағы көрініп тұрғанына көз жеткізіңіз", + title_desktop: + "Машина оқитын аймақ жолағы көрініп тұрғанына көз жеткізіңіз", + }, + }, done_btn: "Дайын", done_btn_aria: "Сканерлеуді жалғастыру", full_document: { @@ -163,12 +195,21 @@ export default { btn: "Сканерлеуді бастау", document_with_barcode: { details: - "Жеке куәліктің әртүрлі түрлерінде штрихкодтардың форматы мен орналасуы әртүрлі болуы мүмкін. Штрихкодты куәліктің алдыңғы және артқы беттерінен іздеу керек.", + "Әр түрлі құжаттарда штрих-кодтың пішімі мен орналасуы әртүрлі болуы мүмкін. Құжаттың екі бетінен штрих-кодты іздеп көріңіз.", details_desktop: - "Куәліктің алды-артынан штрихкодты іздеңіз. Камера линзасы таза әрі құжатқа жақсы жарық түсіп тұрғанын тексеріңіз.", - title: "Жеке куәліктегі штрихкодты табыңыз.", + "Құжаттың алдыңғы және артқы бетінен штрих-кодты іздеңіз. Камера линзасының таза екеніне және құжаттың жарық жерде екеніне көз жеткізіңіз.", + title: "Құжаттан штрих-кодты іздеңіз.", title_desktop: "Объективті тазалап, штрихкодты табыңыз", }, + document_with_mrz: { + details: + "Құжаттың алдыңғы немесе артқы бетінің төменгі жағынан 2–3 жолдан тұратын таңбалар мен көрсеткілермен (<< немесе >>) бөлінген ұзын жолды табыңыз.", + details_desktop: + "Құжаттың алдыңғы және артқы бетінде машина оқи алатын аймақ бар-жоғын тексеріңіз. Құжаттың төменгі бөлігіндегі 2–3 жолдан тұратын таңбалар мен көрсеткіш белгілеріне (<<) назар аударыңыз. Камера линзасының таза екеніне әрі құжаттың жарық жерде орналасқанына көз жеткізіңіз.", + title: "Машина оқитын аймақ жолағын табыңыз.", + title_desktop: + "Камера линзасын сүртіп, машина оқи алатын аймақтың жолағын табыңыз", + }, full_document: { details: "Құжат жақсы жарықта екеніне көз жеткізіңіз. Құжаттағы барлық өрістер камера экранында көрініп тұруы керек.", @@ -180,7 +221,10 @@ export default { }, sdk_aria: "Құжатты сканерлеу экраны", timeout_modal: { - details: "Құжатты оқу мүмкін болмады. Әрекетті қайталаңыз.", - title: "Сканерлене алмады", + details: + "Құжатты жарық жерге, толықтай көрінетінін және жарық шағылыспайтын жерге қойыңыз.", + details_desktop: + "Камера линзасының таза екеніне, ал құжаттың толығымен көрінетініне, айқын әрі жарық жақсы түсіп тұрғанына көз жеткізіңіз.", + title: "Құжатты оқи алмады", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/km_KH.ts b/packages/blinkid-ux-manager/src/ui/locales/km_KH.ts index 6aa67799..4c2aad4d 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/km_KH.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/km_KH.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "ជោគជ័យ! ផ្នែកខាងមុខត្រូវបានស្កេន", glare_detected: "ផ្អៀង ឬផ្លាស់ទីឯកសារ ដើម្បីលុបការឆ្លុះបញ្ចាំង", keep_document_parallel: "រក្សាឯកសារឲ្យស្របគ្នានឹងអេក្រង់", - keep_document_still: "រក្សាឯកសារ និងឧបករណ៍ឲ្យនៅនឹង", keep_still: "រក្សាឲ្យនឹង", move_closer: "ផ្លាស់ទីទៅជិត", move_farther: "ផ្លាស់ទីទៅឆ្ងាយ", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "ស្កេនបាកូដ", scan_the_barcode_side: "ស្កេនខាងបារកូដនៃឯកសារ", scan_the_front_side: "ស្កេនផ្នែកខាងមុខនៃឯកសារ", + scan_the_mrz_side: "ស្កេនចំហៀងសងខាង MRZ របស់ឯកសារ", scan_top_page: "ស្កេនទំព័រកំពូល", too_bright: "ផ្លាស់ទីទៅកន្លែងដែលមានពន្លឺតិច", too_dark: "ផ្លាស់ទីទៅកន្លែងភ្លឺជាង", @@ -115,6 +115,37 @@ export default { title_desktop: "រក្សាបារកូដឲ្យអាចមើលឃើញបាន", }, }, + document_with_mrz: { + blur: { + details: + "ព្យាយាមរក្សាទូរសព្ទ និងឯកសារឱ្យនៅដដែល ពេលកំពុងស្កេន។ ការផ្លាស់ទីទាំងពីរអាចធ្វើឱ្យរូបភាពព្រិល និងធ្វើឱ្យទិន្នន័យនៅលើឯកសារមិនអាចអានបាន។", + details_desktop: + "សូមព្យាយាមរក្សាឲ្យនឹងពេលកំពុងស្កេន។ ការធ្វើចលនាអាចធ្វើឲ្យរូបភាពព្រាល ហើយធ្វើឲ្យមិនអាចអានទិន្នន័យនៅលើឯកសារបាន។", + title: "រក្សាភាពស្ងៀមស្ងាត់ខណៈពេលកំពុងស្កេន", + title_desktop: "រក្សាភាពស្ងៀមស្ងាត់ខណៈពេលកំពុងស្កេន", + }, + camera_lens: { + details_desktop: + "ពិនិត្យកញ្ចក់កាមេរ៉ារកមើលស្នាមប្រឡាក់ ឬធូលី។ កញ្ចក់ប្រឡាក់អាចបណ្ដាលឲ្យរូបភាពចុងក្រោយព្រាល ដែលធ្វើឲ្យមិនអាចអានព័ត៌មានលម្អិតនៅលើឯកសារ និងរារាំងមិនឲ្យស្កេនទិន្នន័យបានជោគជ័យ។", + title_desktop: "សម្អាតកញ្ចក់កាមេរ៉ារបស់អ្នក។", + }, + lighting: { + details: + "ជៀសវាងពន្លឺខ្លាំងដោយផ្ទាល់ព្រោះវាឆ្លុះបញ្ចាំងពីឯកសារ ហើយអាចធ្វើឱ្យផ្នែកខ្លះនៃឯកសារមិនអាចអានបាន។ ប្រសិនបើអ្នកមិនអាចអានទិន្នន័យនៅលើឯកសារបានទេ វាក៏មិនអាចមើលឃើញដោយកាមេរ៉ាដែរ។", + details_desktop: + "ជៀសវាងពន្លឺខ្លាំងដោយផ្ទាល់ព្រោះវាឆ្លុះបញ្ចាំងពីឯកសារ ហើយអាចធ្វើឱ្យផ្នែកខ្លះនៃឯកសារមិនអាចអានបាន។ ប្រសិនបើអ្នកមិនអាចអានទិន្នន័យនៅលើឯកសារបានទេ វាក៏មិនអាចមើលឃើញដោយកាមេរ៉ាដែរ។", + title: "ប្រយ័ត្នចំពោះពន្លឺខ្លាំង", + title_desktop: "ប្រយ័ត្នចំពោះពន្លឺខ្លាំង", + }, + visibility: { + details: + "ត្រូវប្រាកដថា អ្នកមិនយកម្រាមដៃរបស់អ្នកមកបាំងផ្នែកនានារបស់ MRZ។ ដូចគ្នានេះផងដែឬ ត្រូវប្រយ័ត្ននឹងចំណាំងពន្លឺដែលឆ្លងកាត់ពីលើ MRZ និងអាចធ្វើឲ្យវាមិនអាចអានបាន។", + details_desktop: + "ត្រូវប្រាកដថា អ្នកមិនយកម្រាមដៃរបស់អ្នកមកបាំងផ្នែកនានារបស់ MRZ។ ដូចគ្នានេះផងដែឬ ត្រូវប្រយ័ត្ននឹងចំណាំងពន្លឺដែលឆ្លងកាត់ពីលើ MRZ និងអាចធ្វើឲ្យវាមិនអាចអានបាន។", + title: "រក្សា MRZ ឲ្យនៅតែអាចមើលឃើញ", + title_desktop: "រក្សា MRZ ឲ្យនៅតែអាចមើលឃើញ", + }, + }, done_btn: "រួចរាល់", done_btn_aria: "បន្តស្កេន", full_document: { @@ -163,12 +194,20 @@ export default { btn: "ចាប់ផ្តើមស្កេន", document_with_barcode: { details: - "ប្រភេទខុសៗគ្នានៃប័ណ្ណសម្គាល់អាចនឹងមានទ្រង់ទ្រាយ និងទីតាំងបារកូដខុសគ្នា។ សូមមើលទៅខាងមុខ និងខាងក្រោយនៃប័ណ្ណសម្គាល់រកមើលបារកូដ។", + "ប្រភេទឯកសារខុសគ្នាអាចនឹងមានទ្រង់ទ្រាយបារកូដ និងទីតាំងខុសគ្នា។ សូមពិនិត្យផ្នែកខាងមុខ និងខាងក្រោយនៃឯកសាររកមើលបារកូដ។", details_desktop: - "ពិនិត្យខាងមុខ និងខាងក្រោយនៃប័ណ្ណសម្គាល់រកមើលបារកូដ។ ត្រូវប្រាកដថា អ្នករក្សាកញ្ចក់កាមេរ៉ារបស់អ្នកស្អាត ហើយឯកសារត្រូវបានបំភ្លឺបានយ៉ាងល្អ។", - title: "រកទីតាំងបារកូដនៅលើប័ណ្ណសម្គាល់", + "សូមពិនិត្យផ្នែកខាងមុខ និងខាងក្រោយនៃឯកសាររកមើលបារកូដ។ ត្រូវប្រាកដថា អ្នករក្សាកញ្ចក់កាមេរ៉ារបស់អ្នកឲ្យស្អាត និងឯកសារភ្លឺច្បាស់ល្អ។", + title: "រកមើលទីតាំងបារកូដនៅលើឯកសារ", title_desktop: "សម្អាតកញ្ចក់របស់អ្នក ហើយរកទីតាំងបារកូដ", }, + document_with_mrz: { + details: + "អ្នកនឹងឃើញសំណុំអក្សរវែងនៅខាងក្រោមនៃផ្នែកខាងមុខ ឬខាងក្រោយរបស់ឯកសារ ដែលត្រូវបានចែកជា 2 ឬ 3 បន្ទាត់ និងញែកដោយសញ្ញាព្រួញ (<< ឬ >>)។", + details_desktop: + "សូមពិនិត្យផ្នែកខាងមុខ និងខាងក្រោយនៃឯកសាររកមើល MRZ។ រកមើល 2–3 បន្ទាត់ដែលមានតួអក្សរ និងនិម្មិតសញ្ញា (<<) នៅផ្នែកខាងក្រោមនៃឯកសារ។ ត្រូវប្រាកដថា អ្នករក្សាកញ្ចក់កាមេរ៉ារបស់អ្នកឲ្យស្អាត និងឯកសារភ្លឺច្បាស់ល្អ។", + title: "រកមើលទីតាំង MRZ នៅលើឯកសារ", + title_desktop: "សម្អាតកញ្ចក់កាមេរ៉ារបស់អ្នក និងរកទីតាំង MRZ", + }, full_document: { details: "ត្រូវប្រាកដថាអ្នករក្សាឯកសារឱ្យបានល្អ វាលឯកសារទាំងអស់គួរតែអាចមើលឃើញនៅលើអេក្រង់កាមេរ៉ា។", @@ -180,7 +219,9 @@ export default { }, sdk_aria: "អេក្រង់ស្កេនឯកសារ", timeout_modal: { - details: "មិនអាចអានឯកសារបានទេ។ សូមព្យាយាមម្តងទៀត។", - title: "ស្កេនមិនជោគជ័យ", + details: "ត្រូវប្រាកដថា ឯកសារភ្លឺច្បាស់ មើលឃើញពេញ និងគ្មានចំណាំងពន្លឺ។", + details_desktop: + "ត្រូវប្រាកដថា កញ្ចក់កាមេរ៉ារបស់អ្នកស្អាត ហើយឯកសារមើលឃើញពេញ ផ្ដោត និងភ្លឺច្បាស់។", + title: "មិនអាចអានឯកសារបានទេ", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ko.ts b/packages/blinkid-ux-manager/src/ui/locales/ko.ts index 020816c9..7b00d361 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ko.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ko.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "앞면 스캔 완료", glare_detected: "문서를 기울이거나 이동시켜 반사광을 피하세요", keep_document_parallel: "문서를 화면과 평행하게 유지하세요", - keep_document_still: "문서와 디바이스가 움직이지 않게 유지하세요", keep_still: "움직이지 마세요", move_closer: "더 가까이 이동", move_farther: "더 멀리 이동", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "바코드를 스캔하세요", scan_the_barcode_side: "문서의 바코드 면을 스캔하세요", scan_the_front_side: "문서의 앞면을 스캔하세요", + scan_the_mrz_side: "문서의 MRZ 면을 스캔하세요", scan_top_page: "상단 페이지를 스캔하세요", too_bright: "조명이 지금보다 약한 곳으로 이동하세요", too_dark: "지금보다 밝은 곳으로 이동하세요", @@ -115,6 +115,37 @@ export default { title_desktop: "바코드가 잘 보이도록 하세요", }, }, + document_with_mrz: { + blur: { + details: + "스캔하는 동안 스마트폰과 문서가 움직이지 않도록 하세요. 움직이면 이미지가 흐려지고 문서의 데이터를 읽을 수 없게 됩니다.", + details_desktop: + "스캔하는 동안 움직이지 않도록 하세요. 움직이면 이미지가 흐려져 문서의 데이터를 읽지 못할 수 있습니다.", + title: "스캔하는 동안 움직이지 마세요", + title_desktop: "스캔하는 동안 움직이지 마세요", + }, + camera_lens: { + details_desktop: + "카메라 렌즈에 지문이나 먼지가 묻어 있지 않은지 확인해 주세요. 렌즈에 이물질이 있으면 최종 이미지가 흐릿하게 촬영되어 문서 정보를 읽을 수 없으며, 데이터 스캔이 제대로 이루어지지 않을 수 있습니다.", + title_desktop: "카메라 렌즈를 닦아 주세요", + }, + lighting: { + details: + "강한 직사광선은 문서 표면에 반사되어 내용의 일부를 읽을 수 없게 만들 수 있으니 되도록 피하세요. 사람의 눈으로 문서의 데이터를 읽을 수 없으면 카메라에도 표시되지 않습니다.", + details_desktop: + "강한 직사광선은 문서 표면에 반사되어 내용의 일부를 읽을 수 없게 만들 수 있으니 되도록 피하세요. 사람의 눈으로 문서의 데이터를 읽을 수 없으면 카메라에도 표시되지 않습니다.", + title: "강한 빛을 주의하세요", + title_desktop: "강한 빛을 주의하세요", + }, + visibility: { + details: + "손가락으로 MRZ 일부를 가리지 않도록 주의하세요. 또한 MRZ 위에 반사광이 생기면 인식이 어려울 수 있으니 주의하세요.", + details_desktop: + "손가락으로 MRZ 일부를 가리지 않도록 주의하세요. 또한 MRZ 위에 반사광이 생기면 인식이 어려울 수 있으니 주의하세요.", + title: "MRZ가 잘 보이도록 유지하세요", + title_desktop: "MRZ가 잘 보이도록 유지하세요", + }, + }, done_btn: "완료", done_btn_aria: "스캔 재개", full_document: { @@ -163,12 +194,20 @@ export default { btn: "스캔 시작", document_with_barcode: { details: - "신분증 종류에 따라 바코드 형식과 위치가 다를 수 있습니다. 신분증 앞뒤에서 바코드를 확인하세요.", + "문서 종류에 따라 바코드 형식과 위치가 다를 수 있습니다. 문서 앞뒤에서 바코드를 확인하세요.", details_desktop: - "신분증 앞뒤에서 바코드를 확인하세요. 카메라 렌즈를 깨끗하게 유지하고 문서에 빛이 충분히 비치도록 하세요.", - title: "신분증에서 바코드를 찾으세요", + "문서 앞면과 뒷면에서 바코드를 확인하세요. 카메라 렌즈를 깨끗하게 유지하고 문서에 빛이 충분히 비치도록 하세요", + title: "문서에서 바코드를 찾으세요", title_desktop: "렌즈를 닦고 바코드를 찾으세요", }, + document_with_mrz: { + details: + "문서의 앞면 또는 뒷면 하단에서 화살표(<< 또는 >>)로 구분된 2~3줄의 긴 문자열을 찾을 수 있습니다.", + details_desktop: + "문서의 앞면과 뒷면에서 MRZ를 확인하세요. 문서 하단에 있는 2~3개의 문자열과 화살표 표시(<<)를 찾아보세요. 카메라 렌즈를 깨끗하게 유지하고, 문서에 빛이 충분히 비치도록 하세요.", + title: "문서에서 MRZ를 찾으세요", + title_desktop: "렌즈를 닦고 MRZ가 보이도록 하세요", + }, full_document: { details: "문서가 조명을 충분히 받을 수 있게 유지하세요. 모든 문서 내용들이 카메라 화면에 보여야 합니다.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "문서 스캔 화면", timeout_modal: { - details: "문서를 읽을 수 없습니다. 다시 시도하세요.", - title: "스캔 실패", + details: + "문서에 빛이 충분하고, 전체가 보이며, 빛이 반사되지 않는지 확인하세요.", + details_desktop: + "카메라 렌즈를 깨끗하게 유지하고 문서 전체가 보이며 선명하게 초점이 맞았는지 확인하세요. 문서에 빛이 충분한지 확인하세요.", + title: "문서를 읽을 수 없습니다", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/lv.ts b/packages/blinkid-ux-manager/src/ui/locales/lv.ts index 6042dadc..23d1289d 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/lv.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/lv.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Priekšpuse noskenēta veiksmīgi!", glare_detected: "Sasvērt vai pārvietot dokumentu, lai novērstu atspīdumu", keep_document_parallel: "Turiet dokumentu paralēli ekrānam", - keep_document_still: "Nekustiniet dokumentu un ierīci", keep_still: "Nekustieties", move_closer: "Pārvietot tuvāk", move_farther: "Pārvietot tālāk", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skenēt svītrkodu", scan_the_barcode_side: "Skenējiet dokumenta svītrkoda pusi", scan_the_front_side: "Skenēt dokumenta priekšpusi", + scan_the_mrz_side: "Noskenējiet to dokumenta pusi, kurā ir MRZ", scan_top_page: "Skenēt augšējo lapu", too_bright: "Pārvietot uz vietu ar mazāku apgaismojumu", too_dark: "Pārvietot uz vietu ar spilgtāku apgaismojumu", @@ -115,6 +115,37 @@ export default { title_desktop: "Turiet dokumentu tā, lai svītrkods būtu redzams", }, }, + document_with_mrz: { + blur: { + details: + "Skenēšanas laikā mēģiniet tālruni un dokumentu turēt nekustīgu. Pārvietojot vienu vai otru, attēls var būt izplūdis, un dokumenta dati var kļūt nesalasāmi.", + details_desktop: + "Skenēšanas laikā nekustieties. Pretējā gadījumā attēls var būt izplūdis, un dokumenta dati var kļūt nesalasāmi.", + title: "Skenēšanas laikā turēt nekustīgu", + title_desktop: "Skenēšanas laikā turēt nekustīgu", + }, + camera_lens: { + details_desktop: + "Pārbaudiet, vai uz kameras objektīva nav traipu vai putekļu. Ar netīru objektīvu uzņemts attēls būs izplūdis, un informācija dokumentā nebūs salasāma un noskenējama.", + title_desktop: "Notīriet kameras objektīvu", + }, + lighting: { + details: + "Izvairieties no tiešas spilgtas gaismas, jo tā atstarojas no dokumenta un var padarīt atsevišķas dokumenta daļas nelasāmas. Ja nevarat izlasīt dokumentā esošos datus, tos neredz arī kamera.", + details_desktop: + "Izvairieties no tiešas spilgtas gaismas, jo tā atstarojas no dokumenta un var padarīt atsevišķas dokumenta daļas nelasāmas. Ja nevarat izlasīt dokumentā esošos datus, tos neredz arī kamera.", + title: "Uzmanieties no spilgtas gaismas", + title_desktop: "Uzmanieties no spilgtas gaismas", + }, + visibility: { + details: + "Pārliecinieties, ka neaizsedzat daļu MRZ ar pirkstu. Pārbaudiet arī to, vai MRZ neietekmē atspīdumi, kas var neļaut to nolasīt.", + details_desktop: + "Pārliecinieties, ka neaizsedzat daļu MRZ ar pirkstu. Pārbaudiet arī to, vai MRZ neietekmē atspīdumi, kas var neļaut to nolasīt.", + title: "Turiet dokumentu tā, lai būtu redzama MRZ", + title_desktop: "", + }, + }, done_btn: "Gatavs", done_btn_aria: "Atsākt skenēšanu", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Sāciet skenēšanu", document_with_barcode: { details: - "Dažādiem personu apliecinošajiem dokumentiem var būt dažādi svītrkoda formāti un atrašanās vietas. Lai atrastu svītrkodu, aplūkojiet personu apliecinošā dokumenta priekšpusi un aizmuguri.", + "Dažādiem dokumentiem var būt dažādi svītrkoda formāti un atrašanās vietas. Lai atrastu svītrkodu, aplūkojiet dokumenta priekšpusi un aizmuguri.", details_desktop: - "Lai atrastu svītrkodu, pārbaudiet personu apliecinošā dokumenta priekšpusi un aizmuguri. Pārliecinieties, ka kameras objektīvs ir tīrs, un svītrkods ir labi apgaismots.", - title: "Atrodiet svītrkodu uz personu apliecinošā dokumenta", + "Lai atrastu svītrkodu, pārbaudiet dokumenta priekšpusi un aizmuguri. Pārliecinieties, ka kameras objektīvs ir tīrs un dokuments ir labi apgaismots.", + title: "Atrodiet dokumentā svītrkodu", title_desktop: "Notīriet objektīvu un atrodiet svītrkodu", }, + document_with_mrz: { + details: + "Dokumenta priekšpuses vai aizmugures apakšdaļā jūs atradīsiet garu virkni rakstzīmju, kas ir izvietota 2–3 rindās un sadalīta ar bultiņām (<< vai >>).", + details_desktop: + "Lai atrastu MRZ, pārbaudiet dokumenta priekšpusi un aizmuguri. Meklējiet dokumenta apakšdaļā 2-3 rindas rakstzīmju un bultiņu simbolu (<<). Pārliecinieties, ka kameras objektīvs ir tīrs un dokuments ir labi apgaismots.", + title: "Atrodiet dokumentā MRZ", + title_desktop: "Notīriet kameras objektīvu un atrodiet MRZ", + }, full_document: { details: "Pārliecinieties, vai dokuments ir labi apgaismots. Kameras ekrānā jābūt redzamiem visiem dokumenta laukiem.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Dokumenta skenēšanas ekrāns", timeout_modal: { - details: "Nevar nolasīt dokumentu. Lūdzu, mēģiniet vēlreiz.", - title: "Skenēšana neizdevās", + details: + "Pārliecinieties, ka dokuments ir labi apgaismots, pilnībā redzams un to neietekmē atspīdums.", + details_desktop: + "Pārliecinieties, ka kameras objektīvs ir tīrs un dokuments ir pilnībā redzams, fokusā un labi apgaismots.", + title: "Nevar nolasīt dokumentu", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ms.ts b/packages/blinkid-ux-manager/src/ui/locales/ms.ts index 4f1a9095..5597d7a0 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ms.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ms.ts @@ -28,7 +28,6 @@ export default { glare_detected: "Sengetkan atau gerakkan dokumen untuk mengelakkan pantulan cahaya", keep_document_parallel: "Pastikan dokumen sentiasa selari dengan skrin", - keep_document_still: "Pastikan dokumen dan peranti tidak bergegar", keep_still: "Jangan bergerak", move_closer: "Dekatkan lagi", move_farther: "Jauhkan lagi", @@ -44,6 +43,7 @@ export default { scan_the_barcode: "Imbas kod bar", scan_the_barcode_side: "Imbas bahagian kod bar dokumen", scan_the_front_side: "Imbas bahagian hadapan\\ndokumen", + scan_the_mrz_side: "Imbas bahagian dokumen yang mengandungi MRZ.", scan_top_page: "Imbas halaman sebelah atas", too_bright: "Beralih ke tempat yang kurang pencahayaan", too_dark: "Beralih ke tempat yang lebih cerah", @@ -117,6 +117,37 @@ export default { title_desktop: "Pastikan kod bar kelihatan", }, }, + document_with_mrz: { + blur: { + details: + "Cuba kekalkan kedudukan telefon dan dokumen semasa mengimbas. Menggerakkan kedua-duanya boleh mengaburkan imej dan menjadikan data dalam dokumen tidak dapat dibaca.", + details_desktop: + "Cuba kekalkan kedudukan semasa mengimbas. Pergerakan boleh mengaburkan imej dan menyebabkan data pada dokumen tidak dapat dibaca.", + title: "Kekalkan kedudukan semasa mengimbas", + title_desktop: "Kekalkan kedudukan semasa mengimbas", + }, + camera_lens: { + details_desktop: + "Periksa lensa kamera anda untuk memastikan tiada kesan kotoran atau habuk. Lensa yang kotor akan menyebabkan imej akhir menjadi kabur, menyebabkan butiran dokumen sukar dibaca dan imbasan data gagal.", + title_desktop: "Bersihkan lensa kamera anda", + }, + lighting: { + details: + "Jauhi cahaya yang boleh menyilaukan mata kerana cahaya tersebut dipantulkan daripada dokumen dan boleh membuatkan sebahagian daripada dokumen tersebut tidak dapat dibaca. Jika anda tidak dapat membaca data dalam dokumen, data tersebut juga tidak akan kelihatan pada kamera.", + details_desktop: + "Jauhi cahaya yang boleh menyilaukan mata kerana cahaya tersebut dipantulkan daripada dokumen dan boleh membuatkan sebahagian daripada dokumen tersebut tidak dapat dibaca. Jika anda tidak dapat membaca data dalam dokumen, data tersebut juga tidak akan kelihatan pada kamera.", + title: "Jaga-jaga dengan cahaya yang menyilaukan mata", + title_desktop: "Jaga-jaga dengan cahaya yang menyilaukan mata", + }, + visibility: { + details: + "Pastikan tiada bahagian MRZ yang terlindung oleh jari anda. Selain itu, pastikan tiada pantulan cahaya pada MRZ yang boleh menyebabkannya sukar atau gagal dibaca.", + details_desktop: + "Pastikan tiada bahagian MRZ yang terlindung oleh jari anda. Selain itu, pastikan tiada pantulan cahaya pada MRZ yang boleh menyebabkannya sukar atau gagal dibaca.", + title: "Pastikan MRZ jelas kelihatan.", + title_desktop: "Pastikan MRZ jelas kelihatan.", + }, + }, done_btn: "Siap", done_btn_aria: "Sambung mengimbas", full_document: { @@ -165,12 +196,20 @@ export default { btn: "Mula Mengimbas", document_with_barcode: { details: - "Jenis ID yang berbeza mungkin mempunyai format dan lokasi kod bar yang berbeza. Periksa bahagian hadapan dan belakang ID untuk mencari kod bar.", + "Jenis dokumen yang berbeza mungkin mempunyai format dan lokasi kod bar yang berbeza. Lihat bahagian depan dan belakang dokumen untuk kod bar.", details_desktop: - "Periksa bahagian hadapan dan belakang ID untuk mencari kod bar. Pastikan lensa kamera anda bersih dan dokumen mendapat pencahayaan yang baik.", - title: "Cari kod bar pada ID", + "Periksa bahagian hadapan dan belakang dokumen untuk mencari kod bar. Pastikan lensa kamera anda bersih dan dokumen mempunyai pencahayaan yang mencukupi.", + title: "Cari kod bar pada dokumen", title_desktop: "Bersihkan lensa kamera anda dan cari kod bar.", }, + document_with_mrz: { + details: + "Anda akan menemukan rentetan aksara yang panjang di bahagian bawah muka hadapan atau belakang dokumen, terdiri daripada 2 atau 3 baris dan dipisahkan oleh simbol anak panah (<< atau >>).", + details_desktop: + "Periksa bahagian hadapan dan belakang dokumen untuk mencari MRZ. Cari 2 hingga 3 baris aksara bersama simbol (<<) di bahagian bawah dokumen. Pastikan lensa kamera bersih dan dokumen diterangi dengan baik.", + title: "Kenal pasti MRZ pada dokumen.", + title_desktop: "Bersihkan lensa dan cari MRZ.", + }, full_document: { details: "Pastikan dokumen anda menerima pencahayaan yang cukup. Semua medan dokumen hendaklah kelihatan pada skrin kamera.", @@ -182,7 +221,10 @@ export default { }, sdk_aria: "Skrin mengimbas dokumen", timeout_modal: { - details: "Tidak dapat membaca dokumen. Sila cuba semula.", - title: "Pengimbasan tidak berjaya", + details: + "Pastikan dokumen mempunyai pencahayaan yang mencukupi, kelihatan sepenuhnya dan bebas daripada silau.", + details_desktop: + "Pastikan lensa kamera bersih dan keseluruhan dokumen dapat dilihat dengan jelas, berada dalam fokus serta diterangi dengan baik.", + title: "Dokumen tidak dapat dibaca.", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ne.ts b/packages/blinkid-ux-manager/src/ui/locales/ne.ts index 5b4835f3..0d1bb9e5 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ne.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ne.ts @@ -29,7 +29,6 @@ export default { front_side_scanned_aria: "पूरा भयो! अगाडिपट्टिको भाग स्क्यान भयो", glare_detected: "रिफ्लेक्सन हटाउन कागजात ढल्क्याउनुहोस् वा हटाउनुहोस्", keep_document_parallel: "स्क्रिनलाई कागजातको ठीक माथि सीधा राख्नुहोस्", - keep_document_still: "कागजात र डिभाइस नहल्लाई राख्नुहोस्", keep_still: "नहल्लाई बस्नुहोस्", move_closer: "नजिक जानुहोस्", move_farther: "पर जानुहोस्", @@ -45,6 +44,7 @@ export default { scan_the_barcode: "बारकोड स्क्यान गर्नुहोस्", scan_the_barcode_side: "कागजातको बारकोड भएको भाग स्क्यान गर्नुहोस्", scan_the_front_side: "कागजातको अगाडिपट्टिको भाग स्क्यान गर्नुहोस्", + scan_the_mrz_side: "कागजातको MRZ भएको भाग स्क्यान गर्नुहोस्", scan_top_page: "माथिल्लो पृष्ठ स्क्यान गर्नुहोस्", too_bright: "कम उज्यालो स्पटमा जानुहोस्", too_dark: "सबैभन्दा चम्किलो स्पटमा जानुहोस्", @@ -118,6 +118,37 @@ export default { title_desktop: "बारकोड स्पष्ट देखिने गरी राख्नुहोस्", }, }, + document_with_mrz: { + blur: { + details: + "स्क्यान गर्दा फोन वा कागजात स्थिर राख्न प्रयास गर्नुहोस्। दुबैमध्ये एउटा मात्रा चल्दा पनि तस्वीर धमिलो हुन सक्छ र कागजातमा भएको डाटा पढ्न नसकिने हुन सक्छ।", + details_desktop: + "स्क्यान गर्दा नहल्लाउने प्रयास गर्नुहोस्। हल्लिनाले तस्बिर धमिलो हुन सक्छ र बारकोड पढ्न गाह्रो हुन सक्छ।", + title: "स्क्यान गर्दा नहल्लिनुहोस्", + title_desktop: "स्क्यान गर्दा नहल्लिनुहोस्", + }, + camera_lens: { + details_desktop: + "आफ्नो क्यामेराको लेन्समा औँठाको छाप वा धुलो छ कि भनेर जाँच गर्नुहोस्। फोहोर लेन्सले गर्दा अन्तिम फोटो धमिलो आउँछ र कागजातको विवरण पढ्न सकिँदैन र डेटा स्क्यान हुन पाउँदैन।", + title_desktop: "आफ्नो क्यामेराको लेन्स सफा गर्नुहोस्", + }, + lighting: { + details: + "कागजातमा रिफ्लेक्सन आउने र केही भाग पढ्न नसकिने हुँदा सिधा र कडा प्रकाशबाट बच्नुहोस्। तपाईंले कागजातमा रहेका डाटा पढ्न सक्नु भएन भने क्यामेरामा पनि देख्न सक्दैन।", + details_desktop: + "कागजातमा रिफ्लेक्सन आउने र केही भाग पढ्न नसकिने हुँदा सिधा र कडा प्रकाशबाट बच्नुहोस्। तपाईंले कागजातमा रहेका डाटा पढ्न सक्नु भएन भने क्यामेरामा पनि देख्न सक्दैन।", + title: "तेजिलो प्रकाशबाट जोगिनुहोस्।", + title_desktop: "तेजिलो प्रकाशबाट जोगिनुहोस्।", + }, + visibility: { + details: + "MRZ को कुनै पनि भाग औँलाले नछोप्नुहोस्। साथै, MRZ मा उज्यालो टल्किएको छ कि छैन हेर्नुहोस्, टल्केको भाग क्यामेराले चिन्न सक्दैन।", + details_desktop: + "MRZ को कुनै पनि भाग औँलाले नछोप्नुहोस्। साथै, MRZ मा उज्यालो टल्किएको छ कि छैन हेर्नुहोस्, टल्केको भाग क्यामेराले चिन्न सक्दैन।", + title: "MRZ स्पष्ट देखिने गरी राख्नुहोस्", + title_desktop: "MRZ स्पष्ट देखिने गरी राख्नुहोस्", + }, + }, done_btn: "भयो", done_btn_aria: "स्क्यानिङ पुन: सुरु गर्नुहोस्", full_document: { @@ -166,12 +197,20 @@ export default { btn: "स्क्यान सुरु गर्नुहोस्", document_with_barcode: { details: - "परिचयपत्र अनुसार बारकोडको रूप र यो कहाँ हुन्छ भन्ने कुरा फरक पर्न सक्छ। त्यसैले, बारकोड खोज्नका लागि आफ्नो कार्डको अगाडि र पछाडि दुवैतिर राम्ररी हेर्नुहोस्।", + "कागजात अनुसार बारकोडको रूप र यो कहाँ हुन्छ भन्ने कुरा फरक पर्न सक्छ। त्यसैले, बारकोड खोज्नका लागि आफ्नो कागजातको अगाडि र पछाडि दुवैतिर राम्ररी हेर्नुहोस्।", details_desktop: - "परिचयपत्रको अगाडि र पछाडि बारकोड छ कि जाँच गर्नुहोस्। आफ्नो क्यामेराको लेन्स सफा राख्नुहोस् र कागजातमा पर्याप्त उज्यालो पार्नुहोस्।", - title: "परिचयपत्रमा बारकोड कहाँ छ खोज्नुहोस्", + "बारकोडका लागि कागजातको अगाडिको र पछाडिको दुवै भाग जाँच गर्नुहोस्। क्यामेराको लेन्स सफा राख्नुहोस् र कागजातमा पर्याप्त उज्यालो पार्नुहोस्।", + title: "कागजातमा बारकोड भएको भाग पत्ता लगाउनुहोस्", title_desktop: "लेन्सलाई एक पटक पुछ्नुहोस् र बारकोड कहाँ छ, हेर्नुहोस्", }, + document_with_mrz: { + details: + "तपाईंले कागजातको अगाडि वा पछाडिको भागको तल्लो तर्फ अक्षर र अंकहरूको एउटा लामो लहर भेट्टाउनुहुनेछ, जुन 2 वा 3 हरफमा विभाजित भई तीरका चिह्नहरू (<< वा >>) द्वारा छुट्याइएको हुन्छ।", + details_desktop: + "कागजातको अगाडि र पछाडिको भागमा MRZ छ कि छैन जाँच गर्नुहोस्। कागजातको तल्लो भागमा 2-3 लाइनका अक्षरहरू र तीरका संकेतहरू (<<) खोज्नुहोस्। आफ्नो क्यामेराको लेन्स सफा राख्नुहोस् र कागजातमा पर्याप्त उज्यालो पार्नुहोस्।", + title: "कागजातको MRZ भएको भाग पत्ता लगाउनुहोस्", + title_desktop: "लेन्सलाई एक पटक पुछ्नुहोस् र MRZ कहाँ छ पत्ता लगाउनुहोस्", + }, full_document: { details: "कागजात उज्यालो राख्नुहोस्। सबै कागजात फिल्ड क्यामेरा स्क्रिनमा देखिने हुनुपर्छ।", @@ -183,7 +222,10 @@ export default { }, sdk_aria: "कागजात स्क्यान गर्ने स्क्रिन", timeout_modal: { - details: "कागजात पढ्न सकेन। कृपया पुन: प्रेस गर्नुहोस्।", - title: "स्क्यान हुन सकेन", + details: + "कागजात पर्याप्त उज्यालोमा रहेको, पूर्ण रूपमा देखिएको र नचम्किएको हुनुपर्छ।", + details_desktop: + "आफ्नो क्यामेराको लेन्स सफा राख्नुहोस्। कागजात पूर्ण रूपमा देखिएको, स्पष्ट फोकसमा रहेको र पर्याप्त उज्यालो भएको हुनुपर्छ।", + title: "कागजात पढ्न सकेन", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/nl.ts b/packages/blinkid-ux-manager/src/ui/locales/nl.ts index 25269c40..f92fb500 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/nl.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/nl.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Kantel of verplaats het document om de reflectie te verwijderen", keep_document_parallel: "Houd het document parallel aan het scherm", - keep_document_still: "Houd het document en het toestel stil", keep_still: "Niet bewegen", move_closer: "Beweeg dichterbij", move_farther: "Beweeg verder weg", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Scan de barcode", scan_the_barcode_side: "Scan de kant van het document met de barcode", scan_the_front_side: "Scan de voorzijde\\nvan een document", + scan_the_mrz_side: "Scan de MRZ-zijde van een document", scan_top_page: "Scan de bovenste pagina", too_bright: "Ga na een plek met minder licht", too_dark: "Ga naar een lichtere plek", @@ -116,6 +116,37 @@ export default { title_desktop: "Zorg dat de barcode zichtbaar is.", }, }, + document_with_mrz: { + blur: { + details: + "Probeer de telefoon en het document tijdens het scannen stil te houden. Als u een van beide beweegt, kan de afbeelding wazig worden en kunnen gegevens op het document onleesbaar worden.", + details_desktop: + "Probeer niet te bewegen tijdens het scannen. Door beweging kan de afbeelding onscherp worden en de gegevens op het document onleesbaar.", + title: "Beweeg niet tijdens het scannen", + title_desktop: "Beweeg niet tijdens het scannen", + }, + camera_lens: { + details_desktop: + "Controleer dat er geen vlekken of stof op de lens van uw camera zitten. Een vuile lens zorgt ervoor dat de uiteindelijke afbeelding wazig wordt, waardoor de documentgegevens onleesbaar worden en de gegevens niet goed kunnen worden gescand.", + title_desktop: "Maak de lens van uw camera schoon", + }, + lighting: { + details: + "Vermijd direct fel licht, omdat dat vanaf het document weerspiegelt en delen van het document onleesbaar kan maken. Als u gegevens op het document niet kunt lezen, zijn ze voor de camera ook niet zichtbaar.", + details_desktop: + "Vermijd direct fel licht, omdat dat vanaf het document weerspiegelt en delen van het document onleesbaar kan maken. Als u gegevens op het document niet kunt lezen, zijn ze voor de camera ook niet zichtbaar.", + title: "Pas op voor fel licht", + title_desktop: "Pas op voor fel licht", + }, + visibility: { + details: + "Zorg ervoor dat u geen delen van de MRZ met een vinger bedekt. Pas ook op voor reflecties die op de MRZ vallen en deze onleesbaar kunnen maken.", + details_desktop: + "Zorg ervoor dat u geen delen van de MRZ met een vinger bedekt. Pas ook op voor reflecties die op de MRZ vallen en deze onleesbaar kunnen maken.", + title: "Houd de MRZ zichtbaar", + title_desktop: "Houd de MRZ zichtbaar", + }, + }, done_btn: "Gereed", done_btn_aria: "Verder met scannen", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Beginnen met scannen", document_with_barcode: { details: - "Verschillende soorten ID's kunnen verschillende soorten barcodes hebben. Deze kunnen op verschillende plaatsen zitten. Kijk goed naar de voorkant en achterkant van de ID voor de barcode.", + "Verschillende soorten documenten kunnen verschillende formaten en locaties van de streepjescode hebben. Kijk op de voor- en achterzijde van het document voor een streepjescode.", details_desktop: - "Zoek aan de voorkant of achterkant van de ID voor een barcode. Zorg ervoor dat je cameralens schoon is en het document goed belicht is.", - title: "Zoek de barcode op de ID.", + "Zoek aan de voorkant of achterkant van het document voor een barcode. Zorg ervoor dat je cameralens schoon is en het document goed belicht is.", + title: "Lokaliseer de streepjescode op het document", title_desktop: "Maak je lens schoon en zoek de barcode.", }, + document_with_mrz: { + details: + "U zult een lange reeks tekens vinden onderaan de voor- of achterzijde van het document, verdeeld over 2 of 3 lijnen en gescheiden door pijlen (<< of >>).", + details_desktop: + "Zoek aan de voor- en achterkant van het document naar een MRZ. Let op 2–3 lijnen met tekens en pijltjes (<<) onderaan het document. Zoek aan de voorkant of achterkant van het document voor een barcode. Zorg ervoor dat je cameralens schoon is en het document goed belicht is.", + title: "Lokaliseer MRZ op het document", + title_desktop: "Maak je lens schoon en zoek de MRZ.", + }, full_document: { details: "Zorg ervoor dat het document goed verlicht is. Alle velden op het document moeten onder het camerascherm zichtbaar zijn.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Scherm voor documenten scannen", timeout_modal: { - details: "Kon het document niet lezen. Probeer het alstublieft opnieuw.", - title: "Scan niet gelukt", + details: + "Zorg ervoor dat het document goed verlicht en volledig zichtbaar is en of er geen schitteringen op te zien zijn.", + details_desktop: + "Zorg ervoor dat de cameralens schoon is en dat het document helemaal zichtbaar, scherp en goed verlicht is.", + title: "Kan het document niet lezen.", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/no.ts b/packages/blinkid-ux-manager/src/ui/locales/no.ts index 34c363e5..5837bee9 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/no.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/no.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Skanning av forsiden vellykket!", glare_detected: "Vipp eller flytt dokumentet for å fjerne refleksjon", keep_document_parallel: "Hold dokumentet parallelt med skjermen", - keep_document_still: "Hold dokumentet og enheten i ro", keep_still: "Hold enheten i ro", move_closer: "Flytt nærmere", move_farther: "Flytt lenger bort", @@ -43,6 +42,7 @@ export default { scan_the_barcode_side: "Skann siden av ID-en som strekkoden befinner seg på", scan_the_front_side: "Skann forsiden av dokumentet", + scan_the_mrz_side: "Skann MRZ-siden av et dokument", scan_top_page: "Skann den øverste siden", too_bright: "Flytt til et sted med mindre belysning", too_dark: "Flytt til et lysere sted", @@ -116,6 +116,37 @@ export default { title_desktop: "Hold strekkoden synlig", }, }, + document_with_mrz: { + blur: { + details: + "Forsøk å holde telefonen og dokumentet i ro under skanningen. Å bevege dem kan føre til at bildet blir uskarpt og dataene i dokumentet uleselige.", + details_desktop: + "Hold enheten i ro når du skanner. Bevegelse kan gjøre bildet uskarpt og føre til at dataene blir uleselige.", + title: "Stå i ro under skanningen", + title_desktop: "Stå i ro under skanningen", + }, + camera_lens: { + details_desktop: + "Sjekk om det er støv eller flekker på kameralinsen. En skitten linse gjør at bildet blir uskarpt, noe som fører til at informasjonen i dokumentet blir uleselig og ikke skannes ordentlig.", + title_desktop: "Rens kameralinsen din", + }, + lighting: { + details: + "Unngå direkte hardt lys fordi det gjenspeiles i dokumentet og kan føre til at deler av dokumentet blir uleselig. Hvis ikke du kan lese det som står i dokumentet, blir det heller ikke synlig for kamera.", + details_desktop: + "Unngå direkte hardt lys fordi det gjenspeiles i dokumentet og kan føre til at deler av dokumentet blir uleselig. Hvis ikke du kan lese det som står i dokumentet, blir det heller ikke synlig for kamera.", + title: "Se opp for hardt lys", + title_desktop: "Se opp for hardt lys", + }, + visibility: { + details: + "Sørg for at du ikke dekker over deler av MRZ med fingeren. Vær også oppmerksom på refleksjoner som strekker seg over MRZ og kan gjøre sonen uleselig.", + details_desktop: + "Sørg for at du ikke dekker over deler av MRZ med fingeren. Vær også oppmerksom på refleksjoner som strekker seg over MRZ og kan gjøre sonen uleselig.", + title: "Hold MRZ synlig", + title_desktop: "Hold MRZ synlig", + }, + }, done_btn: "Ferdig", done_btn_aria: "Fortsett å skanne", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Start skanning", document_with_barcode: { details: - "Ulike typer ID-er har ulike typer strekkoder plassert på ulike steder. Strekkoden kan befinne seg på både forsiden og baksiden av ID-en.", + "Ulike typer dokumenter kan ha strekkoder i ulike formater og på ulike steder. Se etter en strekkode både på forsiden og baksiden av dokumentet.", details_desktop: - "Se etter en strekkode på forsiden eller baksiden av ID-en. Sørg for at kameralinsen er ren og at dokumentet er godt opplyst.", - title: "Finn strekkoden på ID-en", + "Se etter en strekkode på forsiden eller baksiden av dokumentet. Sørg for at kameralinsen er ren og at dokumentet er godt opplyst.", + title: "Finn strekkoden på dokumentet", title_desktop: "Tørk av kameralinsen og finn strekkoden", }, + document_with_mrz: { + details: + "Du finner en lang rekke med tegn på bunnen av forsiden eller baksiden av dokumentet, delt inn i 2–3 linjer og skilt med piler (<< eller >>).", + details_desktop: + "Sjekk om det er en MRZ på forsiden eller baksiden av dokumentet. Se etter 2–3 linjer med tegn og pilsymboler (<<) nederst på dokumentet. Sørg for at kameralinsen er ren og at dokumentet er godt opplyst.", + title: "Finn MRZ på dokumentet", + title_desktop: "Rens kameralinsen og finn MRZ", + }, full_document: { details: "Sørg for at dokumentet er godt opplyst. Alle feltene i dokumentet skal være synlige på kameraskjermen.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Dokumentskanningside", timeout_modal: { - details: "Kunne ikke lese dokumentet. Prøv igjen.", - title: "Skanning mislyktes", + details: + "Sørg for at dokumentet er godt opplyst, helt synlig og uten gjenskinn.", + details_desktop: + "Sørg for at kameralinsen er ren og at dokumentet er helt synlig, godt opplyst og i fokus.", + title: "Kunne ikke lese dokumentet", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/pl.ts b/packages/blinkid-ux-manager/src/ui/locales/pl.ts index 5722fa72..41c251e5 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/pl.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/pl.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Udało się! Zeskanowano przednią stronę", glare_detected: "Przechyl lub przesuń dokument, aby usunąć odbicie światła", keep_document_parallel: "Trzymaj dokument równolegle do ekranu", - keep_document_still: "Trzymaj dokument i urządzenie nieruchomo", keep_still: "Nie ruszaj się", move_closer: "Przesuń bliżej", move_farther: "Przesuń dalej", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Zeskanuj kod kreskowy", scan_the_barcode_side: "Zeskanuj stronę dokumentu z kodem kreskowym", scan_the_front_side: "Zeskanuj przednią stronę dokumentu", + scan_the_mrz_side: "Zeskanuj stronę dokumentu ze strefą MRZ", scan_top_page: "Zeskanuj górną stronę", too_bright: "Przejdź w mniej oświetlone miejsce", too_dark: "Przejdź w jaśniejsze miejsce", @@ -116,6 +116,37 @@ export default { title_desktop: "Upewnij się, że kod kreskowy jest widoczny", }, }, + document_with_mrz: { + blur: { + details: + "Staraj się trzymać telefon i dokument nieruchomo podczas skanowania. Poruszanie którymkolwiek z nich może spowodować rozmazanie obrazu i uniemożliwić odczyt danych z dokumentu.", + details_desktop: + "Staraj się nie ruszać podczas skanowania. Ruch może rozmyć obraz i sprawić, że dane na dokumencie staną się nieczytelne.", + title: "Nie ruszaj się podczas skanowania", + title_desktop: "Nie ruszaj się podczas skanowania", + }, + camera_lens: { + details_desktop: + "Sprawdź, czy obiektyw aparatu nie jest zabrudzony lub zakurzony. Zabrudzenia mogą powodować rozmycie obrazu, przez co szczegóły dokumentu stają się nieczytelne, a ich zeskanowanie niemożliwe.", + title_desktop: "Wyczyść obiektyw aparatu", + }, + lighting: { + details: + "Unikaj bezpośredniego silnego światła, ponieważ odbija się od dokumentu i niektóre jego części mogą stać się nieczytelne. Jeśli nie możesz odczytać danych z dokumentu, nie będą one widoczne również dla aparatu.", + details_desktop: + "Unikaj bezpośredniego silnego światła, ponieważ odbija się od dokumentu i niektóre jego części mogą stać się nieczytelne. Jeśli nie możesz odczytać danych z dokumentu, nie będą one widoczne również dla aparatu.", + title: "Uważaj na silne światło", + title_desktop: "Uważaj na silne światło", + }, + visibility: { + details: + "Upewnij się, że nie zasłaniasz palcem żadnej części strefy MRZ. Uważaj też na odbicia światła na strefie MRZ, które mogą utrudnić jej odczytanie.", + details_desktop: + "Upewnij się, że nie zasłaniasz palcem żadnej części strefy MRZ. Uważaj też na odbicia światła na strefie MRZ, które mogą utrudnić jej odczytanie.", + title: "Upewnij się, że strefa MRZ jest widoczna", + title_desktop: "Upewnij się, że strefa MRZ jest widoczna", + }, + }, done_btn: "Gotowe", done_btn_aria: "Wznów skanowanie", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Rozpocznij skanowanie", document_with_barcode: { details: - "Różne typy dokumentów tożsamości mogą mieć odmienne formaty kodów kreskowych oraz ich umiejscowienie. Obejrzyj przód i tył dokumentu, aby znaleźć kod kreskowy.", + "Różne typy dokumentów mogą mieć odmienne formaty kodów kreskowych oraz ich umiejscowienie. Obejrzyj przód i tył dokumentu, aby znaleźć kod kreskowy.", details_desktop: - "Sprawdź przód i tył dokumentu tożsamości, aby znaleźć kod kreskowy. Upewnij się, że obiektyw aparatu jest czysty, a dokument dobrze oświetlony.", - title: "Znajdź kod kreskowy na dowodzie tożsamości", + "Sprawdź przód i tył dokumentu, aby znaleźć kod kreskowy. Upewnij się, że obiektyw aparatu jest czysty, a dokument dobrze oświetlony.", + title: "Zlokalizuj kod kreskowy na dokumencie", title_desktop: "Wyczyść obiektyw i znajdź kod kreskowy", }, + document_with_mrz: { + details: + "Na dole przedniej lub tylnej strony dokumentu znajdziesz długi ciąg znaków, podzielony na 2 lub 3 wiersze i oddzielony strzałkami (<< lub >>).", + details_desktop: + "Sprawdź przód i tył dokumentu pod kątem strefy MRZ. Poszukaj 2–3 linii znaków i symboli strzałek (<<) na dole dokumentu. Upewnij się, że obiektyw aparatu jest czysty, a dokument dobrze oświetlony.", + title: "Znajdź strefę MRZ na dokumencie", + title_desktop: "Wyczyść obiektyw i zlokalizuj strefę MRZ", + }, full_document: { details: "Upewnij się, że dokument jest dobrze oświetlony. Wszystkie pola dokumentu powinny być widoczne na ekranie aparatu.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Ekran skanowania dokumentów", timeout_modal: { - details: "Nie można odczytać dokumentu. Spróbuj ponownie.", - title: "Nieudane skanowanie", + details: + "Upewnij się, że dokument jest dobrze oświetlony, w pełni widoczny i bez odblasków.", + details_desktop: + "Upewnij się, że obiektyw aparatu jest czysty, a dokument w pełni widoczny, wyraźny i dobrze oświetlony.", + title: "Nie można odczytać dokumentu.", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ps_AF.ts b/packages/blinkid-ux-manager/src/ui/locales/ps_AF.ts index 0563d3ec..d164e73a 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ps_AF.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ps_AF.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "د مخې سکن په بریالیتوب ترسره شو!", glare_detected: "د انعکاس لرې کولو لپاره سند ټیټ کړئ یا حرکت ورکړئ", keep_document_parallel: "سند له سکرین سره موازي وساتئ", - keep_document_still: "سند او وسیله بې‌حرکته وساتئ", keep_still: "مه یې خوځوئ", move_closer: "نږدې شه", move_farther: "نور لاړ شه", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "بارکوډ سکین کړئ", scan_the_barcode_side: "د سند د بارکوډ برخه سکن کړئ", scan_the_front_side: "د سند مخکینۍ برخه سکین کړئ", + scan_the_mrz_side: "د سند د MRZ برخه سکن کړئ", scan_top_page: "پورته پاڼه سکین کړئ", too_bright: "هغه ځای ته لاړ شئ چې لږ رڼا ولري", too_dark: "روښانه ځای ته لاړ شئ", @@ -115,6 +115,37 @@ export default { title_desktop: "بارکوډ باید د لیدلو وړ وي", }, }, + document_with_mrz: { + blur: { + details: + "هڅه وکړئ چې د سکین کولو پرمهال تلیفون او سند ارام وساتئ. د دواړو خواوو ته حرکت ورکول کولی شي عکس تیاره کړي او په سند کې معلومات د لوستلو وړ نه کړي.", + details_desktop: + "هڅه وکړئ د سکن کولو پر مهال کامره و نه خوځوئ. خوځول د انځور د تت کېدو لامل کېږي او د معلوماتو لوستل ستونزمنېږي.", + title: "د سکین کولو پرمهال ارام پاتې شئ", + title_desktop: "د سکین کولو پرمهال ارام پاتې شئ", + }, + camera_lens: { + details_desktop: + "خپله د کمرې لینز د داغونو یا دوړو لپاره وګورئ. چټل لینز د وروستي انځور د خړپړ کېدو لامل ګرځي، چې له امله یې د کارت جزئیات د لوستلو وړ نه وي او د معلوماتو بریالی سکین مخه نیسي.", + title_desktop: "خپل د کمرې لینز پاک کړئ", + }, + lighting: { + details: + "د مستقیم سخت رڼا څخه ډډه وکړئ ځکه چې دا د سند څخه منعکس کیږي او کولی شي د سند برخې د لوستلو وړ نه کړي. که تاسو په سند کې معلومات نشئ لوستلی، نو دا به کیمرې ته هم ونه لیدل شي.", + details_desktop: + "د مستقیم سخت رڼا څخه ډډه وکړئ ځکه چې دا د سند څخه منعکس کیږي او کولی شي د سند برخې د لوستلو وړ نه کړي. که تاسو په سند کې معلومات نشئ لوستلی، نو دا به کیمرې ته هم ونه لیدل شي.", + title: "د سختې رڼا لپاره پام وکړئ", + title_desktop: "د سختې رڼا لپاره پام وکړئ", + }, + visibility: { + details: + "ډاډ حاصل کړئ چې د MRZ کومه برخه مو په ګوته پټه نکړئ. همدارنګه د وړانګو هغه غبرګون ته وګورئ چې پر MRZ راځي او کېدای شي هغه و نه لوستل شي.", + details_desktop: + "ډاډ حاصل کړئ چې د MRZ کومه برخه مو په ګوته پټه نکړئ. همدارنګه د وړانګو هغه غبرګون ته وګورئ چې پر MRZ راځي او کېدای شي هغه و نه لوستل شي.", + title: "MRZ باید د لیدلو وړ وي", + title_desktop: "MRZ باید د لیدلو وړ وي", + }, + }, done_btn: "وشو", done_btn_aria: "د سي وي سکین کول", full_document: { @@ -163,12 +194,20 @@ export default { btn: "سکن کول پیل کړئ", document_with_barcode: { details: - "بېلا بېلې ID ګانې کېدای شي د بارکوډ متفاوتې بڼې او موقعیتونه ولري. د ID مخ او شا د بارکوډ لپاره وګورئ.", + "بېلا بېل سندونه کېدای شي د بارکوډ متفاوتې بڼې او موقعیتونه ولري. د سند مخ او شا د بارکوډ لپاره وګورئ.", details_desktop: - "د ID مخ او شا د بارکوډ لپاره ولولئ. ډاډ حاصل کړئ چې تاسو د خپلې کامرې لېنزونه پاک کړي دي سند ښه روښانه دی.", - title: "پر ID موجود بارکوډ ومومئ", + "د سند مخ او شا د بارکوډ لپاره ولولئ. ډاډ حاصل کړئ چې تاسو د خپلې کامرې لېنز پاک کړی دی او سند ښه روښانه دی.", + title: "بارکوډ په سند کې مومئ", title_desktop: "خپل لېنز پاک کړئ او بارکوډ ومومئ", }, + document_with_mrz: { + details: + "تاسو به د سند د مخ یا شا په ښکته برخه کې د کرکټرونو یوه اوږده لیکه وګورئ چې په 2 یا 3 کرښو وېشل شوې ده او د (<< یا >>) وېکتور نښو په وسیله جلا شوې دي.", + details_desktop: + "د سند پر مخ او شا MRZ وګورئ. د کرکټرونو 2 تر 3 کرښې او د وېکتور (<<) سمبولونه د سند پر مخ او شا وګورې. ډاډ حاصل کړئ چې د کامرې لېنز مو ښه پاک او سند کافي روښانه دی.", + title: "MRZ په سند ومومئ", + title_desktop: "خپل لېنز پاک کړئ او MRZ ومومئ", + }, full_document: { details: "ډاډ ترلاسه کړئ چې تاسو سند ښه روښانه ساتئ. د اسنادو ټولې ساحې باید د کیمرې په سکرین کې ښکاره شي.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "د سند د سکین کولو سکرین", timeout_modal: { - details: "د سند لوستلو توان نه لرم. مهرباني وکړئ بیا هڅه وکړئ.", - title: "سکین ناکام شو", + details: + "ډاډ حاصل کړئ چې سند ښه روښانه، په بشپړ ډول د لیدو وړ دی او هېڅ د رڼا وړانګې پرې نشته.", + details_desktop: + "ډاډ حاصل کړئ چې ستاسو د کامرې لېنز پاک دی او سند په بشپړه توګه د لیدو وړ دی، تمرکز پرې دی او ښه روښانه دی.", + title: "نشئ کولای سند ولولئ", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/pt.ts b/packages/blinkid-ux-manager/src/ui/locales/pt.ts index 77112c19..650ce780 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/pt.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/pt.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Lado da frente digitalizado com sucesso!", glare_detected: "Incline ou desloque o documento para eliminar o reflexo", keep_document_parallel: "Mantenha o documento paralelo ao ecrã", - keep_document_still: "Mantenha o documento e o dispositivo imóveis", keep_still: "Mantenha imóvel", move_closer: "Aproxime", move_farther: "Afaste", @@ -43,6 +42,7 @@ export default { scan_the_barcode_side: "Digitalizar o lado do documento com um código de barras", scan_the_front_side: "Digitalize a frente\\nde um documento", + scan_the_mrz_side: "Digitalize o lado MRZ de um documento", scan_top_page: "Digitalizar a página superior", too_bright: "Desloque-se para um local com menos iluminação", too_dark: "Desloque-se para um local com mais iluminação", @@ -116,6 +116,37 @@ export default { title_desktop: "Mantenha o código de barras visível", }, }, + document_with_mrz: { + blur: { + details: + "Tente manter o telefone e o documento imóveis enquanto digitaliza. A deslocação de qualquer um deles pode desfocar a imagem e tornar ilegíveis os dados no documento.", + details_desktop: + "Tente manter-se imóvel enquanto digitaliza, caso contrário a imagem poderá ficar desfocada e os dados do documento poderão tornar-se ilegíveis.", + title: "Mantenha-se imóvel enquanto digitaliza", + title_desktop: "Mantenha-se imóvel enquanto digitaliza", + }, + camera_lens: { + details_desktop: + "Verifique se não há manchas ou poeiras na lente da sua câmara. Uma lente suja torna a imagem final desfocada, deixando os detalhes do documento ilegíveis e impedindo a digitalização correta dos dados.", + title_desktop: "Limpe a lente da câmara", + }, + lighting: { + details: + "Evite a luz direta e intensa porque reflete a partir do documento e pode tornar ilegíveis partes do documento. Se não conseguir ler os dados no documento, também não serão visíveis para a câmara.", + details_desktop: + "Evite a luz direta e intensa porque reflete a partir do documento e pode tornar ilegíveis partes do documento. Se não conseguir ler os dados no documento, também não serão visíveis para a câmara.", + title: "Cuidado com a luz intensa", + title_desktop: "Cuidado com a luz intensa", + }, + visibility: { + details: + "Certifique-se de que não está a cobrir partes do MRZ com um dedo. Além disso, tenha em atenção os reflexos que se sobrepõem ao MRZ e que poderão torná-lo ilegível.", + details_desktop: + "Certifique-se de que não está a cobrir partes do MRZ com um dedo. Além disso, tenha em atenção os reflexos que se sobrepõem ao MRZ e que poderão torná-lo ilegível.", + title: "Mantenha o MRZ visível", + title_desktop: "Mantenha o MRZ visível", + }, + }, done_btn: "Concluído", done_btn_aria: "Retomar digitalização", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Começar a digitalizar", document_with_barcode: { details: - "Os formatos e a localização dos códigos de barras podem variar conforme o tipo de documento. Procure um código de barras na frente e no verso do documento.", + "Diferentes tipos de documentos podem ter diferentes formatos e localizações de códigos de barras. Procure um código de barras na frente e no verso do documento.", details_desktop: - "Procure um código de barras na frente e no verso de um documento. Mantenha a lente da sua câmara limpa e o código de barras bem iluminado.", - title: "Procure o código de barras no documento", + "Procure um código de barras na frente e no verso do documento. Mantenha a lente da sua câmara limpa e o documento bem iluminado.", + title: "Localize o código de barras no documento", title_desktop: "Limpe a lente e procure o código de barras", }, + document_with_mrz: { + details: + "Encontrará uma longa sequência de carateres na parte inferior da frente ou do verso do documento, dividida em 2 ou 3 linhas e separada por setas (<< ou >>).", + details_desktop: + "Procure um MRZ na frente e no verso do documento. Procure 2–3 linhas de caracteres e símbolos direcionais (<<) no fundo do documento. Certifique-se de que a lente da sua câmara esteja limpa e o documento bem iluminado.", + title: "Localize o MRZ no documento", + title_desktop: "Limpe a sua lente e localize o MRZ", + }, full_document: { details: "Assegure-se de que mantém o documento bem iluminado. Todos os campos do documento devem estar visíveis no ecrã da câmara.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Ecrã de digitalização de documentos", timeout_modal: { - details: "Não foi possível ler o documento. Tente novamente.", - title: "A digitalização falhou", + details: + "Garanta que o documento esteja bem iluminado, totalmente visível e sem reflexos.", + details_desktop: + "Garanta que a lente da sua câmara esteja limpa e o documento totalmente visível, focado e bem iluminado.", + title: "Não foi possível ler o documento", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/pt_BR.ts b/packages/blinkid-ux-manager/src/ui/locales/pt_BR.ts index b82e4a34..47c13fa2 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/pt_BR.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/pt_BR.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Sucesso! Frente digitalizada", glare_detected: "Incline ou mova o documento para remover o reflexo", keep_document_parallel: "Mantenha o documento paralelo à tela", - keep_document_still: "Mantenha o documento e o dispositivo imóveis", keep_still: "Mantenha o celular imóvel", move_closer: "Aproxime", move_farther: "Afaste", @@ -43,6 +42,7 @@ export default { scan_the_barcode_side: "Digitalize o lado do documento que contém o código de barras", scan_the_front_side: "Digitalize a frente do documento", + scan_the_mrz_side: "Digitalize o lado do documento que contém a MRZ", scan_top_page: "Digitalize a página superior", too_bright: "Mova para um local com menos iluminação", too_dark: "Mova para um local mais claro", @@ -116,6 +116,37 @@ export default { title_desktop: "Mantenha o código de barras visível", }, }, + document_with_mrz: { + blur: { + details: + "Tente manter o celular e o documento imóveis durante a digitalização. Mover qualquer um deles poderá borrar a imagem e tornar os dados do documento ilegíveis.", + details_desktop: + "Tente manter o celular imóvel durante a digitalização. Movimentos podem desfocar a imagem e tornar os dados do documento ilegíveis.", + title: "Mantenha-se imóvel durante a digitalização", + title_desktop: "Mantenha-se imóvel durante a digitalização", + }, + camera_lens: { + details_desktop: + "Verifique se a lente da câmera está limpa e sem poeira. Uma lente suja pode desfocar a imagem final, tornando os detalhes do documento ilegíveis e impedindo o escaneamento correto dos dados.", + title_desktop: "Limpe a lente da câmera", + }, + lighting: { + details: + "Evite luz forte direta, pois ela reflete no documento e pode tornar partes dele ilegíveis. Se você não conseguir ler os dados no documento, ele também não ficará visível para a câmera.", + details_desktop: + "Evite luz forte direta, pois ela reflete no documento e pode tornar partes dele ilegíveis. Se você não conseguir ler os dados no documento, ele também não ficará visível para a câmera.", + title: "Cuidado com a luz forte", + title_desktop: "Cuidado com a luz forte", + }, + visibility: { + details: + "Certifique-se de não cobrir nenhuma parte da MRZ com os dedos. Além disso, evite reflexos sobre a MRZ, pois eles podem torná-la ilegível.", + details_desktop: + "Certifique-se de não cobrir nenhuma parte da MRZ com os dedos. Além disso, evite reflexos sobre a MRZ, pois eles podem torná-la ilegível.", + title: "Mantenha a MRZ visível", + title_desktop: "Mantenha a MRZ visível", + }, + }, done_btn: "Concluído", done_btn_aria: "Retomar escaneamento", full_document: { @@ -167,9 +198,17 @@ export default { "Diferentes tipos de documentos podem ter formatos e localizações de código de barras diferentes. Verifique a frente e o verso do documento em busca de um código de barras.", details_desktop: "Verifique a frente e o verso do documento em busca de um código de barras. Certifique-se de manter a lente da câmera limpa e o documento bem iluminado.", - title: "Localize o código de barras no documento de identidade", + title: "Localize o código de barras no documento", title_desktop: "Limpe a lente da câmera e localize o código de barras", }, + document_with_mrz: { + details: + "Você encontrará uma longa sequência de caracteres na parte inferior da frente ou do verso do documento, dividida em 2 ou 3 linhas e separada por símbolos de seta (<< ou >>).", + details_desktop: + "Verifique a frente e o verso do documento em busca da MRZ. Procure por 2 ou 3 linhas de caracteres e símbolos de seta (<<) na parte inferior do documento. Certifique-se de manter a lente da câmera limpa e o documento bem iluminado.", + title: "Localize a MRZ no documento", + title_desktop: "Limpe a lente da câmera e localize a MRZ.", + }, full_document: { details: "Certifique-se de manter o documento bem iluminado. Todos os campos do documento devem estar visíveis na tela da câmera.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Tela de escaneamento de documento", timeout_modal: { - details: "Não foi possível ler o documento. Tente novamente.", - title: "Falha na digitalização", + details: + "Certifique-se de que o documento esteja bem iluminado, totalmente visível e sem reflexos.", + details_desktop: + "Certifique-se de que a lente da câmera esteja limpa e que o documento esteja totalmente visível, em foco e bem iluminado.", + title: "Não foi possível ler o documento.", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ro.ts b/packages/blinkid-ux-manager/src/ui/locales/ro.ts index ed096880..2d858dc1 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ro.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ro.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Înclinați sau deplasați documentul pentru a elimina reflexiile", keep_document_parallel: "Țineți documentul paralel cu ecranul", - keep_document_still: "Mențineți documentul și dispozitivul nemișcate", keep_still: "Nu vă mișcați", move_closer: "Apropiați", move_farther: "Îndepărtați", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Scanare cod de bare", scan_the_barcode_side: "Scanați partea cu codul de bare a unui document", scan_the_front_side: "Scanați partea din față\\na unui document", + scan_the_mrz_side: "Scanați partea documentului pe care se află MRZ", scan_top_page: "Scanați prima pagină", too_bright: "Mutați-vă într-un loc mai puțin luminos", too_dark: "Mutați-vă într-un loc mai luminos", @@ -116,6 +116,37 @@ export default { title_desktop: "Mențineți codul de bare vizibil", }, }, + document_with_mrz: { + blur: { + details: + "Încercați să mențineți telefonul și documentul imobile în timpul scanării. Mișcările pot compromite claritatea imaginii și pot face imposibilă citirea datelor din document.", + details_desktop: + "Încercați să nu vă mișcați în timpul scanării. Mișcarea poate face ca imaginea să fie neclară și ca datele din document să devină ilizibile.", + title: "Nu vă mișcați în timpul scanării", + title_desktop: "Nu vă mișcați în timpul scanării", + }, + camera_lens: { + details_desktop: + "Verificați ca lentila camerei să nu prezinte pete sau praf. Folosirea unei lentile murdare duce la o imagine finală neclară, făcând detaliile documentului ilizibile și împiedicând scanarea cu succes a datelor.", + title_desktop: "Curățați lentila camerei", + }, + lighting: { + details: + "Evitați lumina puternică directă, deoarece se va reflecta din document și poate face imposibilă citirea anumitor porțiuni din acesta. Dacă nu puteți citi datele din document, ele nu vor fi vizibile nici pe cameră.", + details_desktop: + "Evitați lumina puternică directă, deoarece se va reflecta din document și poate face imposibilă citirea anumitor porțiuni din acesta. Dacă nu puteți citi datele din document, ele nu vor fi vizibile nici pe cameră.", + title: "Feriți-vă de lumina puternică", + title_desktop: "Feriți-vă de lumina puternică", + }, + visibility: { + details: + "Asigurați-vă că nu acoperiți cu degetul nicio parte a zonei MRZ. De asemenea, aveți grijă să nu se formeze reflexii peste zona MRZ, deoarece o pot face ilizibilă.", + details_desktop: + "Asigurați-vă că nu acoperiți cu degetul nicio parte a zonei MRZ. De asemenea, aveți grijă să nu se formeze reflexii peste zona MRZ, deoarece o pot face ilizibilă.", + title: "Păstrați zona MRZ vizibilă", + title_desktop: "Păstrați zona MRZ vizibilă", + }, + }, done_btn: "Terminat", done_btn_aria: "Reluați scanarea", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Porniți scanarea", document_with_barcode: { details: - "Diferitele tipuri de acte de identitate pot avea formate și amplasări diferite ale codului de bare. Verificați partea din față și cea din spate a actului de identitate pentru a localiza codul de bare.", + "Diversele tipuri de documente pot avea formate și amplasări diferite ale codului de bare. Priviți atât partea din față, cât și din spate a documentului pentru a localiza codul de bare.", details_desktop: - "Verificați partea din față și cea din spate a actului de identitate pentru a localiza codul de bare. Asigurați-vă că obiectivul camerei este curat, iar documentul este bine iluminat.", - title: "Localizați codul de bare pe actul de identitate", + "Priviți atât partea din față, cât și din spate a documentului pentru a localiza codul de bare. Asigurați-vă că obiectivul camerei este curat, iar documentul este bine iluminat.", + title: "Găsiți codul de bare pe document", title_desktop: "Curățați obiectivul și localizați codul de bare", }, + document_with_mrz: { + details: + "Veți găsi un șir lung de caractere în partea de jos a documentului, pe fața sau pe spatele acestuia, întins pe 2 sau 3 rânduri și separat prin săgeți (<< sau >>).", + details_desktop: + "Priviți atât partea din față, cât și din spate a documentului pentru a localiza MRZ. Căutați 2-3 rânduri de caractere și simboluri de tip săgeată (<<) în partea de jos a documentului. Asigurați-vă că obiectivul camerei este curat, iar documentul este bine iluminat.", + title: "Găsiți MRZ pe document", + title_desktop: "Curățați obiectivul și localizați zona MRZ", + }, full_document: { details: "Asigurați-vă că documentul este bine iluminat. Toate secțiunile din document trebuie să fie vizibile pe ecranul camerei.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Ecran scanare documente", timeout_modal: { - details: "Documentul nu poate fi citit. Încercați din nou.", - title: "Scanare nereușită", + details: + "Asigurați-vă că documentul este bine iluminat, vizibil în întregime și fără nicio reflexie.", + details_desktop: + "Asigurați-vă că obiectivul camerei este curat, iar documentul este vizibil în întregime, focalizat corect și bine iluminat.", + title: "Documentul nu poate fi citit.", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ru.ts b/packages/blinkid-ux-manager/src/ui/locales/ru.ts index 7cd62601..aa6decc8 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ru.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ru.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Успех! Передняя сторона отсканирована", glare_detected: "Наклоните или сместите документ, чтобы убрать отражение", keep_document_parallel: "Держите документ параллельно экрану", - keep_document_still: "Держите документ и устройство неподвижно", keep_still: "Не двигайтесь", move_closer: "Сместитесь поближе", move_farther: "Сместитесь подальше", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Отсканируйте штрихкод", scan_the_barcode_side: "Отсканируйте сторону документа со штрихкодом", scan_the_front_side: "Отсканируйте лицевую сторону документа", + scan_the_mrz_side: "Отсканируйте сторону документа с МСЗ", scan_top_page: "Отсканируйте верхнюю страницу", too_bright: "Перейдите в менее освещенное место", too_dark: "Перейдите в более освещенное место", @@ -116,6 +116,37 @@ export default { title_desktop: "Штрихкод должен быть хорошо виден", }, }, + document_with_mrz: { + blur: { + details: + "В процессе сканирования старайтесь держать телефон и документ неподвижно. Любое движение может привести к размытию изображения и сделать данные нечитаемыми.", + details_desktop: + "Старайтесь оставаться неподвижными во время сканирования. Движение может привести к размытию и нечитаемости данных в документе.", + title: "Не двигайтесь в процессе сканирования", + title_desktop: "Не двигайтесь в процессе сканирования", + }, + camera_lens: { + details_desktop: + "Проверьте, чтобы на объективе не было пятен или пыли. Загрязнения могут приводить к размытию изображения, делая документ нечитаемым и препятствуя сканированию данных.", + title_desktop: "Протрите объектив камеры", + }, + lighting: { + details: + "Избегайте прямого яркого света, так как он отражается от документа и может сделать некоторые его части нечитаемыми. Если вы не можете прочитать данные документа сами, то они не будут видны и камере.", + details_desktop: + "Избегайте прямого яркого света, так как он отражается от документа и может сделать некоторые его части нечитаемыми. Если вы не можете прочитать данные документа сами, то они не будут видны и камере.", + title: "Избегайте яркой засветки", + title_desktop: "Избегайте яркой засветки", + }, + visibility: { + details: + "Убедитесь, что вы не закрываете пальцем части МСЗ. Также остерегайтесь бликов, которые могут перекрывать МСЗ и делать ее нечитаемой.", + details_desktop: + "Убедитесь, что вы не закрываете пальцем части МСЗ. Также остерегайтесь бликов, которые могут перекрывать МСЗ и делать ее нечитаемой.", + title: "МСЗ должна быть хорошо видна", + title_desktop: "МСЗ должна быть хорошо видна", + }, + }, done_btn: "Готово", done_btn_aria: "Возобновить сканирование", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Начать сканирование", document_with_barcode: { details: - "Разные типы удостоверений могут иметь разные форматы и расположение штрихкодов. Штрихкод может находиться на лицевой или оборотной стороне удостоверения.", + "Разные типы документов могут иметь разные форматы и расположение штрихкодов. Штрихкод может находиться на лицевой или оборотной стороне документа.", details_desktop: - "Проверьте лицевую и обратную стороны удостоверения на наличие штрихкода. Убедитесь, что объектив чистый, а документ хорошо освещен.", - title: "Найдите штрихкод на удостоверении", + "Проверьте лицевую и обратную стороны документа на наличие штрихкода. Убедитесь, что объектив чистый, а документ хорошо освещен.", + title: "Найдите в документе штрихкод", title_desktop: "Протрите объектив и найдите штрихкод", }, + document_with_mrz: { + details: + "Внизу, на лицевой или оборотной стороне документа, находится длинный перечень символов на 2 или 3 строках, разделенный стрелками (<< или >>).", + details_desktop: + "Проверьте лицевую и оборотную стороны документа на наличие машиносчитываемой зоны (МСЗ). Найдите 2–3 строки символов и стрелок (<<) внизу документа. Убедитесь, что объектив вашей камеры чистый, а документ хорошо освещен.", + title: "Найдите в документе МСЗ", + title_desktop: "Очистите объектив и найдите МСЗ", + }, full_document: { details: "Сделайте так, чтобы документ был хорошо освещен. Все его поля должны быть видны на экране камеры.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Экран сканирования документов", timeout_modal: { - details: "Не удалось прочитать документ. Повторите попытку.", - title: "Не удалось отсканировать документ", + details: + "Убедитесь, что документ хорошо освещен, полностью виден и нет бликов.", + details_desktop: + "Убедитесь, что объектив камеры чистый, а документ полностью виден, находится в фокусе и хорошо освещен.", + title: "Не удалось прочитать документ", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/si.ts b/packages/blinkid-ux-manager/src/ui/locales/si.ts index 49392ae6..70f4dca7 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/si.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/si.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "සාර්ථකයි! ඉදිරි පැත්ත ස්කෑන් කර ඇත", glare_detected: "පරාවර්තනය ඉවත් කිරීමට ලේඛනය ඇල කරන්න හෝ එහා මෙහා කරන්න", keep_document_parallel: "ලේඛනය තිරයට සමාන්තරව තබා ගන්න", - keep_document_still: "ලේඛනය සහ උපාංගය නොසෙල්වෙන සේ තබා ගන්න", keep_still: "නොසෙල්වී සිටින්න", move_closer: "මදක් ළං කරන්න", move_farther: "මදක් ඈත් කරන්න", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "බාර්කෝඩ් එක ස්කෑන් කරන්න", scan_the_barcode_side: "ලේඛනයක බාර්කෝඩ් එක ඇති පැත්ත ස්කෑන් කරන්න", scan_the_front_side: "ලේඛනයේ ඉදිරි පැත්ත ස්කෑන් කරන්න", + scan_the_mrz_side: "ලේඛනයක MRZ එක ඇති පැත්ත ස්කෑන් කරන්න", scan_top_page: "මුදුන් පිටුව ස්කෑන් කරන්න", too_bright: "ආලෝකය මදක් අඩු තැනකට යන්න", too_dark: "ආලෝකය මදක් වැඩි තැනකට යන්න", @@ -116,6 +116,37 @@ export default { title_desktop: "බාර්කෝඩ් එක පෙනෙන පරිදි තබා ගන්න", }, }, + document_with_mrz: { + blur: { + details: + "ස්කෑන් කරන අතරතුර දුරකථනය සහ ලේඛනය නොසෙල්වෙන සේ තබා ගන්න. මින් එකක් හෝ සෙලවීම රූපය අපැහැදිලි වී ලේඛනයේ දත්ත කියවීමට නොහැකි වීමට හේතු විය හැක.", + details_desktop: + "ස්කෑන් කරන අතරතුර නොසෙල්වී සිටීමට උත්සාහ කරන්න. සෙලවීම රූපය අපැහැදිලි වී ලේඛනයේ දත්ත කියවීමට නොහැකි වීමට හේතු විය හැක.", + title: "ස්කෑන් කරන අතරතුර නොසෙල්වී සිටින්න", + title_desktop: "ස්කෑන් කරන අතරතුර නොසෙල්වී සිටින්න", + }, + camera_lens: { + details_desktop: + "ඔබේ කැමරා කාචයේ පැල්ලම් හෝ දූවිලි ඇත්දැයි පරීක්ෂා කරන්න. කැමරා කාචය අපිරිසිදු වීම ඉන් ලබා ගන්නා අවසාන රූපය බොඳ වීමට හේතුව වන අතර, ඉන් ලේඛනයේ විස්තර කියවිය නොහැකි වී, දත්ත සාර්ථකව ස්කෑන් කිරීමට බාධා ඇති වේ.", + title_desktop: "ඔබේ කැමරා කාචය පිරිසිදු කරන්න", + }, + lighting: { + details: + "ඍජු රළු ආලෝකය ලේඛනයේ වැදී පරාවර්තනය වී ලේඛනයේ ඇති කොටස් කියවීමට නොහැකි විය හැකි බැවින් එය වළක්වා ගන්න. ඔබට ලේඛනයේ දත්ත කියවිය නොහැකි නම්, එය කැමරාවට ද දෘශ්‍යමාන නොවේ.", + details_desktop: + "ඍජු රළු ආලෝකය ලේඛනයේ වැදී පරාවර්තනය වී ලේඛනයේ ඇති කොටස් කියවීමට නොහැකි විය හැකි බැවින් එය වළක්වා ගන්න. ඔබට ලේඛනයේ දත්ත කියවිය නොහැකි නම්, එය කැමරාවට ද දෘශ්‍යමාන නොවේ.", + title: "රළු ආලෝකය ගැන සැලකිලිමත් වන්න", + title_desktop: "රළු ආලෝකය ගැන සැලකිලිමත් වන්න", + }, + visibility: { + details: + "ඔබේ ඇඟිල්ලකින් MRZ එකේ කොටස් ආවරණය නොවන බවට වග බලා ගන්න. එසේම බාර්කෝඩ් එකේ කොටස් කියවීම අපහසු කළ හැකි, ඒ මත ඇති වන පරාවර්තන පිළිබඳව අවධානයෙන් සිටින්න.", + details_desktop: + "ඔබේ ඇඟිල්ලකින් MRZ එකේ කොටස් ආවරණය නොවන බවට වග බලා ගන්න. එසේම බාර්කෝඩ් එකේ කොටස් කියවීම අපහසු කළ හැකි, ඒ මත ඇති වන පරාවර්තන පිළිබඳව අවධානයෙන් සිටින්න.", + title: "MRZ එක පෙනෙන පරිදි තබා ගන්න", + title_desktop: "MRZ එක පෙනෙන පරිදි තබා ගන්න", + }, + }, done_btn: "කළා", done_btn_aria: "ස්කෑන් කිරීම නැවත අරඹන්න", full_document: { @@ -164,12 +195,20 @@ export default { btn: "ස්කෑන් කිරීම ආරම්භ කරන්න", document_with_barcode: { details: - "විවිධ වර්ගයේ හැඳුනුම්පත්වල විවිධ බාර්කෝඩ් ආකෘති තිබිය හැකි අතර, එය තිබෙන ස්ථානය ද වෙනස් විය හැක. බාර්කෝඩ් එකක් සොයා ගැනීමට හැඳුනුම්පතේ ඉදිරිපස සහ පිටුපස බලන්න.", + "විවිධ වර්ගයේ ලේඛනවල විවිධ බාර්කෝඩ් ආකෘති තිබිය හැකි අතර, එය තිබෙන ස්ථානය ද වෙනස් විය හැක. බාර්කෝඩ් එකක් සොයා ගැනීමට ලේඛනයේ ඉදිරිපස සහ පිටුපස බලන්න.", details_desktop: - "ඉදිරි සහ පිටුපස පැත්තේ බාර්කෝඩ් එකක් ඇත්දැයි පරීක්ෂා කරන්න. ඔබේ කැමරා කාචය පිරිසිදුව ඇති බවට් බාර්කෝඩ් එකට හොඳින් ආලෝකය වැටෙන බවත් සහතික කර ගන්න.", - title: "හැඳුනුම්පතේ බාර්කෝඩ් එක ඇති තැන සොයා ගන්න", + "ලේඛනයේ ඉදිරි සහ පිටුපස පැත්තේ බාර්කෝඩ් එකක් ඇත්දැයි පරීක්ෂා කරන්න. ඔබේ කැමරා කාචය පිරිසිදුව ඇති බවත්, බාර්කෝඩ් එකට හොඳින් ආලෝකය වැටෙන බවත් සහතික කර ගන්න.", + title: "ලේඛනයේ බාර්කෝඩ් එක ඇති තැන සොයා ගන්න", title_desktop: "ඔබේ කැමරා කාචය පිරිසිදු කර බාර්කෝඩ් එක ඇති තැන සොයා ගන්න", }, + document_with_mrz: { + details: + "ලේඛනයේ ඉදිරිපස හෝ පිටුපස පැත්තේ පතුලේ, ඔබට ඊතල (<< හෝ >>) මගින් වෙන් වූ පේළි 2 කට හෝ 3 කට බෙදුණු දිගු අක්ෂර මාලාවක් දක්නට ලැබෙනු ඇත.", + details_desktop: + "ලේඛනයේ ඉදිරිපස සහ පසුපස MRZ ඇත්දැයි පරීක්ෂා කරන්න. ලේඛනයේ පතුලේ පේළි 2 ක හෝ 3 ක අකුරු සහ ඊතල සංකේත (<<) ඇත්දැයි බලන්න. ඔබේ කැමරා කාචය පිරිසිදුව ඇති බවත්, ලේඛනයට හොඳින් ආලෝකය වැටෙන බවත් සහතික කර ගන්න.", + title: "ලේඛනයේ MRZ එක ඇති තැන සොයා ගන්න", + title_desktop: "ඔබේ කැමරා කාචය පිරිසිදු කර MRZ එක ඇති තැන සොයා ගන්න", + }, full_document: { details: "ලේඛනයට හොඳින් ආලෝකය වැටෙන පරිදි තබා ගැනීමට වග බලා ගන්න. ලේඛනයේ සියලුම කොටස් කැමරා තිරය මත දෘශ්‍යමාන විය යුතු ය.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "ලේඛන ස්කෑන් කිරීමේ තිරය", timeout_modal: { - details: "ලේඛනය කියවිය නොහැක. කරුණාකර නැවත උත්සාහ කරන්න.", - title: "ස්කෑන් කිරීම අසාර්ථකයි", + details: + "ලේඛනයට හොඳින් ආලෝකය වැටෙන බවත්, සම්පූර්ණයෙන් පෙනෙන බවත්, දිලිසීමෙන් තොර බවත් සහතික කර ගන්න.", + details_desktop: + "ඔබේ කැමරා කාචය පිරිසිදුව ඇති බවත්, ලේඛනය සම්පූර්ණයෙන් පෙනෙන පරිදි නාභිගත වී ඇති බවත්, හොඳින් ආලෝකය වැටෙන බවත් සහතික කර ගන්න.", + title: "ලේඛනය කියවිය නොහැක", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/sk.ts b/packages/blinkid-ux-manager/src/ui/locales/sk.ts index b144db67..bd21a299 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/sk.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/sk.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Úspech! Naskenovaná predná strana", glare_detected: "Nakloňte alebo posuňte dokument, aby ste odstránili odraz", keep_document_parallel: "Držte dokument paralelne s obrazovkou", - keep_document_still: "Držte dokument a zariadenie v pokoji", keep_still: "Nehýbte sa", move_closer: "Posuňte sa bližšie", move_farther: "Posuňte sa ďalej", @@ -42,6 +41,8 @@ export default { scan_the_barcode: "Naskenovať čiarový kód", scan_the_barcode_side: "Naskenujte čiarový kód dokumentu", scan_the_front_side: "Naskenujte prednú stranu \\n preukazu", + scan_the_mrz_side: + "Naskenujte stranu dokumentu so strojovo čitateľnou oblasťou (MRZ)", scan_top_page: "Oskenujte stránku hore", too_bright: "Presuňte sa na miesto s menším osvetlením", too_dark: "Presuňte sa na svetlejšie miesto", @@ -115,6 +116,37 @@ export default { title_desktop: "Udržujte čiarový kód viditeľný", }, }, + document_with_mrz: { + blur: { + details: + "Skúste počas snímania ponechať telefón a dokument v pokoji. Pohyb môže rozmazať obraz a spôsobiť, že údaje v dokumente budú nečitateľné.", + details_desktop: + "Počas snímania sa snažte nehýbať. Pohyb môže rozmazať obraz a spôsobiť nečitateľnosť údajov na dokumente.", + title: "Počas snímania zostaňte v pokoji", + title_desktop: "Počas snímania zostaňte v pokoji", + }, + camera_lens: { + details_desktop: + "Skontrolujte, či na objektíve kamery nie sú šmuhy alebo prach. Ak je objektív znečistený, výsledný obraz bude rozmazaný, údaje na dokumente sa nebudú dať prečítať a skenovanie údajov sa nepodarí.", + title_desktop: "Vyčistite objektív kamery", + }, + lighting: { + details: + "Vyhnite sa priamemu ostrému svetlu, pretože sa odráža od dokumentu a môže spôsobiť, že časti dokumentu budú nečitateľné. Ak vy nedokážete čítať údaje v dokumente, neuvidí ich ani fotoaparát.", + details_desktop: + "Vyhnite sa priamemu ostrému svetlu, pretože sa odráža od dokumentu a môže spôsobiť, že časti dokumentu budú nečitateľné. Ak vy nedokážete čítať údaje v dokumente, neuvidí ich ani fotoaparát.", + title: "Pozor na ostré svetlo", + title_desktop: "Pozor na ostré svetlo", + }, + visibility: { + details: + "Uistite sa, že časti strojovo čitateľnej oblasti (MRZ) nezakrývate prstom. Dávajte si tiež pozor na odrazy, ktoré prechádzajú cez túto oblasť a môžu spôsobiť, že bude nečitateľná.", + details_desktop: + "Uistite sa, že časti strojovo čitateľnej oblasti (MRZ) nezakrývate prstom. Dávajte si tiež pozor na odrazy, ktoré prechádzajú cez túto oblasť a môžu spôsobiť, že bude nečitateľná.", + title: "Udržujte strojovo čitateľnú oblasť (MRZ) viditeľnú", + title_desktop: "Udržujte strojovo čitateľnú oblasť (MRZ) viditeľnú", + }, + }, done_btn: "Hotovo", done_btn_aria: "Obnoviť skenovanie", full_document: { @@ -163,12 +195,21 @@ export default { btn: "Spustiť skenovanie", document_with_barcode: { details: - "Rôzne typy preukazov totožnosti môžu mať rôzne formáty čiarových kódov a rôzne umiestnenia. Pozrite sa na prednú a zadnú stranu preukazov totožnosti, kde nájdete čiarový kód.", + "Rôzne typy dokumentov môžu mať rôzne formáty a umiestnenia čiarových kódov. Vyhľadajte čiarový kód na prednej alebo zadnej strane dokumentu.", details_desktop: - "Skontrolujte, či je na prednej a zadnej strane preukazu totožnosti čiarový kód. Uistite sa, že je objektív fotoaparátu čistý a dokument dobre osvetlený.", - title: "Nájdite na preukaze totožnosti čiarový kód", + "Skontrolujte, či je na prednej a zadnej strane dokumentu čiarový kód. Uistite sa, že je objektív fotoaparátu čistý a dokument dobre osvetlený.", + title: "Nájdite na dokumente čiarový kód", title_desktop: "Vyčistite objektív kamery a nájdite čiarový kód", }, + document_with_mrz: { + details: + "V spodnej časti prednej alebo zadnej strany dokumentu nájdete dlhý reťazec znakov. Je rozdelená na 2 alebo 3 riadky a oddelená šípkami (<< alebo >>).", + details_desktop: + "Skontrolujte, či je na prednej a zadnej strane dokumentu strojovo čitateľná oblasť (MRZ). Vyhľadajte 2 až 3 riadky znakov a symboly šípok (<<) na spodnej strane dokumentu. Uistite sa, že je objektív fotoaparátu čistý a dokument dobre osvetlený.", + title: "Nájdite na dokumente strojovo čitateľnú oblasť (MRZ)", + title_desktop: + "Vyčistite objektív kamery a nájdite strojovo čitateľnú oblasť", + }, full_document: { details: "Uistite sa, že máte dokument dobre osvetlený. Všetky polia dokumentu by mali byť viditeľné na obrazovke fotoaparátu.", @@ -180,7 +221,10 @@ export default { }, sdk_aria: "Obrazovka skenovania dokumentu", timeout_modal: { - details: "Dokument sa nepodarilo prečítať. Prosím, skúste znova.", - title: "Skenovanie neúspešné", + details: + "Uistite sa, že je dokument dobre osvetlený, plne viditeľný a bez odleskov.", + details_desktop: + "Uistite sa, že objektív fotoaparátu je čistý a dokument je plne viditeľný, zaostrený a dobre osvetlený.", + title: "Dokument sa nedá prečítať", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/sl.ts b/packages/blinkid-ux-manager/src/ui/locales/sl.ts index 59374f2a..5cfac1c0 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/sl.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/sl.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Uspelo! Skenirana sprednja stran", glare_detected: "Nagnite ali premaknite dokument, da odstranite odsev", keep_document_parallel: "Dokument naj bo vzporedno z zaslonom", - keep_document_still: "Držite dokument in napravo pri miru", keep_still: "Ne premikajte se", move_closer: "Približajte", move_farther: "Oddaljite", @@ -42,6 +41,8 @@ export default { scan_the_barcode: "Optično preberite črtno kodo", scan_the_barcode_side: "Skenirajte stran dokumenta s črtno kodo.", scan_the_front_side: "Optično preberite sprednjo\\nstran dokumenta", + scan_the_mrz_side: + "Skenirajte stran dokumenta s strojno berljivim območjem", scan_top_page: "Skenirajte prvo stran", too_bright: "Premaknite se na mesto z manj svetlobe", too_dark: "Premaknite se na svetlejšo točko", @@ -115,6 +116,37 @@ export default { title_desktop: "Črtna koda naj bo vidna", }, }, + document_with_mrz: { + blur: { + details: + "Potrudite se, da bosta med optičnim branjem telefon in dokument pri miru. Če se kateri od njiju premakne, se lahko slika razmaže in dokument postane neberljiv.", + details_desktop: + "Med skeniranjem poskusite mirovati. Premikanje lahko zamegli sliko in oteži branje podatkov na dokumentu.", + title: "Držite pri miru med optičnim branjem", + title_desktop: "Držite pri miru med optičnim branjem", + }, + camera_lens: { + details_desktop: + "Preverite, da ni morda na objektivu kamere kakšna umazanija ali prah. Če je objektiv umazan, dobite zamegljeno končno sliko, zato je potem vsebina dokumenta neberljiva in podatkov ni mogoče uspešno optično prebrati.", + title_desktop: "Očistite objektiv kamere", + }, + lighting: { + details: + "Izogibajte se neposredni močni svetlobi, saj se ta odbija od dokumenta in lahko dele dokumenta naredi neberljive. Če ne morete prebrati podatkov na dokumentu, jih niti kamera ne bo mogla videti.", + details_desktop: + "Izogibajte se neposredni močni svetlobi, saj se ta odbija od dokumenta in lahko dele dokumenta naredi neberljive. Če ne morete prebrati podatkov na dokumentu, jih niti kamera ne bo mogla videti.", + title: "Svetloba ne sme biti premočna", + title_desktop: "Svetloba ne sme biti premočna", + }, + visibility: { + details: + "Ne prekrivajte nobenega dela strojno berljivega območja s prstom. Prav tako bodite pozorni na odseve svetlobe na strojno berljivem območju, zaradi katerih bi lahko postalo neberljivo.", + details_desktop: + "Ne prekrivajte nobenega dela strojno berljivega območja s prstom. Prav tako bodite pozorni na odseve svetlobe na strojno berljivem območju, zaradi katerih bi lahko postalo neberljivo.", + title: "Strojno berljivo območje naj bo ves čas vidno.", + title_desktop: "Strojno berljivo območje naj bo ves čas vidno.", + }, + }, done_btn: "Končano", done_btn_aria: "Nadaljuj optično branje", full_document: { @@ -163,12 +195,21 @@ export default { btn: "Začetek skeniranja", document_with_barcode: { details: - "Različne vrste osebnih dokumentov imajo lahko različne oblike in različna mesta črtnih kod. Na sprednji in zadnji strani dokumenta poiščite črtno kodo.", + "Različne vrste dokumentov imajo lahko različne oblike črtnih kod, ki so lahko na različnih mestih. Poiščite črtno kodo na sprednji ali zadnji strani dokumenta.", details_desktop: - "Preverite sprednjo in zadnjo stran osebnega dokumenta ter poiščite črtno kodo. Poskrbite, da bo objektiv kamere čist in dokument dobro osvetljen.", - title: "Poiščite črtno kodo na osebnem dokumentu", + "Preverite, ali je na sprednji ali zadnji strani dokumenta črtna koda. Poskrbite, da bo objektiv kamere čist in da bo dokument dobro osvetljen.", + title: "Poiščite črtno kodo na dokumentu", title_desktop: "Očistite objektiv kamere in poiščite črtno kodo", }, + document_with_mrz: { + details: + "Na spodnjem delu sprednje ali zadnje strani dokumenta boste našli dolg niz znakov, razdeljen v dve ali tri vrstice ter ločen s puščicami (<< ali >>).", + details_desktop: + "Na sprednji in zadnji strani dokumenta preverite, ali vključuje strojno berljivo območje. Na spodnjem delu dokumenta poiščite dve ali tri vrstice znakov in simbolov (<<). Poskrbite, da bo objektiv kamere čist in da bo dokument dobro osvetljen.", + title: "Poiščite strojno berljivo območje na dokumentu", + title_desktop: + "Očistite objektiv kamere in poiščite strojno berljivo območje", + }, full_document: { details: "Poskrbite, da bo dokument dobro osvetljen. Na zaslonu kamere morajo biti vidna vsa polja dokumenta.", @@ -180,7 +221,10 @@ export default { }, sdk_aria: "Zaslon za optično branje dokumentov", timeout_modal: { - details: "Dokumenta ni mogoče prebrati. Poskusite znova.", - title: "Optično branje ni uspelo", + details: + "Poskrbite, da bo dokument dobro osvetljen, v celoti viden in brez odsevov.", + details_desktop: + "Poskrbite, da bo objektiv kamere čist ter da bo dokument v celoti viden, izostren in dobro osvetljen.", + title: "Dokumenta ni mogoče prebrati", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/sr.ts b/packages/blinkid-ux-manager/src/ui/locales/sr.ts index 96110aea..b3fa8afd 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/sr.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/sr.ts @@ -12,7 +12,7 @@ export default { }, document_not_recognized_modal: { details: "Skenirajte prednju stranu podržanog dokumenta.", - title: "Документ није препознат", + title: "Dokument nije prepoznat", }, error_modal: { cancel_btn: "Otkaži", retry_btn: "Pokušaj ponovo" }, feedback_messages: { @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Uspeh! Prednja strana skenirana", glare_detected: "Nagnite ili pomerite dokument kako biste uklonili odsjaj", keep_document_parallel: "Držite dokument paralelno s ekranom", - keep_document_still: "Držite mirno dokument i ure]aj", keep_still: "Ostanite mirni", move_closer: "Približite", move_farther: "Udaljite", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skenirajte bar kod", scan_the_barcode_side: "Skenirajte stranu dokumenta sa barkodom", scan_the_front_side: "Skenirajte prednju stranu\\ndokumenta", + scan_the_mrz_side: "Skenirajte stranu dokumenta na kojoj se nalazi MRZ", scan_top_page: "Skenirajte gornju stranicu", too_bright: "Pomerite se na mesto sa manje svetla", too_dark: "Pomerite se na svetlije mesto", @@ -115,6 +115,37 @@ export default { title_desktop: "Neka bar-kod bude vidljiv", }, }, + document_with_mrz: { + blur: { + details: + "Pokušajte da telefon i dokument budu mirni tokom skeniranja. Pomeranje bilo koje od njih može zamutiti sliku i učiniti podatke na dokumentu nečitljivim.", + details_desktop: + "Pokušajte da budete mirni tokom skeniranja. Pomeranje može da zamuti sliku i učini podatke na dokumentu nečitljivim.", + title: "Ostanite mirni dok skenirate", + title_desktop: "Ostanite mirni dok skenirate", + }, + camera_lens: { + details_desktop: + "Proverite da li na sočivu kamere ima mrlja ili prašine. Prljavo sočivo može zamutiti konačnu sliku, zbog čega detalji na dokumentu postaju nečitljivi i onemogućavaju uspešno skeniranje podataka.", + title_desktop: "Očistite sočiva kamere", + }, + lighting: { + details: + "Izbegavajte direktnu oštru svetlost jer se odbija od dokumenta i može učiniti delove dokumenta nečitljivim. Ako ne možete da pročitate podatke na dokumentu, neće biti vidljivi ni kameri.", + details_desktop: + "Izbegavajte direktnu oštru svetlost jer se odbija od dokumenta i može učiniti delove dokumenta nečitljivim. Ako ne možete da pročitate podatke na dokumentu, neće biti vidljivi ni kameri.", + title: "Pazite na oštro svetlo", + title_desktop: "Pazite na oštro svetlo", + }, + visibility: { + details: + "Uverite se da ne prekrivate delove MRZ prstom. Obratite pažnju i na odsjaj preko MRZ zbog koga bi kod mogao biti nečitljiv.", + details_desktop: + "Uverite se da ne prekrivate delove MRZ prstom. Obratite pažnju i na odsjaj preko MRZ zbog koga bi kod mogao biti nečitljiv.", + title: "Neka MRZ bude vidljiv", + title_desktop: "Neka MRZ bude vidljiv", + }, + }, done_btn: "Završeno", done_btn_aria: "Nastavi skeniranje", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Pokreni skeniranje", document_with_barcode: { details: - "Različiti tipovi identifikacionih dokumenata će možda imati različite formate i lokacije bar-kodova. Tražite bar-kod na prednjoj ili zadnjoj strani dokumenta.", + "Različiti tipovi dokumenata će možda imati različite formate i lokacije bar-kodova. Tražite bar-kod na prednjoj ili zadnjoj strani dokumenta.", details_desktop: - "Proverite da li se na prednjoj ili zadnjoj strani ličnog dokumenta nalazi bar-kod. Vodite računa da objektiv kamere bude čist i da dokument bude dobro osvetljen.", - title: "Nađite bar-kod na identifikacionom dokumentu", + "Proverite da li se na prednjoj ili zadnjoj strani dokumenta nalazi bar-kod. Vodite računa da objektiv kamere bude čist i da dokument bude dobro osvetljen.", + title: "Pronađite bar-kod na dokumentu", title_desktop: "Očistite sočiva kamere i nađite bar-kod", }, + document_with_mrz: { + details: + "Pronaći ćete niz znakova u donjem delu prednjeg ili zadnjeg dela dokumenta. Podeljen je u 2 ili 3 reda i podeljenim strelicama (<< ili >>).", + details_desktop: + "Proverite da li se na prednjoj i zadnjoj strani dokumenta nalazi MRZ. Potražite 2–3 reda znakova i simbole strelica (<<) na dnu dokumenta. Uverite se da je objektiv kamere čist, a dokument dobro osvetljen.", + title: "Pronađite MRZ na dokumentu", + title_desktop: "Očistite sočiva kamere i nađite MRZ", + }, full_document: { details: "Uverite se da je dokument dobro osvetljen. Sva polja dokumenta treba da budu vidljiva na ekranu kamere.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Ekran skeniranja dokumenta", timeout_modal: { - details: "Nije moguće pročitati dokument. Molimo Vas, pokušajte ponovo.", - title: "Skeniranje neuspešno", + details: + "Vodite računa da dokument bude dobro osvetljen, u potpunosti vidljiv i na na njemu nema odsjaja.", + details_desktop: + "Vodite računa da objektiv kamere bude čist i da dokument bude u fokusu i dobro osvetljen.", + title: "Nije moguće očitavanje dokumenta", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/sv.ts b/packages/blinkid-ux-manager/src/ui/locales/sv.ts index 9efdf1de..f8701931 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/sv.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/sv.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Lyckades! Framsidan skannad", glare_detected: "Luta eller flytta dokumentet för att ta bort reflektionen", keep_document_parallel: "Håll dokumentet parallellt med skärmen", - keep_document_still: "Håll dokumentet och enheten stilla", keep_still: "Stå stilla", move_closer: "Flytta närmare", move_farther: "Flytta längre bort", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skanna streckkoden", scan_the_barcode_side: "Skanna streckkodssidan av ett dokument", scan_the_front_side: "Skanna dokumentets framsida", + scan_the_mrz_side: "Skanna den sida av dokumentet där MRZ-koden finns", scan_top_page: "Skanna den översta sidan", too_bright: "Flytta till mindre belyst plats", too_dark: "Flytta till mer belyst plats", @@ -115,6 +115,37 @@ export default { title_desktop: "Håll streckkoden synlig", }, }, + document_with_mrz: { + blur: { + details: + "Försök att hålla telefonen och dokumentet stilla under skanningen. Om du rör någotdera kan bilden bli suddig och informationen på dokumentet oläslig.", + details_desktop: + "Försök att stå stilla medan du skannar. Rörelse kan göra bilden suddig och göra informationen i dokumentet oläslig.", + title: "Håll stilla medan du skannar", + title_desktop: "Håll stilla medan du skannar", + }, + camera_lens: { + details_desktop: + "Kontrollera om kameralinsen är smutsig eller dammig. Om linsen är smutsig blir den färdiga bilden suddig, vilket innebär att kortuppgifterna blir oläsliga och skanningen misslyckas.", + title_desktop: "Rengör kameralinsen", + }, + lighting: { + details: + "Undvik starkt direktljus eftersom det reflekteras från dokumentet och kan göra delar av det oläsliga. Om du inte kan läsa informationen på dokumentet kommer den inte heller att synas för kameran.", + details_desktop: + "Undvik starkt direktljus eftersom det reflekteras från dokumentet och kan göra delar av det oläsliga. Om du inte kan läsa informationen på dokumentet kommer den inte heller att synas för kameran.", + title: "Se upp för skarpt ljus", + title_desktop: "Se upp för skarpt ljus", + }, + visibility: { + details: + "Kontrollera att du inte täcker delar av MRZ-koden med ett finger. Se också upp för reflektioner som kan göra MRZ-koden oläslig.", + details_desktop: + "Kontrollera att du inte täcker delar av MRZ-koden med ett finger. Se också upp för reflektioner som kan göra MRZ-koden oläslig.", + title: "Håll MRZ-koden synlig", + title_desktop: "Håll MRZ-koden synlig", + }, + }, done_btn: "Klart", done_btn_aria: "Återuppta skanning", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Börja skanna", document_with_barcode: { details: - "Olika typer av ID-kort kan ha olika streckkodsformat och placeringar. Titta på fram- och baksidan av ID-korten för att se om det finns en streckkod.", + "Olika typer av dokument kan ha olika streckkodsformat, och placeringen kan variera. Titta på båda sidorna av dokumentet för att hitta streckkoden.", details_desktop: - "Kontrollera fram- och baksidan av ID-kortet för en streckkod. Se till att hålla kameralinsen ren och dokumentet väl upplyst.", - title: "Leta reda på streckkoden på ID-kortet", + "Leta efter streckkoden på båda sidorna av dokumentet. Kontrollera att kameralinsen är ren och att dokumentet är väl belyst.", + title: "Leta reda på dokumentets streckkod", title_desktop: "Rengör linsen och leta reda på streckkoden", }, + document_with_mrz: { + details: + "Längst ner på dokumentets fram- eller baksida finns två eller tre rader med tecken som separeras av pilar (<< eller >>).", + details_desktop: + "Längst ner på dokumentets fram- eller baksida finns MRZ-koden, som består av två eller tre rader med tecken och pilar (<< ). Kontrollera att kameralinsen är ren och att dokumentet är väl belyst.", + title: "Leta reda på dokumentets MRZ-kod", + title_desktop: "Rengör kameralinsen och leta reda på MRZ-koden", + }, full_document: { details: "Se till att dokumentet är väl belyst. Alla fält i dokumentet ska synas på kameraskärmen.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Skärm för dokumentskanning", timeout_modal: { - details: "Det gick inte att läsa dokumentet. Försök igen.", - title: "Skanningen misslyckades", + details: + "Kontrollera att belysningen är god och att hela dokumentet är synligt och fritt från reflektioner.", + details_desktop: + "Kontrollera att kameralinsen är ren och att hela dokumentet är synligt, i fokus och väl belyst.", + title: "Dokumentet kunde inte läsas", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/sw.ts b/packages/blinkid-ux-manager/src/ui/locales/sw.ts index 069e9803..e94ce9cb 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/sw.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/sw.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Imemaliza! Upande wa mbele umeskaniwa", glare_detected: "Inamisha au sogeza hati ili uondoe mwanga unaoakisiwa", keep_document_parallel: "Hakikisha hati iko sambamba na skrini", - keep_document_still: "Hakikisha hati na kifaa havisongi", keep_still: "Hakikisha haisongi", move_closer: "Songa karibu", move_farther: "Songa mbali", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Skani msimbopau", scan_the_barcode_side: "Skani upande wa msimbopau wa hati", scan_the_front_side: "Skani upande wa mbele wa hati", + scan_the_mrz_side: "Skani upande wa MRZ wa hati", scan_top_page: "Skani ukurasa wa juu", too_bright: "Songa mahali penye mwanga kidogo", too_dark: "Songa mahali penye mwanga mwingi", @@ -115,6 +115,37 @@ export default { title_desktop: "Hakikisha msimbopau unaonekana", }, }, + document_with_mrz: { + blur: { + details: + "Jaribu kuhakikisha hati na simu havisongi unaposkani. Ukisogeza chochote picha inaweza kukosa kuonekana vizuri na kufanya data kwenye hati isiweze kusomeka.", + details_desktop: + "Jaribu kuhakikisha haisongi unaposkani. Ikisonga inaweza kufanya picha isionekane vizuri na kufanya data kwenye hati isiweze kusomeka.", + title: "Usisonge unaposkani", + title_desktop: "Usisonge unaposkani", + }, + camera_lens: { + details_desktop: + "Angalia lenzi ya kamera yako kama ina uchafu au madoa. Lenzi chafu hufanya picha ya mwisho isionekane vizuri, na kufanya maelezo ya hati yasiweze kusomeka na kuzuia data kuskanikiwa vizuri.", + title_desktop: "Safisha lenzi ya kamera yako", + }, + lighting: { + details: + "Epuka mwanga mkali wa moja kwa moja kwa sababu huakisiwa kutoka kwenye hati na inaweza kufanya sehemu za hati zisiweze kusomeka. Ikiwa huwezi kusoma data kwenye hati, vilevile haitaonekana kwenye kamera.", + details_desktop: + "Epuka mwanga mkali wa moja kwa moja kwa sababu huakisiwa kutoka kwenye hati na inaweza kufanya sehemu za hati zisiweze kusomeka. Ikiwa huwezi kusoma data kwenye hati, vilevile haitaonekana kwenye kamera.", + title: "Kuwa mwangalifu na mwanga mkali", + title_desktop: "Kuwa mwangalifu na mwanga mkali", + }, + visibility: { + details: + "Hakikisha hujafunika sehemu za MRZ kwa kidole. Pia, kuwa mwangalifu na mwanga unaoakisiwa unaopita juu ya MRZ na unaweza kuufanya isisomeke.", + details_desktop: + "Hakikisha hujafunika sehemu za MRZ kwa kidole. Pia, kuwa mwangalifu na mwanga unaoakisiwa unaopita juu ya MRZ na unaweza kuufanya isisomeke.", + title: "Hakikisha MRZ inaonekana", + title_desktop: "Hakikisha MRZ inaonekana", + }, + }, done_btn: "Umemaliza", done_btn_aria: "Endelea kuskani", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Anza kuskani", document_with_barcode: { details: - "Aina tofauti za vitambulisho vinaweza kuwa na miundo na maeneo tofauti ya msimbopau. Angalia upande wa mbele na nyuma wa kitambulisho ili uone msimbopau.", + "Aina tofauti za hati zinaweza kuwa na miundo na sehemu tofauti ya msimbopau. Angalia upande wa mbele na nyuma wa hati ili uone msimbopau.", details_desktop: - "Angalia upande wa mbele na nyuma wa kitambulisho ili uone msimbopau. Hakikisha lenzi za kamera yako ni safi na hati iko kwenye mwanga wa kutosha.", - title: "Tafuta msimbopau kwenye kitambulisho", + "Angalia upande wa mbele na nyuma wa hati ili uone msimbopau. Hakikisha lenzi za kamera yako ni safi na hati iko kwenye mwanga wa kutosha.", + title: "Tafuta msimbopau kwenye hati", title_desktop: "Safisha lenzi za kamera yako na utafute msimbopau", }, + document_with_mrz: { + details: + "Utapata mfululizo mrefu wa herufi chini ya sehemu ya mbele au nyuma ya hati, uliogawanywa katika mistari 2 au 3 na kutenganishwa na mishale (<< au >>).", + details_desktop: + "Angalia upande wa mbele na nyuma wa hati ili uone MZR. Tafuta mistari 2–3 ya herufi na alama za kishale (<<) zilizo chini ya hati.Hakikisha lenzi za kamera yako ni safi na hati iko kwenye mwanga wa kutosha.", + title: "Tafuta MRZ kwenye hati", + title_desktop: "Safisha lenzi yako na utafute MRZ", + }, full_document: { details: "Hakikisha hati iko kwenye mwanga wa kutosha. Sehemu zote za hati zinapaswa kuonekana kwenye skrini ya kamera.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Skrini ya kuskani hati", timeout_modal: { - details: "Imeshindwa kusoma hati. Tafadhali jaribu tena.", - title: "Imeshindwa kuskani", + details: + "Hakikisha hati ina mwanga wa kutosha, inaonekana vizuri, na haina mng'ao.", + details_desktop: + "Hakikisha lenzi za kamera yako ni safi na hati inaonekana kikamilifu, iko wazi na ina mwanga wa kutosha.", + title: "Imeshindwa kusoma hati", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/th.ts b/packages/blinkid-ux-manager/src/ui/locales/th.ts index b76ce26a..0cbab428 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/th.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/th.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "สำเร็จ! สแกนด้านหน้าแล้ว", glare_detected: "เอียงหรือย้ายเอกสารเพื่อลบแสงสะท้อน", keep_document_parallel: "จัดเอกสารให้ขนานกับหน้าจอ", - keep_document_still: "จับเอกสารและอุปกรณ์ให้นิ่ง", keep_still: "ถือนิ่งๆ", move_closer: "เลื่อนเข้าใกล้", move_farther: "เลื่อนออกห่าง", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "สแกนบาร์โค้ด", scan_the_barcode_side: "สแกนด้านบาร์โค้ดของเอกสาร", scan_the_front_side: "สแกนด้านหน้าของเอกสาร", + scan_the_mrz_side: "สแกนด้าน MRZ ของเอกสาร", scan_top_page: "สแกนหน้าบนสุด", too_bright: "ย้ายไปยังจุดที่มีแสงสว่างน้อยกว่า", too_dark: "ย้ายไปยังจุดที่สว่างกว่า", @@ -115,6 +115,37 @@ export default { title_desktop: "ทำให้บาร์โค้ดมองเห็นได้ชัดเจน", }, }, + document_with_mrz: { + blur: { + details: + "ถือโทรศัพท์และวางเอกสารไว้นิ่งๆ ขณะสแกน การเคลื่อนไหวอาจทำให้ภาพพร่ามัวและทำให้ข้อมูลบนเอกสารอ่านไม่ออก", + details_desktop: + "ถือไว้นิ่งๆ ขณะสแกน การเคลื่อนไหวอาจทำให้ภาพพร่ามัวและทำให้ข้อมูลบนเอกสารอ่านไม่ออก", + title: "ถือนิ่งๆ ขณะสแกน", + title_desktop: "ถือนิ่งๆ ขณะสแกน", + }, + camera_lens: { + details_desktop: + "ตรวจสอบเลนส์กล้องว่ามีคราบรอยเปื้อนหรือฝุ่นหรือไม่ เลนส์ที่สกปรกจะทำให้ภาพสุดท้ายเบลอ ทำให้รายละเอียดบนเอกสารไม่สามารถอ่านได้ และทำให้ไม่สามารถสแกนข้อมูลได้สำเร็จ", + title_desktop: "ทำความสะอาดเลนส์กล้องของคุณ", + }, + lighting: { + details: + "หลีกเลี่ยงแสงจ้าที่ส่องตรงๆ เพราะแสงสะท้อนจากเอกสารและเอกสารอ่านไม่ออกบางส่วนได้ หากคุณอ่านข้อมูลบนเอกสารไม่ได้ กล้องก็จะมองไม่เห็นเช่นกัน", + details_desktop: + "หลีกเลี่ยงแสงจ้าที่ส่องตรงๆ เพราะแสงสะท้อนจากเอกสารและเอกสารอ่านไม่ออกบางส่วนได้ หากคุณอ่านข้อมูลบนเอกสารไม่ได้ กล้องก็จะมองไม่เห็นเช่นกัน", + title: "ระวังแสงจ้า", + title_desktop: "ระวังแสงจ้า", + }, + visibility: { + details: + "ตรวจสอบให้แน่ใจว่าคุณไม่ได้ปกปิดบางส่วนของ MRZ ด้วยนิ้ว นอกจากนี้ ระวังการสะท้อนที่ส่องผ่านโค้ด MRZ และอาจทำให้อ่านไม่ได้", + details_desktop: + "ตรวจสอบให้แน่ใจว่าคุณไม่ได้ปกปิดบางส่วนของ MRZ ด้วยนิ้ว นอกจากนี้ ระวังการสะท้อนที่ส่องผ่านโค้ด MRZ และอาจทำให้อ่านไม่ได้", + title: "ทำให้ MRZ มองเห็นได้", + title_desktop: "ทำให้ MRZ มองเห็นได้", + }, + }, done_btn: "เสร็จสิ้น", done_btn_aria: "สแกนต่อ", full_document: { @@ -163,12 +194,20 @@ export default { btn: "เริ่มการสแกน", document_with_barcode: { details: - "บัตรประจำตัวต่างๆ อาจมีรูปแบบบาร์โค้ดและตำแหน่งที่แตกต่างกัน ดูบาร์โค้ดที่ด้านหน้าและด้านหลังบัตรประจำตัว", + "เอกสารประเภทต่างๆ อาจมีรูปแบบบาร์โค้ดและตำแหน่งที่แตกต่างกัน โปรดดูบาร์โค้ดที่ด้านหน้าและด้านหลังเอกสาร", details_desktop: - "ตรวจสอบด้านหน้าและด้านหลังของบัตรประจำตัวว่ามีบาร์โค้ดหรือไม่ ตรวจสอบว่าเลนส์กล้องของคุณสะอาดและสามารถมองเห็นรหัสบาร์โค้ดได้ชัดเจนดี", - title: "หาบาร์โค้ดบนบัตรประจำตัว", + "ตรวจสอบด้านหน้าและด้านหลังของเอกสารว่ามีบาร์โค้ดหรือไม่ ตรวจสอบว่าเลนส์กล้องของคุณสะอาดและสามารถมองเห็นรหัสบาร์โค้ดได้ชัดเจนดี", + title: "ค้นหาบาร์โค้ดบนเอกสาร", title_desktop: "ทำความสะอาดเลนส์กล้องของคุณและหาบาร์โค้ด", }, + document_with_mrz: { + details: + "คุณจะพบชุดอักขระยาวที่ด้านล่างของส่วนหน้าหรือส่วนหลังของเอกสาร แยกออกเป็น 2 หรือ 3 บรรทัดและคั่นด้วยลูกศร (<< หรือ >>)", + details_desktop: + "ตรวจสอบด้านหน้าและด้านหลังของเอกสารสำหรับ MRZ มองหาตัวอักษร 2-3 บรรทัดและสัญลักษณ์ลูกศร (<<) ที่ด้านล่างของเอกสาร ตรวจสอบว่าเลนส์กล้องของคุณสะอาดและสามารถมองเห็นเอกสารได้ชัดเจนดี", + title: "ค้นหา MRZ บนเอกสาร", + title_desktop: "ทำความสะอาดเลนส์กล้องของคุณและหา MRZ", + }, full_document: { details: "ตรวจสอบว่าเอกสารของคุณมีแสงสว่างเพียงพอ คุณควรมองเห็นทุกส่วนของเอกสารบนหน้าจอกล้อง", @@ -180,7 +219,9 @@ export default { }, sdk_aria: "หน้าจอสแกนเอกสาร", timeout_modal: { - details: "ไม่สามารถอ่านเอกสาร โปรดลองอีกครั้ง", - title: "สแกนไม่สำเร็จ", + details: "ตรวจสอบว่าเอกสารของคุณเห็นได้ครบถ้วนดีและไม่มีแสงสะท้อน", + details_desktop: + "ตรวจสอบว่าเลนส์กล้องของคุณสะอาดและสามารถเห็นเอกสารได้ครบถ้วนดี อยู่ในโฟกัส และมองเห็นได้ชัดเจนดี", + title: "ไม่สามารถอ่านเอกสาร", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/tr.ts b/packages/blinkid-ux-manager/src/ui/locales/tr.ts index 7ae6d4ab..311b9239 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/tr.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/tr.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Başarılı! Ön taraf tarandı", glare_detected: "Yansımayı gidermek için belgeyi eğ veya hareket ettir", keep_document_parallel: "Belgeyi ekrana paralel tutun", - keep_document_still: "Belgeyi ve cihazı sabit tutun", keep_still: "Sabit tutun", move_closer: "Yaklaş", move_farther: "Uzaklaş", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Barkodu tara", scan_the_barcode_side: "Belgenin barkodlu tarafını tarayın", scan_the_front_side: "Belgenin ön tarafını tara", + scan_the_mrz_side: "Belgenin MRZ bulunan tarafını tarayın", scan_top_page: "En üst sayfayı tara", too_bright: "Daha az ışık olan bir noktaya geç", too_dark: "Daha aydınlık bir noktaya geç", @@ -116,6 +116,37 @@ export default { title_desktop: "Barkodun görünür olduğundan emin olun", }, }, + document_with_mrz: { + blur: { + details: + "Tarama sırasında telefonu ve belgeyi sabit tutmaya çalış. Telefon veya belgenin hareket etmesi görüntüyü bulanıklaştırabilir ve belgedeki verileri okunmaz hâle getirebilir.", + details_desktop: + "Tarama sırasında cihazı sabit tutmaya çalışın. Hareket ettirmek görüntüyü bulanıklaştırarak belgedeki bilgilerin okunmasını zorlaştırabilir.", + title: "Tarama sırasında hareketsiz kal", + title_desktop: "Tarama sırasında hareketsiz kal", + }, + camera_lens: { + details_desktop: + "Kamera lensinizin lekeli veya tozlu olup olmadığını kontrol edin. Lens kirliyse görüntü bulanık çıkar; bu da belge üzerindeki bilgilerin okunamamasına ve verilerin başarıyla taranamamasına yol açar.", + title_desktop: "Kamera lenslerinizi temizleyin", + }, + lighting: { + details: + "Doğrudan gelen sert ışık belgeden yansıyarak belgenin bazı kısımlarını okunmaz hâle getirebileceği için bu tür ışık kullanmaktan kaçın. Belgedeki verileri okuyamıyorsan bu veriler kamerada da görünmeyecektir.", + details_desktop: + "Doğrudan gelen sert ışık belgeden yansıyarak belgenin bazı kısımlarını okunmaz hâle getirebileceği için bu tür ışık kullanmaktan kaçın. Belgedeki verileri okuyamıyorsan bu veriler kamerada da görünmeyecektir.", + title: "Sert ışığa dikkat et", + title_desktop: "Sert ışığa dikkat et", + }, + visibility: { + details: + "MRZ'nin herhangi bir bölümünü parmağınızla kapatmadığınızdan emin olun. Ayrıca MRZ'nin okunması engelleyebilecek yansımalara dikkat edin.", + details_desktop: + "MRZ'nin herhangi bir bölümünü parmağınızla kapatmadığınızdan emin olun. Ayrıca MRZ'nin okunması engelleyebilecek yansımalara dikkat edin.", + title: "MRZ'nin görünür olmasına dikkat edin", + title_desktop: "MRZ'nin görünür olmasına dikkat edin", + }, + }, done_btn: "Bitti", done_btn_aria: "Taramaya devam et", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Taramayı Başlat", document_with_barcode: { details: - "Farklı kimlik türlerinin barkod formatları ve konumları değişiklik gösterebilir. Barkod için kimliğin ön ve arka yüzüne bakın.", + "Farklı belge türlerinde barkod biçimleri ve yerleri farklı olabilir. Barkodu bulmak için belgenin ön ve arka yüzüne bakın.", details_desktop: - "Kimliğin ön ve arka yüzünde barkod olup olmadığını kontrol edin. Kamera lensinizin temiz ve belgenin iyi aydınlatılmış olduğundan emin olun.", - title: "Kimlik üzerindeki barkodu bulun", + "Belgede barkod olup olmadığını kontrol etmek için belgenin ön ve arka yüzüne bakın. Kamera lensinizin temiz ve belgenin iyi aydınlatılmış olmasına dikkat edin.", + title: "Belgede barkodu bulun", title_desktop: "Kamera lensinizi temizleyin ve barkodu bulun", }, + document_with_mrz: { + details: + "Belgenin ön veya arka yüzünün alt kısmında 2 veya 3 satıra ayrılmış ve oklarla (<< veya >>) ayrılmış uzun bir karakter dizisi göreceksiniz.", + details_desktop: + "Belgede MRZ olup olmadığını kontrol etmek için belgenin ön ve arka yüzüne bakın. Belgenin alt kısmında 2-3 satırdan oluşan karakterleri ve ok sembollerini (<<) bulun. Kamera lensinizin temiz ve belgenin iyi aydınlatılmış olmasına dikkat edin.", + title: "Belgede MRZ'yi bulun", + title_desktop: "Lensinizi temizleyin ve MRZ'yi bulun", + }, full_document: { details: "Belgenin iyi aydınlatıldığından emin ol. Tüm belge alanları kamera ekranında görünür olmalıdır.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Belge tarama ekranı", timeout_modal: { - details: "Belge okunamıyor. Lütfen tekrar dene.", - title: "Tarama başarısız", + details: + "Belgenin iyi aydınlatılmış ve tamamen görünür olmasına ve belge üzerinde bir parlama olmamasına dikkat edin.", + details_desktop: + "Kamera lensinizin temiz ve belgenin tamamen görünür, odakta ve iyi aydınlatılmış olmasına dikkat edin.", + title: "Belge okunamıyor", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/uk.ts b/packages/blinkid-ux-manager/src/ui/locales/uk.ts index 34173977..0ad6dad2 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/uk.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/uk.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "Готово! Передній бік відскановано.", glare_detected: "Нахиліть або перемістіть документ, щоб прибрати відблиск", keep_document_parallel: "Тримайте документ паралельно екрану", - keep_document_still: "Тримайте документ і пристрій нерухомо", keep_still: "Не рухайтеся", move_closer: "Наблизьтесь", move_farther: "Віддаляйтесь", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "Відскануйте штрих-код", scan_the_barcode_side: "Відскануйте сторону документа зі штрих-кодом", scan_the_front_side: "Відскануйте лицьову сторону документа", + scan_the_mrz_side: "Відскануйте сторону документа з MRZ", scan_top_page: "Відскануйте верхню сторінку", too_bright: "Перейдіть у місце з менш яскравим освітленням", too_dark: "Перейдіть у більш освітлене місце", @@ -115,6 +115,37 @@ export default { title_desktop: "Тримайте штрих-код повністю видимим", }, }, + document_with_mrz: { + blur: { + details: + "Намагайтеся тримати телефон і документ нерухомо під час сканування. Рух одного з них може розмити зображення та зробити дані на документі нечитабельними.", + details_desktop: + "Під час сканування намагайтеся тримати телефон і документ нерухомо. Рух одного з них може розмити зображення та зробити дані на документі нечитабельними.", + title: "Не рухайтеся під час сканування", + title_desktop: "Не рухайтеся під час сканування", + }, + camera_lens: { + details_desktop: + "Перевірте об'єктив камери на наявність плям або пилу. Брудний об'єктив призводить до розмиття кінцевого зображення, що робить деталі документу нечитабельними та заважає успішному скануванню даних.", + title_desktop: "Очистіть об'єктив камери", + }, + lighting: { + details: + "Уникайте прямого яскравого світла, адже воно відбивається від документа і може зробити частини документа нечитабельними. Якщо ви не можете прочитати дані на документі, камера їх також не зчитає.", + details_desktop: + "Уникайте прямого яскравого світла, адже воно відбивається від документа і може зробити частини документа нечитабельними. Якщо ви не можете прочитати дані на документі, камера їх також не зчитає.", + title: "Обережно з яскравим світлом", + title_desktop: "Обережно з яскравим світлом", + }, + visibility: { + details: + "Переконайтеся, що ви не закриваєте частини MRZ пальцем. Також стежте за відблисками, які перекривають MRZ і можуть зробити його нечитабельним.", + details_desktop: + "Переконайтеся, що ви не закриваєте частини MRZ пальцем. Також стежте за відблисками, які перекривають MRZ і можуть зробити його нечитабельним.", + title: "Тримайте MRZ повністю видимим", + title_desktop: "Тримайте MRZ повністю видимим", + }, + }, done_btn: "Готово", done_btn_aria: "Відновити сканування", full_document: { @@ -163,12 +194,20 @@ export default { btn: "Почати сканування", document_with_barcode: { details: - "Різні типи посвідчень особи можуть мати різні формати та розташування штрих-коду. Щоб знайти штрих-код, перегляньте лицьовий та зворотний бік посвідчення особи.", + "Різні типи документів можуть мати різні формати та розташування штрих-коду. Щоб знайти штрих-код, перегляньте лицьовий та зворотний бік документа.", details_desktop: - "Перевірте передню та задню сторони посвідчення особи на наявність штрих-коду. Переконайтеся, що об'єктив камери чистий, а документ добре освітлений.", - title: "Знайдіть штрих-код на посвідченні особи", + "Перевірте передню та задню сторони документа на наявність штрих-коду. Переконайтеся, що об'єктив камери чистий, а документ добре освітлений.", + title: "Знайдіть штрих-код на документі", title_desktop: "Очистьте об’єктив і знайдіть штрих-код", }, + document_with_mrz: { + details: + "Ви знайдете довгий рядок символів внизу передньої або задньої сторони документа, розділений на 2 або 3 рядки та відокремлений стрілками (<< або >>).", + details_desktop: + "Перевірте передню та задню сторони посвідчення особи на наявність MRZ. Шукайте 2–3 рядки символів та символи стрілок (<<) внизу документа. Переконайтеся, що об'єктив камери чистий, а документ добре освітлений.", + title: "Знайдіть MRZ на документі", + title_desktop: "Очистьте об’єктив і знайдіть MRZ", + }, full_document: { details: "Переконайтеся, що документ добре освітлений. Усі поля документа мають бути видимими на екрані камери.", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "Екран сканування документів", timeout_modal: { - details: "Не вдалося зчитати документ. Будь ласка, спробуйте ще раз.", - title: "Сканування не вдалося", + details: + "Переконайтеся, що документ добре освітлений, повністю видимий та без відблисків.", + details_desktop: + "Переконайтеся, що об’єктив камери чистий, що документ повністю видно, що він у фокусі та добре освітлений.", + title: "Не вдалося зчитати документ", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/ur.ts b/packages/blinkid-ux-manager/src/ui/locales/ur.ts index 02cd6f95..9e2674c3 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/ur.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/ur.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "کامیابی! سامنے کا رخ اسکین ہو گیا ہے", glare_detected: "عکس ختم کرنے کے لئے دستاویز کو جھکائیں یا حرکت دیں", keep_document_parallel: "دستاویز کو سکرین کے متوازی رکھیں", - keep_document_still: "دستاویز اور ڈیوائس کو ساکن رکھیں", keep_still: "ساکن رہیں", move_closer: "اور قریب جائیں", move_farther: "اور دور جائیں", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "بار کوڈ اسکین کریں", scan_the_barcode_side: "دستاویز کی بار کوڈ والی سائیڈ اسکین کریں", scan_the_front_side: "دستاویز کے سامنے والے حصے کو اسکین کریں", + scan_the_mrz_side: "دستاویز کے MRZ والے رخ کو اسکین کریں", scan_top_page: "اوپری صفحے کو اسکین کریں", too_bright: "کم روشنی والی جگہ پر جائیں", too_dark: "زیادہ روشن جگہ پر جائیں", @@ -115,6 +115,37 @@ export default { title_desktop: "بار کوڈ کو نمایاں رکھیں", }, }, + document_with_mrz: { + blur: { + details: + "اسکین کرتے وقت فون اور دستاویز کو ساکن رکھنے کی کوشش کریں۔ ان میں سے کسی کو بھی حرکت دینے سے تصویر دھندلا سکتی ہے اور دستاویز پر موجود ڈیٹا پڑھنے کے قابل نہیں رہتا۔", + details_desktop: + "اسکین کرتے وقت ساکن رہنے کی کوشش کریں۔ حرکت کرنے سے تصویر دھندلی ہو سکتی ہے اور بار کوڈ پڑھنے میں دشواری پیش آ سکتی ہے۔", + title: "اسکین کرتے وقت ساکن رہیں", + title_desktop: "اسکین کرتے وقت ساکن رہیں", + }, + camera_lens: { + details_desktop: + "اپنے کیمرے کے لینز پر دھبوں یا گردوغبار کی جانچ کریں۔ گندا لینز حتمی تصویر کو دھندلا کر دیتا ہے، جس سے دستاویز کی تفصیلات پڑھنے کے قابل نہیں رہتیں اور ڈیٹا کامیابی سے اسکین نہیں ہو پاتا۔", + title_desktop: "اپنے کیمرہ کے لینز کو صاف کریں", + }, + lighting: { + details: + "براہِ راست تیز روشنی سے پرہیز کریں کیونکہ یہ دستاویز پر عکس ڈالتی ہے اور اس کے کچھ حصے پڑھنے کے قابل نہیں رہتے۔ اگر آپ خود دستاویز پر موجود ڈیٹا نہیں پڑھ سکتے تو یہ کیمرے پر بھی نظر نہیں آئے گا۔", + details_desktop: + "براہِ راست تیز روشنی سے پرہیز کریں کیونکہ یہ دستاویز پر عکس ڈالتی ہے اور اس کے کچھ حصے پڑھنے کے قابل نہیں رہتے۔ اگر آپ خود دستاویز پر موجود ڈیٹا نہیں پڑھ سکتے تو یہ کیمرے پر بھی نظر نہیں آئے گا۔", + title: "تیز روشنی سے بچیں", + title_desktop: "تیز روشنی سے بچیں", + }, + visibility: { + details: + "یقینی بنائیں کہ آپ کی انگلی سے MRZ کا کوی حصہ نہ ڈھکا ہو۔ اس کے علاوہ، MRZ پر پڑنے والے انعکاس سے بھی بچیں، کیونکہ اس سے متن پڑھنے کے قابل نہیں رہ سکتا۔", + details_desktop: + "یقینی بنائیں کہ آپ کی انگلی سے MRZ کا کوی حصہ نہ ڈھکا ہو۔ اس کے علاوہ، MRZ پر پڑنے والے انعکاس سے بھی بچیں، کیونکہ اس سے متن پڑھنے کے قابل نہیں رہ سکتا۔", + title: "MRZ کو نمایاں رکھیں", + title_desktop: "MRZ کو نمایاں رکھیں", + }, + }, done_btn: "ہو گیا", done_btn_aria: "اسکیننگ دوبارہ شروع کریں", full_document: { @@ -163,12 +194,20 @@ export default { btn: "اسکیننگ شروع کریں", document_with_barcode: { details: - "مختلف اقسام کی IDs میں بار کوڈ کے فارمیٹس اور ان کی جگہ مختلف ہو سکتی ہے۔ بار کوڈ کے لیے ID کے سامنے اور پیچھے والے حصے کو دیکھیں۔", + "مختلف اقسام کی دستاویزات میں بارکوڈ کے فارمیٹس اور مقامات مختلف ہو سکتے ہیں۔ بارکوڈ تلاش کرنے کے لیے دستاویز کے اگلے اور پچھلے رخ کو دیکھیں۔", details_desktop: - "ID کے سامنے اور پیچھے والے حصے پر بار کوڈ چیک کریں۔ یقینی بنائیں کہ آپ کے کیمرے کا لینز صاف ہو اور دستاویز مناسب روشنی میں ہو۔", - title: "ID پر بار کوڈ تلاش کریں", + "دستاویز کے اگلے اور پچھلے رخ پر بارکوڈ تلاش کریں۔ یقینی بنائیں کہ کیمرے کا لینز صاف ہو اور دستاویز پر مناسب روشنی پڑ رہی ہو۔", + title: "دستاویز پر بارکوڈ تلاش کریں", title_desktop: "اپنا لینز صاف کریں اور بار کوڈ تلاش کریں", }, + document_with_mrz: { + details: + "دستاویز کے اگلے یا پچھلے رخ کے نچلے حصے میں حروف کی ایک طویل لڑی موجود ہوگی، جو 2 یا 3 سطروں میں تقسیم اور تیر کے نشانات (<< یا >>) سے جدا ہوگی۔", + details_desktop: + "دستاویز کے اگلے اور پچھلے حصے پر MRZ تلاش کریں۔ دستاویز کے نچلے حصے میں حروف اور تیر کے نشانات (<<) پر مشتمل 2 سے 3 سطریں دیکھیں۔ یقینی بنائیں کہ کیمرے کا لینز صاف ہو اور دستاویز پر مناسب روشنی پڑ رہی ہو۔", + title: "دستاویز پر MRZ تلاش کریں", + title_desktop: "کیمرے کا لینز صاف کریں اور MRZ تلاش کریں", + }, full_document: { details: "یقینی بنائیں کہ دستاویز اچھی طرح روشن ہو۔ دستاویز کے تمام خانے کیمرہ اسکرین پر واضح نظر آنے چاہئیں۔", @@ -180,7 +219,10 @@ export default { }, sdk_aria: "دستاویز اسکین کرنے کی اسکرین", timeout_modal: { - details: "دستاویز پڑھنے میں ناکامی۔ براہ کرم دوبارہ کوشش کریں۔", - title: "اسکین ناکام رہا", + details: + "یقینی بنائیں کہ دستاویز پر مناسب روشنی پڑ رہی ہو، وہ مکمل طور پر نظر آ رہی ہو اور اس پر چمک نہ ہو۔", + details_desktop: + "یقینی بنائیں کہ کیمرے کا لینز صاف ہو اور دستاویز مکمل طور پر نظر آ رہی ہو، فوکس میں ہو اور اس پر مناسب روشنی پڑ رہی ہو۔", + title: "دستاویز پڑھی نہیں جا سکی", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/uz.ts b/packages/blinkid-ux-manager/src/ui/locales/uz.ts index e5ce263e..9249c57e 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/uz.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/uz.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Akslanishni olib tashlash uchun hujjatni eging yoki siljiting", keep_document_parallel: "Hujjatni ekranga parallel ushlang", - keep_document_still: "Hujjat va qurilmani qimirlatmang", keep_still: "Qimirlatmang", move_closer: "Yaqinlashtiring", move_farther: "Uzoqlashtiring", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Shtrix-kodni skanerlash", scan_the_barcode_side: "Hujjatning shtrix-kodli tomonini skanerlang", scan_the_front_side: "Hujjatning old tomonini skanerlang", + scan_the_mrz_side: "Hujjatning MRZ mavjud tomonini skanerlang", scan_top_page: "Yuqori sahifani skanerlang", too_bright: "Yorugʻligi kamroq joyga oling", too_dark: "Yorugʻroq joyga oling", @@ -116,6 +116,37 @@ export default { title_desktop: "Shtrix-kod koʻrinib tursin", }, }, + document_with_mrz: { + blur: { + details: + "Skanerlaganda telefon va hujjatni qimirlatmang. Ulardan istalgan birining qimirlashi rasm xira olinishiga va hujjatdagi maʼlumotlar tushunarsiz chiqishiga sabab boʻlishi mumkin.", + details_desktop: + "Skanerlaganda qimirlamang. Qimirlash rasm xira olinishiga va hujjatdagi maʼlumotlar tushunarsiz chiqishiga sabab boʻlishi mumkin.", + title: "Skanerlayotganda qimirlatmang", + title_desktop: "Skanerlayotganda qimirlatmang", + }, + camera_lens: { + details_desktop: + "Kamera linzasida dog‘ yoki chang yo‘qligini tekshiring. Kirlangan linza yakuniy tasvirni xiralashtiradi, bu hujjatdagi maʼlumotlarni o‘qib bo‘lmaydigan qiladi va ma’lumotlarni muvaffaqiyatli skanerlashga to‘sqinlik qiladi.", + title_desktop: "Kamerangiz obyektivini tozalang", + }, + lighting: { + details: + "Yorqin yorugʻlik bevosita tushmasin, chunki u hujjatda aks etadi va hujjatning ayrim qismlari tushunarsiz boʻlib qolishi mumkin. Hujjatdagi maʼlumotlarni oʻqish imkoni boʻlmasa, ular kamerada ham koʻrinmaydi.", + details_desktop: + "Yorqin yorugʻlik bevosita tushmasin, chunki u hujjatda aks etadi va hujjatning ayrim qismlari tushunarsiz boʻlib qolishi mumkin. Hujjatdagi maʼlumotlarni oʻqish imkoni boʻlmasa, ular kamerada ham koʻrinmaydi.", + title: "Kuchli yorugʻlik tushmasin", + title_desktop: "Kuchli yorugʻlik tushmasin", + }, + visibility: { + details: + "MRZ qismini barmogʻingiz bilan toʻsmayotganligingizga ishonch hosil qiling. Shuningdek, MRZ ustiga tushib, uni oʻqib boʻlmaydigan qilib qoʻyishi mumkin boʻlgan akslanishlardan ehtiyot boʻling.", + details_desktop: + "MRZ qismini barmogʻingiz bilan toʻsmayotganligingizga ishonch hosil qiling. Shuningdek, MRZ ustiga tushib, uni oʻqib boʻlmaydigan qilib qoʻyishi mumkin boʻlgan akslanishlardan ehtiyot boʻling.", + title: "MRZ koʻrinib tursin", + title_desktop: "MRZ koʻrinib tursin", + }, + }, done_btn: "Tayyor", done_btn_aria: "Skanerlashni davom etish", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Skanerlashni boshlash", document_with_barcode: { details: - "Turli ID hujjatlarida shtrix-kod formatlari va joylari ham har xil boʻlishi mumkin. Shtrix-kodni ID hujjatning old va orqa tomonidan qidiring.", + "Har xil turdagi hujjatlarda shtrixkod formati va joylashuvi turlicha boʻlishi mumkin. Shtrixkodni hujjatning old va orqa tomonidan qidiring.", details_desktop: - "Shtrix-kod uchun ID hujjatning old va orqa tomonini tekshiring. Kamera obyektivi tozaligiga, hujjat esa yaxshi yoritilganligiga ishonch hosil qiling.", - title: "ID hujjatda shtrix-kodni toping", + "Hujjatning old va orqa tomonida shtrixkod borligini tekshiring. Kamera linzangizni toza tuting va hujjat yaxshi yoritilganiga ishonch hosil qiling.", + title: "Hujjatdagi shtrixkodni toping", title_desktop: "Obyektivni tozalang va shtrix-kodni toping", }, + document_with_mrz: { + details: + "Hujjatning old yoki orqa tomonining pastki qismida 2 yoki 3 qatorga boʻlingan va strelkalar (<< yoki >>) bilan ajratilgan uzun belgilar qatorini topasiz.", + details_desktop: + "Hujjatning old va orqa tomonida MRZ borligini tekshiring. Hujjatning pastki qismidagi 2–3 qatorli belgilar va strelka (<<) belgilarini qidiring. Kamera linzasini toza saqlang va hujjat yaxshi yoritilganiga ishonch hosil qiling.", + title: "Hujjatdan MRZ'ni toping", + title_desktop: "Linzani tozalab, MRZ qismini toping", + }, full_document: { details: "Hujjat yetarlicha yoritilganiga ishonch hosil qiling. Hujjatning barcha maydonlari kamera ekranida koʻrinishi kerak.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Hujjat skanerlash ekrani", timeout_modal: { - details: "Hujjatni oʻqish imkonsiz. Qayta urining.", - title: "Skanerlandi", + details: + "Hujjat yaxshi yoritilgan, toʻliq koʻrinadigan va unda yaltiroq joylar yoʻq ekanligiga ishonch hosil qiling.", + details_desktop: + "Kamera linzangiz tozaligiga, hujjat esa toʻliq koʻrinadigan, fokusda va yaxshi yoritilganligiga ishonch hosil qiling.", + title: "Hujjatni oʻqish imkonsiz", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/vi.ts b/packages/blinkid-ux-manager/src/ui/locales/vi.ts index 6fe49e22..a14e0744 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/vi.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/vi.ts @@ -27,7 +27,6 @@ export default { glare_detected: "Nghiêng hoặc di chuyển tài liệu để loại bỏ hiệu ứng phản chiếu", keep_document_parallel: "Giữ tài liệu nằm song song với màn hình", - keep_document_still: "Giữ yên tài liệu và thiết bị", keep_still: "Giữ yên", move_closer: "Di chuyển gần hơn", move_farther: "Di chuyển xa hơn", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Quét mã vạch", scan_the_barcode_side: "Quét mặt có mã vạch của một giấy tờ", scan_the_front_side: "Quét mặt trước\\ncủa tài liệu", + scan_the_mrz_side: "Quét mặt có MRZ của giấy tờ", scan_top_page: "Quét trang trên cùng", too_bright: "Di chuyển đến nơi ít sáng hơn", too_dark: "Di chuyển đến nơi sáng hơn", @@ -116,6 +116,37 @@ export default { title_desktop: "Đảm bảo thấy rõ mã vạch", }, }, + document_with_mrz: { + blur: { + details: + "Cố gắng giữ cố định điện thoại và tài liệu trong khi quét. Việc di chuyển có thể làm mờ hình ảnh và làm cho dữ liệu trên tài liệu không thể đọc được.", + details_desktop: + "Cố gắng giữ yên khi quét. Việc di chuyển có thể làm mờ hình ảnh và làm cho dữ liệu trên giấy tờ không thể đọc được.", + title: "Giữ cố định trong khi quét", + title_desktop: "Giữ cố định trong khi quét", + }, + camera_lens: { + details_desktop: + "Kiểm tra ống kính camera xem có vết bẩn hoặc bụi không. Ống kính bẩn sẽ khiến hình ảnh cuối bị mờ, làm cho thông tin trên tài liệu không thể đọc được và ngăn cản việc quét dữ liệu thành công.", + title_desktop: "Làm sạch ống kính camera", + }, + lighting: { + details: + "Tránh ánh sáng gay gắt trực tiếp vì ánh sáng đó phản chiếu từ tài liệu và có thể làm cho các phần của tài liệu không thể đọc được. Nếu bạn không thể đọc dữ liệu trên tài liệu, chúng cũng sẽ không nhìn thấy rõ trên camera.", + details_desktop: + "Tránh ánh sáng gay gắt trực tiếp vì ánh sáng đó phản chiếu từ tài liệu và có thể làm cho các phần của tài liệu không thể đọc được. Nếu bạn không thể đọc dữ liệu trên tài liệu, chúng cũng sẽ không nhìn thấy rõ trên camera.", + title: "Đề phòng ánh sáng gay gắt", + title_desktop: "Đề phòng ánh sáng gay gắt", + }, + visibility: { + details: + "Đảm bảo bạn không dùng ngón tay che các phần của MRZ. Ngoài ra, hãy chú ý tránh để các vệt phản chiếu ánh sáng đè lên MRZ có thể khiến MRZ không đọc được.", + details_desktop: + "Đảm bảo bạn không dùng ngón tay che các phần của MRZ. Ngoài ra, hãy chú ý tránh để các vệt phản chiếu ánh sáng đè lên MRZ có thể khiến MRZ không đọc được.", + title: "Đảm bảo thấy rõ MRZ", + title_desktop: "Đảm bảo thấy rõ MRZ", + }, + }, done_btn: "Đã xong", done_btn_aria: "Tiếp tục quét", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Bắt đầu quét", document_with_barcode: { details: - "Các loại thẻ ID khác nhau có thể có định dạng và vị trí mã vạch khác nhau. Hãy xem mặt trước và mặt sau của thẻ ID để tìm mã vạch.", + "Các loại giấy tờ khác nhau có thể có định dạng và vị trí mã vạch khác nhau. Hãy xem mặt trước và mặt sau của giấy tờ để tìm mã vạch.", details_desktop: - "Kiểm tra mặt trước và mặt sau của thẻ ID để tìm mã vạch. Đảm bảo rằng bạn giữ ống kính camera sạch sẽ và giấy tờ được chiếu sáng tốt.", - title: "Xác định vị trí mã vạch trên thẻ ID", + "Kiểm tra mặt trước và mặt sau của giấy tờ để tìm mã vạch. Đảm bảo rằng bạn giữ ống kính camera sạch sẽ và giấy tờ được chiếu sáng tốt.", + title: "Xác định vị trí mã vạch trên giấy tờ", title_desktop: "Làm sạch ống kính và tìm mã vạch", }, + document_with_mrz: { + details: + "Bạn sẽ tìm thấy một chuỗi ký tự dài ở phía dưới mặt trước hoặc mặt sau của giấy tờ, chia thành 2 hoặc 3 dòng và được phân tách bằng mũi tên (<< hoặc >>).", + details_desktop: + "Kiểm tra mặt trước và mặt sau của giấy tờ để tìm MRZ. Hãy tìm 2–3 dòng ký tự và các ký hiệu mũi tên (<<) ở phần dưới cùng của giấy tờ. Đảm bảo ống kính camera của bạn sạch sẽ và giấy tờ được chiếu sáng đầy đủ.", + title: "Xác định vị trí MRZ trên giấy tờ", + title_desktop: "Lau sạch ống kính và xác định vị trí MRZ", + }, full_document: { details: "Đảm bảo rằng bạn giữ cho tài liệu được chiếu sáng tốt. Tất cả các trường tài liệu sẽ hiển thị trên màn hình camera.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Màn hình quét tài liệu", timeout_modal: { - details: "Không thể đọc tài liệu. Xin vui lòng thử lại.", - title: "Quét không thành công", + details: + "Đảm bảo giấy tờ được chiếu sáng tốt, có thể nhìn rõ toàn bộ và không bị lóa.", + details_desktop: + "Đảm bảo ống kính camera của bạn sạch sẽ và giấy tờ có thể nhìn rõ toàn bộ, rõ nét cũng như được chiếu sáng tốt.", + title: "Không thể đọc giấy tờ", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/yo.ts b/packages/blinkid-ux-manager/src/ui/locales/yo.ts index 2e375578..2c55b1be 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/yo.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/yo.ts @@ -27,7 +27,6 @@ export default { front_side_scanned_aria: "Àṣeyọrí! Ẹ̀dà àwòrán apá iwájú ti parí", glare_detected: "Tẹ̀ ẹ́ tàbí yí ìwé àkọsílẹ̀ náà láti yọ àgbéyọ kúrò", keep_document_parallel: "Gbe ìwé àkọsílẹ̀ ní pẹrẹsẹ kó dọ́gba pẹ̀lú ìbojú", - keep_document_still: "Mú ìwé àkọsílẹ̀ àti ẹ̀rọ alágbèéká dúró", keep_still: "Dúró sójú kan", move_closer: "Sún mọ́ síi", move_farther: "Sún jìnnà síi", @@ -43,6 +42,7 @@ export default { scan_the_barcode: "Ṣe àyẹ̀wò kóódù onílà", scan_the_barcode_side: "Ṣe àyẹ̀wò apá ibi kóòdù onílà lórí ìwé àkọsílẹ̀ kan", scan_the_front_side: "Ṣe ẹ̀dà àwòrán iwájú ìwé àkọsílẹ̀", + scan_the_mrz_side: "Ṣe àyẹ̀wò apá MRZ ti ìwé àkọsílẹ̀ kan", scan_top_page: "Ṣe ẹ̀dà àwòrán ojú-ìwé òkè", too_bright: "Lọ sí ibi tí ìmọ́lẹ̀ ò fi bẹ́ẹ̀ sí", too_dark: "Lọ sí ibi tó mọ́lẹ̀ síi", @@ -116,6 +116,37 @@ export default { title_desktop: "Jẹ́ kí kóòdù onílà náà hàn kedere", }, }, + document_with_mrz: { + blur: { + details: + "Gbìyànjú kó mú fóònù àti ìwé àkọsílẹ̀ dúró nígbà ṣíṣe ẹ̀dà àwòrán. Sí sún kiri lè fa bóyá kí àwòrán náà rí bàìbàì àti kí ó mú kí àwọn ìsọfúnni orí ìwé àkọsílẹ̀ má ṣe jẹ́ é kà.", + details_desktop: + "Gbìyànjú láti dúró sójú kan nígbà ṣíṣe àyẹ̀wò. Sí sún kiri lè fa kí àwòrán náà rí bàìbàì àti kí ó mú àwọn ìsọfúnni orí ìwé àkọsílẹ̀ náà má ṣe é kà.", + title: "Dúró sí ojú kan nígbà ṣíṣe ẹ̀dà àwòrán", + title_desktop: "Dúró sí ojú kan nígbà ṣíṣe ẹ̀dà àwòrán", + }, + camera_lens: { + details_desktop: + "Yẹ awò ojú kámẹ́rà wò fún àwọn àbàwọ́n tàbí eruku. Awò kámẹ́rà tó bá dọ̀tí lè ṣokùnfa kí àwòrán ìkẹyìn rí bàìbàì, tí ó lè fa kí àwon ìsọfúnni orí ìwé àkọsílẹ̀ náà má ṣe é kà tàbí ìdènà àṣeyọrí ṣíṣe ẹ̀dà àwòrán dátà náà.", + title_desktop: "Nu awò ojú kámẹ́rà rẹ nù", + }, + lighting: { + details: + "Yẹra fún ìmọ́lẹ̀ tó lágbára nítorí pé ó máa ń hàn nínú ìwé àkọsílẹ̀ náà àti pé ó lè mú kí àwọn apá kan nínú àwọn ìwé àkọsílẹ̀ náà má ṣe é kà. Tí ọ kò bá lè ka àwọn ìsọfúnni tó wà nínú ìwé àkọsílẹ̀ náà, kò ní hàn sí kámẹ́rà náà.", + details_desktop: + "Yẹra fún ìmọ́lẹ̀ tó lágbára nítorí pé ó máa ń hàn nínú ìwé àkọsílẹ̀ náà àti pé ó lè mú kí àwọn apá kan nínú àwọn ìwé àkọsílẹ̀ náà má ṣe é kà. Tí ọ kò bá lè ka àwọn ìsọfúnni tó wà nínú ìwé àkọsílẹ̀ náà, kò ní hàn sí kámẹ́rà náà.", + title: "Ṣọ́ra fún ìmọ́lẹ̀ tó lágbára jù", + title_desktop: "Ṣọ́ra fún ìmọ́lẹ̀ tó lágbára jù", + }, + visibility: { + details: + "Ríi dájú pé o ò fi ìka kan bo àwọn apá ibì kankan lórí MRZ náà. Bákannáà, ṣọ́ra fún àwọn ìtànyòò tó kọjá lórí MRZ náà lé yìí tí ó lè mú kí ó má ṣeé kà.", + details_desktop: + "Ríi dájú pé o ò fi ìka kan bo àwọn apá ibì kankan lórí MRZ náà. Bákannáà, ṣọ́ra fún àwọn ìtànyòò tó kọjá lórí MRZ náà lé yìí tí ó lè mú kí ó má ṣeé kà.", + title: "Jẹ́ kí MRZ náà hàn dáadáa", + title_desktop: "Jẹ́ kí MRZ náà hàn dáadáa", + }, + }, done_btn: "Parí", done_btn_aria: "Padà sẹ́nu ṣíṣẹ́dà àwòrán", full_document: { @@ -164,12 +195,20 @@ export default { btn: "Bẹ̀rẹ̀ ṣíṣẹ́dà àwòrán", document_with_barcode: { details: - "Oríṣiríṣi irú àwọn ID ló ní oríṣiríṣi ọ̀nà àgbékalẹ̀ rẹ̀ àti àwọn ààyè tó le dúró sí. Wo iwájú àti ẹ̀yìn ID náà fún kóòdù onílà náà.", + "Oríṣiríṣi irú àwọn ìwé àkọsílẹ̀ ló ní àgbékalẹ kóòdù onílà ọ̀tọ̀ọ̀tọ̀ àti àwọn ààyè tí ó le dúró sí. Wo iwájú àti ẹ̀yìn ìwé àkọsílẹ̀ náà fún kóòdù onílà kan.", details_desktop: - "Wo iwájú àti ẹ̀yìn ID náà fún kóòdù onílà kan. Ríi dájú pé awò ojú kámẹ́rà rẹ mọ́ àti kí ìmọ́lẹ̀ tàn sórí ìwé àkọsílẹ̀ náà dáadáa.", - title: "Ṣàwarí kóòdù onílà lórí ID", + "Wo iwájú àti ẹ̀yìn ìwé àkọsílẹ̀ náà fún kóòdù onílà kan. Ríi dájú pé o jẹ́ kí awò ojú kámẹ́rà rẹ mọ́ àti kí ìmọ́lẹ̀ tàn sórí ìwé àkọsílẹ̀ náà dáadáa.", + title: "Ṣàwarí kóòdù onílà lórí ìwé àkọsílẹ̀ náà", title_desktop: "Nu awò ojú kámẹ́rà rẹ kí o sì ṣàwarí kóòdù onílà", }, + document_with_mrz: { + details: + "Wàá rí àwọn òǹkọ̀wé tó gùn gan-an ní ìsàlẹ̀ iwájú tàbí ẹ̀yìn ìwé àkọsílẹ̀ náà, tó pín sí àwọn ilà 2 tàbí 3 tí àwọn àmì ọfà là láàárín (<< or >>).", + details_desktop: + "Wo iwájú àti ẹ̀yìn ìwé àkọsílẹ̀ náà fún MRZ kan. Ṣàwárí àwọn ilà òǹkọ̀wé 2–3 àti àwọn àmì ọfà (<<) ní ìsàlẹ̀ ìwé àkọsílẹ̀ náà. Ríi dájú pé o jẹ́ kí awò ojú kámẹ́rà rẹ mọ́ àti kí ìmọ́lẹ̀ tàn sórí ìwé àkọsílẹ̀ náà dáadáa.", + title: "Ṣàwárí MRZ lórí ìwé àkọsílẹ̀ náà", + title_desktop: "Nu awò ojú kámẹ́rà rẹ àti kí o sì ṣàwarí MRZ", + }, full_document: { details: "Ríi dájú pé ìmọ́lẹ̀ tàn sórí ìwé àkọsílẹ̀ náà dáadáa. Gbogbo ààyè orí ìwé àkọsílẹ̀ náà ni kó sí hàn kedere lórí àwo kámẹ́rà.", @@ -181,7 +220,10 @@ export default { }, sdk_aria: "Ìbojú ṣíṣẹ́dà àwòrán ìwé àkọsílẹ̀", timeout_modal: { - details: "A kò rí ìwé àkọsílẹ̀ náà kà. Jọ̀wọ́ tún gbìyànjú.", - title: "Ṣíṣe ẹ̀dà àwòrán kò yege", + details: + "Ríi dájú pé ìmọ́lẹ̀ tàn sórí ìwé àkọsílẹ̀ náà dáadáa, hàn kedere pátápátá, àti pé kò ní ìtànyòò.", + details_desktop: + "Ríi dájú pé awò ojú kámẹ́rà rẹ mọ́ àti kí ìwé àkọsílẹ̀ náà hàn kedere pátápátá, wà ní ojúran, àti kí ìmọ́lẹ̀ tàn síi dáadáa.", + title: "O kò rí ìwé àkọsílẹ̀ náà kà", }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/zh_CN.ts b/packages/blinkid-ux-manager/src/ui/locales/zh_CN.ts index 8ca2979d..a5e79e84 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/zh_CN.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/zh_CN.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "成功!正面已扫描", glare_detected: "倾斜或移动文件以消除反光", keep_document_parallel: "请将文件与屏幕保持平行", - keep_document_still: "请保持文件和设备静止", keep_still: "保持不动", move_closer: "靠近一些", move_farther: "离远一些", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "扫描条形码", scan_the_barcode_side: "扫描文件上带有条形码的一面", scan_the_front_side: "扫描文件的\\n正面", + scan_the_mrz_side: "扫描文件的机读区一面", scan_top_page: "扫描顶部页面", too_bright: "移动到光线更暗的位置", too_dark: "移动到更明亮的位置", @@ -115,6 +115,37 @@ export default { title_desktop: "保持条形码可见", }, }, + document_with_mrz: { + blur: { + details: + "扫描时尽量保持手机和文件不动。移动可能造成图像模糊,使文件数据不可读。", + details_desktop: + "扫描时尽量保持不动。移动可能导致图像模糊,使文件数据无法读取。", + title: "扫描时保持不动", + title_desktop: "扫描时保持不动", + }, + camera_lens: { + details_desktop: + "请检查相机镜头是否有污渍或灰尘。镜头脏污会导致成像模糊,从而无法读取文件信息,影响数据扫描成功率。", + title_desktop: "清洁摄像头镜头", + }, + lighting: { + details: + "避免强光直射,因为它会在文件中反射出来 ,可能造成文件的某些地方不可读。如果您不能读取文件上的数据,那么它也不会被相机看到。", + details_desktop: + "避免强光直射,因为它会在文件中反射出来 ,可能造成文件的某些地方不可读。如果您不能读取文件上的数据,那么它也不会被相机看到。", + title: "注意强光直射", + title_desktop: "注意强光直射", + }, + visibility: { + details: + "确保手指没有遮挡机读区。此外,请留意机读区上的反光,反光可能导致机读区无法读取。", + details_desktop: + "确保手指没有遮挡机读区。此外,请留意机读区上的反光,反光可能导致机读区无法读取。", + title: "保持机读区可见", + title_desktop: "保持机读区可见", + }, + }, done_btn: "完成", done_btn_aria: "恢复扫描", full_document: { @@ -157,17 +188,25 @@ export default { "查找条形码(一系列黑色线条或一个方形码)。将相机对准它并保持不动——会自动进行扫描。", details_desktop: "查找条形码(一系列黑色线条或一个方形码)。确保相机镜头清洁且条形码光线充足。", - title: "定位并扫描条形码", - title_desktop: "清洁镜头并定位条形码", + title: "找到并扫描条形码", + title_desktop: "清洁镜头并找到条形码", }, btn: "开始扫描", document_with_barcode: { details: - "身份证类型不同,其条形码的格式和位置也可能不同。请在身份证正面和反面查找条形码。", + "文件类型不同,其条形码的格式和位置也可能不同。请在文件正反面寻找条形码。", details_desktop: - "检查身份证正反面是否有条形码。确保相机镜头清洁且文件光线充足。", - title: "定位身份证上的条形码", - title_desktop: "清洁镜头并定位条形码", + "检查文件正反面是否有条形码。确保相机镜头清洁且文件光线充足。", + title: "找到文件上的条形码", + title_desktop: "清洁镜头并找到条形码", + }, + document_with_mrz: { + details: + "您将在文件正面或反面的底部找到一长串字符,分为 2 到 3 行,并由箭头(<< 或 >>)分隔。", + details_desktop: + "检查文件正反面是否有机读区。在文件底部寻找 2 至 3 行字符和箭头符号(<<)。确保相机镜头清洁且文件光线充足。", + title: "找到文件上的机读区", + title_desktop: "清洁镜头并找到机读区", }, full_document: { details: "确保文件处于光线充足的地方。所有文件字段应在相机屏幕上可见。", @@ -178,5 +217,9 @@ export default { }, }, sdk_aria: "文件扫描屏幕", - timeout_modal: { details: "未能读取文件,请重试。", title: "扫描失败" }, + timeout_modal: { + details: "确保文件光线充足、完全可见且无眩光。", + details_desktop: "确保相机镜头清洁,文件完全可见、对焦清晰且光线充足。", + title: "无法读取文件", + }, } as const; diff --git a/packages/blinkid-ux-manager/src/ui/locales/zh_TW.ts b/packages/blinkid-ux-manager/src/ui/locales/zh_TW.ts index 717dba94..63f395d2 100644 --- a/packages/blinkid-ux-manager/src/ui/locales/zh_TW.ts +++ b/packages/blinkid-ux-manager/src/ui/locales/zh_TW.ts @@ -26,7 +26,6 @@ export default { front_side_scanned_aria: "成功!正面已掃描", glare_detected: "傾斜或移動文件以移除反光", keep_document_parallel: "請保持文件與螢幕平行", - keep_document_still: "保持文件與裝置靜止不動", keep_still: "保持不動", move_closer: "再靠近一點", move_farther: "再離遠一點", @@ -42,6 +41,7 @@ export default { scan_the_barcode: "掃描條碼", scan_the_barcode_side: "掃描文件的條碼面", scan_the_front_side: "掃描文件的正面。", + scan_the_mrz_side: "掃描文件的 MRZ 面", scan_top_page: "掃描上方頁面", too_bright: "移到照明較暗的點", too_dark: "移到更亮的點", @@ -113,6 +113,36 @@ export default { title_desktop: "保持條碼清晰可見", }, }, + document_with_mrz: { + blur: { + details: + "掃描時盡量保持手機及文件穩定。任何移動都會使圖像模糊並造成文件的內容無法讀取。", + details_desktop: + "掃描時盡量保持不動。任何移動可能會使圖像模糊,導致無法辨識文件資料。", + title: "掃描時保持靜止", + title_desktop: "掃描時保持靜止", + }, + camera_lens: { + details_desktop: + "檢查相機鏡頭是否有髒污或灰塵。鏡頭若不乾淨,會導致照片模糊,使文件資訊無法辨識,進而導致掃描失敗。", + title_desktop: "清潔相機鏡頭", + }, + lighting: { + details: + "避免直接刺眼的光線,因為光線會反射文件,並且使文件的某些內容無法讀取。如果您無法讀取文件的內容,則相機也無法看清。", + details_desktop: + "避免直接刺眼的光線,因為光線會反射文件,並且使文件的某些內容無法讀取。如果您無法讀取文件的內容,則相機也無法看清。", + title: "注意刺眼的光線", + title_desktop: "注意刺眼的光線", + }, + visibility: { + details: "請確保手指沒有遮住 MRZ,並避免 MRZ 出現反光,以免無法辨識。", + details_desktop: + "請確保手指沒有遮住 MRZ,並避免 MRZ 出現反光,以免無法辨識。", + title: "保持 MRZ 清晰可見", + title_desktop: "保持 MRZ 清晰可見", + }, + }, done_btn: "完成", done_btn_aria: "繼續掃描", full_document: { @@ -161,12 +191,20 @@ export default { btn: "開始掃描", document_with_barcode: { details: - "不同類型的證件可能會有不同的條碼格式和位置。請在證件正反面尋找條碼。", + "不同類型的文件可能會有不同的條碼格式和位置。請查看文件正反面,找到條碼。", details_desktop: - "請查看證件正反面是否有條碼。確保相機鏡頭清晰乾淨,且文件處於光線充足的環境中。", - title: "對準證件上的條碼", + "請查看文件正反面是否有條碼。確保相機鏡頭清晰乾淨,且文件處於光線充足的環境中。", + title: "找到文件上的條碼", title_desktop: "請確認鏡頭乾淨,並對準條碼。", }, + document_with_mrz: { + details: + "您可以在文件正面或背面的底部找到一長串字元,通常會分成 2 到 3 行,並以箭頭符號 (<< 或 >>) 分隔。", + details_desktop: + "請查看文件正反面是否有「機器可讀區 (MRZ)」。請在文件底部尋找有 2 到 3 行字元及箭頭符號 (<<) 的地方。確保相機鏡頭清晰乾淨,並在光線充足的環境下拍攝文件。", + title: "找到文件上的 MRZ", + title_desktop: "請確認鏡頭乾淨,並對準 MRZ", + }, full_document: { details: "確保文件光線充足。所有文件欄位在相機螢幕都應清楚可見。", details_desktop: @@ -176,5 +214,10 @@ export default { }, }, sdk_aria: "文件掃描畫面", - timeout_modal: { details: "無法讀取文件,請再試一次。", title: "掃描成功" }, + timeout_modal: { + details: "確保文件處於光線充足的環境中、完整入鏡,且沒有反光。", + details_desktop: + "確保相機鏡頭清晰乾淨,且文件完整入鏡、對焦清楚,並處於光線充足的環境中。", + title: "無法讀取文件", + }, } as const; diff --git a/packages/blinkid-verify-core/CHANGELOG.md b/packages/blinkid-verify-core/CHANGELOG.md index 92d814c6..bc33f474 100644 --- a/packages/blinkid-verify-core/CHANGELOG.md +++ b/packages/blinkid-verify-core/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/blinkid-verify-core +## 3.22.0-next + +### Patch Changes + +- Updated dependencies + - @microblink/analytics@2.0.2 + - @microblink/blinkid-verify-wasm@3.22.0-next + - @microblink/blinkid-verify-worker@3.22.0-next + ## 3.21.1 ### Patch Changes diff --git a/packages/blinkid-verify-core/docs/README.md b/packages/blinkid-verify-core/docs/README.md index 60599bcc..11395dac 100644 --- a/packages/blinkid-verify-core/docs/README.md +++ b/packages/blinkid-verify-core/docs/README.md @@ -96,7 +96,6 @@ - [VerificationContext](type-aliases/VerificationContext.md) - [VerificationPolicy](type-aliases/VerificationPolicy.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) - [WorkerScanningSession](type-aliases/WorkerScanningSession.md) @@ -105,7 +104,6 @@ - [getCrossOriginWorkerURL](variables/getCrossOriginWorkerURL.md) - [resourceFileTypes](variables/resourceFileTypes.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) ## Functions diff --git a/packages/blinkid-verify-core/docs/classes/AnalyticService.md b/packages/blinkid-verify-core/docs/classes/AnalyticService.md index 32dbf4d2..b574e962 100644 --- a/packages/blinkid-verify-core/docs/classes/AnalyticService.md +++ b/packages/blinkid-verify-core/docs/classes/AnalyticService.md @@ -293,6 +293,16 @@ Provides a clean interface for tracking user interactions and events *** +### logInactivityTimeoutEvent() + +> **logInactivityTimeoutEvent**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logInfo() > **logInfo**(`logMessage`): `Promise`\<`void`\> @@ -329,6 +339,16 @@ Provides a clean interface for tracking user interactions and events *** +### logUnsupportedBarcodeTimeout() + +> **logUnsupportedBarcodeTimeout**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logWarning() > **logWarning**(`logMessage`): `Promise`\<`void`\> diff --git a/packages/blinkid-verify-core/docs/functions/loadBlinkIdVerifyCore.md b/packages/blinkid-verify-core/docs/functions/loadBlinkIdVerifyCore.md index 72f0a9c4..e34ac004 100644 --- a/packages/blinkid-verify-core/docs/functions/loadBlinkIdVerifyCore.md +++ b/packages/blinkid-verify-core/docs/functions/loadBlinkIdVerifyCore.md @@ -67,7 +67,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-verify-core/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md b/packages/blinkid-verify-core/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md index 64fe999b..59d9aea5 100644 --- a/packages/blinkid-verify-core/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md +++ b/packages/blinkid-verify-core/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md @@ -76,7 +76,7 @@ Used for analytics and tracking purposes. ### wasmVariant? -> `optional` **wasmVariant**: [`WasmSimdVariant`](WasmSimdVariant.md) +> `optional` **wasmVariant**: [`WasmVariant`](WasmVariant.md) The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-verify-core/docs/type-aliases/LoadWasmParams.md b/packages/blinkid-verify-core/docs/type-aliases/LoadWasmParams.md index 29a0d546..2d0dc07e 100644 --- a/packages/blinkid-verify-core/docs/type-aliases/LoadWasmParams.md +++ b/packages/blinkid-verify-core/docs/type-aliases/LoadWasmParams.md @@ -26,4 +26,4 @@ The load Wasm params. ### wasmVariant -> **wasmVariant**: [`WasmSimdVariant`](WasmSimdVariant.md) +> **wasmVariant**: [`WasmVariant`](WasmVariant.md) diff --git a/packages/blinkid-verify-core/docs/type-aliases/PingSdkInitStart.md b/packages/blinkid-verify-core/docs/type-aliases/PingSdkInitStart.md index 5de4f967..25f53357 100644 --- a/packages/blinkid-verify-core/docs/type-aliases/PingSdkInitStart.md +++ b/packages/blinkid-verify-core/docs/type-aliases/PingSdkInitStart.md @@ -6,6 +6,6 @@ # Type Alias: PingSdkInitStart -> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"1.3.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> +> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"2.0.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> Ping type for ping.sdk.init.start diff --git a/packages/blinkid-verify-core/docs/type-aliases/PingUxEvent.md b/packages/blinkid-verify-core/docs/type-aliases/PingUxEvent.md index 9157ae9d..76d1216a 100644 --- a/packages/blinkid-verify-core/docs/type-aliases/PingUxEvent.md +++ b/packages/blinkid-verify-core/docs/type-aliases/PingUxEvent.md @@ -6,6 +6,6 @@ # Type Alias: PingUxEvent -> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.1.0"`, [`PingUxEventData`](PingUxEventData.md)\> +> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.2.0"`, [`PingUxEventData`](PingUxEventData.md)\> Ping type for ping.sdk.ux.event diff --git a/packages/blinkid-verify-core/docs/type-aliases/WasmSimdVariant.md b/packages/blinkid-verify-core/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index 0c9fb9e0..00000000 --- a/packages/blinkid-verify-core/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-verify-core**](../README.md) - -*** - -[@microblink/blinkid-verify-core](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkid-verify-core/docs/variables/wasmSimdVariants.md b/packages/blinkid-verify-core/docs/variables/wasmSimdVariants.md deleted file mode 100644 index 7b7b102e..00000000 --- a/packages/blinkid-verify-core/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-verify-core**](../README.md) - -*** - -[@microblink/blinkid-verify-core](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkid-verify-core/docs/variables/wasmVariants.md b/packages/blinkid-verify-core/docs/variables/wasmVariants.md index 58748a9b..69923ca2 100644 --- a/packages/blinkid-verify-core/docs/variables/wasmVariants.md +++ b/packages/blinkid-verify-core/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkid-verify-core/package.json b/packages/blinkid-verify-core/package.json index 5cded470..432fe812 100644 --- a/packages/blinkid-verify-core/package.json +++ b/packages/blinkid-verify-core/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid-verify-core", "description": "BlinkID Verify Core SDK", - "version": "3.21.1", + "version": "3.22.0-next", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -17,7 +17,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm prepare-publish && pnpm pack-check", + "publish-test": "pnpm prepare-publish && pnpm pack-check", "type-rollup": "api-extractor run --local", "watch": "concurrently pnpm:watch:js pnpm:watch:types", "watch:js": "pnpm run build:js --watch --mode development", @@ -52,7 +52,7 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@microblink/repo-utils": "workspace:*", "@microblink/test-utils": "workspace:*", "@microblink/tsconfig": "workspace:*", diff --git a/packages/blinkid-verify-ux-manager/CHANGELOG.md b/packages/blinkid-verify-ux-manager/CHANGELOG.md index f9afc2e4..f102aa70 100644 --- a/packages/blinkid-verify-ux-manager/CHANGELOG.md +++ b/packages/blinkid-verify-ux-manager/CHANGELOG.md @@ -1,5 +1,13 @@ # @microblink/blinkid-verify-ux-manager +## 3.22.0-next + +### Patch Changes + +- Fixed feedback UI localization merging so partial user string overrides preserve the default nested localized values instead of replacing whole sections. +- Updated dependencies + - @microblink/blinkid-verify-core@3.22.0-next + ## 3.21.1 ### Patch Changes diff --git a/packages/blinkid-verify-ux-manager/package.json b/packages/blinkid-verify-ux-manager/package.json index bd823e47..82beecdc 100644 --- a/packages/blinkid-verify-ux-manager/package.json +++ b/packages/blinkid-verify-ux-manager/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid-verify-ux-manager", "description": "BlinkID Verify UX Manager provides user feedback based on the blinkid-verify process results.", - "version": "3.21.1", + "version": "3.22.0-next", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -18,7 +18,9 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm pack-check", + "publish-test": "pnpm pack-check", + "test": "vitest run", + "test:watch": "vitest", "type-rollup": "api-extractor run --local" }, "publishConfig": { @@ -51,18 +53,19 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@microblink/feedback-stabilizer": "workspace:^", - "@microblink/ux-common": "workspace:^", + "@microblink/repo-utils": "workspace:*", "@microblink/shared-components": "workspace:^", "@microblink/tsconfig": "workspace:*", "@microblink/unocss-config": "workspace:*", - "@microblink/repo-utils": "workspace:*", + "@microblink/ux-common": "workspace:^", "@microsoft/api-extractor": "^7.52.4", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", "@unocss/eslint-config": "^66.6.5", "@unocss/preset-uno": "^66.6.5", + "@vitest/browser": "^3.0.8", "concurrently": "^9.1.2", "eslint": "^8.57.0", "eslint-config-prettier": "10.1.8", @@ -128,4 +131,4 @@ "Safari >= 16.4", "iOS >= 16.4" ] -} \ No newline at end of file +} diff --git a/packages/blinkid-verify-ux-manager/src/core/BlinkIdVerifyUxManager.ts b/packages/blinkid-verify-ux-manager/src/core/BlinkIdVerifyUxManager.ts index 31ecd444..0d442826 100644 --- a/packages/blinkid-verify-ux-manager/src/core/BlinkIdVerifyUxManager.ts +++ b/packages/blinkid-verify-ux-manager/src/core/BlinkIdVerifyUxManager.ts @@ -954,7 +954,7 @@ export class BlinkIdVerifyUxManager { uiState.key === "FLIP_CARD" && this.#barcodeOnlyTimeoutId === undefined ) { - this.#barcodeOnlyTimeoutId = setTimeout(() => { + this.#barcodeOnlyTimeoutId = window.setTimeout(() => { this.#barcodeOnlyTimeoutExceeded = true; }, this.#barcodeOnlyTimeoutDuration); } diff --git a/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.test.tsx b/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.test.tsx new file mode 100644 index 00000000..de15c81a --- /dev/null +++ b/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.test.tsx @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { afterEach, describe, expect, test } from "vitest"; +import { render } from "solid-js/web"; +import { type Component } from "solid-js"; +import { blinkIdVerifyUiStateMap } from "../core/blinkid-verify-ui-state"; + +import en from "./locales/en"; + +import { + LocalizationProvider, + PartialLocalizationStrings, +} from "./LocalizationContext"; +import { UiFeedbackOverlay } from "./UiFeedbackOverlay"; + +const TestFeedbackUi: Component<{ + localization?: PartialLocalizationStrings; +}> = (props) => ( + + + + +); + +describe("LocalizationProvider", () => { + let cleanup: (() => void) | undefined; + + afterEach(() => { + cleanup?.(); + cleanup = undefined; + document.body.replaceChildren(); + }); + + test("preserves default nested feedback messages when one string is overridden", () => { + cleanup = render( + () => ( + + ), + document.body, + ); + + expect(document.body.textContent).toContain( + "Custom front side instruction", + ); + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); + + test("preserves default nested feedback messages when nothing is overridden", () => { + cleanup = render(() => , document.body); + + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); + + test("preserves default nested feedback messages when undefined is provided", () => { + cleanup = render(() => , document.body); + + expect(document.body.textContent).toContain( + en.feedback_messages.move_closer, + ); + }); +}); diff --git a/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.tsx b/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.tsx index 6fec0adc..bbc7ee09 100644 --- a/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.tsx +++ b/packages/blinkid-verify-ux-manager/src/ui/LocalizationContext.tsx @@ -11,6 +11,7 @@ import { import { SetStoreFunction, createStore } from "solid-js/store"; import enLocaleStrings from "./locales/en"; +import { merge } from "merge-anything"; /** * The locale record type. @@ -22,11 +23,10 @@ export type LocaleRecord = typeof enLocaleStrings; */ export type LocalizedValue = T extends Record - ? - | { - [K in keyof T]: LocalizedValue; - } - | (string & Record) + ? | { + [K in keyof T]: LocalizedValue; + } + | (string & Record) : T | (string & Record); /** @@ -70,13 +70,8 @@ export const LocalizationProvider: ParentComponent<{ userStrings?: PartialLocalizationStrings; }> = (props) => { const mergedStrings = (): LocalizationStrings => - ({ - ...enLocaleStrings, - ...props.userStrings, - }) as LocalizationStrings; + merge(enLocaleStrings, props.userStrings ?? {}) as LocalizationStrings; - // avoid initing with original as proxying to the original object will - // mutate the original object on store updates const [localizationStore, updateLocalizationStore] = createStore(mergedStrings()); diff --git a/packages/blinkid-verify-ux-manager/src/ui/locales/sr.ts b/packages/blinkid-verify-ux-manager/src/ui/locales/sr.ts index 0c3faa38..71d76af5 100644 --- a/packages/blinkid-verify-ux-manager/src/ui/locales/sr.ts +++ b/packages/blinkid-verify-ux-manager/src/ui/locales/sr.ts @@ -12,7 +12,7 @@ export default { }, document_not_recognized_modal: { details: "Skenirajte prednju stranu podržanog dokumenta.", - title: "Документ није препознат", + title: "Dokument nije prepoznat", }, feedback_messages: { blur_detected: "Držite mirno dokument i telefon", diff --git a/packages/blinkid-verify-ux-manager/vite.config.mts b/packages/blinkid-verify-ux-manager/vite.config.mts index cf06fc63..d94819ba 100644 --- a/packages/blinkid-verify-ux-manager/vite.config.mts +++ b/packages/blinkid-verify-ux-manager/vite.config.mts @@ -1,3 +1,6 @@ +/// +/// + import UnoCSS from "unocss/vite"; import { getBrowserslistEsbuildTarget } from "@microblink/repo-utils"; import { defineConfig, PluginOption } from "vite"; @@ -29,6 +32,20 @@ export default defineConfig((config) => ({ external: externals, }, }, + test: { + silent: true, + browser: { + enabled: true, + provider: "playwright", + screenshotFailures: false, + headless: true, + instances: [ + { + browser: "chromium", + }, + ], + }, + }, plugins: [ UnoCSS({ configFile: "./uno.config.ts", diff --git a/packages/blinkid-verify-wasm/CHANGELOG.md b/packages/blinkid-verify-wasm/CHANGELOG.md index 87063d31..676c7b8b 100644 --- a/packages/blinkid-verify-wasm/CHANGELOG.md +++ b/packages/blinkid-verify-wasm/CHANGELOG.md @@ -1,5 +1,11 @@ # @microblink/blinkid-verify-wasm +## 3.22.0-next + +### Minor Changes + +- Renamed shipped Wasm build directories: `advanced` → `simd` and `advanced-threads` → `simd-threads`. + ## 3.21.1 ### Patch Changes diff --git a/packages/blinkid-verify-wasm/README.md b/packages/blinkid-verify-wasm/README.md index 8ac9f1bd..a66de36e 100644 --- a/packages/blinkid-verify-wasm/README.md +++ b/packages/blinkid-verify-wasm/README.md @@ -11,10 +11,10 @@ This package contains the WebAssembly (Wasm) and native bindings for the BlinkID ## Browser Support (Wasm Runtime) -This package ships two Wasm build variants (`advanced` and -`advanced-threads`). The runtime selects the best supported variant automatically. +This package ships two Wasm build variants (`simd` and `simd-threads`). The +runtime selects the best supported variant automatically. -### `advanced` +### `simd` Requires the Emscripten-generated Wasm feature set used by the SDK plus [fixed-width SIMD](https://web-platform-dx.github.io/web-features-explorer/features/wasm-simd/). @@ -26,9 +26,9 @@ Requires the Emscripten-generated Wasm feature set used by the SDK plus - Safari 16.4 (macOS) - iOS Safari 16.4 -### `advanced-threads` +### `simd-threads` -Requires all `advanced` features plus +Requires all `simd` features plus [Wasm threads and atomics](https://caniuse.com/wasm-threads). Multithreaded Wasm also requires cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin` and @@ -38,17 +38,17 @@ also requires cross-origin isolation headers - Edge 96 - Opera 82 - Firefox 89 (desktop and Android) -- Safari (macOS): not selected (uses `advanced`) -- iOS Safari: not selected (uses `advanced`) +- Safari (macOS): not selected (uses `simd`) +- iOS Safari: not selected (uses `simd`) Safari is excluded even when it reports Wasm thread support. Emscripten -`advanced-threads` builds use pthreads that spawn workers from inside a worker, +`simd-threads` builds use pthreads that spawn workers from inside a worker, and Safari historically lacked reliable nested worker support when Wasm threads shipped in Safari 16. There are also known Safari issues with shared memory in Emscripten pthread builds ([emscripten-core/emscripten#19374](https://github.com/emscripten-core/emscripten/issues/19374)). -For these reasons the runtime falls back to the single-threaded `advanced` -variant on Safari instead of loading `advanced-threads`. +For these reasons the runtime falls back to the single-threaded `simd` +variant on Safari instead of loading `simd-threads`. These minimums combine Emscripten 4.0.16 generated runtime defaults (see [`src/settings.js`](https://raw.githubusercontent.com/emscripten-core/emscripten/4.0.16/src/settings.js) diff --git a/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.js b/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.js deleted file mode 100644 index 6807e367..00000000 --- a/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.js +++ /dev/null @@ -1,146 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var h=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,m=ba&&self.name?.startsWith("em-pthread");let ca;(ca=h).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);h.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof m&&m||a||async function(b){async function c(l,p){var q;(q=h).dataFileDownloads??(q.dataFileDownloads={});try{var n=await fetch(l)}catch(x){throw Error(`Network Error: ${l}`,{e:x});}if(!n.ok)throw Error(`${n.status}: ${n.url}`);q=[];p=Number(n.headers.get("Content-Length")??p);let u=0;h.setStatus?.("Downloading data...");for(n=n.body.getReader();;){var {done:y,value:v}=await n.read();if(y)break; -q.push(v);u+=v.length;h.dataFileDownloads[l]={loaded:u,total:p};let x=0,F=0;for(var w of Object.values(h.dataFileDownloads))x+=w.loaded,F+=w.total;h.setStatus?.(`Downloading data... (${x}/${F})`)}l=new Uint8Array(q.map(x=>x.length).reduce((x,F)=>x+F,0));w=0;for(const x of q)l.set(x,w),w+=x.length;return l.buffer}async function d(l){for(var p of b.files)l.addRunDependency(`fp ${p.filename}`);l.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.data"); -l.preloadResults??(l.preloadResults={});l.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.data"]={td:!1};k||=await g;(async function(q){if(!q)throw Error("Loading data file failed.");if(q.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");q=new Uint8Array(q);for(var n of b.files){var u=n.filename;l.FS_createDataFile(u,null,q.subarray(n.start,n.end),!0,!0,!0);l.removeRunDependency(`fp ${u}`)}l.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.data")})(k)} -"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=h.locateFile?.("BlinkIdVerifyModule.data","")??"BlinkIdVerifyModule.data",f=b.remote_package_size,g,k=h.getPreloadedPackage?.(e,f);k||(g=c(e,f));if(h.calledRun)d(h);else{let l;((l=h).preRun??(l.preRun=[])).push(d)}}({files:[{filename:"/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop", -start:0,end:103198},{filename:"/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop",start:106933,end:451389},{filename:"/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:775876,end:1044597},{filename:"/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop", -start:1044597,end:1051046},{filename:"/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop",start:1051046,end:2476219},{filename:"/Model_8326c5065a6d8451d6d004db73babf4a4a9f502c68643a14934cc098d04bf44f.strop",start:2476219,end:2863913},{filename:"/Model_86d689f894da5af89553f5a5a9514ab5a6fdbab4b67a5a7c51f45c2189357ca5.strop",start:2863913,end:2917159},{filename:"/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2917159,end:3944014},{filename:"/Model_93607315418f2c5d3abec06d0b2a81e69abeb1b8d0506ed6373d7d74bd5e4b05.strop", -start:3944014,end:5189005},{filename:"/Model_9a8a29486ce57a15db08a18c76a94df4c811039737750667147f0001942f19d3.strop",start:5189005,end:5272454},{filename:"/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop",start:5272454,end:5568256},{filename:"/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:5568256,end:5574752},{filename:"/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop",start:5574752,end:9680601},{filename:"/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop", -start:9680601,end:9805805},{filename:"/Model_d68548d94b956e67d6b606c7a8988082c3d66f494f94a14d705d0cdea6635151.strop",start:9805805,end:10243981},{filename:"/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop",start:10243981,end:10318426},{filename:"/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:10318426,end:10393828},{filename:"/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop",start:10393828,end:11056881}, -{filename:"/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:11056881,end:11083179},{filename:"/ccc_lookup_table.zzip",start:11083179,end:11103648},{filename:"/serialized_embedder_db_1.12.bin",start:11103648,end:14381309}],remote_package_size:14381309})})();h.onAbort=function(a){r("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){r("Stacktrace: "+b.stack)}};h="undefined"!==typeof h?h:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!h.locateFile&&(h.locateFile=function(d,e){return"BlinkIdVerifyModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),r=console.error.bind(console),ka,la,ma=!1,na;function t(){oa.buffer!=A.buffer&&pa()}var qa,ra,sa; -if(m){var ta=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.tb;if("load"===d){let e=[];self.onmessage=f=>e.push(f);sa=()=>{postMessage({tb:"loaded"});for(let f of e)a(f);self.onmessage=a};for(const f of c.Lc)if(!h[f]||h[f].proxy)h[f]=(...g)=>{postMessage({tb:"callHandler",Kc:f,yc:g})},"print"==f&&(ja=h[f]),"printErr"==f&&(r=h[f]);oa=c.kd;pa();la=c.ld;ua();va()}else if("run"===d){wa(c.pb);xa(c.pb,0,0,1,0,0);ya();za(c.pb);ta||(Aa(),ta=!0);try{Ba(c.gd,c.Yb)}catch(e){if("unwind"!= -e)throw e;}}else"setimmediate"!==c.target&&("checkMailbox"===d?ta&&Ca():d&&(r(`worker: received unknown command ${d}`),r(c)))}catch(e){throw Da(),e;}}self.onmessage=a}var A,B,C,Fa,D,H,Ga,Ha,L,Ia,Ja=!1;function pa(){var a=oa.buffer;A=new Int8Array(a);C=new Int16Array(a);B=new Uint8Array(a);Fa=new Uint16Array(a);D=new Int32Array(a);H=new Uint32Array(a);Ga=new Float32Array(a);Ha=new Float64Array(a);L=new BigInt64Array(a);Ia=new BigUint64Array(a)}var oa; -function Ka(){Ja=!0;if(m)sa();else{if(!h.noFSInit&&!La){var a,b,c;La=!0;a??=h.stdin;b??=h.stdout;c??=h.stderr;a?Ma("/dev","stdin",a):Na("/dev/tty","/dev/stdin");b?Ma("/dev","stdout",null,b):Na("/dev/tty","/dev/stdout");c?Ma("/dev","stderr",null,c):Na("/dev/tty1","/dev/stderr");Oa("/dev/stdin",0);Oa("/dev/stdout",1);Oa("/dev/stderr",1)}Pa.ya();Qa=!1}} -function Ra(a){h.onAbort?.(a);a="Aborted("+a+")";r(a);ma=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ra?.(a);throw a;}var Sa;async function Ta(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==Sa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a} -async function Ua(a,b){try{var c=await Ta(a);return await WebAssembly.instantiate(c,b)}catch(d){r(`failed to asynchronously prepare wasm: ${d}`),Ra(d)}}async function Va(a){var b=Sa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){r(`wasm streaming compile failed: ${d}`),r("falling back to ArrayBuffer instantiation")}return Ua(b,a)} -function Wa(){Xa={O:Za,X:$a,D:ab,ja:bb,ka:cb,ha:db,ga:eb,E:fb,ia:gb,oa:hb,f:ib,H:jb,I:kb,u:lb,n:mb,o:nb,wa:ob,G:pb,i:qb,k:rb,e:sb,h:tb,xa:ub,w:vb,g:wb,b:xb,J:yb,da:zb,U:Ab,Y:Bb,Q:Cb,A:Db,ca:za,ma:Eb,N:Fb,d:Gb,sa:Hb,ta:Ib,t:Jb,W:Kb,c:Lb,va:Mb,ua:Nb,M:Ob,Z:Pb,_:Qb,R:Rb,$:Sb,aa:Tb,v:Ub,B:Vb,na:Wb,la:Xb,pa:Yb,V:Zb,j:$b,F:ac,l:bc,T:cc,qa:dc,ea:ec,fa:fc,s:gc,r:hc,C:ic,ba:jc,q:kc,ra:lc,y:mc,x:nc,m:oc,K:pc,z:qc,p:rc,L:sc,a:oa,P:tc,S:uc};return{a:Xa}} -async function ua(){function a(d,e){Pa=d.exports;vc.push(Pa.Ea);d=Pa;wc=d.za;Aa=d.Aa;xc=d.Ba;yc=d.Ca;zc=d.Da;Ac=d.Fa;xa=d.Ha;Da=d.Ia;Bc=d.Ja;Cc=d.Ka;Dc=d.La;Ec=d.Ma;Fc=d.Na;Gc=d.Oa;Hc=d.Pa;Ic=d.Qa;Jc=d.Ra;Kc=d.Sa;Lc=d.Ga;la=e;return Pa}var b=Wa();if(h.instantiateWasm)return new Promise(d=>{h.instantiateWasm(b,(e,f)=>{d(a(e,f))})});if(m){var c=new WebAssembly.Instance(la,Wa());return a(c,la)}Sa??=h.locateFile?h.locateFile?h.locateFile("BlinkIdVerifyModule.wasm",fa):fa+"BlinkIdVerifyModule.wasm":(new URL("BlinkIdVerifyModule.wasm", -import.meta.url)).href;return function(d){return a(d.instance,d.module)}(await Va(b))}class Mc{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Nc=a=>{a.terminate();a.onmessage=()=>{}},Oc=a=>{for(;0{Qc--;h.monitorRunDependencies?.(Qc);if(0==Qc&&Rc){var a=Rc;Rc=null;a()}},Tc=()=>{Qc++;h.monitorRunDependencies?.(Qc)},Zc=a=>{0==Uc.length&&(Vc(),Wc(Uc[0]));var b=Uc.pop();if(!b)return 6;Xc.push(b);Yc[a.pb]=b;b.pb=a.pb;b.postMessage({tb:"run",gd:a.fd,Yb:a.Yb,pb:a.pb},a.xc);return 0},M=0,N=(a,b,...c)=>{for(var d=2*c.length,e=Kc(),f=Jc(8*d),g=f>>3,k=0;k{na=a;if(m)throw ad(a),"unwind";tc(a)},Uc=[],Xc=[],vc=[],Yc={}; -function bd(){for(var a=navigator.hardwareConcurrency;a--;)Vc();Pc.push(async()=>{var b=cd();Tc("loading-workers");await b;Sc("loading-workers")})}var dd=a=>{var b=a.pb;delete Yc[b];Uc.push(a);Xc.splice(Xc.indexOf(a),1);a.pb=0;Cc(b)};function ya(){vc.forEach(a=>a())} -var Wc=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.tb;if(g.Vb&&g.Vb!=xc()){var k=Yc[g.Vb];k?k.postMessage(g,g.xc):r(`Internal error! Worker sent a message "${f}" to target pthread ${g.Vb}, but that thread no longer exists!`)}else if("checkMailbox"===f)Ca();else if("spawnThread"===f)Zc(g);else if("cleanupThread"===f)ed(()=>{dd(Yc[g.hd])});else if("loaded"===f)a.loaded=!0,b(a);else if("setimmediate"===g.target)a.postMessage(g);else if("callHandler"===f)h[g.Kc](...g.yc);else f&&r(`worker sent an unknown command ${f}`)}; -a.onerror=f=>{r(`${"worker sent an error!"} ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onExit","onAbort","print","printErr"],e;for(e of d)h.propertyIsEnumerable(e)&&c.push(e);a.postMessage({tb:"load",Lc:c,kd:oa,ld:la})});async function cd(){if(!m)return Promise.all(Uc.map(Wc))} -function Vc(){if(h.mainScriptUrlOrBlob){var a=h.mainScriptUrlOrBlob;"string"!=typeof a&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkIdVerifyModule.js",import.meta.url),{type:"module",name:"em-pthread"});Uc.push(a)}var fd=[];function wa(a){var b=(t(),H)[a+52>>2];a=(t(),H)[a+56>>2];Hc(b,b-a);Ic(b)}var gd=[],O=a=>{var b=gd[a];b||(gd[a]=b=Lc.get(a));return b},Ba=(a,b)=>{$c=M=0;a=O(a)(b);$c||0O(a)(b); -function hd(a,b,c,d){return m?N(2,1,a,b,c,d):$a(a,b,c,d)} -var ac=()=>!!globalThis.SharedArrayBuffer,$a=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(m&&0===e.length)return hd(a,b,c,d);a={fd:c,pb:a,Yb:d,xc:e};return m?(a.tb="spawnThread",postMessage(a,e),0):Zc(a)},kd=()=>{var a=(t(),D)[+jd>>2];jd+=4;return a},ld=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},md=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=ld(a.split("/").filter(d=> -!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},nd=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},od=()=>a=>a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),pd=a=>{(pd=od())(a)},qd=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b; -c="/"===c.charAt(0)}b=ld(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},rd=globalThis.TextDecoder&&new TextDecoder,sd=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},td=(a,b=0,c,d)=>{c=sd(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},ud=[],vd=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},wd=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>= -g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},xd=a=>{var b=Array(vd(a)+1);a=wd(a,b,0,b.length);b.length=a;return b},yd=[];function zd(a,b){yd[a]={input:[],output:[],vb:b};Ad(a,Bd)} -var Bd={open(a){var b=yd[a.node.Ib];if(!b)throw new P(43);a.Za=b;a.seekable=!1},close(a){a.Za.vb.Nb(a.Za)},Nb(a){a.Za.vb.Nb(a.Za)},read(a,b,c,d){if(!a.Za||!a.Za.vb.rc)throw new P(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=Ac(65536,a);b&&(t(),B).fill(0,b,b+a);return b},Q={ob:null,ub(){return Q.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new P(63);Q.ob||(Q.ob={dir:{node:{mb:Q.Wa.mb,sb:Q.Wa.sb,Eb:Q.Wa.Eb,Qb:Q.Wa.Qb,vc:Q.Wa.vc,Wb:Q.Wa.Wb,wc:Q.Wa.wc,fc:Q.Wa.fc,Ub:Q.Wa.Ub},stream:{nb:Q.Ua.nb}}, -file:{node:{mb:Q.Wa.mb,sb:Q.Wa.sb},stream:{nb:Q.Ua.nb,read:Q.Ua.read,write:Q.Ua.write,Fb:Q.Ua.Fb,Rb:Q.Ua.Rb}},link:{node:{mb:Q.Wa.mb,sb:Q.Wa.sb,Jb:Q.Wa.Jb},stream:{}},lc:{node:{mb:Q.Wa.mb,sb:Q.Wa.sb},stream:Fd}});c=Gd(a,b,c,d);R(c.mode)?(c.Wa=Q.ob.dir.node,c.Ua=Q.ob.dir.stream,c.Va={}):32768===(c.mode&61440)?(c.Wa=Q.ob.file.node,c.Ua=Q.ob.file.stream,c.ab=0,c.Va=null):40960===(c.mode&61440)?(c.Wa=Q.ob.link.node,c.Ua=Q.ob.link.stream):8192===(c.mode&61440)&&(c.Wa=Q.ob.lc.node,c.Ua=Q.ob.lc.stream); -c.xb=c.jb=c.ib=Date.now();a&&(a.Va[b]=c,a.xb=a.jb=a.ib=c.xb);return c},ud(a){return a.Va?a.Va.subarray?a.Va.subarray(0,a.ab):new Uint8Array(a.Va):new Uint8Array(0)},Wa:{mb(a){var b={};b.Cc=8192===(a.mode&61440)?a.id:1;b.Nc=a.id;b.mode=a.mode;b.Wc=1;b.uid=0;b.Jc=0;b.Ib=a.Ib;b.size=R(a.mode)?4096:32768===(a.mode&61440)?a.ab:40960===(a.mode&61440)?a.link.length:0;b.xb=new Date(a.xb);b.jb=new Date(a.jb);b.ib=new Date(a.ib);b.zc=4096;b.Ac=Math.ceil(b.size/b.zc);return b},sb(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.ab!=b&&(0==b?(a.Va=null,a.ab=0):(c=a.Va,a.Va=new Uint8Array(b),c&&a.Va.set(c.subarray(0,Math.min(b,a.ab))),a.ab=b)))},Eb(){Q.Zb||(Q.Zb=new P(44),Q.Zb.stack="");throw Q.Zb;},Qb(a,b,c,d){return Q.createNode(a,b,c,d)},vc(a,b,c){try{var d=Hd(b,c)}catch(f){}if(d){if(R(a.mode))for(var e in d.Va)throw new P(55);Id(d)}delete a.parent.Va[a.name];b.Va[c]=a;a.name=c;b.ib=b.jb=a.parent.ib=a.parent.jb=Date.now()},Wb(a, -b){delete a.Va[b];a.ib=a.jb=Date.now()},wc(a,b){var c=Hd(a,b),d;for(d in c.Va)throw new P(55);delete a.Va[b];a.ib=a.jb=Date.now()},fc(a){return[".","..",...Object.keys(a.Va)]},Ub(a,b,c){a=Q.createNode(a,b,41471,0);a.link=c;return a},Jb(a){if(40960!==(a.mode&61440))throw new P(28);return a.link}},Ua:{read(a,b,c,d,e){var f=a.node.Va;if(e>=a.node.ab)return 0;a=Math.min(a.node.ab-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Va,a.Va=new Uint8Array(f),0b)throw new P(28);return b},Fb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new P(43);a=a.node.Va;if(e&2||!a||a.buffer!==(t(),A).buffer){d=!0;e=Ed(b);if(!e)throw new P(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},Kd=async a=>{a=await ha(a);return new Uint8Array(a)},Ld=[],Md=async(a,b)=>{"undefined"!=typeof Browser&&Browser.vd();for(var c of Ld)if(c.canHandle(b))return c.handle(a,b);return a},Nd=null,Od={},Pd=[],Qd=1,Rd=null,La=!1,Qa=!0,Sd={},P=class{name="ErrnoError";constructor(a){this.bb=a}},Td=class{Tb={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.Tb.flags}set flags(a){this.Tb.flags= -a}get position(){return this.Tb.position}set position(a){this.Tb.position=a}},Ud=class{Wa={};Ua={};Sb=365;Xb=146;Gb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.ub=a.ub;this.id=Qd++;this.name=b;this.mode=c;this.Ib=d;this.xb=this.jb=this.ib=Date.now()}get read(){return(this.mode&this.Sb)===this.Sb}set read(a){a?this.mode|=this.Sb:this.mode&=~this.Sb}get write(){return(this.mode&this.Xb)===this.Xb}set write(a){a?this.mode|=this.Xb:this.mode&=~this.Xb}get Tc(){return R(this.mode)}get Sc(){return 8192=== -(this.mode&61440)}}; -function Vd(a,b={}){if(!a)throw new P(44);b.$b??(b.$b=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(k=>!!k);for(var d=Nd,e="/",f=0;f>>0)%Rd.length} -function Id(a){var b=Xd(a.parent.id,a.name);if(Rd[b]===a)Rd[b]=a.Ab;else for(b=Rd[b];b;){if(b.Ab===a){b.Ab=a.Ab;break}b=b.Ab}}function Hd(a,b){var c=R(a.mode)?(c=Yd(a,"x"))?c:a.Wa.Eb?0:2:54;if(c)throw new P(c);for(c=Rd[Xd(a.id,b)];c;c=c.Ab){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Wa.Eb(a,b)}function Gd(a,b,c,d){a=new Ud(a,b,c,d);b=Xd(a.parent.id,a.name);a.Ab=Rd[b];return Rd[b]=a}function R(a){return 16384===(a&61440)} -function Zd(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Yd(a,b){if(Qa)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function $d(a,b){if(!R(a.mode))return 54;try{return Hd(a,b),20}catch(c){}return Yd(a,"wx")}function ae(a){if(!a)throw new P(63);return a}function S(a){a=Pd[a];if(!a)throw new P(8);return a} -function be(a,b=-1){a=Object.assign(new Td,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!Pd[b])break a;throw new P(33);}a.yb=b;return Pd[b]=a}function ce(a,b=-1){a=be(a,b);a.Ua?.sd?.(a);return a}function de(a,b){var c=null?.Ua.sb,d=c?null:a;c??=a.Wa.sb;ae(c);c(d,b)}var Fd={open(a){a.Ua=Od[a.node.Ib].Ua;a.Ua.open?.(a)},nb(){throw new P(70);}};function Ad(a,b){Od[a]={Ua:b}} -function ee(a,b){var c="/"===b;if(c&&Nd)throw new P(10);if(!c&&b){var d=Vd(b,{$b:!1});b=d.path;d=d.node;if(d.Gb)throw new P(10);if(!R(d.mode))throw new P(54);}b={type:a,wd:{},tc:b,Vc:[]};a=a.ub(b);a.ub=b;b.root=a;c?Nd=a:d&&(d.Gb=b,d.ub&&d.ub.Vc.push(b))}function fe(a,b,c){var d=Vd(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new P(28);if("."===a||".."===a)throw new P(20);var e=$d(d,a);if(e)throw new P(e);if(!d.Wa.Qb)throw new P(63);return d.Wa.Qb(d,a,b,c)} -function ge(a,b=438){return fe(a,b&4095|32768,0)}function he(a){return fe(a,16895,0)}function ie(a,b,c){"undefined"==typeof c&&(c=b,b=438);return fe(a,b|8192,c)}function Na(a,b){if(!qd(a))throw new P(44);var c=Vd(b,{parent:!0}).node;if(!c)throw new P(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=$d(c,b);if(d)throw new P(d);if(!c.Wa.Ub)throw new P(63);c.Wa.Ub(c,b,a)} -function je(a){var b=Vd(a,{parent:!0}).node;if(!b)throw new P(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=Hd(b,a);a:{try{var d=Hd(b,a)}catch(f){d=f.bb;break a}var e=Yd(b,"wx");d=e?e:R(d.mode)?31:0}if(d)throw new P(d);if(!b.Wa.Wb)throw new P(63);if(c.Gb)throw new P(10);b.Wa.Wb(b,a);Id(c)}function ke(a,b){a=Vd(a,{Mb:!b}).node;return ae(a.Wa.mb)(a)}function le(a,b){a="string"==typeof a?Vd(a,{Mb:!0}).node:a;de(a,{mode:b&4095|a.mode&-4096,ib:Date.now(),rd:void 0})} -function Oa(a,b,c=438){if(""===a)throw new P(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Vd(a,{Mb:!(b&131072),Xc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new P(20);}else{if(e)throw new P(31);d=fe(a,c|511,0);f=!0}if(!d)throw new P(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!R(d.mode))throw new P(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:R(d.mode)&&("r"!==Zd(b)||b&576)?31:Yd(d,Zd(b)):44))throw new P(e);if(b&512&&!f){e=d;e="string"==typeof e?Vd(e,{Mb:!0}).node:e;if(R(e.mode))throw new P(31);if(32768!==(e.mode&61440))throw new P(28);var g=Yd(e,"w");if(g)throw new P(g);de(e,{size:0,timestamp:Date.now()})}b&=-131713;e=be({node:d,path:Wd(d),flags:b,seekable:!0,position:0,Ua:d.Ua,jd:[],error:!1});e.Ua.open&&e.Ua.open(e);f&&le(d,c&511);!h.logReadFiles||b&1||a in Sd||(Sd[a]=1);return e} -function me(a){if(null===a.yb)throw new P(8);a.ac&&(a.ac=null);try{a.Ua.close&&a.Ua.close(a)}catch(b){throw b;}finally{Pd[a.yb]=null}a.yb=null}function ne(a,b,c){if(null===a.yb)throw new P(8);if(!a.seekable||!a.Ua.nb)throw new P(70);if(0!=c&&1!=c&&2!=c)throw new P(28);a.position=a.Ua.nb(a,b,c);a.jd=[]} -function oe(a,b,c,d,e,f){if(0>d||0>e)throw new P(28);if(null===a.yb)throw new P(8);if(0===(a.flags&2097155))throw new P(8);if(R(a.node.mode))throw new P(31);if(!a.Ua.write)throw new P(28);a.seekable&&a.flags&1024&&ne(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new P(70);b=a.Ua.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function pe(a,b){a="string"==typeof a?a:Wd(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=md(a+"/"+c);try{he(d)}catch(e){if(20!=e.bb)throw e;}a=d}}return d}function qe(a,b,c,d){a=md(("string"==typeof a?a:Wd(a))+"/"+b);return ge(a,Jd(c,d))} -function re(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Wd(a),g=b?md(a+"/"+b):a);a=Jd(d,e);g=ge(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=n.length)return 0;v=Math.min(n.length-w,v);if(n.slice)for(var x=0;xthis.length-1||0>n)){var u=n%this.mc;return this.Db(n/this.mc|0)[u]}}ad(n){this.Db=n}kc(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);200<=n.status&&300>n.status||304===n.status||Ra("Couldn't load "+c+". Status: "+n.status);var u=Number(n.getResponseHeader("Content-length")), -y,v=(y=n.getResponseHeader("Accept-Ranges"))&&"bytes"===y;n=(y=n.getResponseHeader("Content-Encoding"))&&"gzip"===y;var w=1048576;v||(w=u);var x=this;x.ad(F=>{var G=F*w,K=(F+1)*w-1;K=Math.min(K,u-1);if("undefined"==typeof x.Lb[F]){var z=x.Lb;G>K&&Ra("invalid range ("+G+", "+K+") or no bytes requested!");K>u-1&&Ra("only "+u+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);u!==w&&J.setRequestHeader("Range","bytes="+G+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||Ra("Couldn't load "+c+". Status: "+J.status);G=void 0!==J.response?new Uint8Array(J.response||[]):xd(J.responseText||"");z[F]=G}"undefined"==typeof x.Lb[F]&&Ra("doXHR failed!");return x.Lb[F]});if(n||!u)w=u=1,w=u=this.Db(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.jc=u;this.ic=w;this.cc=!0}get length(){this.cc||this.kc();return this.jc}get mc(){this.cc|| -this.kc();return this.ic}}if(globalThis.XMLHttpRequest){ba||Ra("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var k=new g;var l=void 0}else l=c,k=void 0;var p=qe(a,b,d,e);k?p.Va=k:l&&(p.Va=null,p.url=l);Object.defineProperties(p,{ab:{get:function(){return this.Va.length}}});var q={};Object.keys(p.Ua).forEach(n=>{var u=p.Ua[n];q[n]=(...y)=>{se(p);return u(...y)}});q.read=(n,u,y,v,w)=>{se(p);return f(n,u,y,v,w)};q.Fb=(n,u,y)=>{se(p); -var v=Ed(u);if(!v)throw new P(48);f(n,(t(),A),v,u,y);return{Xa:v,wb:!0}};p.Ua=q;return p}var T={},U=(a,b,c)=>a?td((t(),B),a,b,c):"";function ue(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":S(a).path;if(0==b.length){if(!c)throw new P(44);return a}return a+"/"+b} -function ve(a,b){(t(),H)[a>>2]=b.Cc;(t(),H)[a+4>>2]=b.mode;(t(),H)[a+8>>2]=b.Wc;(t(),H)[a+12>>2]=b.uid;(t(),H)[a+16>>2]=b.Jc;(t(),H)[a+20>>2]=b.Ib;(t(),L)[a+24>>3]=BigInt(b.size);(t(),D)[a+32>>2]=4096;(t(),D)[a+36>>2]=b.Ac;var c=b.xb.getTime(),d=b.jb.getTime(),e=b.ib.getTime();(t(),L)[a+40>>3]=BigInt(Math.floor(c/1E3));(t(),H)[a+48>>2]=c%1E3*1E6;(t(),L)[a+56>>3]=BigInt(Math.floor(d/1E3));(t(),H)[a+64>>2]=d%1E3*1E6;(t(),L)[a+72>>3]=BigInt(Math.floor(e/1E3));(t(),H)[a+80>>2]=e%1E3*1E6;(t(),L)[a+88>> -3]=BigInt(b.Nc);return 0}var jd=void 0;function ab(a,b,c){if(m)return N(3,1,a,b,c);jd=c;try{var d=S(a);switch(b){case 0:var e=kd();if(0>e)break;for(;Pd[e];)e++;return ce(d,e).yb;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=kd(),d.flags|=e,0;case 12:return e=kd(),(t(),C)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.bb}} -function bb(a,b){if(m)return N(4,1,a,b);try{var c=S(a),d=c.node,e=c.Ua.mb;a=e?c:d;e??=d.Wa.mb;ae(e);var f=e(a);return ve(b,f)}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.bb}} -function cb(a,b,c){if(m)return N(5,1,a,b,c);jd=c;try{var d=S(a);switch(b){case 21509:return d.Za?0:-59;case 21505:if(!d.Za)return-59;if(d.Za.vb.Pc){a=[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];var e=kd();(t(),D)[e>>2]=25856;(t(),D)[e+4>>2]=5;(t(),D)[e+8>>2]=191;(t(),D)[e+12>>2]=35387;for(var f=0;32>f;f++)(t(),A)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Za?0:-59;case 21506:case 21507:case 21508:if(!d.Za)return-59;if(d.Za.vb.Qc)for(e=kd(), -t(),t(),t(),t(),a=[],f=0;32>f;f++)a.push((t(),A)[e+f+17]);return 0;case 21519:if(!d.Za)return-59;e=kd();return(t(),D)[e>>2]=0;case 21520:return d.Za?-28:-59;case 21537:case 21531:e=kd();if(!d.Ua.Oc)throw new P(59);return d.Ua.Oc(d,b,e);case 21523:if(!d.Za)return-59;d.Za.vb.Rc&&(f=[24,80],e=kd(),(t(),C)[e>>1]=f[0],(t(),C)[e+2>>1]=f[1]);return 0;case 21524:return d.Za?0:-59;case 21515:return d.Za?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.bb}} -function db(a,b){if(m)return N(6,1,a,b);try{return a=U(a),ve(b,ke(a,!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.bb}}function eb(a,b,c,d){if(m)return N(7,1,a,b,c,d);try{b=U(b);var e=d&256;b=ue(a,b,d&4096);return ve(c,e?ke(b,!0):ke(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.bb}} -function fb(a,b,c,d){if(m)return N(8,1,a,b,c,d);jd=d;try{b=U(b);b=ue(a,b);var e=d?kd():0;return Oa(b,c,e).yb}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.bb}}function gb(a,b){if(m)return N(9,1,a,b);try{return a=U(a),ve(b,ke(a))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.bb}}var hb=()=>Ra(""),we={},xe=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function ye(a){return this.cb((t(),H)[a>>2])} -var ze={},Ae={},Be={},Ce=class extends Error{constructor(a){super(a);this.name="InternalError"}},Ee=(a,b,c)=>{function d(k){k=c(k);if(k.length!==a.length)throw new Ce("Mismatched type converter count");for(var l=0;lBe[k]=b);var e=Array(b.length),f=[],g=0;b.forEach((k,l)=>{Ae.hasOwnProperty(k)?e[l]=Ae[k]:(f.push(k),ze.hasOwnProperty(k)||(ze[k]=[]),ze[k].push(()=>{e[l]=Ae[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},ib=a=>{var b=we[a];delete we[a];var c= -b.ec,d=b.qb,e=b.pc,f=e.map(g=>g.Ic).concat(e.map(g=>g.cd));Ee([a],f,g=>{var k={};e.forEach((l,p)=>{var q=g[p],n=l.Db,u=l.Hc,y=g[p+e.length],v=l.bd,w=l.dd;k[l.Ec]={read:x=>q.cb(n(u,x)),write:(x,F)=>{var G=[];v(w,x,y.gb(G,F));xe(G)},optional:g[p].optional}});return[{name:b.name,cb:l=>{var p={},q;for(q in k)p[q]=k[q].read(l);d(l);return p},gb:(l,p)=>{for(var q in k)if(!(q in p||k[q].optional))throw new TypeError(`Missing field: "${q}"`);var n=c();for(q in k)k[q].write(n,p[q]);null!==l&&l.push(d,n);return n}, -rb:ye,lb:d}]})},V=a=>{for(var b="";;){var c=(t(),B)[a++];if(!c)return b;b+=String.fromCharCode(c)}},W=class extends Error{constructor(a){super(a);this.name="BindingError"}};function Fe(a,b,c={}){var d=b.name;if(!a)throw new W(`type "${d}" must have a positive integer typeid pointer`);if(Ae.hasOwnProperty(a)){if(c.Mc)return;throw new W(`Cannot register type '${d}' twice`);}Ae[a]=b;delete Be[a];ze.hasOwnProperty(a)&&(b=ze[a],delete ze[a],b.forEach(e=>e()))}function De(a,b,c={}){return Fe(a,b,c)} -var Ge=(a,b,c)=>{switch(b){case 1:return c?d=>(t(),A)[d]:d=>(t(),B)[d];case 2:return c?d=>(t(),C)[d>>1]:d=>(t(),Fa)[d>>1];case 4:return c?d=>(t(),D)[d>>2]:d=>(t(),H)[d>>2];case 8:return c?d=>(t(),L)[d>>3]:d=>(t(),Ia)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=(a,b,c,d,e)=>{b=V(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=k=>BigInt.asUintN(g,k);e=f(e)}De(a,{name:b,cb:f,gb:(g,k)=>{"number"==typeof k&&(k=BigInt(k));return k},rb:Ge(b,c,!d),lb:null})},kb=(a,b,c,d)=>{b= -V(b);De(a,{name:b,cb:function(e){return!!e},gb:function(e,f){return f?c:d},rb:function(e){return this.cb((t(),B)[e])},lb:null})},He=a=>{throw new W(a.Ta.$a.Ya.name+" instance already deleted");},Ie=!1,Je=()=>{},Ke=a=>{if(!globalThis.FinalizationRegistry)return Ke=b=>b,a;Ie=new FinalizationRegistry(b=>{b=b.Ta;--b.count.value;0===b.count.value&&(b.fb?b.kb.qb(b.fb):b.$a.Ya.qb(b.Xa))});Ke=b=>{var c=b.Ta;c.fb&&Ie.register(b,{Ta:c},b);return b};Je=b=>{Ie.unregister(b)};return Ke(a)},Le=[]; -function Me(){} -var Ne=(a,b)=>Object.defineProperty(b,"name",{value:a}),Oe={},Pe=(a,b,c)=>{if(void 0===a[b].eb){var d=a[b];a[b]=function(...e){if(!a[b].eb.hasOwnProperty(e.length))throw new W(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].eb})!`);return a[b].eb[e.length].apply(this,e)};a[b].eb=[];a[b].eb[d.Bb]=d}},Qe=(a,b,c)=>{if(h.hasOwnProperty(a)){if(void 0===c||void 0!==h[a].eb&&void 0!==h[a].eb[c])throw new W(`Cannot register public name '${a}' twice`);Pe(h, -a,a);if(h[a].eb.hasOwnProperty(c))throw new W(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);h[a].eb[c]=b}else h[a]=b,h[a].Bb=c},Re=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Se(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.zb=c;this.qb=d;this.hb=e;this.Fc=f;this.Kb=g;this.Dc=k;this.Zc=[]} -var Te=(a,b,c)=>{for(;b!==c;){if(!b.Kb)throw new W(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Kb(a);b=b.hb}return a},Ue=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Ve(a,b){if(null===b){if(this.bc)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.Ta)throw new W(`Cannot pass "${Ue(b)}" as a ${this.name}`);if(!b.Ta.Xa)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);return Te(b.Ta.Xa,b.Ta.$a.Ya,this.Ya)} -function We(a,b){if(null===b){if(this.bc)throw new W(`null is not a valid ${this.name}`);if(this.Pb){var c=this.ec();null!==a&&a.push(this.qb,c);return c}return 0}if(!b||!b.Ta)throw new W(`Cannot pass "${Ue(b)}" as a ${this.name}`);if(!b.Ta.Xa)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Ob&&b.Ta.$a.Ob)throw new W(`Cannot convert argument of type ${b.Ta.kb?b.Ta.kb.name:b.Ta.$a.name} to parameter type ${this.name}`);c=Te(b.Ta.Xa,b.Ta.$a.Ya,this.Ya);if(this.Pb){if(void 0=== -b.Ta.fb)throw new W("Passing raw pointer to smart pointer is illegal");switch(this.ed){case 0:if(b.Ta.kb===this)c=b.Ta.fb;else throw new W(`Cannot convert argument of type ${b.Ta.kb?b.Ta.kb.name:b.Ta.$a.name} to parameter type ${this.name}`);break;case 1:c=b.Ta.fb;break;case 2:if(b.Ta.kb===this)c=b.Ta.fb;else{var d=b.clone();c=this.$c(c,Xe(()=>d["delete"]()));null!==a&&a.push(this.qb,c)}break;default:throw new W("Unsupporting sharing policy");}}return c} -function Ye(a,b){if(null===b){if(this.bc)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.Ta)throw new W(`Cannot pass "${Ue(b)}" as a ${this.name}`);if(!b.Ta.Xa)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Ta.$a.Ob)throw new W(`Cannot convert argument of type ${b.Ta.$a.name} to parameter type ${this.name}`);return Te(b.Ta.Xa,b.Ta.$a.Ya,this.Ya)} -var Ze=(a,b,c)=>{if(b===c)return a;if(void 0===c.hb)return null;a=Ze(a,b,c.hb);return null===a?null:c.Dc(a)},$e={},af=(a,b)=>{if(void 0===b)throw new W("ptr should not be undefined");for(;a.hb;)b=a.Kb(b),a=a.hb;return $e[b]},bf=(a,b)=>{if(!b.$a||!b.Xa)throw new Ce("makeClassHandle requires ptr and ptrType");if(!!b.kb!==!!b.fb)throw new Ce("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Ke(Object.create(a,{Ta:{value:b,writable:!0}}))}; -function cf(a,b,c,d,e,f,g,k,l,p,q){this.name=a;this.Ya=b;this.bc=c;this.Ob=d;this.Pb=e;this.Yc=f;this.ed=g;this.uc=k;this.ec=l;this.$c=p;this.qb=q;e||void 0!==b.hb?this.gb=We:(this.gb=d?Ve:Ye,this.lb=null)}var df=(a,b,c)=>{if(!h.hasOwnProperty(a))throw new Ce("Replacing nonexistent public symbol");void 0!==h[a].eb&&void 0!==c?h[a].eb[c]=b:(h[a]=b,h[a].Bb=c)},X=(a,b)=>{a=V(a);var c=O(b);if("function"!=typeof c)throw new W(`unknown function pointer with signature ${a}: ${b}`);return c}; -class ef extends Error{} -var ff=a=>{a=wc(a);var b=V(a);zc(a);return b},gf=(a,b)=>{function c(f){e[f]||Ae[f]||(Be[f]?Be[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new ef(`${a}: `+d.map(ff).join([", "]));},lb=(a,b,c,d,e,f,g,k,l,p,q,n,u)=>{q=V(q);f=X(e,f);k&&=X(g,k);p&&=X(l,p);u=X(n,u);var y=Re(q);Qe(y,function(){gf(`Cannot construct ${q} due to unbound types`,[d])});Ee([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var w=v.Ya;var x=w.zb}else x=Me.prototype;v=Ne(q,function(...z){if(Object.getPrototypeOf(this)!==F)throw new W(`Use 'new' to construct ${q}`); -if(void 0===G.nc)throw new W(`${q} has no accessible constructor`);var J=G.nc[z.length];if(void 0===J)throw new W(`Tried to invoke ctor of ${q} with invalid number of parameters (${z.length}) - expected (${Object.keys(G.nc).toString()}) parameters instead!`);return J.apply(this,z)});var F=Object.create(x,{constructor:{value:v}});v.prototype=F;var G=new Se(q,v,F,u,w,f,k,p);if(G.hb){var K;(K=G.hb).hc??(K.hc=[]);G.hb.hc.push(G)}w=new cf(q,G,!0,!1,!1);K=new cf(q+"*",G,!1,!1,!1);x=new cf(q+" const*",G, -!1,!0,!1);Oe[a]={pointerType:K,Bc:x};df(y,v);return[w,K,x]})};function hf(a){for(var b=1;bf)throw new W("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=hf(b),l=!b[0].Uc,p=f-2,q=Array(p),n=[],u=[];return Ne(a,function(...y){u.length=0;n.length=g?2:1;n[0]=e;if(g){var v=b[1].gb(u,this);n[1]=v}for(var w=0;w{for(var c=[],d=0;d>2]);return c},lf=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},mb=(a,b,c,d,e,f,g,k)=>{var l=kf(c,d);b=V(b);b=lf(b);f=X(e,f);Ee([],[a],p=>{function q(){gf(`Cannot call ${n} due to unbound types`,l)}p=p[0];var n=`${p.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);k&&p.Ya.Zc.push(b);var u=p.Ya.zb,y=u[b];void 0===y||void 0===y.eb&&y.className!==p.name&&y.Bb===c-2?(q.Bb=c-2,q.className=p.name,u[b]=q):(Pe(u,b, -n),u[b].eb[c-2]=q);Ee([],l,v=>{v=jf(n,v,p,f,g);void 0===u[b].eb?(v.Bb=c-2,u[b]=v):u[b].eb[c-2]=v;return[]});return[]})},mf=(a,b,c)=>{if(!(a instanceof Object))throw new W(`${c} with invalid "this": ${a}`);if(!(a instanceof b.Ya.constructor))throw new W(`${c} incompatible with "this" of type ${a.constructor.name}`);if(!a.Ta.Xa)throw new W(`cannot call emscripten binding method ${c} on deleted object`);return Te(a.Ta.Xa,a.Ta.$a.Ya,b.Ya)},nb=(a,b,c,d,e,f,g,k,l,p)=>{b=V(b);e=X(d,e);Ee([],[a],q=>{q=q[0]; -var n=`${q.name}.${b}`,u={get(){gf(`Cannot access ${n} due to unbound types`,[c,g])},enumerable:!0,configurable:!0};u.set=l?()=>gf(`Cannot access ${n} due to unbound types`,[c,g]):()=>{throw new W(n+" is a read-only property");};Object.defineProperty(q.Ya.zb,b,u);Ee([],l?[c,g]:[c],y=>{var v=y[0],w={get(){var F=mf(this,q,n+" getter");return v.cb(e(f,F))},enumerable:!0};if(l){l=X(k,l);var x=y[1];w.set=function(F){var G=mf(this,q,n+" setter"),K=[];l(p,G,x.gb(K,F));xe(K)}}Object.defineProperty(q.Ya.zb, -b,w);return[]});return[]})},nf=[],of=[0,1,,1,null,1,!0,1,!1,1],Hb=a=>{9{if(!a)throw new W(`Cannot use deleted val. handle = ${a}`);return of[a]},Xe=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=nf.pop()||of.length;of[b]=a;of[b+1]=1;return b}},qf={name:"emscripten::val",cb:a=>{var b=pf(a);Hb(a);return b},gb:(a,b)=>Xe(b),rb:ye,lb:null},ob=a=>De(a,qf),rf=(a,b)=>{switch(b){case 4:return function(c){return this.cb((t(), -Ga)[c>>2])};case 8:return function(c){return this.cb((t(),Ha)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},pb=(a,b,c)=>{b=V(b);De(a,{name:b,cb:d=>d,gb:(d,e)=>e,rb:rf(b,c),lb:null})},qb=(a,b,c,d,e,f)=>{var g=kf(b,c);a=V(a);a=lf(a);e=X(d,e);Qe(a,function(){gf(`Cannot call ${a} due to unbound types`,g)},b-1);Ee([],g,k=>{df(a,jf(a,[k[0],null].concat(k.slice(1)),null,e,f),b-1);return[]})},rb=(a,b,c,d,e)=>{b=V(b);let f=k=>k;if(0===d){var g=32-8*c;f=k=>k<>>g;e=f(e)}De(a, -{name:b,cb:f,gb:(k,l)=>l,rb:Ge(b,c,0!==d),lb:null})},sb=(a,b,c)=>{function d(f){var g=(t(),H)[f>>2];f=(t(),H)[f+4>>2];return new e((t(),A).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=V(c);De(a,{name:c,cb:d,rb:d},{Mc:!0})},sf=Object.assign({optional:!0},qf),tb=a=>{De(a,sf)},Y=(a,b,c)=>wd(a,(t(),B),b,c),ub=(a,b)=>{b=V(b);De(a,{name:b,cb(c){var d=(t(),H)[c>>2];d=U(c+4,d,!0);zc(c);return d},gb(c,d){d instanceof -ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new W("Cannot pass non-string to std::string");var f=e?vd(d):d.length;var g=yc(4+f+1),k=g+4;(t(),H)[g>>2]=f;e?Y(d,k,f+1):(t(),B).set(d,k);null!==c&&c.push(zc,g);return g},rb:ye,lb(c){zc(c)}})},tf=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,uf=(a,b,c)=>{a>>=1;b=sd((t(),Fa),a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}(t(),C)[b>>1]=0;return b-d},wf=a=>2*a.length,xf=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(t(),H)[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},yf=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}(t(),D)[b>>2]=0;return b-d},zf=a=>{for(var b=0,c=0;c{c=V(c);if(2===b){var d=uf;var e=vf;var f=wf}else d=xf,e=yf,f=zf;De(a,{name:c,cb:g=>{var k=(t(),H)[g>>2];k=d(g+4,k*b,!0);zc(g);return k},gb:(g,k)=>{if("string"!=typeof k)throw new W(`Cannot pass non-string to C++ string type ${c}`);var l=f(k),p=yc(4+l+b);(t(),H)[p>>2]=l/b;e(k,p+4,l+b);null!==g&&g.push(zc,p);return p}, -rb:ye,lb(g){zc(g)}})},wb=(a,b,c,d,e,f)=>{we[a]={name:V(b),ec:X(c,d),qb:X(e,f),pc:[]}},xb=(a,b,c,d,e,f,g,k,l,p)=>{we[a].pc.push({Ec:V(b),Ic:c,Db:X(d,e),Hc:f,cd:g,bd:X(k,l),dd:p})},yb=(a,b)=>{b=V(b);De(a,{Uc:!0,name:b,cb:()=>{},gb:()=>{}})},zb=a=>{xa(a,!ba,1,!aa,5242880,!1);ya()},Af=a=>{if(!(a instanceof Mc||"unwind"==a))throw a;},ed=a=>{if(!ma)try{if(a(),!($c||0{Atomics.waitAsync&&(Atomics.waitAsync((t(),D),a>>2,a).value.then(Ca), -a+=128,Atomics.store((t(),D),a>>2,1))},Ca=()=>ed(()=>{var a=xc();a&&(za(a),Fc())}),Ab=(a,b)=>{a==b?setTimeout(Ca):m?postMessage({Vb:a,tb:"checkMailbox"}):(a=Yc[a])&&a.postMessage({tb:"checkMailbox"})},Bf=[],Bb=(a,b,c,d,e)=>{d/=2;Bf.length=d;c=e>>3;for(e=0;e{$c=!1;M=0},Db=a=>{m?postMessage({tb:"cleanupThread",hd:a}):dd(Yc[a])},Eb=()=>{},Fb=()=>{throw Infinity;},Ef=[],Ff=a=>{var b=Ef.length;Ef.push(a); -return b},Gf=(a,b)=>{for(var c=Array(a),d=0;d>2],g=Ae[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${ff(f)}`,new W(a);c[e]=g}return c},Hf={},If=a=>{var b=Hf[a];return void 0===b?V(a):b},Gb=(a,b,c)=>{var [d,...e]=Gf(a,b),f=d.gb.bind(d),g=e.map(l=>l.rb.bind(l));a--;var k=Array(a);b=`methodCaller<(${e.map(l=>l.name)}) => ${d.name}>`;return Ff(Ne(b,(l,p,q,n)=>{for(var u=0,y=0;y>2]=Xe(l));return v}))},Ib=a=>{if(!a)return Xe(globalThis);a=If(a);return Xe(globalThis[a])},Jb=(a,b)=>{a=pf(a);b=pf(b);return Xe(a[b])},Kb=a=>{9Ef[a](b,c,d,e),Mb=()=>Xe([]),Nb=a=>Xe(If(a)),Ob=a=>{var b=pf(a);xe(b);Hb(a)},Jf=a=>0===a%4&&(0!==a%100||0===a%400),Kf=[0,31,60,91,121,152,182,213,244,274,305,335],Lf=[0,31,59,90,120,151,181,212,243, -273,304,334]; -function Pb(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();(t(),D)[b+4>>2]=a.getMinutes();(t(),D)[b+8>>2]=a.getHours();(t(),D)[b+12>>2]=a.getDate();(t(),D)[b+16>>2]=a.getMonth();(t(),D)[b+20>>2]=a.getFullYear()-1900;(t(),D)[b+24>>2]=a.getDay();var c=(Jf(a.getFullYear())?Kf:Lf)[a.getMonth()]+a.getDate()-1|0;(t(),D)[b+28>>2]=c;(t(),D)[b+36>>2]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(t(),D)[b+32>>2]=a} -function Qb(a){var b=new Date((t(),D)[a+20>>2]+1900,(t(),D)[a+16>>2],(t(),D)[a+12>>2],(t(),D)[a+8>>2],(t(),D)[a+4>>2],(t(),D)[a>>2],0),c=(t(),D)[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?(t(),D)[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();c=(Jf(b.getFullYear())?Kf:Lf)[b.getMonth()]+b.getDate()-1|0; -(t(),D)[a+28>>2]=c;(t(),D)[a>>2]=b.getSeconds();(t(),D)[a+4>>2]=b.getMinutes();(t(),D)[a+8>>2]=b.getHours();(t(),D)[a+12>>2]=b.getDate();(t(),D)[a+16>>2]=b.getMonth();(t(),D)[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)}var Mf={},$b=()=>performance.timeOrigin+performance.now(); -function Rb(a,b){if(m)return N(12,1,a,b);Mf[a]&&(clearTimeout(Mf[a].id),delete Mf[a]);if(!b)return 0;var c=setTimeout(()=>{delete Mf[a];ed(()=>Ec(a,performance.timeOrigin+performance.now()))},b);Mf[a]={id:c,xd:b};return 0} -var Sb=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(t(),H)[a>>2]=60*g;(t(),D)[b>>2]=Number(f!=e);b=k=>{var l=Math.abs(k);return`UTC${0<=k?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(e);eDate.now(),Nf=1; -function Tb(a,b,c){if(!(0<=a&&3>=a))return 28;if(0===a)a=Date.now();else if(Nf)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(1E6*a);(t(),L)[c>>3]=BigInt(a);return 0}var Of=[],Ub=(a,b,c)=>{Of.length=0;for(var d;d=(t(),B)[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;Of.push(112==d?(t(),H)[c>>2]:106==d?(t(),L)[c>>3]:105==d?(t(),D)[c>>2]:(t(),Ha)[c>>3]);c+=e?8:4}return Cf[a](...Of)},Vb=()=>{},Xb=()=>{M+=1;throw"unwind";}; -function Yb(a){if(Pf.has(a)){var b=Pf.get(a),c=Pf;c.wb[a]=void 0;c.qc.push(a);0b.readyState&&b.abort()}}var Zb=()=>2147483648,bc=()=>navigator.hardwareConcurrency,cc=a=>{var b=(t(),B).length;a>>>=0;if(a<=b||2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1}; -function Qf(a){var b=Pf,c=b.qc.pop()||b.wb.length;b.wb[c]=a;return c}class Rf{wb=[void 0];qc=[];get(a){return this.wb[a]}has(a){return void 0!==this.wb[a]}}async function Sf(){return new Promise((a,b)=>{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Pf,Tf; -function Uf(a,b,c,d,e){function f(){var I=0,E=0;z.response&&F&&0===(t(),H)[a+12>>2]&&(E=z.response.byteLength);0>2]=I;Z(a+16,E);Z(a+24,0);(I=z.response?z.response.byteLength:0)&&Z(a+32,I);(t(),C)[a+40>>1]=z.readyState;(t(),C)[a+42>>1]=z.status;z.statusText&&Y(z.statusText,a+44,64);K&&(I=Vf(z.responseURL),(t(),H)[a+200>>2]=I)}var g=(t(),H)[a+8>>2];if(g){var k=U(g),l=a+108,p=U(l+0);p||="GET";var q=(t(),H)[l+56>>2],n=(t(),H)[l+68>> -2],u=(t(),H)[l+72>>2];g=(t(),H)[l+76>>2];var y=(t(),H)[l+80>>2],v=(t(),H)[l+84>>2],w=(t(),H)[l+88>>2],x=(t(),H)[l+52>>2],F=!!(x&1),G=!!(x&2),K=!!(x&64);n=n?U(n):void 0;u=u?U(u):void 0;var z=new XMLHttpRequest;z.withCredentials=!!(t(),B)[l+60];z.open(p,k,!K,n,u);K||(z.timeout=q);z.yd=k;z.responseType="arraybuffer";y&&(k=U(y),z.overrideMimeType(k));if(g)for(;;){l=(t(),H)[g>>2];if(!l)break;k=(t(),H)[g+4>>2];if(!k)break;g+=8;l=U(l);k=U(k);z.setRequestHeader(l,k)}var J=Qf(z);(t(),H)[a>>2]=J;g=v&&w?(t(), -B).slice(v,v+w):null;z.onload=I=>{Pf.has(J)&&(f(),200<=z.status&&300>z.status?b(a,z,I):c(a,I))};z.onerror=I=>{Pf.has(J)&&(f(),c(a,I))};z.ontimeout=I=>{Pf.has(J)&&c(a,I)};z.onprogress=I=>{if(Pf.has(J)){var E=F&&G&&z.response?z.response.byteLength:0,Ea=0;0>2]=Ea;Z(a+16,E);Z(a+24,I.loaded-E);Z(a+32,I.total);(t(),C)[a+40>>1]=z.readyState;E=z.status;3<=z.readyState&&0===z.status&&0>1]=E;z.statusText&& -Y(z.statusText,a+44,64);d(a,I);zc(Ea)}};z.onreadystatechange=I=>{if(Pf.has(J)){(t(),C)[a+40>>1]=z.readyState;2<=z.readyState&&((t(),C)[a+42>>1]=z.status);if(!K&&2===z.readyState&&0>2]=E}e(a,I)}else--M};try{z.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{(t(),H)[a>>2]=b;var c=(t(),H)[a>>2];(t(),H)[a+4>>2]=(b-c)/4294967296},Vf=a=>{var b=vd(a)+1,c=yc(b);c&&Y(a,c,b);return c}; -function Wf(a,b,c,d){var e=Tf;if(e){var f=a+108;(f=(t(),H)[f+64>>2])||(f=(t(),H)[a+8>>2]);var g=U(f);try{var k=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);k.onsuccess=()=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);c(a,0,g)};k.onerror=l=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=413;Y("Payload Too Large",a+44,64);d(a,0,l)}}catch(l){d(a,0,l)}}else d(a,0,"IndexedDB not available!")} -function Xf(a,b,c){var d=Tf;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var k=g.byteLength||g.length,l=yc(k);(t(),B).set(new Uint8Array(g),l);(t(),H)[a+12>>2]=l;Z(a+16,k);Z(a+24,0);Z(a+32,k);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)}else(t(),C)[a+40>>1]=4,(t(),C)[a+42>>1]=404,Y("Not Found",a+44,64),c(a,0,"no data")};f.onerror= -g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Yf(a,b,c){var d=Tf;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;(t(),H)[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)};f.onerror=g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function dc(a,b,c,d,e){function f(E){u?E():ed(E)}M+=1;var g=a+108,k=(t(),H)[g+36>>2],l=(t(),H)[g+40>>2],p=(t(),H)[g+44>>2],q=(t(),H)[g+48>>2],n=(t(),H)[g+52>>2],u=!!(n&64),y=E=>{--M;f(()=>{k?O(k)(E):b?.(E)})},v=E=>{f(()=>{p?O(p)(E):d?.(E)})},w=E=>{--M;f(()=>{l?O(l)(E):c?.(E)})},x=E=>{f(()=>{q?O(q)(E):e?.(E)})},F=E=>{Uf(E,y,w,v,x)},G=(E,Ea)=>{Wf(E,Ea.response,Ya=>{--M;f(()=>{k?O(k)(Ya):b?.(Ya)})},Ya=>{--M;f(()=>{k?O(k)(Ya):b?.(Ya)})})},K=E=>{Uf(E,G,w,v,x)},z=U(g+0),J=!!(n&16),I=!!(n&4);n=!!(n&32); -if("EM_IDB_STORE"===z)F=(t(),H)[g+84>>2],g=(t(),H)[g+88>>2],Wf(a,(t(),B).slice(F,F+g),y,w);else if("EM_IDB_DELETE"===z)Yf(a,y,w);else if(J){if(n)return 0;Uf(a,I?G:y,w,v,x)}else Xf(a,y,n?w:I?K:F);return a} -var Zf={},ag=()=>{if(!$f){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Zf)void 0===Zf[b]?delete a[b]:a[b]=Zf[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);$f=c}return $f},$f;function ec(a,b){if(m)return N(13,1,a,b);var c=0,d=0,e;for(e of ag()){var f=b+c;(t(),H)[a+d>>2]=f;c+=Y(e,f,Infinity)+1;d+=4}return 0} -function fc(a,b){if(m)return N(14,1,a,b);var c=ag();(t(),H)[a>>2]=c.length;a=0;for(var d of c)a+=vd(d)+1;(t(),H)[b>>2]=a;return 0}function hc(a){if(m)return N(15,1,a);try{var b=S(a);me(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.bb}} -function ic(a,b,c,d){if(m)return N(16,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var p=e,q=(t(),A),n=k,u=l,y=f;if(0>u||0>y)throw new P(28);if(null===p.yb)throw new P(8);if(1===(p.flags&2097155))throw new P(8);if(R(p.node.mode))throw new P(31);if(!p.Ua.read)throw new P(28);var v="undefined"!=typeof y;if(!v)y=p.position;else if(!p.seekable)throw new P(70);var w=p.Ua.read(p,q,n,u,y);v||(p.position+=w);var x=w;if(0>x){var F=-1;break a}b+=x;if(x< -l)break;"undefined"!=typeof f&&(f+=x)}F=b}(t(),H)[d>>2]=F;return 0}catch(G){if("undefined"==typeof T||"ErrnoError"!==G.name)throw G;return G.bb}}function jc(a,b,c,d){if(m)return N(17,1,a,b,c,d);b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.ac&&0===b&&0===c&&(e.ac=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.bb}} -function kc(a,b,c,d){if(m)return N(18,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var p=oe(e,(t(),A),k,l,f);if(0>p){var q=-1;break a}b+=p;if(p>2]=q;return 0}catch(n){if("undefined"==typeof T||"ErrnoError"!==n.name)throw n;return n.bb}}function uc(a,b){try{return pd((t(),B).subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.bb}}m||bd();Rd=Array(4096); -ee(Q,"/");he("/tmp");he("/home");he("/home/web_user");(function(){he("/dev");Ad(259,{read:()=>0,write:(d,e,f,g)=>g,nb:()=>0});ie("/dev/null",259);zd(1280,Cd);zd(1536,Dd);ie("/dev/tty",1280);ie("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(pd(a),b=a.byteLength);return a[--b]};Ma("/dev","random",c);Ma("/dev","urandom",c);he("/dev/shm");he("/dev/shm/tmp")})(); -(function(){he("/proc");var a=he("/proc/self");he("/proc/self/fd");ee({ub(){var b=Gd(a,"fd",16895,73);b.Ua={nb:Q.Ua.nb};b.Wa={Eb(c,d){c=+d;var e=S(c);c={parent:null,ub:{tc:"fake"},Wa:{Jb:()=>e.path},id:c+1};return c.parent=c},fc(){return Array.from(Pd.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=Me.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof Me&&c instanceof Me))return!1;var d=this.Ta.$a.Ya,e=this.Ta.Xa;c.Ta=c.Ta;var f=c.Ta.$a.Ya;for(c=c.Ta.Xa;d.hb;)e=d.Kb(e),d=d.hb;for(;f.hb;)c=f.Kb(c),f=f.hb;return d===f&&e===c},clone:function(){this.Ta.Xa||He(this);if(this.Ta.Hb)return this.Ta.count.value+=1,this;var c=Ke,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.Ta;c=c(e.call(d,f,{Ta:{value:{count:g.count,Cb:g.Cb,Hb:g.Hb,Xa:g.Xa,$a:g.$a,fb:g.fb,kb:g.kb}}})); -c.Ta.count.value+=1;c.Ta.Cb=!1;return c},["delete"](){this.Ta.Xa||He(this);if(this.Ta.Cb&&!this.Ta.Hb)throw new W("Object already scheduled for deletion");Je(this);var c=this.Ta;--c.count.value;0===c.count.value&&(c.fb?c.kb.qb(c.fb):c.$a.Ya.qb(c.Xa));this.Ta.Hb||(this.Ta.fb=void 0,this.Ta.Xa=void 0)},isDeleted:function(){return!this.Ta.Xa},deleteLater:function(){this.Ta.Xa||He(this);if(this.Ta.Cb&&!this.Ta.Hb)throw new W("Object already scheduled for deletion");Le.push(this);this.Ta.Cb=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(cf.prototype,{Gc(a){this.uc&&(a=this.uc(a));return a},oc(a){this.qb?.(a)},rb:ye,cb:function(a){function b(){return this.Pb?bf(this.Ya.zb,{$a:this.Yc,Xa:c,kb:this,fb:a}):bf(this.Ya.zb,{$a:this,Xa:a})}var c=this.Gc(a);if(!c)return this.oc(a),null;var d=af(this.Ya,c);if(void 0!==d){if(0===d.Ta.count.value)return d.Ta.Xa=c,d.Ta.fb=a,d.clone();d=d.clone();this.oc(a);return d}d=this.Ya.Fc(c);d=Oe[d];if(!d)return b.call(this);d=this.Ob?d.Bc:d.pointerType;var e=Ze(c,this.Ya,d.Ya);return null=== -e?b.call(this):this.Pb?bf(d.Ya.zb,{$a:d,Xa:e,kb:this,fb:a}):bf(d.Ya.zb,{$a:d,Xa:e})}});(async function(){Pf=new Rf;if(!m){Tc("library_fetch_init");try{Tf=await Sf()}catch(a){Tf=!1}finally{Sc("library_fetch_init")}}})();m||(oa=h.wasmMemory?h.wasmMemory:new WebAssembly.Memory({initial:(h.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());h.noExitRuntime&&($c=h.noExitRuntime);h.preloadPlugins&&(Ld=h.preloadPlugins);h.print&&(ja=h.print);h.printErr&&(r=h.printErr);h.wasmBinary&&(ka=h.wasmBinary); -h.thisProgram&&(da=h.thisProgram);if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0{var l=b?qd(md(a+"/"+b)):a,p=`cp ${l}`;Tc(p);try{var q=c;"string"==typeof c&&(q=await Kd(c));q=await Md(q,l);k?.();f||re(a,b,q,d,e,g)}finally{Sc(p)}};h.FS_unlink=(...a)=>je(...a);h.FS_createPath=(...a)=>pe(...a);h.FS_createDevice=(...a)=>Ma(...a); -h.FS_createDataFile=(...a)=>re(...a);h.FS_createLazyFile=(...a)=>te(...a); -var Df=[tc,ad,hd,ab,bb,cb,db,eb,fb,gb,function(a,b,c,d,e,f,g){if(m)return N(10,1,a,b,c,d,e,f,g);e=-9007199254740992>e||9007199254740992>2]=l.wb;(t(),H)[g>>2]=p;return 0}catch(q){if("undefined"==typeof T||"ErrnoError"!==q.name)throw q;return-q.bb}},function(a,b,c,d,e,f){if(m)return N(11, -1,a,b,c,d,e,f);f=-9007199254740992>f||9007199254740992{throw Error("Cannot assign to read-only property 'jpegBytes'");},867407:a=>{throw Error(a);},867434:a=>{throw Error(a);}}; -function lc(){var a=stackTrace(),b=vd(a)+1,c=yc(b);Y(a,c,b);return c}var wc,Aa,xc,yc,zc,Ac,xa,Da,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ic,Jc,Kc,Lc;h.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=309168;var Xa;function oc(a,b,c,d){var e=Kc();try{return O(a)(b,c,d)}catch(f){Ic(e);if(f!==f+0)throw f;Gc(1,0)}}function rc(a,b,c){var d=Kc();try{O(a)(b,c)}catch(e){Ic(d);if(e!==e+0)throw e;Gc(1,0)}}function qc(a,b){var c=Kc();try{O(a)(b)}catch(d){Ic(c);if(d!==d+0)throw d;Gc(1,0)}} -function sc(a,b,c,d){var e=Kc();try{O(a)(b,c,d)}catch(f){Ic(e);if(f!==f+0)throw f;Gc(1,0)}}function mc(a,b){var c=Kc();try{return O(a)(b)}catch(d){Ic(c);if(d!==d+0)throw d;Gc(1,0)}}function nc(a,b,c){var d=Kc();try{return O(a)(b,c)}catch(e){Ic(d);if(e!==e+0)throw e;Gc(1,0)}}function pc(a,b,c,d,e){var f=Kc();try{return O(a)(b,c,d,e)}catch(g){Ic(f);if(g!==g+0)throw g;Gc(1,0)}} -function va(){function a(){h.calledRun=!0;if(!ma&&(Ka(),qa?.(h),h.onRuntimeInitialized?.(),!m)){if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();fd.push(b)}Oc(fd)}}if(0{setTimeout(()=>h.setStatus(""),1);a()},1)):a()}} -var Pa;m||(Pa=await (ua()),va());moduleRtn=Ja?h:new Promise((a,b)=>{qa=a;ra=b}); -;return moduleRtn}export default createModule;var isPthread=globalThis.self?.name?.startsWith("em-pthread");isPthread&&createModule(); diff --git a/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.wasm b/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.wasm deleted file mode 100755 index df0ae4be..00000000 Binary files a/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.wasm and /dev/null differ diff --git a/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.js b/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.js deleted file mode 100644 index d0763ea9..00000000 --- a/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.js +++ /dev/null @@ -1,125 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var m=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=m).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);m.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,n){var p;(p=m).dataFileDownloads??(p.dataFileDownloads={});try{var l=await fetch(k)}catch(w){throw Error(`Network Error: ${k}`,{e:w});}if(!l.ok)throw Error(`${l.status}: ${l.url}`);p=[];n=Number(l.headers.get("Content-Length")??n);let t=0;m.setStatus?.("Downloading data...");for(l=l.body.getReader();;){var {done:y, -value:u}=await l.read();if(y)break;p.push(u);t+=u.length;m.dataFileDownloads[k]={loaded:t,total:n};let w=0,E=0;for(var v of Object.values(m.dataFileDownloads))w+=v.loaded,E+=v.total;m.setStatus?.(`Downloading data... (${w}/${E})`)}k=new Uint8Array(p.map(w=>w.length).reduce((w,E)=>w+E,0));v=0;for(const w of p)k.set(w,v),v+=w.length;return k.buffer}async function d(k){for(var n of b.files)k.addRunDependency(`fp ${n.filename}`);k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.data"); -k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.data"]={Mc:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var l of b.files){var t=l.filename;k.FS_createDataFile(t,null,p.subarray(l.start,l.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.data")})(h)} -"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=m.locateFile?.("BlinkIdVerifyModule.data","")??"BlinkIdVerifyModule.data",f=b.remote_package_size,g,h=m.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(m.calledRun)d(m);else{let k;((k=m).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop", -start:0,end:103198},{filename:"/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop",start:106933,end:451389},{filename:"/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:775876,end:1044597},{filename:"/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop", -start:1044597,end:1051046},{filename:"/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop",start:1051046,end:2476219},{filename:"/Model_8326c5065a6d8451d6d004db73babf4a4a9f502c68643a14934cc098d04bf44f.strop",start:2476219,end:2863913},{filename:"/Model_86d689f894da5af89553f5a5a9514ab5a6fdbab4b67a5a7c51f45c2189357ca5.strop",start:2863913,end:2917159},{filename:"/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2917159,end:3944014},{filename:"/Model_93607315418f2c5d3abec06d0b2a81e69abeb1b8d0506ed6373d7d74bd5e4b05.strop", -start:3944014,end:5189005},{filename:"/Model_9a8a29486ce57a15db08a18c76a94df4c811039737750667147f0001942f19d3.strop",start:5189005,end:5272454},{filename:"/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop",start:5272454,end:5568256},{filename:"/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:5568256,end:5574752},{filename:"/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop",start:5574752,end:9680601},{filename:"/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop", -start:9680601,end:9805805},{filename:"/Model_d68548d94b956e67d6b606c7a8988082c3d66f494f94a14d705d0cdea6635151.strop",start:9805805,end:10243981},{filename:"/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop",start:10243981,end:10318426},{filename:"/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:10318426,end:10393828},{filename:"/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop",start:10393828,end:11056881}, -{filename:"/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:11056881,end:11083179},{filename:"/ccc_lookup_table.zzip",start:11083179,end:11103648},{filename:"/serialized_embedder_db_1.12.bin",start:11103648,end:14381309}],remote_package_size:14381309})})();m.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}};m="undefined"!==typeof m?m:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!m.locateFile&&(m.locateFile=function(d,e){return"BlinkIdVerifyModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,z,A,pa,B,C,qa,ra,G,sa,ta=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);z=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);C=new Uint32Array(a);qa=new Float32Array(a);ra=new Float64Array(a);G=new BigInt64Array(a);sa=new BigUint64Array(a)}var wa;function K(a){m.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),K(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=m.preRun.shift();Ea.push(a)},Ga=!0,Ha=[],L=a=>{var b=Ha[a];b||(Ha[a]=b=Ia.get(a));return b},La=()=>{var a=B[+Ka>>2];Ka+=4;return a},Ma=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Na=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Ma(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b? -"/":"")+a},Oa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Pa=()=>a=>crypto.getRandomValues(a),Qa=a=>{(Qa=Pa())(a)},Ra=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ma(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."}, -Sa=globalThis.TextDecoder&&new TextDecoder,Ta=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},M=(a,b=0,c,d)=>{c=Ta(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}, -Ua=[],Va=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},N=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]= -128|g&63;f++}}b[c]=0;return c-e},Wa=a=>{var b=Array(Va(a)+1);a=N(a,b,0,b.length);b.length=a;return b},Xa=[];function Ya(a,b){Xa[a]={input:[],output:[],Za:b};Za(a,$a)} -var $a={open(a){var b=Xa[a.node.lb];if(!b)throw new O(43);a.Fa=b;a.seekable=!1},close(a){a.Fa.Za.qb(a.Fa)},qb(a){a.Fa.Za.qb(a.Fa)},read(a,b,c,d){if(!a.Fa||!a.Fa.Za.Tb)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=cb(65536,a);b&&z.fill(0,b,b+a);return b},P={Ua:null,Ya(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.Ua||(P.Ua={dir:{node:{Sa:P.Ca.Sa,Xa:P.Ca.Xa,ib:P.Ca.ib,tb:P.Ca.tb,Xb:P.Ca.Xb,yb:P.Ca.yb,Yb:P.Ca.Yb,Ib:P.Ca.Ib,xb:P.Ca.xb},stream:{Ta:P.Aa.Ta}}, -file:{node:{Sa:P.Ca.Sa,Xa:P.Ca.Xa},stream:{Ta:P.Aa.Ta,read:P.Aa.read,write:P.Aa.write,Fb:P.Aa.Fb,ub:P.Aa.ub}},link:{node:{Sa:P.Ca.Sa,Xa:P.Ca.Xa,mb:P.Ca.mb},stream:{}},Nb:{node:{Sa:P.Ca.Sa,Xa:P.Ca.Xa},stream:eb}});c=fb(a,b,c,d);Q(c.mode)?(c.Ca=P.Ua.dir.node,c.Aa=P.Ua.dir.stream,c.Ba={}):32768===(c.mode&61440)?(c.Ca=P.Ua.file.node,c.Aa=P.Ua.file.stream,c.Ha=0,c.Ba=null):40960===(c.mode&61440)?(c.Ca=P.Ua.link.node,c.Aa=P.Ua.link.stream):8192===(c.mode&61440)&&(c.Ca=P.Ua.Nb.node,c.Aa=P.Ua.Nb.stream); -c.$a=c.Pa=c.Oa=Date.now();a&&(a.Ba[b]=c,a.$a=a.Pa=a.Oa=c.$a);return c},Nc(a){return a.Ba?a.Ba.subarray?a.Ba.subarray(0,a.Ha):new Uint8Array(a.Ba):new Uint8Array(0)},Ca:{Sa(a){var b={};b.bc=8192===(a.mode&61440)?a.id:1;b.lc=a.id;b.mode=a.mode;b.uc=1;b.uid=0;b.jc=0;b.lb=a.lb;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.Ha:40960===(a.mode&61440)?a.link.length:0;b.$a=new Date(a.$a);b.Pa=new Date(a.Pa);b.Oa=new Date(a.Oa);b.Zb=4096;b.$b=Math.ceil(b.size/b.Zb);return b},Xa(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Ha!=b&&(0==b?(a.Ba=null,a.Ha=0):(c=a.Ba,a.Ba=new Uint8Array(b),c&&a.Ba.set(c.subarray(0,Math.min(b,a.Ha))),a.Ha=b)))},ib(){P.Ab||(P.Ab=new O(44),P.Ab.stack="");throw P.Ab;},tb(a,b,c,d){return P.createNode(a,b,c,d)},Xb(a,b,c){try{var d=gb(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.Ba)throw new O(55);hb(d)}delete a.parent.Ba[a.name];b.Ba[c]=a;a.name=c;b.Oa=b.Pa=a.parent.Oa=a.parent.Pa=Date.now()},yb(a, -b){delete a.Ba[b];a.Oa=a.Pa=Date.now()},Yb(a,b){var c=gb(a,b),d;for(d in c.Ba)throw new O(55);delete a.Ba[b];a.Oa=a.Pa=Date.now()},Ib(a){return[".","..",...Object.keys(a.Ba)]},xb(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},mb(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},Aa:{read(a,b,c,d,e){var f=a.node.Ba;if(e>=a.node.Ha)return 0;a=Math.min(a.node.Ha-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Ba,a.Ba=new Uint8Array(f),0b)throw new O(28);return b},Fb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.Ba;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=db(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},jb=async a=>{a=await ha(a);return new Uint8Array(a)},kb=0,lb=null,mb=()=>{kb--;m.monitorRunDependencies?.(kb);if(0==kb&&lb){var a=lb;lb=null;a()}},nb=()=>{kb++;m.monitorRunDependencies?.(kb)},ob=[],pb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Oc();for(var c of ob)if(c.canHandle(b))return c.handle(a,b);return a},qb=null,rb={},sb=[],tb=1,ub=null,vb=!1,wb=!0,xb={},O=class{name="ErrnoError";constructor(a){this.Ja=a}},yb=class{wb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.wb.flags}set flags(a){this.wb.flags=a}get position(){return this.wb.position}set position(a){this.wb.position=a}},zb=class{Ca={};Aa={};vb=365;zb=146;jb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Ya=a.Ya;this.id=tb++;this.name=b;this.mode=c;this.lb=d;this.$a=this.Pa=this.Oa=Date.now()}get read(){return(this.mode&this.vb)===this.vb}set read(a){a?this.mode|=this.vb:this.mode&=~this.vb}get write(){return(this.mode&this.zb)===this.zb}set write(a){a?this.mode|=this.zb: -this.mode&=~this.zb}get rc(){return Q(this.mode)}get qc(){return 8192===(this.mode&61440)}}; -function Ab(a,b={}){if(!a)throw new O(44);b.Bb??(b.Bb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=qb,e="/",f=0;f>>0)%ub.length} -function hb(a){var b=Cb(a.parent.id,a.name);if(ub[b]===a)ub[b]=a.eb;else for(b=ub[b];b;){if(b.eb===a){b.eb=a.eb;break}b=b.eb}}function gb(a,b){var c=Q(a.mode)?(c=Db(a,"x"))?c:a.Ca.ib?0:2:54;if(c)throw new O(c);for(c=ub[Cb(a.id,b)];c;c=c.eb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Ca.ib(a,b)}function fb(a,b,c,d){a=new zb(a,b,c,d);b=Cb(a.parent.id,a.name);a.eb=ub[b];return ub[b]=a}function Q(a){return 16384===(a&61440)} -function Eb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Db(a,b){if(wb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Fb(a,b){if(!Q(a.mode))return 54;try{return gb(a,b),20}catch(c){}return Db(a,"wx")}function Gb(a){if(!a)throw new O(63);return a}function R(a){a=sb[a];if(!a)throw new O(8);return a} -function Hb(a,b=-1){a=Object.assign(new yb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!sb[b])break a;throw new O(33);}a.ab=b;return sb[b]=a}function Ib(a,b=-1){a=Hb(a,b);a.Aa?.Lc?.(a);return a}function Jb(a,b){var c=null?.Aa.Xa,d=c?null:a;c??=a.Ca.Xa;Gb(c);c(d,b)}var eb={open(a){a.Aa=rb[a.node.lb].Aa;a.Aa.open?.(a)},Ta(){throw new O(70);}};function Za(a,b){rb[a]={Aa:b}} -function Kb(a,b){var c="/"===b;if(c&&qb)throw new O(10);if(!c&&b){var d=Ab(b,{Bb:!1});b=d.path;d=d.node;if(d.jb)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,Pc:{},Vb:b,tc:[]};a=a.Ya(b);a.Ya=b;b.root=a;c?qb=a:d&&(d.jb=b,d.Ya&&d.Ya.tc.push(b))}function Lb(a,b,c){var d=Ab(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Fb(d,a);if(e)throw new O(e);if(!d.Ca.tb)throw new O(63);return d.Ca.tb(d,a,b,c)} -function Mb(a,b=438){return Lb(a,b&4095|32768,0)}function S(a){return Lb(a,16895,0)}function Nb(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Lb(a,b|8192,c)}function Ob(a,b){if(!Ra(a))throw new O(44);var c=Ab(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Fb(c,b);if(d)throw new O(d);if(!c.Ca.xb)throw new O(63);c.Ca.xb(c,b,a)} -function Pb(a){var b=Ab(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=gb(b,a);a:{try{var d=gb(b,a)}catch(f){d=f.Ja;break a}var e=Db(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.Ca.yb)throw new O(63);if(c.jb)throw new O(10);b.Ca.yb(b,a);hb(c)}function Qb(a,b){a=Ab(a,{pb:!b}).node;return Gb(a.Ca.Sa)(a)}function Rb(a,b){a="string"==typeof a?Ab(a,{pb:!0}).node:a;Jb(a,{mode:b&4095|a.mode&-4096,Oa:Date.now(),Kc:void 0})} -function Sb(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Ab(a,{pb:!(b&131072),vc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Lb(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Eb(b)||b&576)?31:Db(d,Eb(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Ab(e,{pb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Db(e,"w");if(g)throw new O(g);Jb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Hb({node:d,path:Bb(d),flags:b,seekable:!0,position:0,Aa:d.Aa,Ec:[],error:!1});e.Aa.open&&e.Aa.open(e);f&&Rb(d,c&511);!m.logReadFiles||b&1||a in xb||(xb[a]=1);return e} -function Tb(a){if(null===a.ab)throw new O(8);a.Cb&&(a.Cb=null);try{a.Aa.close&&a.Aa.close(a)}catch(b){throw b;}finally{sb[a.ab]=null}a.ab=null}function Ub(a,b,c){if(null===a.ab)throw new O(8);if(!a.seekable||!a.Aa.Ta)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.Aa.Ta(a,b,c);a.Ec=[]} -function Vb(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.ab)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.Aa.write)throw new O(28);a.seekable&&a.flags&1024&&Ub(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.Aa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Wb(a,b){a="string"==typeof a?a:Bb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Na(a+"/"+c);try{S(d)}catch(e){if(20!=e.Ja)throw e;}a=d}}return d}function Xb(a,b,c,d){a=Na(("string"==typeof a?a:Bb(a))+"/"+b);return Mb(a,ib(c,d))} -function Yb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Bb(a),g=b?Na(a+"/"+b):a);a=ib(d,e);g=Mb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=l.length)return 0;u=Math.min(l.length-v,u);if(l.slice)for(var w=0;wthis.length-1||0>l)){var t=l%this.Ob;return this.hb(l/this.Ob|0)[t]}}zc(l){this.hb=l}Mb(){var l=new XMLHttpRequest;l.open("HEAD",c,!1);l.send(null);200<=l.status&&300>l.status||304===l.status||K("Couldn't load "+c+". Status: "+l.status);var t=Number(l.getResponseHeader("Content-length")), -y,u=(y=l.getResponseHeader("Accept-Ranges"))&&"bytes"===y;l=(y=l.getResponseHeader("Content-Encoding"))&&"gzip"===y;var v=1048576;u||(v=t);var w=this;w.zc(E=>{var F=E*v,J=(E+1)*v-1;J=Math.min(J,t-1);if("undefined"==typeof w.ob[E]){var x=w.ob;F>J&&K("invalid range ("+F+", "+J+") or no bytes requested!");J>t-1&&K("only "+t+" bytes available! programmer error!");var I=new XMLHttpRequest;I.open("GET",c,!1);t!==v&&I.setRequestHeader("Range","bytes="+F+"-"+J);I.responseType="arraybuffer";I.overrideMimeType&& -I.overrideMimeType("text/plain; charset=x-user-defined");I.send(null);200<=I.status&&300>I.status||304===I.status||K("Couldn't load "+c+". Status: "+I.status);F=void 0!==I.response?new Uint8Array(I.response||[]):Wa(I.responseText||"");x[E]=F}"undefined"==typeof w.ob[E]&&K("doXHR failed!");return w.ob[E]});if(l||!t)v=t=1,v=t=this.hb(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.Lb=t;this.Kb=v;this.Eb=!0}get length(){this.Eb||this.Mb();return this.Lb}get Ob(){this.Eb|| -this.Mb();return this.Kb}}if(globalThis.XMLHttpRequest){ba||K("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var n=Xb(a,b,d,e);h?n.Ba=h:k&&(n.Ba=null,n.url=k);Object.defineProperties(n,{Ha:{get:function(){return this.Ba.length}}});var p={};Object.keys(n.Aa).forEach(l=>{var t=n.Aa[l];p[l]=(...y)=>{$b(n);return t(...y)}});p.read=(l,t,y,u,v)=>{$b(n);return f(l,t,y,u,v)};p.Fb=(l,t,y)=>{$b(n); -var u=db(t);if(!u)throw new O(48);f(l,r,u,t,y);return{Ea:u,cb:!0}};n.Aa=p;return n}var T={},bc=(a,b,c)=>a?M(z,a,b,c):"";function cc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":R(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function dc(a,b){C[a>>2]=b.bc;C[a+4>>2]=b.mode;C[a+8>>2]=b.uc;C[a+12>>2]=b.uid;C[a+16>>2]=b.jc;C[a+20>>2]=b.lb;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.$b;var c=b.$a.getTime(),d=b.Pa.getTime(),e=b.Oa.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));C[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));C[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));C[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.lc);return 0}var Ka=void 0,ec={},fc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function gc(a){return this.Ia(C[a>>2])} -var hc={},ic={},jc={},kc=class extends Error{constructor(a){super(a);this.name="InternalError"}},lc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new kc("Mismatched type converter count");for(var k=0;kjc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{ic.hasOwnProperty(h)?e[k]=ic[h]:(f.push(h),hc.hasOwnProperty(h)||(hc[h]=[]),hc[h].push(()=>{e[k]=ic[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},V=a=>{for(var b="";;){var c=z[a++];if(!c)return b; -b+=String.fromCharCode(c)}},W=class extends Error{constructor(a){super(a);this.name="BindingError"}};function mc(a,b,c={}){var d=b.name;if(!a)throw new W(`type "${d}" must have a positive integer typeid pointer`);if(ic.hasOwnProperty(a)){if(c.kc)return;throw new W(`Cannot register type '${d}' twice`);}ic[a]=b;delete jc[a];hc.hasOwnProperty(a)&&(b=hc[a],delete hc[a],b.forEach(e=>e()))}function U(a,b,c={}){return mc(a,b,c)} -var nc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>z[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>C[d>>2];case 8:return c?d=>G[d>>3]:d=>sa[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},oc=a=>{throw new W(a.za.Ga.Da.name+" instance already deleted");},pc=!1,qc=()=>{},rc=a=>{if(!globalThis.FinalizationRegistry)return rc=b=>b,a;pc=new FinalizationRegistry(b=>{b=b.za;--b.count.value;0===b.count.value&&(b.La?b.Qa.Va(b.La):b.Ga.Da.Va(b.Ea))});rc= -b=>{var c=b.za;c.La&&pc.register(b,{za:c},b);return b};qc=b=>{pc.unregister(b)};return rc(a)},sc=[];function tc(){} -var uc=(a,b)=>Object.defineProperty(b,"name",{value:a}),vc={},wc=(a,b,c)=>{if(void 0===a[b].Ka){var d=a[b];a[b]=function(...e){if(!a[b].Ka.hasOwnProperty(e.length))throw new W(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Ka})!`);return a[b].Ka[e.length].apply(this,e)};a[b].Ka=[];a[b].Ka[d.fb]=d}},xc=(a,b,c)=>{if(m.hasOwnProperty(a)){if(void 0===c||void 0!==m[a].Ka&&void 0!==m[a].Ka[c])throw new W(`Cannot register public name '${a}' twice`);wc(m, -a,a);if(m[a].Ka.hasOwnProperty(c))throw new W(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);m[a].Ka[c]=b}else m[a]=b,m[a].fb=c},yc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function zc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.bb=c;this.Va=d;this.Na=e;this.ec=f;this.nb=g;this.cc=h;this.xc=[]} -var Ac=(a,b,c)=>{for(;b!==c;){if(!b.nb)throw new W(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.nb(a);b=b.Na}return a},Bc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Cc(a,b){if(null===b){if(this.Db)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.za)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.za.Ea)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);return Ac(b.za.Ea,b.za.Ga.Da,this.Da)} -function Dc(a,b){if(null===b){if(this.Db)throw new W(`null is not a valid ${this.name}`);if(this.sb){var c=this.Hb();null!==a&&a.push(this.Va,c);return c}return 0}if(!b||!b.za)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.za.Ea)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.rb&&b.za.Ga.rb)throw new W(`Cannot convert argument of type ${b.za.Qa?b.za.Qa.name:b.za.Ga.name} to parameter type ${this.name}`);c=Ac(b.za.Ea,b.za.Ga.Da,this.Da);if(this.sb){if(void 0=== -b.za.La)throw new W("Passing raw pointer to smart pointer is illegal");switch(this.Dc){case 0:if(b.za.Qa===this)c=b.za.La;else throw new W(`Cannot convert argument of type ${b.za.Qa?b.za.Qa.name:b.za.Ga.name} to parameter type ${this.name}`);break;case 1:c=b.za.La;break;case 2:if(b.za.Qa===this)c=b.za.La;else{var d=b.clone();c=this.yc(c,Ec(()=>d["delete"]()));null!==a&&a.push(this.Va,c)}break;default:throw new W("Unsupporting sharing policy");}}return c} -function Fc(a,b){if(null===b){if(this.Db)throw new W(`null is not a valid ${this.name}`);return 0}if(!b.za)throw new W(`Cannot pass "${Bc(b)}" as a ${this.name}`);if(!b.za.Ea)throw new W(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.za.Ga.rb)throw new W(`Cannot convert argument of type ${b.za.Ga.name} to parameter type ${this.name}`);return Ac(b.za.Ea,b.za.Ga.Da,this.Da)} -var Gc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Na)return null;a=Gc(a,b,c.Na);return null===a?null:c.cc(a)},Hc={},Ic=(a,b)=>{if(void 0===b)throw new W("ptr should not be undefined");for(;a.Na;)b=a.nb(b),a=a.Na;return Hc[b]},Jc=(a,b)=>{if(!b.Ga||!b.Ea)throw new kc("makeClassHandle requires ptr and ptrType");if(!!b.Qa!==!!b.La)throw new kc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return rc(Object.create(a,{za:{value:b,writable:!0}}))}; -function Kc(a,b,c,d,e,f,g,h,k,n,p){this.name=a;this.Da=b;this.Db=c;this.rb=d;this.sb=e;this.wc=f;this.Dc=g;this.Wb=h;this.Hb=k;this.yc=n;this.Va=p;e||void 0!==b.Na?this.Ma=Dc:(this.Ma=d?Cc:Fc,this.Ra=null)}var Lc=(a,b,c)=>{if(!m.hasOwnProperty(a))throw new kc("Replacing nonexistent public symbol");void 0!==m[a].Ka&&void 0!==c?m[a].Ka[c]=b:(m[a]=b,m[a].fb=c)},X=(a,b)=>{a=V(a);var c=L(b);if("function"!=typeof c)throw new W(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Mc extends Error{}var Pc=a=>{a=Nc(a);var b=V(a);Oc(a);return b},Qc=(a,b)=>{function c(f){e[f]||ic[f]||(jc[f]?jc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Mc(`${a}: `+d.map(Pc).join([", "]));};function Rc(a){for(var b=1;bf)throw new W("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Rc(b),k=!b[0].sc,n=f-2,p=Array(n),l=[],t=[];return uc(a,function(...y){t.length=0;l.length=g?2:1;l[0]=e;if(g){var u=b[1].Ma(t,this);l[1]=u}for(var v=0;v{for(var c=[],d=0;d>2]);return c},Uc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Vc=(a,b,c)=>{if(!(a instanceof Object))throw new W(`${c} with invalid "this": ${a}`);if(!(a instanceof b.Da.constructor))throw new W(`${c} incompatible with "this" of type ${a.constructor.name}`);if(!a.za.Ea)throw new W(`cannot call emscripten binding method ${c} on deleted object`);return Ac(a.za.Ea,a.za.Ga.Da,b.Da)},Wc=[],Xc=[0,1,,1,null,1,!0,1,!1,1],Yc=a=> -{9{if(!a)throw new W(`Cannot use deleted val. handle = ${a}`);return Xc[a]},Ec=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Wc.pop()||Xc.length;Xc[b]=a;Xc[b+1]=1;return b}},$c={name:"emscripten::val",Ia:a=>{var b=Zc(a);Yc(a);return b},Ma:(a,b)=>Ec(b),Wa:gc,Ra:null},ad=(a,b)=>{switch(b){case 4:return function(c){return this.Ia(qa[c>>2])};case 8:return function(c){return this.Ia(ra[c>>3])}; -default:throw new TypeError(`invalid float width (${b}): ${a}`);}},bd=Object.assign({optional:!0},$c),cd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,dd=(a,b,c)=>{a>>=1;b=Ta(pa,a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},fd=a=>2*a.length,gd=(a,b,c)=>{var d="";a>>= -2;for(var e=0;!(e>=b/4);e++){var f=C[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},hd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},jd=a=>{for(var b=0,c=0;c{var b=ld.length;ld.push(a);return b},nd=(a,b)=>{for(var c=Array(a),d=0;d>2],g=ic[f];if(void 0===g)throw a= -`${`parameter ${d}`} has unknown type ${Pc(f)}`,new W(a);c[e]=g}return c},od={},pd=a=>{var b=od[a];return void 0===b?V(a):b},qd=a=>0===a%4&&(0!==a%100||0===a%400),rd=[0,31,60,91,121,152,182,213,244,274,305,335],sd=[0,31,59,90,120,151,181,212,243,273,304,334],td={},ud=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},vd=a=>{ma=a;Ga||0{if(!la)try{if(a(),!(Ga||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Bd; -function Cd(a,b,c,d,e){function f(){var H=0,D=0;x.response&&E&&0===C[a+12>>2]&&(D=x.response.byteLength);0>2]=H;Z(a+16,D);Z(a+24,0);(H=x.response?x.response.byteLength:0)&&Z(a+32,H);A[a+40>>1]=x.readyState;A[a+42>>1]=x.status;x.statusText&&N(x.statusText,z,a+44,64);J&&(H=Ed(x.responseURL),C[a+200>>2]=H)}var g=C[a+8>>2];if(g){var h=g?M(z,g):"",k=a+108,n=bc(k+0);n||="GET";var p=C[k+56>>2],l=C[k+68>>2],t=C[k+72>>2];g=C[k+76>>2];var y=C[k+80>>2], -u=C[k+84>>2],v=C[k+88>>2],w=C[k+52>>2],E=!!(w&1),F=!!(w&2),J=!!(w&64);l=l?l?M(z,l):"":void 0;t=t?t?M(z,t):"":void 0;var x=new XMLHttpRequest;x.withCredentials=!!z[k+60];x.open(n,h,!J,l,t);J||(x.timeout=p);x.Rc=h;x.responseType="arraybuffer";y&&(h=y?M(z,y):"",x.overrideMimeType(h));if(g)for(;;){k=C[g>>2];if(!k)break;h=C[g+4>>2];if(!h)break;g+=8;k=k?M(z,k):"";h=h?M(z,h):"";x.setRequestHeader(k,h)}var I=yd(x);C[a>>2]=I;g=u&&v?z.slice(u,u+v):null;x.onload=H=>{Y.has(I)&&(f(),200<=x.status&&300>x.status? -b(a,x,H):c(a,H))};x.onerror=H=>{Y.has(I)&&(f(),c(a,H))};x.ontimeout=H=>{Y.has(I)&&c(a,H)};x.onprogress=H=>{if(Y.has(I)){var D=E&&F&&x.response?x.response.byteLength:0,ua=0;0>2]=ua;Z(a+16,D);Z(a+24,H.loaded-D);Z(a+32,H.total);A[a+40>>1]=x.readyState;D=x.status;3<=x.readyState&&0===x.status&&0>1]=D;x.statusText&&N(x.statusText,z,a+44,64);d(a,H);Oc(ua)}};x.onreadystatechange=H=>{if(Y.has(I)){A[a+40>>1]=x.readyState; -2<=x.readyState&&(A[a+42>>1]=x.status);if(!J&&2===x.readyState&&0>2]=D}e(a,H)}};try{x.send(g)}catch(H){c(a,H)}}else c(a,"no url specified!")}var Z=(a,b)=>{C[a>>2]=b;C[a+4>>2]=(b-C[a>>2])/4294967296},Ed=a=>{var b=Va(a)+1,c=Dd(b);c&&N(a,z,c,b);return c}; -function Fd(a,b,c,d){var e=Bd;if(e){var f=C[a+108+64>>2];f||=C[a+8>>2];var g=f?M(z,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;N("OK",z,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;N("Payload Too Large",z,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Bd;if(d){var e=C[a+108+64>>2];e||=C[a+8>>2];e=e?M(z,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Dd(h);z.set(new Uint8Array(g),k);C[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",z,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,N("Not Found",z,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found", -z,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Hd(a,b,c){var d=Bd;if(d){var e=C[a+108+64>>2];e||=C[a+8>>2];e=e?M(z,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;C[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",z,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found",z,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Id={},Kd=()=>{if(!Jd){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Id)void 0===Id[b]?delete a[b]:a[b]=Id[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Jd=c}return Jd},Jd;ub=Array(4096);Kb(P,"/");S("/tmp");S("/home");S("/home/web_user"); -(function(){S("/dev");Za(259,{read:()=>0,write:(d,e,f,g)=>g,Ta:()=>0});Nb("/dev/null",259);Ya(1280,ab);Ya(1536,bb);Nb("/dev/tty",1280);Nb("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Qa(a),b=a.byteLength);return a[--b]};Zb("/dev","random",c);Zb("/dev","urandom",c);S("/dev/shm");S("/dev/shm/tmp")})(); -(function(){S("/proc");var a=S("/proc/self");S("/proc/self/fd");Kb({Ya(){var b=fb(a,"fd",16895,73);b.Aa={Ta:P.Aa.Ta};b.Ca={ib(c,d){c=+d;var e=R(c);c={parent:null,Ya:{Vb:"fake"},Ca:{mb:()=>e.path},id:c+1};return c.parent=c},Ib(){return Array.from(sb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=tc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof tc&&c instanceof tc))return!1;var d=this.za.Ga.Da,e=this.za.Ea;c.za=c.za;var f=c.za.Ga.Da;for(c=c.za.Ea;d.Na;)e=d.nb(e),d=d.Na;for(;f.Na;)c=f.nb(c),f=f.Na;return d===f&&e===c},clone:function(){this.za.Ea||oc(this);if(this.za.kb)return this.za.count.value+=1,this;var c=rc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.za;c=c(e.call(d,f,{za:{value:{count:g.count,gb:g.gb,kb:g.kb,Ea:g.Ea,Ga:g.Ga,La:g.La,Qa:g.Qa}}})); -c.za.count.value+=1;c.za.gb=!1;return c},["delete"](){this.za.Ea||oc(this);if(this.za.gb&&!this.za.kb)throw new W("Object already scheduled for deletion");qc(this);var c=this.za;--c.count.value;0===c.count.value&&(c.La?c.Qa.Va(c.La):c.Ga.Da.Va(c.Ea));this.za.kb||(this.za.La=void 0,this.za.Ea=void 0)},isDeleted:function(){return!this.za.Ea},deleteLater:function(){this.za.Ea||oc(this);if(this.za.gb&&!this.za.kb)throw new W("Object already scheduled for deletion");sc.push(this);this.za.gb=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Kc.prototype,{fc(a){this.Wb&&(a=this.Wb(a));return a},Qb(a){this.Va?.(a)},Wa:gc,Ia:function(a){function b(){return this.sb?Jc(this.Da.bb,{Ga:this.wc,Ea:c,Qa:this,La:a}):Jc(this.Da.bb,{Ga:this,Ea:a})}var c=this.fc(a);if(!c)return this.Qb(a),null;var d=Ic(this.Da,c);if(void 0!==d){if(0===d.za.count.value)return d.za.Ea=c,d.za.La=a,d.clone();d=d.clone();this.Qb(a);return d}d=this.Da.ec(c);d=vc[d];if(!d)return b.call(this);d=this.rb?d.ac:d.pointerType;var e=Gc(c,this.Da,d.Da);return null=== -e?b.call(this):this.sb?Jc(d.Da.bb,{Ga:d,Ea:e,Qa:this,La:a}):Jc(d.Da.bb,{Ga:d,Ea:e})}});(async function(){Y=new zd;nb("library_fetch_init");try{Bd=await Ad()}catch(a){Bd=!1}finally{mb("library_fetch_init")}})();wa=m.wasmMemory?m.wasmMemory:new WebAssembly.Memory({initial:(m.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();m.noExitRuntime&&(Ga=m.noExitRuntime);m.preloadPlugins&&(ob=m.preloadPlugins);m.print&&(ja=m.print);m.printErr&&(q=m.printErr);m.wasmBinary&&(ka=m.wasmBinary); -m.thisProgram&&(da=m.thisProgram);if(m.preInit)for("function"==typeof m.preInit&&(m.preInit=[m.preInit]);0{var k=b?Ra(Na(a+"/"+b)):a,n=`cp ${k}`;nb(n);try{var p=c;"string"==typeof c&&(p=await jb(c));p=await pb(p,k);h?.();f||Yb(a,b,p,d,e,g)}finally{mb(n)}};m.FS_unlink=(...a)=>Pb(...a);m.FS_createPath=(...a)=>Wb(...a);m.FS_createDevice=(...a)=>Zb(...a); -m.FS_createDataFile=(...a)=>Yb(...a);m.FS_createLazyFile=(...a)=>ac(...a);var Ld={865401:()=>{throw Error("Cannot assign to read-only property 'jpegBytes'");},865475:a=>{throw Error(a);},865502:a=>{throw Error(a);}},Nc,Dd,Oc,cb,Md,Nd,Od,Pd,Ia;m.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Xd={L:(a,b)=>L(a)(b),y:function(a,b,c){Ka=c;try{var d=R(a);switch(b){case 0:var e=La();if(0>e)break;for(;sb[e];)e++;return Ib(d,e).ab;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=La(),d.flags|=e,0;case 12:return e=La(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ja}},ba:function(a,b){try{var c=R(a),d=c.node,e=c.Aa.Sa;a=e?c:d;e??=d.Ca.Sa;Gb(e);var f=e(a);return dc(b,f)}catch(g){if("undefined"==typeof T|| -"ErrnoError"!==g.name)throw g;return-g.Ja}},ca:function(a,b,c){Ka=c;try{var d=R(a);switch(b){case 21509:return d.Fa?0:-59;case 21505:if(!d.Fa)return-59;if(d.Fa.Za.nc){a=[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];var e=La();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Fa?0:-59;case 21506:case 21507:case 21508:if(!d.Fa)return-59;if(d.Fa.Za.oc)for(e=La(),a=[],f=0;32> -f;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.Fa)return-59;e=La();return B[e>>2]=0;case 21520:return d.Fa?-28:-59;case 21537:case 21531:e=La();if(!d.Aa.mc)throw new O(59);return d.Aa.mc(d,b,e);case 21523:if(!d.Fa)return-59;d.Fa.Za.pc&&(f=[24,80],e=La(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.Fa?0:-59;case 21515:return d.Fa?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ja}},$:function(a,b){try{return a=a?M(z,a):"",dc(b,Qb(a, -!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ja}},_:function(a,b,c,d){try{b=b?M(z,b):"";var e=d&256;b=cc(a,b,d&4096);return dc(c,e?Qb(b,!0):Qb(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ja}},z:function(a,b,c,d){Ka=d;try{b=b?M(z,b):"";b=cc(a,b);var e=d?La():0;return Sb(b,c,e).ab}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ja}},aa:function(a,b){try{return a=a?M(z,a):"",dc(b,Qb(a))}catch(c){if("undefined"== -typeof T||"ErrnoError"!==c.name)throw c;return-c.Ja}},ea:()=>K(""),f:a=>{var b=ec[a];delete ec[a];var c=b.Hb,d=b.Va,e=b.Rb,f=e.map(g=>g.ic).concat(e.map(g=>g.Bc));lc([a],f,g=>{var h={};e.forEach((k,n)=>{var p=g[n],l=k.hb,t=k.hc,y=g[n+e.length],u=k.Ac,v=k.Cc;h[k.dc]={read:w=>p.Ia(l(t,w)),write:(w,E)=>{var F=[];u(v,w,y.Ma(F,E));fc(F)},optional:g[n].optional}});return[{name:b.name,Ia:k=>{var n={},p;for(p in h)n[p]=h[p].read(k);d(k);return n},Ma:(k,n)=>{for(var p in h)if(!(p in n||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var l=c();for(p in h)h[p].write(l,n[p]);null!==k&&k.push(d,l);return l},Wa:gc,Ra:d}]})},C:(a,b,c,d,e)=>{b=V(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}U(a,{name:b,Ia:f,Ma:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},Wa:nc(b,c,!d),Ra:null})},D:(a,b,c,d)=>{b=V(b);U(a,{name:b,Ia:function(e){return!!e},Ma:function(e,f){return f?c:d},Wa:function(e){return this.Ia(z[e])},Ra:null})},r:(a,b,c,d,e,f,g,h,k,n,p,l,t)=>{p=V(p);f=X(e,f);h&&=X(g,h);n&&=X(k,n);t=X(l,t);var y= -yc(p);xc(y,function(){Qc(`Cannot construct ${p} due to unbound types`,[d])});lc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var v=u.Da;var w=v.bb}else w=tc.prototype;u=uc(p,function(...x){if(Object.getPrototypeOf(this)!==E)throw new W(`Use 'new' to construct ${p}`);if(void 0===F.Pb)throw new W(`${p} has no accessible constructor`);var I=F.Pb[x.length];if(void 0===I)throw new W(`Tried to invoke ctor of ${p} with invalid number of parameters (${x.length}) - expected (${Object.keys(F.Pb).toString()}) parameters instead!`); -return I.apply(this,x)});var E=Object.create(w,{constructor:{value:u}});u.prototype=E;var F=new zc(p,u,E,t,v,f,h,n);if(F.Na){var J;(J=F.Na).Jb??(J.Jb=[]);F.Na.Jb.push(F)}v=new Kc(p,F,!0,!1,!1);J=new Kc(p+"*",F,!1,!1,!1);w=new Kc(p+" const*",F,!1,!0,!1);vc[a]={pointerType:J,ac:w};Lc(y,u);return[v,J,w]})},l:(a,b,c,d,e,f,g,h)=>{var k=Tc(c,d);b=V(b);b=Uc(b);f=X(e,f);lc([],[a],n=>{function p(){Qc(`Cannot call ${l} due to unbound types`,k)}n=n[0];var l=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&n.Da.xc.push(b);var t=n.Da.bb,y=t[b];void 0===y||void 0===y.Ka&&y.className!==n.name&&y.fb===c-2?(p.fb=c-2,p.className=n.name,t[b]=p):(wc(t,b,l),t[b].Ka[c-2]=p);lc([],k,u=>{u=Sc(l,u,n,f,g);void 0===t[b].Ka?(u.fb=c-2,t[b]=u):t[b].Ka[c-2]=u;return[]});return[]})},m:(a,b,c,d,e,f,g,h,k,n)=>{b=V(b);e=X(d,e);lc([],[a],p=>{p=p[0];var l=`${p.name}.${b}`,t={get(){Qc(`Cannot access ${l} due to unbound types`,[c,g])},enumerable:!0,configurable:!0};t.set=k?()=>Qc(`Cannot access ${l} due to unbound types`, -[c,g]):()=>{throw new W(l+" is a read-only property");};Object.defineProperty(p.Da.bb,b,t);lc([],k?[c,g]:[c],y=>{var u=y[0],v={get(){var E=Vc(this,p,l+" getter");return u.Ia(e(f,E))},enumerable:!0};if(k){k=X(h,k);var w=y[1];v.set=function(E){var F=Vc(this,p,l+" setter"),J=[];k(n,F,w.Ma(J,E));fc(J)}}Object.defineProperty(p.Da.bb,b,v);return[]});return[]})},na:a=>U(a,$c),B:(a,b,c)=>{b=V(b);U(a,{name:b,Ia:d=>d,Ma:(d,e)=>e,Wa:ad(b,c),Ra:null})},i:(a,b,c,d,e,f)=>{var g=Tc(b,c);a=V(a);a=Uc(a);e=X(d,e); -xc(a,function(){Qc(`Cannot call ${a} due to unbound types`,g)},b-1);lc([],g,h=>{Lc(a,Sc(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},j:(a,b,c,d,e)=>{b=V(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}U(a,{name:b,Ia:f,Ma:(h,k)=>k,Wa:nc(b,c,0!==d),Ra:null})},e:(a,b,c)=>{function d(f){return new e(r.buffer,C[f+4>>2],C[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=V(c);U(a,{name:c, -Ia:d,Wa:d},{kc:!0})},h:a=>{U(a,bd)},oa:(a,b)=>{b=V(b);U(a,{name:b,Ia(c){var d=bc(c+4,C[c>>2],!0);Oc(c);return d},Ma(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new W("Cannot pass non-string to std::string");var f=e?Va(d):d.length;var g=Dd(4+f+1),h=g+4;C[g>>2]=f;e?N(d,z,h,f+1):z.set(d,h);null!==c&&c.push(Oc,g);return g},Wa:gc,Ra(c){Oc(c)}})},t:(a,b,c)=>{c=V(c);if(2===b){var d=dd;var e=ed;var f=fd}else d= -gd,e=hd,f=jd;U(a,{name:c,Ia:g=>{var h=d(g+4,C[g>>2]*b,!0);Oc(g);return h},Ma:(g,h)=>{if("string"!=typeof h)throw new W(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),n=Dd(4+k+b);C[n>>2]=k/b;e(h,n+4,k+b);null!==g&&g.push(Oc,n);return n},Wa:gc,Ra(g){Oc(g)}})},g:(a,b,c,d,e,f)=>{ec[a]={name:V(b),Hb:X(c,d),Va:X(e,f),Rb:[]}},b:(a,b,c,d,e,f,g,h,k,n)=>{ec[a].Rb.push({dc:V(b),ic:c,hb:X(d,e),hc:f,Bc:g,Ac:X(h,k),Cc:n})},E:(a,b)=>{b=V(b);U(a,{sc:!0,name:b,Ia:()=>{},Ma:()=>{}})},N:()=>{Ga=!1;kd= -0},J:()=>{throw Infinity;},d:(a,b,c)=>{var [d,...e]=nd(a,b),f=d.Ma.bind(d),g=e.map(k=>k.Wa.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return md(uc(b,(k,n,p,l)=>{for(var t=0,y=0;y>2]=Ec(k));return u}))},ha:Yc,ka:a=>{if(!a)return Ec(globalThis);a=pd(a);return Ec(globalThis[a])}, -q:(a,b)=>{a=Zc(a);b=Zc(b);return Ec(a[b])},K:a=>{9ld[a](b,c,d,e),ma:()=>Ec([]),la:a=>Ec(pd(a)),F:a=>{var b=Zc(a);fc(b);Yc(a)},T:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(qd(a.getFullYear())?rd:sd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]= --(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},U:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(qd(b.getFullYear())?rd:sd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},S:function(a,b,c,d,e,f){f=-9007199254740992>f||9007199254740992{td[a]&&(clearTimeout(td[a].id),delete td[a]);if(!b)return 0;var c=setTimeout(()=>{delete td[a];wd(()=>Md(a,performance.now()))},b);td[a]={id:c,Qc:b};return 0},V:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();C[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/ -60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},s:(a,b,c)=>{xd.length=0;for(var d;d=z[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;xd.push(112==d?C[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]:ra[c>>3]);c+=e?8:4}return Ld[a](...xd)},da:()=>Date.now(),fa:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.cb[a]=void 0; -c.Sb.push(a);0b.readyState&&b.abort()}},R:()=>2147483648,n:()=>performance.now(),ia:()=>!ba,Q:a=>{var b=z.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},ga:function(a,b,c,d,e){function f(D){t?D():wd(D)}var g=a+108,h=C[g+36>>2],k=C[g+40>>2],n=C[g+44>>2],p=C[g+48>>2],l=C[g+52>> -2],t=!!(l&64),y=D=>{f(()=>{h?L(h)(D):b?.(D)})},u=D=>{f(()=>{n?L(n)(D):d?.(D)})},v=D=>{f(()=>{k?L(k)(D):c?.(D)})},w=D=>{f(()=>{p?L(p)(D):e?.(D)})},E=D=>{Cd(D,y,v,u,w)},F=(D,ua)=>{Fd(D,ua.response,Ja=>{f(()=>{h?L(h)(Ja):b?.(Ja)})},Ja=>{f(()=>{h?L(h)(Ja):b?.(Ja)})})},J=D=>{Cd(D,F,v,u,w)},x=bc(g+0),I=!!(l&16),H=!!(l&4);l=!!(l&32);if("EM_IDB_STORE"===x)E=C[g+84>>2],Fd(a,z.slice(E,E+C[g+88>>2]),y,v);else if("EM_IDB_DELETE"===x)Hd(a,y,v);else if(I){if(l)return 0;Cd(a,H?F:y,v,u,w)}else Gd(a,y,l?v:H?J:E); -return a},Y:(a,b)=>{var c=0,d=0,e;for(e of Kd()){var f=b+c;C[a+d>>2]=f;c+=N(e,z,f,Infinity)+1;d+=4}return 0},Z:(a,b)=>{var c=Kd();C[a>>2]=c.length;a=0;for(var d of c)a+=Va(d)+1;C[b>>2]=a;return 0},A:a=>{ma=a;vd(a)},p:function(a){try{var b=R(a);Tb(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ja}},x:function(a,b,c,d){try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],k=C[a+4>>2];a+=8;var n=e,p=h,l=k,t=f,y=r;if(0>l||0>t)throw new O(28);if(null===n.ab)throw new O(8); -if(1===(n.flags&2097155))throw new O(8);if(Q(n.node.mode))throw new O(31);if(!n.Aa.read)throw new O(28);var u="undefined"!=typeof t;if(!u)t=n.position;else if(!n.seekable)throw new O(70);var v=n.Aa.read(n,y,p,l,t);u||(n.position+=v);var w=v;if(0>w){var E=-1;break a}b+=w;if(w>2]=E;return 0}catch(F){if("undefined"==typeof T||"ErrnoError"!==F.name)throw F;return F.Ja}},X:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.Cb&&0===b&&0===c&&(e.Cb=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.Ja}},o:function(a,b,c,d){try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],k=C[a+4>>2];a+=8;var n=Vb(e,r,h,k,f);if(0>n){var p=-1;break a}b+=n;if(n>2]=p;return 0}catch(l){if("undefined"==typeof T||"ErrnoError"!==l.name)throw l;return l.Ja}},ja:function(){var a=stackTrace(),b=Va(a)+ -1,c=Dd(b);N(a,z,c,b);return c},v:Qd,u:Rd,k:Sd,G:Td,w:Ud,I:Vd,H:Wd,a:wa,M:vd,P:function(a,b){try{return Qa(z.subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ja}}};function Sd(a,b,c,d){var e=Pd();try{return L(a)(b,c,d)}catch(f){Od(e);if(f!==f+0)throw f;Nd(1,0)}}function Vd(a,b,c){var d=Pd();try{L(a)(b,c)}catch(e){Od(d);if(e!==e+0)throw e;Nd(1,0)}}function Ud(a,b){var c=Pd();try{L(a)(b)}catch(d){Od(c);if(d!==d+0)throw d;Nd(1,0)}} -function Wd(a,b,c,d){var e=Pd();try{L(a)(b,c,d)}catch(f){Od(e);if(f!==f+0)throw f;Nd(1,0)}}function Qd(a,b){var c=Pd();try{return L(a)(b)}catch(d){Od(c);if(d!==d+0)throw d;Nd(1,0)}}function Rd(a,b,c){var d=Pd();try{return L(a)(b,c)}catch(e){Od(d);if(e!==e+0)throw e;Nd(1,0)}}function Td(a,b,c,d,e){var f=Pd();try{return L(a)(b,c,d,e)}catch(g){Od(f);if(g!==g+0)throw g;Nd(1,0)}} -function Yd(){function a(){m.calledRun=!0;if(!la){ta=!0;if(!m.noFSInit&&!vb){var b,c;vb=!0;b??=m.stdin;c??=m.stdout;d??=m.stderr;b?Zb("/dev","stdin",b):Ob("/dev/tty","/dev/stdin");c?Zb("/dev","stdout",null,c):Ob("/dev/tty","/dev/stdout");d?Zb("/dev","stderr",null,d):Ob("/dev/tty1","/dev/stderr");Sb("/dev/stdin",0);Sb("/dev/stdout",1);Sb("/dev/stderr",1)}Zd.pa();wb=!1;na?.(m);m.onRuntimeInitialized?.();if(m.postRun)for("function"==typeof m.postRun&&(m.postRun=[m.postRun]);m.postRun.length;){var d= -m.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>m.setStatus(""),1);a()},1)):a()}}var Zd; -Zd=await (async function(){function a(c){c=Zd=c.exports;Nc=c.qa;Dd=c.ra;Oc=c.sa;cb=c.ua;Md=c.va;Nd=c.wa;Od=c.xa;Pd=c.ya;Ia=c.ta;return Zd}var b={a:Xd};if(m.instantiateWasm)return new Promise(c=>{m.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=m.locateFile?m.locateFile?m.locateFile("BlinkIdVerifyModule.wasm",fa):fa+"BlinkIdVerifyModule.wasm":(new URL("BlinkIdVerifyModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Yd(); -moduleRtn=ta?m:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.wasm b/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.wasm deleted file mode 100755 index d7e27dd9..00000000 Binary files a/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.wasm and /dev/null differ diff --git a/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.data b/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.data similarity index 61% rename from packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.data rename to packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.data index 2970575b..7b80534b 100644 Binary files a/packages/blinkid-verify-wasm/dist/advanced-threads/BlinkIdVerifyModule.data and b/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.data differ diff --git a/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.js b/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.js new file mode 100644 index 00000000..86907b0b --- /dev/null +++ b/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.js @@ -0,0 +1,154 @@ +async function createModule(moduleArg={}){var moduleRtn;var m=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,q=ba&&self.name?.startsWith("em-pthread");let ca;(ca=m).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);m.expectedDataFileDownloads++; +(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof q&&q||a||async function(b){async function c(k,l){var n;(n=m).dataFileDownloads??(n.dataFileDownloads={});try{var p=await fetch(k)}catch(B){throw Error(`Network Error: ${k}`,{e:B});}if(!p.ok)throw Error(`${p.status}: ${p.url}`);n=[];l=Number(p.headers.get("Content-Length")??l);let r=0;m.setStatus?.("Downloading data...");for(p=p.body.getReader();;){var {done:y,value:z}=await p.read();if(y)break; +n.push(z);r+=z.length;m.dataFileDownloads[k]={loaded:r,total:l};let B=0,H=0;for(var A of Object.values(m.dataFileDownloads))B+=A.loaded,H+=A.total;m.setStatus?.(`Downloading data... (${B}/${H})`)}k=new Uint8Array(n.map(B=>B.length).reduce((B,H)=>B+H,0));A=0;for(const B of n)k.set(B,A),A+=B.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkid-verify",!0,!0);for(var l of b.files)k.addRunDependency(`fp ${l.filename}`);k.addRunDependency("datafile_bazel-out/wasm-opt-ST-0d6aff9eb025/bin/packages/blinkid-verify-wasm/binding/simd-threads/BlinkIdVerifyModule.data"); +k.preloadResults??(k.preloadResults={});k.preloadResults["bazel-out/wasm-opt-ST-0d6aff9eb025/bin/packages/blinkid-verify-wasm/binding/simd-threads/BlinkIdVerifyModule.data"]={Ne:!1};h||=await g;(async function(n){if(!n)throw Error("Loading data file failed.");if(n.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");n=new Uint8Array(n);for(var p of b.files){var r=p.filename;k.FS_createDataFile(r,null,n.subarray(p.start,p.end),!0,!0,!0);k.removeRunDependency(`fp ${r}`)}k.removeRunDependency("datafile_bazel-out/wasm-opt-ST-0d6aff9eb025/bin/packages/blinkid-verify-wasm/binding/simd-threads/BlinkIdVerifyModule.data")})(h)} +"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=m.locateFile?.("BlinkIdVerifyModule.data","")??"BlinkIdVerifyModule.data",f=b.remote_package_size,g,h=m.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(m.calledRun)d(m);else{let k;((k=m).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid-verify/Model_02957b97.strop", +start:0,end:103198},{filename:"/microblink/blinkid-verify/Model_0574da24.strop",start:103198,end:490892},{filename:"/microblink/blinkid-verify/Model_08a8e22c.strop",start:490892,end:1925153},{filename:"/microblink/blinkid-verify/Model_11a41e0f.strop",start:1925153,end:1928888},{filename:"/microblink/blinkid-verify/Model_1f2ae93e.strop",start:1928888,end:1982134},{filename:"/microblink/blinkid-verify/Model_3a69425d.strop",start:1982134,end:2306621},{filename:"/microblink/blinkid-verify/Model_44dff8bf.strop", +start:2306621,end:2431696},{filename:"/microblink/blinkid-verify/Model_48e189e2.strop",start:2431696,end:2755707},{filename:"/microblink/blinkid-verify/Model_49210872.strop",start:2755707,end:7393907},{filename:"/microblink/blinkid-verify/Model_53f443db.strop",start:7393907,end:7832083},{filename:"/microblink/blinkid-verify/Model_649c20b5.strop",start:7832083,end:8858938},{filename:"/microblink/blinkid-verify/Model_6683cb47.strop",start:8858938,end:8934340},{filename:"/microblink/blinkid-verify/Model_7b97ad87.strop", +start:8934340,end:8960638},{filename:"/microblink/blinkid-verify/Model_7f5a4bc5.strop",start:8960638,end:8967134},{filename:"/microblink/blinkid-verify/Model_84fd5736.strop",start:8967134,end:10212125},{filename:"/microblink/blinkid-verify/Model_a54429ec.strop",start:10212125,end:10286570},{filename:"/microblink/blinkid-verify/Model_a91e7e31.strop",start:10286570,end:10555291},{filename:"/microblink/blinkid-verify/Model_a958c31c.strop",start:10555291,end:10899747},{filename:"/microblink/blinkid-verify/Model_ad5b6c8e.strop", +start:10899747,end:11562800},{filename:"/microblink/blinkid-verify/Model_b18ce029.strop",start:11562800,end:13222641},{filename:"/microblink/blinkid-verify/Model_b5120a89.strop",start:13222641,end:13306090},{filename:"/microblink/blinkid-verify/Model_de3c93f5.strop",start:13306090,end:13312539},{filename:"/microblink/blinkid-verify/ccc_lookup_table.zzip",start:13312539,end:13333008},{filename:"/microblink/blinkid-verify/knowledge-database_0.1.zzip",start:13333008,end:13409266},{filename:"/microblink/blinkid-verify/serialized_embedder_db_1.12.bin", +start:13409266,end:16686927},{filename:"/microblink/blinkid-verify/serialized_embedder_db_1.14.bin",start:16686927,end:20518235},{filename:"/microblink/blinkid-verify/template-database_0.1.zzip",start:20518235,end:20519559}],remote_package_size:20519559})})();m="undefined"!==typeof m?m:{}; +(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!m.locateFile&&(m.locateFile=function(d,e){return"BlinkIdVerifyModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; +if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),t=console.error.bind(console),ka,la,ma=!1,na;function u(){oa.buffer!=v.buffer&&pa()}var qa,ra,sa; +if(q){var ta=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.Oc;if("load"===d){let e=[];self.onmessage=f=>e.push(f);sa=()=>{postMessage({Oc:"loaded"});for(let f of e)a(f);self.onmessage=a};for(const f of c.fe)if(!m[f]||m[f].proxy)m[f]=(...g)=>{postMessage({Oc:"callHandler",ee:f,Td:g})},"print"==f&&(ja=m[f]),"printErr"==f&&(t=m[f]);oa=c.Ee;pa();la=c.Fe;ua();va()}else if("run"===d){wa(c.Kc);xa(c.Kc,0,0,1,0,0);ya();za(c.Kc);ta||(Aa(),ta=!0);try{Ba(c.Be,c.sd)}catch(e){if("unwind"!= +e)throw e;}}else"setimmediate"!==c.target&&("checkMailbox"===d?ta&&Ca():d&&(t(`worker: received unknown command ${d}`),t(c)))}catch(e){throw Da(),e;}}self.onmessage=a}var v,w,Ea,Fa,x,C,Ga,Ha,D,Ia,Ja=!1;function pa(){var a=oa.buffer;v=new Int8Array(a);Ea=new Int16Array(a);w=new Uint8Array(a);Fa=new Uint16Array(a);x=new Int32Array(a);C=new Uint32Array(a);Ga=new Float32Array(a);Ha=new Float64Array(a);D=new BigInt64Array(a);Ia=new BigUint64Array(a)}var oa; +function Ka(){Ja=!0;if(q)sa();else{if(!m.noFSInit&&!La){var a,b,c;La=!0;a??=m.stdin;b??=m.stdout;c??=m.stderr;a?E("/dev","stdin",a):Ma("/dev/tty","/dev/stdin");b?E("/dev","stdout",null,b):Ma("/dev/tty","/dev/stdout");c?E("/dev","stderr",null,c):Ma("/dev/tty1","/dev/stderr");Oa("/dev/stdin",0);Oa("/dev/stdout",1);Oa("/dev/stderr",1)}Pa.Pb();Qa=!1}} +function F(a){m.onAbort?.(a);a="Aborted("+a+")";t(a);ma=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ra?.(a);throw a;}var Ra;async function Sa(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==Ra&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a} +async function Ta(a,b){try{var c=await Sa(a);return await WebAssembly.instantiate(c,b)}catch(d){t(`failed to asynchronously prepare wasm: ${d}`),F(d)}}async function Ua(a){var b=Ra;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){t(`wasm streaming compile failed: ${d}`),t("falling back to ArrayBuffer instantiation")}return Ta(b,a)} +function Va(){Wa={Na:Xa,t:Ya,D:Za,b:$a,i:ab,n:bb,ia:cb,w:db,qa:eb,Wa:fb,e:gb,va:hb,lb:ib,mb:jb,jb:kb,ib:lb,ua:mb,kb:nb,qb:ob,E:pb,xa:qb,tb:rb,na:sb,W:tb,X:ub,rb:vb,wa:wb,M:xb,S:yb,C:zb,J:Ab,sb:Bb,ha:Cb,F:Db,x:Eb,ub:Fb,eb:Gb,Ua:Hb,Xa:Ib,Pa:Jb,ra:Kb,db:za,ob:Lb,Lb:Mb,z:Nb,Ma:Ob,wb:Pb,ka:Qb,La:Rb,y:Sb,yb:Tb,xb:Ub,Ta:Vb,_a:Wb,$a:Xb,Ya:Yb,Za:Zb,Qa:$b,ab:ac,Ka:bc,bb:cc,pa:dc,sa:ec,pb:fc,nb:gc,Va:hc,U:ic,ya:jc,Sa:kc,zb:lc,gb:mc,hb:nc,ja:oc,ga:pc,fb:qc,ta:rc,cb:sc,fa:tc,vb:uc,da:vc,Fa:wc,H:xc,za:yc,s:zc, +Ga:Ac,h:Bc,Ja:Cc,c:Dc,ea:Ec,l:Fc,O:Gc,Ea:Hc,Ca:Ic,k:Jc,Bb:Kc,v:Lc,oa:Mc,u:Nc,Ha:Oc,K:Pc,R:Qc,Q:Rc,$:Sc,Mb:Tc,Z:Uc,Ia:Vc,_:Wc,Cb:Xc,V:Yc,m:Zc,Db:$c,o:ad,ba:bd,Aa:cd,ca:dd,f:ed,Fb:fd,P:gd,g:hd,aa:jd,A:kd,N:ld,Nb:md,ma:nd,j:od,T:pd,la:qd,Eb:rd,Hb:sd,Ob:td,Ib:ud,d:vd,r:wd,Da:xd,Jb:yd,q:zd,Gb:Ad,p:Bd,B:Cd,Kb:Dd,L:Ed,Ba:Fd,I:Gd,Y:Hd,G:Id,a:oa,Oa:Jd,Ra:Kd,Ab:Ld};return{a:Wa}} +async function ua(){function a(d,e){Pa=d.exports;Md.push(Pa.Xb);d=Pa;Nd=d.Qb;Od=d.Rb;Pd=m._mbPingRequestFinished=d.Sb;Qd=d.Tb;Rd=d.Ub;Sd=d.Vb;Aa=d.Wb;Td=d.Yb;xa=d._b;Da=d.$b;Ud=d.ac;Vd=d.bc;Wd=d.cc;Xd=d.dc;Yd=d.ec;G=d.fc;Zd=d.gc;$d=d.hc;J=d.ic;ae=d.jc;K=d.kc;be=d.lc;ce=d.mc;de=d.nc;ee=d.Zb;la=e;return Pa}var b=Va();if(m.instantiateWasm)return new Promise(d=>{m.instantiateWasm(b,(e,f)=>{d(a(e,f))})});if(q){var c=new WebAssembly.Instance(la,Va());return a(c,la)}Ra??=m.locateFile?m.locateFile?m.locateFile("BlinkIdVerifyModule.wasm", +fa):fa+"BlinkIdVerifyModule.wasm":(new URL("BlinkIdVerifyModule.wasm",import.meta.url)).href;return function(d){return a(d.instance,d.module)}(await Ua(b))}class fe{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} +var ge=a=>{a.terminate();a.onmessage=()=>{}},he=a=>{for(;0{je--;m.monitorRunDependencies?.(je);if(0==je&&ke){var a=ke;ke=null;a()}},me=()=>{je++;m.monitorRunDependencies?.(je)},se=a=>{0==ne.length&&(oe(),pe(ne[0]));var b=ne.pop();if(!b)return 6;qe.push(b);re[a.Kc]=b;b.Kc=a.Kc;b.postMessage({Oc:"run",Be:a.Ae,sd:a.sd,Kc:a.Kc},a.Sd);return 0},te=0,L=(a,b,...c)=>{for(var d=2*c.length,e=K(),f=ae(8*d),g=f>>3,h=0;h{na=a;if(q)throw ve(a),"unwind";Jd(a)},ne=[],qe=[],Md=[],re={}; +function we(){for(var a=Math.min(navigator.hardwareConcurrency,16);a--;)oe();ie.push(async()=>{var b=xe();me("loading-workers");await b;le("loading-workers")})}var ye=a=>{var b=a.Kc;delete re[b];ne.push(a);qe.splice(qe.indexOf(a),1);a.Kc=0;Vd(b)};function ya(){Md.forEach(a=>a())} +var pe=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.Oc;if(g.pd&&g.pd!=Od()){var h=re[g.pd];h?h.postMessage(g,g.Sd):t(`Internal error! Worker sent a message "${f}" to target pthread ${g.pd}, but that thread no longer exists!`)}else if("checkMailbox"===f)Ca();else if("spawnThread"===f)se(g);else if("cleanupThread"===f)ze(()=>{ye(re[g.Ce])});else if("loaded"===f)a.loaded=!0,b(a);else if("setimmediate"===g.target)a.postMessage(g);else if("callHandler"===f)m[g.ee](...g.Td);else f&&t(`worker sent an unknown command ${f}`)}; +a.onerror=f=>{t(`${"worker sent an error!"} ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onExit","onAbort","print","printErr"],e;for(e of d)m.propertyIsEnumerable(e)&&c.push(e);a.postMessage({Oc:"load",fe:c,Ee:oa,Fe:la})});async function xe(){if(!q)return Promise.all(ne.map(pe))} +function oe(){if(m.mainScriptUrlOrBlob){var a=m.mainScriptUrlOrBlob;"string"!=typeof a&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkIdVerifyModule",import.meta.url),{type:"module",name:"em-pthread"});ne.push(a)}var Ae=[];function wa(a){var b=(u(),C)[a+52>>2];a=(u(),C)[a+56>>2];$d(b,b-a);J(b)} +var Be=[],M=a=>{var b=Be[a];b||(Be[a]=b=ee.get(a));return b},Ba=(a,b)=>{ue=te=0;a=M(a)(b);ue||0M(a)(b),Ce=[],De=0,Ya=a=>{var b=new Ee(a);if(0==(u(),v)[b.qc+12]){var c=1;(u(),v)[b.qc+12]=c;De--}c=0;(u(),v)[b.qc+13]=c;Ce.push(b);ce(a);return Rd(a)},Fe=0,Za=()=>{G(0,0);var a=Ce.pop();be(a.Kd);Fe=0};function Ge(a,b){(u(),C)[a.qc+16>>2]=b}class Ee{constructor(a){this.Kd=a;this.qc=a-24}} +var He=a=>{var b=Fe;if(!b)return Zd(0),0;var c=new Ee(b);Ge(c,b);var d=(u(),C)[c.qc+4>>2];if(!d)return Zd(0),b;for(var e of a){if(0===e||e===d)break;if(de(e,d,c.qc+16))return Zd(e),b}Zd(d);return b},$a=()=>He([]),ab=a=>He([a]),bb=(a,b)=>He([a,b]),cb=()=>{var a=Ce.pop();a||F("no exception to throw");var b=a.Kd;if(0==(u(),v)[a.qc+13]){Ce.push(a);var c=1;(u(),v)[a.qc+13]=c;c=0;(u(),v)[a.qc+12]=c;De++}Fe=b;throw Fe;},db=(a,b,c)=>{var d=new Ee(a);Ge(d,0);(u(),C)[d.qc+4>>2]=b;(u(),C)[d.qc+8>>2]=c;Fe=a; +De++;throw Fe;},eb=()=>De;function Ie(a,b,c,d){return q?L(2,1,a,b,c,d):fb(a,b,c,d)} +var jc=()=>!!globalThis.SharedArrayBuffer,fb=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(q&&0===e.length)return Ie(a,b,c,d);a={Ae:c,Kc:a,sd:d,Sd:e};return q?(a.Oc="spawnThread",postMessage(a,e),0):se(a)},gb=a=>{Fe||=a;throw Fe;},P=()=>{var a=(u(),x)[+Je>>2];Je+=4;return a},Ke=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Le=a=>{var b="/"===a.charAt(0),c= +"/"===a.slice(-1);(a=Ke(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},Me=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Ne=()=>a=>a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),Oe=a=>{(Oe=Ne())(a)},Pe=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings"); +if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ke(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},Qe=globalThis.TextDecoder&&new TextDecoder,Re=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},Se=(a,b=0,c,d)=>{c=Re(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},Te=[],Ue=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Ve=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>> +6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},We=a=>{var b=Array(Ue(a)+1);a=Ve(a,b,0,b.length);b.length=a;return b},Xe=[];function Ye(a,b){Xe[a]={input:[],output:[],Qc:b};Ze(a,$e)} +var $e={open(a){var b=Xe[a.node.bd];if(!b)throw new Q(43);a.uc=b;a.seekable=!1},close(a){a.uc.Qc.gd(a.uc)},gd(a){a.uc.Qc.gd(a.uc)},read(a,b,c,d){if(!a.uc||!a.uc.Qc.Md)throw new Q(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=Td(65536,a);b&&(u(),w).fill(0,b,b+a);return b},R={Jc:null,Pc(){return R.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new Q(63);R.Jc||(R.Jc={dir:{node:{Hc:R.sc.Hc,Nc:R.sc.Nc,Yc:R.sc.Yc,kd:R.sc.kd,Qd:R.sc.Qd,qd:R.sc.qd,Rd:R.sc.Rd,Ad:R.sc.Ad,od:R.sc.od},stream:{Ic:R.pc.Ic}}, +file:{node:{Hc:R.sc.Hc,Nc:R.sc.Nc},stream:{Ic:R.pc.Ic,read:R.pc.read,write:R.pc.write,Zc:R.pc.Zc,ld:R.pc.ld}},link:{node:{Hc:R.sc.Hc,Nc:R.sc.Nc,cd:R.sc.cd},stream:{}},Gd:{node:{Hc:R.sc.Hc,Nc:R.sc.Nc},stream:df}});c=ef(a,b,c,d);S(c.mode)?(c.sc=R.Jc.dir.node,c.pc=R.Jc.dir.stream,c.rc={}):32768===(c.mode&61440)?(c.sc=R.Jc.file.node,c.pc=R.Jc.file.stream,c.xc=0,c.rc=null):40960===(c.mode&61440)?(c.sc=R.Jc.link.node,c.pc=R.Jc.link.stream):8192===(c.mode&61440)&&(c.sc=R.Jc.Gd.node,c.pc=R.Jc.Gd.stream); +c.Rc=c.Ec=c.Dc=Date.now();a&&(a.rc[b]=c,a.Rc=a.Ec=a.Dc=c.Rc);return c},Oe(a){return a.rc?a.rc.subarray?a.rc.subarray(0,a.xc):new Uint8Array(a.rc):new Uint8Array(0)},sc:{Hc(a){var b={};b.Xd=8192===(a.mode&61440)?a.id:1;b.he=a.id;b.mode=a.mode;b.qe=1;b.uid=0;b.de=0;b.bd=a.bd;b.size=S(a.mode)?4096:32768===(a.mode&61440)?a.xc:40960===(a.mode&61440)?a.link.length:0;b.Rc=new Date(a.Rc);b.Ec=new Date(a.Ec);b.Dc=new Date(a.Dc);b.Ud=4096;b.Vd=Math.ceil(b.size/b.Ud);return b},Nc(a,b){for(var c of["mode","atime", +"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.xc!=b&&(0==b?(a.rc=null,a.xc=0):(c=a.rc,a.rc=new Uint8Array(b),c&&a.rc.set(c.subarray(0,Math.min(b,a.xc))),a.xc=b)))},Yc(){R.td||(R.td=new Q(44),R.td.stack="");throw R.td;},kd(a,b,c,d){return R.createNode(a,b,c,d)},Qd(a,b,c){try{var d=ff(b,c)}catch(f){}if(d){if(S(a.mode))for(var e in d.rc)throw new Q(55);gf(d)}delete a.parent.rc[a.name];b.rc[c]=a;a.name=c;b.Dc=b.Ec=a.parent.Dc=a.parent.Ec=Date.now()},qd(a, +b){delete a.rc[b];a.Dc=a.Ec=Date.now()},Rd(a,b){var c=ff(a,b),d;for(d in c.rc)throw new Q(55);delete a.rc[b];a.Dc=a.Ec=Date.now()},Ad(a){return[".","..",...Object.keys(a.rc)]},od(a,b,c){a=R.createNode(a,b,41471,0);a.link=c;return a},cd(a){if(40960!==(a.mode&61440))throw new Q(28);return a.link}},pc:{read(a,b,c,d,e){var f=a.node.rc;if(e>=a.node.xc)return 0;a=Math.min(a.node.xc-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.rc,a.rc=new Uint8Array(f),0b)throw new Q(28);return b},Zc(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new Q(43);a=a.node.rc;if(e&2||!a||a.buffer!==(u(),v).buffer){d=!0;e=cf(b);if(!e)throw new Q(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},jf=async a=>{a=await ha(a);return new Uint8Array(a)},kf=[],lf=async(a,b)=>{if("undefined"!=typeof Browser){var c=Browser;Ge(c,0);(u(),C)[c.qc+4>>2]=void 0;(u(),C)[c.qc+8>>2]=void 0}for(var d of kf)if(d.canHandle(b))return d.handle(a,b);return a},mf=null,nf={},of=[],pf=1,qf=null,La=!1,Qa=!0,rf={},Q=class{name="ErrnoError";constructor(a){this.wc=a}},sf=class{nd={};node=null;get object(){return this.node}set object(a){this.node= +a}get flags(){return this.nd.flags}set flags(a){this.nd.flags=a}get position(){return this.nd.position}set position(a){this.nd.position=a}},tf=class{sc={};pc={};md=365;rd=146;$c=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Pc=a.Pc;this.id=pf++;this.name=b;this.mode=c;this.bd=d;this.Rc=this.Ec=this.Dc=Date.now()}get read(){return(this.mode&this.md)===this.md}set read(a){a?this.mode|=this.md:this.mode&=~this.md}get write(){return(this.mode&this.rd)===this.rd}set write(a){a?this.mode|=this.rd: +this.mode&=~this.rd}get ne(){return S(this.mode)}get me(){return 8192===(this.mode&61440)}}; +function uf(a,b={}){if(!a)throw new Q(44);b.ud??(b.ud=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=mf,e="/",f=0;f>>0)%qf.length} +function gf(a){var b=wf(a.parent.id,a.name);if(qf[b]===a)qf[b]=a.Uc;else for(b=qf[b];b;){if(b.Uc===a){b.Uc=a.Uc;break}b=b.Uc}}function ff(a,b){var c=S(a.mode)?(c=xf(a,"x"))?c:a.sc.Yc?0:2:54;if(c)throw new Q(c);for(c=qf[wf(a.id,b)];c;c=c.Uc){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.sc.Yc(a,b)}function ef(a,b,c,d){a=new tf(a,b,c,d);b=wf(a.parent.id,a.name);a.Uc=qf[b];return qf[b]=a}function S(a){return 16384===(a&61440)} +function yf(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function xf(a,b){if(Qa)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function zf(a,b){if(!S(a.mode))return 54;try{return ff(a,b),20}catch(c){}return xf(a,"wx")}function Af(a){if(!a)throw new Q(63);return a}function T(a){a=of[a];if(!a)throw new Q(8);return a} +function Bf(a,b=-1){a=Object.assign(new sf,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!of[b])break a;throw new Q(33);}a.Sc=b;return of[b]=a}function Cf(a,b=-1){a=Bf(a,b);a.pc?.Me?.(a);return a}function Df(a,b){var c=null?.pc.Nc,d=c?null:a;c??=a.sc.Nc;Af(c);c(d,b)}var df={open(a){a.pc=nf[a.node.bd].pc;a.pc.open?.(a)},Ic(){throw new Q(70);}};function Ze(a,b){nf[a]={pc:b}} +function Ef(a,b){var c="/"===b;if(c&&mf)throw new Q(10);if(!c&&b){var d=uf(b,{ud:!1});b=d.path;d=d.node;if(d.$c)throw new Q(10);if(!S(d.mode))throw new Q(54);}b={type:a,Pe:{},Od:b,pe:[]};a=a.Pc(b);a.Pc=b;b.root=a;c?mf=a:d&&(d.$c=b,d.Pc&&d.Pc.pe.push(b))}function Ff(a,b,c){var d=uf(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new Q(28);if("."===a||".."===a)throw new Q(20);var e=zf(d,a);if(e)throw new Q(e);if(!d.sc.kd)throw new Q(63);return d.sc.kd(d,a,b,c)} +function Gf(a,b=438){return Ff(a,b&4095|32768,0)}function U(a){return Ff(a,16895,0)}function Hf(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Ff(a,b|8192,c)}function Ma(a,b){if(!Pe(a))throw new Q(44);var c=uf(b,{parent:!0}).node;if(!c)throw new Q(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=zf(c,b);if(d)throw new Q(d);if(!c.sc.od)throw new Q(63);c.sc.od(c,b,a)} +function If(a){var b=uf(a,{parent:!0}).node;if(!b)throw new Q(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=ff(b,a);a:{try{var d=ff(b,a)}catch(f){d=f.wc;break a}var e=xf(b,"wx");d=e?e:S(d.mode)?31:0}if(d)throw new Q(d);if(!b.sc.qd)throw new Q(63);if(c.$c)throw new Q(10);b.sc.qd(b,a);gf(c)}function Jf(a,b){a=uf(a,{fd:!b}).node;return Af(a.sc.Hc)(a)}function Kf(a,b){a="string"==typeof a?uf(a,{fd:!0}).node:a;Df(a,{mode:b&4095|a.mode&-4096,Dc:Date.now(),Le:void 0})} +function Oa(a,b,c=438){if(""===a)throw new Q(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=uf(a,{fd:!(b&131072),re:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new Q(20);}else{if(e)throw new Q(31);d=Ff(a,c|511,0);f=!0}if(!d)throw new Q(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!S(d.mode))throw new Q(54); +if(!f&&(e=d?40960===(d.mode&61440)?32:S(d.mode)&&("r"!==yf(b)||b&576)?31:xf(d,yf(b)):44))throw new Q(e);if(b&512&&!f){e=d;e="string"==typeof e?uf(e,{fd:!0}).node:e;if(S(e.mode))throw new Q(31);if(32768!==(e.mode&61440))throw new Q(28);var g=xf(e,"w");if(g)throw new Q(g);Df(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Bf({node:d,path:vf(d),flags:b,seekable:!0,position:0,pc:d.pc,De:[],error:!1});e.pc.open&&e.pc.open(e);f&&Kf(d,c&511);!m.logReadFiles||b&1||a in rf||(rf[a]=1);return e} +function Lf(a){if(null===a.Sc)throw new Q(8);a.vd&&(a.vd=null);try{a.pc.close&&a.pc.close(a)}catch(b){throw b;}finally{of[a.Sc]=null}a.Sc=null}function Mf(a,b,c){if(null===a.Sc)throw new Q(8);if(!a.seekable||!a.pc.Ic)throw new Q(70);if(0!=c&&1!=c&&2!=c)throw new Q(28);a.position=a.pc.Ic(a,b,c);a.De=[]} +function Nf(a,b,c,d,e,f){if(0>d||0>e)throw new Q(28);if(null===a.Sc)throw new Q(8);if(0===(a.flags&2097155))throw new Q(8);if(S(a.node.mode))throw new Q(31);if(!a.pc.write)throw new Q(28);a.seekable&&a.flags&1024&&Mf(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new Q(70);b=a.pc.write(a,b,c,d,e,f);g||(a.position+=b);return b} +function Of(a,b){a="string"==typeof a?a:vf(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Le(a+"/"+c);try{U(d)}catch(e){if(20!=e.wc)throw e;}a=d}}return d}function Pf(a,b,c,d){a=Le(("string"==typeof a?a:vf(a))+"/"+b);return Gf(a,hf(c,d))} +function Qf(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:vf(a),g=b?Le(a+"/"+b):a);a=hf(d,e);g=Gf(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=p.length)return 0;z=Math.min(p.length-A,z);if(p.slice)for(var B=0;Bthis.length-1||0>p)){var r=p%this.Hd;return this.Xc(p/this.Hd|0)[r]}}ve(p){this.Xc=p}Fd(){var p=new XMLHttpRequest;p.open("HEAD",c,!1);p.send(null);200<=p.status&&300>p.status||304===p.status||F("Couldn't load "+c+". Status: "+p.status);var r=Number(p.getResponseHeader("Content-length")), +y,z=(y=p.getResponseHeader("Accept-Ranges"))&&"bytes"===y;p=(y=p.getResponseHeader("Content-Encoding"))&&"gzip"===y;var A=1048576;z||(A=r);var B=this;B.ve(H=>{var I=H*A,O=(H+1)*A-1;O=Math.min(O,r-1);if("undefined"==typeof B.ed[H]){var Na=B.ed;I>O&&F("invalid range ("+I+", "+O+") or no bytes requested!");O>r-1&&F("only "+r+" bytes available! programmer error!");var N=new XMLHttpRequest;N.open("GET",c,!1);r!==A&&N.setRequestHeader("Range","bytes="+I+"-"+O);N.responseType="arraybuffer";N.overrideMimeType&& +N.overrideMimeType("text/plain; charset=x-user-defined");N.send(null);200<=N.status&&300>N.status||304===N.status||F("Couldn't load "+c+". Status: "+N.status);I=void 0!==N.response?new Uint8Array(N.response||[]):We(N.responseText||"");Na[H]=I}"undefined"==typeof B.ed[H]&&F("doXHR failed!");return B.ed[H]});if(p||!r)A=r=1,A=r=this.Xc(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.Dd=r;this.Cd=A;this.xd=!0}get length(){this.xd||this.Fd();return this.Dd}get Hd(){this.xd|| +this.Fd();return this.Cd}}if(globalThis.XMLHttpRequest){ba||F("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var l=Pf(a,b,d,e);h?l.rc=h:k&&(l.rc=null,l.url=k);Object.defineProperties(l,{xc:{get:function(){return this.rc.length}}});var n={};Object.keys(l.pc).forEach(p=>{var r=l.pc[p];n[p]=(...y)=>{Rf(l);return r(...y)}});n.read=(p,r,y,z,A)=>{Rf(l);return f(p,r,y,z,A)};n.Zc=(p,r,y)=>{Rf(l); +var z=cf(r);if(!z)throw new Q(48);f(p,(u(),v),z,r,y);return{qc:z,Ed:!0}};l.pc=n;return l}var V={},Tf=(a,b,c)=>a?Se((u(),w),a,b,c):"";function Uf(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":T(a).path;if(0==b.length){if(!c)throw new Q(44);return a}return a+"/"+b} +function Vf(a,b){(u(),C)[a>>2]=b.Xd;(u(),C)[a+4>>2]=b.mode;(u(),C)[a+8>>2]=b.qe;(u(),C)[a+12>>2]=b.uid;(u(),C)[a+16>>2]=b.de;(u(),C)[a+20>>2]=b.bd;(u(),D)[a+24>>3]=BigInt(b.size);(u(),x)[a+32>>2]=4096;(u(),x)[a+36>>2]=b.Vd;var c=b.Rc.getTime(),d=b.Ec.getTime(),e=b.Dc.getTime();(u(),D)[a+40>>3]=BigInt(Math.floor(c/1E3));(u(),C)[a+48>>2]=c%1E3*1E6;(u(),D)[a+56>>3]=BigInt(Math.floor(d/1E3));(u(),C)[a+64>>2]=d%1E3*1E6;(u(),D)[a+72>>3]=BigInt(Math.floor(e/1E3));(u(),C)[a+80>>2]=e%1E3*1E6;(u(),D)[a+88>> +3]=BigInt(b.he);return 0}var Je=void 0;function hb(a,b,c){if(q)return L(3,1,a,b,c);Je=c;try{var d=T(a);switch(b){case 0:var e=P();if(0>e)break;for(;of[e];)e++;return Cf(d,e).Sc;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=P(),d.flags|=e,0;case 12:return e=P(),(u(),Ea)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof V||"ErrnoError"!==f.name)throw f;return-f.wc}} +function ib(a,b){if(q)return L(4,1,a,b);try{var c=T(a),d=c.node,e=c.pc.Hc;a=e?c:d;e??=d.sc.Hc;Af(e);var f=e(a);return Vf(b,f)}catch(g){if("undefined"==typeof V||"ErrnoError"!==g.name)throw g;return-g.wc}} +function jb(a,b,c){if(q)return L(5,1,a,b,c);Je=c;try{var d=T(a);switch(b){case 21509:return d.uc?0:-59;case 21505:if(!d.uc)return-59;if(d.uc.Qc.je){a=[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];var e=P();(u(),x)[e>>2]=25856;(u(),x)[e+4>>2]=5;(u(),x)[e+8>>2]=191;(u(),x)[e+12>>2]=35387;for(var f=0;32>f;f++)(u(),v)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.uc?0:-59;case 21506:case 21507:case 21508:if(!d.uc)return-59;if(d.uc.Qc.ke)for(e=P(),u(), +u(),u(),u(),a=[],f=0;32>f;f++)a.push((u(),v)[e+f+17]);return 0;case 21519:if(!d.uc)return-59;e=P();return(u(),x)[e>>2]=0;case 21520:return d.uc?-28:-59;case 21537:case 21531:e=P();if(!d.pc.ie)throw new Q(59);return d.pc.ie(d,b,e);case 21523:if(!d.uc)return-59;d.uc.Qc.le&&(f=[24,80],e=P(),(u(),Ea)[e>>1]=f[0],(u(),Ea)[e+2>>1]=f[1]);return 0;case 21524:return d.uc?0:-59;case 21515:return d.uc?0:-59;default:return-28}}catch(g){if("undefined"==typeof V||"ErrnoError"!==g.name)throw g;return-g.wc}} +function kb(a,b){if(q)return L(6,1,a,b);try{return a=Tf(a),Vf(b,Jf(a,!0))}catch(c){if("undefined"==typeof V||"ErrnoError"!==c.name)throw c;return-c.wc}}function lb(a,b,c,d){if(q)return L(7,1,a,b,c,d);try{b=Tf(b);var e=d&256;b=Uf(a,b,d&4096);return Vf(c,e?Jf(b,!0):Jf(b))}catch(f){if("undefined"==typeof V||"ErrnoError"!==f.name)throw f;return-f.wc}} +function mb(a,b,c,d){if(q)return L(8,1,a,b,c,d);Je=d;try{b=Tf(b);b=Uf(a,b);var e=d?P():0;return Oa(b,c,e).Sc}catch(f){if("undefined"==typeof V||"ErrnoError"!==f.name)throw f;return-f.wc}}function nb(a,b){if(q)return L(9,1,a,b);try{return a=Tf(a),Vf(b,Jf(a))}catch(c){if("undefined"==typeof V||"ErrnoError"!==c.name)throw c;return-c.wc}}var ob=()=>F(""),Wf={},Xf=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Yf(a){return this.yc((u(),C)[a>>2])} +var Zf={},$f={},ag={},bg=class extends Error{constructor(a){super(a);this.name="InternalError"}},cg=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new bg("Mismatched type converter count");for(var k=0;kag[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{$f.hasOwnProperty(h)?e[k]=$f[h]:(f.push(h),Zf.hasOwnProperty(h)||(Zf[h]=[]),Zf[h].push(()=>{e[k]=$f[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},pb=a=>{var b=Wf[a];delete Wf[a];var c= +b.zd,d=b.Lc,e=b.Ld,f=e.map(g=>g.ce).concat(e.map(g=>g.xe));cg([a],f,g=>{var h={};e.forEach((k,l)=>{var n=g[l],p=k.Xc,r=k.be,y=g[l+e.length],z=k.we,A=k.ye;h[k.Zd]={read:B=>n.yc(p(r,B)),write:(B,H)=>{var I=[];z(A,B,y.Bc(I,H));Xf(I)},optional:g[l].optional}});return[{name:b.name,yc:k=>{var l={},n;for(n in h)l[n]=h[n].read(k);d(k);return l},Bc:(k,l)=>{for(var n in h)if(!(n in l||h[n].optional))throw new TypeError(`Missing field: "${n}"`);var p=c();for(n in h)h[n].write(p,l[n]);null!==k&&k.push(d,p);return p}, +Mc:Yf,Gc:d}]})},X=a=>{for(var b="";;){var c=(u(),w)[a++];if(!c)return b;b+=String.fromCharCode(c)}},Y=class extends Error{constructor(a){super(a);this.name="BindingError"}};function dg(a,b,c={}){var d=b.name;if(!a)throw new Y(`type "${d}" must have a positive integer typeid pointer`);if($f.hasOwnProperty(a)){if(c.ge)return;throw new Y(`Cannot register type '${d}' twice`);}$f[a]=b;delete ag[a];Zf.hasOwnProperty(a)&&(b=Zf[a],delete Zf[a],b.forEach(e=>e()))}function W(a,b,c={}){return dg(a,b,c)} +var eg=(a,b,c)=>{switch(b){case 1:return c?d=>(u(),v)[d]:d=>(u(),w)[d];case 2:return c?d=>(u(),Ea)[d>>1]:d=>(u(),Fa)[d>>1];case 4:return c?d=>(u(),x)[d>>2]:d=>(u(),C)[d>>2];case 8:return c?d=>(u(),D)[d>>3]:d=>(u(),Ia)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},qb=(a,b,c,d,e)=>{b=X(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}W(a,{name:b,yc:f,Bc:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},Mc:eg(b,c,!d),Gc:null})},rb=(a,b,c,d)=>{b= +X(b);W(a,{name:b,yc:function(e){return!!e},Bc:function(e,f){return f?c:d},Mc:function(e){return this.yc((u(),w)[e])},Gc:null})},fg=a=>{throw new Y(a.oc.vc.tc.name+" instance already deleted");},gg=!1,hg=()=>{},ig=a=>{if(!globalThis.FinalizationRegistry)return ig=b=>b,a;gg=new FinalizationRegistry(b=>{b=b.oc;--b.count.value;0===b.count.value&&(b.Ac?b.Fc.Lc(b.Ac):b.vc.tc.Lc(b.qc))});ig=b=>{var c=b.oc;c.Ac&&gg.register(b,{oc:c},b);return b};hg=b=>{gg.unregister(b)};return ig(a)},jg=[]; +function kg(){} +var lg=(a,b)=>Object.defineProperty(b,"name",{value:a}),mg={},ng=(a,b,c)=>{if(void 0===a[b].zc){var d=a[b];a[b]=function(...e){if(!a[b].zc.hasOwnProperty(e.length))throw new Y(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].zc})!`);return a[b].zc[e.length].apply(this,e)};a[b].zc=[];a[b].zc[d.Vc]=d}},og=(a,b,c)=>{if(m.hasOwnProperty(a)){if(void 0===c||void 0!==m[a].zc&&void 0!==m[a].zc[c])throw new Y(`Cannot register public name '${a}' twice`);ng(m, +a,a);if(m[a].zc.hasOwnProperty(c))throw new Y(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);m[a].zc[c]=b}else m[a]=b,m[a].Vc=c},pg=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function qg(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Tc=c;this.Lc=d;this.Cc=e;this.$d=f;this.dd=g;this.Yd=h;this.te=[]} +var rg=(a,b,c)=>{for(;b!==c;){if(!b.dd)throw new Y(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.dd(a);b=b.Cc}return a},sg=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; +function tg(a,b){if(null===b){if(this.wd)throw new Y(`null is not a valid ${this.name}`);return 0}if(!b.oc)throw new Y(`Cannot pass "${sg(b)}" as a ${this.name}`);if(!b.oc.qc)throw new Y(`Cannot pass deleted object as a pointer of type ${this.name}`);return rg(b.oc.qc,b.oc.vc.tc,this.tc)} +function ug(a,b){if(null===b){if(this.wd)throw new Y(`null is not a valid ${this.name}`);if(this.jd){var c=this.zd();null!==a&&a.push(this.Lc,c);return c}return 0}if(!b||!b.oc)throw new Y(`Cannot pass "${sg(b)}" as a ${this.name}`);if(!b.oc.qc)throw new Y(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.hd&&b.oc.vc.hd)throw new Y(`Cannot convert argument of type ${b.oc.Fc?b.oc.Fc.name:b.oc.vc.name} to parameter type ${this.name}`);c=rg(b.oc.qc,b.oc.vc.tc,this.tc);if(this.jd){if(void 0=== +b.oc.Ac)throw new Y("Passing raw pointer to smart pointer is illegal");switch(this.ze){case 0:if(b.oc.Fc===this)c=b.oc.Ac;else throw new Y(`Cannot convert argument of type ${b.oc.Fc?b.oc.Fc.name:b.oc.vc.name} to parameter type ${this.name}`);break;case 1:c=b.oc.Ac;break;case 2:if(b.oc.Fc===this)c=b.oc.Ac;else{var d=b.clone();c=this.ue(c,vg(()=>d["delete"]()));null!==a&&a.push(this.Lc,c)}break;default:throw new Y("Unsupporting sharing policy");}}return c} +function wg(a,b){if(null===b){if(this.wd)throw new Y(`null is not a valid ${this.name}`);return 0}if(!b.oc)throw new Y(`Cannot pass "${sg(b)}" as a ${this.name}`);if(!b.oc.qc)throw new Y(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.oc.vc.hd)throw new Y(`Cannot convert argument of type ${b.oc.vc.name} to parameter type ${this.name}`);return rg(b.oc.qc,b.oc.vc.tc,this.tc)} +var xg=(a,b,c)=>{if(b===c)return a;if(void 0===c.Cc)return null;a=xg(a,b,c.Cc);return null===a?null:c.Yd(a)},yg={},zg=(a,b)=>{if(void 0===b)throw new Y("ptr should not be undefined");for(;a.Cc;)b=a.dd(b),a=a.Cc;return yg[b]},Ag=(a,b)=>{if(!b.vc||!b.qc)throw new bg("makeClassHandle requires ptr and ptrType");if(!!b.Fc!==!!b.Ac)throw new bg("Both smartPtrType and smartPtr must be specified");b.count={value:1};return ig(Object.create(a,{oc:{value:b,writable:!0}}))}; +function Bg(a,b,c,d,e,f,g,h,k,l,n){this.name=a;this.tc=b;this.wd=c;this.hd=d;this.jd=e;this.se=f;this.ze=g;this.Pd=h;this.zd=k;this.ue=l;this.Lc=n;e||void 0!==b.Cc?this.Bc=ug:(this.Bc=d?tg:wg,this.Gc=null)}var Cg=(a,b,c)=>{if(!m.hasOwnProperty(a))throw new bg("Replacing nonexistent public symbol");void 0!==m[a].zc&&void 0!==c?m[a].zc[c]=b:(m[a]=b,m[a].Vc=c)},Z=(a,b)=>{a=X(a);var c=M(b);if("function"!=typeof c)throw new Y(`unknown function pointer with signature ${a}: ${b}`);return c}; +class Dg extends Error{} +var Eg=a=>{a=Sd(a);var b=X(a);Qd(a);return b},Fg=(a,b)=>{function c(f){e[f]||$f[f]||(ag[f]?ag[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Dg(`${a}: `+d.map(Eg).join([", "]));},sb=(a,b,c,d,e,f,g,h,k,l,n,p,r)=>{n=X(n);f=Z(e,f);h&&=Z(g,h);l&&=Z(k,l);r=Z(p,r);var y=pg(n);og(y,function(){Fg(`Cannot construct ${n} due to unbound types`,[d])});cg([a,b,c],d?[d]:[],z=>{z=z[0];if(d){var A=z.tc;var B=A.Tc}else B=kg.prototype;z=lg(n,function(...Na){if(Object.getPrototypeOf(this)!==H)throw new Y(`Use 'new' to construct ${n}`); +if(void 0===I.Id)throw new Y(`${n} has no accessible constructor`);var N=I.Id[Na.length];if(void 0===N)throw new Y(`Tried to invoke ctor of ${n} with invalid number of parameters (${Na.length}) - expected (${Object.keys(I.Id).toString()}) parameters instead!`);return N.apply(this,Na)});var H=Object.create(B,{constructor:{value:z}});z.prototype=H;var I=new qg(n,z,H,r,A,f,h,l);if(I.Cc){var O;(O=I.Cc).Bd??(O.Bd=[]);I.Cc.Bd.push(I)}A=new Bg(n,I,!0,!1,!1);O=new Bg(n+"*",I,!1,!1,!1);B=new Bg(n+" const*", +I,!1,!0,!1);mg[a]={pointerType:O,Wd:B};Cg(y,z);return[A,O,B]})};function Gg(a){for(var b=1;bf)throw new Y("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Gg(b),k=!b[0].oe,l=f-2,n=Array(l),p=[],r=[];return lg(a,function(...y){r.length=0;p.length=g?2:1;p[0]=e;if(g){var z=b[1].Bc(r,this);p[1]=z}for(var A=0;A{for(var c=[],d=0;d>2]);return c},Jg=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},tb=(a,b,c,d,e,f,g,h)=>{var k=Ig(c,d);b=X(b);b=Jg(b);f=Z(e,f);cg([],[a],l=>{function n(){Fg(`Cannot call ${p} due to unbound types`,k)}l=l[0];var p=`${l.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&l.tc.te.push(b);var r=l.tc.Tc,y=r[b];void 0===y||void 0===y.zc&&y.className!==l.name&&y.Vc===c-2?(n.Vc=c-2,n.className=l.name,r[b]=n):(ng(r,b, +p),r[b].zc[c-2]=n);cg([],k,z=>{z=Hg(p,z,l,f,g);void 0===r[b].zc?(z.Vc=c-2,r[b]=z):r[b].zc[c-2]=z;return[]});return[]})},Kg=(a,b,c)=>{if(!(a instanceof Object))throw new Y(`${c} with invalid "this": ${a}`);if(!(a instanceof b.tc.constructor))throw new Y(`${c} incompatible with "this" of type ${a.constructor.name}`);if(!a.oc.qc)throw new Y(`cannot call emscripten binding method ${c} on deleted object`);return rg(a.oc.qc,a.oc.vc.tc,b.tc)},ub=(a,b,c,d,e,f,g,h,k,l)=>{b=X(b);e=Z(d,e);cg([],[a],n=>{n=n[0]; +var p=`${n.name}.${b}`,r={get(){Fg(`Cannot access ${p} due to unbound types`,[c,g])},enumerable:!0,configurable:!0};r.set=k?()=>Fg(`Cannot access ${p} due to unbound types`,[c,g]):()=>{throw new Y(p+" is a read-only property");};Object.defineProperty(n.tc.Tc,b,r);cg([],k?[c,g]:[c],y=>{var z=y[0],A={get(){var H=Kg(this,n,p+" getter");return z.yc(e(f,H))},enumerable:!0};if(k){k=Z(h,k);var B=y[1];A.set=function(H){var I=Kg(this,n,p+" setter"),O=[];k(l,I,B.Bc(O,H));Xf(O)}}Object.defineProperty(n.tc.Tc, +b,A);return[]});return[]})},Lg=[],Mg=[0,1,,1,null,1,!0,1,!1,1],Ob=a=>{9{if(!a)throw new Y(`Cannot use deleted val. handle = ${a}`);return Mg[a]},vg=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Lg.pop()||Mg.length;Mg[b]=a;Mg[b+1]=1;return b}},Og={name:"emscripten::val",yc:a=>{var b=Ng(a);Ob(a);return b},Bc:(a,b)=>vg(b),Mc:Yf,Gc:null},vb=a=>W(a,Og),Pg=(a,b)=>{switch(b){case 4:return function(c){return this.yc((u(), +Ga)[c>>2])};case 8:return function(c){return this.yc((u(),Ha)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},wb=(a,b,c)=>{b=X(b);W(a,{name:b,yc:d=>d,Bc:(d,e)=>e,Mc:Pg(b,c),Gc:null})},xb=(a,b,c,d,e,f)=>{var g=Ig(b,c);a=X(a);a=Jg(a);e=Z(d,e);og(a,function(){Fg(`Cannot call ${a} due to unbound types`,g)},b-1);cg([],g,h=>{Cg(a,Hg(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},yb=(a,b,c,d,e)=>{b=X(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}W(a,{name:b, +yc:f,Bc:(h,k)=>k,Mc:eg(b,c,0!==d),Gc:null})},zb=(a,b,c)=>{function d(f){var g=(u(),C)[f>>2];f=(u(),C)[f+4>>2];return new e((u(),v).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=X(c);W(a,{name:c,yc:d,Mc:d},{ge:!0})},Qg=Object.assign({optional:!0},Og),Ab=a=>{W(a,Qg)},Rg=(a,b,c)=>Ve(a,(u(),w),b,c),Bb=(a,b)=>{b=X(b);W(a,{name:b,yc(c){var d=(u(),C)[c>>2];d=Tf(c+4,d,!0);Qd(c);return d},Bc(c,d){d instanceof +ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new Y("Cannot pass non-string to std::string");var f=e?Ue(d):d.length;var g=Nd(4+f+1),h=g+4;(u(),C)[g>>2]=f;e?Rg(d,h,f+1):(u(),w).set(d,h);null!==c&&c.push(Qd,g);return g},Mc:Yf,Gc(c){Qd(c)}})},Sg=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Tg=(a,b,c)=>{a>>=1;b=Re((u(),Fa),a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}(u(),Ea)[b>>1]=0;return b-d},Vg=a=>2*a.length,Wg=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(u(),C)[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},Xg=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}(u(),x)[b>>2]=0;return b-d},Yg=a=>{for(var b=0,c=0;c{c=X(c);if(2===b){var d=Tg;var e=Ug;var f=Vg}else d=Wg,e=Xg,f=Yg;W(a,{name:c,yc:g=>{var h=(u(),C)[g>>2];h=d(g+4,h*b,!0);Qd(g);return h},Bc:(g,h)=>{if("string"!=typeof h)throw new Y(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),l=Nd(4+k+b);(u(),C)[l>>2]=k/b;e(h,l+4,k+b);null!==g&&g.push(Qd,l);return l}, +Mc:Yf,Gc(g){Qd(g)}})},Db=(a,b,c,d,e,f)=>{Wf[a]={name:X(b),zd:Z(c,d),Lc:Z(e,f),Ld:[]}},Eb=(a,b,c,d,e,f,g,h,k,l)=>{Wf[a].Ld.push({Zd:X(b),ce:c,Xc:Z(d,e),be:f,xe:g,we:Z(h,k),ye:l})},Fb=(a,b)=>{b=X(b);W(a,{oe:!0,name:b,yc:()=>{},Bc:()=>{}})},Gb=a=>{xa(a,!ba,1,!aa,5242880,!1);ya()},Zg=a=>{if(!(a instanceof fe||"unwind"==a))throw a;},ze=a=>{if(!ma)try{if(a(),!(ue||0{Atomics.waitAsync&&(Atomics.waitAsync((u(),x),a>>2,a).value.then(Ca), +a+=128,Atomics.store((u(),x),a>>2,1))},Ca=()=>ze(()=>{var a=Od();a&&(za(a),Yd())}),Hb=(a,b)=>{a==b?setTimeout(Ca):q?postMessage({pd:a,Oc:"checkMailbox"}):(a=re[a])&&a.postMessage({Oc:"checkMailbox"})},$g=[],Ib=(a,b,c,d,e)=>{d/=2;$g.length=d;c=e>>3;for(e=0;e{ue=!1;te=0},Kb=a=>{q?postMessage({Oc:"cleanupThread",Ce:a}):ye(re[a])},Lb=()=>{},Mb=()=>{throw Infinity;},ch=[],dh=a=>{var b=ch.length;ch.push(a); +return b},eh=(a,b)=>{for(var c=Array(a),d=0;d>2],g=$f[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Eg(f)}`,new Y(a);c[e]=g}return c},fh={},gh=a=>{var b=fh[a];return void 0===b?X(a):b},Nb=(a,b,c)=>{var [d,...e]=eh(a,b),f=d.Bc.bind(d),g=e.map(k=>k.Mc.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return dh(lg(b,(k,l,n,p)=>{for(var r=0,y=0;y>2]=vg(k));return z}))},Pb=a=>{if(!a)return vg(globalThis);a=gh(a);return vg(globalThis[a])},Qb=(a,b)=>{a=Ng(a);b=Ng(b);return vg(a[b])},Rb=a=>{9ch[a](b,c,d,e),Tb=()=>vg([]),Ub=a=>vg(gh(a)),Vb=a=>{var b=Ng(a);Xf(b);Ob(a)},hh=a=>0===a%4&&(0!==a%100||0===a%400),ih=[0,31,60,91,121,152,182,213,244,274,305,335],jh=[0,31,59,90,120,151,181,212,243, +273,304,334]; +function Wb(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();(u(),x)[b+4>>2]=a.getMinutes();(u(),x)[b+8>>2]=a.getHours();(u(),x)[b+12>>2]=a.getDate();(u(),x)[b+16>>2]=a.getMonth();(u(),x)[b+20>>2]=a.getFullYear()-1900;(u(),x)[b+24>>2]=a.getDay();var c=(hh(a.getFullYear())?ih:jh)[a.getMonth()]+a.getDate()-1|0;(u(),x)[b+28>>2]=c;(u(),x)[b+36>>2]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(), +0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(u(),x)[b+32>>2]=a} +function Xb(a){var b=new Date((u(),x)[a+20>>2]+1900,(u(),x)[a+16>>2],(u(),x)[a+12>>2],(u(),x)[a+8>>2],(u(),x)[a+4>>2],(u(),x)[a>>2],0),c=(u(),x)[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?(u(),x)[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();c=(hh(b.getFullYear())?ih:jh)[b.getMonth()]+b.getDate()-1|0; +(u(),x)[a+28>>2]=c;(u(),x)[a>>2]=b.getSeconds();(u(),x)[a+4>>2]=b.getMinutes();(u(),x)[a+8>>2]=b.getHours();(u(),x)[a+12>>2]=b.getDate();(u(),x)[a+16>>2]=b.getMonth();(u(),x)[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)} +function Yb(a,b,c,d,e,f,g){if(q)return L(10,1,a,b,c,d,e,f,g);e=-9007199254740992>e||9007199254740992>2]=k.Ed;(u(),C)[g>>2]=l;return 0}catch(n){if("undefined"==typeof V||"ErrnoError"!==n.name)throw n;return-n.wc}} +function Zb(a,b,c,d,e,f){if(q)return L(11,1,a,b,c,d,e,f);f=-9007199254740992>f||9007199254740992performance.timeOrigin+performance.now(); +function $b(a,b){if(q)return L(12,1,a,b);kh[a]&&(clearTimeout(kh[a].id),delete kh[a]);if(!b)return 0;var c=setTimeout(()=>{delete kh[a];ze(()=>Xd(a,performance.timeOrigin+performance.now()))},b);kh[a]={id:c,Qe:b};return 0} +var ac=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(u(),C)[a>>2]=60*g;(u(),x)[b>>2]=Number(f!=e);b=h=>{var k=Math.abs(h);return`UTC${0<=h?"-":"+"}${String(Math.floor(k/60)).padStart(2,"0")}${String(k%60).padStart(2,"0")}`};a=b(f);b=b(e);eDate.now(),lh=1; +function cc(a,b,c){if(!(0<=a&&3>=a))return 28;if(0===a)a=Date.now();else if(lh)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(1E6*a);(u(),D)[c>>3]=BigInt(a);return 0} +var mh=[],dc=(a,b,c)=>{mh.length=0;for(var d;d=(u(),w)[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;mh.push(112==d?(u(),C)[c>>2]:106==d?(u(),D)[c>>3]:105==d?(u(),x)[c>>2]:(u(),Ha)[c>>3]);c+=e?8:4}return ah[a](...mh)},ec=()=>{},gc=()=>{te+=1;throw"unwind";},hc=()=>2147483648,kc=a=>{var b=(u(),w).length;a>>>=0;if(a<=b||2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);pa();var e= +1;break a}catch(f){}e=void 0}if(e)return!0}return!1},nh=(a,b)=>{te+=1;return setTimeout(()=>{--te;ze(a)},b)},lc=(a,b,c)=>nh(()=>M(a)(c),b),oh={},qh=()=>{if(!ph){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in oh)void 0===oh[b]?delete a[b]:a[b]=oh[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);ph=c}return ph},ph; +function mc(a,b){if(q)return L(13,1,a,b);var c=0,d=0,e;for(e of qh()){var f=b+c;(u(),C)[a+d>>2]=f;c+=Rg(e,f,Infinity)+1;d+=4}return 0}function nc(a,b){if(q)return L(14,1,a,b);var c=qh();(u(),C)[a>>2]=c.length;a=0;for(var d of c)a+=Ue(d)+1;(u(),C)[b>>2]=a;return 0}function pc(a){if(q)return L(15,1,a);try{var b=T(a);Lf(b);return 0}catch(c){if("undefined"==typeof V||"ErrnoError"!==c.name)throw c;return c.wc}} +function qc(a,b){if(q)return L(16,1,a,b);try{var c=T(a),d=c.uc?2:S(c.mode)?3:40960===(c.mode&61440)?7:4;(u(),v)[b]=d;(u(),Ea)[b+2>>1]=0;(u(),D)[b+8>>3]=BigInt(0);(u(),D)[b+16>>3]=BigInt(0);return 0}catch(e){if("undefined"==typeof V||"ErrnoError"!==e.name)throw e;return e.wc}} +function rc(a,b,c,d){if(q)return L(17,1,a,b,c,d);try{a:{var e=T(a);a=b;for(var f,g=b=0;g>2],k=(u(),C)[a+4>>2];a+=8;var l=e,n=(u(),v),p=h,r=k,y=f;if(0>r||0>y)throw new Q(28);if(null===l.Sc)throw new Q(8);if(1===(l.flags&2097155))throw new Q(8);if(S(l.node.mode))throw new Q(31);if(!l.pc.read)throw new Q(28);var z="undefined"!=typeof y;if(!z)y=l.position;else if(!l.seekable)throw new Q(70);var A=l.pc.read(l,n,p,r,y);z||(l.position+=A);var B=A;if(0>B){var H=-1;break a}b+=B;if(B< +k)break;"undefined"!=typeof f&&(f+=B)}H=b}(u(),C)[d>>2]=H;return 0}catch(I){if("undefined"==typeof V||"ErrnoError"!==I.name)throw I;return I.wc}}function sc(a,b,c,d){if(q)return L(18,1,a,b,c,d);b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.vd&&0===b&&0===c&&(e.vd=null);return 0}catch(f){if("undefined"==typeof V||"ErrnoError"!==f.name)throw f;return f.wc}} +function tc(a,b,c,d){if(q)return L(19,1,a,b,c,d);try{a:{var e=T(a);a=b;for(var f,g=b=0;g>2],k=(u(),C)[a+4>>2];a+=8;var l=Nf(e,(u(),v),h,k,f);if(0>l){var n=-1;break a}b+=l;if(l>2]=n;return 0}catch(p){if("undefined"==typeof V||"ErrnoError"!==p.name)throw p;return p.wc}}var Id=a=>a;function Kd(a,b){try{return Oe((u(),w).subarray(a,a+b)),0}catch(c){if("undefined"==typeof V||"ErrnoError"!==c.name)throw c;return c.wc}} +var rh=()=>{var a=Error().stack.toString();m.extraStackTrace&&(a+="\n"+m.extraStackTrace());return a};q||we();qf=Array(4096);Ef(R,"/");U("/tmp");U("/home");U("/home/web_user");(function(){U("/dev");Ze(259,{read:()=>0,write:(d,e,f,g)=>g,Ic:()=>0});Hf("/dev/null",259);Ye(1280,af);Ye(1536,bf);Hf("/dev/tty",1280);Hf("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Oe(a),b=a.byteLength);return a[--b]};E("/dev","random",c);E("/dev","urandom",c);U("/dev/shm");U("/dev/shm/tmp")})(); +(function(){U("/proc");var a=U("/proc/self");U("/proc/self/fd");Ef({Pc(){var b=ef(a,"fd",16895,73);b.pc={Ic:R.pc.Ic};b.sc={Yc(c,d){c=+d;var e=T(c);c={parent:null,Pc:{Od:"fake"},sc:{cd:()=>e.path},id:c+1};return c.parent=c},Ad(){return Array.from(of.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); +(()=>{let a=kg.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof kg&&c instanceof kg))return!1;var d=this.oc.vc.tc,e=this.oc.qc;c.oc=c.oc;var f=c.oc.vc.tc;for(c=c.oc.qc;d.Cc;)e=d.dd(e),d=d.Cc;for(;f.Cc;)c=f.dd(c),f=f.Cc;return d===f&&e===c},clone:function(){this.oc.qc||fg(this);if(this.oc.ad)return this.oc.count.value+=1,this;var c=ig,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.oc;c=c(e.call(d,f,{oc:{value:{count:g.count,Wc:g.Wc,ad:g.ad,qc:g.qc,vc:g.vc,Ac:g.Ac,Fc:g.Fc}}})); +c.oc.count.value+=1;c.oc.Wc=!1;return c},["delete"](){this.oc.qc||fg(this);if(this.oc.Wc&&!this.oc.ad)throw new Y("Object already scheduled for deletion");hg(this);var c=this.oc;--c.count.value;0===c.count.value&&(c.Ac?c.Fc.Lc(c.Ac):c.vc.tc.Lc(c.qc));this.oc.ad||(this.oc.Ac=void 0,this.oc.qc=void 0)},isDeleted:function(){return!this.oc.qc},deleteLater:function(){this.oc.qc||fg(this);if(this.oc.Wc&&!this.oc.ad)throw new Y("Object already scheduled for deletion");jg.push(this);this.oc.Wc=!0;return this}}); +const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); +Object.assign(Bg.prototype,{ae(a){this.Pd&&(a=this.Pd(a));return a},Jd(a){this.Lc?.(a)},Mc:Yf,yc:function(a){function b(){return this.jd?Ag(this.tc.Tc,{vc:this.se,qc:c,Fc:this,Ac:a}):Ag(this.tc.Tc,{vc:this,qc:a})}var c=this.ae(a);if(!c)return this.Jd(a),null;var d=zg(this.tc,c);if(void 0!==d){if(0===d.oc.count.value)return d.oc.qc=c,d.oc.Ac=a,d.clone();d=d.clone();this.Jd(a);return d}d=this.tc.$d(c);d=mg[d];if(!d)return b.call(this);d=this.hd?d.Wd:d.pointerType;var e=xg(c,this.tc,d.tc);return null=== +e?b.call(this):this.jd?Ag(d.tc.Tc,{vc:d,qc:e,Fc:this,Ac:a}):Ag(d.tc.Tc,{vc:d,qc:e})}});q||(oa=m.wasmMemory?m.wasmMemory:new WebAssembly.Memory({initial:(m.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());m.noExitRuntime&&(ue=m.noExitRuntime);m.preloadPlugins&&(kf=m.preloadPlugins);m.print&&(ja=m.print);m.printErr&&(t=m.printErr);m.wasmBinary&&(ka=m.wasmBinary);m.thisProgram&&(da=m.thisProgram);if(m.preInit)for("function"==typeof m.preInit&&(m.preInit=[m.preInit]);0{var k=b?Pe(Le(a+"/"+b)):a,l=`cp ${k}`;me(l);try{var n=c;"string"==typeof c&&(n=await jf(c));n=await lf(n,k);h?.();f||Qf(a,b,n,d,e,g)}finally{le(l)}};m.FS_unlink=(...a)=>If(...a);m.FS_createPath=(...a)=>Of(...a);m.FS_createDevice=(...a)=>E(...a);m.FS_createDataFile=(...a)=>Qf(...a);m.FS_createLazyFile=(...a)=>Sf(...a);m.stackTrace=rh; +var bh=[Jd,ve,Ie,hb,ib,jb,kb,lb,mb,nb,Yb,Zb,$b,mc,nc,pc,qc,rc,sc,tc],ah={1093265:()=>{throw Error("Cannot assign to read-only property 'jpegBytes'");},1093339:a=>{throw Error(a);},1093366:a=>{throw Error(a);}};function bc(){var a=m.allowedThreads;return a?a:navigator.hardwareConcurrency} +function Ld(a,b,c,d,e){let f=!1,g;const h=k=>{f||(f=!0,clearTimeout(g),Pd(a,k))};try{const k=new AbortController,l=new Uint8Array(d);l.set((u(),w).subarray(c,c+d));g=setTimeout(()=>k.abort(),e);fetch(Tf(b),{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:l,signal:k.signal}).then(n=>h(n.status),()=>h(0))}catch{h(0)}}function uc(){var a=rh(),b=Ue(a)+1,c=Nd(b);Rg(a,c,b);return c}var Nd,Od,Pd,Qd,Rd,Sd,Aa,Td,xa,Da,Ud,Vd,Wd,Xd,Yd,G,Zd,$d,J,ae,K,be,ce,de,ee; +m.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=347808;var Wa;function Qc(a,b,c,d,e,f,g,h){var k=K();try{return M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function zc(a){var b=K();try{return M(a)()}catch(c){J(b);if(c!==c+0)throw c;G(1,0)}}function Dc(a,b,c){var d=K();try{return M(a)(b,c)}catch(e){J(d);if(e!==e+0)throw e;G(1,0)}}function hd(a,b,c,d){var e=K();try{M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}} +function ed(a,b,c){var d=K();try{M(a)(b,c)}catch(e){J(d);if(e!==e+0)throw e;G(1,0)}}function Zc(a){var b=K();try{M(a)()}catch(c){J(b);if(c!==c+0)throw c;G(1,0)}}function ad(a,b){var c=K();try{M(a)(b)}catch(d){J(c);if(d!==d+0)throw d;G(1,0)}}function od(a,b,c,d,e){var f=K();try{M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function Bc(a,b){var c=K();try{return M(a)(b)}catch(d){J(c);if(d!==d+0)throw d;G(1,0)}} +function Bd(a,b,c,d,e,f,g,h,k){var l=K();try{M(a)(b,c,d,e,f,g,h,k)}catch(n){J(l);if(n!==n+0)throw n;G(1,0)}}function Fc(a,b,c,d){var e=K();try{return M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}}function Jc(a,b,c,d,e){var f=K();try{return M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function Nc(a,b,c,d,e,f,g){var h=K();try{return M(a)(b,c,d,e,f,g)}catch(k){J(h);if(k!==k+0)throw k;G(1,0)}} +function zd(a,b,c,d,e,f,g,h){var k=K();try{M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function vd(a,b,c,d,e,f){var g=K();try{M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function Ec(a,b,c,d,e){var f=K();try{return M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function wd(a,b,c,d,e,f,g){var h=K();try{M(a)(b,c,d,e,f,g)}catch(k){J(h);if(k!==k+0)throw k;G(1,0)}}function vc(a,b,c){var d=K();try{return M(a)(b,c)}catch(e){J(d);if(e!==e+0)throw e;G(1,0)}} +function Mc(a,b,c,d,e,f,g){var h=K();try{return M(a)(b,c,d,e,f,g)}catch(k){J(h);if(k!==k+0)throw k;G(1,0)}}function Cc(a,b,c,d){var e=K();try{return M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}}function xc(a,b,c,d){var e=K();try{return M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}}function Gd(a,b,c,d,e,f,g,h,k,l,n,p){var r=K();try{M(a)(b,c,d,e,f,g,h,k,l,n,p)}catch(y){J(r);if(y!==y+0)throw y;G(1,0)}} +function td(a,b,c,d,e,f,g,h){var k=K();try{M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function Lc(a,b,c,d,e,f){var g=K();try{return M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function Cd(a,b,c,d,e,f,g,h,k,l){var n=K();try{M(a)(b,c,d,e,f,g,h,k,l)}catch(p){J(n);if(p!==p+0)throw p;G(1,0)}}function Vc(a,b,c,d){var e=K();try{return M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}} +function Rc(a,b,c,d,e,f,g,h,k){var l=K();try{return M(a)(b,c,d,e,f,g,h,k)}catch(n){J(l);if(n!==n+0)throw n;G(1,0)}}function kd(a,b,c,d,e,f){var g=K();try{M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function ld(a,b,c,d,e,f,g){var h=K();try{M(a)(b,c,d,e,f,g)}catch(k){J(h);if(k!==k+0)throw k;G(1,0)}}function nd(a,b,c,d,e,f){var g=K();try{M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}} +function Oc(a,b,c,d,e,f,g,h){var k=K();try{return M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function Ac(a,b,c,d,e){var f=K();try{return M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function qd(a,b,c,d,e,f,g){var h=K();try{M(a)(b,c,d,e,f,g)}catch(k){J(h);if(k!==k+0)throw k;G(1,0)}}function gd(a,b,c,d,e,f,g,h){var k=K();try{M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}} +function Ed(a,b,c,d,e,f,g,h,k,l,n){var p=K();try{M(a)(b,c,d,e,f,g,h,k,l,n)}catch(r){J(p);if(r!==r+0)throw r;G(1,0)}}function wc(a,b,c,d,e,f){var g=K();try{return M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function md(a,b,c,d,e,f,g,h){var k=K();try{M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function Tc(a,b,c,d,e,f,g,h,k,l,n){var p=K();try{return M(a)(b,c,d,e,f,g,h,k,l,n)}catch(r){J(p);if(r!==r+0)throw r;G(1,0)}} +function Dd(a,b,c,d,e,f,g,h,k,l,n,p){var r=K();try{M(a)(b,c,d,e,f,g,h,k,l,n,p)}catch(y){J(r);if(y!==y+0)throw y;G(1,0)}}function Hc(a,b,c,d,e,f){var g=K();try{return M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function dd(a,b,c,d,e){var f=K();try{M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function bd(a,b,c,d){var e=K();try{M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}} +function xd(a,b,c,d,e,f,g,h,k){var l=K();try{M(a)(b,c,d,e,f,g,h,k)}catch(n){J(l);if(n!==n+0)throw n;G(1,0)}}function jd(a,b,c,d,e){var f=K();try{M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function Gc(a,b,c,d,e){var f=K();try{return M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}}function Ic(a,b,c,d,e,f,g,h){var k=K();try{return M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}} +function yd(a,b,c,d,e,f,g,h,k,l,n){var p=K();try{M(a)(b,c,d,e,f,g,h,k,l,n)}catch(r){J(p);if(r!==r+0)throw r;G(1,0)}}function Sc(a,b,c,d,e,f,g,h,k,l){var n=K();try{return M(a)(b,c,d,e,f,g,h,k,l)}catch(p){J(n);if(p!==p+0)throw p;G(1,0)}}function Wc(a){var b=K();try{return M(a)()}catch(c){J(b);if(c!==c+0)throw c;G(1,0);return 0n}}function ud(a,b,c,d,e,f,g,h,k,l,n,p,r,y,z,A){var B=K();try{M(a)(b,c,d,e,f,g,h,k,l,n,p,r,y,z,A)}catch(H){J(B);if(H!==H+0)throw H;G(1,0)}} +function sd(a,b,c,d,e,f,g,h,k,l,n,p,r,y,z,A){var B=K();try{M(a)(b,c,d,e,f,g,h,k,l,n,p,r,y,z,A)}catch(H){J(B);if(H!==H+0)throw H;G(1,0)}}function Fd(a,b,c,d,e,f,g,h,k,l,n,p,r,y){var z=K();try{M(a)(b,c,d,e,f,g,h,k,l,n,p,r,y)}catch(A){J(z);if(A!==A+0)throw A;G(1,0)}}function Ad(a,b,c,d,e,f,g,h,k,l,n){var p=K();try{M(a)(b,c,d,e,f,g,h,k,l,n)}catch(r){J(p);if(r!==r+0)throw r;G(1,0)}}function Pc(a,b,c,d,e,f,g,h,k,l){var n=K();try{return M(a)(b,c,d,e,f,g,h,k,l)}catch(p){J(n);if(p!==p+0)throw p;G(1,0)}} +function pd(a,b,c,d,e,f){var g=K();try{M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function fd(a,b,c,d){var e=K();try{M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}}function rd(a,b,c,d,e,f,g,h){var k=K();try{M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function cd(a,b,c,d,e,f,g,h){var k=K();try{M(a)(b,c,d,e,f,g,h)}catch(l){J(k);if(l!==l+0)throw l;G(1,0)}}function $c(a,b,c,d,e){var f=K();try{M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0)}} +function Xc(a,b,c,d){var e=K();try{return M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0);return 0n}}function Kc(a,b,c,d,e,f){var g=K();try{return M(a)(b,c,d,e,f)}catch(h){J(g);if(h!==h+0)throw h;G(1,0)}}function Yc(a,b,c,d,e){var f=K();try{return M(a)(b,c,d,e)}catch(g){J(f);if(g!==g+0)throw g;G(1,0);return 0n}}function yc(a,b,c,d){var e=K();try{return M(a)(b,c,d)}catch(f){J(e);if(f!==f+0)throw f;G(1,0)}} +function Uc(a,b,c,d,e,f,g,h,k,l,n,p){var r=K();try{return M(a)(b,c,d,e,f,g,h,k,l,n,p)}catch(y){J(r);if(y!==y+0)throw y;G(1,0)}}function Hd(a,b,c,d,e,f,g,h,k,l,n,p,r,y,z,A){var B=K();try{M(a)(b,c,d,e,f,g,h,k,l,n,p,r,y,z,A)}catch(H){J(B);if(H!==H+0)throw H;G(1,0)}} +function va(){function a(){m.calledRun=!0;if(!ma&&(Ka(),qa?.(m),m.onRuntimeInitialized?.(),!q)){if(m.postRun)for("function"==typeof m.postRun&&(m.postRun=[m.postRun]);m.postRun.length;){var b=m.postRun.shift();Ae.push(b)}he(Ae)}}if(0{setTimeout(()=>m.setStatus(""),1);a()},1)):a()}} +var Pa;q||(Pa=await (ua()),va());moduleRtn=Ja?m:new Promise((a,b)=>{qa=a;ra=b}); +;return moduleRtn}export default createModule;var isPthread=globalThis.self?.name?.startsWith("em-pthread");isPthread&&createModule(); diff --git a/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.wasm b/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.wasm new file mode 100644 index 00000000..45ca2036 Binary files /dev/null and b/packages/blinkid-verify-wasm/dist/simd-threads/BlinkIdVerifyModule.wasm differ diff --git a/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.data b/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.data similarity index 61% rename from packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.data rename to packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.data index 2970575b..7b80534b 100644 Binary files a/packages/blinkid-verify-wasm/dist/advanced/BlinkIdVerifyModule.data and b/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.data differ diff --git a/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.js b/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.js new file mode 100644 index 00000000..45df2cd9 --- /dev/null +++ b/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.js @@ -0,0 +1,133 @@ +async function createModule(moduleArg={}){var moduleRtn;var p=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=p).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);p.expectedDataFileDownloads++; +(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,l){var m;(m=p).dataFileDownloads??(m.dataFileDownloads={});try{var n=await fetch(k)}catch(A){throw Error(`Network Error: ${k}`,{e:A});}if(!n.ok)throw Error(`${n.status}: ${n.url}`);m=[];l=Number(n.headers.get("Content-Length")??l);let q=0;p.setStatus?.("Downloading data...");for(n=n.body.getReader();;){var {done:x, +value:y}=await n.read();if(x)break;m.push(y);q+=y.length;p.dataFileDownloads[k]={loaded:q,total:l};let A=0,F=0;for(var z of Object.values(p.dataFileDownloads))A+=z.loaded,F+=z.total;p.setStatus?.(`Downloading data... (${A}/${F})`)}k=new Uint8Array(m.map(A=>A.length).reduce((A,F)=>A+F,0));z=0;for(const A of m)k.set(A,z),z+=A.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkid-verify",!0,!0);for(var l of b.files)k.addRunDependency(`fp ${l.filename}`); +k.addRunDependency("datafile_bazel-out/wasm-opt-ST-ed9970336f80/bin/packages/blinkid-verify-wasm/binding/simd/BlinkIdVerifyModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["bazel-out/wasm-opt-ST-ed9970336f80/bin/packages/blinkid-verify-wasm/binding/simd/BlinkIdVerifyModule.data"]={fe:!1};h||=await g;(async function(m){if(!m)throw Error("Loading data file failed.");if(m.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");m=new Uint8Array(m);for(var n of b.files){var q= +n.filename;k.FS_createDataFile(q,null,m.subarray(n.start,n.end),!0,!0,!0);k.removeRunDependency(`fp ${q}`)}k.removeRunDependency("datafile_bazel-out/wasm-opt-ST-ed9970336f80/bin/packages/blinkid-verify-wasm/binding/simd/BlinkIdVerifyModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+ +"/");var e=p.locateFile?.("BlinkIdVerifyModule.data","")??"BlinkIdVerifyModule.data",f=b.remote_package_size,g,h=p.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(p.calledRun)d(p);else{let k;((k=p).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid-verify/Model_02957b97.strop",start:0,end:103198},{filename:"/microblink/blinkid-verify/Model_0574da24.strop",start:103198,end:490892},{filename:"/microblink/blinkid-verify/Model_08a8e22c.strop",start:490892,end:1925153},{filename:"/microblink/blinkid-verify/Model_11a41e0f.strop", +start:1925153,end:1928888},{filename:"/microblink/blinkid-verify/Model_1f2ae93e.strop",start:1928888,end:1982134},{filename:"/microblink/blinkid-verify/Model_3a69425d.strop",start:1982134,end:2306621},{filename:"/microblink/blinkid-verify/Model_44dff8bf.strop",start:2306621,end:2431696},{filename:"/microblink/blinkid-verify/Model_48e189e2.strop",start:2431696,end:2755707},{filename:"/microblink/blinkid-verify/Model_49210872.strop",start:2755707,end:7393907},{filename:"/microblink/blinkid-verify/Model_53f443db.strop", +start:7393907,end:7832083},{filename:"/microblink/blinkid-verify/Model_649c20b5.strop",start:7832083,end:8858938},{filename:"/microblink/blinkid-verify/Model_6683cb47.strop",start:8858938,end:8934340},{filename:"/microblink/blinkid-verify/Model_7b97ad87.strop",start:8934340,end:8960638},{filename:"/microblink/blinkid-verify/Model_7f5a4bc5.strop",start:8960638,end:8967134},{filename:"/microblink/blinkid-verify/Model_84fd5736.strop",start:8967134,end:10212125},{filename:"/microblink/blinkid-verify/Model_a54429ec.strop", +start:10212125,end:10286570},{filename:"/microblink/blinkid-verify/Model_a91e7e31.strop",start:10286570,end:10555291},{filename:"/microblink/blinkid-verify/Model_a958c31c.strop",start:10555291,end:10899747},{filename:"/microblink/blinkid-verify/Model_ad5b6c8e.strop",start:10899747,end:11562800},{filename:"/microblink/blinkid-verify/Model_b18ce029.strop",start:11562800,end:13222641},{filename:"/microblink/blinkid-verify/Model_b5120a89.strop",start:13222641,end:13306090},{filename:"/microblink/blinkid-verify/Model_de3c93f5.strop", +start:13306090,end:13312539},{filename:"/microblink/blinkid-verify/ccc_lookup_table.zzip",start:13312539,end:13333008},{filename:"/microblink/blinkid-verify/knowledge-database_0.1.zzip",start:13333008,end:13409266},{filename:"/microblink/blinkid-verify/serialized_embedder_db_1.12.bin",start:13409266,end:16686927},{filename:"/microblink/blinkid-verify/serialized_embedder_db_1.14.bin",start:16686927,end:20518235},{filename:"/microblink/blinkid-verify/template-database_0.1.zzip",start:20518235,end:20519559}], +remote_package_size:20519559})})();p="undefined"!==typeof p?p:{};(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!p.locateFile&&(p.locateFile=function(d,e){return"BlinkIdVerifyModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; +if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),ka=console.error.bind(console),la,ma=!1,na,oa,pa,r,t,u,qa,v,w,ra,sa,B,ta,ua=!1; +function va(){var a=wa.buffer;r=new Int8Array(a);u=new Int16Array(a);t=new Uint8Array(a);qa=new Uint16Array(a);v=new Int32Array(a);w=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);B=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function C(a){p.onAbort?.(a);a="Aborted("+a+")";ka(a);ma=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");pa?.(a);throw a;}var xa; +async function za(a){if(!la)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&la)a=new Uint8Array(la);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function Aa(a,b){try{var c=await za(a);return await WebAssembly.instantiate(c,b)}catch(d){ka(`failed to asynchronously prepare wasm: ${d}`),C(d)}} +async function Ba(a){var b=xa;if(!la)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){ka(`wasm streaming compile failed: ${d}`),ka("falling back to ArrayBuffer instantiation")}return Aa(b,a)}class Ca{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} +var Da=a=>{for(;0{var a=p.preRun.shift();Fa.push(a)},Ha=!0,Ia=[],D=a=>{var b=Ia[a];b||(Ia[a]=b=Ja.get(a));return b},Ka=[],La=0,E=0;class Ma{constructor(a){this.ld=a;this.Ub=a-24}} +var Pa=a=>{var b=E;if(!b)return Na(0),0;var c=new Ma(b);w[c.Ub+16>>2]=b;var d=w[c.Ub+4>>2];if(!d)return Na(0),b;for(var e of a){if(0===e||e===d)break;if(Oa(e,d,c.Ub+16))return Na(e),b}Na(d);return b},H=()=>{var a=v[+Qa>>2];Qa+=4;return a},Ra=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Sa=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Ra(a.split("/").filter(d=>!!d),!b).join("/"))|| +b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},Ta=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Ua=()=>a=>crypto.getRandomValues(a),Va=a=>{(Va=Ua())(a)},Wa=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ra(b.split("/").filter(e=>!!e),!c).join("/"); +return(c?"/":"")+b||"."},Xa=globalThis.TextDecoder&&new TextDecoder,Ya=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},I=(a,b=0,c,d)=>{c=Ya(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320| +e&1023))}}else d+=String.fromCharCode(e)}return d},Za=[],$a=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},J=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240| +g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},ab=a=>{var b=Array($a(a)+1);a=J(a,b,0,b.length);b.length=a;return b},bb=[];function cb(a,b){bb[a]={input:[],output:[],tc:b};db(a,eb)} +var eb={open(a){var b=bb[a.node.Fc];if(!b)throw new M(43);a.Zb=b;a.seekable=!1},close(a){a.Zb.tc.Kc(a.Zb)},Kc(a){a.Zb.tc.Kc(a.Zb)},read(a,b,c,d){if(!a.Zb||!a.Zb.tc.nd)throw new M(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=hb(65536,a);b&&t.fill(0,b,b+a);return b},N={oc:null,sc(){return N.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new M(63);N.oc||(N.oc={dir:{node:{mc:N.Xb.mc,rc:N.Xb.rc,Bc:N.Xb.Bc,Nc:N.Xb.Nc,rd:N.Xb.rd,Sc:N.Xb.Sc,sd:N.Xb.sd,ad:N.Xb.ad,Rc:N.Xb.Rc},stream:{nc:N.Vb.nc}}, +file:{node:{mc:N.Xb.mc,rc:N.Xb.rc},stream:{nc:N.Vb.nc,read:N.Vb.read,write:N.Vb.write,Cc:N.Vb.Cc,Oc:N.Vb.Oc}},link:{node:{mc:N.Xb.mc,rc:N.Xb.rc,Gc:N.Xb.Gc},stream:{}},gd:{node:{mc:N.Xb.mc,rc:N.Xb.rc},stream:jb}});c=kb(a,b,c,d);O(c.mode)?(c.Xb=N.oc.dir.node,c.Vb=N.oc.dir.stream,c.Wb={}):32768===(c.mode&61440)?(c.Xb=N.oc.file.node,c.Vb=N.oc.file.stream,c.bc=0,c.Wb=null):40960===(c.mode&61440)?(c.Xb=N.oc.link.node,c.Vb=N.oc.link.stream):8192===(c.mode&61440)&&(c.Xb=N.oc.gd.node,c.Vb=N.oc.gd.stream); +c.uc=c.jc=c.ic=Date.now();a&&(a.Wb[b]=c,a.uc=a.jc=a.ic=c.uc);return c},ge(a){return a.Wb?a.Wb.subarray?a.Wb.subarray(0,a.bc):new Uint8Array(a.Wb):new Uint8Array(0)},Xb:{mc(a){var b={};b.wd=8192===(a.mode&61440)?a.id:1;b.Fd=a.id;b.mode=a.mode;b.Od=1;b.uid=0;b.Dd=0;b.Fc=a.Fc;b.size=O(a.mode)?4096:32768===(a.mode&61440)?a.bc:40960===(a.mode&61440)?a.link.length:0;b.uc=new Date(a.uc);b.jc=new Date(a.jc);b.ic=new Date(a.ic);b.td=4096;b.ud=Math.ceil(b.size/b.td);return b},rc(a,b){for(var c of["mode","atime", +"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.bc!=b&&(0==b?(a.Wb=null,a.bc=0):(c=a.Wb,a.Wb=new Uint8Array(b),c&&a.Wb.set(c.subarray(0,Math.min(b,a.bc))),a.bc=b)))},Bc(){N.Uc||(N.Uc=new M(44),N.Uc.stack="");throw N.Uc;},Nc(a,b,c,d){return N.createNode(a,b,c,d)},rd(a,b,c){try{var d=lb(b,c)}catch(f){}if(d){if(O(a.mode))for(var e in d.Wb)throw new M(55);mb(d)}delete a.parent.Wb[a.name];b.Wb[c]=a;a.name=c;b.ic=b.jc=a.parent.ic=a.parent.jc=Date.now()},Sc(a, +b){delete a.Wb[b];a.ic=a.jc=Date.now()},sd(a,b){var c=lb(a,b),d;for(d in c.Wb)throw new M(55);delete a.Wb[b];a.ic=a.jc=Date.now()},ad(a){return[".","..",...Object.keys(a.Wb)]},Rc(a,b,c){a=N.createNode(a,b,41471,0);a.link=c;return a},Gc(a){if(40960!==(a.mode&61440))throw new M(28);return a.link}},Vb:{read(a,b,c,d,e){var f=a.node.Wb;if(e>=a.node.bc)return 0;a=Math.min(a.node.bc-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Wb,a.Wb=new Uint8Array(f),0b)throw new M(28);return b},Cc(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new M(43);a=a.node.Wb;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=ib(b);if(!e)throw new M(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},ob=async a=>{a=await ha(a);return new Uint8Array(a)},pb=0,qb=null,rb=()=>{pb--;p.monitorRunDependencies?.(pb);if(0==pb&&qb){var a=qb;qb=null;a()}},sb=()=>{pb++;p.monitorRunDependencies?.(pb)},tb=[],ub=async(a,b)=>{if("undefined"!=typeof Browser){var c=Browser;w[c.Ub+16>>2]=0;w[c.Ub+4>>2]=void 0;w[c.Ub+8>>2]=void 0}for(var d of tb)if(d.canHandle(b))return d.handle(a,b);return a},vb=null,wb={},xb=[],yb=1,zb=null,Ab=!1,Bb=!0,Cb={},M=class{name="ErrnoError";constructor(a){this.ac= +a}},Db=class{Qc={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.Qc.flags}set flags(a){this.Qc.flags=a}get position(){return this.Qc.position}set position(a){this.Qc.position=a}},Eb=class{Xb={};Vb={};Pc=365;Tc=146;Dc=null;constructor(a,b,c,d){a||=this;this.parent=a;this.sc=a.sc;this.id=yb++;this.name=b;this.mode=c;this.Fc=d;this.uc=this.jc=this.ic=Date.now()}get read(){return(this.mode&this.Pc)===this.Pc}set read(a){a?this.mode|=this.Pc:this.mode&=~this.Pc}get write(){return(this.mode& +this.Tc)===this.Tc}set write(a){a?this.mode|=this.Tc:this.mode&=~this.Tc}get Ld(){return O(this.mode)}get Kd(){return 8192===(this.mode&61440)}}; +function Fb(a,b={}){if(!a)throw new M(44);b.Vc??(b.Vc=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=vb,e="/",f=0;f>>0)%zb.length} +function mb(a){var b=Hb(a.parent.id,a.name);if(zb[b]===a)zb[b]=a.xc;else for(b=zb[b];b;){if(b.xc===a){b.xc=a.xc;break}b=b.xc}}function lb(a,b){var c=O(a.mode)?(c=Ib(a,"x"))?c:a.Xb.Bc?0:2:54;if(c)throw new M(c);for(c=zb[Hb(a.id,b)];c;c=c.xc){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Xb.Bc(a,b)}function kb(a,b,c,d){a=new Eb(a,b,c,d);b=Hb(a.parent.id,a.name);a.xc=zb[b];return zb[b]=a}function O(a){return 16384===(a&61440)} +function Jb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Ib(a,b){if(Bb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Kb(a,b){if(!O(a.mode))return 54;try{return lb(a,b),20}catch(c){}return Ib(a,"wx")}function Lb(a){if(!a)throw new M(63);return a}function P(a){a=xb[a];if(!a)throw new M(8);return a} +function Mb(a,b=-1){a=Object.assign(new Db,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!xb[b])break a;throw new M(33);}a.vc=b;return xb[b]=a}function Nb(a,b=-1){a=Mb(a,b);a.Vb?.ee?.(a);return a}function Ob(a,b){var c=null?.Vb.rc,d=c?null:a;c??=a.Xb.rc;Lb(c);c(d,b)}var jb={open(a){a.Vb=wb[a.node.Fc].Vb;a.Vb.open?.(a)},nc(){throw new M(70);}};function db(a,b){wb[a]={Vb:b}} +function Pb(a,b){var c="/"===b;if(c&&vb)throw new M(10);if(!c&&b){var d=Fb(b,{Vc:!1});b=d.path;d=d.node;if(d.Dc)throw new M(10);if(!O(d.mode))throw new M(54);}b={type:a,he:{},pd:b,Nd:[]};a=a.sc(b);a.sc=b;b.root=a;c?vb=a:d&&(d.Dc=b,d.sc&&d.sc.Nd.push(b))}function Qb(a,b,c){var d=Fb(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new M(28);if("."===a||".."===a)throw new M(20);var e=Kb(d,a);if(e)throw new M(e);if(!d.Xb.Nc)throw new M(63);return d.Xb.Nc(d,a,b,c)} +function Rb(a,b=438){return Qb(a,b&4095|32768,0)}function Q(a){return Qb(a,16895,0)}function Sb(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Qb(a,b|8192,c)}function Tb(a,b){if(!Wa(a))throw new M(44);var c=Fb(b,{parent:!0}).node;if(!c)throw new M(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Kb(c,b);if(d)throw new M(d);if(!c.Xb.Rc)throw new M(63);c.Xb.Rc(c,b,a)} +function Ub(a){var b=Fb(a,{parent:!0}).node;if(!b)throw new M(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=lb(b,a);a:{try{var d=lb(b,a)}catch(f){d=f.ac;break a}var e=Ib(b,"wx");d=e?e:O(d.mode)?31:0}if(d)throw new M(d);if(!b.Xb.Sc)throw new M(63);if(c.Dc)throw new M(10);b.Xb.Sc(b,a);mb(c)}function Vb(a,b){a=Fb(a,{Jc:!b}).node;return Lb(a.Xb.mc)(a)}function Wb(a,b){a="string"==typeof a?Fb(a,{Jc:!0}).node:a;Ob(a,{mode:b&4095|a.mode&-4096,ic:Date.now(),de:void 0})} +function Xb(a,b,c=438){if(""===a)throw new M(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Fb(a,{Jc:!(b&131072),Pd:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new M(20);}else{if(e)throw new M(31);d=Qb(a,c|511,0);f=!0}if(!d)throw new M(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!O(d.mode))throw new M(54); +if(!f&&(e=d?40960===(d.mode&61440)?32:O(d.mode)&&("r"!==Jb(b)||b&576)?31:Ib(d,Jb(b)):44))throw new M(e);if(b&512&&!f){e=d;e="string"==typeof e?Fb(e,{Jc:!0}).node:e;if(O(e.mode))throw new M(31);if(32768!==(e.mode&61440))throw new M(28);var g=Ib(e,"w");if(g)throw new M(g);Ob(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Mb({node:d,path:Gb(d),flags:b,seekable:!0,position:0,Vb:d.Vb,Yd:[],error:!1});e.Vb.open&&e.Vb.open(e);f&&Wb(d,c&511);!p.logReadFiles||b&1||a in Cb||(Cb[a]=1);return e} +function Yb(a){if(null===a.vc)throw new M(8);a.Wc&&(a.Wc=null);try{a.Vb.close&&a.Vb.close(a)}catch(b){throw b;}finally{xb[a.vc]=null}a.vc=null}function Zb(a,b,c){if(null===a.vc)throw new M(8);if(!a.seekable||!a.Vb.nc)throw new M(70);if(0!=c&&1!=c&&2!=c)throw new M(28);a.position=a.Vb.nc(a,b,c);a.Yd=[]} +function $b(a,b,c,d,e,f){if(0>d||0>e)throw new M(28);if(null===a.vc)throw new M(8);if(0===(a.flags&2097155))throw new M(8);if(O(a.node.mode))throw new M(31);if(!a.Vb.write)throw new M(28);a.seekable&&a.flags&1024&&Zb(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new M(70);b=a.Vb.write(a,b,c,d,e,f);g||(a.position+=b);return b} +function ac(a,b){a="string"==typeof a?a:Gb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Sa(a+"/"+c);try{Q(d)}catch(e){if(20!=e.ac)throw e;}a=d}}return d}function bc(a,b,c,d){a=Sa(("string"==typeof a?a:Gb(a))+"/"+b);return Rb(a,nb(c,d))} +function cc(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Gb(a),g=b?Sa(a+"/"+b):a);a=nb(d,e);g=Rb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=n.length)return 0;y=Math.min(n.length-z,y);if(n.slice)for(var A=0;Athis.length-1||0>n)){var q=n%this.hd;return this.Ac(n/this.hd|0)[q]}}Td(n){this.Ac=n}fd(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);200<=n.status&&300>n.status||304===n.status||C("Couldn't load "+c+". Status: "+n.status);var q=Number(n.getResponseHeader("Content-length")), +x,y=(x=n.getResponseHeader("Accept-Ranges"))&&"bytes"===x;n=(x=n.getResponseHeader("Content-Encoding"))&&"gzip"===x;var z=1048576;y||(z=q);var A=this;A.Td(F=>{var G=F*z,L=(F+1)*z-1;L=Math.min(L,q-1);if("undefined"==typeof A.Ic[F]){var ya=A.Ic;G>L&&C("invalid range ("+G+", "+L+") or no bytes requested!");L>q-1&&C("only "+q+" bytes available! programmer error!");var K=new XMLHttpRequest;K.open("GET",c,!1);q!==z&&K.setRequestHeader("Range","bytes="+G+"-"+L);K.responseType="arraybuffer";K.overrideMimeType&& +K.overrideMimeType("text/plain; charset=x-user-defined");K.send(null);200<=K.status&&300>K.status||304===K.status||C("Couldn't load "+c+". Status: "+K.status);G=void 0!==K.response?new Uint8Array(K.response||[]):ab(K.responseText||"");ya[F]=G}"undefined"==typeof A.Ic[F]&&C("doXHR failed!");return A.Ic[F]});if(n||!q)z=q=1,z=q=this.Ac(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.dd=q;this.cd=z;this.Yc=!0}get length(){this.Yc||this.fd();return this.dd}get hd(){this.Yc|| +this.fd();return this.cd}}if(globalThis.XMLHttpRequest){ba||C("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var l=bc(a,b,d,e);h?l.Wb=h:k&&(l.Wb=null,l.url=k);Object.defineProperties(l,{bc:{get:function(){return this.Wb.length}}});var m={};Object.keys(l.Vb).forEach(n=>{var q=l.Vb[n];m[n]=(...x)=>{dc(l);return q(...x)}});m.read=(n,q,x,y,z)=>{dc(l);return f(n,q,x,y,z)};m.Cc=(n,q,x)=>{dc(l); +var y=ib(q);if(!y)throw new M(48);f(n,r,y,q,x);return{Ub:y,ed:!0}};l.Vb=m;return l}var S={};function fc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":P(a).path;if(0==b.length){if(!c)throw new M(44);return a}return a+"/"+b} +function gc(a,b){w[a>>2]=b.wd;w[a+4>>2]=b.mode;w[a+8>>2]=b.Od;w[a+12>>2]=b.uid;w[a+16>>2]=b.Dd;w[a+20>>2]=b.Fc;B[a+24>>3]=BigInt(b.size);v[a+32>>2]=4096;v[a+36>>2]=b.ud;var c=b.uc.getTime(),d=b.jc.getTime(),e=b.ic.getTime();B[a+40>>3]=BigInt(Math.floor(c/1E3));w[a+48>>2]=c%1E3*1E6;B[a+56>>3]=BigInt(Math.floor(d/1E3));w[a+64>>2]=d%1E3*1E6;B[a+72>>3]=BigInt(Math.floor(e/1E3));w[a+80>>2]=e%1E3*1E6;B[a+88>>3]=BigInt(b.Fd);return 0}var Qa=void 0,hc={},ic=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; +function jc(a){return this.cc(w[a>>2])} +var kc={},lc={},mc={},nc=class extends Error{constructor(a){super(a);this.name="InternalError"}},oc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new nc("Mismatched type converter count");for(var k=0;kmc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{lc.hasOwnProperty(h)?e[k]=lc[h]:(f.push(h),kc.hasOwnProperty(h)||(kc[h]=[]),kc[h].push(()=>{e[k]=lc[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},U=a=>{for(var b="";;){var c=t[a++];if(!c)return b; +b+=String.fromCharCode(c)}},V=class extends Error{constructor(a){super(a);this.name="BindingError"}};function pc(a,b,c={}){var d=b.name;if(!a)throw new V(`type "${d}" must have a positive integer typeid pointer`);if(lc.hasOwnProperty(a)){if(c.Ed)return;throw new V(`Cannot register type '${d}' twice`);}lc[a]=b;delete mc[a];kc.hasOwnProperty(a)&&(b=kc[a],delete kc[a],b.forEach(e=>e()))}function T(a,b,c={}){return pc(a,b,c)} +var qc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>t[d];case 2:return c?d=>u[d>>1]:d=>qa[d>>1];case 4:return c?d=>v[d>>2]:d=>w[d>>2];case 8:return c?d=>B[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},rc=a=>{throw new V(a.Tb.$b.Yb.name+" instance already deleted");},sc=!1,tc=()=>{},uc=a=>{if(!globalThis.FinalizationRegistry)return uc=b=>b,a;sc=new FinalizationRegistry(b=>{b=b.Tb;--b.count.value;0===b.count.value&&(b.ec?b.kc.pc(b.ec):b.$b.Yb.pc(b.Ub))});uc= +b=>{var c=b.Tb;c.ec&&sc.register(b,{Tb:c},b);return b};tc=b=>{sc.unregister(b)};return uc(a)},vc=[];function wc(){} +var xc=(a,b)=>Object.defineProperty(b,"name",{value:a}),yc={},zc=(a,b,c)=>{if(void 0===a[b].dc){var d=a[b];a[b]=function(...e){if(!a[b].dc.hasOwnProperty(e.length))throw new V(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].dc})!`);return a[b].dc[e.length].apply(this,e)};a[b].dc=[];a[b].dc[d.yc]=d}},Ac=(a,b,c)=>{if(p.hasOwnProperty(a)){if(void 0===c||void 0!==p[a].dc&&void 0!==p[a].dc[c])throw new V(`Cannot register public name '${a}' twice`);zc(p, +a,a);if(p[a].dc.hasOwnProperty(c))throw new V(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);p[a].dc[c]=b}else p[a]=b,p[a].yc=c},Bc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Cc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.wc=c;this.pc=d;this.hc=e;this.zd=f;this.Hc=g;this.xd=h;this.Rd=[]} +var Dc=(a,b,c)=>{for(;b!==c;){if(!b.Hc)throw new V(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Hc(a);b=b.hc}return a},Ec=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; +function Fc(a,b){if(null===b){if(this.Xc)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.Tb)throw new V(`Cannot pass "${Ec(b)}" as a ${this.name}`);if(!b.Tb.Ub)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);return Dc(b.Tb.Ub,b.Tb.$b.Yb,this.Yb)} +function Gc(a,b){if(null===b){if(this.Xc)throw new V(`null is not a valid ${this.name}`);if(this.Mc){var c=this.$c();null!==a&&a.push(this.pc,c);return c}return 0}if(!b||!b.Tb)throw new V(`Cannot pass "${Ec(b)}" as a ${this.name}`);if(!b.Tb.Ub)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Lc&&b.Tb.$b.Lc)throw new V(`Cannot convert argument of type ${b.Tb.kc?b.Tb.kc.name:b.Tb.$b.name} to parameter type ${this.name}`);c=Dc(b.Tb.Ub,b.Tb.$b.Yb,this.Yb);if(this.Mc){if(void 0=== +b.Tb.ec)throw new V("Passing raw pointer to smart pointer is illegal");switch(this.Xd){case 0:if(b.Tb.kc===this)c=b.Tb.ec;else throw new V(`Cannot convert argument of type ${b.Tb.kc?b.Tb.kc.name:b.Tb.$b.name} to parameter type ${this.name}`);break;case 1:c=b.Tb.ec;break;case 2:if(b.Tb.kc===this)c=b.Tb.ec;else{var d=b.clone();c=this.Sd(c,Hc(()=>d["delete"]()));null!==a&&a.push(this.pc,c)}break;default:throw new V("Unsupporting sharing policy");}}return c} +function Ic(a,b){if(null===b){if(this.Xc)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.Tb)throw new V(`Cannot pass "${Ec(b)}" as a ${this.name}`);if(!b.Tb.Ub)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Tb.$b.Lc)throw new V(`Cannot convert argument of type ${b.Tb.$b.name} to parameter type ${this.name}`);return Dc(b.Tb.Ub,b.Tb.$b.Yb,this.Yb)} +var Jc=(a,b,c)=>{if(b===c)return a;if(void 0===c.hc)return null;a=Jc(a,b,c.hc);return null===a?null:c.xd(a)},Kc={},Lc=(a,b)=>{if(void 0===b)throw new V("ptr should not be undefined");for(;a.hc;)b=a.Hc(b),a=a.hc;return Kc[b]},Mc=(a,b)=>{if(!b.$b||!b.Ub)throw new nc("makeClassHandle requires ptr and ptrType");if(!!b.kc!==!!b.ec)throw new nc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return uc(Object.create(a,{Tb:{value:b,writable:!0}}))}; +function Nc(a,b,c,d,e,f,g,h,k,l,m){this.name=a;this.Yb=b;this.Xc=c;this.Lc=d;this.Mc=e;this.Qd=f;this.Xd=g;this.qd=h;this.$c=k;this.Sd=l;this.pc=m;e||void 0!==b.hc?this.fc=Gc:(this.fc=d?Fc:Ic,this.lc=null)}var Oc=(a,b,c)=>{if(!p.hasOwnProperty(a))throw new nc("Replacing nonexistent public symbol");void 0!==p[a].dc&&void 0!==c?p[a].dc[c]=b:(p[a]=b,p[a].yc=c)},W=(a,b)=>{a=U(a);var c=D(b);if("function"!=typeof c)throw new V(`unknown function pointer with signature ${a}: ${b}`);return c}; +class Pc extends Error{}var Sc=a=>{a=Qc(a);var b=U(a);Rc(a);return b},Tc=(a,b)=>{function c(f){e[f]||lc[f]||(mc[f]?mc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Pc(`${a}: `+d.map(Sc).join([", "]));};function Uc(a){for(var b=1;bf)throw new V("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Uc(b),k=!b[0].Md,l=f-2,m=Array(l),n=[],q=[];return xc(a,function(...x){q.length=0;n.length=g?2:1;n[0]=e;if(g){var y=b[1].fc(q,this);n[1]=y}for(var z=0;z{for(var c=[],d=0;d>2]);return c},Xc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Yc=(a,b,c)=>{if(!(a instanceof Object))throw new V(`${c} with invalid "this": ${a}`);if(!(a instanceof b.Yb.constructor))throw new V(`${c} incompatible with "this" of type ${a.constructor.name}`);if(!a.Tb.Ub)throw new V(`cannot call emscripten binding method ${c} on deleted object`);return Dc(a.Tb.Ub,a.Tb.$b.Yb,b.Yb)},Zc=[],$c=[0,1,,1,null,1,!0,1,!1,1],ad=a=> +{9{if(!a)throw new V(`Cannot use deleted val. handle = ${a}`);return $c[a]},Hc=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Zc.pop()||$c.length;$c[b]=a;$c[b+1]=1;return b}},cd={name:"emscripten::val",cc:a=>{var b=bd(a);ad(a);return b},fc:(a,b)=>Hc(b),qc:jc,lc:null},dd=(a,b)=>{switch(b){case 4:return function(c){return this.cc(ra[c>>2])};case 8:return function(c){return this.cc(sa[c>>3])}; +default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ed=Object.assign({optional:!0},cd),fd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,gd=(a,b,c)=>{a>>=1;b=Ya(qa,a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;u[b>>1]=0;return b-d},jd=a=>2*a.length,kd=(a,b,c)=>{var d="";a>>= +2;for(var e=0;!(e>=b/4);e++){var f=w[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},ld=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}v[b>>2]=0;return b-d},md=a=>{for(var b=0,c=0;c{var b=od.length;od.push(a);return b},qd=(a,b)=>{for(var c=Array(a),d=0;d>2],g=lc[f];if(void 0===g)throw a= +`${`parameter ${d}`} has unknown type ${Sc(f)}`,new V(a);c[e]=g}return c},rd={},sd=a=>{var b=rd[a];return void 0===b?U(a):b},td=a=>0===a%4&&(0!==a%100||0===a%400),ud=[0,31,60,91,121,152,182,213,244,274,305,335],vd=[0,31,59,90,120,151,181,212,243,273,304,334],wd={},xd=a=>{if(!(a instanceof Ca||"unwind"==a))throw a;},yd=a=>{na=a;Ha||0{if(!ma)try{if(a(),!(Ha||0setTimeout(()=>{zd(a)}, +b),Cd={},Ed=()=>{if(!Dd){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Cd)void 0===Cd[b]?delete a[b]:a[b]=Cd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Dd=c}return Dd},Dd,Fd=()=>{var a=Error().stack.toString();p.extraStackTrace&&(a+="\n"+p.extraStackTrace());return a};zb=Array(4096);Pb(N,"/");Q("/tmp");Q("/home");Q("/home/web_user"); +(function(){Q("/dev");db(259,{read:()=>0,write:(d,e,f,g)=>g,nc:()=>0});Sb("/dev/null",259);cb(1280,fb);cb(1536,gb);Sb("/dev/tty",1280);Sb("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Va(a),b=a.byteLength);return a[--b]};R("/dev","random",c);R("/dev","urandom",c);Q("/dev/shm");Q("/dev/shm/tmp")})(); +(function(){Q("/proc");var a=Q("/proc/self");Q("/proc/self/fd");Pb({sc(){var b=kb(a,"fd",16895,73);b.Vb={nc:N.Vb.nc};b.Xb={Bc(c,d){c=+d;var e=P(c);c={parent:null,sc:{pd:"fake"},Xb:{Gc:()=>e.path},id:c+1};return c.parent=c},ad(){return Array.from(xb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); +(()=>{let a=wc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof wc&&c instanceof wc))return!1;var d=this.Tb.$b.Yb,e=this.Tb.Ub;c.Tb=c.Tb;var f=c.Tb.$b.Yb;for(c=c.Tb.Ub;d.hc;)e=d.Hc(e),d=d.hc;for(;f.hc;)c=f.Hc(c),f=f.hc;return d===f&&e===c},clone:function(){this.Tb.Ub||rc(this);if(this.Tb.Ec)return this.Tb.count.value+=1,this;var c=uc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.Tb;c=c(e.call(d,f,{Tb:{value:{count:g.count,zc:g.zc,Ec:g.Ec,Ub:g.Ub,$b:g.$b,ec:g.ec,kc:g.kc}}})); +c.Tb.count.value+=1;c.Tb.zc=!1;return c},["delete"](){this.Tb.Ub||rc(this);if(this.Tb.zc&&!this.Tb.Ec)throw new V("Object already scheduled for deletion");tc(this);var c=this.Tb;--c.count.value;0===c.count.value&&(c.ec?c.kc.pc(c.ec):c.$b.Yb.pc(c.Ub));this.Tb.Ec||(this.Tb.ec=void 0,this.Tb.Ub=void 0)},isDeleted:function(){return!this.Tb.Ub},deleteLater:function(){this.Tb.Ub||rc(this);if(this.Tb.zc&&!this.Tb.Ec)throw new V("Object already scheduled for deletion");vc.push(this);this.Tb.zc=!0;return this}}); +const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); +Object.assign(Nc.prototype,{Ad(a){this.qd&&(a=this.qd(a));return a},kd(a){this.pc?.(a)},qc:jc,cc:function(a){function b(){return this.Mc?Mc(this.Yb.wc,{$b:this.Qd,Ub:c,kc:this,ec:a}):Mc(this.Yb.wc,{$b:this,Ub:a})}var c=this.Ad(a);if(!c)return this.kd(a),null;var d=Lc(this.Yb,c);if(void 0!==d){if(0===d.Tb.count.value)return d.Tb.Ub=c,d.Tb.ec=a,d.clone();d=d.clone();this.kd(a);return d}d=this.Yb.zd(c);d=yc[d];if(!d)return b.call(this);d=this.Lc?d.vd:d.pointerType;var e=Jc(c,this.Yb,d.Yb);return null=== +e?b.call(this):this.Mc?Mc(d.Yb.wc,{$b:d,Ub:e,kc:this,ec:a}):Mc(d.Yb.wc,{$b:d,Ub:e})}});wa=p.wasmMemory?p.wasmMemory:new WebAssembly.Memory({initial:(p.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();p.noExitRuntime&&(Ha=p.noExitRuntime);p.preloadPlugins&&(tb=p.preloadPlugins);p.print&&(ja=p.print);p.printErr&&(ka=p.printErr);p.wasmBinary&&(la=p.wasmBinary);p.thisProgram&&(da=p.thisProgram);if(p.preInit)for("function"==typeof p.preInit&&(p.preInit=[p.preInit]);0{var k=b?Wa(Sa(a+"/"+b)):a,l=`cp ${k}`;sb(l);try{var m=c;"string"==typeof c&&(m=await ob(c));m=await ub(m,k);h?.();f||cc(a,b,m,d,e,g)}finally{rb(l)}};p.FS_unlink=(...a)=>Ub(...a);p.FS_createPath=(...a)=>ac(...a);p.FS_createDevice=(...a)=>R(...a);p.FS_createDataFile=(...a)=>cc(...a);p.FS_createLazyFile=(...a)=>ec(...a);p.stackTrace=Fd; +var Gd={1088777:()=>{throw Error("Cannot assign to read-only property 'jpegBytes'");},1088851:a=>{throw Error(a);},1088878:a=>{throw Error(a);}},Hd,Id,Rc,Jd,Qc,hb,Kd,X,Na,Y,Z,Ld,Md,Oa,Ja;p.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=345280; +var Ze={Ja:(a,b)=>D(a)(b),s:a=>{var b=new Ma(a);0==r[b.Ub+12]&&(r[b.Ub+12]=1,La--);r[b.Ub+13]=0;Ka.push(b);Md(a);return Jd(a)},D:()=>{X(0,0);var a=Ka.pop();Ld(a.ld);E=0},b:()=>Pa([]),i:a=>Pa([a]),n:(a,b)=>Pa([a,b]),ka:()=>{var a=Ka.pop();a||C("no exception to throw");var b=a.ld;0==r[a.Ub+13]&&(Ka.push(a),r[a.Ub+13]=1,r[a.Ub+12]=0,La++);E=b;throw E;},w:(a,b,c)=>{var d=new Ma(a);w[d.Ub+16>>2]=0;w[d.Ub+4>>2]=b;w[d.Ub+8>>2]=c;E=a;La++;throw E;},qa:()=>La,e:a=>{E||=a;throw E;},ta:function(a,b,c){Qa=c; +try{var d=P(a);switch(b){case 0:var e=H();if(0>e)break;for(;xb[e];)e++;return Nb(d,e).vc;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=H(),d.flags|=e,0;case 12:return e=H(),u[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ac}},cb:function(a,b){try{var c=P(a),d=c.node,e=c.Vb.mc;a=e?c:d;e??=d.Xb.mc;Lb(e);var f=e(a);return gc(b,f)}catch(g){if("undefined"==typeof S||"ErrnoError"!==g.name)throw g;return-g.ac}},db:function(a, +b,c){Qa=c;try{var d=P(a);switch(b){case 21509:return d.Zb?0:-59;case 21505:if(!d.Zb)return-59;if(d.Zb.tc.Hd){a=[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];var e=H();v[e>>2]=25856;v[e+4>>2]=5;v[e+8>>2]=191;v[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Zb?0:-59;case 21506:case 21507:case 21508:if(!d.Zb)return-59;if(d.Zb.tc.Id)for(e=H(),a=[],f=0;32>f;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.Zb)return-59; +e=H();return v[e>>2]=0;case 21520:return d.Zb?-28:-59;case 21537:case 21531:e=H();if(!d.Vb.Gd)throw new M(59);return d.Vb.Gd(d,b,e);case 21523:if(!d.Zb)return-59;d.Zb.tc.Jd&&(f=[24,80],e=H(),u[e>>1]=f[0],u[e+2>>1]=f[1]);return 0;case 21524:return d.Zb?0:-59;case 21515:return d.Zb?0:-59;default:return-28}}catch(g){if("undefined"==typeof S||"ErrnoError"!==g.name)throw g;return-g.ac}},ab:function(a,b){try{return a=a?I(t,a):"",gc(b,Vb(a,!0))}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c; +return-c.ac}},$a:function(a,b,c,d){try{b=b?I(t,b):"";var e=d&256;b=fc(a,b,d&4096);return gc(c,e?Vb(b,!0):Vb(b))}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ac}},sa:function(a,b,c,d){Qa=d;try{b=b?I(t,b):"";b=fc(a,b);var e=d?H():0;return Xb(b,c,e).vc}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ac}},bb:function(a,b){try{return a=a?I(t,a):"",gc(b,Vb(a))}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return-c.ac}},fb:()=>C(""), +E:a=>{var b=hc[a];delete hc[a];var c=b.$c,d=b.pc,e=b.md,f=e.map(g=>g.Cd).concat(e.map(g=>g.Vd));oc([a],f,g=>{var h={};e.forEach((k,l)=>{var m=g[l],n=k.Ac,q=k.Bd,x=g[l+e.length],y=k.Ud,z=k.Wd;h[k.yd]={read:A=>m.cc(n(q,A)),write:(A,F)=>{var G=[];y(z,A,x.fc(G,F));ic(G)},optional:g[l].optional}});return[{name:b.name,cc:k=>{var l={},m;for(m in h)l[m]=h[m].read(k);d(k);return l},fc:(k,l)=>{for(var m in h)if(!(m in l||h[m].optional))throw new TypeError(`Missing field: "${m}"`);var n=c();for(m in h)h[m].write(n, +l[m]);null!==k&&k.push(d,n);return n},qc:jc,lc:d}]})},va:(a,b,c,d,e)=>{b=U(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}T(a,{name:b,cc:f,fc:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},qc:qc(b,c,!d),lc:null})},ib:(a,b,c,d)=>{b=U(b);T(a,{name:b,cc:function(e){return!!e},fc:function(e,f){return f?c:d},qc:function(e){return this.cc(t[e])},lc:null})},na:(a,b,c,d,e,f,g,h,k,l,m,n,q)=>{m=U(m);f=W(e,f);h&&=W(g,h);l&&=W(k,l);q=W(n,q);var x=Bc(m);Ac(x,function(){Tc(`Cannot construct ${m} due to unbound types`, +[d])});oc([a,b,c],d?[d]:[],y=>{y=y[0];if(d){var z=y.Yb;var A=z.wc}else A=wc.prototype;y=xc(m,function(...ya){if(Object.getPrototypeOf(this)!==F)throw new V(`Use 'new' to construct ${m}`);if(void 0===G.jd)throw new V(`${m} has no accessible constructor`);var K=G.jd[ya.length];if(void 0===K)throw new V(`Tried to invoke ctor of ${m} with invalid number of parameters (${ya.length}) - expected (${Object.keys(G.jd).toString()}) parameters instead!`);return K.apply(this,ya)});var F=Object.create(A,{constructor:{value:y}}); +y.prototype=F;var G=new Cc(m,y,F,q,z,f,h,l);if(G.hc){var L;(L=G.hc).bd??(L.bd=[]);G.hc.bd.push(G)}z=new Nc(m,G,!0,!1,!1);L=new Nc(m+"*",G,!1,!1,!1);A=new Nc(m+" const*",G,!1,!0,!1);yc[a]={pointerType:L,vd:A};Oc(x,y);return[z,L,A]})},V:(a,b,c,d,e,f,g,h)=>{var k=Wc(c,d);b=U(b);b=Xc(b);f=W(e,f);oc([],[a],l=>{function m(){Tc(`Cannot call ${n} due to unbound types`,k)}l=l[0];var n=`${l.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&l.Yb.Rd.push(b);var q=l.Yb.wc,x=q[b];void 0===x||void 0=== +x.dc&&x.className!==l.name&&x.yc===c-2?(m.yc=c-2,m.className=l.name,q[b]=m):(zc(q,b,n),q[b].dc[c-2]=m);oc([],k,y=>{y=Vc(n,y,l,f,g);void 0===q[b].dc?(y.yc=c-2,q[b]=y):q[b].dc[c-2]=y;return[]});return[]})},W:(a,b,c,d,e,f,g,h,k,l)=>{b=U(b);e=W(d,e);oc([],[a],m=>{m=m[0];var n=`${m.name}.${b}`,q={get(){Tc(`Cannot access ${n} due to unbound types`,[c,g])},enumerable:!0,configurable:!0};q.set=k?()=>Tc(`Cannot access ${n} due to unbound types`,[c,g]):()=>{throw new V(n+" is a read-only property");};Object.defineProperty(m.Yb.wc, +b,q);oc([],k?[c,g]:[c],x=>{var y=x[0],z={get(){var F=Yc(this,m,n+" getter");return y.cc(e(f,F))},enumerable:!0};if(k){k=W(h,k);var A=x[1];z.set=function(F){var G=Yc(this,m,n+" setter"),L=[];k(l,G,A.fc(L,F));ic(L)}}Object.defineProperty(m.Yb.wc,b,z);return[]});return[]})},gb:a=>T(a,cd),ua:(a,b,c)=>{b=U(b);T(a,{name:b,cc:d=>d,fc:(d,e)=>e,qc:dd(b,c),lc:null})},N:(a,b,c,d,e,f)=>{var g=Wc(b,c);a=U(a);a=Xc(a);e=W(d,e);Ac(a,function(){Tc(`Cannot call ${a} due to unbound types`,g)},b-1);oc([],g,h=>{Oc(a, +Vc(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},S:(a,b,c,d,e)=>{b=U(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}T(a,{name:b,cc:f,fc:(h,k)=>k,qc:qc(b,c,0!==d),lc:null})},C:(a,b,c)=>{function d(f){return new e(r.buffer,w[f+4>>2],w[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=U(c);T(a,{name:c,cc:d,qc:d},{Ed:!0})},J:a=>{T(a,ed)},hb:(a,b)=>{b=U(b);T(a,{name:b,cc(c){var d=(d=c+4)? +I(t,d,w[c>>2],!0):"";Rc(c);return d},fc(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new V("Cannot pass non-string to std::string");var f=e?$a(d):d.length;var g=Hd(4+f+1),h=g+4;w[g>>2]=f;e?J(d,t,h,f+1):t.set(d,h);null!==c&&c.push(Rc,g);return g},qc:jc,lc(c){Rc(c)}})},ja:(a,b,c)=>{c=U(c);if(2===b){var d=gd;var e=hd;var f=jd}else d=kd,e=ld,f=md;T(a,{name:c,cc:g=>{var h=d(g+4,w[g>>2]*b,!0);Rc(g);return h},fc:(g, +h)=>{if("string"!=typeof h)throw new V(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),l=Hd(4+k+b);w[l>>2]=k/b;e(h,l+4,k+b);null!==g&&g.push(Rc,l);return l},qc:jc,lc(g){Rc(g)}})},F:(a,b,c,d,e,f)=>{hc[a]={name:U(b),$c:W(c,d),pc:W(e,f),md:[]}},x:(a,b,c,d,e,f,g,h,k,l)=>{hc[a].md.push({yd:U(b),Cd:c,Ac:W(d,e),Bd:f,Vd:g,Ud:W(h,k),Wd:l})},jb:(a,b)=>{b=U(b);T(a,{Md:!0,name:b,cc:()=>{},fc:()=>{}})},La:()=>{Ha=!1;nd=0},Ab:()=>{throw Infinity;},z:(a,b,c)=>{var [d,...e]=qd(a,b),f=d.fc.bind(d),g= +e.map(k=>k.qc.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=>k.name)}) => ${d.name}>`;return pd(xc(b,(k,l,m,n)=>{for(var q=0,x=0;x>2]=Hc(k));return y}))},Ia:ad,lb:a=>{if(!a)return Hc(globalThis);a=sd(a);return Hc(globalThis[a])},la:(a,b)=>{a=bd(a);b=bd(b);return Hc(a[b])},Ha:a=>{9od[a](b,c,d,e),nb:()=>Hc([]),mb:a=>Hc(sd(a)),Oa:a=>{var b=bd(a);ic(b);ad(a)},Ta:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();v[b+4>>2]=a.getMinutes();v[b+8>>2]=a.getHours();v[b+12>>2]=a.getDate();v[b+16>>2]=a.getMonth();v[b+20>>2]=a.getFullYear()-1900;v[b+24>>2]=a.getDay();v[b+28>>2]=(td(a.getFullYear())?ud:vd)[a.getMonth()]+a.getDate()-1|0;v[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(), +d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();v[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},Ua:function(a){var b=new Date(v[a+20>>2]+1900,v[a+16>>2],v[a+12>>2],v[a+8>>2],v[a+4>>2],v[a>>2],0),c=v[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?v[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay(); +v[a+28>>2]=(td(b.getFullYear())?ud:vd)[b.getMonth()]+b.getDate()-1|0;v[a>>2]=b.getSeconds();v[a+4>>2]=b.getMinutes();v[a+8>>2]=b.getHours();v[a+12>>2]=b.getDate();v[a+16>>2]=b.getMonth();v[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},Ra:function(a,b,c,d,e,f,g){e=-9007199254740992>e||9007199254740992>2]=k.ed;w[g>>2]=l;return 0}catch(m){if("undefined"==typeof S||"ErrnoError"!==m.name)throw m;return-m.ac}},Sa:function(a,b,c,d,e,f){f=-9007199254740992>f||9007199254740992{wd[a]&&(clearTimeout(wd[a].id),delete wd[a]);if(!b)return 0;var c= +setTimeout(()=>{delete wd[a];zd(()=>Kd(a,performance.now()))},b);wd[a]={id:c,ie:b};return 0},Va:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();w[a>>2]=60*Math.max(f,e);v[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28; +B[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},da:(a,b,c)=>{Ad.length=0;for(var d;d=t[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;Ad.push(112==d?w[c>>2]:106==d?B[c>>3]:105==d?v[c>>2]:sa[c>>3]);c+=e?8:4}return Gd[a](...Ad)},eb:()=>Date.now(),Qa:()=>2147483648,Pa:a=>{var b=t.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va(); +var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},ob:(a,b,c)=>Bd(()=>D(a)(c),b),Za:(a,b)=>{var c=0,d=0,e;for(e of Ed()){var f=b+c;w[a+d>>2]=f;c+=J(e,t,f,Infinity)+1;d+=4}return 0},_a:(a,b)=>{var c=Ed();w[a>>2]=c.length;a=0;for(var d of c)a+=$a(d)+1;w[b>>2]=a;return 0},wa:a=>{na=a;yd(a)},ia:function(a){try{var b=P(a);Yb(b);return 0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ac}},Ya:function(a,b){try{var c=P(a);r[b]=c.Zb?2:O(c.mode)?3:40960===(c.mode&61440)?7: +4;u[b+2>>1]=0;B[b+8>>3]=BigInt(0);B[b+16>>3]=BigInt(0);return 0}catch(d){if("undefined"==typeof S||"ErrnoError"!==d.name)throw d;return d.ac}},ra:function(a,b,c,d){try{a:{var e=P(a);a=b;for(var f,g=b=0;g>2],k=w[a+4>>2];a+=8;var l=e,m=h,n=k,q=f,x=r;if(0>n||0>q)throw new M(28);if(null===l.vc)throw new M(8);if(1===(l.flags&2097155))throw new M(8);if(O(l.node.mode))throw new M(31);if(!l.Vb.read)throw new M(28);var y="undefined"!=typeof q;if(!y)q=l.position;else if(!l.seekable)throw new M(70); +var z=l.Vb.read(l,x,m,n,q);y||(l.position+=z);var A=z;if(0>A){var F=-1;break a}b+=A;if(A>2]=F;return 0}catch(G){if("undefined"==typeof S||"ErrnoError"!==G.name)throw G;return G.ac}},Xa:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.Wc&&0===b&&0===c&&(e.Wc=null);return 0}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return f.ac}},ha:function(a, +b,c,d){try{a:{var e=P(a);a=b;for(var f,g=b=0;g>2],k=w[a+4>>2];a+=8;var l=$b(e,r,h,k,f);if(0>l){var m=-1;break a}b+=l;if(l>2]=m;return 0}catch(n){if("undefined"==typeof S||"ErrnoError"!==n.name)throw n;return n.ac}},kb:function(){var a=Fd(),b=$a(a)+1,c=Hd(b);J(a,t,c,b);return c},fa:Nd,Da:Od,G:Pd,xa:Qd,t:Rd,Ea:Sd,h:Td,pa:Ud,c:Vd,ga:Wd,l:Xd,P:Yd,Ca:Zd,Aa:$d,k:ae,qb:be,v:ce,ea:de,u:ee,Fa:fe,K:ge,R:he,O:ie,_:je,Bb:ke,Y:le,oa:me,Z:ne,rb:oe, +U:pe,m:qe,sb:re,o:se,aa:te,ya:ue,ba:ve,f:we,ub:xe,Q:ye,g:ze,$:Ae,A:Be,M:Ce,Cb:De,ca:Ee,j:Fe,T:Ge,ma:He,tb:Ie,wb:Je,Ga:Ke,xb:Le,d:Me,r:Ne,Ba:Oe,yb:Pe,q:Qe,vb:Re,p:Se,B:Te,zb:Ue,L:Ve,za:We,I:Xe,X:Ye,H:a=>a,a:wa,Ka:yd,Na:function(a,b){try{return Va(t.subarray(a,a+b)),0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ac}},pb:function(a,b,c,d,e){let f=!1,g;const h=k=>{f||(f=!0,clearTimeout(g),Id(a,k))};try{const k=new AbortController,l=new Uint8Array(d);l.set(t.subarray(c,c+d)); +g=setTimeout(()=>k.abort(),e);fetch(b?I(t,b):"",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:l,signal:k.signal}).then(m=>h(m.status),()=>h(0))}catch{h(0)}}};function he(a,b,c,d,e,f,g,h){var k=Z();try{return D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function Rd(a){var b=Z();try{return D(a)()}catch(c){Y(b);if(c!==c+0)throw c;X(1,0)}}function Vd(a,b,c){var d=Z();try{return D(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}} +function ze(a,b,c,d){var e=Z();try{D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function we(a,b,c){var d=Z();try{D(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}}function qe(a){var b=Z();try{D(a)()}catch(c){Y(b);if(c!==c+0)throw c;X(1,0)}}function se(a,b){var c=Z();try{D(a)(b)}catch(d){Y(c);if(d!==d+0)throw d;X(1,0)}}function Fe(a,b,c,d,e){var f=Z();try{D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}} +function Td(a,b){var c=Z();try{return D(a)(b)}catch(d){Y(c);if(d!==d+0)throw d;X(1,0)}}function Se(a,b,c,d,e,f,g,h,k){var l=Z();try{D(a)(b,c,d,e,f,g,h,k)}catch(m){Y(l);if(m!==m+0)throw m;X(1,0)}}function Xd(a,b,c,d){var e=Z();try{return D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function ae(a,b,c,d,e){var f=Z();try{return D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}}function ee(a,b,c,d,e,f,g){var h=Z();try{return D(a)(b,c,d,e,f,g)}catch(k){Y(h);if(k!==k+0)throw k;X(1,0)}} +function Qe(a,b,c,d,e,f,g,h){var k=Z();try{D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function Me(a,b,c,d,e,f){var g=Z();try{D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function Wd(a,b,c,d,e){var f=Z();try{return D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}}function Ne(a,b,c,d,e,f,g){var h=Z();try{D(a)(b,c,d,e,f,g)}catch(k){Y(h);if(k!==k+0)throw k;X(1,0)}}function Nd(a,b,c){var d=Z();try{return D(a)(b,c)}catch(e){Y(d);if(e!==e+0)throw e;X(1,0)}} +function de(a,b,c,d,e,f,g){var h=Z();try{return D(a)(b,c,d,e,f,g)}catch(k){Y(h);if(k!==k+0)throw k;X(1,0)}}function Ud(a,b,c,d){var e=Z();try{return D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function Pd(a,b,c,d){var e=Z();try{return D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function Xe(a,b,c,d,e,f,g,h,k,l,m,n){var q=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m,n)}catch(x){Y(q);if(x!==x+0)throw x;X(1,0)}} +function Ke(a,b,c,d,e,f,g,h){var k=Z();try{D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function ce(a,b,c,d,e,f){var g=Z();try{return D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function Te(a,b,c,d,e,f,g,h,k,l){var m=Z();try{D(a)(b,c,d,e,f,g,h,k,l)}catch(n){Y(m);if(n!==n+0)throw n;X(1,0)}}function me(a,b,c,d){var e=Z();try{return D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}} +function ie(a,b,c,d,e,f,g,h,k){var l=Z();try{return D(a)(b,c,d,e,f,g,h,k)}catch(m){Y(l);if(m!==m+0)throw m;X(1,0)}}function Be(a,b,c,d,e,f){var g=Z();try{D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function Ce(a,b,c,d,e,f,g){var h=Z();try{D(a)(b,c,d,e,f,g)}catch(k){Y(h);if(k!==k+0)throw k;X(1,0)}}function Ee(a,b,c,d,e,f){var g=Z();try{D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}} +function fe(a,b,c,d,e,f,g,h){var k=Z();try{return D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function Sd(a,b,c,d,e){var f=Z();try{return D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}}function He(a,b,c,d,e,f,g){var h=Z();try{D(a)(b,c,d,e,f,g)}catch(k){Y(h);if(k!==k+0)throw k;X(1,0)}}function ye(a,b,c,d,e,f,g,h){var k=Z();try{D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}} +function Ve(a,b,c,d,e,f,g,h,k,l,m){var n=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m)}catch(q){Y(n);if(q!==q+0)throw q;X(1,0)}}function Od(a,b,c,d,e,f){var g=Z();try{return D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function De(a,b,c,d,e,f,g,h){var k=Z();try{D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function ke(a,b,c,d,e,f,g,h,k,l,m){var n=Z();try{return D(a)(b,c,d,e,f,g,h,k,l,m)}catch(q){Y(n);if(q!==q+0)throw q;X(1,0)}} +function Ue(a,b,c,d,e,f,g,h,k,l,m,n){var q=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m,n)}catch(x){Y(q);if(x!==x+0)throw x;X(1,0)}}function Zd(a,b,c,d,e,f){var g=Z();try{return D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function ve(a,b,c,d,e){var f=Z();try{D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}}function te(a,b,c,d){var e=Z();try{D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}} +function Oe(a,b,c,d,e,f,g,h,k){var l=Z();try{D(a)(b,c,d,e,f,g,h,k)}catch(m){Y(l);if(m!==m+0)throw m;X(1,0)}}function Ae(a,b,c,d,e){var f=Z();try{D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}}function Yd(a,b,c,d,e){var f=Z();try{return D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}}function $d(a,b,c,d,e,f,g,h){var k=Z();try{return D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}} +function Pe(a,b,c,d,e,f,g,h,k,l,m){var n=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m)}catch(q){Y(n);if(q!==q+0)throw q;X(1,0)}}function je(a,b,c,d,e,f,g,h,k,l){var m=Z();try{return D(a)(b,c,d,e,f,g,h,k,l)}catch(n){Y(m);if(n!==n+0)throw n;X(1,0)}}function ne(a){var b=Z();try{return D(a)()}catch(c){Y(b);if(c!==c+0)throw c;X(1,0);return 0n}}function Le(a,b,c,d,e,f,g,h,k,l,m,n,q,x,y,z){var A=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m,n,q,x,y,z)}catch(F){Y(A);if(F!==F+0)throw F;X(1,0)}} +function Je(a,b,c,d,e,f,g,h,k,l,m,n,q,x,y,z){var A=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m,n,q,x,y,z)}catch(F){Y(A);if(F!==F+0)throw F;X(1,0)}}function We(a,b,c,d,e,f,g,h,k,l,m,n,q,x){var y=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m,n,q,x)}catch(z){Y(y);if(z!==z+0)throw z;X(1,0)}}function Re(a,b,c,d,e,f,g,h,k,l,m){var n=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m)}catch(q){Y(n);if(q!==q+0)throw q;X(1,0)}}function ge(a,b,c,d,e,f,g,h,k,l){var m=Z();try{return D(a)(b,c,d,e,f,g,h,k,l)}catch(n){Y(m);if(n!==n+0)throw n;X(1,0)}} +function Ge(a,b,c,d,e,f){var g=Z();try{D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function xe(a,b,c,d){var e=Z();try{D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}}function Ie(a,b,c,d,e,f,g,h){var k=Z();try{D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function ue(a,b,c,d,e,f,g,h){var k=Z();try{D(a)(b,c,d,e,f,g,h)}catch(l){Y(k);if(l!==l+0)throw l;X(1,0)}}function re(a,b,c,d,e){var f=Z();try{D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0)}} +function oe(a,b,c,d){var e=Z();try{return D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0);return 0n}}function be(a,b,c,d,e,f){var g=Z();try{return D(a)(b,c,d,e,f)}catch(h){Y(g);if(h!==h+0)throw h;X(1,0)}}function pe(a,b,c,d,e){var f=Z();try{return D(a)(b,c,d,e)}catch(g){Y(f);if(g!==g+0)throw g;X(1,0);return 0n}}function Qd(a,b,c,d){var e=Z();try{return D(a)(b,c,d)}catch(f){Y(e);if(f!==f+0)throw f;X(1,0)}} +function le(a,b,c,d,e,f,g,h,k,l,m,n){var q=Z();try{return D(a)(b,c,d,e,f,g,h,k,l,m,n)}catch(x){Y(q);if(x!==x+0)throw x;X(1,0)}}function Ye(a,b,c,d,e,f,g,h,k,l,m,n,q,x,y,z){var A=Z();try{D(a)(b,c,d,e,f,g,h,k,l,m,n,q,x,y,z)}catch(F){Y(A);if(F!==F+0)throw F;X(1,0)}} +function $e(){function a(){p.calledRun=!0;if(!ma){ua=!0;if(!p.noFSInit&&!Ab){var b,c;Ab=!0;b??=p.stdin;c??=p.stdout;d??=p.stderr;b?R("/dev","stdin",b):Tb("/dev/tty","/dev/stdin");c?R("/dev","stdout",null,c):Tb("/dev/tty","/dev/stdout");d?R("/dev","stderr",null,d):Tb("/dev/tty1","/dev/stderr");Xb("/dev/stdin",0);Xb("/dev/stdout",1);Xb("/dev/stderr",1)}af.Db();Bb=!1;oa?.(p);p.onRuntimeInitialized?.();if(p.postRun)for("function"==typeof p.postRun&&(p.postRun=[p.postRun]);p.postRun.length;){var d=p.postRun.shift(); +Ea.push(d)}Da(Ea)}}if(0{setTimeout(()=>p.setStatus(""),1);a()},1)):a()}}var af; +af=await (async function(){function a(c){c=af=c.exports;Hd=c.Eb;Id=p._mbPingRequestFinished=c.Fb;Rc=c.Gb;Jd=c.Hb;Qc=c.Ib;hb=c.Kb;Kd=c.Lb;X=c.Mb;Na=c.Nb;Y=c.Ob;Z=c.Pb;Ld=c.Qb;Md=c.Rb;Oa=c.Sb;Ja=c.Jb;return af}var b={a:Ze};if(p.instantiateWasm)return new Promise(c=>{p.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=p.locateFile?p.locateFile?p.locateFile("BlinkIdVerifyModule.wasm",fa):fa+"BlinkIdVerifyModule.wasm":(new URL("BlinkIdVerifyModule.wasm",import.meta.url)).href;return a((await Ba(b)).instance)}()); +$e();moduleRtn=ua?p:new Promise((a,b)=>{oa=a;pa=b}); +;return moduleRtn}export default createModule; diff --git a/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.wasm b/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.wasm new file mode 100644 index 00000000..ac78e886 Binary files /dev/null and b/packages/blinkid-verify-wasm/dist/simd/BlinkIdVerifyModule.wasm differ diff --git a/packages/blinkid-verify-wasm/dist/size-manifest.json b/packages/blinkid-verify-wasm/dist/size-manifest.json index 659281a4..f40541a8 100644 --- a/packages/blinkid-verify-wasm/dist/size-manifest.json +++ b/packages/blinkid-verify-wasm/dist/size-manifest.json @@ -1,10 +1,10 @@ { "wasm": { - "advanced": 5117133, - "advanced-threads": 5202126 + "simd": 5944324, + "simd-threads": 6020823 }, "data": { - "advanced": 14381309, - "advanced-threads": 14381309 + "simd": 20519559, + "simd-threads": 20519559 } } \ No newline at end of file diff --git a/packages/blinkid-verify-wasm/docs/README.md b/packages/blinkid-verify-wasm/docs/README.md index 7f726d79..0f2207f7 100644 --- a/packages/blinkid-verify-wasm/docs/README.md +++ b/packages/blinkid-verify-wasm/docs/README.md @@ -43,12 +43,10 @@ - [VerificationContext](type-aliases/VerificationContext.md) - [VerificationPolicy](type-aliases/VerificationPolicy.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) ## Variables - [resourceFileTypes](variables/resourceFileTypes.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) diff --git a/packages/blinkid-verify-wasm/docs/type-aliases/WasmSimdVariant.md b/packages/blinkid-verify-wasm/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index 06f51b52..00000000 --- a/packages/blinkid-verify-wasm/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-verify-wasm**](../README.md) - -*** - -[@microblink/blinkid-verify-wasm](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkid-verify-wasm/docs/variables/wasmSimdVariants.md b/packages/blinkid-verify-wasm/docs/variables/wasmSimdVariants.md deleted file mode 100644 index c56687d8..00000000 --- a/packages/blinkid-verify-wasm/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-verify-wasm**](../README.md) - -*** - -[@microblink/blinkid-verify-wasm](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkid-verify-wasm/docs/variables/wasmVariants.md b/packages/blinkid-verify-wasm/docs/variables/wasmVariants.md index 716b93f1..26969b9e 100644 --- a/packages/blinkid-verify-wasm/docs/variables/wasmVariants.md +++ b/packages/blinkid-verify-wasm/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkid-verify-wasm/package.json b/packages/blinkid-verify-wasm/package.json index 3c388285..555be3f0 100644 --- a/packages/blinkid-verify-wasm/package.json +++ b/packages/blinkid-verify-wasm/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid-verify-wasm", "private": true, - "version": "3.21.1", + "version": "3.22.0-next", "scripts": { "build": "tsc", "build:publish": "tsc", @@ -23,8 +23,8 @@ "./package.json": "./package.json" }, "imports": { - "#BlinkIdVerifyModule": "./dist/advanced/BlinkIdVerifyModule.js", - "#BlinkIdVerifyModuleTest": "./dist_test/advanced/BlinkIdVerifyModule_Test.js" + "#BlinkIdVerifyModule": "./dist/simd/BlinkIdVerifyModule.js", + "#BlinkIdVerifyModuleTest": "./dist_test/simd/BlinkIdVerifyModule_Test.js" }, "files": [ "dist", diff --git a/packages/blinkid-verify-wasm/vite.config.mts b/packages/blinkid-verify-wasm/vite.config.mts index 51ceb342..19d6cd19 100644 --- a/packages/blinkid-verify-wasm/vite.config.mts +++ b/packages/blinkid-verify-wasm/vite.config.mts @@ -3,7 +3,7 @@ import path from "path"; import { playwright } from "@vitest/browser-playwright"; export default defineConfig({ - publicDir: path.resolve(__dirname, "dist/advanced"), + publicDir: path.resolve(__dirname, "dist/simd"), test: { browser: { provider: playwright(), diff --git a/packages/blinkid-verify-worker/CHANGELOG.md b/packages/blinkid-verify-worker/CHANGELOG.md index 7d0dfd66..a7ad2cc1 100644 --- a/packages/blinkid-verify-worker/CHANGELOG.md +++ b/packages/blinkid-verify-worker/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/blinkid-verify-worker +## 3.22.0-next + +### Patch Changes + +- Updated dependencies + - @microblink/analytics@2.0.2 + - @microblink/blinkid-verify-wasm@3.22.0-next + - @microblink/worker-common@1.0.5 + ## 3.21.1 ### Patch Changes diff --git a/packages/blinkid-verify-worker/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md b/packages/blinkid-verify-worker/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md index 6fa6f6ff..ba87e5a2 100644 --- a/packages/blinkid-verify-worker/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md +++ b/packages/blinkid-verify-worker/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md @@ -76,7 +76,7 @@ Used for analytics and tracking purposes. ### wasmVariant? -> `optional` **wasmVariant**: `WasmSimdVariant` +> `optional` **wasmVariant**: `WasmVariant` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-verify-worker/docs/type-aliases/LoadWasmParams.md b/packages/blinkid-verify-worker/docs/type-aliases/LoadWasmParams.md index ec681db4..fdaff2ad 100644 --- a/packages/blinkid-verify-worker/docs/type-aliases/LoadWasmParams.md +++ b/packages/blinkid-verify-worker/docs/type-aliases/LoadWasmParams.md @@ -26,4 +26,4 @@ The load Wasm params. ### wasmVariant -> **wasmVariant**: `WasmSimdVariant` +> **wasmVariant**: `WasmVariant` diff --git a/packages/blinkid-verify-worker/package.json b/packages/blinkid-verify-worker/package.json index a1e9866f..26586d72 100644 --- a/packages/blinkid-verify-worker/package.json +++ b/packages/blinkid-verify-worker/package.json @@ -2,7 +2,7 @@ "name": "@microblink/blinkid-verify-worker", "description": "Provides a worker which runs the BlinkID WebAssembly in separate thread", "private": true, - "version": "3.21.1", + "version": "3.22.0-next", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", "build:dev": "concurrently pnpm:build:js-dev pnpm:build:types", diff --git a/packages/blinkid-verify-worker/src/BlinkIdVerifyWorker.ts b/packages/blinkid-verify-worker/src/BlinkIdVerifyWorker.ts index f8961d9c..134daa76 100644 --- a/packages/blinkid-verify-worker/src/BlinkIdVerifyWorker.ts +++ b/packages/blinkid-verify-worker/src/BlinkIdVerifyWorker.ts @@ -11,7 +11,7 @@ import type { BlinkIdVerifyWasmModule, CapturedFrame, EmscriptenModuleFactory, - WasmSimdVariant, + WasmVariant, BlinkIdVerifyProcessResult, } from "@microblink/blinkid-verify-wasm"; import type { Ping } from "@microblink/analytics/ping"; @@ -26,7 +26,6 @@ import { import { getCrossOriginWorkerURL } from "@microblink/worker-common/getCrossOriginWorkerURL"; import { getWasmFileSize, - type SizeManifest, type GetWasmFileSizeParams, } from "@microblink/worker-common/getWasmFileSize"; import { isIOS } from "@microblink/worker-common/isSafari"; @@ -161,7 +160,7 @@ export class BlinkIdVerifyWorker { const wasmMemory = new WebAssembly.Memory({ initial: mbToWasmPages(initialMemory), maximum: mbToWasmPages(2048), - shared: wasmVariant === "advanced-threads", + shared: wasmVariant === "simd-threads", }); // Create progress trackers for each download @@ -222,7 +221,7 @@ export class BlinkIdVerifyWorker { }; const getExpectedSize = (params: GetWasmFileSizeParams) => - getWasmFileSize(params, sizeManifest as SizeManifest); //TODO(Modify SizeManifest type to avoid basic) + getWasmFileSize(params, sizeManifest); // Replace simple fetch with progress tracking for both wasm and data downloads const [preloadedWasm, preloadedData] = await Promise.all([ @@ -368,8 +367,7 @@ export class BlinkIdVerifyWorker { this.progressStatusCallback = progressCallback; this.#userId = settings.userId; - const wasmVariant = (settings.wasmVariant ?? - (await detectWasmFeatures())) as WasmSimdVariant; + const wasmVariant = settings.wasmVariant ?? (await detectWasmFeatures()); await this.#loadWasm({ resourceUrl: resourcesPath, @@ -392,12 +390,14 @@ export class BlinkIdVerifyWorker { // Queue init pinglet before remote license check; flush only if init fails this.reportPinglet({ schemaName: "ping.sdk.init.start", - schemaVersion: "1.3.0", + schemaVersion: "2.0.0", sessionNumber: 0, data: { packageName: self.location.hostname, platform: "Emscripten", - platformDetails: wasmVariant, + // TODO: update this after pinglets schema is updated + platformDetails: + wasmVariant === "simd" ? "advanced" : "advanced-threads", product: "DocumentVerification", userId: this.#userId, ...getMicroblinkProxyPingFlags( @@ -898,7 +898,7 @@ export type BlinkIdVerifyWorkerInitSettings = { * The WebAssembly module variant to use. * Different variants may offer different performance/size tradeoffs. */ - wasmVariant?: WasmSimdVariant; + wasmVariant?: WasmVariant; /** * The initial memory allocation for the Wasm module, in megabytes. @@ -912,7 +912,7 @@ export type BlinkIdVerifyWorkerInitSettings = { */ export type LoadWasmParams = { resourceUrl: string; - wasmVariant: WasmSimdVariant; + wasmVariant: WasmVariant; initialMemory?: number; }; diff --git a/packages/blinkid-verify/CHANGELOG.md b/packages/blinkid-verify/CHANGELOG.md index 0540e60a..b46bdf4b 100644 --- a/packages/blinkid-verify/CHANGELOG.md +++ b/packages/blinkid-verify/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/blinkid-verify +## 3.22.0-next + +### Minor Changes + +- Updated the minimum browser requirements after removing the non-SIMD `basic` Wasm build. The SDKs now require WebAssembly SIMD support: Chrome/Edge 91+, Firefox 89+, Safari/iOS Safari 16.4+, and Samsung Internet 16+. +- Updated dependencies + - @microblink/blinkid-verify-core@3.22.0-next + - @microblink/blinkid-verify-ux-manager@3.22.0-next + ## 3.21.1 ### Patch Changes diff --git a/packages/blinkid-verify/README.md b/packages/blinkid-verify/README.md index 100f5f91..77be4977 100644 --- a/packages/blinkid-verify/README.md +++ b/packages/blinkid-verify/README.md @@ -102,30 +102,30 @@ localhost. ### WebAssembly runtime -The SDK ships two Wasm build variants (`advanced` and `advanced-threads`). The +The SDK ships two Wasm build variants (`simd` and `simd-threads`). The runtime selects the best supported variant automatically. -#### `advanced` +#### `simd` Requires the Emscripten-generated Wasm feature set used by the SDK plus [fixed-width SIMD](https://web-platform-dx.github.io/web-features-explorer/features/wasm-simd/). -#### `advanced-threads` +#### `simd-threads` -Requires all `advanced` features plus +Requires all `simd` features plus [Wasm threads and atomics](https://caniuse.com/wasm-threads). Multithreaded Wasm also requires cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp`). -Safari is excluded from `advanced-threads` even when it reports Wasm thread -support. Emscripten `advanced-threads` builds use pthreads that spawn workers +Safari is excluded from `simd-threads` even when it reports Wasm thread +support. Emscripten `simd-threads` builds use pthreads that spawn workers from inside a worker, and Safari historically lacked reliable nested worker support when Wasm threads shipped in Safari 16. There are also known Safari issues with shared memory in Emscripten pthread builds ([emscripten-core/emscripten#19374](https://github.com/emscripten-core/emscripten/issues/19374)). -For these reasons the runtime falls back to the single-threaded `advanced` -variant on Safari instead of loading `advanced-threads`. +For these reasons the runtime falls back to the single-threaded `simd` +variant on Safari instead of loading `simd-threads`. ### Firefox for Android diff --git a/packages/blinkid-verify/docs/README.md b/packages/blinkid-verify/docs/README.md index 9a02190c..7038498f 100644 --- a/packages/blinkid-verify/docs/README.md +++ b/packages/blinkid-verify/docs/README.md @@ -146,7 +146,6 @@ - [VideoFrameProcessorInitOptions](type-aliases/VideoFrameProcessorInitOptions.md) - [VideoResolutionName](type-aliases/VideoResolutionName.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) - [WorkerScanningSession](type-aliases/WorkerScanningSession.md) @@ -169,7 +168,6 @@ - [resourceFileTypes](variables/resourceFileTypes.md) - [videoResolutions](variables/videoResolutions.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) ## Functions diff --git a/packages/blinkid-verify/docs/classes/AnalyticService.md b/packages/blinkid-verify/docs/classes/AnalyticService.md index f25e3146..90bc8dee 100644 --- a/packages/blinkid-verify/docs/classes/AnalyticService.md +++ b/packages/blinkid-verify/docs/classes/AnalyticService.md @@ -293,6 +293,16 @@ Provides a clean interface for tracking user interactions and events *** +### logInactivityTimeoutEvent() + +> **logInactivityTimeoutEvent**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logInfo() > **logInfo**(`logMessage`): `Promise`\<`void`\> @@ -329,6 +339,16 @@ Provides a clean interface for tracking user interactions and events *** +### logUnsupportedBarcodeTimeout() + +> **logUnsupportedBarcodeTimeout**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logWarning() > **logWarning**(`logMessage`): `Promise`\<`void`\> diff --git a/packages/blinkid-verify/docs/functions/createBlinkIdVerify.md b/packages/blinkid-verify/docs/functions/createBlinkIdVerify.md index d669f71e..629f8bf7 100644 --- a/packages/blinkid-verify/docs/functions/createBlinkIdVerify.md +++ b/packages/blinkid-verify/docs/functions/createBlinkIdVerify.md @@ -105,7 +105,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-verify/docs/functions/loadBlinkIdVerifyCore.md b/packages/blinkid-verify/docs/functions/loadBlinkIdVerifyCore.md index d0a37d47..4a59ab10 100644 --- a/packages/blinkid-verify/docs/functions/loadBlinkIdVerifyCore.md +++ b/packages/blinkid-verify/docs/functions/loadBlinkIdVerifyCore.md @@ -67,7 +67,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-verify/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md b/packages/blinkid-verify/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md index 50d345e6..3e03423a 100644 --- a/packages/blinkid-verify/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md +++ b/packages/blinkid-verify/docs/type-aliases/BlinkIdVerifyWorkerInitSettings.md @@ -76,7 +76,7 @@ Used for analytics and tracking purposes. ### wasmVariant? -> `optional` **wasmVariant**: [`WasmSimdVariant`](WasmSimdVariant.md) +> `optional` **wasmVariant**: [`WasmVariant`](WasmVariant.md) The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid-verify/docs/type-aliases/LoadWasmParams.md b/packages/blinkid-verify/docs/type-aliases/LoadWasmParams.md index c4430098..9b5a2228 100644 --- a/packages/blinkid-verify/docs/type-aliases/LoadWasmParams.md +++ b/packages/blinkid-verify/docs/type-aliases/LoadWasmParams.md @@ -26,4 +26,4 @@ The load Wasm params. ### wasmVariant -> **wasmVariant**: [`WasmSimdVariant`](WasmSimdVariant.md) +> **wasmVariant**: [`WasmVariant`](WasmVariant.md) diff --git a/packages/blinkid-verify/docs/type-aliases/PingSdkInitStart.md b/packages/blinkid-verify/docs/type-aliases/PingSdkInitStart.md index 90ac44a5..a3a20d75 100644 --- a/packages/blinkid-verify/docs/type-aliases/PingSdkInitStart.md +++ b/packages/blinkid-verify/docs/type-aliases/PingSdkInitStart.md @@ -6,6 +6,6 @@ # Type Alias: PingSdkInitStart -> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"1.3.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> +> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"2.0.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> Ping type for ping.sdk.init.start diff --git a/packages/blinkid-verify/docs/type-aliases/PingUxEvent.md b/packages/blinkid-verify/docs/type-aliases/PingUxEvent.md index e7abf852..7dde6e2e 100644 --- a/packages/blinkid-verify/docs/type-aliases/PingUxEvent.md +++ b/packages/blinkid-verify/docs/type-aliases/PingUxEvent.md @@ -6,6 +6,6 @@ # Type Alias: PingUxEvent -> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.1.0"`, [`PingUxEventData`](PingUxEventData.md)\> +> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.2.0"`, [`PingUxEventData`](PingUxEventData.md)\> Ping type for ping.sdk.ux.event diff --git a/packages/blinkid-verify/docs/type-aliases/WasmSimdVariant.md b/packages/blinkid-verify/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index a76fdd1d..00000000 --- a/packages/blinkid-verify/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-verify**](../README.md) - -*** - -[@microblink/blinkid-verify](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkid-verify/docs/variables/wasmSimdVariants.md b/packages/blinkid-verify/docs/variables/wasmSimdVariants.md deleted file mode 100644 index 0d1c5ef8..00000000 --- a/packages/blinkid-verify/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-verify**](../README.md) - -*** - -[@microblink/blinkid-verify](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkid-verify/docs/variables/wasmVariants.md b/packages/blinkid-verify/docs/variables/wasmVariants.md index 2f084c02..c7c80ca0 100644 --- a/packages/blinkid-verify/docs/variables/wasmVariants.md +++ b/packages/blinkid-verify/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkid-verify/package.json b/packages/blinkid-verify/package.json index 27e92e03..e566ddb1 100644 --- a/packages/blinkid-verify/package.json +++ b/packages/blinkid-verify/package.json @@ -3,7 +3,7 @@ "description": "All-in-one BlinkID Verify browser SDK for fast and accurate ID verification in web applications.", "author": "Microblink", "license": "ISC", - "version": "3.21.1", + "version": "3.22.0-next", "type": "module", "main": "dist/blinkid-verify.js", "module": "./dist/blinkid-verify.js", @@ -20,7 +20,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm pack-check", + "publish-test": "pnpm pack-check", "type-rollup": "api-extractor run --local", "lint": "concurrently pnpm:lint:types pnpm:lint:eslint", "lint:eslint": "eslint ./src --max-warnings 0", @@ -43,10 +43,10 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", - "@microblink/tsconfig": "workspace:*", + "@arethetypeswrong/cli": "0.18.3", "@microblink/repo-utils": "workspace:*", "@microblink/test-utils": "workspace:*", + "@microblink/tsconfig": "workspace:*", "@microsoft/api-extractor": "^7.52.4", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", @@ -106,4 +106,4 @@ "Safari >= 16.4", "iOS >= 16.4" ] -} \ No newline at end of file +} diff --git a/packages/blinkid-verify/src/createBlinkIdVerifyUi.test.ts b/packages/blinkid-verify/src/createBlinkIdVerifyUi.test.ts index 44e8f5e6..695cbc76 100644 --- a/packages/blinkid-verify/src/createBlinkIdVerifyUi.test.ts +++ b/packages/blinkid-verify/src/createBlinkIdVerifyUi.test.ts @@ -156,7 +156,7 @@ describe("createBlinkIdVerify", () => { microblinkProxyUrl: "https://proxy.example.com", initialMemory: 32, resourcesLocation: "https://resources.example.com", - wasmVariant: "advanced", + wasmVariant: "simd", }); expect(loadBlinkIdVerifyCore).toHaveBeenCalledTimes(1); @@ -165,7 +165,7 @@ describe("createBlinkIdVerify", () => { microblinkProxyUrl: "https://proxy.example.com", initialMemory: 32, resourcesLocation: "https://resources.example.com", - wasmVariant: "advanced", + wasmVariant: "simd", }); }); diff --git a/packages/blinkid-wasm/CHANGELOG.md b/packages/blinkid-wasm/CHANGELOG.md index 71864a45..690b1a5a 100644 --- a/packages/blinkid-wasm/CHANGELOG.md +++ b/packages/blinkid-wasm/CHANGELOG.md @@ -1,5 +1,20 @@ # @microblink/blinkid-wasm +## 8001.0.0 + +### Major Changes + +- **Breaking:** `DocumentClassInfo.country`, `region`, and `type` are now wrapper objects (`{ id?, rawValue }`) instead of plain string values. `id` carries the strongly-typed kebab-case value (`Country` / `Region` / `DocumentType`) when the document class is known at build time; `rawValue` always carries the raw classification token from the document knowledge database, including OTA-delivered document classes unknown at build time. Update comparisons such as `documentClassInfo.country === "usa"` to `documentClassInfo.country?.id === "usa"`, and use `id ?? rawValue` when displaying values. This affects `redactionSettingsResolver`, `addDocumentClassFilter`, `addOnDocumentFilteredCallback`, and the `documentClassInfo` fields on process and scanning results. + - Added the `DocumentClassComponent`, `DocumentClassCountry`, `DocumentClassRegion`, and `DocumentClassDocumentType` types. + - `countryName` and the ISO country-code fields on `DocumentClassInfo` are unchanged (plain strings, empty when unknown), and `documentClassInfo` on results remains non-optional — an unclassified document still yields `undefined` components and empty strings. + - Updated the native bindings to the new document classification API (enum identifiers renamed to `CountryID` / `RegionID` / `DocumentTypeID`; document class construction now goes through the document knowledge database). Unrecognized classification strings passed to `getDefaultRedactionSettings` no longer abort the Wasm module; they are forwarded as raw values instead. +- Removed the `basic` Wasm build for full and lightweight feature variants. + - Renamed shipped Wasm build directories: `advanced` → `simd` and `advanced-threads` → `simd-threads`. +- Renamed `DocumentClassInfo.type` to `DocumentClassInfo.documentType` to align with other platforms. + - Migration: replace `documentClassInfo.type` with `documentClassInfo.documentType`. +- Updated the Emscripten toolchain used to build the BlinkID WebAssembly module to v6.x. +- Fixed compilation with newer Emscripten toolchains by replacing the deprecated lowercase `__EMSCRIPTEN_major__` / `__EMSCRIPTEN_minor__` / `__EMSCRIPTEN_tiny__` macros with their uppercase equivalents. + ## 8000.0.1 ### Patch Changes diff --git a/packages/blinkid-wasm/README.md b/packages/blinkid-wasm/README.md index 0d16d8a6..85d4bfb7 100644 --- a/packages/blinkid-wasm/README.md +++ b/packages/blinkid-wasm/README.md @@ -11,24 +11,13 @@ This package contains the WebAssembly (Wasm) and native bindings for the BlinkID ## Browser Support (Wasm Runtime) -This package ships three Wasm build variants (`basic`, `advanced`, and -`advanced-threads`). The runtime selects the best supported variant automatically. +This package ships two Wasm build variants (`simd` and `simd-threads`). The +runtime selects the best supported variant automatically. -### `basic` +### `simd` Requires mutable globals, reference types, bulk memory, non-trapping float-to-int -conversions, and sign-extension operators. - -- Chrome / Chromium 96 (desktop and Android) -- Edge 96 -- Opera 82 -- Firefox 79 (desktop and Android) -- Safari 15.1 (macOS) -- iOS Safari 15.1 - -### `advanced` - -Requires all `basic` features plus +conversions, sign-extension operators, and [fixed-width SIMD](https://web-platform-dx.github.io/web-features-explorer/features/wasm-simd/). - Chrome / Chromium 96 (desktop and Android) @@ -38,9 +27,9 @@ Requires all `basic` features plus - Safari 16.4 (macOS) - iOS Safari 16.4 -### `advanced-threads` +### `simd-threads` -Requires all `advanced` features plus +Requires all `simd` features plus [Wasm threads and atomics](https://caniuse.com/wasm-threads). Multithreaded Wasm also requires cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin` and @@ -50,22 +39,22 @@ also requires cross-origin isolation headers - Edge 96 - Opera 82 - Firefox 89 (desktop and Android) -- Safari (macOS): not selected (uses `advanced`) -- iOS Safari: not selected (uses `advanced`) +- Safari (macOS): not selected (uses `simd`) +- iOS Safari: not selected (uses `simd`) Safari is excluded even when it reports Wasm thread support. Emscripten -`advanced-threads` builds use pthreads that spawn workers from inside a worker, +`simd-threads` builds use pthreads that spawn workers from inside a worker, and Safari historically lacked reliable nested worker support when Wasm threads shipped in Safari 16. There are also known Safari issues with shared memory in Emscripten pthread builds ([emscripten-core/emscripten#19374](https://github.com/emscripten-core/emscripten/issues/19374)). -For these reasons the runtime falls back to the single-threaded `advanced` -variant on Safari instead of loading `advanced-threads`. +For these reasons the runtime falls back to the single-threaded `simd` +variant on Safari instead of loading `simd-threads`. -These minimums combine Emscripten 4.0.16 generated runtime defaults (see -[`src/settings.js`](https://raw.githubusercontent.com/emscripten-core/emscripten/4.0.16/src/settings.js) +These minimums combine Emscripten 6.0.2 generated runtime defaults (see +[`src/settings.js`](https://raw.githubusercontent.com/emscripten-core/emscripten/6.0.2/src/settings.js) and -[`tools/feature_matrix.py`](https://raw.githubusercontent.com/emscripten-core/emscripten/4.0.16/tools/feature_matrix.py)) +[`tools/feature_matrix.py`](https://raw.githubusercontent.com/emscripten-core/emscripten/6.0.2/tools/feature_matrix.py)) with baseline Wasm feature support from the [WebDX reference types](https://web-platform-dx.github.io/web-features-explorer/features/wasm-reference-types/), [WebDX non-trapping float-to-int](https://web-platform-dx.github.io/web-features-explorer/features/wasm-non-trapping-float-to-int/), diff --git a/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.js b/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.js deleted file mode 100644 index e709f636..00000000 --- a/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.js +++ /dev/null @@ -1,142 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var h=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,m=ba&&self.name?.startsWith("em-pthread");let ca;(ca=h).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);h.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof m&&m||a||async function(b){async function c(l,n){var q;(q=h).dataFileDownloads??(q.dataFileDownloads={});try{var p=await fetch(l)}catch(x){throw Error(`Network Error: ${l}`,{e:x});}if(!p.ok)throw Error(`${p.status}: ${p.url}`);q=[];n=Number(p.headers.get("Content-Length")??n);let u=0;h.setStatus?.("Downloading data...");for(p=p.body.getReader();;){var {done:z,value:v}=await p.read();if(z)break; -q.push(v);u+=v.length;h.dataFileDownloads[l]={loaded:u,total:n};let x=0,F=0;for(var w of Object.values(h.dataFileDownloads))x+=w.loaded,F+=w.total;h.setStatus?.(`Downloading data... (${x}/${F})`)}l=new Uint8Array(q.map(x=>x.length).reduce((x,F)=>x+F,0));w=0;for(const x of q)l.set(x,w),w+=x.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkid",!0,!0);for(var n of b.files)l.addRunDependency(`fp ${n.filename}`);l.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.data"); -l.preloadResults??(l.preloadResults={});l.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.data"]={ld:!1};k||=await g;(async function(q){if(!q)throw Error("Loading data file failed.");if(q.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");q=new Uint8Array(q);for(var p of b.files){var u=p.filename;l.FS_createDataFile(u,null,q.subarray(p.start,p.end),!0,!0,!0);l.removeRunDependency(`fp ${u}`)}l.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.data")})(k)} -"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=h.locateFile?.("BlinkIdModule.data","")??"BlinkIdModule.data",f=b.remote_package_size,g,k=h.getPreloadedPackage?.(e,f);k||(g=c(e,f));if(h.calledRun)d(h);else{let l;((l=h).preRun??(l.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop", -start:0,end:103198},{filename:"/microblink/blinkid/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/microblink/blinkid/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop",start:106933,end:451389},{filename:"/microblink/blinkid/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/microblink/blinkid/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop", -start:775876,end:1044597},{filename:"/microblink/blinkid/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop",start:1044597,end:1051046},{filename:"/microblink/blinkid/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop",start:1051046,end:2476219},{filename:"/microblink/blinkid/Model_8326c5065a6d8451d6d004db73babf4a4a9f502c68643a14934cc098d04bf44f.strop",start:2476219,end:2863913},{filename:"/microblink/blinkid/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop", -start:2863913,end:3890768},{filename:"/microblink/blinkid/Model_93607315418f2c5d3abec06d0b2a81e69abeb1b8d0506ed6373d7d74bd5e4b05.strop",start:3890768,end:5135759},{filename:"/microblink/blinkid/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop",start:5135759,end:5431561},{filename:"/microblink/blinkid/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:5431561,end:5438057},{filename:"/microblink/blinkid/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop", -start:5438057,end:9543906},{filename:"/microblink/blinkid/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop",start:9543906,end:9669110},{filename:"/microblink/blinkid/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop",start:9669110,end:9743555},{filename:"/microblink/blinkid/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:9743555,end:9818957},{filename:"/microblink/blinkid/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop", -start:9818957,end:10482010},{filename:"/microblink/blinkid/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:10482010,end:10508308},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:10508308,end:10528777},{filename:"/microblink/blinkid/serialized_embedder_db_1.12.bin",start:10528777,end:13806438}],remote_package_size:13806438})})();h.onAbort=function(a){r("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){r("Stacktrace: "+b.stack)}}; -h="undefined"!==typeof h?h:{};(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!h.locateFile&&(h.locateFile=function(d,e){return"BlinkIdModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),r=console.error.bind(console),ka,la,ma=!1,na;function t(){oa.buffer!=A.buffer&&pa()}var qa,ra,sa; -if(m){var ta=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.lb;if("load"===d){let e=[];self.onmessage=f=>e.push(f);sa=()=>{postMessage({lb:"loaded"});for(let f of e)a(f);self.onmessage=a};for(const f of c.Dc)if(!h[f]||h[f].proxy)h[f]=(...g)=>{postMessage({lb:"callHandler",Cc:f,qc:g})},"print"==f&&(ja=h[f]),"printErr"==f&&(r=h[f]);oa=c.bd;pa();la=c.cd;ua();va()}else if("run"===d){wa(c.hb);xa(c.hb,0,0,1,0,0);ya();za(c.hb);ta||(Ba(),ta=!0);try{Ca(c.Zc,c.Qb)}catch(e){if("unwind"!= -e)throw e;}}else"setimmediate"!==c.target&&("checkMailbox"===d?ta&&Da():d&&(r(`worker: received unknown command ${d}`),r(c)))}catch(e){throw Ea(),e;}}self.onmessage=a}var A,B,C,Fa,E,H,Ga,Ha,K,Ia,Ja=!1;function pa(){var a=oa.buffer;A=new Int8Array(a);C=new Int16Array(a);B=new Uint8Array(a);Fa=new Uint16Array(a);E=new Int32Array(a);H=new Uint32Array(a);Ga=new Float32Array(a);Ha=new Float64Array(a);K=new BigInt64Array(a);Ia=new BigUint64Array(a)}var oa; -function Ka(){Ja=!0;if(m)sa();else{if(!h.noFSInit&&!La){var a,b,c;La=!0;a??=h.stdin;b??=h.stdout;c??=h.stderr;a?Ma("/dev","stdin",a):Na("/dev/tty","/dev/stdin");b?Ma("/dev","stdout",null,b):Na("/dev/tty","/dev/stdout");c?Ma("/dev","stderr",null,c):Na("/dev/tty1","/dev/stderr");Oa("/dev/stdin",0);Oa("/dev/stdout",1);Oa("/dev/stderr",1)}Pa.ra();Qa=!1}} -function Ra(a){h.onAbort?.(a);a="Aborted("+a+")";r(a);ma=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ra?.(a);throw a;}var Sa;async function Ta(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==Sa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a} -async function Va(a,b){try{var c=await Ta(a);return await WebAssembly.instantiate(c,b)}catch(d){r(`failed to asynchronously prepare wasm: ${d}`),Ra(d)}}async function Wa(a){var b=Sa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){r(`wasm streaming compile failed: ${d}`),r("falling back to ArrayBuffer instantiation")}return Va(b,a)} -function Xa(){Ya={F:Za,N:$a,x:ab,aa:bb,ba:cb,_:db,Z:eb,y:fb,$:gb,fa:hb,e:ib,B:jb,C:kb,oa:lb,n:mb,pa:nb,A:ob,k:pb,m:qb,h:rb,g:sb,qa:tb,s:ub,f:vb,b:wb,D:xb,W:yb,L:zb,P:Ab,H:Bb,t:Cb,V:za,da:Db,d:Eb,ja:Fb,ka:Gb,i:Hb,O:Ib,c:Jb,na:Kb,ma:Lb,la:Mb,E:Nb,j:Ob,Q:Pb,R:Qb,I:Rb,S:Sb,o:Tb,T:Ub,p:Vb,u:Wb,ea:Xb,ca:Yb,ga:Zb,M:$b,l:ac,z:bc,K:cc,ha:dc,X:ec,Y:fc,r:gc,q:hc,w:ic,U:jc,v:kc,ia:lc,a:oa,G:mc,J:nc};return{a:Ya}} -async function ua(){function a(d,e){Pa=d.exports;oc.push(Pa.xa);d=Pa;pc=d.sa;Ba=d.ta;qc=d.ua;rc=d.va;sc=d.wa;tc=d.ya;xa=d.Aa;Ea=d.Ba;uc=d.Ca;vc=d.Da;wc=d.Ea;xc=d.Fa;yc=d.Ga;zc=d.Ha;Ac=d.Ia;Bc=d.Ja;Cc=d.Ka;Dc=d.za;la=e;return Pa}var b=Xa();if(h.instantiateWasm)return new Promise(d=>{h.instantiateWasm(b,(e,f)=>{d(a(e,f))})});if(m){var c=new WebAssembly.Instance(la,Xa());return a(c,la)}Sa??=h.locateFile?h.locateFile?h.locateFile("BlinkIdModule.wasm",fa):fa+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm", -import.meta.url)).href;return function(d){return a(d.instance,d.module)}(await Wa(b))}class Ec{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Fc=a=>{a.terminate();a.onmessage=()=>{}},Gc=a=>{for(;0{Ic--;h.monitorRunDependencies?.(Ic);if(0==Ic&&Jc){var a=Jc;Jc=null;a()}},Lc=()=>{Ic++;h.monitorRunDependencies?.(Ic)},Rc=a=>{0==Mc.length&&(Nc(),Oc(Mc[0]));var b=Mc.pop();if(!b)return 6;Pc.push(b);Qc[a.hb]=b;b.hb=a.hb;b.postMessage({lb:"run",Zc:a.Yc,Qb:a.Qb,hb:a.hb},a.pc);return 0},L=0,N=(a,b,...c)=>{for(var d=2*c.length,e=Cc(),f=Bc(8*d),g=f>>3,k=0;k{na=a;if(m)throw Tc(a),"unwind";mc(a)},Mc=[],Pc=[],oc=[],Qc={}; -function Uc(){for(var a=navigator.hardwareConcurrency;a--;)Nc();Hc.push(async()=>{var b=Vc();Lc("loading-workers");await b;Kc("loading-workers")})}var Wc=a=>{var b=a.hb;delete Qc[b];Mc.push(a);Pc.splice(Pc.indexOf(a),1);a.hb=0;vc(b)};function ya(){oc.forEach(a=>a())} -var Oc=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.lb;if(g.Nb&&g.Nb!=qc()){var k=Qc[g.Nb];k?k.postMessage(g,g.pc):r(`Internal error! Worker sent a message "${f}" to target pthread ${g.Nb}, but that thread no longer exists!`)}else if("checkMailbox"===f)Da();else if("spawnThread"===f)Rc(g);else if("cleanupThread"===f)Xc(()=>{Wc(Qc[g.$c])});else if("loaded"===f)a.loaded=!0,b(a);else if("setimmediate"===g.target)a.postMessage(g);else if("callHandler"===f)h[g.Cc](...g.qc);else f&&r(`worker sent an unknown command ${f}`)}; -a.onerror=f=>{r(`${"worker sent an error!"} ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onExit","onAbort","print","printErr"],e;for(e of d)h.propertyIsEnumerable(e)&&c.push(e);a.postMessage({lb:"load",Dc:c,bd:oa,cd:la})});async function Vc(){if(!m)return Promise.all(Mc.map(Oc))} -function Nc(){if(h.mainScriptUrlOrBlob){var a=h.mainScriptUrlOrBlob;"string"!=typeof a&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkIdModule.js",import.meta.url),{type:"module",name:"em-pthread"});Mc.push(a)}var Yc=[];function wa(a){var b=(t(),H)[a+52>>2];a=(t(),H)[a+56>>2];zc(b,b-a);Ac(b)}var Zc=[],$c=a=>{var b=Zc[a];b||(Zc[a]=b=Dc.get(a));return b},Ca=(a,b)=>{Sc=L=0;a=$c(a)(b);Sc||0$c(a)(b); -function ad(a,b,c,d){return m?N(2,1,a,b,c,d):$a(a,b,c,d)} -var bc=()=>!!globalThis.SharedArrayBuffer,$a=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(m&&0===e.length)return ad(a,b,c,d);a={Yc:c,hb:a,Qb:d,pc:e};return m?(a.lb="spawnThread",postMessage(a,e),0):Rc(a)},cd=()=>{var a=(t(),E)[+bd>>2];bd+=4;return a},dd=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},ed=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=dd(a.split("/").filter(d=> -!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},fd=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},gd=()=>a=>a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),hd=a=>{(hd=gd())(a)},jd=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b; -c="/"===c.charAt(0)}b=dd(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},kd=globalThis.TextDecoder&&new TextDecoder,ld=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},md=(a,b=0,c,d)=>{c=ld(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},nd=[],od=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},pd=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>= -g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},qd=a=>{var b=Array(od(a)+1);a=pd(a,b,0,b.length);b.length=a;return b},rd=[];function sd(a,b){rd[a]={input:[],output:[],nb:b};td(a,ud)} -var ud={open(a){var b=rd[a.node.Ab];if(!b)throw new O(43);a.Qa=b;a.seekable=!1},close(a){a.Qa.nb.Fb(a.Qa)},Fb(a){a.Qa.nb.Fb(a.Qa)},read(a,b,c,d){if(!a.Qa||!a.Qa.nb.jc)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=tc(65536,a);b&&(t(),B).fill(0,b,b+a);return b},P={gb:null,mb(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.gb||(P.gb={dir:{node:{eb:P.Oa.eb,kb:P.Oa.kb,wb:P.Oa.wb,Ib:P.Oa.Ib,nc:P.Oa.nc,Ob:P.Oa.Ob,oc:P.Oa.oc,Yb:P.Oa.Yb,Mb:P.Oa.Mb},stream:{fb:P.Ma.fb}}, -file:{node:{eb:P.Oa.eb,kb:P.Oa.kb},stream:{fb:P.Ma.fb,read:P.Ma.read,write:P.Ma.write,xb:P.Ma.xb,Jb:P.Ma.Jb}},link:{node:{eb:P.Oa.eb,kb:P.Oa.kb,Bb:P.Oa.Bb},stream:{}},cc:{node:{eb:P.Oa.eb,kb:P.Oa.kb},stream:yd}});c=zd(a,b,c,d);Q(c.mode)?(c.Oa=P.gb.dir.node,c.Ma=P.gb.dir.stream,c.Na={}):32768===(c.mode&61440)?(c.Oa=P.gb.file.node,c.Ma=P.gb.file.stream,c.Ta=0,c.Na=null):40960===(c.mode&61440)?(c.Oa=P.gb.link.node,c.Ma=P.gb.link.stream):8192===(c.mode&61440)&&(c.Oa=P.gb.cc.node,c.Ma=P.gb.cc.stream); -c.pb=c.ab=c.$a=Date.now();a&&(a.Na[b]=c,a.pb=a.ab=a.$a=c.pb);return c},md(a){return a.Na?a.Na.subarray?a.Na.subarray(0,a.Ta):new Uint8Array(a.Na):new Uint8Array(0)},Oa:{eb(a){var b={};b.uc=8192===(a.mode&61440)?a.id:1;b.Fc=a.id;b.mode=a.mode;b.Oc=1;b.uid=0;b.Bc=0;b.Ab=a.Ab;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.Ta:40960===(a.mode&61440)?a.link.length:0;b.pb=new Date(a.pb);b.ab=new Date(a.ab);b.$a=new Date(a.$a);b.rc=4096;b.sc=Math.ceil(b.size/b.rc);return b},kb(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Ta!=b&&(0==b?(a.Na=null,a.Ta=0):(c=a.Na,a.Na=new Uint8Array(b),c&&a.Na.set(c.subarray(0,Math.min(b,a.Ta))),a.Ta=b)))},wb(){P.Rb||(P.Rb=new O(44),P.Rb.stack="");throw P.Rb;},Ib(a,b,c,d){return P.createNode(a,b,c,d)},nc(a,b,c){try{var d=Ad(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.Na)throw new O(55);Bd(d)}delete a.parent.Na[a.name];b.Na[c]=a;a.name=c;b.$a=b.ab=a.parent.$a=a.parent.ab=Date.now()},Ob(a, -b){delete a.Na[b];a.$a=a.ab=Date.now()},oc(a,b){var c=Ad(a,b),d;for(d in c.Na)throw new O(55);delete a.Na[b];a.$a=a.ab=Date.now()},Yb(a){return[".","..",...Object.keys(a.Na)]},Mb(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},Bb(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},Ma:{read(a,b,c,d,e){var f=a.node.Na;if(e>=a.node.Ta)return 0;a=Math.min(a.node.Ta-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Na,a.Na=new Uint8Array(f),0b)throw new O(28);return b},xb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.Na;if(e&2||!a||a.buffer!==(t(),A).buffer){d=!0;e=xd(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},Dd=async a=>{a=await ha(a);return new Uint8Array(a)},Ed=[],Fd=async(a,b)=>{"undefined"!=typeof Browser&&Browser.nd();for(var c of Ed)if(c.canHandle(b))return c.handle(a,b);return a},Gd=null,Hd={},Id=[],Jd=1,Kd=null,La=!1,Qa=!0,Ld={},O=class{name="ErrnoError";constructor(a){this.Ua=a}},Md=class{Lb={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.Lb.flags}set flags(a){this.Lb.flags= -a}get position(){return this.Lb.position}set position(a){this.Lb.position=a}},Nd=class{Oa={};Ma={};Kb=365;Pb=146;yb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.mb=a.mb;this.id=Jd++;this.name=b;this.mode=c;this.Ab=d;this.pb=this.ab=this.$a=Date.now()}get read(){return(this.mode&this.Kb)===this.Kb}set read(a){a?this.mode|=this.Kb:this.mode&=~this.Kb}get write(){return(this.mode&this.Pb)===this.Pb}set write(a){a?this.mode|=this.Pb:this.mode&=~this.Pb}get Lc(){return Q(this.mode)}get Kc(){return 8192=== -(this.mode&61440)}}; -function Od(a,b={}){if(!a)throw new O(44);b.Sb??(b.Sb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(k=>!!k);for(var d=Gd,e="/",f=0;f>>0)%Kd.length} -function Bd(a){var b=Qd(a.parent.id,a.name);if(Kd[b]===a)Kd[b]=a.sb;else for(b=Kd[b];b;){if(b.sb===a){b.sb=a.sb;break}b=b.sb}}function Ad(a,b){var c=Q(a.mode)?(c=Rd(a,"x"))?c:a.Oa.wb?0:2:54;if(c)throw new O(c);for(c=Kd[Qd(a.id,b)];c;c=c.sb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Oa.wb(a,b)}function zd(a,b,c,d){a=new Nd(a,b,c,d);b=Qd(a.parent.id,a.name);a.sb=Kd[b];return Kd[b]=a}function Q(a){return 16384===(a&61440)} -function Sd(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Rd(a,b){if(Qa)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Td(a,b){if(!Q(a.mode))return 54;try{return Ad(a,b),20}catch(c){}return Rd(a,"wx")}function Ud(a){if(!a)throw new O(63);return a}function R(a){a=Id[a];if(!a)throw new O(8);return a} -function Vd(a,b=-1){a=Object.assign(new Md,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!Id[b])break a;throw new O(33);}a.qb=b;return Id[b]=a}function Wd(a,b=-1){a=Vd(a,b);a.Ma?.kd?.(a);return a}function Xd(a,b){var c=null?.Ma.kb,d=c?null:a;c??=a.Oa.kb;Ud(c);c(d,b)}var yd={open(a){a.Ma=Hd[a.node.Ab].Ma;a.Ma.open?.(a)},fb(){throw new O(70);}};function td(a,b){Hd[a]={Ma:b}} -function Yd(a,b){var c="/"===b;if(c&&Gd)throw new O(10);if(!c&&b){var d=Od(b,{Sb:!1});b=d.path;d=d.node;if(d.yb)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,od:{},lc:b,Nc:[]};a=a.mb(b);a.mb=b;b.root=a;c?Gd=a:d&&(d.yb=b,d.mb&&d.mb.Nc.push(b))}function Zd(a,b,c){var d=Od(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Td(d,a);if(e)throw new O(e);if(!d.Oa.Ib)throw new O(63);return d.Oa.Ib(d,a,b,c)} -function $d(a,b=438){return Zd(a,b&4095|32768,0)}function S(a){return Zd(a,16895,0)}function ae(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Zd(a,b|8192,c)}function Na(a,b){if(!jd(a))throw new O(44);var c=Od(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Td(c,b);if(d)throw new O(d);if(!c.Oa.Mb)throw new O(63);c.Oa.Mb(c,b,a)} -function be(a){var b=Od(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=Ad(b,a);a:{try{var d=Ad(b,a)}catch(f){d=f.Ua;break a}var e=Rd(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.Oa.Ob)throw new O(63);if(c.yb)throw new O(10);b.Oa.Ob(b,a);Bd(c)}function ce(a,b){a=Od(a,{Eb:!b}).node;return Ud(a.Oa.eb)(a)}function de(a,b){a="string"==typeof a?Od(a,{Eb:!0}).node:a;Xd(a,{mode:b&4095|a.mode&-4096,$a:Date.now(),jd:void 0})} -function Oa(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Od(a,{Eb:!(b&131072),Pc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Zd(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Sd(b)||b&576)?31:Rd(d,Sd(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Od(e,{Eb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Rd(e,"w");if(g)throw new O(g);Xd(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Vd({node:d,path:Pd(d),flags:b,seekable:!0,position:0,Ma:d.Ma,ad:[],error:!1});e.Ma.open&&e.Ma.open(e);f&&de(d,c&511);!h.logReadFiles||b&1||a in Ld||(Ld[a]=1);return e} -function ee(a){if(null===a.qb)throw new O(8);a.Tb&&(a.Tb=null);try{a.Ma.close&&a.Ma.close(a)}catch(b){throw b;}finally{Id[a.qb]=null}a.qb=null}function fe(a,b,c){if(null===a.qb)throw new O(8);if(!a.seekable||!a.Ma.fb)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.Ma.fb(a,b,c);a.ad=[]} -function ge(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.qb)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.Ma.write)throw new O(28);a.seekable&&a.flags&1024&&fe(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.Ma.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function he(a,b){a="string"==typeof a?a:Pd(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=ed(a+"/"+c);try{S(d)}catch(e){if(20!=e.Ua)throw e;}a=d}}return d}function ie(a,b,c,d){a=ed(("string"==typeof a?a:Pd(a))+"/"+b);return $d(a,Cd(c,d))} -function je(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Pd(a),g=b?ed(a+"/"+b):a);a=Cd(d,e);g=$d(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=p.length)return 0;v=Math.min(p.length-w,v);if(p.slice)for(var x=0;xthis.length-1||0>p)){var u=p%this.dc;return this.vb(p/this.dc|0)[u]}}Tc(p){this.vb=p}bc(){var p=new XMLHttpRequest;p.open("HEAD",c,!1);p.send(null);200<=p.status&&300>p.status||304===p.status||Ra("Couldn't load "+c+". Status: "+p.status);var u=Number(p.getResponseHeader("Content-length")), -z,v=(z=p.getResponseHeader("Accept-Ranges"))&&"bytes"===z;p=(z=p.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;v||(w=u);var x=this;x.Tc(F=>{var G=F*w,M=(F+1)*w-1;M=Math.min(M,u-1);if("undefined"==typeof x.Db[F]){var y=x.Db;G>M&&Ra("invalid range ("+G+", "+M+") or no bytes requested!");M>u-1&&Ra("only "+u+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);u!==w&&J.setRequestHeader("Range","bytes="+G+"-"+M);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||Ra("Couldn't load "+c+". Status: "+J.status);G=void 0!==J.response?new Uint8Array(J.response||[]):qd(J.responseText||"");y[F]=G}"undefined"==typeof x.Db[F]&&Ra("doXHR failed!");return x.Db[F]});if(p||!u)w=u=1,w=u=this.vb(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.ac=u;this.$b=w;this.Vb=!0}get length(){this.Vb||this.bc();return this.ac}get dc(){this.Vb|| -this.bc();return this.$b}}if(globalThis.XMLHttpRequest){ba||Ra("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var k=new g;var l=void 0}else l=c,k=void 0;var n=ie(a,b,d,e);k?n.Na=k:l&&(n.Na=null,n.url=l);Object.defineProperties(n,{Ta:{get:function(){return this.Na.length}}});var q={};Object.keys(n.Ma).forEach(p=>{var u=n.Ma[p];q[p]=(...z)=>{ke(n);return u(...z)}});q.read=(p,u,z,v,w)=>{ke(n);return f(p,u,z,v,w)};q.xb=(p,u,z)=>{ke(n); -var v=xd(u);if(!v)throw new O(48);f(p,(t(),A),v,u,z);return{Pa:v,ob:!0}};n.Ma=q;return n}var T={},U=(a,b,c)=>a?md((t(),B),a,b,c):"";function me(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":R(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function ne(a,b){(t(),H)[a>>2]=b.uc;(t(),H)[a+4>>2]=b.mode;(t(),H)[a+8>>2]=b.Oc;(t(),H)[a+12>>2]=b.uid;(t(),H)[a+16>>2]=b.Bc;(t(),H)[a+20>>2]=b.Ab;(t(),K)[a+24>>3]=BigInt(b.size);(t(),E)[a+32>>2]=4096;(t(),E)[a+36>>2]=b.sc;var c=b.pb.getTime(),d=b.ab.getTime(),e=b.$a.getTime();(t(),K)[a+40>>3]=BigInt(Math.floor(c/1E3));(t(),H)[a+48>>2]=c%1E3*1E6;(t(),K)[a+56>>3]=BigInt(Math.floor(d/1E3));(t(),H)[a+64>>2]=d%1E3*1E6;(t(),K)[a+72>>3]=BigInt(Math.floor(e/1E3));(t(),H)[a+80>>2]=e%1E3*1E6;(t(),K)[a+88>> -3]=BigInt(b.Fc);return 0}var bd=void 0;function ab(a,b,c){if(m)return N(3,1,a,b,c);bd=c;try{var d=R(a);switch(b){case 0:var e=cd();if(0>e)break;for(;Id[e];)e++;return Wd(d,e).qb;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=cd(),d.flags|=e,0;case 12:return e=cd(),(t(),C)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ua}} -function bb(a,b){if(m)return N(4,1,a,b);try{var c=R(a),d=c.node,e=c.Ma.eb;a=e?c:d;e??=d.Oa.eb;Ud(e);var f=e(a);return ne(b,f)}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ua}} -function cb(a,b,c){if(m)return N(5,1,a,b,c);bd=c;try{var d=R(a);switch(b){case 21509:return d.Qa?0:-59;case 21505:if(!d.Qa)return-59;if(d.Qa.nb.Hc){a=[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];var e=cd();(t(),E)[e>>2]=25856;(t(),E)[e+4>>2]=5;(t(),E)[e+8>>2]=191;(t(),E)[e+12>>2]=35387;for(var f=0;32>f;f++)(t(),A)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Qa?0:-59;case 21506:case 21507:case 21508:if(!d.Qa)return-59;if(d.Qa.nb.Ic)for(e=cd(), -t(),t(),t(),t(),a=[],f=0;32>f;f++)a.push((t(),A)[e+f+17]);return 0;case 21519:if(!d.Qa)return-59;e=cd();return(t(),E)[e>>2]=0;case 21520:return d.Qa?-28:-59;case 21537:case 21531:e=cd();if(!d.Ma.Gc)throw new O(59);return d.Ma.Gc(d,b,e);case 21523:if(!d.Qa)return-59;d.Qa.nb.Jc&&(f=[24,80],e=cd(),(t(),C)[e>>1]=f[0],(t(),C)[e+2>>1]=f[1]);return 0;case 21524:return d.Qa?0:-59;case 21515:return d.Qa?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ua}} -function db(a,b){if(m)return N(6,1,a,b);try{return a=U(a),ne(b,ce(a,!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ua}}function eb(a,b,c,d){if(m)return N(7,1,a,b,c,d);try{b=U(b);var e=d&256;b=me(a,b,d&4096);return ne(c,e?ce(b,!0):ce(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ua}} -function fb(a,b,c,d){if(m)return N(8,1,a,b,c,d);bd=d;try{b=U(b);b=me(a,b);var e=d?cd():0;return Oa(b,c,e).qb}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ua}}function gb(a,b){if(m)return N(9,1,a,b);try{return a=U(a),ne(b,ce(a))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ua}}var hb=()=>Ra(""),oe={},pe=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function qe(a){return this.Va((t(),H)[a>>2])} -var re={},se={},te={},ue=class extends Error{constructor(a){super(a);this.name="InternalError"}},ve=(a,b,c)=>{function d(k){k=c(k);if(k.length!==a.length)throw new ue("Mismatched type converter count");for(var l=0;lte[k]=b);var e=Array(b.length),f=[],g=0;b.forEach((k,l)=>{se.hasOwnProperty(k)?e[l]=se[k]:(f.push(k),re.hasOwnProperty(k)||(re[k]=[]),re[k].push(()=>{e[l]=se[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},ib=a=>{var b=oe[a];delete oe[a];var c= -b.Xb,d=b.ib,e=b.hc,f=e.map(g=>g.Ac).concat(e.map(g=>g.Vc));ve([a],f,g=>{var k={};e.forEach((l,n)=>{var q=g[n],p=l.vb,u=l.zc,z=g[n+e.length],v=l.Uc,w=l.Wc;k[l.wc]={read:x=>q.Va(p(u,x)),write:(x,F)=>{var G=[];v(w,x,z.Ya(G,F));pe(G)},optional:g[n].optional}});return[{name:b.name,Va:l=>{var n={},q;for(q in k)n[q]=k[q].read(l);d(l);return n},Ya:(l,n)=>{for(var q in k)if(!(q in n||k[q].optional))throw new TypeError(`Missing field: "${q}"`);var p=c();for(q in k)k[q].write(p,n[q]);null!==l&&l.push(d,p);return p}, -jb:qe,cb:d}]})},W=a=>{for(var b="";;){var c=(t(),B)[a++];if(!c)return b;b+=String.fromCharCode(c)}},X=class extends Error{constructor(a){super(a);this.name="BindingError"}};function we(a,b,c={}){var d=b.name;if(!a)throw new X(`type "${d}" must have a positive integer typeid pointer`);if(se.hasOwnProperty(a)){if(c.Ec)return;throw new X(`Cannot register type '${d}' twice`);}se[a]=b;delete te[a];re.hasOwnProperty(a)&&(b=re[a],delete re[a],b.forEach(e=>e()))}function V(a,b,c={}){return we(a,b,c)} -var xe=(a,b,c)=>{switch(b){case 1:return c?d=>(t(),A)[d]:d=>(t(),B)[d];case 2:return c?d=>(t(),C)[d>>1]:d=>(t(),Fa)[d>>1];case 4:return c?d=>(t(),E)[d>>2]:d=>(t(),H)[d>>2];case 8:return c?d=>(t(),K)[d>>3]:d=>(t(),Ia)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=(a,b,c,d,e)=>{b=W(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=k=>BigInt.asUintN(g,k);e=f(e)}V(a,{name:b,Va:f,Ya:(g,k)=>{"number"==typeof k&&(k=BigInt(k));return k},jb:xe(b,c,!d),cb:null})},kb=(a,b,c,d)=>{b=W(b); -V(a,{name:b,Va:function(e){return!!e},Ya:function(e,f){return f?c:d},jb:function(e){return this.Va((t(),B)[e])},cb:null})},ye=a=>{throw new X(a.La.Sa.Ra.name+" instance already deleted");},ze=!1,Ae=()=>{},Be=a=>{if(!globalThis.FinalizationRegistry)return Be=b=>b,a;ze=new FinalizationRegistry(b=>{b=b.La;--b.count.value;0===b.count.value&&(b.Xa?b.bb.ib(b.Xa):b.Sa.Ra.ib(b.Pa))});Be=b=>{var c=b.La;c.Xa&&ze.register(b,{La:c},b);return b};Ae=b=>{ze.unregister(b)};return Be(a)},Ce=[];function De(){} -var Ee=(a,b)=>Object.defineProperty(b,"name",{value:a}),Fe={},Ge=(a,b,c)=>{if(void 0===a[b].Wa){var d=a[b];a[b]=function(...e){if(!a[b].Wa.hasOwnProperty(e.length))throw new X(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Wa})!`);return a[b].Wa[e.length].apply(this,e)};a[b].Wa=[];a[b].Wa[d.tb]=d}},He=(a,b,c)=>{if(h.hasOwnProperty(a)){if(void 0===c||void 0!==h[a].Wa&&void 0!==h[a].Wa[c])throw new X(`Cannot register public name '${a}' twice`);Ge(h, -a,a);if(h[a].Wa.hasOwnProperty(c))throw new X(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);h[a].Wa[c]=b}else h[a]=b,h[a].tb=c},Ie=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Je(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.rb=c;this.ib=d;this.Za=e;this.xc=f;this.Cb=g;this.vc=k;this.Rc=[]} -var Ke=(a,b,c)=>{for(;b!==c;){if(!b.Cb)throw new X(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Cb(a);b=b.Za}return a},Le=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Me(a,b){if(null===b){if(this.Ub)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.La)throw new X(`Cannot pass "${Le(b)}" as a ${this.name}`);if(!b.La.Pa)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);return Ke(b.La.Pa,b.La.Sa.Ra,this.Ra)} -function Ne(a,b){if(null===b){if(this.Ub)throw new X(`null is not a valid ${this.name}`);if(this.Hb){var c=this.Xb();null!==a&&a.push(this.ib,c);return c}return 0}if(!b||!b.La)throw new X(`Cannot pass "${Le(b)}" as a ${this.name}`);if(!b.La.Pa)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Gb&&b.La.Sa.Gb)throw new X(`Cannot convert argument of type ${b.La.bb?b.La.bb.name:b.La.Sa.name} to parameter type ${this.name}`);c=Ke(b.La.Pa,b.La.Sa.Ra,this.Ra);if(this.Hb){if(void 0=== -b.La.Xa)throw new X("Passing raw pointer to smart pointer is illegal");switch(this.Xc){case 0:if(b.La.bb===this)c=b.La.Xa;else throw new X(`Cannot convert argument of type ${b.La.bb?b.La.bb.name:b.La.Sa.name} to parameter type ${this.name}`);break;case 1:c=b.La.Xa;break;case 2:if(b.La.bb===this)c=b.La.Xa;else{var d=b.clone();c=this.Sc(c,Oe(()=>d["delete"]()));null!==a&&a.push(this.ib,c)}break;default:throw new X("Unsupporting sharing policy");}}return c} -function Pe(a,b){if(null===b){if(this.Ub)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.La)throw new X(`Cannot pass "${Le(b)}" as a ${this.name}`);if(!b.La.Pa)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.La.Sa.Gb)throw new X(`Cannot convert argument of type ${b.La.Sa.name} to parameter type ${this.name}`);return Ke(b.La.Pa,b.La.Sa.Ra,this.Ra)} -var Qe=(a,b,c)=>{if(b===c)return a;if(void 0===c.Za)return null;a=Qe(a,b,c.Za);return null===a?null:c.vc(a)},Re={},Se=(a,b)=>{if(void 0===b)throw new X("ptr should not be undefined");for(;a.Za;)b=a.Cb(b),a=a.Za;return Re[b]},Te=(a,b)=>{if(!b.Sa||!b.Pa)throw new ue("makeClassHandle requires ptr and ptrType");if(!!b.bb!==!!b.Xa)throw new ue("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Be(Object.create(a,{La:{value:b,writable:!0}}))}; -function Ue(a,b,c,d,e,f,g,k,l,n,q){this.name=a;this.Ra=b;this.Ub=c;this.Gb=d;this.Hb=e;this.Qc=f;this.Xc=g;this.mc=k;this.Xb=l;this.Sc=n;this.ib=q;e||void 0!==b.Za?this.Ya=Ne:(this.Ya=d?Me:Pe,this.cb=null)}var Ve=(a,b,c)=>{if(!h.hasOwnProperty(a))throw new ue("Replacing nonexistent public symbol");void 0!==h[a].Wa&&void 0!==c?h[a].Wa[c]=b:(h[a]=b,h[a].tb=c)},We=(a,b)=>{a=W(a);var c=$c(b);if("function"!=typeof c)throw new X(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Xe extends Error{} -var Ye=a=>{a=pc(a);var b=W(a);sc(a);return b},Ze=(a,b)=>{function c(f){e[f]||se[f]||(te[f]?te[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Xe(`${a}: `+d.map(Ye).join([", "]));},lb=(a,b,c,d,e,f,g,k,l,n,q,p,u)=>{q=W(q);f=We(e,f);k&&=We(g,k);n&&=We(l,n);u=We(p,u);var z=Ie(q);He(z,function(){Ze(`Cannot construct ${q} due to unbound types`,[d])});ve([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var w=v.Ra;var x=w.rb}else x=De.prototype;v=Ee(q,function(...y){if(Object.getPrototypeOf(this)!==F)throw new X(`Use 'new' to construct ${q}`); -if(void 0===G.ec)throw new X(`${q} has no accessible constructor`);var J=G.ec[y.length];if(void 0===J)throw new X(`Tried to invoke ctor of ${q} with invalid number of parameters (${y.length}) - expected (${Object.keys(G.ec).toString()}) parameters instead!`);return J.apply(this,y)});var F=Object.create(x,{constructor:{value:v}});v.prototype=F;var G=new Je(q,v,F,u,w,f,k,n);if(G.Za){var M;(M=G.Za).Zb??(M.Zb=[]);G.Za.Zb.push(G)}w=new Ue(q,G,!0,!1,!1);M=new Ue(q+"*",G,!1,!1,!1);x=new Ue(q+" const*",G, -!1,!0,!1);Fe[a]={pointerType:M,tc:x};Ve(z,v);return[w,M,x]})};function $e(a){for(var b=1;bf)throw new X("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=$e(b),l=!b[0].Mc,n=f-2,q=Array(n),p=[],u=[];return Ee(a,function(...z){u.length=0;p.length=g?2:1;p[0]=e;if(g){var v=b[1].Ya(u,this);p[1]=v}for(var w=0;w{for(var c=[],d=0;d>2]);return c},cf=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},mb=(a,b,c,d,e,f,g,k)=>{var l=bf(c,d);b=W(b);b=cf(b);f=We(e,f);ve([],[a],n=>{function q(){Ze(`Cannot call ${p} due to unbound types`,l)}n=n[0];var p=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);k&&n.Ra.Rc.push(b);var u=n.Ra.rb,z=u[b];void 0===z||void 0===z.Wa&&z.className!==n.name&&z.tb===c-2?(q.tb=c-2,q.className=n.name,u[b]=q):(Ge(u, -b,p),u[b].Wa[c-2]=q);ve([],l,v=>{v=af(p,v,n,f,g);void 0===u[b].Wa?(v.tb=c-2,u[b]=v):u[b].Wa[c-2]=v;return[]});return[]})},df=[],ef=[0,1,,1,null,1,!0,1,!1,1],Fb=a=>{9{if(!a)throw new X(`Cannot use deleted val. handle = ${a}`);return ef[a]},Oe=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=df.pop()||ef.length;ef[b]=a;ef[b+1]=1;return b}},gf={name:"emscripten::val",Va:a=>{var b=ff(a);Fb(a);return b}, -Ya:(a,b)=>Oe(b),jb:qe,cb:null},nb=a=>V(a,gf),hf=(a,b)=>{switch(b){case 4:return function(c){return this.Va((t(),Ga)[c>>2])};case 8:return function(c){return this.Va((t(),Ha)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ob=(a,b,c)=>{b=W(b);V(a,{name:b,Va:d=>d,Ya:(d,e)=>e,jb:hf(b,c),cb:null})},pb=(a,b,c,d,e,f)=>{var g=bf(b,c);a=W(a);a=cf(a);e=We(d,e);He(a,function(){Ze(`Cannot call ${a} due to unbound types`,g)},b-1);ve([],g,k=>{Ve(a,af(a,[k[0],null].concat(k.slice(1)), -null,e,f),b-1);return[]})},qb=(a,b,c,d,e)=>{b=W(b);let f=k=>k;if(0===d){var g=32-8*c;f=k=>k<>>g;e=f(e)}V(a,{name:b,Va:f,Ya:(k,l)=>l,jb:xe(b,c,0!==d),cb:null})},rb=(a,b,c)=>{function d(f){var g=(t(),H)[f>>2];f=(t(),H)[f+4>>2];return new e((t(),A).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=W(c);V(a,{name:c,Va:d,jb:d},{Ec:!0})},jf=Object.assign({optional:!0},gf),sb=a=>{V(a,jf)},Y=(a,b,c)=>pd(a, -(t(),B),b,c),tb=(a,b)=>{b=W(b);V(a,{name:b,Va(c){var d=(t(),H)[c>>2];d=U(c+4,d,!0);sc(c);return d},Ya(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new X("Cannot pass non-string to std::string");var f=e?od(d):d.length;var g=rc(4+f+1),k=g+4;(t(),H)[g>>2]=f;e?Y(d,k,f+1):(t(),B).set(d,k);null!==c&&c.push(sc,g);return g},jb:qe,cb(c){sc(c)}})},kf=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,lf=(a, -b,c)=>{a>>=1;b=ld((t(),Fa),a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}(t(),C)[b>>1]=0;return b-d},nf=a=>2*a.length,of=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(t(),H)[a+e];if(!f&&!c)break; -d+=String.fromCodePoint(f)}return d},pf=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}(t(),E)[b>>2]=0;return b-d},qf=a=>{for(var b=0,c=0;c{c=W(c);if(2===b){var d=lf;var e=mf;var f=nf}else d=of,e=pf,f=qf;V(a,{name:c,Va:g=>{var k=(t(),H)[g>>2];k=d(g+4,k*b,!0);sc(g);return k},Ya:(g,k)=>{if("string"!=typeof k)throw new X(`Cannot pass non-string to C++ string type ${c}`); -var l=f(k),n=rc(4+l+b);(t(),H)[n>>2]=l/b;e(k,n+4,l+b);null!==g&&g.push(sc,n);return n},jb:qe,cb(g){sc(g)}})},vb=(a,b,c,d,e,f)=>{oe[a]={name:W(b),Xb:We(c,d),ib:We(e,f),hc:[]}},wb=(a,b,c,d,e,f,g,k,l,n)=>{oe[a].hc.push({wc:W(b),Ac:c,vb:We(d,e),zc:f,Vc:g,Uc:We(k,l),Wc:n})},xb=(a,b)=>{b=W(b);V(a,{Mc:!0,name:b,Va:()=>{},Ya:()=>{}})},yb=a=>{xa(a,!ba,1,!aa,5242880,!1);ya()},rf=a=>{if(!(a instanceof Ec||"unwind"==a))throw a;},Xc=a=>{if(!ma)try{if(a(),!(Sc||0{Atomics.waitAsync&&(Atomics.waitAsync((t(),E),a>>2,a).value.then(Da),a+=128,Atomics.store((t(),E),a>>2,1))},Da=()=>Xc(()=>{var a=qc();a&&(za(a),yc())}),zb=(a,b)=>{a==b?setTimeout(Da):m?postMessage({Nb:a,lb:"checkMailbox"}):(a=Qc[a])&&a.postMessage({lb:"checkMailbox"})},sf=[],Ab=(a,b,c,d,e)=>{d/=2;sf.length=d;c=e>>3;for(e=0;e{Sc=!1;L=0},Cb=a=>{m?postMessage({lb:"cleanupThread",$c:a}):Wc(Qc[a])}, -Db=()=>{},vf=[],wf=a=>{var b=vf.length;vf.push(a);return b},xf=(a,b)=>{for(var c=Array(a),d=0;d>2],g=se[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Ye(f)}`,new X(a);c[e]=g}return c},yf={},zf=a=>{var b=yf[a];return void 0===b?W(a):b},Eb=(a,b,c)=>{var [d,...e]=xf(a,b),f=d.Ya.bind(d),g=e.map(l=>l.jb.bind(l));a--;var k=Array(a);b=`methodCaller<(${e.map(l=>l.name)}) => ${d.name}>`;return wf(Ee(b,(l,n,q,p)=>{for(var u=0,z=0;z>2]=Oe(l));return v}))},Gb=a=>{if(!a)return Oe(globalThis);a=zf(a);return Oe(globalThis[a])},Hb=(a,b)=>{a=ff(a);b=ff(b);return Oe(a[b])},Ib=a=>{9vf[a](b,c,d,e),Kb=()=>Oe([]),Lb=a=>Oe(zf(a)),Mb=()=>Oe({}),Nb=a=>{var b=ff(a);pe(b);Fb(a)},Ob=(a,b,c)=>{a=ff(a);b=ff(b);c=ff(c);a[b]=c},Af=a=>0=== -a%4&&(0!==a%100||0===a%400),Bf=[0,31,60,91,121,152,182,213,244,274,305,335],Cf=[0,31,59,90,120,151,181,212,243,273,304,334]; -function Pb(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();(t(),E)[b+4>>2]=a.getMinutes();(t(),E)[b+8>>2]=a.getHours();(t(),E)[b+12>>2]=a.getDate();(t(),E)[b+16>>2]=a.getMonth();(t(),E)[b+20>>2]=a.getFullYear()-1900;(t(),E)[b+24>>2]=a.getDay();var c=(Af(a.getFullYear())?Bf:Cf)[a.getMonth()]+a.getDate()-1|0;(t(),E)[b+28>>2]=c;(t(),E)[b+36>>2]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(t(),E)[b+32>>2]=a} -function Qb(a){var b=new Date((t(),E)[a+20>>2]+1900,(t(),E)[a+16>>2],(t(),E)[a+12>>2],(t(),E)[a+8>>2],(t(),E)[a+4>>2],(t(),E)[a>>2],0),c=(t(),E)[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?(t(),E)[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();c=(Af(b.getFullYear())?Bf:Cf)[b.getMonth()]+b.getDate()-1|0; -(t(),E)[a+28>>2]=c;(t(),E)[a>>2]=b.getSeconds();(t(),E)[a+4>>2]=b.getMinutes();(t(),E)[a+8>>2]=b.getHours();(t(),E)[a+12>>2]=b.getDate();(t(),E)[a+16>>2]=b.getMonth();(t(),E)[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)}var Df={},ac=()=>performance.timeOrigin+performance.now(); -function Rb(a,b){if(m)return N(12,1,a,b);Df[a]&&(clearTimeout(Df[a].id),delete Df[a]);if(!b)return 0;var c=setTimeout(()=>{delete Df[a];Xc(()=>xc(a,performance.timeOrigin+performance.now()))},b);Df[a]={id:c,pd:b};return 0} -var Sb=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(t(),H)[a>>2]=60*g;(t(),E)[b>>2]=Number(f!=e);b=k=>{var l=Math.abs(k);return`UTC${0<=k?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(e);eDate.now(),Ef=1; -function Ub(a,b,c){if(!(0<=a&&3>=a))return 28;if(0===a)a=Date.now();else if(Ef)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(1E6*a);(t(),K)[c>>3]=BigInt(a);return 0}var Ff=[],Vb=(a,b,c)=>{Ff.length=0;for(var d;d=(t(),B)[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;Ff.push(112==d?(t(),H)[c>>2]:106==d?(t(),K)[c>>3]:105==d?(t(),E)[c>>2]:(t(),Ha)[c>>3]);c+=e?8:4}return tf[a](...Ff)},Wb=()=>{},Yb=()=>{L+=1;throw"unwind";}; -function Zb(a){if(Gf.has(a)){var b=Gf.get(a),c=Gf;c.ob[a]=void 0;c.ic.push(a);0b.readyState&&b.abort()}}var $b=()=>2147483648,cc=a=>{var b=(t(),B).length;a>>>=0;if(a<=b||2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1};function Hf(a){var b=Gf,c=b.ic.pop()||b.ob.length;b.ob[c]=a;return c} -class If{ob=[void 0];ic=[];get(a){return this.ob[a]}has(a){return void 0!==this.ob[a]}}async function Jf(){return new Promise((a,b)=>{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Gf,Kf; -function Lf(a,b,c,d,e){function f(){var I=0,D=0;y.response&&F&&0===(t(),H)[a+12>>2]&&(D=y.response.byteLength);0>2]=I;Z(a+16,D);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);(t(),C)[a+40>>1]=y.readyState;(t(),C)[a+42>>1]=y.status;y.statusText&&Y(y.statusText,a+44,64);M&&(I=Mf(y.responseURL),(t(),H)[a+200>>2]=I)}var g=(t(),H)[a+8>>2];if(g){var k=U(g),l=a+108,n=U(l+0);n||="GET";var q=(t(),H)[l+56>>2],p=(t(),H)[l+68>> -2],u=(t(),H)[l+72>>2];g=(t(),H)[l+76>>2];var z=(t(),H)[l+80>>2],v=(t(),H)[l+84>>2],w=(t(),H)[l+88>>2],x=(t(),H)[l+52>>2],F=!!(x&1),G=!!(x&2),M=!!(x&64);p=p?U(p):void 0;u=u?U(u):void 0;var y=new XMLHttpRequest;y.withCredentials=!!(t(),B)[l+60];y.open(n,k,!M,p,u);M||(y.timeout=q);y.qd=k;y.responseType="arraybuffer";z&&(k=U(z),y.overrideMimeType(k));if(g)for(;;){l=(t(),H)[g>>2];if(!l)break;k=(t(),H)[g+4>>2];if(!k)break;g+=8;l=U(l);k=U(k);y.setRequestHeader(l,k)}var J=Hf(y);(t(),H)[a>>2]=J;g=v&&w?(t(), -B).slice(v,v+w):null;y.onload=I=>{Gf.has(J)&&(f(),200<=y.status&&300>y.status?b(a,y,I):c(a,I))};y.onerror=I=>{Gf.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Gf.has(J)&&c(a,I)};y.onprogress=I=>{if(Gf.has(J)){var D=F&&G&&y.response?y.response.byteLength:0,Aa=0;0>2]=Aa;Z(a+16,D);Z(a+24,I.loaded-D);Z(a+32,I.total);(t(),C)[a+40>>1]=y.readyState;D=y.status;3<=y.readyState&&0===y.status&&0>1]=D;y.statusText&& -Y(y.statusText,a+44,64);d(a,I);sc(Aa)}};y.onreadystatechange=I=>{if(Gf.has(J)){(t(),C)[a+40>>1]=y.readyState;2<=y.readyState&&((t(),C)[a+42>>1]=y.status);if(!M&&2===y.readyState&&0>2]=D}e(a,I)}else--L};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{(t(),H)[a>>2]=b;var c=(t(),H)[a>>2];(t(),H)[a+4>>2]=(b-c)/4294967296},Mf=a=>{var b=od(a)+1,c=rc(b);c&&Y(a,c,b);return c}; -function Nf(a,b,c,d){var e=Kf;if(e){var f=a+108;(f=(t(),H)[f+64>>2])||(f=(t(),H)[a+8>>2]);var g=U(f);try{var k=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);k.onsuccess=()=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);c(a,0,g)};k.onerror=l=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=413;Y("Payload Too Large",a+44,64);d(a,0,l)}}catch(l){d(a,0,l)}}else d(a,0,"IndexedDB not available!")} -function Of(a,b,c){var d=Kf;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var k=g.byteLength||g.length,l=rc(k);(t(),B).set(new Uint8Array(g),l);(t(),H)[a+12>>2]=l;Z(a+16,k);Z(a+24,0);Z(a+32,k);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)}else(t(),C)[a+40>>1]=4,(t(),C)[a+42>>1]=404,Y("Not Found",a+44,64),c(a,0,"no data")};f.onerror= -g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Pf(a,b,c){var d=Kf;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;(t(),H)[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)};f.onerror=g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function dc(a,b,c,d,e){function f(D){u?D():Xc(D)}L+=1;var g=a+108,k=(t(),H)[g+36>>2],l=(t(),H)[g+40>>2],n=(t(),H)[g+44>>2],q=(t(),H)[g+48>>2],p=(t(),H)[g+52>>2],u=!!(p&64),z=D=>{--L;f(()=>{k?$c(k)(D):b?.(D)})},v=D=>{f(()=>{n?$c(n)(D):d?.(D)})},w=D=>{--L;f(()=>{l?$c(l)(D):c?.(D)})},x=D=>{f(()=>{q?$c(q)(D):e?.(D)})},F=D=>{Lf(D,z,w,v,x)},G=(D,Aa)=>{Nf(D,Aa.response,Ua=>{--L;f(()=>{k?$c(k)(Ua):b?.(Ua)})},Ua=>{--L;f(()=>{k?$c(k)(Ua):b?.(Ua)})})},M=D=>{Lf(D,G,w,v,x)},y=U(g+0),J=!!(p&16),I=!!(p&4);p=!!(p& -32);if("EM_IDB_STORE"===y)F=(t(),H)[g+84>>2],g=(t(),H)[g+88>>2],Nf(a,(t(),B).slice(F,F+g),z,w);else if("EM_IDB_DELETE"===y)Pf(a,z,w);else if(J){if(p)return 0;Lf(a,I?G:z,w,v,x)}else Of(a,z,p?w:I?M:F);return a} -var Qf={},Sf=()=>{if(!Rf){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Qf)void 0===Qf[b]?delete a[b]:a[b]=Qf[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Rf=c}return Rf},Rf;function ec(a,b){if(m)return N(13,1,a,b);var c=0,d=0,e;for(e of Sf()){var f=b+c;(t(),H)[a+d>>2]=f;c+=Y(e,f,Infinity)+1;d+=4}return 0} -function fc(a,b){if(m)return N(14,1,a,b);var c=Sf();(t(),H)[a>>2]=c.length;a=0;for(var d of c)a+=od(d)+1;(t(),H)[b>>2]=a;return 0}function hc(a){if(m)return N(15,1,a);try{var b=R(a);ee(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ua}} -function ic(a,b,c,d){if(m)return N(16,1,a,b,c,d);try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var n=e,q=(t(),A),p=k,u=l,z=f;if(0>u||0>z)throw new O(28);if(null===n.qb)throw new O(8);if(1===(n.flags&2097155))throw new O(8);if(Q(n.node.mode))throw new O(31);if(!n.Ma.read)throw new O(28);var v="undefined"!=typeof z;if(!v)z=n.position;else if(!n.seekable)throw new O(70);var w=n.Ma.read(n,q,p,u,z);v||(n.position+=w);var x=w;if(0>x){var F=-1;break a}b+=x;if(x< -l)break;"undefined"!=typeof f&&(f+=x)}F=b}(t(),H)[d>>2]=F;return 0}catch(G){if("undefined"==typeof T||"ErrnoError"!==G.name)throw G;return G.Ua}}function jc(a,b,c,d){if(m)return N(17,1,a,b,c,d);b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.Tb&&0===b&&0===c&&(e.Tb=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.Ua}} -function kc(a,b,c,d){if(m)return N(18,1,a,b,c,d);try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var n=ge(e,(t(),A),k,l,f);if(0>n){var q=-1;break a}b+=n;if(n>2]=q;return 0}catch(p){if("undefined"==typeof T||"ErrnoError"!==p.name)throw p;return p.Ua}}function nc(a,b){try{return hd((t(),B).subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ua}}m||Uc();Kd=Array(4096); -Yd(P,"/");S("/tmp");S("/home");S("/home/web_user");(function(){S("/dev");td(259,{read:()=>0,write:(d,e,f,g)=>g,fb:()=>0});ae("/dev/null",259);sd(1280,vd);sd(1536,wd);ae("/dev/tty",1280);ae("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(hd(a),b=a.byteLength);return a[--b]};Ma("/dev","random",c);Ma("/dev","urandom",c);S("/dev/shm");S("/dev/shm/tmp")})(); -(function(){S("/proc");var a=S("/proc/self");S("/proc/self/fd");Yd({mb(){var b=zd(a,"fd",16895,73);b.Ma={fb:P.Ma.fb};b.Oa={wb(c,d){c=+d;var e=R(c);c={parent:null,mb:{lc:"fake"},Oa:{Bb:()=>e.path},id:c+1};return c.parent=c},Yb(){return Array.from(Id.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=De.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof De&&c instanceof De))return!1;var d=this.La.Sa.Ra,e=this.La.Pa;c.La=c.La;var f=c.La.Sa.Ra;for(c=c.La.Pa;d.Za;)e=d.Cb(e),d=d.Za;for(;f.Za;)c=f.Cb(c),f=f.Za;return d===f&&e===c},clone:function(){this.La.Pa||ye(this);if(this.La.zb)return this.La.count.value+=1,this;var c=Be,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.La;c=c(e.call(d,f,{La:{value:{count:g.count,ub:g.ub,zb:g.zb,Pa:g.Pa,Sa:g.Sa,Xa:g.Xa,bb:g.bb}}})); -c.La.count.value+=1;c.La.ub=!1;return c},["delete"](){this.La.Pa||ye(this);if(this.La.ub&&!this.La.zb)throw new X("Object already scheduled for deletion");Ae(this);var c=this.La;--c.count.value;0===c.count.value&&(c.Xa?c.bb.ib(c.Xa):c.Sa.Ra.ib(c.Pa));this.La.zb||(this.La.Xa=void 0,this.La.Pa=void 0)},isDeleted:function(){return!this.La.Pa},deleteLater:function(){this.La.Pa||ye(this);if(this.La.ub&&!this.La.zb)throw new X("Object already scheduled for deletion");Ce.push(this);this.La.ub=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Ue.prototype,{yc(a){this.mc&&(a=this.mc(a));return a},fc(a){this.ib?.(a)},jb:qe,Va:function(a){function b(){return this.Hb?Te(this.Ra.rb,{Sa:this.Qc,Pa:c,bb:this,Xa:a}):Te(this.Ra.rb,{Sa:this,Pa:a})}var c=this.yc(a);if(!c)return this.fc(a),null;var d=Se(this.Ra,c);if(void 0!==d){if(0===d.La.count.value)return d.La.Pa=c,d.La.Xa=a,d.clone();d=d.clone();this.fc(a);return d}d=this.Ra.xc(c);d=Fe[d];if(!d)return b.call(this);d=this.Gb?d.tc:d.pointerType;var e=Qe(c,this.Ra,d.Ra);return null=== -e?b.call(this):this.Hb?Te(d.Ra.rb,{Sa:d,Pa:e,bb:this,Xa:a}):Te(d.Ra.rb,{Sa:d,Pa:e})}});(async function(){Gf=new If;if(!m){Lc("library_fetch_init");try{Kf=await Jf()}catch(a){Kf=!1}finally{Kc("library_fetch_init")}}})();m||(oa=h.wasmMemory?h.wasmMemory:new WebAssembly.Memory({initial:(h.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());h.noExitRuntime&&(Sc=h.noExitRuntime);h.preloadPlugins&&(Ed=h.preloadPlugins);h.print&&(ja=h.print);h.printErr&&(r=h.printErr);h.wasmBinary&&(ka=h.wasmBinary); -h.thisProgram&&(da=h.thisProgram);if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0{var l=b?jd(ed(a+"/"+b)):a,n=`cp ${l}`;Lc(n);try{var q=c;"string"==typeof c&&(q=await Dd(c));q=await Fd(q,l);k?.();f||je(a,b,q,d,e,g)}finally{Kc(n)}};h.FS_unlink=(...a)=>be(...a);h.FS_createPath=(...a)=>he(...a);h.FS_createDevice=(...a)=>Ma(...a); -h.FS_createDataFile=(...a)=>je(...a);h.FS_createLazyFile=(...a)=>le(...a); -var uf=[mc,Tc,ad,ab,bb,cb,db,eb,fb,gb,function(a,b,c,d,e,f,g){if(m)return N(10,1,a,b,c,d,e,f,g);e=-9007199254740992>e||9007199254740992>2]=l.ob;(t(),H)[g>>2]=n;return 0}catch(q){if("undefined"==typeof T||"ErrnoError"!==q.name)throw q;return-q.Ua}},function(a,b,c,d,e,f){if(m)return N(11, -1,a,b,c,d,e,f);f=-9007199254740992>f||9007199254740992{a=U(a);b=U(b);c=U(c);d=U(d);throw Error(a+b+c+d);},460461:(a,b)=>{a=U(a);b=U(b);throw Error(a+b);},460571:a=>{a=U(a);throw Error(a);},460635:a=>{a=U(a);throw Error(a); -},460699:a=>{a=U(a);throw Error(a);}};function Tb(){var a=h.allowedThreads;return a?a:navigator.hardwareConcurrency}function lc(){var a=stackTrace(),b=od(a)+1,c=rc(b);Y(a,c,b);return c}var pc,Ba,qc,rc,sc,tc,xa,Ea,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc;h.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=169616;var Ya; -function va(){function a(){h.calledRun=!0;if(!ma&&(Ka(),qa?.(h),h.onRuntimeInitialized?.(),!m)){if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();Yc.push(b)}Gc(Yc)}}if(0{setTimeout(()=>h.setStatus(""),1);a()},1)):a()}} -var Pa;m||(Pa=await (ua()),va());moduleRtn=Ja?h:new Promise((a,b)=>{qa=a;ra=b}); -;return moduleRtn}export default createModule;var isPthread=globalThis.self?.name?.startsWith("em-pthread");isPthread&&createModule(); diff --git a/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.wasm deleted file mode 100755 index 7c4ff94e..00000000 Binary files a/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.js b/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.js deleted file mode 100644 index 36fccf22..00000000 --- a/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.js +++ /dev/null @@ -1,123 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var l=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=l).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);l.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,n){var p;(p=l).dataFileDownloads??(p.dataFileDownloads={});try{var m=await fetch(k)}catch(x){throw Error(`Network Error: ${k}`,{e:x});}if(!m.ok)throw Error(`${m.status}: ${m.url}`);p=[];n=Number(m.headers.get("Content-Length")??n);let t=0;l.setStatus?.("Downloading data...");for(m=m.body.getReader();;){var {done:z, -value:u}=await m.read();if(z)break;p.push(u);t+=u.length;l.dataFileDownloads[k]={loaded:t,total:n};let x=0,E=0;for(var w of Object.values(l.dataFileDownloads))x+=w.loaded,E+=w.total;l.setStatus?.(`Downloading data... (${x}/${E})`)}k=new Uint8Array(p.map(x=>x.length).reduce((x,E)=>x+E,0));w=0;for(const x of p)k.set(x,w),w+=x.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkid",!0,!0);for(var n of b.files)k.addRunDependency(`fp ${n.filename}`); -k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.data"]={Cc:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var m of b.files){var t=m.filename;k.FS_createDataFile(t, -null,p.subarray(m.start,m.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=l.locateFile?.("BlinkIdModule.data", -"")??"BlinkIdModule.data",f=b.remote_package_size,g,h=l.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(l.calledRun)d(l);else{let k;((k=l).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop",start:0,end:103198},{filename:"/microblink/blinkid/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/microblink/blinkid/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop", -start:106933,end:451389},{filename:"/microblink/blinkid/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/microblink/blinkid/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:775876,end:1044597},{filename:"/microblink/blinkid/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop",start:1044597,end:1051046},{filename:"/microblink/blinkid/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop", -start:1051046,end:2476219},{filename:"/microblink/blinkid/Model_8326c5065a6d8451d6d004db73babf4a4a9f502c68643a14934cc098d04bf44f.strop",start:2476219,end:2863913},{filename:"/microblink/blinkid/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2863913,end:3890768},{filename:"/microblink/blinkid/Model_93607315418f2c5d3abec06d0b2a81e69abeb1b8d0506ed6373d7d74bd5e4b05.strop",start:3890768,end:5135759},{filename:"/microblink/blinkid/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop", -start:5135759,end:5431561},{filename:"/microblink/blinkid/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:5431561,end:5438057},{filename:"/microblink/blinkid/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop",start:5438057,end:9543906},{filename:"/microblink/blinkid/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop",start:9543906,end:9669110},{filename:"/microblink/blinkid/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop", -start:9669110,end:9743555},{filename:"/microblink/blinkid/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:9743555,end:9818957},{filename:"/microblink/blinkid/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop",start:9818957,end:10482010},{filename:"/microblink/blinkid/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:10482010,end:10508308},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:10508308, -end:10528777},{filename:"/microblink/blinkid/serialized_embedder_db_1.12.bin",start:10528777,end:13806438}],remote_package_size:13806438})})();l.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}};l="undefined"!==typeof l?l:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!l.locateFile&&(l.locateFile=function(d,e){return"BlinkIdModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,v,A,pa,B,D,ra,sa,G,ta,ua=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);v=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);D=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);G=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function H(a){l.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),H(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=l.preRun.shift();Ea.push(a)},Ha=!0,Ia=[],Ka=a=>{var b=Ia[a];b||(Ia[a]=b=Ja.get(a));return b},Ma=()=>{var a=B[+La>>2];La+=4;return a},Na=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Oa=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Na(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/"); -return(b?"/":"")+a},Pa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Qa=()=>a=>crypto.getRandomValues(a),Ra=a=>{(Ra=Qa())(a)},Sa=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Na(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/": -"")+b||"."},Ta=globalThis.TextDecoder&&new TextDecoder,Ua=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},L=(a,b=0,c,d)=>{c=Ua(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+= -String.fromCharCode(e)}return d},Va=[],Wa=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},M=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128| -g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},Xa=a=>{var b=Array(Wa(a)+1);a=M(a,b,0,b.length);b.length=a;return b},Ya=[];function Za(a,b){Ya[a]={input:[],output:[],Pa:b};$a(a,ab)} -var ab={open(a){var b=Ya[a.node.ab];if(!b)throw new N(43);a.ua=b;a.seekable=!1},close(a){a.ua.Pa.gb(a.ua)},gb(a){a.ua.Pa.gb(a.ua)},read(a,b,c,d){if(!a.ua||!a.ua.Pa.Jb)throw new N(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=db(65536,a);b&&v.fill(0,b,b+a);return b},O={Ka:null,Oa(){return O.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new N(63);O.Ka||(O.Ka={dir:{node:{Ia:O.sa.Ia,Na:O.sa.Na,Ya:O.sa.Ya,jb:O.sa.jb,Nb:O.sa.Nb,ob:O.sa.ob,Ob:O.sa.Ob,yb:O.sa.yb,nb:O.sa.nb},stream:{Ja:O.qa.Ja}}, -file:{node:{Ia:O.sa.Ia,Na:O.sa.Na},stream:{Ja:O.qa.Ja,read:O.qa.read,write:O.qa.write,vb:O.qa.vb,kb:O.qa.kb}},link:{node:{Ia:O.sa.Ia,Na:O.sa.Na,bb:O.sa.bb},stream:{}},Db:{node:{Ia:O.sa.Ia,Na:O.sa.Na},stream:fb}});c=gb(a,b,c,d);P(c.mode)?(c.sa=O.Ka.dir.node,c.qa=O.Ka.dir.stream,c.ra={}):32768===(c.mode&61440)?(c.sa=O.Ka.file.node,c.qa=O.Ka.file.stream,c.xa=0,c.ra=null):40960===(c.mode&61440)?(c.sa=O.Ka.link.node,c.qa=O.Ka.link.stream):8192===(c.mode&61440)&&(c.sa=O.Ka.Db.node,c.qa=O.Ka.Db.stream); -c.Qa=c.Fa=c.Ea=Date.now();a&&(a.ra[b]=c,a.Qa=a.Fa=a.Ea=c.Qa);return c},Dc(a){return a.ra?a.ra.subarray?a.ra.subarray(0,a.xa):new Uint8Array(a.ra):new Uint8Array(0)},sa:{Ia(a){var b={};b.Sb=8192===(a.mode&61440)?a.id:1;b.ac=a.id;b.mode=a.mode;b.kc=1;b.uid=0;b.Zb=0;b.ab=a.ab;b.size=P(a.mode)?4096:32768===(a.mode&61440)?a.xa:40960===(a.mode&61440)?a.link.length:0;b.Qa=new Date(a.Qa);b.Fa=new Date(a.Fa);b.Ea=new Date(a.Ea);b.Pb=4096;b.Qb=Math.ceil(b.size/b.Pb);return b},Na(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.xa!=b&&(0==b?(a.ra=null,a.xa=0):(c=a.ra,a.ra=new Uint8Array(b),c&&a.ra.set(c.subarray(0,Math.min(b,a.xa))),a.xa=b)))},Ya(){O.qb||(O.qb=new N(44),O.qb.stack="");throw O.qb;},jb(a,b,c,d){return O.createNode(a,b,c,d)},Nb(a,b,c){try{var d=hb(b,c)}catch(f){}if(d){if(P(a.mode))for(var e in d.ra)throw new N(55);ib(d)}delete a.parent.ra[a.name];b.ra[c]=a;a.name=c;b.Ea=b.Fa=a.parent.Ea=a.parent.Fa=Date.now()},ob(a, -b){delete a.ra[b];a.Ea=a.Fa=Date.now()},Ob(a,b){var c=hb(a,b),d;for(d in c.ra)throw new N(55);delete a.ra[b];a.Ea=a.Fa=Date.now()},yb(a){return[".","..",...Object.keys(a.ra)]},nb(a,b,c){a=O.createNode(a,b,41471,0);a.link=c;return a},bb(a){if(40960!==(a.mode&61440))throw new N(28);return a.link}},qa:{read(a,b,c,d,e){var f=a.node.ra;if(e>=a.node.xa)return 0;a=Math.min(a.node.xa-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.ra,a.ra=new Uint8Array(f),0b)throw new N(28);return b},vb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new N(43);a=a.node.ra;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=eb(b);if(!e)throw new N(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},kb=async a=>{a=await ha(a);return new Uint8Array(a)},lb=0,mb=null,nb=()=>{lb--;l.monitorRunDependencies?.(lb);if(0==lb&&mb){var a=mb;mb=null;a()}},ob=()=>{lb++;l.monitorRunDependencies?.(lb)},pb=[],qb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Ec();for(var c of pb)if(c.canHandle(b))return c.handle(a,b);return a},rb=null,sb={},tb=[],ub=1,vb=null,wb=!1,xb=!0,yb={},N=class{name="ErrnoError";constructor(a){this.ya=a}},zb=class{mb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.mb.flags}set flags(a){this.mb.flags=a}get position(){return this.mb.position}set position(a){this.mb.position=a}},Ab=class{sa={};qa={};lb=365;pb=146;Za=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Oa=a.Oa;this.id=ub++;this.name=b;this.mode=c;this.ab=d;this.Qa=this.Fa=this.Ea=Date.now()}get read(){return(this.mode&this.lb)===this.lb}set read(a){a?this.mode|=this.lb:this.mode&=~this.lb}get write(){return(this.mode&this.pb)===this.pb}set write(a){a?this.mode|=this.pb: -this.mode&=~this.pb}get hc(){return P(this.mode)}get fc(){return 8192===(this.mode&61440)}}; -function Bb(a,b={}){if(!a)throw new N(44);b.rb??(b.rb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=rb,e="/",f=0;f>>0)%vb.length} -function ib(a){var b=Db(a.parent.id,a.name);if(vb[b]===a)vb[b]=a.Ua;else for(b=vb[b];b;){if(b.Ua===a){b.Ua=a.Ua;break}b=b.Ua}}function hb(a,b){var c=P(a.mode)?(c=Eb(a,"x"))?c:a.sa.Ya?0:2:54;if(c)throw new N(c);for(c=vb[Db(a.id,b)];c;c=c.Ua){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.sa.Ya(a,b)}function gb(a,b,c,d){a=new Ab(a,b,c,d);b=Db(a.parent.id,a.name);a.Ua=vb[b];return vb[b]=a}function P(a){return 16384===(a&61440)} -function Fb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Eb(a,b){if(xb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Gb(a,b){if(!P(a.mode))return 54;try{return hb(a,b),20}catch(c){}return Eb(a,"wx")}function Hb(a){if(!a)throw new N(63);return a}function Q(a){a=tb[a];if(!a)throw new N(8);return a} -function Ib(a,b=-1){a=Object.assign(new zb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!tb[b])break a;throw new N(33);}a.Ra=b;return tb[b]=a}function Jb(a,b=-1){a=Ib(a,b);a.qa?.Bc?.(a);return a}function Kb(a,b){var c=null?.qa.Na,d=c?null:a;c??=a.sa.Na;Hb(c);c(d,b)}var fb={open(a){a.qa=sb[a.node.ab].qa;a.qa.open?.(a)},Ja(){throw new N(70);}};function $a(a,b){sb[a]={qa:b}} -function Lb(a,b){var c="/"===b;if(c&&rb)throw new N(10);if(!c&&b){var d=Bb(b,{rb:!1});b=d.path;d=d.node;if(d.Za)throw new N(10);if(!P(d.mode))throw new N(54);}b={type:a,Fc:{},Lb:b,jc:[]};a=a.Oa(b);a.Oa=b;b.root=a;c?rb=a:d&&(d.Za=b,d.Oa&&d.Oa.jc.push(b))}function Mb(a,b,c){var d=Bb(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new N(28);if("."===a||".."===a)throw new N(20);var e=Gb(d,a);if(e)throw new N(e);if(!d.sa.jb)throw new N(63);return d.sa.jb(d,a,b,c)} -function Nb(a,b=438){return Mb(a,b&4095|32768,0)}function R(a){return Mb(a,16895,0)}function Ob(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Mb(a,b|8192,c)}function Pb(a,b){if(!Sa(a))throw new N(44);var c=Bb(b,{parent:!0}).node;if(!c)throw new N(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Gb(c,b);if(d)throw new N(d);if(!c.sa.nb)throw new N(63);c.sa.nb(c,b,a)} -function Qb(a){var b=Bb(a,{parent:!0}).node;if(!b)throw new N(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=hb(b,a);a:{try{var d=hb(b,a)}catch(f){d=f.ya;break a}var e=Eb(b,"wx");d=e?e:P(d.mode)?31:0}if(d)throw new N(d);if(!b.sa.ob)throw new N(63);if(c.Za)throw new N(10);b.sa.ob(b,a);ib(c)}function Rb(a,b){a=Bb(a,{fb:!b}).node;return Hb(a.sa.Ia)(a)}function Sb(a,b){a="string"==typeof a?Bb(a,{fb:!0}).node:a;Kb(a,{mode:b&4095|a.mode&-4096,Ea:Date.now(),Ac:void 0})} -function Tb(a,b,c=438){if(""===a)throw new N(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Bb(a,{fb:!(b&131072),lc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new N(20);}else{if(e)throw new N(31);d=Mb(a,c|511,0);f=!0}if(!d)throw new N(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!P(d.mode))throw new N(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:P(d.mode)&&("r"!==Fb(b)||b&576)?31:Eb(d,Fb(b)):44))throw new N(e);if(b&512&&!f){e=d;e="string"==typeof e?Bb(e,{fb:!0}).node:e;if(P(e.mode))throw new N(31);if(32768!==(e.mode&61440))throw new N(28);var g=Eb(e,"w");if(g)throw new N(g);Kb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Ib({node:d,path:Cb(d),flags:b,seekable:!0,position:0,qa:d.qa,uc:[],error:!1});e.qa.open&&e.qa.open(e);f&&Sb(d,c&511);!l.logReadFiles||b&1||a in yb||(yb[a]=1);return e} -function Ub(a){if(null===a.Ra)throw new N(8);a.sb&&(a.sb=null);try{a.qa.close&&a.qa.close(a)}catch(b){throw b;}finally{tb[a.Ra]=null}a.Ra=null}function Vb(a,b,c){if(null===a.Ra)throw new N(8);if(!a.seekable||!a.qa.Ja)throw new N(70);if(0!=c&&1!=c&&2!=c)throw new N(28);a.position=a.qa.Ja(a,b,c);a.uc=[]} -function Wb(a,b,c,d,e,f){if(0>d||0>e)throw new N(28);if(null===a.Ra)throw new N(8);if(0===(a.flags&2097155))throw new N(8);if(P(a.node.mode))throw new N(31);if(!a.qa.write)throw new N(28);a.seekable&&a.flags&1024&&Vb(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new N(70);b=a.qa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Xb(a,b){a="string"==typeof a?a:Cb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Oa(a+"/"+c);try{R(d)}catch(e){if(20!=e.ya)throw e;}a=d}}return d}function Yb(a,b,c,d){a=Oa(("string"==typeof a?a:Cb(a))+"/"+b);return Nb(a,jb(c,d))} -function Zb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Cb(a),g=b?Oa(a+"/"+b):a);a=jb(d,e);g=Nb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=m.length)return 0;u=Math.min(m.length-w,u);if(m.slice)for(var x=0;xthis.length-1||0>m)){var t=m%this.Eb;return this.Xa(m/this.Eb|0)[t]}}pc(m){this.Xa=m}Cb(){var m=new XMLHttpRequest;m.open("HEAD",c,!1);m.send(null);200<=m.status&&300>m.status||304===m.status||H("Couldn't load "+c+". Status: "+m.status);var t=Number(m.getResponseHeader("Content-length")), -z,u=(z=m.getResponseHeader("Accept-Ranges"))&&"bytes"===z;m=(z=m.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;u||(w=t);var x=this;x.pc(E=>{var F=E*w,K=(E+1)*w-1;K=Math.min(K,t-1);if("undefined"==typeof x.eb[E]){var y=x.eb;F>K&&H("invalid range ("+F+", "+K+") or no bytes requested!");K>t-1&&H("only "+t+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);t!==w&&J.setRequestHeader("Range","bytes="+F+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||H("Couldn't load "+c+". Status: "+J.status);F=void 0!==J.response?new Uint8Array(J.response||[]):Xa(J.responseText||"");y[E]=F}"undefined"==typeof x.eb[E]&&H("doXHR failed!");return x.eb[E]});if(m||!t)w=t=1,w=t=this.Xa(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.Bb=t;this.Ab=w;this.ub=!0}get length(){this.ub||this.Cb();return this.Bb}get Eb(){this.ub|| -this.Cb();return this.Ab}}if(globalThis.XMLHttpRequest){ba||H("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var n=Yb(a,b,d,e);h?n.ra=h:k&&(n.ra=null,n.url=k);Object.defineProperties(n,{xa:{get:function(){return this.ra.length}}});var p={};Object.keys(n.qa).forEach(m=>{var t=n.qa[m];p[m]=(...z)=>{ac(n);return t(...z)}});p.read=(m,t,z,u,w)=>{ac(n);return f(m,t,z,u,w)};p.vb=(m,t,z)=>{ac(n); -var u=eb(t);if(!u)throw new N(48);f(m,r,u,t,z);return{ta:u,Sa:!0}};n.qa=p;return n}var S={},cc=(a,b,c)=>a?L(v,a,b,c):"";function dc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":Q(a).path;if(0==b.length){if(!c)throw new N(44);return a}return a+"/"+b} -function ec(a,b){D[a>>2]=b.Sb;D[a+4>>2]=b.mode;D[a+8>>2]=b.kc;D[a+12>>2]=b.uid;D[a+16>>2]=b.Zb;D[a+20>>2]=b.ab;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.Qb;var c=b.Qa.getTime(),d=b.Fa.getTime(),e=b.Ea.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));D[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));D[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));D[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.ac);return 0}var La=void 0,fc={},gc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function hc(a){return this.za(D[a>>2])} -var ic={},jc={},kc={},lc=class extends Error{constructor(a){super(a);this.name="InternalError"}},mc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new lc("Mismatched type converter count");for(var k=0;kkc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{jc.hasOwnProperty(h)?e[k]=jc[h]:(f.push(h),ic.hasOwnProperty(h)||(ic[h]=[]),ic[h].push(()=>{e[k]=jc[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},U=a=>{for(var b="";;){var c=v[a++];if(!c)return b; -b+=String.fromCharCode(c)}},V=class extends Error{constructor(a){super(a);this.name="BindingError"}};function nc(a,b,c={}){var d=b.name;if(!a)throw new V(`type "${d}" must have a positive integer typeid pointer`);if(jc.hasOwnProperty(a)){if(c.$b)return;throw new V(`Cannot register type '${d}' twice`);}jc[a]=b;delete kc[a];ic.hasOwnProperty(a)&&(b=ic[a],delete ic[a],b.forEach(e=>e()))}function T(a,b,c={}){return nc(a,b,c)} -var oc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>v[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>D[d>>2];case 8:return c?d=>G[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},pc=a=>{throw new V(a.pa.wa.va.name+" instance already deleted");},qc=!1,rc=()=>{},sc=a=>{if(!globalThis.FinalizationRegistry)return sc=b=>b,a;qc=new FinalizationRegistry(b=>{b=b.pa;--b.count.value;0===b.count.value&&(b.Ba?b.Ga.La(b.Ba):b.wa.va.La(b.ta))});sc= -b=>{var c=b.pa;c.Ba&&qc.register(b,{pa:c},b);return b};rc=b=>{qc.unregister(b)};return sc(a)},tc=[];function uc(){} -var vc=(a,b)=>Object.defineProperty(b,"name",{value:a}),wc={},xc=(a,b,c)=>{if(void 0===a[b].Aa){var d=a[b];a[b]=function(...e){if(!a[b].Aa.hasOwnProperty(e.length))throw new V(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Aa})!`);return a[b].Aa[e.length].apply(this,e)};a[b].Aa=[];a[b].Aa[d.Va]=d}},yc=(a,b,c)=>{if(l.hasOwnProperty(a)){if(void 0===c||void 0!==l[a].Aa&&void 0!==l[a].Aa[c])throw new V(`Cannot register public name '${a}' twice`);xc(l, -a,a);if(l[a].Aa.hasOwnProperty(c))throw new V(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);l[a].Aa[c]=b}else l[a]=b,l[a].Va=c},zc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Ac(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Ta=c;this.La=d;this.Da=e;this.Vb=f;this.cb=g;this.Tb=h;this.nc=[]} -var Bc=(a,b,c)=>{for(;b!==c;){if(!b.cb)throw new V(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.cb(a);b=b.Da}return a},Cc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Dc(a,b){if(null===b){if(this.tb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.pa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.pa.ta)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);return Bc(b.pa.ta,b.pa.wa.va,this.va)} -function Ec(a,b){if(null===b){if(this.tb)throw new V(`null is not a valid ${this.name}`);if(this.ib){var c=this.xb();null!==a&&a.push(this.La,c);return c}return 0}if(!b||!b.pa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.pa.ta)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.hb&&b.pa.wa.hb)throw new V(`Cannot convert argument of type ${b.pa.Ga?b.pa.Ga.name:b.pa.wa.name} to parameter type ${this.name}`);c=Bc(b.pa.ta,b.pa.wa.va,this.va);if(this.ib){if(void 0=== -b.pa.Ba)throw new V("Passing raw pointer to smart pointer is illegal");switch(this.tc){case 0:if(b.pa.Ga===this)c=b.pa.Ba;else throw new V(`Cannot convert argument of type ${b.pa.Ga?b.pa.Ga.name:b.pa.wa.name} to parameter type ${this.name}`);break;case 1:c=b.pa.Ba;break;case 2:if(b.pa.Ga===this)c=b.pa.Ba;else{var d=b.clone();c=this.oc(c,Fc(()=>d["delete"]()));null!==a&&a.push(this.La,c)}break;default:throw new V("Unsupporting sharing policy");}}return c} -function Gc(a,b){if(null===b){if(this.tb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.pa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.pa.ta)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.pa.wa.hb)throw new V(`Cannot convert argument of type ${b.pa.wa.name} to parameter type ${this.name}`);return Bc(b.pa.ta,b.pa.wa.va,this.va)} -var Hc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Da)return null;a=Hc(a,b,c.Da);return null===a?null:c.Tb(a)},Ic={},Jc=(a,b)=>{if(void 0===b)throw new V("ptr should not be undefined");for(;a.Da;)b=a.cb(b),a=a.Da;return Ic[b]},Kc=(a,b)=>{if(!b.wa||!b.ta)throw new lc("makeClassHandle requires ptr and ptrType");if(!!b.Ga!==!!b.Ba)throw new lc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return sc(Object.create(a,{pa:{value:b,writable:!0}}))}; -function Lc(a,b,c,d,e,f,g,h,k,n,p){this.name=a;this.va=b;this.tb=c;this.hb=d;this.ib=e;this.mc=f;this.tc=g;this.Mb=h;this.xb=k;this.oc=n;this.La=p;e||void 0!==b.Da?this.Ca=Ec:(this.Ca=d?Dc:Gc,this.Ha=null)}var Mc=(a,b,c)=>{if(!l.hasOwnProperty(a))throw new lc("Replacing nonexistent public symbol");void 0!==l[a].Aa&&void 0!==c?l[a].Aa[c]=b:(l[a]=b,l[a].Va=c)},W=(a,b)=>{a=U(a);var c=Ka(b);if("function"!=typeof c)throw new V(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Nc extends Error{}var Qc=a=>{a=Oc(a);var b=U(a);Pc(a);return b},Rc=(a,b)=>{function c(f){e[f]||jc[f]||(kc[f]?kc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Nc(`${a}: `+d.map(Qc).join([", "]));};function Sc(a){for(var b=1;bf)throw new V("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Sc(b),k=!b[0].ic,n=f-2,p=Array(n),m=[],t=[];return vc(a,function(...z){t.length=0;m.length=g?2:1;m[0]=e;if(g){var u=b[1].Ca(t,this);m[1]=u}for(var w=0;w{for(var c=[],d=0;d>2]);return c},Vc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Wc=[],Xc=[0,1,,1,null,1,!0,1,!1,1],Yc=a=>{9{if(!a)throw new V(`Cannot use deleted val. handle = ${a}`);return Xc[a]},Fc=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Wc.pop()||Xc.length;Xc[b]=a;Xc[b+1]=1;return b}},Zc={name:"emscripten::val",za:a=>{var b= -X(a);Yc(a);return b},Ca:(a,b)=>Fc(b),Ma:hc,Ha:null},$c=(a,b)=>{switch(b){case 4:return function(c){return this.za(ra[c>>2])};case 8:return function(c){return this.za(sa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ad=Object.assign({optional:!0},Zc),bd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,cd=(a,b,c)=>{a>>=1;b=Ua(pa,a,b/2,c);if(16{c??=2147483647; -if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},ed=a=>2*a.length,fd=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=D[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},gd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},hd=a=>{for(var b=0,c=0;c{var b=kd.length;kd.push(a);return b},md=(a,b)=>{for(var c=Array(a),d=0;d>2],g=jc[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Qc(f)}`,new V(a);c[e]=g}return c},nd={},od=a=>{var b=nd[a];return void 0===b?U(a):b},pd=a=>0===a%4&&(0!==a%100||0===a%400),qd=[0,31,60,91,121,152,182,213,244,274,305,335],rd=[0,31,59,90,120,151,181,212,243,273,304,334],sd={},td=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},ud=a=>{ma=a;Ha|| -0{if(!la)try{if(a(),!(Ha||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Ad; -function Bd(a,b,c,d,e){function f(){var I=0,C=0;y.response&&E&&0===D[a+12>>2]&&(C=y.response.byteLength);0>2]=I;Z(a+16,C);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);A[a+40>>1]=y.readyState;A[a+42>>1]=y.status;y.statusText&&M(y.statusText,v,a+44,64);K&&(I=Dd(y.responseURL),D[a+200>>2]=I)}var g=D[a+8>>2];if(g){var h=g?L(v,g):"",k=a+108,n=cc(k+0);n||="GET";var p=D[k+56>>2],m=D[k+68>>2],t=D[k+72>>2];g=D[k+76>>2];var z=D[k+80>>2], -u=D[k+84>>2],w=D[k+88>>2],x=D[k+52>>2],E=!!(x&1),F=!!(x&2),K=!!(x&64);m=m?m?L(v,m):"":void 0;t=t?t?L(v,t):"":void 0;var y=new XMLHttpRequest;y.withCredentials=!!v[k+60];y.open(n,h,!K,m,t);K||(y.timeout=p);y.Hc=h;y.responseType="arraybuffer";z&&(h=z?L(v,z):"",y.overrideMimeType(h));if(g)for(;;){k=D[g>>2];if(!k)break;h=D[g+4>>2];if(!h)break;g+=8;k=k?L(v,k):"";h=h?L(v,h):"";y.setRequestHeader(k,h)}var J=xd(y);D[a>>2]=J;g=u&&w?v.slice(u,u+w):null;y.onload=I=>{Y.has(J)&&(f(),200<=y.status&&300>y.status? -b(a,y,I):c(a,I))};y.onerror=I=>{Y.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Y.has(J)&&c(a,I)};y.onprogress=I=>{if(Y.has(J)){var C=E&&F&&y.response?y.response.byteLength:0,qa=0;0>2]=qa;Z(a+16,C);Z(a+24,I.loaded-C);Z(a+32,I.total);A[a+40>>1]=y.readyState;C=y.status;3<=y.readyState&&0===y.status&&0>1]=C;y.statusText&&M(y.statusText,v,a+44,64);d(a,I);Pc(qa)}};y.onreadystatechange=I=>{if(Y.has(J)){A[a+40>>1]=y.readyState; -2<=y.readyState&&(A[a+42>>1]=y.status);if(!K&&2===y.readyState&&0>2]=C}e(a,I)}};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{D[a>>2]=b;D[a+4>>2]=(b-D[a>>2])/4294967296},Dd=a=>{var b=Wa(a)+1,c=Cd(b);c&&M(a,v,c,b);return c}; -function Ed(a,b,c,d){var e=Ad;if(e){var f=D[a+108+64>>2];f||=D[a+8>>2];var g=f?L(v,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;M("OK",v,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;M("Payload Too Large",v,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Fd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?L(v,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Cd(h);v.set(new Uint8Array(g),k);D[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;M("OK",v,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,M("Not Found",v,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;M("Not Found", -v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?L(v,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;D[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;M("OK",v,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;M("Not Found",v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Hd={},Jd=()=>{if(!Id){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Hd)void 0===Hd[b]?delete a[b]:a[b]=Hd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Id=c}return Id},Id;vb=Array(4096);Lb(O,"/");R("/tmp");R("/home");R("/home/web_user"); -(function(){R("/dev");$a(259,{read:()=>0,write:(d,e,f,g)=>g,Ja:()=>0});Ob("/dev/null",259);Za(1280,bb);Za(1536,cb);Ob("/dev/tty",1280);Ob("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Ra(a),b=a.byteLength);return a[--b]};$b("/dev","random",c);$b("/dev","urandom",c);R("/dev/shm");R("/dev/shm/tmp")})(); -(function(){R("/proc");var a=R("/proc/self");R("/proc/self/fd");Lb({Oa(){var b=gb(a,"fd",16895,73);b.qa={Ja:O.qa.Ja};b.sa={Ya(c,d){c=+d;var e=Q(c);c={parent:null,Oa:{Lb:"fake"},sa:{bb:()=>e.path},id:c+1};return c.parent=c},yb(){return Array.from(tb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=uc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof uc&&c instanceof uc))return!1;var d=this.pa.wa.va,e=this.pa.ta;c.pa=c.pa;var f=c.pa.wa.va;for(c=c.pa.ta;d.Da;)e=d.cb(e),d=d.Da;for(;f.Da;)c=f.cb(c),f=f.Da;return d===f&&e===c},clone:function(){this.pa.ta||pc(this);if(this.pa.$a)return this.pa.count.value+=1,this;var c=sc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.pa;c=c(e.call(d,f,{pa:{value:{count:g.count,Wa:g.Wa,$a:g.$a,ta:g.ta,wa:g.wa,Ba:g.Ba,Ga:g.Ga}}})); -c.pa.count.value+=1;c.pa.Wa=!1;return c},["delete"](){this.pa.ta||pc(this);if(this.pa.Wa&&!this.pa.$a)throw new V("Object already scheduled for deletion");rc(this);var c=this.pa;--c.count.value;0===c.count.value&&(c.Ba?c.Ga.La(c.Ba):c.wa.va.La(c.ta));this.pa.$a||(this.pa.Ba=void 0,this.pa.ta=void 0)},isDeleted:function(){return!this.pa.ta},deleteLater:function(){this.pa.ta||pc(this);if(this.pa.Wa&&!this.pa.$a)throw new V("Object already scheduled for deletion");tc.push(this);this.pa.Wa=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Lc.prototype,{Wb(a){this.Mb&&(a=this.Mb(a));return a},Gb(a){this.La?.(a)},Ma:hc,za:function(a){function b(){return this.ib?Kc(this.va.Ta,{wa:this.mc,ta:c,Ga:this,Ba:a}):Kc(this.va.Ta,{wa:this,ta:a})}var c=this.Wb(a);if(!c)return this.Gb(a),null;var d=Jc(this.va,c);if(void 0!==d){if(0===d.pa.count.value)return d.pa.ta=c,d.pa.Ba=a,d.clone();d=d.clone();this.Gb(a);return d}d=this.va.Vb(c);d=wc[d];if(!d)return b.call(this);d=this.hb?d.Rb:d.pointerType;var e=Hc(c,this.va,d.va);return null=== -e?b.call(this):this.ib?Kc(d.va.Ta,{wa:d,ta:e,Ga:this,Ba:a}):Kc(d.va.Ta,{wa:d,ta:e})}});(async function(){Y=new yd;ob("library_fetch_init");try{Ad=await zd()}catch(a){Ad=!1}finally{nb("library_fetch_init")}})();wa=l.wasmMemory?l.wasmMemory:new WebAssembly.Memory({initial:(l.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();l.noExitRuntime&&(Ha=l.noExitRuntime);l.preloadPlugins&&(pb=l.preloadPlugins);l.print&&(ja=l.print);l.printErr&&(q=l.printErr);l.wasmBinary&&(ka=l.wasmBinary); -l.thisProgram&&(da=l.thisProgram);if(l.preInit)for("function"==typeof l.preInit&&(l.preInit=[l.preInit]);0{var k=b?Sa(Oa(a+"/"+b)):a,n=`cp ${k}`;ob(n);try{var p=c;"string"==typeof c&&(p=await kb(c));p=await qb(p,k);h?.();f||Zb(a,b,p,d,e,g)}finally{nb(n)}};l.FS_unlink=(...a)=>Qb(...a);l.FS_createPath=(...a)=>Xb(...a);l.FS_createDevice=(...a)=>$b(...a); -l.FS_createDataFile=(...a)=>Zb(...a);l.FS_createLazyFile=(...a)=>bc(...a);var Kd={457785:(a,b,c,d)=>{a=a?L(v,a):"";b=b?L(v,b):"";c=c?L(v,c):"";d=d?L(v,d):"";throw Error(a+b+c+d);},458001:(a,b)=>{a=a?L(v,a):"";b=b?L(v,b):"";throw Error(a+b);},458111:a=>{a=a?L(v,a):"";throw Error(a);},458175:a=>{a=a?L(v,a):"";throw Error(a);},458239:a=>{a=a?L(v,a):"";throw Error(a);}},Oc,Cd,Pc,db,Ld,Ja;l.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Md={B:(a,b)=>Ka(a)(b),t:function(a,b,c){La=c;try{var d=Q(a);switch(b){case 0:var e=Ma();if(0>e)break;for(;tb[e];)e++;return Jb(d,e).Ra;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=Ma(),d.flags|=e,0;case 12:return e=Ma(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},V:function(a,b){try{var c=Q(a),d=c.node,e=c.qa.Ia;a=e?c:d;e??=d.sa.Ia;Hb(e);var f=e(a);return ec(b,f)}catch(g){if("undefined"==typeof S|| -"ErrnoError"!==g.name)throw g;return-g.ya}},W:function(a,b,c){La=c;try{var d=Q(a);switch(b){case 21509:return d.ua?0:-59;case 21505:if(!d.ua)return-59;if(d.ua.Pa.cc){a=[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];var e=Ma();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.ua?0:-59;case 21506:case 21507:case 21508:if(!d.ua)return-59;if(d.ua.Pa.dc)for(e=Ma(),a=[],f=0;32> -f;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.ua)return-59;e=Ma();return B[e>>2]=0;case 21520:return d.ua?-28:-59;case 21537:case 21531:e=Ma();if(!d.qa.bc)throw new N(59);return d.qa.bc(d,b,e);case 21523:if(!d.ua)return-59;d.ua.Pa.ec&&(f=[24,80],e=Ma(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.ua?0:-59;case 21515:return d.ua?0:-59;default:return-28}}catch(g){if("undefined"==typeof S||"ErrnoError"!==g.name)throw g;return-g.ya}},T:function(a,b){try{return a=a?L(v,a):"",ec(b,Rb(a, -!0))}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return-c.ya}},S:function(a,b,c,d){try{b=b?L(v,b):"";var e=d&256;b=dc(a,b,d&4096);return ec(c,e?Rb(b,!0):Rb(b))}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},u:function(a,b,c,d){La=d;try{b=b?L(v,b):"";b=dc(a,b);var e=d?Ma():0;return Tb(b,c,e).Ra}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},U:function(a,b){try{return a=a?L(v,a):"",ec(b,Rb(a))}catch(c){if("undefined"== -typeof S||"ErrnoError"!==c.name)throw c;return-c.ya}},Y:()=>H(""),e:a=>{var b=fc[a];delete fc[a];var c=b.xb,d=b.La,e=b.Hb,f=e.map(g=>g.Yb).concat(e.map(g=>g.rc));mc([a],f,g=>{var h={};e.forEach((k,n)=>{var p=g[n],m=k.Xa,t=k.Xb,z=g[n+e.length],u=k.qc,w=k.sc;h[k.Ub]={read:x=>p.za(m(t,x)),write:(x,E)=>{var F=[];u(w,x,z.Ca(F,E));gc(F)},optional:g[n].optional}});return[{name:b.name,za:k=>{var n={},p;for(p in h)n[p]=h[p].read(k);d(k);return n},Ca:(k,n)=>{for(var p in h)if(!(p in n||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var m=c();for(p in h)h[p].write(m,n[p]);null!==k&&k.push(d,m);return m},Ma:hc,Ha:d}]})},x:(a,b,c,d,e)=>{b=U(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}T(a,{name:b,za:f,Ca:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},Ma:oc(b,c,!d),Ha:null})},z:(a,b,c,d)=>{b=U(b);T(a,{name:b,za:function(e){return!!e},Ca:function(e,f){return f?c:d},Ma:function(e){return this.za(v[e])},Ha:null})},ga:(a,b,c,d,e,f,g,h,k,n,p,m,t)=>{p=U(p);f=W(e,f);h&&=W(g,h);n&&=W(k,n);t=W(m,t);var z= -zc(p);yc(z,function(){Rc(`Cannot construct ${p} due to unbound types`,[d])});mc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var w=u.va;var x=w.Ta}else x=uc.prototype;u=vc(p,function(...y){if(Object.getPrototypeOf(this)!==E)throw new V(`Use 'new' to construct ${p}`);if(void 0===F.Fb)throw new V(`${p} has no accessible constructor`);var J=F.Fb[y.length];if(void 0===J)throw new V(`Tried to invoke ctor of ${p} with invalid number of parameters (${y.length}) - expected (${Object.keys(F.Fb).toString()}) parameters instead!`); -return J.apply(this,y)});var E=Object.create(x,{constructor:{value:u}});u.prototype=E;var F=new Ac(p,u,E,t,w,f,h,n);if(F.Da){var K;(K=F.Da).zb??(K.zb=[]);F.Da.zb.push(F)}w=new Lc(p,F,!0,!1,!1);K=new Lc(p+"*",F,!1,!1,!1);x=new Lc(p+" const*",F,!1,!0,!1);wc[a]={pointerType:K,Rb:x};Mc(z,u);return[w,K,x]})},m:(a,b,c,d,e,f,g,h)=>{var k=Uc(c,d);b=U(b);b=Vc(b);f=W(e,f);mc([],[a],n=>{function p(){Rc(`Cannot call ${m} due to unbound types`,k)}n=n[0];var m=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&n.va.nc.push(b);var t=n.va.Ta,z=t[b];void 0===z||void 0===z.Aa&&z.className!==n.name&&z.Va===c-2?(p.Va=c-2,p.className=n.name,t[b]=p):(xc(t,b,m),t[b].Aa[c-2]=p);mc([],k,u=>{u=Tc(m,u,n,f,g);void 0===t[b].Aa?(u.Va=c-2,t[b]=u):t[b].Aa[c-2]=u;return[]});return[]})},ha:a=>T(a,Zc),w:(a,b,c)=>{b=U(b);T(a,{name:b,za:d=>d,Ca:(d,e)=>e,Ma:$c(b,c),Ha:null})},k:(a,b,c,d,e,f)=>{var g=Uc(b,c);a=U(a);a=Vc(a);e=W(d,e);yc(a,function(){Rc(`Cannot call ${a} due to unbound types`,g)},b-1);mc([],g,h=>{Mc(a,Tc(a,[h[0], -null].concat(h.slice(1)),null,e,f),b-1);return[]})},l:(a,b,c,d,e)=>{b=U(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}T(a,{name:b,za:f,Ca:(h,k)=>k,Ma:oc(b,c,0!==d),Ha:null})},h:(a,b,c)=>{function d(f){return new e(r.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=U(c);T(a,{name:c,za:d,Ma:d},{$b:!0})},g:a=>{T(a,ad)},y:(a,b)=>{b=U(b);T(a,{name:b,za(c){var d=cc(c+4,D[c>>2],!0); -Pc(c);return d},Ca(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new V("Cannot pass non-string to std::string");var f=e?Wa(d):d.length;var g=Cd(4+f+1),h=g+4;D[g>>2]=f;e?M(d,v,h,f+1):v.set(d,h);null!==c&&c.push(Pc,g);return g},Ma:hc,Ha(c){Pc(c)}})},q:(a,b,c)=>{c=U(c);if(2===b){var d=cd;var e=dd;var f=ed}else d=fd,e=gd,f=hd;T(a,{name:c,za:g=>{var h=d(g+4,D[g>>2]*b,!0);Pc(g);return h},Ca:(g,h)=>{if("string"!= -typeof h)throw new V(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),n=Cd(4+k+b);D[n>>2]=k/b;e(h,n+4,k+b);null!==g&&g.push(Pc,n);return n},Ma:hc,Ha(g){Pc(g)}})},f:(a,b,c,d,e,f)=>{fc[a]={name:U(b),xb:W(c,d),La:W(e,f),Hb:[]}},b:(a,b,c,d,e,f,g,h,k,n)=>{fc[a].Hb.push({Ub:U(b),Yb:c,Xa:W(d,e),Xb:f,rc:g,qc:W(h,k),sc:n})},A:(a,b)=>{b=U(b);T(a,{ic:!0,name:b,za:()=>{},Ca:()=>{}})},E:()=>{Ha=!1;jd=0},d:(a,b,c)=>{var [d,...e]=md(a,b),f=d.Ca.bind(d),g=e.map(k=>k.Ma.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=> -k.name)}) => ${d.name}>`;return ld(vc(b,(k,n,p,m)=>{for(var t=0,z=0;z>2]=Fc(k));return u}))},fa:Yc,ba:a=>{if(!a)return Fc(globalThis);a=od(a);return Fc(globalThis[a])},i:(a,b)=>{a=X(a);b=X(b);return Fc(a[b])},N:a=>{9kd[a](b,c,d,e),ea:()=>Fc([]),da:a=>Fc(od(a)),ca:()=>Fc({}),C:a=> -{var b=X(a);gc(b);Yc(a)},j:(a,b,c)=>{a=X(a);b=X(b);c=X(c);a[b]=c},K:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(pd(a.getFullYear())?qd:rd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},L:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(pd(b.getFullYear())? -qd:rd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},J:function(a,b,c,d,e,f){f=-9007199254740992>f||9007199254740992{sd[a]&&(clearTimeout(sd[a].id),delete sd[a]);if(!b)return 0;var c=setTimeout(()=>{delete sd[a];vd(()=>Ld(a,performance.now()))},b);sd[a]={id:c,Gc:b};return 0},M:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();D[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},n:(a,b,c)=>{wd.length=0;for(var d;d=v[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;wd.push(112==d?D[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]:sa[c>>3]);c+=e?8:4}return Kd[a](...wd)},X:()=>Date.now(),Z:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.Sa[a]=void 0;c.Ib.push(a);0b.readyState&&b.abort()}},I:()=>2147483648,o:()=>performance.now(), -$:()=>!ba,H:a=>{var b=v.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},_:function(a,b,c,d,e){function f(C){t?C():vd(C)}var g=a+108,h=D[g+36>>2],k=D[g+40>>2],n=D[g+44>>2],p=D[g+48>>2],m=D[g+52>>2],t=!!(m&64),z=C=>{f(()=>{h?Ka(h)(C):b?.(C)})},u=C=>{f(()=>{n?Ka(n)(C):d?.(C)})},w=C=>{f(()=>{k?Ka(k)(C): -c?.(C)})},x=C=>{f(()=>{p?Ka(p)(C):e?.(C)})},E=C=>{Bd(C,z,w,u,x)},F=(C,qa)=>{Ed(C,qa.response,Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})},Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})})},K=C=>{Bd(C,F,w,u,x)},y=cc(g+0),J=!!(m&16),I=!!(m&4);m=!!(m&32);if("EM_IDB_STORE"===y)E=D[g+84>>2],Ed(a,v.slice(E,E+D[g+88>>2]),z,w);else if("EM_IDB_DELETE"===y)Gd(a,z,w);else if(J){if(m)return 0;Bd(a,I?F:z,w,u,x)}else Fd(a,z,m?w:I?K:E);return a},Q:(a,b)=>{var c=0,d=0,e;for(e of Jd()){var f=b+c;D[a+d>>2]=f;c+=M(e,v,f,Infinity)+1;d+=4}return 0}, -R:(a,b)=>{var c=Jd();D[a>>2]=c.length;a=0;for(var d of c)a+=Wa(d)+1;D[b>>2]=a;return 0},v:a=>{ma=a;ud(a)},p:function(a){try{var b=Q(a);Ub(b);return 0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ya}},s:function(a,b,c,d){try{a:{var e=Q(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var n=e,p=h,m=k,t=f,z=r;if(0>m||0>t)throw new N(28);if(null===n.Ra)throw new N(8);if(1===(n.flags&2097155))throw new N(8);if(P(n.node.mode))throw new N(31);if(!n.qa.read)throw new N(28); -var u="undefined"!=typeof t;if(!u)t=n.position;else if(!n.seekable)throw new N(70);var w=n.qa.read(n,z,p,m,t);u||(n.position+=w);var x=w;if(0>x){var E=-1;break a}b+=x;if(x>2]=E;return 0}catch(F){if("undefined"==typeof S||"ErrnoError"!==F.name)throw F;return F.ya}},P:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.sb&&0===b&&0===c&&(e.sb=null);return 0}catch(f){if("undefined"== -typeof S||"ErrnoError"!==f.name)throw f;return f.ya}},r:function(a,b,c,d){try{a:{var e=Q(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var n=Wb(e,r,h,k,f);if(0>n){var p=-1;break a}b+=n;if(n>2]=p;return 0}catch(m){if("undefined"==typeof S||"ErrnoError"!==m.name)throw m;return m.ya}},aa:function(){var a=stackTrace(),b=Wa(a)+1,c=Cd(b);M(a,v,c,b);return c},a:wa,D:ud,G:function(a,b){try{return Ra(v.subarray(a,a+b)),0}catch(c){if("undefined"== -typeof S||"ErrnoError"!==c.name)throw c;return c.ya}}}; -function Nd(){function a(){l.calledRun=!0;if(!la){ua=!0;if(!l.noFSInit&&!wb){var b,c;wb=!0;b??=l.stdin;c??=l.stdout;d??=l.stderr;b?$b("/dev","stdin",b):Pb("/dev/tty","/dev/stdin");c?$b("/dev","stdout",null,c):Pb("/dev/tty","/dev/stdout");d?$b("/dev","stderr",null,d):Pb("/dev/tty1","/dev/stderr");Tb("/dev/stdin",0);Tb("/dev/stdout",1);Tb("/dev/stderr",1)}Od.ia();xb=!1;na?.(l);l.onRuntimeInitialized?.();if(l.postRun)for("function"==typeof l.postRun&&(l.postRun=[l.postRun]);l.postRun.length;){var d= -l.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>l.setStatus(""),1);a()},1)):a()}}var Od; -Od=await (async function(){function a(c){c=Od=c.exports;Oc=c.ja;Cd=c.ka;Pc=c.la;db=c.na;Ld=c.oa;Ja=c.ma;return Od}var b={a:Md};if(l.instantiateWasm)return new Promise(c=>{l.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=l.locateFile?l.locateFile?l.locateFile("BlinkIdModule.wasm",fa):fa+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Nd();moduleRtn=ua?l:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.wasm deleted file mode 100755 index 03116a9b..00000000 Binary files a/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.js b/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.js deleted file mode 100644 index 3b5f189c..00000000 --- a/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.js +++ /dev/null @@ -1,122 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var l=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=l).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);l.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,n){var p;(p=l).dataFileDownloads??(p.dataFileDownloads={});try{var m=await fetch(k)}catch(x){throw Error(`Network Error: ${k}`,{e:x});}if(!m.ok)throw Error(`${m.status}: ${m.url}`);p=[];n=Number(m.headers.get("Content-Length")??n);let t=0;l.setStatus?.("Downloading data...");for(m=m.body.getReader();;){var {done:z, -value:u}=await m.read();if(z)break;p.push(u);t+=u.length;l.dataFileDownloads[k]={loaded:t,total:n};let x=0,E=0;for(var w of Object.values(l.dataFileDownloads))x+=w.loaded,E+=w.total;l.setStatus?.(`Downloading data... (${x}/${E})`)}k=new Uint8Array(p.map(x=>x.length).reduce((x,E)=>x+E,0));w=0;for(const x of p)k.set(x,w),w+=x.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkid",!0,!0);for(var n of b.files)k.addRunDependency(`fp ${n.filename}`); -k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.data"]={Bc:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var m of b.files){var t=m.filename;k.FS_createDataFile(t, -null,p.subarray(m.start,m.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=l.locateFile?.("BlinkIdModule.data", -"")??"BlinkIdModule.data",f=b.remote_package_size,g,h=l.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(l.calledRun)d(l);else{let k;((k=l).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop",start:0,end:103198},{filename:"/microblink/blinkid/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/microblink/blinkid/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop", -start:106933,end:451389},{filename:"/microblink/blinkid/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/microblink/blinkid/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:775876,end:1044597},{filename:"/microblink/blinkid/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop",start:1044597,end:1051046},{filename:"/microblink/blinkid/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop", -start:1051046,end:2476219},{filename:"/microblink/blinkid/Model_8326c5065a6d8451d6d004db73babf4a4a9f502c68643a14934cc098d04bf44f.strop",start:2476219,end:2863913},{filename:"/microblink/blinkid/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2863913,end:3890768},{filename:"/microblink/blinkid/Model_93607315418f2c5d3abec06d0b2a81e69abeb1b8d0506ed6373d7d74bd5e4b05.strop",start:3890768,end:5135759},{filename:"/microblink/blinkid/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop", -start:5135759,end:5431561},{filename:"/microblink/blinkid/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:5431561,end:5438057},{filename:"/microblink/blinkid/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop",start:5438057,end:9543906},{filename:"/microblink/blinkid/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop",start:9543906,end:9669110},{filename:"/microblink/blinkid/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop", -start:9669110,end:9743555},{filename:"/microblink/blinkid/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:9743555,end:9818957},{filename:"/microblink/blinkid/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop",start:9818957,end:10482010},{filename:"/microblink/blinkid/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:10482010,end:10508308},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:10508308, -end:10528777},{filename:"/microblink/blinkid/serialized_embedder_db_1.12.bin",start:10528777,end:13806438}],remote_package_size:13806438})})();l.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}};l="undefined"!==typeof l?l:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!l.locateFile&&(l.locateFile=function(d,e){return"BlinkIdModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,v,A,pa,B,D,ra,sa,G,ta,ua=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);v=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);D=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);G=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function H(a){l.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),H(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=l.preRun.shift();Ea.push(a)},Ha=!0,Ia=[],Ka=a=>{var b=Ia[a];b||(Ia[a]=b=Ja.get(a));return b},L=()=>{var a=B[+La>>2];La+=4;return a},Ma=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Na=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Ma(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b? -"/":"")+a},Oa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Pa=()=>a=>crypto.getRandomValues(a),Qa=a=>{(Qa=Pa())(a)},Ra=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ma(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."}, -Sa=globalThis.TextDecoder&&new TextDecoder,Ta=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},M=(a,b=0,c,d)=>{c=Ta(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}, -Ua=[],Va=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},N=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]= -128|g&63;f++}}b[c]=0;return c-e},Wa=a=>{var b=Array(Va(a)+1);a=N(a,b,0,b.length);b.length=a;return b},Xa=[];function Ya(a,b){Xa[a]={input:[],output:[],Oa:b};Za(a,$a)} -var $a={open(a){var b=Xa[a.node.$a];if(!b)throw new O(43);a.ta=b;a.seekable=!1},close(a){a.ta.Oa.fb(a.ta)},fb(a){a.ta.Oa.fb(a.ta)},read(a,b,c,d){if(!a.ta||!a.ta.Oa.Hb)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=cb(65536,a);b&&v.fill(0,b,b+a);return b},P={Ja:null,Na(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.Ja||(P.Ja={dir:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma,Xa:P.ra.Xa,ib:P.ra.ib,Mb:P.ra.Mb,mb:P.ra.mb,Nb:P.ra.Nb,wb:P.ra.wb,lb:P.ra.lb},stream:{Ia:P.qa.Ia}}, -file:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma},stream:{Ia:P.qa.Ia,read:P.qa.read,write:P.qa.write,tb:P.qa.tb,Kb:P.qa.Kb}},link:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma,ab:P.ra.ab},stream:{}},Bb:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma},stream:eb}});c=fb(a,b,c,d);Q(c.mode)?(c.ra=P.Ja.dir.node,c.qa=P.Ja.dir.stream,c.pa={}):32768===(c.mode&61440)?(c.ra=P.Ja.file.node,c.qa=P.Ja.file.stream,c.wa=0,c.pa=null):40960===(c.mode&61440)?(c.ra=P.Ja.link.node,c.qa=P.Ja.link.stream):8192===(c.mode&61440)&&(c.ra=P.Ja.Bb.node,c.qa=P.Ja.Bb.stream); -c.Pa=c.Ea=c.Da=Date.now();a&&(a.pa[b]=c,a.Pa=a.Ea=a.Da=c.Pa);return c},Cc(a){return a.pa?a.pa.subarray?a.pa.subarray(0,a.wa):new Uint8Array(a.pa):new Uint8Array(0)},ra:{Ha(a){var b={};b.Rb=8192===(a.mode&61440)?a.id:1;b.$b=a.id;b.mode=a.mode;b.jc=1;b.uid=0;b.Yb=0;b.$a=a.$a;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.wa:40960===(a.mode&61440)?a.link.length:0;b.Pa=new Date(a.Pa);b.Ea=new Date(a.Ea);b.Da=new Date(a.Da);b.Ob=4096;b.Pb=Math.ceil(b.size/b.Ob);return b},Ma(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.wa!=b&&(0==b?(a.pa=null,a.wa=0):(c=a.pa,a.pa=new Uint8Array(b),c&&a.pa.set(c.subarray(0,Math.min(b,a.wa))),a.wa=b)))},Xa(){P.ob||(P.ob=new O(44),P.ob.stack="");throw P.ob;},ib(a,b,c,d){return P.createNode(a,b,c,d)},Mb(a,b,c){try{var d=gb(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.pa)throw new O(55);hb(d)}delete a.parent.pa[a.name];b.pa[c]=a;a.name=c;b.Da=b.Ea=a.parent.Da=a.parent.Ea=Date.now()},mb(a, -b){delete a.pa[b];a.Da=a.Ea=Date.now()},Nb(a,b){var c=gb(a,b),d;for(d in c.pa)throw new O(55);delete a.pa[b];a.Da=a.Ea=Date.now()},wb(a){return[".","..",...Object.keys(a.pa)]},lb(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},ab(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},qa:{read(a,b,c,d,e){var f=a.node.pa;if(e>=a.node.wa)return 0;a=Math.min(a.node.wa-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.pa,a.pa=new Uint8Array(f),0b)throw new O(28);return b},tb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.pa;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=db(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},jb=async a=>{a=await ha(a);return new Uint8Array(a)},kb=0,lb=null,mb=()=>{kb--;l.monitorRunDependencies?.(kb);if(0==kb&&lb){var a=lb;lb=null;a()}},nb=()=>{kb++;l.monitorRunDependencies?.(kb)},ob=[],pb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Dc();for(var c of ob)if(c.canHandle(b))return c.handle(a,b);return a},qb=null,rb={},sb=[],tb=1,ub=null,vb=!1,wb=!0,xb={},O=class{name="ErrnoError";constructor(a){this.ya=a}},yb=class{kb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.kb.flags}set flags(a){this.kb.flags=a}get position(){return this.kb.position}set position(a){this.kb.position=a}},zb=class{ra={};qa={};jb=365;nb=146;Ya=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Na=a.Na;this.id=tb++;this.name=b;this.mode=c;this.$a=d;this.Pa=this.Ea=this.Da=Date.now()}get read(){return(this.mode&this.jb)===this.jb}set read(a){a?this.mode|=this.jb:this.mode&=~this.jb}get write(){return(this.mode&this.nb)===this.nb}set write(a){a?this.mode|=this.nb: -this.mode&=~this.nb}get fc(){return Q(this.mode)}get ec(){return 8192===(this.mode&61440)}}; -function Ab(a,b={}){if(!a)throw new O(44);b.pb??(b.pb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=qb,e="/",f=0;f>>0)%ub.length} -function hb(a){var b=Cb(a.parent.id,a.name);if(ub[b]===a)ub[b]=a.Ta;else for(b=ub[b];b;){if(b.Ta===a){b.Ta=a.Ta;break}b=b.Ta}}function gb(a,b){var c=Q(a.mode)?(c=Db(a,"x"))?c:a.ra.Xa?0:2:54;if(c)throw new O(c);for(c=ub[Cb(a.id,b)];c;c=c.Ta){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ra.Xa(a,b)}function fb(a,b,c,d){a=new zb(a,b,c,d);b=Cb(a.parent.id,a.name);a.Ta=ub[b];return ub[b]=a}function Q(a){return 16384===(a&61440)} -function Eb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Db(a,b){if(wb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Fb(a,b){if(!Q(a.mode))return 54;try{return gb(a,b),20}catch(c){}return Db(a,"wx")}function Gb(a){if(!a)throw new O(63);return a}function Hb(a){a=sb[a];if(!a)throw new O(8);return a} -function Ib(a,b=-1){a=Object.assign(new yb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!sb[b])break a;throw new O(33);}a.Qa=b;return sb[b]=a}function Jb(a,b=-1){a=Ib(a,b);a.qa?.Ac?.(a);return a}function Kb(a,b){var c=null?.qa.Ma,d=c?null:a;c??=a.ra.Ma;Gb(c);c(d,b)}var eb={open(a){a.qa=rb[a.node.$a].qa;a.qa.open?.(a)},Ia(){throw new O(70);}};function Za(a,b){rb[a]={qa:b}} -function Lb(a,b){var c="/"===b;if(c&&qb)throw new O(10);if(!c&&b){var d=Ab(b,{pb:!1});b=d.path;d=d.node;if(d.Ya)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,Ec:{},Jb:b,ic:[]};a=a.Na(b);a.Na=b;b.root=a;c?qb=a:d&&(d.Ya=b,d.Na&&d.Na.ic.push(b))}function Mb(a,b,c){var d=Ab(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Fb(d,a);if(e)throw new O(e);if(!d.ra.ib)throw new O(63);return d.ra.ib(d,a,b,c)} -function Nb(a,b=438){return Mb(a,b&4095|32768,0)}function R(a){return Mb(a,16895,0)}function Ob(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Mb(a,b|8192,c)}function Pb(a,b){if(!Ra(a))throw new O(44);var c=Ab(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Fb(c,b);if(d)throw new O(d);if(!c.ra.lb)throw new O(63);c.ra.lb(c,b,a)} -function Qb(a){var b=Ab(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=gb(b,a);a:{try{var d=gb(b,a)}catch(f){d=f.ya;break a}var e=Db(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.ra.mb)throw new O(63);if(c.Ya)throw new O(10);b.ra.mb(b,a);hb(c)}function Rb(a,b){a=Ab(a,{eb:!b}).node;return Gb(a.ra.Ha)(a)}function Sb(a,b){a="string"==typeof a?Ab(a,{eb:!0}).node:a;Kb(a,{mode:b&4095|a.mode&-4096,Da:Date.now(),zc:void 0})} -function Tb(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Ab(a,{eb:!(b&131072),kc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Mb(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Eb(b)||b&576)?31:Db(d,Eb(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Ab(e,{eb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Db(e,"w");if(g)throw new O(g);Kb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Ib({node:d,path:Bb(d),flags:b,seekable:!0,position:0,qa:d.qa,tc:[],error:!1});e.qa.open&&e.qa.open(e);f&&Sb(d,c&511);!l.logReadFiles||b&1||a in xb||(xb[a]=1);return e} -function Ub(a){if(null===a.Qa)throw new O(8);a.qb&&(a.qb=null);try{a.qa.close&&a.qa.close(a)}catch(b){throw b;}finally{sb[a.Qa]=null}a.Qa=null}function Vb(a,b,c){if(null===a.Qa)throw new O(8);if(!a.seekable||!a.qa.Ia)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.qa.Ia(a,b,c);a.tc=[]} -function Wb(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.Qa)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.qa.write)throw new O(28);a.seekable&&a.flags&1024&&Vb(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.qa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Xb(a,b){a="string"==typeof a?a:Bb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Na(a+"/"+c);try{R(d)}catch(e){if(20!=e.ya)throw e;}a=d}}return d}function Yb(a,b,c,d){a=Na(("string"==typeof a?a:Bb(a))+"/"+b);return Nb(a,ib(c,d))} -function Zb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Bb(a),g=b?Na(a+"/"+b):a);a=ib(d,e);g=Nb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=m.length)return 0;u=Math.min(m.length-w,u);if(m.slice)for(var x=0;xthis.length-1||0>m)){var t=m%this.Cb;return this.Wa(m/this.Cb|0)[t]}}oc(m){this.Wa=m}Ab(){var m=new XMLHttpRequest;m.open("HEAD",c,!1);m.send(null);200<=m.status&&300>m.status||304===m.status||H("Couldn't load "+c+". Status: "+m.status);var t=Number(m.getResponseHeader("Content-length")), -z,u=(z=m.getResponseHeader("Accept-Ranges"))&&"bytes"===z;m=(z=m.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;u||(w=t);var x=this;x.oc(E=>{var F=E*w,K=(E+1)*w-1;K=Math.min(K,t-1);if("undefined"==typeof x.cb[E]){var y=x.cb;F>K&&H("invalid range ("+F+", "+K+") or no bytes requested!");K>t-1&&H("only "+t+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);t!==w&&J.setRequestHeader("Range","bytes="+F+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||H("Couldn't load "+c+". Status: "+J.status);F=void 0!==J.response?new Uint8Array(J.response||[]):Wa(J.responseText||"");y[E]=F}"undefined"==typeof x.cb[E]&&H("doXHR failed!");return x.cb[E]});if(m||!t)w=t=1,w=t=this.Wa(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.zb=t;this.yb=w;this.sb=!0}get length(){this.sb||this.Ab();return this.zb}get Cb(){this.sb|| -this.Ab();return this.yb}}if(globalThis.XMLHttpRequest){ba||H("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var n=Yb(a,b,d,e);h?n.pa=h:k&&(n.pa=null,n.url=k);Object.defineProperties(n,{wa:{get:function(){return this.pa.length}}});var p={};Object.keys(n.qa).forEach(m=>{var t=n.qa[m];p[m]=(...z)=>{ac(n);return t(...z)}});p.read=(m,t,z,u,w)=>{ac(n);return f(m,t,z,u,w)};p.tb=(m,t,z)=>{ac(n); -var u=db(t);if(!u)throw new O(48);f(m,r,u,t,z);return{sa:u,Ra:!0}};n.qa=p;return n}var S={},cc=(a,b,c)=>a?M(v,a,b,c):"";function dc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":Hb(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function ec(a,b){D[a>>2]=b.Rb;D[a+4>>2]=b.mode;D[a+8>>2]=b.jc;D[a+12>>2]=b.uid;D[a+16>>2]=b.Yb;D[a+20>>2]=b.$a;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.Pb;var c=b.Pa.getTime(),d=b.Ea.getTime(),e=b.Da.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));D[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));D[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));D[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.$b);return 0}var La=void 0,fc={},gc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function hc(a){return this.xa(D[a>>2])} -var ic={},jc={},kc={},lc=class extends Error{constructor(a){super(a);this.name="InternalError"}},mc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new lc("Mismatched type converter count");for(var k=0;kkc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{jc.hasOwnProperty(h)?e[k]=jc[h]:(f.push(h),ic.hasOwnProperty(h)||(ic[h]=[]),ic[h].push(()=>{e[k]=jc[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},U=a=>{for(var b="";;){var c=v[a++];if(!c)return b; -b+=String.fromCharCode(c)}},V=class extends Error{constructor(a){super(a);this.name="BindingError"}};function nc(a,b,c={}){var d=b.name;if(!a)throw new V(`type "${d}" must have a positive integer typeid pointer`);if(jc.hasOwnProperty(a)){if(c.Zb)return;throw new V(`Cannot register type '${d}' twice`);}jc[a]=b;delete kc[a];ic.hasOwnProperty(a)&&(b=ic[a],delete ic[a],b.forEach(e=>e()))}function T(a,b,c={}){return nc(a,b,c)} -var oc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>v[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>D[d>>2];case 8:return c?d=>G[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},pc=a=>{throw new V(a.oa.va.ua.name+" instance already deleted");},qc=!1,rc=()=>{},sc=a=>{if(!globalThis.FinalizationRegistry)return sc=b=>b,a;qc=new FinalizationRegistry(b=>{b=b.oa;--b.count.value;0===b.count.value&&(b.Aa?b.Fa.Ka(b.Aa):b.va.ua.Ka(b.sa))});sc= -b=>{var c=b.oa;c.Aa&&qc.register(b,{oa:c},b);return b};rc=b=>{qc.unregister(b)};return sc(a)},tc=[];function uc(){} -var vc=(a,b)=>Object.defineProperty(b,"name",{value:a}),wc={},xc=(a,b,c)=>{if(void 0===a[b].za){var d=a[b];a[b]=function(...e){if(!a[b].za.hasOwnProperty(e.length))throw new V(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].za})!`);return a[b].za[e.length].apply(this,e)};a[b].za=[];a[b].za[d.Ua]=d}},yc=(a,b,c)=>{if(l.hasOwnProperty(a)){if(void 0===c||void 0!==l[a].za&&void 0!==l[a].za[c])throw new V(`Cannot register public name '${a}' twice`);xc(l, -a,a);if(l[a].za.hasOwnProperty(c))throw new V(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);l[a].za[c]=b}else l[a]=b,l[a].Ua=c},zc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Ac(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Sa=c;this.Ka=d;this.Ca=e;this.Ub=f;this.bb=g;this.Sb=h;this.mc=[]} -var Bc=(a,b,c)=>{for(;b!==c;){if(!b.bb)throw new V(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.bb(a);b=b.Ca}return a},Cc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Dc(a,b){if(null===b){if(this.rb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.oa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.oa.sa)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);return Bc(b.oa.sa,b.oa.va.ua,this.ua)} -function Ec(a,b){if(null===b){if(this.rb)throw new V(`null is not a valid ${this.name}`);if(this.hb){var c=this.vb();null!==a&&a.push(this.Ka,c);return c}return 0}if(!b||!b.oa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.oa.sa)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.gb&&b.oa.va.gb)throw new V(`Cannot convert argument of type ${b.oa.Fa?b.oa.Fa.name:b.oa.va.name} to parameter type ${this.name}`);c=Bc(b.oa.sa,b.oa.va.ua,this.ua);if(this.hb){if(void 0=== -b.oa.Aa)throw new V("Passing raw pointer to smart pointer is illegal");switch(this.sc){case 0:if(b.oa.Fa===this)c=b.oa.Aa;else throw new V(`Cannot convert argument of type ${b.oa.Fa?b.oa.Fa.name:b.oa.va.name} to parameter type ${this.name}`);break;case 1:c=b.oa.Aa;break;case 2:if(b.oa.Fa===this)c=b.oa.Aa;else{var d=b.clone();c=this.nc(c,Fc(()=>d["delete"]()));null!==a&&a.push(this.Ka,c)}break;default:throw new V("Unsupporting sharing policy");}}return c} -function Gc(a,b){if(null===b){if(this.rb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.oa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.oa.sa)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.oa.va.gb)throw new V(`Cannot convert argument of type ${b.oa.va.name} to parameter type ${this.name}`);return Bc(b.oa.sa,b.oa.va.ua,this.ua)} -var Hc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Ca)return null;a=Hc(a,b,c.Ca);return null===a?null:c.Sb(a)},Ic={},Jc=(a,b)=>{if(void 0===b)throw new V("ptr should not be undefined");for(;a.Ca;)b=a.bb(b),a=a.Ca;return Ic[b]},Kc=(a,b)=>{if(!b.va||!b.sa)throw new lc("makeClassHandle requires ptr and ptrType");if(!!b.Fa!==!!b.Aa)throw new lc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return sc(Object.create(a,{oa:{value:b,writable:!0}}))}; -function Lc(a,b,c,d,e,f,g,h,k,n,p){this.name=a;this.ua=b;this.rb=c;this.gb=d;this.hb=e;this.lc=f;this.sc=g;this.Lb=h;this.vb=k;this.nc=n;this.Ka=p;e||void 0!==b.Ca?this.Ba=Ec:(this.Ba=d?Dc:Gc,this.Ga=null)}var Mc=(a,b,c)=>{if(!l.hasOwnProperty(a))throw new lc("Replacing nonexistent public symbol");void 0!==l[a].za&&void 0!==c?l[a].za[c]=b:(l[a]=b,l[a].Ua=c)},W=(a,b)=>{a=U(a);var c=Ka(b);if("function"!=typeof c)throw new V(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Nc extends Error{}var Qc=a=>{a=Oc(a);var b=U(a);Pc(a);return b},Rc=(a,b)=>{function c(f){e[f]||jc[f]||(kc[f]?kc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Nc(`${a}: `+d.map(Qc).join([", "]));};function Sc(a){for(var b=1;bf)throw new V("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Sc(b),k=!b[0].hc,n=f-2,p=Array(n),m=[],t=[];return vc(a,function(...z){t.length=0;m.length=g?2:1;m[0]=e;if(g){var u=b[1].Ba(t,this);m[1]=u}for(var w=0;w{for(var c=[],d=0;d>2]);return c},Vc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Wc=[],Xc=[0,1,,1,null,1,!0,1,!1,1],Yc=a=>{9{if(!a)throw new V(`Cannot use deleted val. handle = ${a}`);return Xc[a]},Fc=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Wc.pop()||Xc.length;Xc[b]=a;Xc[b+1]=1;return b}},Zc={name:"emscripten::val",xa:a=>{var b= -X(a);Yc(a);return b},Ba:(a,b)=>Fc(b),La:hc,Ga:null},$c=(a,b)=>{switch(b){case 4:return function(c){return this.xa(ra[c>>2])};case 8:return function(c){return this.xa(sa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ad=Object.assign({optional:!0},Zc),bd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,cd=(a,b,c)=>{a>>=1;b=Ta(pa,a,b/2,c);if(16{c??=2147483647; -if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},ed=a=>2*a.length,fd=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=D[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},gd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},hd=a=>{for(var b=0,c=0;c{var b=kd.length;kd.push(a);return b},md=(a,b)=>{for(var c=Array(a),d=0;d>2],g=jc[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Qc(f)}`,new V(a);c[e]=g}return c},nd={},od=a=>{var b=nd[a];return void 0===b?U(a):b},pd=a=>0===a%4&&(0!==a%100||0===a%400),qd=[0,31,60,91,121,152,182,213,244,274,305,335],rd=[0,31,59,90,120,151,181,212,243,273,304,334],sd={},td=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},ud=a=>{ma=a;Ha|| -0{if(!la)try{if(a(),!(Ha||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Ad; -function Bd(a,b,c,d,e){function f(){var I=0,C=0;y.response&&E&&0===D[a+12>>2]&&(C=y.response.byteLength);0>2]=I;Z(a+16,C);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);A[a+40>>1]=y.readyState;A[a+42>>1]=y.status;y.statusText&&N(y.statusText,v,a+44,64);K&&(I=Dd(y.responseURL),D[a+200>>2]=I)}var g=D[a+8>>2];if(g){var h=g?M(v,g):"",k=a+108,n=cc(k+0);n||="GET";var p=D[k+56>>2],m=D[k+68>>2],t=D[k+72>>2];g=D[k+76>>2];var z=D[k+80>>2], -u=D[k+84>>2],w=D[k+88>>2],x=D[k+52>>2],E=!!(x&1),F=!!(x&2),K=!!(x&64);m=m?m?M(v,m):"":void 0;t=t?t?M(v,t):"":void 0;var y=new XMLHttpRequest;y.withCredentials=!!v[k+60];y.open(n,h,!K,m,t);K||(y.timeout=p);y.Gc=h;y.responseType="arraybuffer";z&&(h=z?M(v,z):"",y.overrideMimeType(h));if(g)for(;;){k=D[g>>2];if(!k)break;h=D[g+4>>2];if(!h)break;g+=8;k=k?M(v,k):"";h=h?M(v,h):"";y.setRequestHeader(k,h)}var J=xd(y);D[a>>2]=J;g=u&&w?v.slice(u,u+w):null;y.onload=I=>{Y.has(J)&&(f(),200<=y.status&&300>y.status? -b(a,y,I):c(a,I))};y.onerror=I=>{Y.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Y.has(J)&&c(a,I)};y.onprogress=I=>{if(Y.has(J)){var C=E&&F&&y.response?y.response.byteLength:0,qa=0;0>2]=qa;Z(a+16,C);Z(a+24,I.loaded-C);Z(a+32,I.total);A[a+40>>1]=y.readyState;C=y.status;3<=y.readyState&&0===y.status&&0>1]=C;y.statusText&&N(y.statusText,v,a+44,64);d(a,I);Pc(qa)}};y.onreadystatechange=I=>{if(Y.has(J)){A[a+40>>1]=y.readyState; -2<=y.readyState&&(A[a+42>>1]=y.status);if(!K&&2===y.readyState&&0>2]=C}e(a,I)}};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{D[a>>2]=b;D[a+4>>2]=(b-D[a>>2])/4294967296},Dd=a=>{var b=Va(a)+1,c=Cd(b);c&&N(a,v,c,b);return c}; -function Ed(a,b,c,d){var e=Ad;if(e){var f=D[a+108+64>>2];f||=D[a+8>>2];var g=f?M(v,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;N("Payload Too Large",v,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Fd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Cd(h);v.set(new Uint8Array(g),k);D[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,N("Not Found",v,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found", -v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;D[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found",v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Hd={},Jd=()=>{if(!Id){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Hd)void 0===Hd[b]?delete a[b]:a[b]=Hd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Id=c}return Id},Id;ub=Array(4096);Lb(P,"/");R("/tmp");R("/home");R("/home/web_user"); -(function(){R("/dev");Za(259,{read:()=>0,write:(d,e,f,g)=>g,Ia:()=>0});Ob("/dev/null",259);Ya(1280,ab);Ya(1536,bb);Ob("/dev/tty",1280);Ob("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Qa(a),b=a.byteLength);return a[--b]};$b("/dev","random",c);$b("/dev","urandom",c);R("/dev/shm");R("/dev/shm/tmp")})(); -(function(){R("/proc");var a=R("/proc/self");R("/proc/self/fd");Lb({Na(){var b=fb(a,"fd",16895,73);b.qa={Ia:P.qa.Ia};b.ra={Xa(c,d){c=+d;var e=Hb(c);c={parent:null,Na:{Jb:"fake"},ra:{ab:()=>e.path},id:c+1};return c.parent=c},wb(){return Array.from(sb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=uc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof uc&&c instanceof uc))return!1;var d=this.oa.va.ua,e=this.oa.sa;c.oa=c.oa;var f=c.oa.va.ua;for(c=c.oa.sa;d.Ca;)e=d.bb(e),d=d.Ca;for(;f.Ca;)c=f.bb(c),f=f.Ca;return d===f&&e===c},clone:function(){this.oa.sa||pc(this);if(this.oa.Za)return this.oa.count.value+=1,this;var c=sc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.oa;c=c(e.call(d,f,{oa:{value:{count:g.count,Va:g.Va,Za:g.Za,sa:g.sa,va:g.va,Aa:g.Aa,Fa:g.Fa}}})); -c.oa.count.value+=1;c.oa.Va=!1;return c},["delete"](){this.oa.sa||pc(this);if(this.oa.Va&&!this.oa.Za)throw new V("Object already scheduled for deletion");rc(this);var c=this.oa;--c.count.value;0===c.count.value&&(c.Aa?c.Fa.Ka(c.Aa):c.va.ua.Ka(c.sa));this.oa.Za||(this.oa.Aa=void 0,this.oa.sa=void 0)},isDeleted:function(){return!this.oa.sa},deleteLater:function(){this.oa.sa||pc(this);if(this.oa.Va&&!this.oa.Za)throw new V("Object already scheduled for deletion");tc.push(this);this.oa.Va=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Lc.prototype,{Vb(a){this.Lb&&(a=this.Lb(a));return a},Eb(a){this.Ka?.(a)},La:hc,xa:function(a){function b(){return this.hb?Kc(this.ua.Sa,{va:this.lc,sa:c,Fa:this,Aa:a}):Kc(this.ua.Sa,{va:this,sa:a})}var c=this.Vb(a);if(!c)return this.Eb(a),null;var d=Jc(this.ua,c);if(void 0!==d){if(0===d.oa.count.value)return d.oa.sa=c,d.oa.Aa=a,d.clone();d=d.clone();this.Eb(a);return d}d=this.ua.Ub(c);d=wc[d];if(!d)return b.call(this);d=this.gb?d.Qb:d.pointerType;var e=Hc(c,this.ua,d.ua);return null=== -e?b.call(this):this.hb?Kc(d.ua.Sa,{va:d,sa:e,Fa:this,Aa:a}):Kc(d.ua.Sa,{va:d,sa:e})}});(async function(){Y=new yd;nb("library_fetch_init");try{Ad=await zd()}catch(a){Ad=!1}finally{mb("library_fetch_init")}})();wa=l.wasmMemory?l.wasmMemory:new WebAssembly.Memory({initial:(l.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();l.noExitRuntime&&(Ha=l.noExitRuntime);l.preloadPlugins&&(ob=l.preloadPlugins);l.print&&(ja=l.print);l.printErr&&(q=l.printErr);l.wasmBinary&&(ka=l.wasmBinary); -l.thisProgram&&(da=l.thisProgram);if(l.preInit)for("function"==typeof l.preInit&&(l.preInit=[l.preInit]);0{var k=b?Ra(Na(a+"/"+b)):a,n=`cp ${k}`;nb(n);try{var p=c;"string"==typeof c&&(p=await jb(c));p=await pb(p,k);h?.();f||Zb(a,b,p,d,e,g)}finally{mb(n)}};l.FS_unlink=(...a)=>Qb(...a);l.FS_createPath=(...a)=>Xb(...a);l.FS_createDevice=(...a)=>$b(...a); -l.FS_createDataFile=(...a)=>Zb(...a);l.FS_createLazyFile=(...a)=>bc(...a);var Kd={457785:(a,b,c,d)=>{a=a?M(v,a):"";b=b?M(v,b):"";c=c?M(v,c):"";d=d?M(v,d):"";throw Error(a+b+c+d);},458001:(a,b)=>{a=a?M(v,a):"";b=b?M(v,b):"";throw Error(a+b);},458111:a=>{a=a?M(v,a):"";throw Error(a);},458175:a=>{a=a?M(v,a):"";throw Error(a);},458239:a=>{a=a?M(v,a):"";throw Error(a);}},Oc,Cd,Pc,cb,Ld,Ja;l.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Md={C:(a,b)=>Ka(a)(b),t:function(a,b,c){La=c;try{var d=Hb(a);switch(b){case 0:var e=L();if(0>e)break;for(;sb[e];)e++;return Jb(d,e).Qa;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=L(),d.flags|=e,0;case 12:return e=L(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},U:function(a,b){try{var c=Hb(a),d=c.node,e=c.qa.Ha;a=e?c:d;e??=d.ra.Ha;Gb(e);var f=e(a);return ec(b,f)}catch(g){if("undefined"==typeof S|| -"ErrnoError"!==g.name)throw g;return-g.ya}},V:function(a,b,c){La=c;try{var d=Hb(a);switch(b){case 21509:return d.ta?0:-59;case 21505:if(!d.ta)return-59;if(d.ta.Oa.bc){a=[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];var e=L();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.ta?0:-59;case 21506:case 21507:case 21508:if(!d.ta)return-59;if(d.ta.Oa.cc)for(e=L(),a=[],f=0;32>f;f++)a.push(r[e+ -f+17]);return 0;case 21519:if(!d.ta)return-59;e=L();return B[e>>2]=0;case 21520:return d.ta?-28:-59;case 21537:case 21531:e=L();if(!d.qa.ac)throw new O(59);return d.qa.ac(d,b,e);case 21523:if(!d.ta)return-59;d.ta.Oa.dc&&(f=[24,80],e=L(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.ta?0:-59;case 21515:return d.ta?0:-59;default:return-28}}catch(g){if("undefined"==typeof S||"ErrnoError"!==g.name)throw g;return-g.ya}},S:function(a,b){try{return a=a?M(v,a):"",ec(b,Rb(a,!0))}catch(c){if("undefined"== -typeof S||"ErrnoError"!==c.name)throw c;return-c.ya}},R:function(a,b,c,d){try{b=b?M(v,b):"";var e=d&256;b=dc(a,b,d&4096);return ec(c,e?Rb(b,!0):Rb(b))}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},u:function(a,b,c,d){La=d;try{b=b?M(v,b):"";b=dc(a,b);var e=d?L():0;return Tb(b,c,e).Qa}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},T:function(a,b){try{return a=a?M(v,a):"",ec(b,Rb(a))}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c; -return-c.ya}},X:()=>H(""),e:a=>{var b=fc[a];delete fc[a];var c=b.vb,d=b.Ka,e=b.Fb,f=e.map(g=>g.Xb).concat(e.map(g=>g.qc));mc([a],f,g=>{var h={};e.forEach((k,n)=>{var p=g[n],m=k.Wa,t=k.Wb,z=g[n+e.length],u=k.pc,w=k.rc;h[k.Tb]={read:x=>p.xa(m(t,x)),write:(x,E)=>{var F=[];u(w,x,z.Ba(F,E));gc(F)},optional:g[n].optional}});return[{name:b.name,xa:k=>{var n={},p;for(p in h)n[p]=h[p].read(k);d(k);return n},Ba:(k,n)=>{for(var p in h)if(!(p in n||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var m=c();for(p in h)h[p].write(m,n[p]);null!==k&&k.push(d,m);return m},La:hc,Ga:d}]})},x:(a,b,c,d,e)=>{b=U(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}T(a,{name:b,xa:f,Ba:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},La:oc(b,c,!d),Ga:null})},z:(a,b,c,d)=>{b=U(b);T(a,{name:b,xa:function(e){return!!e},Ba:function(e,f){return f?c:d},La:function(e){return this.xa(v[e])},Ga:null})},fa:(a,b,c,d,e,f,g,h,k,n,p,m,t)=>{p=U(p);f=W(e,f);h&&=W(g,h);n&&=W(k,n);t=W(m,t);var z= -zc(p);yc(z,function(){Rc(`Cannot construct ${p} due to unbound types`,[d])});mc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var w=u.ua;var x=w.Sa}else x=uc.prototype;u=vc(p,function(...y){if(Object.getPrototypeOf(this)!==E)throw new V(`Use 'new' to construct ${p}`);if(void 0===F.Db)throw new V(`${p} has no accessible constructor`);var J=F.Db[y.length];if(void 0===J)throw new V(`Tried to invoke ctor of ${p} with invalid number of parameters (${y.length}) - expected (${Object.keys(F.Db).toString()}) parameters instead!`); -return J.apply(this,y)});var E=Object.create(x,{constructor:{value:u}});u.prototype=E;var F=new Ac(p,u,E,t,w,f,h,n);if(F.Ca){var K;(K=F.Ca).xb??(K.xb=[]);F.Ca.xb.push(F)}w=new Lc(p,F,!0,!1,!1);K=new Lc(p+"*",F,!1,!1,!1);x=new Lc(p+" const*",F,!1,!0,!1);wc[a]={pointerType:K,Qb:x};Mc(z,u);return[w,K,x]})},m:(a,b,c,d,e,f,g,h)=>{var k=Uc(c,d);b=U(b);b=Vc(b);f=W(e,f);mc([],[a],n=>{function p(){Rc(`Cannot call ${m} due to unbound types`,k)}n=n[0];var m=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&n.ua.mc.push(b);var t=n.ua.Sa,z=t[b];void 0===z||void 0===z.za&&z.className!==n.name&&z.Ua===c-2?(p.Ua=c-2,p.className=n.name,t[b]=p):(xc(t,b,m),t[b].za[c-2]=p);mc([],k,u=>{u=Tc(m,u,n,f,g);void 0===t[b].za?(u.Ua=c-2,t[b]=u):t[b].za[c-2]=u;return[]});return[]})},ga:a=>T(a,Zc),w:(a,b,c)=>{b=U(b);T(a,{name:b,xa:d=>d,Ba:(d,e)=>e,La:$c(b,c),Ga:null})},k:(a,b,c,d,e,f)=>{var g=Uc(b,c);a=U(a);a=Vc(a);e=W(d,e);yc(a,function(){Rc(`Cannot call ${a} due to unbound types`,g)},b-1);mc([],g,h=>{Mc(a,Tc(a,[h[0], -null].concat(h.slice(1)),null,e,f),b-1);return[]})},l:(a,b,c,d,e)=>{b=U(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}T(a,{name:b,xa:f,Ba:(h,k)=>k,La:oc(b,c,0!==d),Ga:null})},h:(a,b,c)=>{function d(f){return new e(r.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=U(c);T(a,{name:c,xa:d,La:d},{Zb:!0})},g:a=>{T(a,ad)},y:(a,b)=>{b=U(b);T(a,{name:b,xa(c){var d=cc(c+4,D[c>>2],!0); -Pc(c);return d},Ba(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new V("Cannot pass non-string to std::string");var f=e?Va(d):d.length;var g=Cd(4+f+1),h=g+4;D[g>>2]=f;e?N(d,v,h,f+1):v.set(d,h);null!==c&&c.push(Pc,g);return g},La:hc,Ga(c){Pc(c)}})},q:(a,b,c)=>{c=U(c);if(2===b){var d=cd;var e=dd;var f=ed}else d=fd,e=gd,f=hd;T(a,{name:c,xa:g=>{var h=d(g+4,D[g>>2]*b,!0);Pc(g);return h},Ba:(g,h)=>{if("string"!= -typeof h)throw new V(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),n=Cd(4+k+b);D[n>>2]=k/b;e(h,n+4,k+b);null!==g&&g.push(Pc,n);return n},La:hc,Ga(g){Pc(g)}})},f:(a,b,c,d,e,f)=>{fc[a]={name:U(b),vb:W(c,d),Ka:W(e,f),Fb:[]}},b:(a,b,c,d,e,f,g,h,k,n)=>{fc[a].Fb.push({Tb:U(b),Xb:c,Wa:W(d,e),Wb:f,qc:g,pc:W(h,k),rc:n})},A:(a,b)=>{b=U(b);T(a,{hc:!0,name:b,xa:()=>{},Ba:()=>{}})},E:()=>{Ha=!1;jd=0},d:(a,b,c)=>{var [d,...e]=md(a,b),f=d.Ba.bind(d),g=e.map(k=>k.La.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=> -k.name)}) => ${d.name}>`;return ld(vc(b,(k,n,p,m)=>{for(var t=0,z=0;z>2]=Fc(k));return u}))},ea:Yc,aa:a=>{if(!a)return Fc(globalThis);a=od(a);return Fc(globalThis[a])},i:(a,b)=>{a=X(a);b=X(b);return Fc(a[b])},M:a=>{9kd[a](b,c,d,e),da:()=>Fc([]),ca:a=>Fc(od(a)),ba:()=>Fc({}),B:a=> -{var b=X(a);gc(b);Yc(a)},j:(a,b,c)=>{a=X(a);b=X(b);c=X(c);a[b]=c},J:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(pd(a.getFullYear())?qd:rd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},K:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(pd(b.getFullYear())? -qd:rd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},F:(a,b)=>{sd[a]&&(clearTimeout(sd[a].id),delete sd[a]);if(!b)return 0;var c=setTimeout(()=>{delete sd[a];vd(()=>Ld(a,performance.now()))},b);sd[a]={id:c,Fc:b};return 0},L:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset(); -D[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},n:(a,b,c)=>{wd.length=0;for(var d;d=v[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;wd.push(112==d?D[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]: -sa[c>>3]);c+=e?8:4}return Kd[a](...wd)},W:()=>Date.now(),Y:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.Ra[a]=void 0;c.Gb.push(a);0b.readyState&&b.abort()}},I:()=>2147483648,o:()=>performance.now(),_:()=>!ba,H:a=>{var b=v.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Z:function(a, -b,c,d,e){function f(C){t?C():vd(C)}var g=a+108,h=D[g+36>>2],k=D[g+40>>2],n=D[g+44>>2],p=D[g+48>>2],m=D[g+52>>2],t=!!(m&64),z=C=>{f(()=>{h?Ka(h)(C):b?.(C)})},u=C=>{f(()=>{n?Ka(n)(C):d?.(C)})},w=C=>{f(()=>{k?Ka(k)(C):c?.(C)})},x=C=>{f(()=>{p?Ka(p)(C):e?.(C)})},E=C=>{Bd(C,z,w,u,x)},F=(C,qa)=>{Ed(C,qa.response,Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})},Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})})},K=C=>{Bd(C,F,w,u,x)},y=cc(g+0),J=!!(m&16),I=!!(m&4);m=!!(m&32);if("EM_IDB_STORE"===y)E=D[g+84>>2],Ed(a,v.slice(E,E+D[g+88>> -2]),z,w);else if("EM_IDB_DELETE"===y)Gd(a,z,w);else if(J){if(m)return 0;Bd(a,I?F:z,w,u,x)}else Fd(a,z,m?w:I?K:E);return a},P:(a,b)=>{var c=0,d=0,e;for(e of Jd()){var f=b+c;D[a+d>>2]=f;c+=N(e,v,f,Infinity)+1;d+=4}return 0},Q:(a,b)=>{var c=Jd();D[a>>2]=c.length;a=0;for(var d of c)a+=Va(d)+1;D[b>>2]=a;return 0},v:a=>{ma=a;ud(a)},p:function(a){try{var b=Hb(a);Ub(b);return 0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ya}},s:function(a,b,c,d){try{a:{var e=Hb(a);a=b;for(var f, -g=b=0;g>2],k=D[a+4>>2];a+=8;var n=e,p=h,m=k,t=f,z=r;if(0>m||0>t)throw new O(28);if(null===n.Qa)throw new O(8);if(1===(n.flags&2097155))throw new O(8);if(Q(n.node.mode))throw new O(31);if(!n.qa.read)throw new O(28);var u="undefined"!=typeof t;if(!u)t=n.position;else if(!n.seekable)throw new O(70);var w=n.qa.read(n,z,p,m,t);u||(n.position+=w);var x=w;if(0>x){var E=-1;break a}b+=x;if(x>2]=E;return 0}catch(F){if("undefined"==typeof S||"ErrnoError"!== -F.name)throw F;return F.ya}},O:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.qb&&0===b&&0===c&&(e.qb=null);return 0}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return f.ya}},r:function(a,b,c,d){try{a:{var e=Hb(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var n=Wb(e,r,h,k,f);if(0>n){var p=-1;break a}b+=n;if(n> -2]=p;return 0}catch(m){if("undefined"==typeof S||"ErrnoError"!==m.name)throw m;return m.ya}},$:function(){var a=stackTrace(),b=Va(a)+1,c=Cd(b);N(a,v,c,b);return c},a:wa,D:ud,G:function(a,b){try{return Qa(v.subarray(a,a+b)),0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ya}}}; -function Nd(){function a(){l.calledRun=!0;if(!la){ua=!0;if(!l.noFSInit&&!vb){var b,c;vb=!0;b??=l.stdin;c??=l.stdout;d??=l.stderr;b?$b("/dev","stdin",b):Pb("/dev/tty","/dev/stdin");c?$b("/dev","stdout",null,c):Pb("/dev/tty","/dev/stdout");d?$b("/dev","stderr",null,d):Pb("/dev/tty1","/dev/stderr");Tb("/dev/stdin",0);Tb("/dev/stdout",1);Tb("/dev/stderr",1)}Od.ha();wb=!1;na?.(l);l.onRuntimeInitialized?.();if(l.postRun)for("function"==typeof l.postRun&&(l.postRun=[l.postRun]);l.postRun.length;){var d= -l.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>l.setStatus(""),1);a()},1)):a()}}var Od; -Od=await (async function(){function a(c){c=Od=c.exports;Oc=c.ia;Cd=c.ja;Pc=c.ka;cb=c.ma;Ld=c.na;Ja=c.la;return Od}var b={a:Md};if(l.instantiateWasm)return new Promise(c=>{l.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=l.locateFile?l.locateFile?l.locateFile("BlinkIdModule.wasm",fa):fa+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Nd();moduleRtn=ua?l:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.wasm deleted file mode 100755 index 94529790..00000000 Binary files a/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.data b/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.data similarity index 58% rename from packages/blinkid-wasm/dist/full/basic/BlinkIdModule.data rename to packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.data index 85ecead9..283902ab 100644 Binary files a/packages/blinkid-wasm/dist/full/basic/BlinkIdModule.data and b/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.data differ diff --git a/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.js b/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.js new file mode 100644 index 00000000..8607a842 --- /dev/null +++ b/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.js @@ -0,0 +1,139 @@ +async function createModule(moduleArg={}){var Module=moduleArg;var aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,k=ba&&globalThis.name=="em-pthread";Module.expectedDataFileDownloads||(Module.expectedDataFileDownloads=0);Module.expectedDataFileDownloads++;(()=>{var a=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;typeof k!="undefined"&&k||a||async function(b){async function c(l,m){Module.dataFileDownloads||(Module.dataFileDownloads={});try{var n=await fetch(l)}catch(F){throw Error(`Network Error: ${l}`,{e:F});}if(!n.ok)throw Error(`${n.status}: ${n.url}`); +var q=[];m=Number(n.headers.get("Content-Length")||m);var x=0;Module.setStatus&&Module.setStatus("Downloading data...");for(n=n.body.getReader();;){var y;({done:y,value:z}=await n.read());if(y)break;q.push(z);x+=z.length;Module.dataFileDownloads[l]={loaded:x,total:m};var z=y=0;for(var A of Object.values(Module.dataFileDownloads))y+=A.loaded,z+=A.total;Module.setStatus&&Module.setStatus(`Downloading data... (${y}/${z})`)}l=new Uint8Array(q.map(F=>F.length).reduce((F,H)=>F+H,0));A=0;for(let F of q)l.set(F, +A),A+=F.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkid",!0,!0);l.addRunDependency("datafile_bazel-out/wasm-opt-ST-ca8fd47425d1/bin/packages/blinkid-wasm/binding/full/simd-threads/BlinkIdModule.data");l.preloadResults||(l.preloadResults={});l.preloadResults["bazel-out/wasm-opt-ST-ca8fd47425d1/bin/packages/blinkid-wasm/binding/full/simd-threads/BlinkIdModule.data"]={Zf:!1};h||=await g;await async function(m){if(!m)throw Error("Loading data file failed."); +if(m.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData "+m.constructor.name);m=new Uint8Array(m);for(var n of b.files)l.FS_createDataFile(n.filename,null,m.subarray(n.start,n.end),!0,!0,!0);l.removeRunDependency("datafile_bazel-out/wasm-opt-ST-ca8fd47425d1/bin/packages/blinkid-wasm/binding/full/simd-threads/BlinkIdModule.data")}(h)}typeof window==="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"): +typeof process==="undefined"&&typeof location!=="undefined"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=Module.locateFile?Module.locateFile("BlinkIdModule.data",""):"BlinkIdModule.data",f=b.remote_package_size,g,h=Module.getPreloadedPackage&&Module.getPreloadedPackage(e,f);h||(g=c(e,f));Module.FS_createPath?d(Module):(Module.preRun||(Module.preRun=[]),Module.preRun.push(d))}({files:[{filename:"/microblink/blinkid/Model_02957b97.strop",start:0,end:103788}, +{filename:"/microblink/blinkid/Model_0574da24.strop",start:103788,end:492222},{filename:"/microblink/blinkid/Model_08a8e22c.strop",start:492222,end:1927416},{filename:"/microblink/blinkid/Model_11a41e0f.strop",start:1927416,end:1931621},{filename:"/microblink/blinkid/Model_3a69425d.strop",start:1931621,end:2257614},{filename:"/microblink/blinkid/Model_44dff8bf.strop",start:2257614,end:2383388},{filename:"/microblink/blinkid/Model_48e189e2.strop",start:2383388,end:2708721},{filename:"/microblink/blinkid/Model_49210872.strop", +start:2708721,end:7349173},{filename:"/microblink/blinkid/Model_649c20b5.strop",start:7349173,end:8377897},{filename:"/microblink/blinkid/Model_6683cb47.strop",start:8377897,end:8453877},{filename:"/microblink/blinkid/Model_7b97ad87.strop",start:8453877,end:8481280},{filename:"/microblink/blinkid/Model_7f5a4bc5.strop",start:8481280,end:8488480},{filename:"/microblink/blinkid/Model_84fd5736.strop",start:8488480,end:9735265},{filename:"/microblink/blinkid/Model_a54429ec.strop",start:9735265,end:9810544}, +{filename:"/microblink/blinkid/Model_a91e7e31.strop",start:9810544,end:10080086},{filename:"/microblink/blinkid/Model_a958c31c.strop",start:10080086,end:10425174},{filename:"/microblink/blinkid/Model_ad5b6c8e.strop",start:10425174,end:11089013},{filename:"/microblink/blinkid/Model_b18ce029.strop",start:11089013,end:12751539},{filename:"/microblink/blinkid/Model_de3c93f5.strop",start:12751539,end:12758356},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:12758356,end:12778825}],remote_package_size:12778825})})(); +var ca=import.meta.url,da="",ea,fa;if(aa||ba){try{da=(new URL(".",ca)).href}catch{}ba&&(fa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ea=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ha=console.log.bind(console),p=console.error.bind(console),ia,ja,ka=!1,la;class r{}class ma extends r{constructor(a){super();this.Yd=a}}function t(){oa.buffer!= +u.buffer&&pa()}var qa;if(k){var ra=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.xd;if(d==1){let e=[];self.onmessage=f=>e.push(f);qa=()=>{postMessage({xd:3});for(let f of e)a(f);self.onmessage=a};for(let f of c.gf)if(!Module[f]||Module[f].proxy)Module[f]=(...g)=>{postMessage({xd:9,ff:f,Pe:g})},f=="print"&&(ha=Module[f]),f=="printErr"&&(p=Module[f]);oa=c.Hf;pa();ja=c.If;sa();ta()}else if(d==2){ua(c.td);va(c.td,0,0,1,0,0);wa();xa(c.td);ra||(ya(),ra=!0);try{za(c.Df, +c.fe)}catch(e){if(e!="unwind")throw e;}}else d==4?ra&&Aa():d&&(p(`worker: received unknown command ${d}`),p(c))}catch(e){throw Ba&&Ca(),e;}}self.onmessage=a}var Ba=!1;function pa(){if(!u?.buffer?.cg){var a=oa.buffer;u=new Int8Array(a);Da=new Int16Array(a);v=new Uint8Array(a);Ea=new Uint16Array(a);w=new Int32Array(a);B=new Uint32Array(a);Fa=new Float32Array(a);Ga=new Float64Array(a);C=new BigInt64Array(a);Ha=new BigUint64Array(a)}}function Ia(){Ba=!0;k?qa():(Module.noFSInit||D.ie||D.init(),Ja.pc(), +D.Ge=!1)}function E(a){Module.onAbort?.(a);a=`Aborted(${a})`;p(a);ka=!0;throw new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");}var Ka;async function La(a){if(!ia)try{var b=await ea(a);return new Uint8Array(b)}catch{}if(a==Ka&&ia)a=new Uint8Array(ia);else if(fa)a=fa(a);else throw"both async and sync fetching of the wasm failed";return a}async function Ma(a,b){try{var c=await La(a);return await WebAssembly.instantiate(c,b)}catch(d){p(`failed to asynchronously prepare wasm: ${d}`), +E(d)}}async function Na(a){var b=Ka;if(!ia)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){p(`wasm streaming compile failed: ${d}`),p("falling back to ArrayBuffer instantiation")}return Ma(b,a)}function Oa(){Pa={ab:Qa,x:Ra,I:Sa,b:Ta,l:Ua,q:Va,qa:Wa,D:Xa,fb:Ya,jb:Za,f:$a,Ca:ab,zb:bb,Ab:cb,xb:db,wb:eb,Ba:fb,yb:gb,Fb:hb,y:ib,Ea:jb,Ib:kb,Eb:lb,aa:mb,Gb:nb,Da:ob,P:pb,Y:qb,H:rb,C:sb,Hb:tb,pa:ub,z:vb,n:wb,Jb:xb,sb:yb,hb:zb,za:Ab,cb:Bb,xa:Cb,rb:xa, +Cb:Db,p:Eb,Kb:Fb,Nb:Gb,L:Hb,$a:Ib,o:Jb,ba:Kb,Ub:Lb,fc:Mb,lc:Nb,_a:Ob,Q:Pb,mb:Qb,nb:Rb,kb:Sb,lb:Tb,db:Ub,ob:Vb,Za:Wb,pb:Xb,ha:Yb,ya:Zb,Db:$b,Bb:ac,Fa:bc,ib:cc,ea:dc,Ga:ec,gb:fc,Lb:hc,ub:ic,vb:jc,ra:kc,oa:lc,tb:mc,Aa:nc,qb:oc,na:pc,K:qc,wa:rc,Xa:sc,S:tc,Na:uc,N:vc,Z:wc,B:xc,Ra:yc,g:zc,la:Ac,c:Bc,ia:Cc,Ma:Dc,i:Ec,V:Fc,Ta:Gc,Ua:Hc,Va:Ic,k:Jc,va:Kc,Vb:Lc,sa:Mc,w:Nc,ma:Oc,Zb:Pc,u:Qc,Sa:Rc,Yb:Sc,T:Tc,M:Uc,O:Vc,mc:Wc,fa:Xc,Oa:Yc,Ya:Zc,Ka:$c,ja:ad,m:bd,Pb:cd,r:dd,Wa:ed,Pa:fd,$:gd,Ha:hd,ga:jd,_b:kd,e:ld,G:md, +ca:nd,Ob:od,Wb:pd,Qb:qd,Xb:rd,U:sd,ec:td,gc:ud,h:vd,_:wd,A:xd,J:zd,nc:Ad,ua:Bd,ac:Cd,j:Dd,W:Ed,ta:Fd,Ia:Gd,Sb:Hd,oc:Id,La:Jd,ka:Kd,Tb:Ld,d:Md,$b:Nd,bc:Od,Qa:Pd,cc:Qd,s:Rd,hc:Sd,ic:Td,kc:Ud,t:Vd,Rb:Wd,dc:Xd,v:Yd,E:Zd,jc:$d,X:ae,Ja:be,R:ce,da:de,F:ee,a:oa,bb:fe,eb:ge,Mb:he};return{a:Pa}}async function sa(){function a(c,d){Ja=c.exports;ie.push(Ja.yc);c=Ja;je=c.qc;ke=c.rc;le=Module._mbPingRequestFinished=c.sc;me=c.tc;ne=c.uc;oe=c.wc;ya=c.xc;pe=c.zc;va=c.Bc;Ca=c.Dc;qe=c.Ec;re=c.Fc;se=c.Gc;te=c.Hc;ue=c.Ic; +ve=c.Jc;G=c.Kc;we=c.Lc;xe=c.Mc;I=c.Nc;ye=c.Oc;J=c.Pc;ze=c.Qc;Ae=c.Rc;Be=c.Sc;Module.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=c.vc.value;Ce=c.Ac;ja=d;return Ja}var b=Oa();if(k)return b=new WebAssembly.Instance(ja,Oa()),a(b,ja);Ka??=Module.locateFile?Module.locateFile?Module.locateFile("BlinkIdModule.wasm",da):da+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;return function(c){return a(c.instance,c.module)}(await Na(b))}class De{name="ExitStatus";constructor(a){this.message= +`Program terminated with exit(${a})`;this.status=a}}var Da,w,C,u,Fa,Ga,Ea,B,Ha,v,Ee=a=>{a.terminate();a.onmessage=()=>{}},Fe=[],Ge=null,He=async()=>Ge,Ie=0,Je=()=>{Ie--;Ie||Ge.resolve()},Ke=()=>{if(!Ie){var a;Ge=new Promise(b=>a=b);Ge.resolve=a}Ie++},Pe=a=>{if(Le.length==0){var b=Me();Ne(b)}b=Le.pop();if(!b)return 6;Oe[a.td]=b;b.td=a.td;b.postMessage({xd:2,Df:a.Cf,fe:a.fe,td:a.td},a.Ff);return 0},Qe=0,L=(a,b,...c)=>{var d=8*c.length*2,e=J(),f=ye(d),g=f>>3,h;for(h of c)typeof h=="bigint"?((t(),C)[g++]= +1n,(t(),C)[g++]=h):((t(),C)[g++]=0n,(t(),Ga)[g++]=h);a=re(a,0,d,f,b);I(e);return a};function fe(a){if(k)return L(0,1,a);la=a;if(!(Re||Qe>0)){for(var b of Object.values(Oe))Ee(b);for(b of Le)Ee(b);Le=[];Oe={};ka=!0}throw new De(a);}function Se(a){if(k)return L(1,0,a);kc(a)}var kc=a=>{la=a;if(k)throw Se(a),"unwind";fe(a)},Te=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)||[])[2])<91,Le=[],ie=[],Oe={};function Ue(){for(var a=Math.min(navigator.hardwareConcurrency, +16);a--;)Me();Fe.push(async()=>{var b=Ve();Ke("loading-workers");await b;Je("loading-workers")})}var We=a=>{var b=a.td;delete Oe[b];Le.push(a);a.td=0;se(b)};function wa(){ie.forEach(a=>a())}var Ne=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.xd;if(g.Le)Oe[g.Le]?.postMessage(g);else if(g==="setimmediate"||g==="_si")a.postMessage(g);else switch(f){case 4:Aa();break;case 5:Pe(g);break;case 6:Xe(()=>{We(Oe[g.Ef])});break;case 3:b(a);break;case 9:Module[g.ff](...g.Pe);break;default:f&&p(`worker sent an unknown command ${f}`)}}; +a.onerror=f=>{p(`worker sent an error! ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onAbort","printErr"],e;for(e of d)Module.propertyIsEnumerable(e)&&c.push(e);a.postMessage({xd:1,gf:c,Hf:oa,If:ja})});async function Ve(){if(!k)return Promise.all(Le.map(Ne))}function Me(){if(Module.mainScriptUrlOrBlob){var a=Module.mainScriptUrlOrBlob;typeof a!="string"&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkIdModule",import.meta.url), +{type:"module",name:"em-pthread"});Le.push(a);return a}function ua(a){var b=(t(),B)[a+48>>2];a=(t(),B)[a+52>>2];xe(b,b-a);I(b)}var Ye=[],M=a=>{var b=Ye[a];b||(Ye[a]=b=Ce.get(a));return b},za=(a,b)=>{Re=Qe=0;a=M(a)(b);Re||Qe>0?la=a:te(a)},Re=!0,oa,Qa=(a,b)=>M(a)(b),Ze=[],$e=0,Ra=a=>{var b=new af(a);if((t(),u)[b.Wc+12]==0){var c=1;(t(),u)[b.Wc+12]=c;$e--}c=0;(t(),u)[b.Wc+13]=c;Ze.push(b);return ne(a)},bf=null,Sa=()=>{G(0,0);var a=Ze.pop();ze(a.Yd);bf=null};class af{constructor(a){this.Yd=a;this.Wc= +a-24}init(a,b){(t(),B)[this.Wc+16>>2]=0;(t(),B)[this.Wc+4>>2]=a;(t(),B)[this.Wc+8>>2]=b}}var cf=a=>{var b=bf?.Yd;if(!b)return we(0),0;var c=new af(b);(t(),B)[c.Wc+16>>2]=b;var d=(t(),B)[c.Wc+4>>2];if(!d)return we(0),b;for(var e of a){if(e===0||e===d)break;if(Be(e,d,c.Wc+16))return we(e),b}we(d);return b},Ta=()=>cf([]),Ua=a=>cf([a]),Va=(a,b)=>cf([a,b]),Wa=()=>{Ze.length||E("no exception to throw");var a=Ze.at(-1),b=a.Yd;var c=1;(t(),u)[a.Wc+13]=c;c=0;(t(),u)[a.Wc+12]=c;$e++;Ae(b);bf=new ma(b);throw bf; +},Xa=(a,b,c)=>{(new af(a)).init(b,c);Ae(a);bf=new ma(a);$e++;throw bf;},Ya=()=>$e;function df(a,b,c,d){return k?L(2,1,a,b,c,d):Za(a,b,c,d)}var ec=()=>!!globalThis.SharedArrayBuffer,Za=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(k&&e.length===0)return df(a,b,c,d);a={Cf:c,td:a,fe:d,Ff:e};return k?(a.xd=5,postMessage(a,e),0):Pe(a)},$a=a=>{bf||=new ma(a);throw bf;},N=()=>{var a=(t(),w)[+ef>>2];ef+=4;return a},ff=(a,b)=>{for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];e==="."?a.splice(d, +1):e===".."?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},gf=a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=ff(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},hf=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},jf=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],kf=(a,b)=>gf(a+"/"+b),lf=()=>a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))), +0),mf=a=>(mf=lf())(a),nf=(...a)=>{for(var b="",c=!1,d=a.length-1;d>=-1&&!c;d--){c=d>=0?a[d]:D.Xd();if(typeof c!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=ff(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},of=(a,b)=>{function c(g){for(var h=0;h=0&&g[l]==="";l--);return h>l?[]:g.slice(h,l-h+1)}a=nf(a).slice(1);b=nf(b).slice(1);a=c(a.split("/"));b=c(b.split("/")); +for(var d=Math.min(a.length,b.length),e=d,f=0;f{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},rf=(a,b=0,c,d)=>{c=qf(a,b,c,d);if(c-b>16&&a.buffer&&pf)return pf.decode(a.buffer instanceof ArrayBuffer?a.subarray(b,c):a.slice(b,c));for(d="";b>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},sf=[],tf=a=>{for(var b=0,c=0;c=55296&&d<=57343?(b+=4,++c):b+=3}return b},uf=(a,b,c,d)=>{if(!(d>0))return 0;var e=c;d=c+d-1;for(var f=0;f=d)break;b[c++]=g}else if(g<= +2047){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(g<=65535){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},vf=a=>{var b=Array(tf(a)+1);a=uf(a,b,0,b.length);b.length=a;return b},wf=[];function xf(a,b){wf[a]={input:[],output:[],Ad:b};yf(a,zf)}var zf={open(a){var b=wf[a.node.Rd];if(!b)throw new D.Cc(43);a.Yc=b;a.seekable=!1},close(a){a.Yc.Ad.$d(a.Yc)}, +$d(a){a.Yc.Ad.$d(a.Yc)},read(a,b,c,d){if(!a.Yc||!a.Yc.Ad.Fe)throw new D.Cc(60);for(var e=0,f=0;f0&&(ha(rf(a.output)),a.output=[])},kf(){return{Of:25856,Qf:5,Nf:191,Pf:35387,Mf:[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]}},lf(){return 0},mf(){return[24,80]}},Bf={pe(a,b){b===null||b===10?(p(rf(a.output)),a.output=[]):b!=0&&a.output.push(b)},$d(a){a.output?.length> +0&&(p(rf(a.output)),a.output=[])}},Cf=a=>{a=Math.ceil(a/65536)*65536;var b=pe(65536,a);b&&(t(),v).fill(0,b,b+a);return b},P={sd:null,$c(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){var e;(e=(c&61440)===24576)||(e=(c&61440)===4096);if(e)throw new D.Cc(63);P.sd||(P.sd={dir:{node:{pd:P.Uc.pd,rd:P.Uc.rd,Fd:P.Uc.Fd,yd:P.Uc.yd,Td:P.Uc.Td,Ld:P.Uc.Ld,Ud:P.Uc.Ud,Sd:P.Uc.Sd,Ed:P.Uc.Ed},stream:{kd:P.Vc.kd}},file:{node:{pd:P.Uc.pd,rd:P.Uc.rd},stream:{kd:P.Vc.kd,read:P.Vc.read,write:P.Vc.write, +Hd:P.Vc.Hd,Kd:P.Vc.Kd}},link:{node:{pd:P.Uc.pd,rd:P.Uc.rd,Dd:P.Uc.Dd},stream:{}},xe:{node:{pd:P.Uc.pd,rd:P.Uc.rd},stream:D.Re}});c=D.createNode(a,b,c,d);Q(c.mode)?(c.Uc=P.sd.dir.node,c.Vc=P.sd.dir.stream,c.Xc={}):D.isFile(c.mode)?(c.Uc=P.sd.file.node,c.Vc=P.sd.file.stream,c.gd=0,c.Xc=P.Ve??(P.Ve=new Uint8Array(0))):(c.mode&61440)===40960?(c.Uc=P.sd.link.node,c.Vc=P.sd.link.stream):(c.mode&61440)===8192&&(c.Uc=P.sd.xe.node,c.Vc=P.sd.xe.stream);c.wd=c.ld=c.jd=Date.now();a&&(a.Xc[b]=c,a.wd=a.ld=a.jd= +c.wd);return c},Uc:{pd(a){var b={};b.Te=(a.mode&61440)===8192?a.id:1;b.jf=a.id;b.mode=a.mode;b.rf=1;b.uid=0;b.ef=0;b.Rd=a.Rd;Q(a.mode)?b.size=4096:D.isFile(a.mode)?b.size=a.gd:b.size=(a.mode&61440)===40960?a.link.length:0;b.wd=new Date(a.wd);b.ld=new Date(a.ld);b.jd=new Date(a.jd);b.Qe=4096;b.ve=Math.ceil(b.size/b.Qe);return b},rd(a,b){for(var c of["mode","atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!==void 0&&(b=b.size,a.gd!=b&&(c=a.Xc,a.Xc=new Uint8Array(b),a.Xc.set(c.subarray(0,Math.min(b, +a.gd))),a.gd=b))},Fd(){P.ge||(P.ge=new D.Cc(44),P.ge.stack="");throw P.ge;},yd(a,b,c,d){return P.createNode(a,b,c,d)},Td(a,b,c){try{var d=Df(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.Xc)throw new D.Cc(55);Ef(d)}delete a.parent.Xc[a.name];b.Xc[c]=a;a.name=c;b.jd=b.ld=a.parent.jd=a.parent.ld=Date.now()},Ld(a,b){delete a.Xc[b];a.jd=a.ld=Date.now()},Ud(a,b){var c=Df(a,b),d;for(d in c.Xc)throw new D.Cc(55);delete a.Xc[b];a.jd=a.ld=Date.now()},Sd(a){return[".","..",...Object.keys(a.Xc)]}, +Ed(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},Dd(a){if((a.mode&61440)!==40960)throw new D.Cc(28);return a.link}},Vc:{read(a,b,c,d,e){if(e>=a.node.gd)return 0;d=Math.min(a.node.gd-e,d);b.set(a.node.Xc.subarray(e,e+d),c);return d},write(a,b,c,d,e,f){b.buffer===(t(),u).buffer&&(f=!1);if(!d)return 0;a=a.node;a.ld=a.jd=Date.now();if(f)a.Xc=b.subarray(c,c+d),a.gd=d;else if(a.gd===0&&e===0)a.Xc=b.slice(c,c+d),a.gd=d;else{f=e+d;var g=a.Xc.length;g>=f||(f=Math.max(f,g*(g<1048576?2:1.125)>>>0),g&& +(f=Math.max(f,256)),g=a.Xc.subarray(0,a.gd),a.Xc=new Uint8Array(f),a.Xc.set(g));a.Xc.set(b.subarray(c,c+d),e);a.gd=Math.max(a.gd,e+d)}return d},kd(a,b,c){c===1?b+=a.position:c===2&&D.isFile(a.node.mode)&&(b+=a.node.gd);if(b<0)throw new D.Cc(28);return b},Hd(a,b,c,d,e){if(!D.isFile(a.node.mode))throw new D.Cc(43);a=a.node.Xc;if(e&2||a.buffer!==(t(),u).buffer){d=!0;e=Cf(b);if(!e)throw new D.Cc(48);if(a){if(c>0||c+b{typeof a=="string"&&(a=vf(a));a.subarray||(a=new Uint8Array(a));return a},Gf=(a,b)=>{var c=0;a&&(c|=365);b&&(c|=146);return c},Hf=async a=>{a=await ea(a);return new Uint8Array(a)},If=[],Jf=async(a,b)=>{typeof Browser!="undefined"&&Browser.init();for(var c of If)if(c.canHandle(b))return c.handle(a,b);return a},Lf=async(a,b,c,d,e,f,g,h)=>{var l=b?nf(gf(a+"/"+b)):a,m=`cp ${l}`;Ke(m);try{var n=c;typeof c== +"string"&&(n=await Hf(c));n=await Jf(n,l);h?.();f||Kf(a,b,n,d,e,g)}finally{Je(m)}};function yf(a,b){D.Ce[a]={Vc:b}}function Q(a){return(a&61440)===16384}function Df(a,b){var c=Q(a.mode)?(c=Mf(a,"x"))?c:a.Uc.Fd?0:2:54;if(c)throw new D.Cc(c);for(c=D.zd[Nf(a.id,b)];c;c=c.Id){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return D.Fd(a,b)}function Ef(a){var b=Nf(a.parent.id,a.name);if(D.zd[b]===a)D.zd[b]=a.Id;else for(b=D.zd[b];b;){if(b.Id===a){b.Id=a.Id;break}b=b.Id}}function Kf(a,b,c,d,e,f){var g= +b;a&&(a=typeof a=="string"?a:Of(a),g=b?gf(a+"/"+b):a);a=Gf(d,e);g=D.create(g,a);c&&(c=Ff(c),Pf(g,a|146),b=D.open(g,577),D.write(b,c,0,c.length,0,f),D.close(b),Pf(g,a))}function R(a,b={}){if(!a)throw new D.Cc(44);b.Zd??(b.Zd=!0);a.charAt(0)==="/"||(a=D.Xd()+"/"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(h=>!!h);for(var d=D.root,e="/",f=0;f>>0)%D.zd.length}function Qf(a){var b=Nf(a.parent.id,a.name);a.Id=D.zd[b];D.zd[b]=a}function Mf(a,b){return D.Ge?0:b.includes("r")&&!(a.mode&292)||b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73)?2:0}function Rf(a,b){if(!Q(a.mode))return 54;try{return Df(a,b),20}catch(c){}return Mf(a,"wx")}function Sf(a,b,c){try{var d=Df(a,b)}catch(e){return e.bd}if(a=Mf(a,"wx"))return a;if(c){if(!Q(d.mode))return 54;if(D.le(d)||Of(d)===D.Xd())return 10}else if(Q(d.mode))return 31; +return 0}function Tf(a,b){if(!a)throw new D.Cc(b);return a}function S(a){a=D.bf(a);if(!a)throw new D.Cc(8);return a}function Uf(a,b=-1){a=Object.assign(new D.Ne,a);if(b==-1)a:{for(b=0;b<=D.Oe;b++)if(!D.streams[b])break a;throw new D.Cc(33);}a.Cd=b;return D.streams[b]=a}function Vf(a,b=-1){a=Uf(a,b);a.Vc?.Uf?.(a);return a}function Wf(a,b,c){var d=a?.Vc.rd;a=d?a:b;d??=b.Uc.rd;Tf(d,63);try{d(a,c)}catch(e){if(e instanceof RangeError)throw new D.Cc(22);throw e;}}function Xf(a){var b=[];for(a=[a];a.length;){var c= +a.pop();b.push(c);a.push(...c.Pd)}return b}function Yf(a){var b={Lf:4096,$f:4096,ve:1E6,Kf:5E5,Jf:5E5,files:D.oe,Xf:D.oe-1,ag:42,flags:2,ig:255};a.Uc.Je&&Object.assign(b,a.Uc.Je(a.$c.tf.root));return b}function T(a,b=511){return D.yd(a,b&1023|16384,0)}function Zf(a,b,c){typeof c=="undefined"&&(c=b,b=438);return D.yd(a,b|8192,c)}function $f(a,b,c,d){Wf(a,b,{mode:c&4095|b.mode&-4096,jd:Date.now(),De:d})}function Pf(a,b,c){a=typeof a=="string"?R(a,{od:!c}).node:a;$f(null,a,b,c)}function ag(a,b,c){if(Q(b.mode))throw new D.Cc(31); +if(!D.isFile(b.mode))throw new D.Cc(28);var d=Mf(b,"w");if(d)throw new D.Cc(d);Wf(a,b,{size:c,timestamp:Date.now()})}function bg(a,b={}){b.flags=b.flags??0;b.encoding=b.encoding??"binary";b.encoding!=="utf8"&&b.encoding!=="binary"&&E(`Invalid encoding type "${b.encoding}"`);var c=D.open(a,b.flags);a=D.stat(a).size;var d=new Uint8Array(a);D.read(c,d,0,a,0);b.encoding==="utf8"&&(d=rf(d));D.close(c);return d}function cg(a,b){a=typeof a=="string"?a:Of(a);for(b=b.split("/").reverse();b.length;){var c= +b.pop();if(c){var d=gf(a+"/"+c);try{T(d)}catch(e){if(e.bd!=20)throw e;}a=d}}return d}function dg(a,b,c,d){a=typeof a=="string"?a:Of(a);b=gf(a+"/"+b);return D.create(b,Gf(c,d))}function eg(a){if(!(a.nf||a.pf||a.link||a.Xc))if(globalThis.XMLHttpRequest)E("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.Xc=fa(a.url)}catch(b){throw new D.Cc(29); +}}function fg(a,b,c,d,e){function f(n,q,x,y,z){n=n.node.Xc;if(z>=n.length)return 0;y=Math.min(n.length-z,y);if(n.slice)for(var A=0;Athis.length-1||n<0)){var q=n%this.ye;return this.Od(n/this.ye|0)[q]}}xf(n){this.Od=n}we(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);n.status>=200&&n.status<300||n.status===304||E("Couldn't load "+c+". Status: "+n.status);var q=Number(n.getResponseHeader("Content-length")), +x,y=(x=n.getResponseHeader("Accept-Ranges"))&&x==="bytes";n=(x=n.getResponseHeader("Content-Encoding"))&&x==="gzip";var z=1048576;y||(z=q);var A=this;A.xf(F=>{var H=F*z,K=(F+1)*z-1;K=Math.min(K,q-1);if(typeof A.Wd[F]=="undefined"){var na=A.Wd;H>K&&E(`invalid range (${H}, ${K}) or no bytes requested!`);K>q-1&&E(`only ${q} bytes available! programmer error!`);var O=new XMLHttpRequest;O.open("GET",c,!1);q!==z&&O.setRequestHeader("Range","bytes="+H+"-"+K);O.responseType="arraybuffer";O.overrideMimeType&& +O.overrideMimeType("text/plain; charset=x-user-defined");O.send(null);O.status>=200&&O.status<300||O.status===304||E("Couldn't load "+c+". Status: "+O.status);H=O.response!==void 0?new Uint8Array(O.response||[]):vf(O.responseText??"");na[F]=H}typeof A.Wd[F]=="undefined"&&E("doXHR failed!");return A.Wd[F]});if(n||!q)z=q=1,z=q=this.Od(0).length,ha("LazyFiles on gzip forces download of the whole file when length is accessed");this.te=q;this.se=z;this.me=!0}get length(){this.me||this.we();return this.te}get ye(){this.me|| +this.we();return this.se}}if(globalThis.XMLHttpRequest){ba||E("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var l=void 0}else l=c,h=void 0;var m=dg(a,b,d,e);h?m.Xc=h:l&&(m.Xc=null,m.url=l);Object.defineProperties(m,{gd:{get:function(){return this.Xc.length}}});a={};for(let [n,q]of Object.entries(m.Vc))a[n]=(...x)=>{eg(m);return q(...x)};a.read=(n,q,x,y,z)=>{eg(m);return f(n,q,x,y,z)};a.Hd=(n,q,x)=>{eg(m);var y=Cf(q); +if(!y)throw new D.Cc(48);f(n,(t(),u),y,q,x);return{Wc:y,ue:!0}};m.Vc=a;return m}var D={root:null,Pd:[],Ce:{},streams:[],oe:1,zd:null,Ae:"/",ie:!1,Ge:!0,Ye:null,de:0,Cc:class{name="ErrnoError";constructor(a){this.bd=a}},Ne:class{shared={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},Me:class{Uc={};Vc={};ce=365;ee=146;qd=null;constructor(a, +b,c,d){a||=this;this.parent=a;this.$c=a.$c;this.id=D.oe++;this.name=b;this.mode=c;this.Rd=d;this.wd=this.ld=this.jd=Date.now()}get read(){return(this.mode&this.ce)===this.ce}set read(a){a?this.mode|=this.ce:this.mode&=~this.ce}get write(){return(this.mode&this.ee)===this.ee}set write(a){a?this.mode|=this.ee:this.mode&=~this.ee}get pf(){return Q(this.mode)}get nf(){return(this.mode&61440)===8192}},createNode(a,b,c,d){a=new D.Me(a,b,c,d);Qf(a);return a},le(a){return a===a.parent},isFile(a){return(a& +61440)===32768},dg(a){return(a&49152)===49152},Oe:4096,bf:a=>D.streams[a],Re:{open(a){a.Vc=D.$e(a.node.Rd).Vc;a.Vc.open?.(a)},kd(){throw new D.Cc(70);}},ne:a=>a>>8,gg:a=>a&255,Gd:(a,b)=>a<<8|b,$e:a=>D.Ce[a],Ke(a,b){function c(h){D.de--;return b(h)}function d(h){if(h){if(!d.We)return d.We=!0,c(h)}else++f>=e.length&&c(null)}typeof a=="function"&&(b=a,a=!1);D.de++;D.de>1&&p(`warning: ${D.de} FS.syncfs operations in flight at once, probably just doing extra work`);var e=Xf(D.root.$c),f=0,g;for(g of e)g.type.Ke? +g.type.Ke(g,a,d):d(null)},$c(a,b,c){var d=c==="/";if(d&&D.root)throw new D.Cc(10);if(!d&&c){var e=R(c,{Zd:!1});c=e.path;e=e.node;if(e.qd)throw new D.Cc(10);if(!Q(e.mode))throw new D.Cc(54);}b={type:a,tf:b,He:c,Pd:[]};a=a.$c(b);a.$c=b;b.root=a;d?D.root=a:e&&(e.qd=b,e.$c&&e.$c.Pd.push(b));return a},ng(a){a=R(a,{Zd:!1});if(!a.node.qd)throw new D.Cc(28);a=a.node;var b=a.qd,c=Xf(b);for([,e]of Object.entries(D.zd))for(;e;){var d=e.Id;c.includes(e.$c)&&Ef(e);var e=d}a.qd=null;a.$c.Pd.splice(a.$c.Pd.indexOf(b), +1)},Fd(a,b){return a.Uc.Fd(a,b)},yd(a,b,c){var d=R(a,{parent:!0}).node;a=jf(a);if(!a)throw new D.Cc(28);if(a==="."||a==="..")throw new D.Cc(20);var e=Rf(d,a);if(e)throw new D.Cc(e);if(!d.Uc.yd)throw new D.Cc(63);return d.Uc.yd(d,a,b,c)},Je(a){return Yf(R(a,{od:!0}).node)},lg(a){return Yf(a.node)},create(a,b=438){return D.yd(a,b&4095|32768,0)},hg(a,b){var c=a.split("/"),d="",e;for(e of c)if(e){if(d||a.charAt(0)==="/")d+="/";d+=e;try{T(d,b)}catch(f){if(f.bd!=20)throw f;}}},Ed(a,b){if(!nf(a))throw new D.Cc(44); +var c=R(b,{parent:!0}).node;if(!c)throw new D.Cc(44);b=jf(b);var d=Rf(c,b);if(d)throw new D.Cc(d);if(!c.Uc.Ed)throw new D.Cc(63);return c.Uc.Ed(c,b,a)},Td(a,b){var c=hf(a),d=hf(b),e=jf(a),f=jf(b);var g=R(a,{parent:!0});var h=g.node;g=R(b,{parent:!0});g=g.node;if(!h||!g)throw new D.Cc(44);if(h.$c!==g.$c)throw new D.Cc(75);var l=Df(h,e);a=of(a,d);if(a.charAt(0)!==".")throw new D.Cc(28);a=of(b,c);if(a.charAt(0)!==".")throw new D.Cc(55);try{var m=Df(g,f)}catch(n){}if(l!==m){b=Q(l.mode);if(e=Sf(h,e,b))throw new D.Cc(e); +if(e=m?Sf(g,f,b):Rf(g,f))throw new D.Cc(e);if(!h.Uc.Td)throw new D.Cc(63);if(l.qd||m&&m.qd)throw new D.Cc(10);if(g!==h&&(e=Mf(h,"w")))throw new D.Cc(e);Ef(l);try{h.Uc.Td(l,g,f),l.parent=g}catch(n){throw n;}finally{Qf(l)}}},Ud(a){var b=R(a,{parent:!0}).node;a=jf(a);var c=Df(b,a),d=Sf(b,a,!0);if(d)throw new D.Cc(d);if(!b.Uc.Ud)throw new D.Cc(63);if(c.qd)throw new D.Cc(10);b.Uc.Ud(b,a);Ef(c)},Sd(a){a=R(a,{od:!0}).node;return Tf(a.Uc.Sd,54)(a)},Ld(a){var b=R(a,{parent:!0}).node;if(!b)throw new D.Cc(44); +a=jf(a);var c=Df(b,a),d=Sf(b,a,!1);if(d)throw new D.Cc(d);if(!b.Uc.Ld)throw new D.Cc(63);if(c.qd)throw new D.Cc(10);b.Uc.Ld(b,a);Ef(c)},Dd(a){a=R(a).node;if(!a)throw new D.Cc(44);if(!a.Uc.Dd)throw new D.Cc(28);return a.Uc.Dd(a)},stat(a,b){a=R(a,{od:!b}).node;return Tf(a.Uc.pd,63)(a)},eg(a,b){Pf(a,b,!0)},Vf(a,b){a=S(a);$f(a,a.node,b,!1)},fg(a){a=typeof a=="string"?R(a,{od:!1}).node:a;Wf(null,a,{timestamp:Date.now(),De:!0})},Wf(a){a=S(a);Wf(a,a.node,{timestamp:Date.now(),De:!1})},truncate(a,b){if(b< +0)throw new D.Cc(28);a=typeof a=="string"?R(a,{od:!0}).node:a;ag(null,a,b)},bg(a,b){a=S(a);if(b<0||(a.flags&2097155)===0)throw new D.Cc(28);ag(a,a.node,b)},og(a,b,c){a=R(a,{od:!0}).node;Tf(a.Uc.rd,63)(a,{wd:b,ld:c})},open(a,b,c=438){if(a==="")throw new D.Cc(44);if(typeof b=="string"){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof d=="undefined")throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if(typeof a=="object")d=a;else{var e=a.endsWith("/");var f=R(a,{od:!(b& +131072),sf:!0});d=f.node;a=f.path}f=!1;if(b&64)if(d){if(b&128)throw new D.Cc(20);}else{if(e)throw new D.Cc(31);d=D.yd(a,c|511,0);f=!0}if(!d)throw new D.Cc(44);(d.mode&61440)===8192&&(b&=-513);if(b&65536&&!Q(d.mode))throw new D.Cc(54);if(!f&&(d?(d.mode&61440)===40960?e=32:(e=["r","w","rw"][b&3],b&512&&(e+="w"),e=Q(d.mode)&&(e!=="r"||b&576)?31:Mf(d,e)):e=44,e))throw new D.Cc(e);b&512&&!f&&D.truncate(d,0);b&=-131713;b=Uf({node:d,path:Of(d),flags:b,seekable:!0,position:0,Vc:d.Vc,Gf:[],error:!1});b.Vc.open&& +b.Vc.open(b);f&&Pf(d,c&511);return b},close(a){if(a.Cd===null)throw new D.Cc(8);a.he&&(a.he=null);try{a.Vc.close&&a.Vc.close(a)}catch(b){throw b;}finally{D.streams[a.Cd]=null}a.Cd=null},kd(a,b,c){if(a.Cd===null)throw new D.Cc(8);if(!a.seekable||!a.Vc.kd)throw new D.Cc(70);if(c!=0&&c!=1&&c!=2)throw new D.Cc(28);a.position=a.Vc.kd(a,b,c);a.Gf=[];return a.position},read(a,b,c,d,e){if(d<0||e<0)throw new D.Cc(28);if(a.Cd===null)throw new D.Cc(8);if((a.flags&2097155)===1)throw new D.Cc(8);if(Q(a.node.mode))throw new D.Cc(31); +if(!a.Vc.read)throw new D.Cc(28);var f=typeof e!="undefined";if(!f)e=a.position;else if(!a.seekable)throw new D.Cc(70);b=a.Vc.read(a,b,c,d,e);f||(a.position+=b);return b},write(a,b,c,d,e,f){if(d<0||e<0)throw new D.Cc(28);if(a.Cd===null)throw new D.Cc(8);if((a.flags&2097155)===0)throw new D.Cc(8);if(Q(a.node.mode))throw new D.Cc(31);if(!a.Vc.write)throw new D.Cc(28);a.seekable&&a.flags&1024&&D.kd(a,0,2);var g=typeof e!="undefined";if(!g)e=a.position;else if(!a.seekable)throw new D.Cc(70);b=a.Vc.write(a, +b,c,d,e,f);g||(a.position+=b);return b},Hd(a,b,c,d,e){if((d&2)!==0&&(e&2)===0&&(a.flags&2097155)!==2)throw new D.Cc(2);if((a.flags&2097155)===1)throw new D.Cc(2);if(!a.Vc.Hd)throw new D.Cc(43);if(!b)throw new D.Cc(28);return a.Vc.Hd(a,b,c,d,e)},Kd(a,b,c,d,e){return a.Vc.Kd?a.Vc.Kd(a,b,c,d,e):0},je(a,b,c){if(!a.Vc.je)throw new D.Cc(59);return a.Vc.je(a,b,c)},pg(a,b,c={}){c.flags=c.flags??577;a=D.open(a,c.flags,c.mode);b=Ff(b);D.write(a,b,0,b.byteLength,void 0,c.Rf);D.close(a)},Xd:()=>D.Ae,Sf(a){a= +R(a,{od:!0});if(a.node===null)throw new D.Cc(44);if(!Q(a.node.mode))throw new D.Cc(54);var b=Mf(a.node,"x");if(b)throw new D.Cc(b);D.Ae=a.path},init(a,b,c){D.ie=!0;a?D.Bd("/dev","stdin",a):D.Ed("/dev/tty","/dev/stdin");b?D.Bd("/dev","stdout",null,b):D.Ed("/dev/tty","/dev/stdout");c?D.Bd("/dev","stderr",null,c):D.Ed("/dev/tty1","/dev/stderr");D.open("/dev/stdin",0);D.open("/dev/stdout",1);D.open("/dev/stderr",1)},kg(){D.ie=!1;for(var a of D.streams)a&&D.close(a)},Yf(a,b){try{var c=R(a,{od:!b});a=c.path}catch(f){}var d= +!1,e=null;try{c=R(a,{parent:!0}),jf(a),c=R(a,{od:!b}),d=!0,e=c.node}catch(f){}return d?e:null},Bd(a,b,c,d){a=kf(typeof a=="string"?a:Of(a),b);b=Gf(!!c,!!d);var e;(e=D.Bd).ne??(e.ne=64);e=D.Gd(D.Bd.ne++,0);yf(e,{open(f){f.seekable=!1},close(){d?.buffer?.length&&d(10)},read(f,g,h,l){for(var m=0,n=0;na?rf((t(),v),a,b,c):"",gg=18;function hg(a,b,c){if(b.charAt(0)==="/")return b;a=a===-100?D.Xd():S(a).path;if(b.length==0){if(!c)throw new D.Cc(44);return a}return a+"/"+b}function ig(a,b){(t(),B)[a>>2]=b.Te;(t(),B)[a+4>>2]=b.mode;(t(),B)[a+8>>2]=b.rf;(t(),B)[a+12>>2]=b.uid;(t(),B)[a+16>>2]=b.ef;(t(),B)[a+20>>2]=b.Rd;(t(),C)[a+24>>3]=BigInt(b.size);(t(),w)[a+32>>2]=4096;(t(),w)[a+36>>2]=b.ve; +var c=b.wd.getTime(),d=b.ld.getTime(),e=b.jd.getTime();(t(),C)[a+40>>3]=BigInt(Math.floor(c/1E3));(t(),B)[a+48>>2]=c%1E3*1E3*1E3;(t(),C)[a+56>>3]=BigInt(Math.floor(d/1E3));(t(),B)[a+64>>2]=d%1E3*1E3*1E3;(t(),C)[a+72>>3]=BigInt(Math.floor(e/1E3));(t(),B)[a+80>>2]=e%1E3*1E3*1E3;(t(),C)[a+88>>3]=BigInt(b.jf);return 0}var ef=void 0;function ab(a,b,c){if(k)return L(3,1,a,b,c);ef=c;try{var d=S(a);switch(b){case 0:var e=N();if(e<0)break;for(;D.streams[e];)e++;return Vf(d,e).Cd;case 1:case 2:return 0;case 3:return d.flags; +case 4:return e=N(),d.flags=d.flags&-289793|e&289792,0;case 12:return e=N(),(t(),Da)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if(typeof D=="undefined"||f.name!=="ErrnoError")throw f;return-f.bd}}function bb(a,b){if(k)return L(4,1,a,b);try{var c=S(a),d=c.node,e=c.Vc.pd;a=e?c:d;e??=d.Uc.pd;Tf(e,63);var f=e(a);return ig(b,f)}catch(g){if(typeof D=="undefined"||g.name!=="ErrnoError")throw g;return-g.bd}}function cb(a,b,c){if(k)return L(5,1,a,b,c);ef=c;try{var d=S(a);switch(b){case 21509:return d.Yc? +0:-59;case 21505:if(!d.Yc)return-59;if(d.Yc.Ad.kf){a=[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];var e=N();(t(),w)[e>>2]=25856;(t(),w)[e+4>>2]=5;(t(),w)[e+8>>2]=191;(t(),w)[e+12>>2]=35387;for(var f=0;f<32;f++)(t(),u)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Yc?0:-59;case 21506:case 21507:case 21508:if(!d.Yc)return-59;if(d.Yc.Ad.lf)for(e=N(),t(),t(),t(),t(),a=[],f=0;f<32;f++)a.push((t(),u)[e+f+17]);return 0;case 21519:if(!d.Yc)return-59;e= +N();return(t(),w)[e>>2]=0;case 21520:return d.Yc?-28:-59;case 21537:case 21531:return e=N(),D.je(d,b,e);case 21523:if(!d.Yc)return-59;d.Yc.Ad.mf&&(f=[24,80],e=N(),(t(),Da)[e>>1]=f[0],(t(),Da)[e+2>>1]=f[1]);return 0;case 21524:return d.Yc?0:-59;case 21515:return d.Yc?0:-59;default:return-28}}catch(g){if(typeof D=="undefined"||g.name!=="ErrnoError")throw g;return-g.bd}}function db(a,b){if(k)return L(6,1,a,b);try{return a=U(a),ig(b,D.stat(a,!0))}catch(c){if(typeof D=="undefined"||c.name!=="ErrnoError")throw c; +return-c.bd}}function eb(a,b,c,d){if(k)return L(7,1,a,b,c,d);try{b=U(b);var e=d&256;b=hg(a,b,d&4096);return ig(c,e?D.stat(b,!0):D.stat(b))}catch(f){if(typeof D=="undefined"||f.name!=="ErrnoError")throw f;return-f.bd}}function fb(a,b,c,d){if(k)return L(8,1,a,b,c,d);ef=d;try{b=U(b);b=hg(a,b);var e=d?N():0;c&64&&(e&=~gg);return D.open(b,c,e).Cd}catch(f){if(typeof D=="undefined"||f.name!=="ErrnoError")throw f;return-f.bd}}function gb(a,b){if(k)return L(9,1,a,b);try{return a=U(a),ig(b,D.stat(a))}catch(c){if(typeof D== +"undefined"||c.name!=="ErrnoError")throw c;return-c.bd}}var hb=()=>E(""),jg={},kg=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function lg(a){return this.cd((t(),B)[a>>2])}var mg={},ng={},og={},pg=class extends Error{constructor(a){super(a);this.name="InternalError"}},qg=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new pg("Mismatched type converter count");for(var l=0;log[h]=b);var e=Array(b.length),f=[],g=0;for(let [h,l]of b.entries())ng.hasOwnProperty(l)? +e[h]=ng[l]:(f.push(l),mg.hasOwnProperty(l)||(mg[l]=[]),mg[l].push(()=>{e[h]=ng[l];++g;g===f.length&&d(e)}));0===f.length&&d(e)},ib=a=>{var b=jg[a];delete jg[a];var c=b.qe,d=b.ud,e=b.Ee,f=e.map(g=>g.df).concat(e.map(g=>g.zf));qg([a],f,g=>{var h={},l,m;for([l,m]of e.entries()){let n=g[l],q=m.Od,x=m.cf,y=g[l+e.length],z=m.yf,A=m.Af;h[m.Xe]={read:F=>n.cd(q(x,F)),write:(F,H)=>{var K=[];z(A,F,y.fd(K,H));kg(K)},optional:n.optional}}return[{name:b.name,cd:n=>{var q={},x;for(x in h)q[x]=h[x].read(n);d(n); +return q},fd:(n,q)=>{for(var x in h)if(!(x in q||h[x].optional))throw new TypeError(`Missing field: "${x}"`);var y=c();for(x in h)h[x].write(y,q[x]);n!==null&&n.push(d,y);return y},vd:lg,nd:d}]})},W=a=>{for(var b="";;){var c=(t(),v)[a++];if(!c)return b;b+=String.fromCharCode(c)}},X=class extends Error{constructor(a){super(a);this.name="BindingError"}};function rg(a,b,c={}){var d=b.name;if(!a)throw new X(`type "${d}" must have a positive integer typeid pointer`);if(ng.hasOwnProperty(a)){if(c.hf)return; +throw new X(`Cannot register type '${d}' twice`);}ng[a]=b;delete og[a];mg.hasOwnProperty(a)&&(b=mg[a],delete mg[a],b.forEach(e=>e()))}function V(a,b,c={}){return rg(a,b,c)}var sg=(a,b,c)=>{switch(b){case 1:return c?d=>(t(),u)[d]:d=>(t(),v)[d];case 2:return c?d=>(t(),Da)[d>>1]:d=>(t(),Ea)[d>>1];case 4:return c?d=>(t(),w)[d>>2]:d=>(t(),B)[d>>2];case 8:return c?d=>(t(),C)[d>>3]:d=>(t(),Ha)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=(a,b,c,d,e)=>{b=W(b);d=d===0n;var f= +g=>g;if(d){let g=c*8;f=h=>BigInt.asUintN(g,h);e=f(e)}V(a,{name:b,cd:f,fd:(g,h)=>{typeof h=="number"&&(h=BigInt(h));return h},vd:sg(b,c,!d),nd:null})},kb=(a,b,c,d)=>{b=W(b);V(a,{name:b,cd:function(e){return!!e},fd:function(e,f){return f?c:d},vd:function(e){return this.cd((t(),v)[e])},nd:null})},tg=a=>{throw new X(a.Tc.ad.Zc.name+" instance already deleted");},ug=!1,vg=()=>{},wg=a=>{if(!globalThis.FinalizationRegistry)return wg=b=>b,a;ug=new FinalizationRegistry(b=>{b=b.Tc;--b.count.value;0===b.count.value&& +(b.ed?b.md.ud(b.ed):b.ad.Zc.ud(b.Wc))});wg=b=>{var c=b.Tc;c.ed&&ug.register(b,{Tc:c},b);return b};vg=b=>{ug.unregister(b)};return wg(a)},xg=[];function yg(){}var zg=(a,b)=>Object.defineProperty(b,"name",{value:a}),Ag={},Bg=(a,b,c)=>{if(void 0===a[b].dd){var d=a[b];a[b]=function(...e){if(!a[b].dd.hasOwnProperty(e.length))throw new X(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].dd})!`);return a[b].dd[e.length].apply(this,e)};a[b].dd=[];a[b].dd[d.Md]= +d}},Cg=(a,b,c)=>{if(Module.hasOwnProperty(a)){if(void 0===c||void 0!==Module[a].dd&&void 0!==Module[a].dd[c])throw new X(`Cannot register public name '${a}' twice`);Bg(Module,a,a);if(Module[a].dd.hasOwnProperty(c))throw new X(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);Module[a].dd[c]=b}else Module[a]=b,Module[a].Md=c},Dg=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return b>=48&&b<=57?`_${a}`:a};function Eg(a,b,c,d,e,f,g,h){this.name= +a;this.constructor=b;this.Jd=c;this.ud=d;this.hd=e;this.Ze=f;this.Vd=g;this.Ue=h;this.vf=[]}var Fg=(a,b,c)=>{for(;b!==c;){if(!b.Vd)throw new X(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Vd(a);b=b.hd}return a},Gg=a=>{if(a===null)return"null";var b=typeof a;return b==="object"||b==="array"||b==="function"?a.toString():""+a};function Hg(a,b){if(b===null){if(this.ke)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.Tc)throw new X(`Cannot pass "${Gg(b)}" as a ${this.name}`); +if(!b.Tc.Wc)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);return Fg(b.Tc.Wc,b.Tc.ad.Zc,this.Zc)}function Ig(a,b){if(b===null){if(this.ke)throw new X(`null is not a valid ${this.name}`);if(this.be){var c=this.qe();a!==null&&a.push(this.ud,c);return c}return 0}if(!b||!b.Tc)throw new X(`Cannot pass "${Gg(b)}" as a ${this.name}`);if(!b.Tc.Wc)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.ae&&b.Tc.ad.ae)throw new X(`Cannot convert argument of type ${b.Tc.md? +b.Tc.md.name:b.Tc.ad.name} to parameter type ${this.name}`);c=Fg(b.Tc.Wc,b.Tc.ad.Zc,this.Zc);if(this.be){if(void 0===b.Tc.ed)throw new X("Passing raw pointer to smart pointer is illegal");switch(this.Bf){case 0:if(b.Tc.md===this)c=b.Tc.ed;else throw new X(`Cannot convert argument of type ${b.Tc.md?b.Tc.md.name:b.Tc.ad.name} to parameter type ${this.name}`);break;case 1:c=b.Tc.ed;break;case 2:if(b.Tc.md===this)c=b.Tc.ed;else{var d=b.clone();c=this.wf(c,Jg(()=>d["delete"]()));a!==null&&a.push(this.ud, +c)}break;default:throw new X("Unsupported sharing policy");}}return c}function Kg(a,b){if(b===null){if(this.ke)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.Tc)throw new X(`Cannot pass "${Gg(b)}" as a ${this.name}`);if(!b.Tc.Wc)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Tc.ad.ae)throw new X(`Cannot convert argument of type ${b.Tc.ad.name} to parameter type ${this.name}`);return Fg(b.Tc.Wc,b.Tc.ad.Zc,this.Zc)}var Lg=(a,b,c)=>{if(b===c)return a; +if(void 0===c.hd)return null;a=Lg(a,b,c.hd);return a===null?null:c.Ue(a)},Mg={},Ng=(a,b)=>{if(b===void 0)throw new X("ptr should not be undefined");for(;a.hd;)b=a.Vd(b),a=a.hd;return Mg[b]},Og=(a,b)=>{if(!b.ad||!b.Wc)throw new pg("makeClassHandle requires ptr and ptrType");if(!!b.md!==!!b.ed)throw new pg("Both smartPtrType and smartPtr must be specified");b.count={value:1};return wg(Object.create(a,{Tc:{value:b,writable:!0}}))};function Pg(a,b,c,d,e,f,g,h,l,m,n){this.name=a;this.Zc=b;this.ke=c;this.ae= +d;this.be=e;this.uf=f;this.Bf=g;this.Ie=h;this.qe=l;this.wf=m;this.ud=n;e||b.hd!==void 0?this.fd=Ig:(this.fd=d?Hg:Kg,this.nd=null)}var Qg=(a,b,c)=>{if(!Module.hasOwnProperty(a))throw new pg("Replacing nonexistent public symbol");void 0!==Module[a].dd&&void 0!==c?Module[a].dd[c]=b:(Module[a]=b,Module[a].Md=c)},Y=(a,b)=>{a=W(a);var c=M(b);if(typeof c!="function")throw new X(`unknown function pointer with signature ${a}: ${b}`);return c};class Rg extends Error{}var Sg=a=>{a=oe(a);var b=W(a);me(a);return b}, +Tg=(a,b)=>{function c(f){e[f]||ng[f]||(og[f]?og[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Rg(`${a}: `+d.map(Sg).join([", "]));},lb=(a,b,c,d,e,f,g,h,l,m,n,q,x)=>{n=W(n);f=Y(e,f);h&&=Y(g,h);m&&=Y(l,m);x=Y(q,x);var y=Dg(n);Cg(y,function(){Tg(`Cannot construct ${n} due to unbound types`,[d])});qg([a,b,c],d?[d]:[],z=>{z=z[0];if(d){var A=z.Zc;var F=A.Jd}else F=yg.prototype;z=zg(n,function(...O){if(Object.getPrototypeOf(this)!==H)throw new X(`Use 'new' to construct ${n}`);if(void 0=== +K.ze)throw new X(`${n} has no accessible constructor`);var yd=K.ze[O.length];if(void 0===yd)throw new X(`Tried to invoke ctor of ${n} with invalid number of parameters (${O.length}) - expected (${Object.keys(K.ze).toString()}) parameters instead!`);return yd.apply(this,O)});var H=Object.create(F,{constructor:{value:z}});z.prototype=H;var K=new Eg(n,z,H,x,A,f,h,m);if(K.hd){var na;(na=K.hd).re??(na.re=[]);K.hd.re.push(K)}A=new Pg(n,K,!0,!1,!1);na=new Pg(n+"*",K,!1,!1,!1);F=new Pg(n+" const*",K,!1,!0, +!1);Ag[a]={pointerType:na,Se:F};Qg(y,z);return[A,na,F]})};function Ug(a){for(var b=1;b{for(var c=[],d=0;d>2]);return c},Xg=a=>{a=a.trim();var b=a.indexOf("(");return b===-1?a:a.slice(0,b)},mb=(a,b,c,d,e,f,g,h)=>{var l=Wg(c,d);b=W(b);b=Xg(b);f=Y(e,f);qg([],[a],m=>{function n(){Tg(`Cannot call ${q} due to unbound types`,l)}m=m[0];var q=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); +h&&m.Zc.vf.push(b);var x=m.Zc.Jd,y=x[b];void 0===y||void 0===y.dd&&y.className!==m.name&&y.Md===c-2?(n.Md=c-2,n.className=m.name,x[b]=n):(Bg(x,b,q),x[b].dd[c-2]=n);qg([],l,z=>{z=Vg(q,z,m,f,g);void 0===x[b].dd?(z.Md=c-2,x[b]=z):x[b].dd[c-2]=z;return[]});return[]})},Yg=[],Zg=[0,1,,1,null,1,!0,1,!1,1],$g=[],Fb=a=>{if(a>9&&0===--Zg[a+1]){var b=Zg[a];Zg[a]=void 0;var c=$g[a];c&&($g[a]=void 0,c(b));Yg.push(a)}},Z=a=>{if(!a)throw new X(`Cannot use deleted val. handle = ${a}`);return Zg[a]},Jg=a=>{switch(a){case void 0:return 2; +case null:return 4;case !0:return 6;case !1:return 8;default:let b=Yg.pop()||Zg.length;Zg[b]=a;Zg[b+1]=1;return b}},ah={name:"emscripten::val",cd:a=>{var b=Z(a);Fb(a);return b},fd:(a,b)=>Jg(b),vd:lg,nd:null},nb=a=>V(a,ah),bh=(a,b)=>{switch(b){case 4:return function(c){return this.cd((t(),Fa)[c>>2])};case 8:return function(c){return this.cd((t(),Ga)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ob=(a,b,c)=>{b=W(b);V(a,{name:b,cd:d=>d,fd:(d,e)=>e,vd:bh(b,c),nd:null})},pb= +(a,b,c,d,e,f)=>{var g=Wg(b,c);a=W(a);a=Xg(a);e=Y(d,e);Cg(a,function(){Tg(`Cannot call ${a} due to unbound types`,g)},b-1);qg([],g,h=>{Qg(a,Vg(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},qb=(a,b,c,d,e)=>{b=W(b);var f=h=>h;if(d===0){var g=32-8*c;f=h=>h<>>g;e=f(e)}V(a,{name:b,cd:f,fd:(h,l)=>l,vd:sg(b,c,d!==0),nd:null})},rb=(a,b,c)=>{function d(f){var g=(t(),B)[f>>2];f=(t(),B)[f+4>>2];return new e((t(),u).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array, +Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=W(c);V(a,{name:c,cd:d,vd:d},{hf:!0})},ch=Object.assign({optional:!0},ah),sb=a=>{V(a,ch)},dh=(a,b,c)=>uf(a,(t(),v),b,c),tb=(a,b)=>{b=W(b);V(a,{name:b,cd(c){var d=(t(),B)[c>>2];d=U(c+4,d,!0);me(c);return d},fd(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e=typeof d=="string";if(!(e||ArrayBuffer.isView(d)&&d.BYTES_PER_ELEMENT==1))throw new X("Cannot pass non-string to std::string");var f=e?tf(d):d.length;var g=je(4+f+1),h=g+4;(t(), +B)[g>>2]=f;e?dh(d,h,f+1):(t(),v).set(d,h);c!==null&&c.push(me,g);return g},vd:lg,nd(c){me(c)}})},eh=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,fh=(a,b,c)=>{a>>=1;b=qf((t(),Ea),a,b/2,c);if(b-a>16&&eh)return eh.decode((t(),Ea).slice(a,b));for(c="";a{if(c<2)return 0;c-=2;var d=b;c=c>1]=f;b+=2}(t(),Da)[b>>1]=0;return b-d},hh= +a=>a.length*2,ih=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(t(),B)[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},jh=(a,b,c=2147483647)=>{if(c<4)return 0;var d=b;c=d+c-4;for(var e=0;e65535&&e++;(t(),w)[b>>2]=f;b+=4;if(b+4>c)break}(t(),w)[b>>2]=0;return b-d},kh=a=>{for(var b=0,c=0;c65535&&c++,b+=4;return b},ub=(a,b,c)=>{c=W(c);if(b===2){var d=fh;var e=gh;var f=hh}else d=ih,e=jh,f=kh;V(a,{name:c,cd:g=> +{var h=(t(),B)[g>>2];h=d(g+4,h*b,!0);me(g);return h},fd:(g,h)=>{if(typeof h!="string")throw new X(`Cannot pass non-string to C++ string type ${c}`);var l=f(h),m=je(4+l+b);(t(),B)[m>>2]=l/b;e(h,m+4,l+b);g!==null&&g.push(me,m);return m},vd:lg,nd(g){me(g)}})},vb=(a,b,c,d,e,f)=>{jg[a]={name:W(b),qe:Y(c,d),ud:Y(e,f),Ee:[]}},wb=(a,b,c,d,e,f,g,h,l,m)=>{jg[a].Ee.push({Xe:W(b),df:c,Od:Y(d,e),cf:f,zf:g,yf:Y(h,l),Af:m})},xb=(a,b)=>{b=W(b);V(a,{qf:!0,name:b,cd:()=>{},fd:()=>{}})},yb=a=>{var b=!aa;try{Atomics.wait((t(), +w),0,0,0),b=!0}catch(c){}va(a,!ba,1,b,5242880,!1);wa()},lh=a=>{if(!(a instanceof De||a=="unwind"))throw a;},Xe=a=>{if(!ka)try{a()}catch(b){lh(b)}finally{if(!(Re||Qe>0))try{k?ke()&&te(la):kc(la)}catch(b){lh(b)}}},xa=a=>{Te||(Atomics.waitAsync((t(),w),a>>2,a).value.then(Aa),a+=112,Atomics.store((t(),w),a>>2,1))},Aa=()=>{var a=ke();a&&Xe(()=>{xa(a);ve()})},zb=(a,b)=>{a==b?setTimeout(Aa):k?postMessage({Le:a,xd:4}):(a=Oe[a])&&a.postMessage({xd:4})},mh=[],Ab=(a,b,c,d,e,f,g)=>{mh.length=0;c=e>>3;for(d=e+ +d>>3;cqe(f,g,h));else return a},Bb=()=>{Re=!1;Qe=0},Cb=a=>{k?postMessage({xd:6,Ef:a}):We(Oe[a])},Db=()=>{},ph=[],qh=a=>{var b=ph.length;ph.push(a);return b},rh=(a,b)=>{for(var c=Array(a),d=0;d>2],g=ng[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Sg(f)}`,new X(a);c[e]=g}return c},sh={},th=a=>{var b=sh[a];return b===void 0?W(a):b},Eb=(a,b,c)=>{var d;[b, +...d]=rh(a,b);var e=b.fd.bind(b),f=d.map(h=>h.vd.bind(h));a--;var g=Array(a);b=`methodCaller<(${d.map(h=>h.name)}) => ${b.name}>`;return qh(zg(b,(h,l,m,n)=>{for(var q=0,x=0;x>2]=Jg(h));return y}))},Gb=a=>{if(!a)return Jg(globalThis);a=th(a);return Jg(globalThis[a])},Hb=(a,b)=>{a=Z(a);b=Z(b);return Jg(a[b])}, +Ib=a=>{a>9&&(Zg[a+1]+=1)},Jb=(a,b,c,d,e)=>ph[a](b,c,d,e),Kb=a=>{a=Z(a);return typeof a=="string"},Lb=()=>Jg([]),Mb=a=>Jg(th(a)),Nb=()=>Jg({}),Ob=a=>{var b=Z(a);kg(b);Fb(a)},Pb=(a,b,c)=>{a=Z(a);b=Z(b);c=Z(c);a[b]=c},uh=a=>a%4===0&&(a%100!==0||a%400===0),vh=[0,31,60,91,121,152,182,213,244,274,305,335],wh=[0,31,59,90,120,151,181,212,243,273,304,334];function Qb(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);if(isNaN(a.getTime()))return 1;(t(),w)[b>>2]=a.getSeconds();(t(), +w)[b+4>>2]=a.getMinutes();(t(),w)[b+8>>2]=a.getHours();(t(),w)[b+12>>2]=a.getDate();(t(),w)[b+16>>2]=a.getMonth();(t(),w)[b+20>>2]=a.getFullYear()-1900;(t(),w)[b+24>>2]=a.getDay();var c=(uh(a.getFullYear())?vh:wh)[a.getMonth()]+a.getDate()-1|0;(t(),w)[b+28>>2]=c;(t(),w)[b+36>>2]=-(a.getTimezoneOffset()*60);c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(t(),w)[b+32>>2]=a;return 0}function Rb(a){var b= +(()=>{var c=new Date((t(),w)[a+20>>2]+1900,(t(),w)[a+16>>2],(t(),w)[a+12>>2],(t(),w)[a+8>>2],(t(),w)[a+4>>2],(t(),w)[a>>2],0);if(isNaN(c.getTime()))return-1;var d=(t(),w)[a+32>>2],e=c.getTimezoneOffset(),f=(new Date(c.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(c.getFullYear(),0,1)).getTimezoneOffset(),h=Math.min(g,f);if(d<0)d=Number(f!=g&&h==e);else if(d>0!=(h==e)&&(f=Math.max(g,f),c.setTime(c.getTime()+((d>0?h:f)-e)*6E4),isNaN(c.getTime())))return-1;(t(),w)[a+32>>2]=d;(t(),w)[a+24>>2]=c.getDay(); +d=(uh(c.getFullYear())?vh:wh)[c.getMonth()]+c.getDate()-1|0;(t(),w)[a+28>>2]=d;(t(),w)[a>>2]=c.getSeconds();(t(),w)[a+4>>2]=c.getMinutes();(t(),w)[a+8>>2]=c.getHours();(t(),w)[a+12>>2]=c.getDate();(t(),w)[a+16>>2]=c.getMonth();(t(),w)[a+20>>2]=c.getYear();return c.getTime()/1E3})();return BigInt(b)}function Sb(a,b,c,d,e,f,g){if(k)return L(10,1,a,b,c,d,e,f,g);e=e<-9007199254740992||e>9007199254740992?NaN:Number(e);try{var h=S(d),l=D.Hd(h,a,e,b,c),m=l.Wc;(t(),w)[f>>2]=l.ue;(t(),B)[g>>2]=m;return 0}catch(n){if(typeof D== +"undefined"||n.name!=="ErrnoError")throw n;return-n.bd}}function Tb(a,b,c,d,e,f){if(k)return L(11,1,a,b,c,d,e,f);f=f<-9007199254740992||f>9007199254740992?NaN:Number(f);try{var g=S(e);if(c&2){c=f;if(!D.isFile(g.node.mode))throw new D.Cc(43);if(!(d&2)){var h=(t(),v).subarray(a,a+b);D.Kd(g,h,c,b,d)}}}catch(l){if(typeof D=="undefined"||l.name!=="ErrnoError")throw l;return-l.bd}}var xh={},dc=()=>performance.timeOrigin+performance.now();function Ub(a,b){if(k)return L(12,1,a,b);xh[a]&&(clearTimeout(xh[a].id), +delete xh[a]);if(!b)return 0;var c=setTimeout(()=>{delete xh[a];Xe(()=>ue(a,performance.timeOrigin+performance.now()))},b);xh[a]={id:c,mg:b};return 0}var Vb=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(t(),B)[a>>2]=g*60;(t(),w)[b>>2]=Number(f!=e);b=h=>{var l=Math.abs(h);return`UTC${h>=0?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(e);eDate.now(),yh=1;function Xb(a,b,c){if(!(a>=0&&a<=3))return 28;if(a===0)a=Date.now();else if(yh)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(a*1E3*1E3);(t(),C)[c>>3]=BigInt(a);return 0}var zh=[],Yb=(a,b,c)=>{zh.length=0;for(var d;d=(t(),v)[b++];){var e=d!=105;e&=d!=112;c+=e&&c%8?4:0;zh.push(d==112?(t(),B)[c>>2]:d==106?(t(),C)[c>>3]:d==105?(t(),w)[c>>2]:(t(),Ga)[c>>3]);c+=e?8:4}return nh[a](...zh)},Zb=()=>{},ac=()=>{Qe+=1;throw"unwind"; +},bc=(a,b,c)=>{var d=Error().stack.toString(),e=d.split("\n");d="";var f=RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),g=RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"),h;for(h of e){var l=g.exec(h);if(l?.length==5){e=l[1];var m=l[2];var n=l[3];l=l[4]}else if(l=f.exec(h),l?.length>=4)e=l[1],m=l[2],n=l[3],l=l[4]|0;else{d+=h+"\n";continue}e=="_emscripten_log"||e=="_emscripten_get_callstack"?d="":a&24&&(a&64&&(m=m.substring(m.replace(/\\/g,"/").lastIndexOf("/")+1)),d+=` at ${e} (${m}:${n}:${l})\n`)}a=d= +d.replace(/\s+$/,"");return!b||c<=0?tf(a)+1:dh(a,b,c)+1},cc=()=>2147483648,fc=a=>{var b=(t(),v).length;a>>>=0;if(a<=b||a>2147483648)return!1;for(var c=1;c<=4;c*=2){a:{var d=(Math.min(2147483648,Math.ceil(Math.max(a,b+2097152/c)/65536)*65536)-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Ah=(a,b)=>{Qe+=1;return setTimeout(()=>{--Qe;Xe(a)},b)},hc=(a,b,c)=>Ah(()=>M(a)(c),b),Bh={},Dh=()=>{if(!Ch){var a={USER:"web_user",LOGNAME:"web_user", +PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in Bh)Bh[b]===void 0?delete a[b]:a[b]=Bh[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Ch=c}return Ch},Ch;function ic(a,b){if(k)return L(13,1,a,b);var c=0,d=0,e;for(e of Dh()){var f=b+c;(t(),B)[a+d>>2]=f;c+=dh(e,f,Infinity)+1;d+=4}return 0}function jc(a,b){if(k)return L(14,1,a,b);var c=Dh();(t(),B)[a>>2]=c.length;a=0;for(var d of c)a+=tf(d)+1;(t(),B)[b>>2]=a;return 0} +function lc(a){if(k)return L(15,1,a);try{var b=S(a);D.close(b);return 0}catch(c){if(typeof D=="undefined"||c.name!=="ErrnoError")throw c;return c.bd}}function mc(a,b){if(k)return L(16,1,a,b);try{var c=S(a),d=c.Yc?2:Q(c.mode)?3:(c.mode&61440)===40960?7:4;(t(),u)[b]=d;(t(),Da)[b+2>>1]=0;(t(),C)[b+8>>3]=BigInt(0);(t(),C)[b+16>>3]=BigInt(0);return 0}catch(e){if(typeof D=="undefined"||e.name!=="ErrnoError")throw e;return e.bd}}function nc(a,b,c,d){if(k)return L(17,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f, +g=b=0;g>2],l=(t(),B)[a+4>>2];a+=8;var m=D.read(e,(t(),u),h,l,f);if(m<0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(q){if(typeof D=="undefined"||q.name!=="ErrnoError")throw q;return q.bd}}function oc(a,b,c,d){if(k)return L(18,1,a,b,c,d);b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 22;var e=S(a);D.kd(e,b,c);(t(),C)[d>>3]=BigInt(e.position);e.he&&b===0&&c===0&&(e.he=null);return 0}catch(f){if(typeof D== +"undefined"||f.name!=="ErrnoError")throw f;return f.bd}}function pc(a,b,c,d){if(k)return L(19,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),B)[a+4>>2];a+=8;var m=D.write(e,(t(),u),h,l,f);if(m<0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(q){if(typeof D=="undefined"||q.name!=="ErrnoError")throw q;return q.bd}}var ee=a=>a,ge=(a,b)=>mf((t(),v).subarray(a,a+b));k||Ue();D.Tf=(a,b,c,d,e,f,g,h,l,m)=>{Lf(a,b,c, +d,e,h,l,m).then(f).catch(g)};D.jg=Lf;D.zd=Array(4096);D.$c(P,{},"/");T("/tmp");T("/home");T("/home/web_user");(function(){T("/dev");yf(D.Gd(1,3),{read:()=>0,write:(d,e,f,g)=>g,kd:()=>0});Zf("/dev/null",D.Gd(1,3));xf(D.Gd(5,0),Af);xf(D.Gd(6,0),Bf);Zf("/dev/tty",D.Gd(5,0));Zf("/dev/tty1",D.Gd(6,0));var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(mf(a),b=a.byteLength);return a[--b]};D.Bd("/dev","random",c);D.Bd("/dev","urandom",c);T("/dev/shm");T("/dev/shm/tmp")})();(function(){T("/proc");var a=T("/proc/self"); +T("/proc/self/fd");D.$c({$c(){var b=D.createNode(a,"fd",16895,73);b.Vc={kd:P.Vc.kd};b.Uc={Fd(c,d){c=+d;var e=S(c);c={parent:null,$c:{He:"fake"},Uc:{Dd:()=>e.path},id:c+1};return c.parent=c},Sd(){return Array.from(D.streams.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},{},"/proc/self/fd")})();D.Ye={MEMFS:P};(()=>{var a=yg.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof yg&&c instanceof yg))return!1;var d=this.Tc.ad.Zc,e=this.Tc.Wc;c.Tc=c.Tc;var f=c.Tc.ad.Zc; +for(c=c.Tc.Wc;d.hd;)e=d.Vd(e),d=d.hd;for(;f.hd;)c=f.Vd(c),f=f.hd;return d===f&&e===c},clone:function(){this.Tc.Wc||tg(this);if(this.Tc.Qd)return this.Tc.count.value+=1,this;var c=wg,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.Tc;c=c(e.call(d,f,{Tc:{value:{count:g.count,Nd:g.Nd,Qd:g.Qd,Wc:g.Wc,ad:g.ad,ed:g.ed,md:g.md}}}));c.Tc.count.value+=1;c.Tc.Nd=!1;return c},["delete"](){this.Tc.Wc||tg(this);if(this.Tc.Nd&&!this.Tc.Qd)throw new X("Object already scheduled for deletion");vg(this);var c= +this.Tc;--c.count.value;0===c.count.value&&(c.ed?c.md.ud(c.ed):c.ad.Zc.ud(c.Wc));this.Tc.Qd||(this.Tc.ed=void 0,this.Tc.Wc=void 0)},isDeleted:function(){return!this.Tc.Wc},deleteLater:function(){this.Tc.Wc||tg(this);if(this.Tc.Nd&&!this.Tc.Qd)throw new X("Object already scheduled for deletion");xg.push(this);this.Tc.Nd=!0;return this}});var b=Symbol.dispose;b&&(a[b]=a["delete"])})();Object.assign(Pg.prototype,{af(a){this.Ie&&(a=this.Ie(a));return a},Be(a){this.ud?.(a)},vd:lg,cd:function(a){function b(){return this.be? +Og(this.Zc.Jd,{ad:this.uf,Wc:c,md:this,ed:a}):Og(this.Zc.Jd,{ad:this,Wc:a})}var c=this.af(a);if(!c)return this.Be(a),null;var d=Ng(this.Zc,c);if(void 0!==d){if(0===d.Tc.count.value)return d.Tc.Wc=c,d.Tc.ed=a,d.clone();d=d.clone();this.Be(a);return d}d=this.Zc.Ze(c);d=Ag[d];if(!d)return b.call(this);d=this.ae?d.Se:d.pointerType;var e=Lg(c,this.Zc,d.Zc);return e===null?b.call(this):this.be?Og(d.Zc.Jd,{ad:d,Wc:e,md:this,ed:a}):Og(d.Zc.Jd,{ad:d,Wc:e})}});k||(oa=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:(Module.INITIAL_MEMORY|| +209715200)/65536,maximum:32768,shared:!0}),pa());Module.noExitRuntime&&(Re=Module.noExitRuntime);Module.printErr&&(p=Module.printErr);Module.wasmBinary&&(ia=Module.wasmBinary);Module.addRunDependency=Ke;Module.removeRunDependency=Je;Module.FS_preloadFile=Lf;Module.FS_unlink=(...a)=>D.Ld(...a);Module.FS_createPath=(...a)=>cg(...a);Module.FS_createDevice=(...a)=>D.Bd(...a);Module.FS_readFile=(...a)=>bg(...a);Module.FS=D;Module.FS_createDataFile=(...a)=>Kf(...a);Module.FS_createLazyFile=(...a)=>fg(...a); +var oh=[fe,Se,df,ab,bb,cb,db,eb,fb,gb,Sb,Tb,Ub,ic,jc,lc,mc,nc,oc,pc],nh={714833:(a,b,c,d)=>{a=U(a);b=U(b);c=U(c);d=U(d);throw Error(a+b+c+d);},715049:(a,b)=>{a=U(a);b=U(b);throw Error(a+b);},715159:a=>{a=U(a);throw Error(a);},715223:a=>{a=U(a);throw Error(a);},715287:a=>{a=U(a);throw Error(a);}};function Wb(){var a=Module.allowedThreads;return a?a:navigator.hardwareConcurrency}function he(a,b,c,d,e){var f=!1,g=l=>{f||(f=!0,clearTimeout(h),le(a,l))};try{let l=new AbortController,m=new Uint8Array(d); +m.set((t(),v).subarray(c,c+d));var h=setTimeout(()=>l.abort(),e);fetch(U(b),{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:m,signal:l.signal}).then(n=>g(n.status),()=>g(0))}catch{g(0)}}var je,ke,le,me,ne,oe,ya,pe,va,Ca,qe,re,se,te,ue,ve,G,we,xe,I,ye,J,ze,Ae,Be,Ce,Pa;function Tc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function xc(a){var b=J();try{return M(a)()}catch(c){I(b);if(!(c instanceof r))throw c; +G(1,0)}}function Bc(a,b,c){var d=J();try{return M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function vd(a,b,c,d){var e=J();try{M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function ld(a,b,c){var d=J();try{M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function bd(a){var b=J();try{M(a)()}catch(c){I(b);if(!(c instanceof r))throw c;G(1,0)}}function dd(a,b){var c=J();try{M(a)(b)}catch(d){I(c);if(!(d instanceof r))throw d;G(1,0)}}function Dd(a,b,c,d,e){var f= +J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function zc(a,b){var c=J();try{return M(a)(b)}catch(d){I(c);if(!(d instanceof r))throw d;G(1,0)}}function Yd(a,b,c,d,e,f,g,h,l){var m=J();try{M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function Ec(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Jc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}} +function Qc(a,b,c,d,e,f,g){var h=J();try{return M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Vd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Md(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Cc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Rd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f, +g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function rc(a,b,c){var d=J();try{return M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function Oc(a,b,c,d,e,f,g){var h=J();try{return M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Ac(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function tc(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function ce(a,b,c,d, +e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Id(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Nc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Zd(a,b,c,d,e,f,g,h,l,m){var n=J();try{M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function Zc(a,b,c,d){var e=J();try{return M(a)(b, +c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Uc(a,b,c,d,e,f,g,h,l){var m=J();try{return M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function ae(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function xd(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function sc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof +r))throw h;G(1,0)}}function zd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Ad(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Wc(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function ed(a,b,c){var d=J();try{M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function Fc(a,b,c,d,e){var f=J(); +try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Kc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Ic(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Ud(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function $d(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f, +g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Hc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function jd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function gd(a,b,c,d){var e=J();try{M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Td(a,b,c,d,e,f,g,h,l){var m=J();try{M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function wd(a, +b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Gc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function sd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Bd(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Vc(a,b,c,d,e,f,g,h,l,m){var n=J();try{return M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n); +if(!(q instanceof r))throw q;G(1,0)}}function qc(a,b){var c=J();try{return M(a)(b)}catch(d){I(c);if(!(d instanceof r))throw d;G(1,0)}}function md(a,b,c,d){var e=J();try{M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Fd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Rc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function yc(a,b,c,d,e){var f=J();try{return M(a)(b, +c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Sd(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function Pd(a,b,c,d,e,f,g,h,l,m,n,q,x){var y=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x)}catch(z){I(y);if(!(z instanceof r))throw z;G(1,0)}}function ud(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function td(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h); +if(!(l instanceof r))throw l;G(1,0)}}function Xd(a,b,c,d,e,f,g,h,l,m){var n=J();try{M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function Qd(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Od(a,b,c,d,e,f,g,h,l,m){var n=J();try{M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function Cd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof +r))throw l;G(1,0)}}function de(a,b,c,d,e,f,g,h,l,m,n,q,x,y,z,A){var F=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y,z,A)}catch(H){I(F);if(!(H instanceof r))throw H;G(1,0)}}function Nd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function fd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function kd(a,b,c){var d=J();try{M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function Pc(a,b,c, +d,e,f,g,h,l,m){var n=J();try{return M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function nd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Xc(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Yc(a,b,c,d,e,f,g,h,l,m,n,q,x){var y=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n,q,x)}catch(z){I(y);if(!(z instanceof r))throw z;G(1,0)}}function Sc(a, +b,c,d,e,f,g,h,l,m,n){var q=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function rd(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function uc(a,b,c){var d=J();try{return M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function pd(a,b,c,d,e,f,g,h,l){var m=J();try{M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function Dc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f); +if(!(g instanceof r))throw g;G(1,0)}}function Lc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Mc(a,b,c,d,e,f,g){var h=J();try{return M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function vc(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Jd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Kd(a, +b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function wc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function $c(a){var b=J();try{return M(a)()}catch(c){I(b);if(!(c instanceof r))throw c;G(1,0);return 0n}}function Ld(a,b,c,d,e,f,g,h,l,m,n,q,x,y,z,A){var F=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y,z,A)}catch(H){I(F);if(!(H instanceof r))throw H;G(1,0)}}function Hd(a, +b,c,d,e,f,g,h,l,m,n,q,x,y,z,A){var F=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y,z,A)}catch(H){I(F);if(!(H instanceof r))throw H;G(1,0)}}function be(a,b,c,d,e,f,g,h,l,m,n,q,x,y){var z=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y)}catch(A){I(z);if(!(A instanceof r))throw A;G(1,0)}}function Wd(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function Ed(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}} +function Gd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function qd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function hd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function cd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function od(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l); +if(!(m instanceof r))throw m;G(1,0)}}function ad(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0);return 0n}}async function ta(){if(k)Ia();else{var a=Module.preRun;a&&(typeof a=="function"&&(a=[a]),Fe.push(...a));for(a=Fe;a.length>0;)a.shift()(Module);Ie&&await He();ka||Ia()}}var Ja;k||(Ja=await (sa()),await (ta()));;return Module}export default createModule;var isPthread=globalThis.name=="em-pthread";isPthread&&createModule(); diff --git a/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.wasm new file mode 100644 index 00000000..fd45385a Binary files /dev/null and b/packages/blinkid-wasm/dist/full/simd-threads/BlinkIdModule.wasm differ diff --git a/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.data b/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.data similarity index 58% rename from packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.data rename to packages/blinkid-wasm/dist/full/simd/BlinkIdModule.data index 85ecead9..283902ab 100644 Binary files a/packages/blinkid-wasm/dist/full/advanced-threads/BlinkIdModule.data and b/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.data differ diff --git a/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.js b/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.js new file mode 100644 index 00000000..08e3cb2e --- /dev/null +++ b/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.js @@ -0,0 +1,127 @@ +async function createModule(moduleArg={}){var Module=moduleArg;var aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;Module.expectedDataFileDownloads||(Module.expectedDataFileDownloads=0);Module.expectedDataFileDownloads++;(()=>{var a=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(l,m){Module.dataFileDownloads||(Module.dataFileDownloads={});try{var n=await fetch(l)}catch(D){throw Error(`Network Error: ${l}`,{e:D});}if(!n.ok)throw Error(`${n.status}: ${n.url}`); +var p=[];m=Number(n.headers.get("Content-Length")||m);var w=0;Module.setStatus&&Module.setStatus("Downloading data...");for(n=n.body.getReader();;){var x;({done:x,value:y}=await n.read());if(x)break;p.push(y);w+=y.length;Module.dataFileDownloads[l]={loaded:w,total:m};var y=x=0;for(var z of Object.values(Module.dataFileDownloads))x+=z.loaded,y+=z.total;Module.setStatus&&Module.setStatus(`Downloading data... (${x}/${y})`)}l=new Uint8Array(p.map(D=>D.length).reduce((D,G)=>D+G,0));z=0;for(let D of p)l.set(D, +z),z+=D.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkid",!0,!0);l.addRunDependency("datafile_bazel-out/wasm-opt-ST-0e72d3c32124/bin/packages/blinkid-wasm/binding/full/simd/BlinkIdModule.data");l.preloadResults||(l.preloadResults={});l.preloadResults["bazel-out/wasm-opt-ST-0e72d3c32124/bin/packages/blinkid-wasm/binding/full/simd/BlinkIdModule.data"]={nf:!1};h||=await g;await async function(m){if(!m)throw Error("Loading data file failed."); +if(m.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData "+m.constructor.name);m=new Uint8Array(m);for(var n of b.files)l.FS_createDataFile(n.filename,null,m.subarray(n.start,n.end),!0,!0,!0);l.removeRunDependency("datafile_bazel-out/wasm-opt-ST-0e72d3c32124/bin/packages/blinkid-wasm/binding/full/simd/BlinkIdModule.data")}(h)}typeof window==="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):typeof process=== +"undefined"&&typeof location!=="undefined"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=Module.locateFile?Module.locateFile("BlinkIdModule.data",""):"BlinkIdModule.data",f=b.remote_package_size,g,h=Module.getPreloadedPackage&&Module.getPreloadedPackage(e,f);h||(g=c(e,f));Module.FS_createPath?d(Module):(Module.preRun||(Module.preRun=[]),Module.preRun.push(d))}({files:[{filename:"/microblink/blinkid/Model_02957b97.strop",start:0,end:103788},{filename:"/microblink/blinkid/Model_0574da24.strop", +start:103788,end:492222},{filename:"/microblink/blinkid/Model_08a8e22c.strop",start:492222,end:1927416},{filename:"/microblink/blinkid/Model_11a41e0f.strop",start:1927416,end:1931621},{filename:"/microblink/blinkid/Model_3a69425d.strop",start:1931621,end:2257614},{filename:"/microblink/blinkid/Model_44dff8bf.strop",start:2257614,end:2383388},{filename:"/microblink/blinkid/Model_48e189e2.strop",start:2383388,end:2708721},{filename:"/microblink/blinkid/Model_49210872.strop",start:2708721,end:7349173}, +{filename:"/microblink/blinkid/Model_649c20b5.strop",start:7349173,end:8377897},{filename:"/microblink/blinkid/Model_6683cb47.strop",start:8377897,end:8453877},{filename:"/microblink/blinkid/Model_7b97ad87.strop",start:8453877,end:8481280},{filename:"/microblink/blinkid/Model_7f5a4bc5.strop",start:8481280,end:8488480},{filename:"/microblink/blinkid/Model_84fd5736.strop",start:8488480,end:9735265},{filename:"/microblink/blinkid/Model_a54429ec.strop",start:9735265,end:9810544},{filename:"/microblink/blinkid/Model_a91e7e31.strop", +start:9810544,end:10080086},{filename:"/microblink/blinkid/Model_a958c31c.strop",start:10080086,end:10425174},{filename:"/microblink/blinkid/Model_ad5b6c8e.strop",start:10425174,end:11089013},{filename:"/microblink/blinkid/Model_b18ce029.strop",start:11089013,end:12751539},{filename:"/microblink/blinkid/Model_de3c93f5.strop",start:12751539,end:12758356},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:12758356,end:12778825}],remote_package_size:12778825})})();var ca=import.meta.url,da= +"",ea,fa;if(aa||ba){try{da=(new URL(".",ca)).href}catch{}ba&&(fa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ea=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ia=console.log.bind(console),k=console.error.bind(console),ja,ka=!1,la;class q{}class ma extends q{constructor(a){super();this.yd=a}}function na(){if(!r?.buffer?.Af){var a=oa.buffer; +r=new Int8Array(a);pa=new Int16Array(a);t=new Uint8Array(a);qa=new Uint16Array(a);u=new Int32Array(a);v=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);A=new BigInt64Array(a);ta=new BigUint64Array(a)}}function B(a){Module.onAbort?.(a);a=`Aborted(${a})`;k(a);ka=!0;throw new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");}var ua;async function va(a){if(!ja)try{var b=await ea(a);return new Uint8Array(b)}catch{}if(a==ua&&ja)a=new Uint8Array(ja);else if(fa)a=fa(a); +else throw"both async and sync fetching of the wasm failed";return a}async function wa(a,b){try{var c=await va(a);return await WebAssembly.instantiate(c,b)}catch(d){k(`failed to asynchronously prepare wasm: ${d}`),B(d)}}async function xa(a){var b=ua;if(!ja)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){k(`wasm streaming compile failed: ${d}`),k("falling back to ArrayBuffer instantiation")}return wa(b,a)}class ya{name="ExitStatus";constructor(a){this.message= +`Program terminated with exit(${a})`;this.status=a}}var pa,u,A,r,ra,sa,qa,v,ta,t,za=[],Aa=!0,oa,Ba=[],C=a=>{var b=Ba[a];b||(Ba[a]=b=Ca.get(a));return b},Da=[],Ea=0,Fa=null;class Ga{constructor(a){this.yd=a;this.yc=a-24}init(a,b){v[this.yc+16>>2]=0;v[this.yc+4>>2]=a;v[this.yc+8>>2]=b}}var Ja=a=>{var b=Fa?.yd;if(!b)return Ha(0),0;var c=new Ga(b);v[c.yc+16>>2]=b;var d=v[c.yc+4>>2];if(!d)return Ha(0),b;for(var e of a){if(e===0||e===d)break;if(Ia(e,d,c.yc+16))return Ha(e),b}Ha(d);return b},E=()=>{var a= +u[+Ka>>2];Ka+=4;return a},La=(a,b)=>{for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];e==="."?a.splice(d,1):e===".."?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Ma=a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=La(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},Na=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+ +b},Oa=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],Pa=(a,b)=>Ma(a+"/"+b),Qa=()=>a=>(crypto.getRandomValues(a),0),Ra=a=>(Ra=Qa())(a),Sa=(...a)=>{for(var b="",c=!1,d=a.length-1;d>=-1&&!c;d--){c=d>=0?a[d]:F.xd();if(typeof c!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=La(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},Ta=(a,b)=>{function c(g){for(var h=0;h=0&&g[l]=== +"";l--);return h>l?[]:g.slice(h,l-h+1)}a=Sa(a).slice(1);b=Sa(b).slice(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),e=d,f=0;f{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},H=(a,b=0,c,d)=>{c=Va(a,b,c,d);if(c-b>16&&a.buffer&&Ua)return Ua.decode(a.subarray(b,c));for(d="";b>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},Wa=[],Xa=a=>{for(var b=0,c=0;c=55296&&d<=57343?(b+=4,++c):b+=3}return b},Ya=(a,b,c,d)=>{if(!(d>0))return 0;var e=c;d=c+d-1;for(var f=0;f=d)break;b[c++]=g}else if(g<=2047){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(g<=65535){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},Za=a=>{var b=Array(Xa(a)+1);a=Ya(a,b,0,b.length);b.length=a;return b},$a=[];function ab(a,b){$a[a]={input:[],output:[],$c:b};bb(a,cb)}var cb={open(a){var b=$a[a.node.rd];if(!b)throw new F.uc(43); +a.Ac=b;a.seekable=!1},close(a){a.Ac.$c.Ad(a.Ac)},Ad(a){a.Ac.$c.Ad(a.Ac)},read(a,b,c,d){if(!a.Ac||!a.Ac.$c.ee)throw new F.uc(60);for(var e=0,f=0;f0&&(ia(H(a.output)),a.output=[])},Fe(){return{bf:25856,df:5,af:191,cf:35387,$e:[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]}},Ge(){return 0},He(){return[24,80]}},eb={Pd(a,b){b===null||b===10?(k(H(a.output)), +a.output=[]):b!=0&&a.output.push(b)},Ad(a){a.output?.length>0&&(k(H(a.output)),a.output=[])}},gb=a=>{a=Math.ceil(a/65536)*65536;var b=fb(65536,a);b&&t.fill(0,b,b+a);return b},I={Uc:null,Cc(){return I.createNode(null,"/",16895,0)},createNode(a,b,c,d){var e;(e=(c&61440)===24576)||(e=(c&61440)===4096);if(e)throw new F.uc(63);I.Uc||(I.Uc={dir:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc,ed:I.wc.ed,Yc:I.wc.Yc,td:I.wc.td,ld:I.wc.ld,ud:I.wc.ud,sd:I.wc.sd,dd:I.wc.dd},stream:{Mc:I.xc.Mc}},file:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc}, +stream:{Mc:I.xc.Mc,read:I.xc.read,write:I.xc.write,gd:I.xc.gd,kd:I.xc.kd}},link:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc,cd:I.wc.cd},stream:{}},Xd:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc},stream:F.oe}});c=F.createNode(a,b,c,d);K(c.mode)?(c.wc=I.Uc.dir.node,c.xc=I.Uc.dir.stream,c.zc={}):F.isFile(c.mode)?(c.wc=I.Uc.file.node,c.xc=I.Uc.file.stream,c.Jc=0,c.zc=I.se??(I.se=new Uint8Array(0))):(c.mode&61440)===40960?(c.wc=I.Uc.link.node,c.xc=I.Uc.link.stream):(c.mode&61440)===8192&&(c.wc=I.Uc.Xd.node,c.xc=I.Uc.Xd.stream);c.Xc= +c.Nc=c.Lc=Date.now();a&&(a.zc[b]=c,a.Xc=a.Nc=a.Lc=c.Xc);return c},wc:{Rc(a){var b={};b.qe=(a.mode&61440)===8192?a.id:1;b.Ee=a.id;b.mode=a.mode;b.Le=1;b.uid=0;b.Ce=0;b.rd=a.rd;K(a.mode)?b.size=4096:F.isFile(a.mode)?b.size=a.Jc:b.size=(a.mode&61440)===40960?a.link.length:0;b.Xc=new Date(a.Xc);b.Nc=new Date(a.Nc);b.Lc=new Date(a.Lc);b.ne=4096;b.Vd=Math.ceil(b.size/b.ne);return b},Tc(a,b){for(var c of["mode","atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!==void 0&&(b=b.size,a.Jc!=b&&(c=a.zc, +a.zc=new Uint8Array(b),a.zc.set(c.subarray(0,Math.min(b,a.Jc))),a.Jc=b))},ed(){I.Gd||(I.Gd=new F.uc(44),I.Gd.stack="");throw I.Gd;},Yc(a,b,c,d){return I.createNode(a,b,c,d)},td(a,b,c){try{var d=L(b,c)}catch(f){}if(d){if(K(a.mode))for(var e in d.zc)throw new F.uc(55);hb(d)}delete a.parent.zc[a.name];b.zc[c]=a;a.name=c;b.Lc=b.Nc=a.parent.Lc=a.parent.Nc=Date.now()},ld(a,b){delete a.zc[b];a.Lc=a.Nc=Date.now()},ud(a,b){var c=L(a,b),d;for(d in c.zc)throw new F.uc(55);delete a.zc[b]; +a.Lc=a.Nc=Date.now()},sd(a){return[".","..",...Object.keys(a.zc)]},dd(a,b,c){a=I.createNode(a,b,41471,0);a.link=c;return a},cd(a){if((a.mode&61440)!==40960)throw new F.uc(28);return a.link}},xc:{read(a,b,c,d,e){if(e>=a.node.Jc)return 0;d=Math.min(a.node.Jc-e,d);b.set(a.node.zc.subarray(e,e+d),c);return d},write(a,b,c,d,e,f){b.buffer===r.buffer&&(f=!1);if(!d)return 0;a=a.node;a.Nc=a.Lc=Date.now();if(f)a.zc=b.subarray(c,c+d),a.Jc=d;else if(a.Jc===0&&e===0)a.zc=b.slice(c,c+d),a.Jc=d;else{f=e+d;var g= +a.zc.length;g>=f||(f=Math.max(f,g*(g<1048576?2:1.125)>>>0),g&&(f=Math.max(f,256)),g=a.zc.subarray(0,a.Jc),a.zc=new Uint8Array(f),a.zc.set(g));a.zc.set(b.subarray(c,c+d),e);a.Jc=Math.max(a.Jc,e+d)}return d},Mc(a,b,c){c===1?b+=a.position:c===2&&F.isFile(a.node.mode)&&(b+=a.node.Jc);if(b<0)throw new F.uc(28);return b},gd(a,b,c,d,e){if(!F.isFile(a.node.mode))throw new F.uc(43);a=a.node.zc;if(e&2||a.buffer!==r.buffer){d=!0;e=gb(b);if(!e)throw new F.uc(48);if(a){if(c>0||c+b{typeof a=="string"&&(a=Za(a));a.subarray||(a=new Uint8Array(a));return a},jb=(a,b)=>{var c=0;a&&(c|=365);b&&(c|=146);return c},kb=async a=>{a=await ea(a);return new Uint8Array(a)},lb=null,mb=async()=>lb,nb=0,ob=()=>{nb--;nb||lb.resolve()},pb=()=>{if(!nb){var a;lb=new Promise(b=>a=b);lb.resolve=a}nb++},qb=[],rb=async(a,b)=>{typeof Browser!="undefined"&& +Browser.init();for(var c of qb)if(c.canHandle(b))return c.handle(a,b);return a},tb=async(a,b,c,d,e,f,g,h)=>{var l=b?Sa(Ma(a+"/"+b)):a,m=`cp ${l}`;pb(m);try{var n=c;typeof c=="string"&&(n=await kb(c));n=await rb(n,l);h?.();f||sb(a,b,n,d,e,g)}finally{ob(m)}};function bb(a,b){F.be[a]={xc:b}}function K(a){return(a&61440)===16384}function L(a,b){var c=K(a.mode)?(c=ub(a,"x"))?c:a.wc.ed?0:2:54;if(c)throw new F.uc(c);for(c=F.Zc[vb(a.id,b)];c;c=c.hd){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return F.ed(a, +b)}function hb(a){var b=vb(a.parent.id,a.name);if(F.Zc[b]===a)F.Zc[b]=a.hd;else for(b=F.Zc[b];b;){if(b.hd===a){b.hd=a.hd;break}b=b.hd}}function sb(a,b,c,d,e,f){var g=b;a&&(a=typeof a=="string"?a:wb(a),g=b?Ma(a+"/"+b):a);a=jb(d,e);g=F.create(g,a);c&&(c=ib(c),xb(g,a|146),b=F.open(g,577),F.write(b,c,0,c.length,0,f),F.close(b),xb(g,a))}function N(a,b={}){if(!a)throw new F.uc(44);b.zd??(b.zd=!0);a.charAt(0)==="/"||(a=F.xd()+"/"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(h=>!!h);for(var d=F.root, +e="/",f=0;f>>0)%F.Zc.length}function yb(a){var b=vb(a.parent.id,a.name);a.hd=F.Zc[b];F.Zc[b]=a}function ub(a,b){return F.fe?0:b.includes("r")&&!(a.mode&292)||b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73)?2:0}function zb(a,b){if(!K(a.mode))return 54;try{return L(a,b),20}catch(c){}return ub(a, +"wx")}function Ab(a,b,c){try{var d=L(a,b)}catch(e){return e.Ec}if(a=ub(a,"wx"))return a;if(c){if(!K(d.mode))return 54;if(F.Ld(d)||wb(d)===F.xd())return 10}else if(K(d.mode))return 31;return 0}function Bb(a,b){if(!a)throw new F.uc(b);return a}function O(a){a=F.ze(a);if(!a)throw new F.uc(8);return a}function Cb(a,b=-1){a=Object.assign(new F.le,a);if(b==-1)a:{for(b=0;b<=F.me;b++)if(!F.streams[b])break a;throw new F.uc(33);}a.bd=b;return F.streams[b]=a}function Db(a,b=-1){a=Cb(a,b);a.xc?.hf?.(a);return a} +function Eb(a,b,c){var d=a?.xc.Tc;a=d?a:b;d??=b.wc.Tc;Bb(d,63);try{d(a,c)}catch(e){if(e instanceof RangeError)throw new F.uc(22);throw e;}}function Fb(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push(...c.pd)}return b}function Gb(a){var b={Ze:4096,pf:4096,Vd:1E6,Ye:5E5,Xe:5E5,files:F.Od,lf:F.Od-1,qf:42,flags:2,xf:255};a.wc.ie&&Object.assign(b,a.wc.ie(a.Cc.Ne.root));return b}function P(a,b=511){return F.Yc(a,b&1023|16384,0)}function Hb(a,b,c){typeof c=="undefined"&&(c=b,b=438);return F.Yc(a, +b|8192,c)}function Ib(a,b,c,d){Eb(a,b,{mode:c&4095|b.mode&-4096,Lc:Date.now(),ce:d})}function xb(a,b,c){a=typeof a=="string"?N(a,{Qc:!c}).node:a;Ib(null,a,b,c)}function Jb(a,b,c){if(K(b.mode))throw new F.uc(31);if(!F.isFile(b.mode))throw new F.uc(28);var d=ub(b,"w");if(d)throw new F.uc(d);Eb(a,b,{size:c,timestamp:Date.now()})}function Kb(a,b={}){b.flags=b.flags??0;b.encoding=b.encoding??"binary";b.encoding!=="utf8"&&b.encoding!=="binary"&&B(`Invalid encoding type "${b.encoding}"`);var c=F.open(a, +b.flags);a=F.stat(a).size;var d=new Uint8Array(a);F.read(c,d,0,a,0);b.encoding==="utf8"&&(d=H(d));F.close(c);return d}function Lb(a,b){a=typeof a=="string"?a:wb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Ma(a+"/"+c);try{P(d)}catch(e){if(e.Ec!=20)throw e;}a=d}}return d}function Mb(a,b,c,d){a=typeof a=="string"?a:wb(a);b=Ma(a+"/"+b);return F.create(b,jb(c,d))}function Nb(a){if(!(a.Ie||a.Je||a.link||a.zc))if(globalThis.XMLHttpRequest)B("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); +else try{a.zc=fa(a.url)}catch(b){throw new F.uc(29);}}function Ob(a,b,c,d,e){function f(n,p,w,x,y){n=n.node.zc;if(y>=n.length)return 0;x=Math.min(n.length-y,x);if(n.slice)for(var z=0;zthis.length-1||n<0)){var p=n%this.Yd;return this.od(n/this.Yd|0)[p]}}Re(n){this.od=n}Wd(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);n.status>=200&&n.status<300||n.status===304||B("Couldn't load "+ +c+". Status: "+n.status);var p=Number(n.getResponseHeader("Content-length")),w,x=(w=n.getResponseHeader("Accept-Ranges"))&&w==="bytes";n=(w=n.getResponseHeader("Content-Encoding"))&&w==="gzip";var y=1048576;x||(y=p);var z=this;z.Re(D=>{var G=D*y,J=(D+1)*y-1;J=Math.min(J,p-1);if(typeof z.wd[D]=="undefined"){var ha=z.wd;G>J&&B(`invalid range (${G}, ${J}) or no bytes requested!`);J>p-1&&B(`only ${p} bytes available! programmer error!`);var M=new XMLHttpRequest;M.open("GET",c,!1);p!==y&&M.setRequestHeader("Range", +"bytes="+G+"-"+J);M.responseType="arraybuffer";M.overrideMimeType&&M.overrideMimeType("text/plain; charset=x-user-defined");M.send(null);M.status>=200&&M.status<300||M.status===304||B("Couldn't load "+c+". Status: "+M.status);G=M.response!==void 0?new Uint8Array(M.response||[]):Za(M.responseText??"");ha[D]=G}typeof z.wd[D]=="undefined"&&B("doXHR failed!");return z.wd[D]});if(n||!p)y=p=1,y=p=this.od(0).length,ia("LazyFiles on gzip forces download of the whole file when length is accessed");this.Td= +p;this.Sd=y;this.Md=!0}get length(){this.Md||this.Wd();return this.Td}get Yd(){this.Md||this.Wd();return this.Sd}}if(globalThis.XMLHttpRequest){ba||B("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var l=void 0}else l=c,h=void 0;var m=Mb(a,b,d,e);h?m.zc=h:l&&(m.zc=null,m.url=l);Object.defineProperties(m,{Jc:{get:function(){return this.zc.length}}});a={};for(let [n,p]of Object.entries(m.xc))a[n]=(...w)=>{Nb(m);return p(...w)}; +a.read=(n,p,w,x,y)=>{Nb(m);return f(n,p,w,x,y)};a.gd=(n,p,w)=>{Nb(m);var x=gb(p);if(!x)throw new F.uc(48);f(n,r,x,p,w);return{yc:x,Ud:!0}};m.xc=a;return m}var F={root:null,pd:[],be:{},streams:[],Od:1,Zc:null,$d:"/",Id:!1,fe:!0,ve:null,Ed:0,uc:class{name="ErrnoError";constructor(a){this.Ec=a}},le:class{shared={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position= +a}},ke:class{wc={};xc={};Dd=365;Fd=146;Sc=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Cc=a.Cc;this.id=F.Od++;this.name=b;this.mode=c;this.rd=d;this.Xc=this.Nc=this.Lc=Date.now()}get read(){return(this.mode&this.Dd)===this.Dd}set read(a){a?this.mode|=this.Dd:this.mode&=~this.Dd}get write(){return(this.mode&this.Fd)===this.Fd}set write(a){a?this.mode|=this.Fd:this.mode&=~this.Fd}get Je(){return K(this.mode)}get Ie(){return(this.mode&61440)===8192}},createNode(a,b,c,d){a=new F.ke(a,b,c,d); +yb(a);return a},Ld(a){return a===a.parent},isFile(a){return(a&61440)===32768},sf(a){return(a&49152)===49152},me:4096,ze:a=>F.streams[a],oe:{open(a){a.xc=F.xe(a.node.rd).xc;a.xc.open?.(a)},Mc(){throw new F.uc(70);}},Nd:a=>a>>8,vf:a=>a&255,fd:(a,b)=>a<<8|b,xe:a=>F.be[a],je(a,b){function c(h){F.Ed--;return b(h)}function d(h){if(h){if(!d.te)return d.te=!0,c(h)}else++f>=e.length&&c(null)}typeof a=="function"&&(b=a,a=!1);F.Ed++;F.Ed>1&&k(`warning: ${F.Ed} FS.syncfs operations in flight at once, probably just doing extra work`); +var e=Fb(F.root.Cc),f=0,g;for(g of e)g.type.je?g.type.je(g,a,d):d(null)},Cc(a,b,c){var d=c==="/";if(d&&F.root)throw new F.uc(10);if(!d&&c){var e=N(c,{zd:!1});c=e.path;e=e.node;if(e.Sc)throw new F.uc(10);if(!K(e.mode))throw new F.uc(54);}b={type:a,Ne:b,ge:c,pd:[]};a=a.Cc(b);a.Cc=b;b.root=a;d?F.root=a:e&&(e.Sc=b,e.Cc&&e.Cc.pd.push(b));return a},Df(a){a=N(a,{zd:!1});if(!a.node.Sc)throw new F.uc(28);a=a.node;var b=a.Sc,c=Fb(b);for([,e]of Object.entries(F.Zc))for(;e;){var d=e.hd;c.includes(e.Cc)&&hb(e); +var e=d}a.Sc=null;a.Cc.pd.splice(a.Cc.pd.indexOf(b),1)},ed(a,b){return a.wc.ed(a,b)},Yc(a,b,c){var d=N(a,{parent:!0}).node;a=Oa(a);if(!a)throw new F.uc(28);if(a==="."||a==="..")throw new F.uc(20);var e=zb(d,a);if(e)throw new F.uc(e);if(!d.wc.Yc)throw new F.uc(63);return d.wc.Yc(d,a,b,c)},ie(a){return Gb(N(a,{Qc:!0}).node)},Bf(a){return Gb(a.node)},create(a,b=438){return F.Yc(a,b&4095|32768,0)},wf(a,b){var c=a.split("/"),d="",e;for(e of c)if(e){if(d||a.charAt(0)==="/")d+="/";d+=e;try{P(d,b)}catch(f){if(f.Ec!= +20)throw f;}}},dd(a,b){if(!Sa(a))throw new F.uc(44);var c=N(b,{parent:!0}).node;if(!c)throw new F.uc(44);b=Oa(b);var d=zb(c,b);if(d)throw new F.uc(d);if(!c.wc.dd)throw new F.uc(63);return c.wc.dd(c,b,a)},td(a,b){var c=Na(a),d=Na(b),e=Oa(a),f=Oa(b);var g=N(a,{parent:!0});var h=g.node;g=N(b,{parent:!0});g=g.node;if(!h||!g)throw new F.uc(44);if(h.Cc!==g.Cc)throw new F.uc(75);var l=L(h,e);a=Ta(a,d);if(a.charAt(0)!==".")throw new F.uc(28);a=Ta(b,c);if(a.charAt(0)!==".")throw new F.uc(55);try{var m=L(g, +f)}catch(n){}if(l!==m){b=K(l.mode);if(e=Ab(h,e,b))throw new F.uc(e);if(e=m?Ab(g,f,b):zb(g,f))throw new F.uc(e);if(!h.wc.td)throw new F.uc(63);if(l.Sc||m&&m.Sc)throw new F.uc(10);if(g!==h&&(e=ub(h,"w")))throw new F.uc(e);hb(l);try{h.wc.td(l,g,f),l.parent=g}catch(n){throw n;}finally{yb(l)}}},ud(a){var b=N(a,{parent:!0}).node;a=Oa(a);var c=L(b,a),d=Ab(b,a,!0);if(d)throw new F.uc(d);if(!b.wc.ud)throw new F.uc(63);if(c.Sc)throw new F.uc(10);b.wc.ud(b,a);hb(c)},sd(a){a=N(a,{Qc:!0}).node;return Bb(a.wc.sd, +54)(a)},ld(a){var b=N(a,{parent:!0}).node;if(!b)throw new F.uc(44);a=Oa(a);var c=L(b,a),d=Ab(b,a,!1);if(d)throw new F.uc(d);if(!b.wc.ld)throw new F.uc(63);if(c.Sc)throw new F.uc(10);b.wc.ld(b,a);hb(c)},cd(a){a=N(a).node;if(!a)throw new F.uc(44);if(!a.wc.cd)throw new F.uc(28);return a.wc.cd(a)},stat(a,b){a=N(a,{Qc:!b}).node;return Bb(a.wc.Rc,63)(a)},tf(a,b){xb(a,b,!0)},jf(a,b){a=O(a);Ib(a,a.node,b,!1)},uf(a){a=typeof a=="string"?N(a,{Qc:!1}).node:a;Eb(null,a,{timestamp:Date.now(),ce:!0})},kf(a){a= +O(a);Eb(a,a.node,{timestamp:Date.now(),ce:!1})},truncate(a,b){if(b<0)throw new F.uc(28);a=typeof a=="string"?N(a,{Qc:!0}).node:a;Jb(null,a,b)},rf(a,b){a=O(a);if(b<0||(a.flags&2097155)===0)throw new F.uc(28);Jb(a,a.node,b)},Ef(a,b,c){a=N(a,{Qc:!0}).node;Bb(a.wc.Tc,63)(a,{Xc:b,Nc:c})},open(a,b,c=438){if(a==="")throw new F.uc(44);if(typeof b=="string"){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof d=="undefined")throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0; +if(typeof a=="object")d=a;else{var e=a.endsWith("/");var f=N(a,{Qc:!(b&131072),Me:!0});d=f.node;a=f.path}f=!1;if(b&64)if(d){if(b&128)throw new F.uc(20);}else{if(e)throw new F.uc(31);d=F.Yc(a,c|511,0);f=!0}if(!d)throw new F.uc(44);(d.mode&61440)===8192&&(b&=-513);if(b&65536&&!K(d.mode))throw new F.uc(54);if(!f&&(d?(d.mode&61440)===40960?e=32:(e=["r","w","rw"][b&3],b&512&&(e+="w"),e=K(d.mode)&&(e!=="r"||b&576)?31:ub(d,e)):e=44,e))throw new F.uc(e);b&512&&!f&&F.truncate(d,0);b&=-131713;b=Cb({node:d, +path:wb(d),flags:b,seekable:!0,position:0,xc:d.xc,We:[],error:!1});b.xc.open&&b.xc.open(b);f&&xb(d,c&511);return b},close(a){if(a.bd===null)throw new F.uc(8);a.Hd&&(a.Hd=null);try{a.xc.close&&a.xc.close(a)}catch(b){throw b;}finally{F.streams[a.bd]=null}a.bd=null},Mc(a,b,c){if(a.bd===null)throw new F.uc(8);if(!a.seekable||!a.xc.Mc)throw new F.uc(70);if(c!=0&&c!=1&&c!=2)throw new F.uc(28);a.position=a.xc.Mc(a,b,c);a.We=[];return a.position},read(a,b,c,d,e){if(d<0||e<0)throw new F.uc(28);if(a.bd===null)throw new F.uc(8); +if((a.flags&2097155)===1)throw new F.uc(8);if(K(a.node.mode))throw new F.uc(31);if(!a.xc.read)throw new F.uc(28);var f=typeof e!="undefined";if(!f)e=a.position;else if(!a.seekable)throw new F.uc(70);b=a.xc.read(a,b,c,d,e);f||(a.position+=b);return b},write(a,b,c,d,e,f){if(d<0||e<0)throw new F.uc(28);if(a.bd===null)throw new F.uc(8);if((a.flags&2097155)===0)throw new F.uc(8);if(K(a.node.mode))throw new F.uc(31);if(!a.xc.write)throw new F.uc(28);a.seekable&&a.flags&1024&&F.Mc(a,0,2);var g=typeof e!= +"undefined";if(!g)e=a.position;else if(!a.seekable)throw new F.uc(70);b=a.xc.write(a,b,c,d,e,f);g||(a.position+=b);return b},gd(a,b,c,d,e){if((d&2)!==0&&(e&2)===0&&(a.flags&2097155)!==2)throw new F.uc(2);if((a.flags&2097155)===1)throw new F.uc(2);if(!a.xc.gd)throw new F.uc(43);if(!b)throw new F.uc(28);return a.xc.gd(a,b,c,d,e)},kd(a,b,c,d,e){return a.xc.kd?a.xc.kd(a,b,c,d,e):0},Jd(a,b,c){if(!a.xc.Jd)throw new F.uc(59);return a.xc.Jd(a,b,c)},Ff(a,b,c={}){c.flags=c.flags??577;a=F.open(a,c.flags,c.mode); +b=ib(b);F.write(a,b,0,b.byteLength,void 0,c.ef);F.close(a)},xd:()=>F.$d,ff(a){a=N(a,{Qc:!0});if(a.node===null)throw new F.uc(44);if(!K(a.node.mode))throw new F.uc(54);var b=ub(a.node,"x");if(b)throw new F.uc(b);F.$d=a.path},init(a,b,c){F.Id=!0;a?F.ad("/dev","stdin",a):F.dd("/dev/tty","/dev/stdin");b?F.ad("/dev","stdout",null,b):F.dd("/dev/tty","/dev/stdout");c?F.ad("/dev","stderr",null,c):F.dd("/dev/tty1","/dev/stderr");F.open("/dev/stdin",0);F.open("/dev/stdout",1);F.open("/dev/stderr",1)},zf(){F.Id= +!1;for(var a of F.streams)a&&F.close(a)},mf(a,b){try{var c=N(a,{Qc:!b});a=c.path}catch(f){}var d=!1,e=null;try{c=N(a,{parent:!0}),Oa(a),c=N(a,{Qc:!b}),d=!0,e=c.node}catch(f){}return d?e:null},ad(a,b,c,d){a=Pa(typeof a=="string"?a:wb(a),b);b=jb(!!c,!!d);var e;(e=F.ad).Nd??(e.Nd=64);e=F.fd(F.ad.Nd++,0);bb(e,{open(f){f.seekable=!1},close(){d?.buffer?.length&&d(10)},read(f,g,h,l){for(var m=0,n=0;n>2]=b.qe;v[a+4>>2]=b.mode;v[a+8>>2]=b.Le;v[a+12>>2]=b.uid;v[a+16>>2]=b.Ce;v[a+20>>2]=b.rd;A[a+24>>3]=BigInt(b.size);u[a+32>>2]=4096; +u[a+36>>2]=b.Vd;var c=b.Xc.getTime(),d=b.Nc.getTime(),e=b.Lc.getTime();A[a+40>>3]=BigInt(Math.floor(c/1E3));v[a+48>>2]=c%1E3*1E3*1E3;A[a+56>>3]=BigInt(Math.floor(d/1E3));v[a+64>>2]=d%1E3*1E3*1E3;A[a+72>>3]=BigInt(Math.floor(e/1E3));v[a+80>>2]=e%1E3*1E3*1E3;A[a+88>>3]=BigInt(b.Ee);return 0}var Ka=void 0,Rb={},Sb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Tb(a){return this.Fc(v[a>>2])}var Ub={},Vb={},Wb={},Xb=class extends Error{constructor(a){super(a);this.name="InternalError"}},Yb=(a, +b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new Xb("Mismatched type converter count");for(var l=0;lWb[h]=b);var e=Array(b.length),f=[],g=0;for(let [h,l]of b.entries())Vb.hasOwnProperty(l)?e[h]=Vb[l]:(f.push(l),Ub.hasOwnProperty(l)||(Ub[l]=[]),Ub[l].push(()=>{e[h]=Vb[l];++g;g===f.length&&d(e)}));0===f.length&&d(e)},R=a=>{for(var b="";;){var c=t[a++];if(!c)return b;b+=String.fromCharCode(c)}},S=class extends Error{constructor(a){super(a);this.name= +"BindingError"}};function Zb(a,b,c={}){var d=b.name;if(!a)throw new S(`type "${d}" must have a positive integer typeid pointer`);if(Vb.hasOwnProperty(a)){if(c.De)return;throw new S(`Cannot register type '${d}' twice`);}Vb[a]=b;delete Wb[a];Ub.hasOwnProperty(a)&&(b=Ub[a],delete Ub[a],b.forEach(e=>e()))}function Q(a,b,c={}){return Zb(a,b,c)}var $b=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>t[d];case 2:return c?d=>pa[d>>1]:d=>qa[d>>1];case 4:return c?d=>u[d>>2]:d=>v[d>>2];case 8:return c?d=>A[d>> +3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},ac=a=>{throw new S(a.vc.Dc.Bc.name+" instance already deleted");},bc=!1,cc=()=>{},dc=a=>{if(!globalThis.FinalizationRegistry)return dc=b=>b,a;bc=new FinalizationRegistry(b=>{b=b.vc;--b.count.value;0===b.count.value&&(b.Hc?b.Oc.Vc(b.Hc):b.Dc.Bc.Vc(b.yc))});dc=b=>{var c=b.vc;c.Hc&&bc.register(b,{vc:c},b);return b};cc=b=>{bc.unregister(b)};return dc(a)},ec=[];function fc(){}var hc=(a,b)=>Object.defineProperty(b,"name", +{value:a}),ic={},jc=(a,b,c)=>{if(void 0===a[b].Gc){var d=a[b];a[b]=function(...e){if(!a[b].Gc.hasOwnProperty(e.length))throw new S(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Gc})!`);return a[b].Gc[e.length].apply(this,e)};a[b].Gc=[];a[b].Gc[d.md]=d}},kc=(a,b,c)=>{if(Module.hasOwnProperty(a)){if(void 0===c||void 0!==Module[a].Gc&&void 0!==Module[a].Gc[c])throw new S(`Cannot register public name '${a}' twice`);jc(Module,a,a);if(Module[a].Gc.hasOwnProperty(c))throw new S(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`); +Module[a].Gc[c]=b}else Module[a]=b,Module[a].md=c},lc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return b>=48&&b<=57?`_${a}`:a};function mc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.jd=c;this.Vc=d;this.Kc=e;this.we=f;this.vd=g;this.re=h;this.Pe=[]}var nc=(a,b,c)=>{for(;b!==c;){if(!b.vd)throw new S(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.vd(a);b=b.Kc}return a},oc=a=>{if(a===null)return"null";var b=typeof a;return b==="object"||b==="array"|| +b==="function"?a.toString():""+a};function pc(a,b){if(b===null){if(this.Kd)throw new S(`null is not a valid ${this.name}`);return 0}if(!b.vc)throw new S(`Cannot pass "${oc(b)}" as a ${this.name}`);if(!b.vc.yc)throw new S(`Cannot pass deleted object as a pointer of type ${this.name}`);return nc(b.vc.yc,b.vc.Dc.Bc,this.Bc)}function qc(a,b){if(b===null){if(this.Kd)throw new S(`null is not a valid ${this.name}`);if(this.Cd){var c=this.Qd();a!==null&&a.push(this.Vc,c);return c}return 0}if(!b||!b.vc)throw new S(`Cannot pass "${oc(b)}" as a ${this.name}`); +if(!b.vc.yc)throw new S(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Bd&&b.vc.Dc.Bd)throw new S(`Cannot convert argument of type ${b.vc.Oc?b.vc.Oc.name:b.vc.Dc.name} to parameter type ${this.name}`);c=nc(b.vc.yc,b.vc.Dc.Bc,this.Bc);if(this.Cd){if(void 0===b.vc.Hc)throw new S("Passing raw pointer to smart pointer is illegal");switch(this.Ve){case 0:if(b.vc.Oc===this)c=b.vc.Hc;else throw new S(`Cannot convert argument of type ${b.vc.Oc?b.vc.Oc.name:b.vc.Dc.name} to parameter type ${this.name}`); +break;case 1:c=b.vc.Hc;break;case 2:if(b.vc.Oc===this)c=b.vc.Hc;else{var d=b.clone();c=this.Qe(c,T(()=>d["delete"]()));a!==null&&a.push(this.Vc,c)}break;default:throw new S("Unsupported sharing policy");}}return c}function rc(a,b){if(b===null){if(this.Kd)throw new S(`null is not a valid ${this.name}`);return 0}if(!b.vc)throw new S(`Cannot pass "${oc(b)}" as a ${this.name}`);if(!b.vc.yc)throw new S(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.vc.Dc.Bd)throw new S(`Cannot convert argument of type ${b.vc.Dc.name} to parameter type ${this.name}`); +return nc(b.vc.yc,b.vc.Dc.Bc,this.Bc)}var sc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Kc)return null;a=sc(a,b,c.Kc);return a===null?null:c.re(a)},tc={},uc=(a,b)=>{if(b===void 0)throw new S("ptr should not be undefined");for(;a.Kc;)b=a.vd(b),a=a.Kc;return tc[b]},vc=(a,b)=>{if(!b.Dc||!b.yc)throw new Xb("makeClassHandle requires ptr and ptrType");if(!!b.Oc!==!!b.Hc)throw new Xb("Both smartPtrType and smartPtr must be specified");b.count={value:1};return dc(Object.create(a,{vc:{value:b,writable:!0}}))}; +function wc(a,b,c,d,e,f,g,h,l,m,n){this.name=a;this.Bc=b;this.Kd=c;this.Bd=d;this.Cd=e;this.Oe=f;this.Ve=g;this.he=h;this.Qd=l;this.Qe=m;this.Vc=n;e||b.Kc!==void 0?this.Ic=qc:(this.Ic=d?pc:rc,this.Pc=null)}var xc=(a,b,c)=>{if(!Module.hasOwnProperty(a))throw new Xb("Replacing nonexistent public symbol");void 0!==Module[a].Gc&&void 0!==c?Module[a].Gc[c]=b:(Module[a]=b,Module[a].md=c)},U=(a,b)=>{a=R(a);var c=C(b);if(typeof c!="function")throw new S(`unknown function pointer with signature ${a}: ${b}`); +return c};class yc extends Error{}var Bc=a=>{a=zc(a);var b=R(a);Ac(a);return b},Cc=(a,b)=>{function c(f){e[f]||Vb[f]||(Wb[f]?Wb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new yc(`${a}: `+d.map(Bc).join([", "]));};function Ec(a){for(var b=1;b{for(var c=[],d=0;d>2]);return c},Hc=a=>{a=a.trim();var b=a.indexOf("(");return b===-1?a:a.slice(0,b)},Ic=[],V=[0,1,,1,null,1,!0,1,!1,1],Jc=[], +Kc=a=>{if(a>9&&0===--V[a+1]){var b=V[a];V[a]=void 0;var c=Jc[a];c&&(Jc[a]=void 0,c(b));Ic.push(a)}},W=a=>{if(!a)throw new S(`Cannot use deleted val. handle = ${a}`);return V[a]},T=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:let b=Ic.pop()||V.length;V[b]=a;V[b+1]=1;return b}},Lc={name:"emscripten::val",Fc:a=>{var b=W(a);Kc(a);return b},Ic:(a,b)=>T(b),Wc:Tb,Pc:null},Mc=(a,b)=>{switch(b){case 4:return function(c){return this.Fc(ra[c>>2])};case 8:return function(c){return this.Fc(sa[c>> +3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},Nc=Object.assign({optional:!0},Lc),Oc=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Pc=(a,b,c)=>{a>>=1;b=Va(qa,a,b/2,c);if(b-a>16&&Oc)return Oc.decode(qa.subarray(a,b));for(c="";a{if(c<2)return 0;c-=2;var d=b;c=c>1]=a.charCodeAt(e),b+=2;pa[b>>1]=0;return b-d},Rc=a=>a.length*2,Sc=(a,b,c)=>{var d=""; +a>>=2;for(var e=0;!(e>=b/4);e++){var f=v[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},Tc=(a,b,c=2147483647)=>{if(c<4)return 0;var d=b;c=d+c-4;for(var e=0;e65535&&e++;u[b>>2]=f;b+=4;if(b+4>c)break}u[b>>2]=0;return b-d},Uc=a=>{for(var b=0,c=0;c65535&&c++,b+=4;return b},Vc=0,Wc=[],Xc=a=>{var b=Wc.length;Wc.push(a);return b},Yc=(a,b)=>{for(var c=Array(a),d=0;d>2],g=Vb[f];if(void 0===g)throw a= +`${`parameter ${d}`} has unknown type ${Bc(f)}`,new S(a);c[e]=g}return c},Zc={},$c=a=>{var b=Zc[a];return b===void 0?R(a):b},ad=a=>a%4===0&&(a%100!==0||a%400===0),bd=[0,31,60,91,121,152,182,213,244,274,305,335],cd=[0,31,59,90,120,151,181,212,243,273,304,334],dd={},ed=a=>{if(!(a instanceof ya||a=="unwind"))throw a;},fd=a=>{la=a;Aa||Vc>0||(ka=!0);throw new ya(a);},gd=a=>{if(!ka)try{a()}catch(b){ed(b)}finally{if(!(Aa||Vc>0))try{la=a=la,fd(a)}catch(b){ed(b)}}},hd=[],jd=(a,b)=>setTimeout(()=>{gd(a)},b), +kd={},md=()=>{if(!ld){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in kd)kd[b]===void 0?delete a[b]:a[b]=kd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);ld=c}return ld},ld;F.gf=(a,b,c,d,e,f,g,h,l,m)=>{tb(a,b,c,d,e,h,l,m).then(f).catch(g)};F.yf=tb;F.Zc=Array(4096);F.Cc(I,{},"/");P("/tmp");P("/home");P("/home/web_user");(function(){P("/dev");bb(F.fd(1,3),{read:()=>0, +write:(d,e,f,g)=>g,Mc:()=>0});Hb("/dev/null",F.fd(1,3));ab(F.fd(5,0),db);ab(F.fd(6,0),eb);Hb("/dev/tty",F.fd(5,0));Hb("/dev/tty1",F.fd(6,0));var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(Ra(a),b=a.byteLength);return a[--b]};F.ad("/dev","random",c);F.ad("/dev","urandom",c);P("/dev/shm");P("/dev/shm/tmp")})();(function(){P("/proc");var a=P("/proc/self");P("/proc/self/fd");F.Cc({Cc(){var b=F.createNode(a,"fd",16895,73);b.xc={Mc:I.xc.Mc};b.wc={ed(c,d){c=+d;var e=O(c);c={parent:null,Cc:{ge:"fake"},wc:{cd:()=> +e.path},id:c+1};return c.parent=c},sd(){return Array.from(F.streams.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},{},"/proc/self/fd")})();F.ve={MEMFS:I};(()=>{var a=fc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof fc&&c instanceof fc))return!1;var d=this.vc.Dc.Bc,e=this.vc.yc;c.vc=c.vc;var f=c.vc.Dc.Bc;for(c=c.vc.yc;d.Kc;)e=d.vd(e),d=d.Kc;for(;f.Kc;)c=f.vd(c),f=f.Kc;return d===f&&e===c},clone:function(){this.vc.yc||ac(this);if(this.vc.qd)return this.vc.count.value+= +1,this;var c=dc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.vc;c=c(e.call(d,f,{vc:{value:{count:g.count,nd:g.nd,qd:g.qd,yc:g.yc,Dc:g.Dc,Hc:g.Hc,Oc:g.Oc}}}));c.vc.count.value+=1;c.vc.nd=!1;return c},["delete"](){this.vc.yc||ac(this);if(this.vc.nd&&!this.vc.qd)throw new S("Object already scheduled for deletion");cc(this);var c=this.vc;--c.count.value;0===c.count.value&&(c.Hc?c.Oc.Vc(c.Hc):c.Dc.Bc.Vc(c.yc));this.vc.qd||(this.vc.Hc=void 0,this.vc.yc=void 0)},isDeleted:function(){return!this.vc.yc}, +deleteLater:function(){this.vc.yc||ac(this);if(this.vc.nd&&!this.vc.qd)throw new S("Object already scheduled for deletion");ec.push(this);this.vc.nd=!0;return this}});var b=Symbol.dispose;b&&(a[b]=a["delete"])})();Object.assign(wc.prototype,{ye(a){this.he&&(a=this.he(a));return a},ae(a){this.Vc?.(a)},Wc:Tb,Fc:function(a){function b(){return this.Cd?vc(this.Bc.jd,{Dc:this.Oe,yc:c,Oc:this,Hc:a}):vc(this.Bc.jd,{Dc:this,yc:a})}var c=this.ye(a);if(!c)return this.ae(a),null;var d=uc(this.Bc,c);if(void 0!== +d){if(0===d.vc.count.value)return d.vc.yc=c,d.vc.Hc=a,d.clone();d=d.clone();this.ae(a);return d}d=this.Bc.we(c);d=ic[d];if(!d)return b.call(this);d=this.Bd?d.pe:d.pointerType;var e=sc(c,this.Bc,d.Bc);return e===null?b.call(this):this.Cd?vc(d.Bc.jd,{Dc:d,yc:e,Oc:this,Hc:a}):vc(d.Bc.jd,{Dc:d,yc:e})}});oa=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:(Module.INITIAL_MEMORY||209715200)/65536,maximum:32768});na();Module.noExitRuntime&&(Aa=Module.noExitRuntime);Module.printErr&&(k= +Module.printErr);Module.wasmBinary&&(ja=Module.wasmBinary);Module.addRunDependency=pb;Module.removeRunDependency=ob;Module.FS_preloadFile=tb;Module.FS_unlink=(...a)=>F.ld(...a);Module.FS_createPath=(...a)=>Lb(...a);Module.FS_createDevice=(...a)=>F.ad(...a);Module.FS_readFile=(...a)=>Kb(...a);Module.FS=F;Module.FS_createDataFile=(...a)=>sb(...a);Module.FS_createLazyFile=(...a)=>Ob(...a);var nd={711565:(a,b,c,d)=>{a=a?H(t,a):"";b=b?H(t,b):"";c=c?H(t,c):"";d=d?H(t,d):"";throw Error(a+b+c+d);},711781:(a, +b)=>{a=a?H(t,a):"";b=b?H(t,b):"";throw Error(a+b);},711891:a=>{a=a?H(t,a):"";throw Error(a);},711955:a=>{a=a?H(t,a):"";throw Error(a);},712019:a=>{a=a?H(t,a):"";throw Error(a);}},od,pd,Ac,qd,zc,fb,rd,X,Ha,Y,Z,sd,td,Ia,Ca,gf={eb:(a,b)=>C(a)(b),x:a=>{var b=new Ga(a);r[b.yc+12]==0&&(r[b.yc+12]=1,Ea--);r[b.yc+13]=0;Da.push(b);return qd(a)},J:()=>{X(0,0);var a=Da.pop();sd(a.yd);Fa=null},b:()=>Ja([]),l:a=>Ja([a]),q:(a,b)=>Ja([a,b]),ua:()=>{Da.length||B("no exception to throw");var a=Da.at(-1),b=a.yd;r[a.yc+ +13]=1;r[a.yc+12]=0;Ea++;td(b);Fa=new ma(b);throw Fa;},C:(a,b,c)=>{(new Ga(a)).init(b,c);td(a);Fa=new ma(a);Ea++;throw Fa;},bb:()=>Ea,e:a=>{Fa||=new ma(a);throw Fa;},Ca:function(a,b,c){Ka=c;try{var d=O(a);switch(b){case 0:var e=E();if(e<0)break;for(;F.streams[e];)e++;return Db(d,e).bd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=E(),d.flags=d.flags&-289793|e&289792,0;case 12:return e=E(),pa[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if(typeof F=="undefined"||f.name!=="ErrnoError")throw f; +return-f.Ec}},ub:function(a,b){try{var c=O(a),d=c.node,e=c.xc.Rc;a=e?c:d;e??=d.wc.Rc;Bb(e,63);var f=e(a);return Qb(b,f)}catch(g){if(typeof F=="undefined"||g.name!=="ErrnoError")throw g;return-g.Ec}},vb:function(a,b,c){Ka=c;try{var d=O(a);switch(b){case 21509:return d.Ac?0:-59;case 21505:if(!d.Ac)return-59;if(d.Ac.$c.Fe){a=[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];var e=E();u[e>>2]=25856;u[e+4>>2]=5;u[e+8>>2]=191;u[e+12>>2]=35387;for(var f=0;f<32;f++)r[e+f+17]=a[f]|| +0}return 0;case 21510:case 21511:case 21512:return d.Ac?0:-59;case 21506:case 21507:case 21508:if(!d.Ac)return-59;if(d.Ac.$c.Ge)for(e=E(),a=[],f=0;f<32;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.Ac)return-59;e=E();return u[e>>2]=0;case 21520:return d.Ac?-28:-59;case 21537:case 21531:return e=E(),F.Jd(d,b,e);case 21523:if(!d.Ac)return-59;d.Ac.$c.He&&(f=[24,80],e=E(),pa[e>>1]=f[0],pa[e+2>>1]=f[1]);return 0;case 21524:return d.Ac?0:-59;case 21515:return d.Ac?0:-59;default:return-28}}catch(g){if(typeof F== +"undefined"||g.name!=="ErrnoError")throw g;return-g.Ec}},sb:function(a,b){try{return a=a?H(t,a):"",Qb(b,F.stat(a,!0))}catch(c){if(typeof F=="undefined"||c.name!=="ErrnoError")throw c;return-c.Ec}},rb:function(a,b,c,d){try{b=b?H(t,b):"";var e=d&256;b=Pb(a,b,d&4096);return Qb(c,e?F.stat(b,!0):F.stat(b))}catch(f){if(typeof F=="undefined"||f.name!=="ErrnoError")throw f;return-f.Ec}},Ba:function(a,b,c,d){Ka=d;try{b=b?H(t,b):"";b=Pb(a,b);var e=d?E():0;c&64&&(e&=-19);return F.open(b,c,e).bd}catch(f){if(typeof F== +"undefined"||f.name!=="ErrnoError")throw f;return-f.Ec}},tb:function(a,b){try{return a=a?H(t,a):"",Qb(b,F.stat(a))}catch(c){if(typeof F=="undefined"||c.name!=="ErrnoError")throw c;return-c.Ec}},xb:()=>B(""),z:a=>{var b=Rb[a];delete Rb[a];var c=b.Qd,d=b.Vc,e=b.de,f=e.map(g=>g.Be).concat(e.map(g=>g.Te));Yb([a],f,g=>{var h={},l,m;for([l,m]of e.entries()){let n=g[l],p=m.od,w=m.Ae,x=g[l+e.length],y=m.Se,z=m.Ue;h[m.ue]={read:D=>n.Fc(p(w,D)),write:(D,G)=>{var J=[];y(z,D,x.Ic(J,G));Sb(J)},optional:n.optional}}return[{name:b.name, +Fc:n=>{var p={},w;for(w in h)p[w]=h[w].read(n);d(n);return p},Ic:(n,p)=>{for(var w in h)if(!(w in p||h[w].optional))throw new TypeError(`Missing field: "${w}"`);var x=c();for(w in h)h[w].write(x,p[w]);n!==null&&n.push(d,x);return x},Wc:Tb,Pc:d}]})},Ea:(a,b,c,d,e)=>{b=R(b);d=d===0n;var f=g=>g;if(d){let g=c*8;f=h=>BigInt.asUintN(g,h);e=f(e)}Q(a,{name:b,Fc:f,Ic:(g,h)=>{typeof h=="number"&&(h=BigInt(h));return h},Wc:$b(b,c,!d),Pc:null})},Bb:(a,b,c,d)=>{b=R(b);Q(a,{name:b,Fc:function(e){return!!e},Ic:function(e, +f){return f?c:d},Wc:function(e){return this.Fc(t[e])},Pc:null})},Ab:(a,b,c,d,e,f,g,h,l,m,n,p,w)=>{n=R(n);f=U(e,f);h&&=U(g,h);m&&=U(l,m);w=U(p,w);var x=lc(n);kc(x,function(){Cc(`Cannot construct ${n} due to unbound types`,[d])});Yb([a,b,c],d?[d]:[],y=>{y=y[0];if(d){var z=y.Bc;var D=z.jd}else D=fc.prototype;y=hc(n,function(...M){if(Object.getPrototypeOf(this)!==G)throw new S(`Use 'new' to construct ${n}`);if(void 0===J.Zd)throw new S(`${n} has no accessible constructor`);var Dc=J.Zd[M.length];if(void 0=== +Dc)throw new S(`Tried to invoke ctor of ${n} with invalid number of parameters (${M.length}) - expected (${Object.keys(J.Zd).toString()}) parameters instead!`);return Dc.apply(this,M)});var G=Object.create(D,{constructor:{value:y}});y.prototype=G;var J=new mc(n,y,G,w,z,f,h,m);if(J.Kc){var ha;(ha=J.Kc).Rd??(ha.Rd=[]);J.Kc.Rd.push(J)}z=new wc(n,J,!0,!1,!1);ha=new wc(n+"*",J,!1,!1,!1);D=new wc(n+" const*",J,!1,!0,!1);ic[a]={pointerType:ha,pe:D};xc(x,y);return[z,ha,D]})},da:(a,b,c,d,e,f,g,h)=>{var l= +Gc(c,d);b=R(b);b=Hc(b);f=U(e,f);Yb([],[a],m=>{function n(){Cc(`Cannot call ${p} due to unbound types`,l)}m=m[0];var p=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&m.Bc.Pe.push(b);var w=m.Bc.jd,x=w[b];void 0===x||void 0===x.Gc&&x.className!==m.name&&x.md===c-2?(n.md=c-2,n.className=m.name,w[b]=n):(jc(w,b,p),w[b].Gc[c-2]=n);Yb([],l,y=>{y=Fc(p,y,m,f,g);void 0===w[b].Gc?(y.md=c-2,w[b]=y):w[b].Gc[c-2]=y;return[]});return[]})},yb:a=>Q(a,Lc),Da:(a,b,c)=>{b=R(b);Q(a,{name:b,Fc:d=>d, +Ic:(d,e)=>e,Wc:Mc(b,c),Pc:null})},U:(a,b,c,d,e,f)=>{var g=Gc(b,c);a=R(a);a=Hc(a);e=U(d,e);kc(a,function(){Cc(`Cannot call ${a} due to unbound types`,g)},b-1);Yb([],g,h=>{xc(a,Fc(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},_:(a,b,c,d,e)=>{b=R(b);var f=h=>h;if(d===0){var g=32-8*c;f=h=>h<>>g;e=f(e)}Q(a,{name:b,Fc:f,Ic:(h,l)=>l,Wc:$b(b,c,d!==0),Pc:null})},I:(a,b,c)=>{function d(f){return new e(r.buffer,v[f+4>>2],v[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array, +Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=R(c);Q(a,{name:c,Fc:d,Wc:d},{De:!0})},D:a=>{Q(a,Nc)},zb:(a,b)=>{b=R(b);Q(a,{name:b,Fc(c){var d=(d=c+4)?H(t,d,v[c>>2],!0):"";Ac(c);return d},Ic(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e=typeof d=="string";if(!(e||ArrayBuffer.isView(d)&&d.BYTES_PER_ELEMENT==1))throw new S("Cannot pass non-string to std::string");var f=e?Xa(d):d.length;var g=od(4+f+1),h=g+4;v[g>>2]=f;e?Ya(d,t,h,f+1):t.set(d,h);c!==null&&c.push(Ac, +g);return g},Wc:Tb,Pc(c){Ac(c)}})},ta:(a,b,c)=>{c=R(c);if(b===2){var d=Pc;var e=Qc;var f=Rc}else d=Sc,e=Tc,f=Uc;Q(a,{name:c,Fc:g=>{var h=d(g+4,v[g>>2]*b,!0);Ac(g);return h},Ic:(g,h)=>{if(typeof h!="string")throw new S(`Cannot pass non-string to C++ string type ${c}`);var l=f(h),m=od(4+l+b);v[m>>2]=l/b;e(h,m+4,l+b);g!==null&&g.push(Ac,m);return m},Wc:Tb,Pc(g){Ac(g)}})},y:(a,b,c,d,e,f)=>{Rb[a]={name:R(b),Qd:U(c,d),Vc:U(e,f),de:[]}},n:(a,b,c,d,e,f,g,h,l,m)=>{Rb[a].de.push({ue:R(b),Be:c,od:U(d,e),Ae:f, +Te:g,Se:U(h,l),Ue:m})},Cb:(a,b)=>{b=R(b);Q(a,{Ke:!0,name:b,Fc:()=>{},Ic:()=>{}})},gb:()=>{Aa=!1;Vc=0},p:(a,b,c)=>{var d;[b,...d]=Yc(a,b);var e=b.Ic.bind(b),f=d.map(h=>h.Wc.bind(h));a--;var g=Array(a);b=`methodCaller<(${d.map(h=>h.name)}) => ${b.name}>`;return Xc(hc(b,(h,l,m,n)=>{for(var p=0,w=0;w>2]=T(h));return x}))}, +Fb:Kc,fa:a=>{if(!a)return T(globalThis);a=$c(a);return T(globalThis[a])},O:(a,b)=>{a=W(a);b=W(b);return T(a[b])},_a:a=>{a>9&&(V[a+1]+=1)},o:(a,b,c,d,e)=>Wc[a](b,c,d,e),ea:a=>{a=W(a);return typeof a=="string"},K:()=>T([]),F:a=>T($c(a)),ca:()=>T({}),Za:a=>{var b=W(a);Sb(b);Kc(a)},T:(a,b,c)=>{a=W(a);b=W(b);c=W(c);a[b]=c},jb:function(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);if(isNaN(a.getTime()))return 1;u[b>>2]=a.getSeconds();u[b+4>>2]=a.getMinutes();u[b+8>>2]=a.getHours(); +u[b+12>>2]=a.getDate();u[b+16>>2]=a.getMonth();u[b+20>>2]=a.getFullYear()-1900;u[b+24>>2]=a.getDay();u[b+28>>2]=(ad(a.getFullYear())?bd:cd)[a.getMonth()]+a.getDate()-1|0;u[b+36>>2]=-(a.getTimezoneOffset()*60);var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();u[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;return 0},kb:function(a){var b=(()=>{var c=new Date(u[a+20>>2]+1900,u[a+16>>2],u[a+12>>2],u[a+8>>2],u[a+4>>2],u[a>>2],0);if(isNaN(c.getTime()))return-1; +var d=u[a+32>>2],e=c.getTimezoneOffset(),f=(new Date(c.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(c.getFullYear(),0,1)).getTimezoneOffset(),h=Math.min(g,f);if(d<0)d=Number(f!=g&&h==e);else if(d>0!=(h==e)&&(f=Math.max(g,f),c.setTime(c.getTime()+((d>0?h:f)-e)*6E4),isNaN(c.getTime())))return-1;u[a+32>>2]=d;u[a+24>>2]=c.getDay();u[a+28>>2]=(ad(c.getFullYear())?bd:cd)[c.getMonth()]+c.getDate()-1|0;u[a>>2]=c.getSeconds();u[a+4>>2]=c.getMinutes();u[a+8>>2]=c.getHours();u[a+12>>2]=c.getDate();u[a+ +16>>2]=c.getMonth();u[a+20>>2]=c.getYear();return c.getTime()/1E3})();return BigInt(b)},hb:function(a,b,c,d,e,f,g){e=e<-9007199254740992||e>9007199254740992?NaN:Number(e);try{var h=O(d),l=F.gd(h,a,e,b,c),m=l.yc;u[f>>2]=l.Ud;v[g>>2]=m;return 0}catch(n){if(typeof F=="undefined"||n.name!=="ErrnoError")throw n;return-n.Ec}},ib:function(a,b,c,d,e,f){f=f<-9007199254740992||f>9007199254740992?NaN:Number(f);try{var g=O(e);if(c&2){c=f;if(!F.isFile(g.node.mode))throw new F.uc(43);d&2||F.kd(g,t.subarray(a,a+ +b),c,b,d)}}catch(h){if(typeof F=="undefined"||h.name!=="ErrnoError")throw h;return-h.Ec}},$a:(a,b)=>{dd[a]&&(clearTimeout(dd[a].id),delete dd[a]);if(!b)return 0;var c=setTimeout(()=>{delete dd[a];gd(()=>rd(a,performance.now()))},b);dd[a]={id:c,Cf:b};return 0},lb:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();v[a>>2]=Math.max(f,e)*60;u[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${g>=0?"-":"+"}${String(Math.floor(h/ +60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=0&&a<=3))return 28;A[c>>3]=BigInt(Math.round((a===0?Date.now():performance.now())*1E3*1E3));return 0},ka:(a,b,c)=>{hd.length=0;for(var d;d=t[b++];){var e=d!=105;e&=d!=112;c+=e&&c%8?4:0;hd.push(d==112?v[c>>2]:d==106?A[c>>3]:d==105?u[c>>2]:sa[c>>3]);c+=e?8:4}return nd[a](...hd)},wb:()=>Date.now(),Fa:(a,b,c)=>{var d=Error().stack.toString(),e=d.split("\n"); +d="";var f=RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),g=RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"),h;for(h of e){var l=g.exec(h);if(l?.length==5){e=l[1];var m=l[2];var n=l[3];l=l[4]}else if(l=f.exec(h),l?.length>=4)e=l[1],m=l[2],n=l[3],l=l[4]|0;else{d+=h+"\n";continue}e=="_emscripten_log"||e=="_emscripten_get_callstack"?d="":a&24&&(a&64&&(m=m.substring(m.replace(/\\/g,"/").lastIndexOf("/")+1)),d+=` at ${e} (${m}:${n}:${l})\n`)}a=d=d.replace(/\s+$/,"");return!b||c<=0?Xa(a)+1:Ya(a,t,b,c)+1},db:()=> +2147483648,cb:a=>{var b=t.length;a>>>=0;if(a>2147483648)return!1;for(var c=1;c<=4;c*=2){a:{var d=(Math.min(2147483648,Math.ceil(Math.max(a,b+2097152/c)/65536)*65536)-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);na();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Db:(a,b,c)=>jd(()=>C(a)(c),b),pb:(a,b)=>{var c=0,d=0,e;for(e of md()){var f=b+c;v[a+d>>2]=f;c+=Ya(e,t,f,Infinity)+1;d+=4}return 0},qb:(a,b)=>{var c=md();v[a>>2]=c.length;a=0;for(var d of c)a+=Xa(d)+1;v[b>>2]=a;return 0}, +Ga:a=>{la=a;fd(a)},sa:function(a){try{var b=O(a);F.close(b);return 0}catch(c){if(typeof F=="undefined"||c.name!=="ErrnoError")throw c;return c.Ec}},ob:function(a,b){try{var c=O(a);r[b]=c.Ac?2:K(c.mode)?3:(c.mode&61440)===40960?7:4;pa[b+2>>1]=0;A[b+8>>3]=BigInt(0);A[b+16>>3]=BigInt(0);return 0}catch(d){if(typeof F=="undefined"||d.name!=="ErrnoError")throw d;return d.Ec}},Aa:function(a,b,c,d){try{a:{var e=O(a);a=b;for(var f,g=b=0;g>2],l=v[a+4>>2];a+=8;var m=F.read(e,r,h,l,f);if(m< +0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(p){if(typeof F=="undefined"||p.name!=="ErrnoError")throw p;return p.Ec}},nb:function(a,b,c,d){b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 22;var e=O(a);F.Mc(e,b,c);A[d>>3]=BigInt(e.position);e.Hd&&b===0&&c===0&&(e.Hd=null);return 0}catch(f){if(typeof F=="undefined"||f.name!=="ErrnoError")throw f;return f.Ec}},ra:function(a,b,c,d){try{a:{var e=O(a);a=b;for(var f,g=b=0;g< +c;g++){var h=v[a>>2],l=v[a+4>>2];a+=8;var m=F.write(e,r,h,l,f);if(m<0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(p){if(typeof F=="undefined"||p.name!=="ErrnoError")throw p;return p.Ec}},M:ud,qa:vd,Xa:wd,S:xd,Na:yd,P:zd,$:Ad,B:Bd,Ra:Cd,g:Dd,la:Ed,c:Fd,na:Gd,Ma:Hd,j:Id,X:Jd,Ta:Kd,Ua:Ld,Va:Md,k:Nd,ya:Od,Mb:Pd,va:Qd,w:Rd,ma:Sd,Qb:Td,u:Ud,Sa:Vd,Pb:Wd,V:Xd,N:Yd,Q:Zd,bc:$d,ia:ae,Oa:be,za:ce,Ka:de,oa:ee,m:fe,Hb:ge,s:he,Wa:ie,Pa:je,ba:ke,Ha:le,ja:me,Rb:ne, +f:oe,H:pe,ga:qe,Gb:re,Nb:se,Ib:te,Ob:ue,W:ve,Xb:we,Yb:xe,h:ye,aa:ze,A:Ae,L:Be,cc:Ce,xa:De,Tb:Ee,i:Fe,Z:Ge,wa:He,Ia:Ie,Kb:Je,Ya:Ke,La:Le,pa:Me,Lb:Ne,d:Oe,Sb:Pe,Ub:Qe,Qa:Re,Vb:Se,r:Te,Zb:Ue,_b:Ve,ac:We,t:Xe,Jb:Ye,Wb:Ze,v:$e,E:af,$b:bf,Y:cf,Ja:df,R:ef,ha:ff,G:a=>a,a:oa,fb:fd,ab:(a,b)=>Ra(t.subarray(a,a+b)),Eb:function(a,b,c,d,e){var f=!1,g=l=>{f||(f=!0,clearTimeout(h),pd(a,l))};try{let l=new AbortController,m=new Uint8Array(d);m.set(t.subarray(c,c+d));var h=setTimeout(()=>l.abort(),e);fetch(b?H(t,b): +"",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:m,signal:l.signal}).then(n=>g(n.status),()=>g(0))}catch{g(0)}}};function Xd(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Bd(a){var b=Z();try{return C(a)()}catch(c){Y(b);if(!(c instanceof q))throw c;X(1,0)}}function Fd(a,b,c){var d=Z();try{return C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function ye(a,b,c,d){var e=Z();try{C(a)(b, +c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function oe(a,b,c){var d=Z();try{C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function fe(a){var b=Z();try{C(a)()}catch(c){Y(b);if(!(c instanceof q))throw c;X(1,0)}}function he(a,b){var c=Z();try{C(a)(b)}catch(d){Y(c);if(!(d instanceof q))throw d;X(1,0)}}function Fe(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Dd(a,b){var c=Z();try{return C(a)(b)}catch(d){Y(c);if(!(d instanceof +q))throw d;X(1,0)}}function $e(a,b,c,d,e,f,g,h,l){var m=Z();try{C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof q))throw n;X(1,0)}}function Id(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Nd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Ud(a,b,c,d,e,f,g){var h=Z();try{return C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Xe(a,b,c,d,e,f,g,h){var l= +Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Oe(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Gd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Te(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function vd(a,b,c){var d=Z();try{return C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1, +0)}}function Sd(a,b,c,d,e,f,g){var h=Z();try{return C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Ed(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function xd(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function ef(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Ke(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b, +c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Rd(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function af(a,b,c,d,e,f,g,h,l,m){var n=Z();try{C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function ce(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Yd(a,b,c,d,e,f,g,h,l){var m=Z();try{return C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof +q))throw n;X(1,0)}}function cf(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function Ae(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function wd(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Be(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Ce(a,b,c,d,e,f,g,h){var l= +Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function $d(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function ie(a,b,c){var d=Z();try{C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function Jd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Od(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof +q))throw h;X(1,0)}}function Md(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function We(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function bf(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Ld(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h; +X(1,0)}}function me(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function ke(a,b,c,d){var e=Z();try{C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Ve(a,b,c,d,e,f,g,h,l){var m=Z();try{C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof q))throw n;X(1,0)}}function ze(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Kd(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g); +if(!(h instanceof q))throw h;X(1,0)}}function ve(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function De(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Zd(a,b,c,d,e,f,g,h,l,m){var n=Z();try{return C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function ud(a,b){var c=Z();try{return C(a)(b)}catch(d){Y(c);if(!(d instanceof q))throw d;X(1,0)}}function pe(a,b,c, +d){var e=Z();try{C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function He(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Vd(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Cd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Ue(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p); +if(!(w instanceof q))throw w;X(1,0)}}function Re(a,b,c,d,e,f,g,h,l,m,n,p,w){var x=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w)}catch(y){Y(x);if(!(y instanceof q))throw y;X(1,0)}}function xe(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function we(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Ze(a,b,c,d,e,f,g,h,l,m){var n=Z();try{C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p; +X(1,0)}}function Se(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Qe(a,b,c,d,e,f,g,h,l,m){var n=Z();try{C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function Ee(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function ff(a,b,c,d,e,f,g,h,l,m,n,p,w,x,y,z){var D=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x,y,z)}catch(G){Y(D);if(!(G instanceof q))throw G; +X(1,0)}}function Pe(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function je(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function ne(a,b,c){var d=Z();try{C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function Td(a,b,c,d,e,f,g,h,l,m){var n=Z();try{return C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function qe(a,b,c,d,e){var f=Z();try{C(a)(b,c, +d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function ae(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function be(a,b,c,d,e,f,g,h,l,m,n,p,w){var x=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n,p,w)}catch(y){Y(x);if(!(y instanceof q))throw y;X(1,0)}}function Wd(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function ue(a,b,c,d,e,f){var g=Z(); +try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function yd(a,b,c){var d=Z();try{return C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function se(a,b,c,d,e,f,g,h,l){var m=Z();try{C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof q))throw n;X(1,0)}}function Hd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Pd(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m; +X(1,0)}}function Qd(a,b,c,d,e,f,g){var h=Z();try{return C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function zd(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Le(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Me(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Ad(a,b,c,d,e,f,g,h){var l= +Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function de(a){var b=Z();try{return C(a)()}catch(c){Y(b);if(!(c instanceof q))throw c;X(1,0);return 0n}}function Ne(a,b,c,d,e,f,g,h,l,m,n,p,w,x,y,z){var D=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x,y,z)}catch(G){Y(D);if(!(G instanceof q))throw G;X(1,0)}}function Je(a,b,c,d,e,f,g,h,l,m,n,p,w,x,y,z){var D=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x,y,z)}catch(G){Y(D);if(!(G instanceof q))throw G;X(1,0)}}function df(a,b,c,d, +e,f,g,h,l,m,n,p,w,x){var y=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x)}catch(z){Y(y);if(!(z instanceof q))throw z;X(1,0)}}function Ye(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function Ge(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Ie(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function te(a,b,c,d,e){var f=Z();try{C(a)(b, +c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function le(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function ge(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function re(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function ee(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0);return 0n}} +var hf;hf=await (async function(){var a={a:gf};ua??=Module.locateFile?Module.locateFile?Module.locateFile("BlinkIdModule.wasm",da):da+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;a=hf=(await xa(a)).instance.exports;od=a.ec;pd=Module._mbPingRequestFinished=a.fc;Ac=a.gc;qd=a.hc;zc=a.jc;fb=a.lc;rd=a.mc;X=a.nc;Ha=a.oc;Y=a.pc;Z=a.qc;sd=a.rc;td=a.sc;Ia=a.tc;Module.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=a.ic.value;Ca=a.kc;return hf}());await (async function(){var a= +Module.preRun;a&&(typeof a=="function"&&(a=[a]),za.push(...a));for(;za.length>0;)za.shift()(Module);nb&&await mb();ka||(Module.noFSInit||F.Id||F.init(),hf.dc(),F.fe=!1)}());;return Module}export default createModule; diff --git a/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.wasm new file mode 100644 index 00000000..85e368ad Binary files /dev/null and b/packages/blinkid-wasm/dist/full/simd/BlinkIdModule.wasm differ diff --git a/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.js b/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.js deleted file mode 100644 index 92412896..00000000 --- a/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.js +++ /dev/null @@ -1,142 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var h=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,m=ba&&self.name?.startsWith("em-pthread");let ca;(ca=h).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);h.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof m&&m||a||async function(b){async function c(l,n){var q;(q=h).dataFileDownloads??(q.dataFileDownloads={});try{var p=await fetch(l)}catch(x){throw Error(`Network Error: ${l}`,{e:x});}if(!p.ok)throw Error(`${p.status}: ${p.url}`);q=[];n=Number(p.headers.get("Content-Length")??n);let u=0;h.setStatus?.("Downloading data...");for(p=p.body.getReader();;){var {done:z,value:v}=await p.read();if(z)break; -q.push(v);u+=v.length;h.dataFileDownloads[l]={loaded:u,total:n};let x=0,F=0;for(var w of Object.values(h.dataFileDownloads))x+=w.loaded,F+=w.total;h.setStatus?.(`Downloading data... (${x}/${F})`)}l=new Uint8Array(q.map(x=>x.length).reduce((x,F)=>x+F,0));w=0;for(const x of q)l.set(x,w),w+=x.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkid",!0,!0);for(var n of b.files)l.addRunDependency(`fp ${n.filename}`);l.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.data"); -l.preloadResults??(l.preloadResults={});l.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.data"]={ld:!1};k||=await g;(async function(q){if(!q)throw Error("Loading data file failed.");if(q.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");q=new Uint8Array(q);for(var p of b.files){var u=p.filename;l.FS_createDataFile(u,null,q.subarray(p.start,p.end),!0,!0,!0);l.removeRunDependency(`fp ${u}`)}l.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.data")})(k)} -"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=h.locateFile?.("BlinkIdModule.data","")??"BlinkIdModule.data",f=b.remote_package_size,g,k=h.getPreloadedPackage?.(e,f);k||(g=c(e,f));if(h.calledRun)d(h);else{let l;((l=h).preRun??(l.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop", -start:0,end:103198},{filename:"/microblink/blinkid/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/microblink/blinkid/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop",start:106933,end:451389},{filename:"/microblink/blinkid/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/microblink/blinkid/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop", -start:775876,end:1044597},{filename:"/microblink/blinkid/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop",start:1044597,end:1051046},{filename:"/microblink/blinkid/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop",start:1051046,end:2476219},{filename:"/microblink/blinkid/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2476219,end:3503074},{filename:"/microblink/blinkid/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop", -start:3503074,end:3798876},{filename:"/microblink/blinkid/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:3798876,end:3805372},{filename:"/microblink/blinkid/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop",start:3805372,end:7911221},{filename:"/microblink/blinkid/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop",start:7911221,end:8036425},{filename:"/microblink/blinkid/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop", -start:8036425,end:8110870},{filename:"/microblink/blinkid/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:8110870,end:8186272},{filename:"/microblink/blinkid/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop",start:8186272,end:8849325},{filename:"/microblink/blinkid/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:8849325,end:8875623},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:8875623, -end:8896092},{filename:"/microblink/blinkid/serialized_embedder_db_1.12.bin",start:8896092,end:12173753}],remote_package_size:12173753})})();h.onAbort=function(a){r("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){r("Stacktrace: "+b.stack)}};h="undefined"!==typeof h?h:{}; -(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!h.locateFile&&(h.locateFile=function(d,e){return"BlinkIdModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),r=console.error.bind(console),ka,la,ma=!1,na;function t(){oa.buffer!=A.buffer&&pa()}var qa,ra,sa; -if(m){var ta=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.lb;if("load"===d){let e=[];self.onmessage=f=>e.push(f);sa=()=>{postMessage({lb:"loaded"});for(let f of e)a(f);self.onmessage=a};for(const f of c.Dc)if(!h[f]||h[f].proxy)h[f]=(...g)=>{postMessage({lb:"callHandler",Cc:f,qc:g})},"print"==f&&(ja=h[f]),"printErr"==f&&(r=h[f]);oa=c.bd;pa();la=c.cd;ua();va()}else if("run"===d){wa(c.hb);xa(c.hb,0,0,1,0,0);ya();za(c.hb);ta||(Ba(),ta=!0);try{Ca(c.Zc,c.Qb)}catch(e){if("unwind"!= -e)throw e;}}else"setimmediate"!==c.target&&("checkMailbox"===d?ta&&Da():d&&(r(`worker: received unknown command ${d}`),r(c)))}catch(e){throw Ea(),e;}}self.onmessage=a}var A,B,C,Fa,E,H,Ga,Ha,K,Ia,Ja=!1;function pa(){var a=oa.buffer;A=new Int8Array(a);C=new Int16Array(a);B=new Uint8Array(a);Fa=new Uint16Array(a);E=new Int32Array(a);H=new Uint32Array(a);Ga=new Float32Array(a);Ha=new Float64Array(a);K=new BigInt64Array(a);Ia=new BigUint64Array(a)}var oa; -function Ka(){Ja=!0;if(m)sa();else{if(!h.noFSInit&&!La){var a,b,c;La=!0;a??=h.stdin;b??=h.stdout;c??=h.stderr;a?Ma("/dev","stdin",a):Na("/dev/tty","/dev/stdin");b?Ma("/dev","stdout",null,b):Na("/dev/tty","/dev/stdout");c?Ma("/dev","stderr",null,c):Na("/dev/tty1","/dev/stderr");Oa("/dev/stdin",0);Oa("/dev/stdout",1);Oa("/dev/stderr",1)}Pa.ra();Qa=!1}} -function Ra(a){h.onAbort?.(a);a="Aborted("+a+")";r(a);ma=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ra?.(a);throw a;}var Sa;async function Ta(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==Sa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a} -async function Va(a,b){try{var c=await Ta(a);return await WebAssembly.instantiate(c,b)}catch(d){r(`failed to asynchronously prepare wasm: ${d}`),Ra(d)}}async function Wa(a){var b=Sa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){r(`wasm streaming compile failed: ${d}`),r("falling back to ArrayBuffer instantiation")}return Va(b,a)} -function Xa(){Ya={F:Za,N:$a,x:ab,aa:bb,ba:cb,_:db,Z:eb,y:fb,$:gb,fa:hb,e:ib,B:jb,C:kb,oa:lb,n:mb,pa:nb,A:ob,k:pb,m:qb,h:rb,g:sb,qa:tb,t:ub,f:vb,b:wb,D:xb,W:yb,L:zb,P:Ab,H:Bb,u:Cb,V:za,da:Db,d:Eb,ja:Fb,ka:Gb,i:Hb,O:Ib,c:Jb,na:Kb,ma:Lb,la:Mb,E:Nb,j:Ob,Q:Pb,R:Qb,I:Rb,S:Sb,o:Tb,T:Ub,p:Vb,v:Wb,ea:Xb,ca:Yb,ga:Zb,M:$b,l:ac,z:bc,K:cc,ha:dc,X:ec,Y:fc,s:gc,r:hc,w:ic,U:jc,q:kc,ia:lc,a:oa,G:mc,J:nc};return{a:Ya}} -async function ua(){function a(d,e){Pa=d.exports;oc.push(Pa.xa);d=Pa;pc=d.sa;Ba=d.ta;qc=d.ua;rc=d.va;sc=d.wa;tc=d.ya;xa=d.Aa;Ea=d.Ba;uc=d.Ca;vc=d.Da;wc=d.Ea;xc=d.Fa;yc=d.Ga;zc=d.Ha;Ac=d.Ia;Bc=d.Ja;Cc=d.Ka;Dc=d.za;la=e;return Pa}var b=Xa();if(h.instantiateWasm)return new Promise(d=>{h.instantiateWasm(b,(e,f)=>{d(a(e,f))})});if(m){var c=new WebAssembly.Instance(la,Xa());return a(c,la)}Sa??=h.locateFile?h.locateFile?h.locateFile("BlinkIdModule.wasm",fa):fa+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm", -import.meta.url)).href;return function(d){return a(d.instance,d.module)}(await Wa(b))}class Ec{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Fc=a=>{a.terminate();a.onmessage=()=>{}},Gc=a=>{for(;0{Ic--;h.monitorRunDependencies?.(Ic);if(0==Ic&&Jc){var a=Jc;Jc=null;a()}},Lc=()=>{Ic++;h.monitorRunDependencies?.(Ic)},Rc=a=>{0==Mc.length&&(Nc(),Oc(Mc[0]));var b=Mc.pop();if(!b)return 6;Pc.push(b);Qc[a.hb]=b;b.hb=a.hb;b.postMessage({lb:"run",Zc:a.Yc,Qb:a.Qb,hb:a.hb},a.pc);return 0},L=0,N=(a,b,...c)=>{for(var d=2*c.length,e=Cc(),f=Bc(8*d),g=f>>3,k=0;k{na=a;if(m)throw Tc(a),"unwind";mc(a)},Mc=[],Pc=[],oc=[],Qc={}; -function Uc(){for(var a=navigator.hardwareConcurrency;a--;)Nc();Hc.push(async()=>{var b=Vc();Lc("loading-workers");await b;Kc("loading-workers")})}var Wc=a=>{var b=a.hb;delete Qc[b];Mc.push(a);Pc.splice(Pc.indexOf(a),1);a.hb=0;vc(b)};function ya(){oc.forEach(a=>a())} -var Oc=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.lb;if(g.Nb&&g.Nb!=qc()){var k=Qc[g.Nb];k?k.postMessage(g,g.pc):r(`Internal error! Worker sent a message "${f}" to target pthread ${g.Nb}, but that thread no longer exists!`)}else if("checkMailbox"===f)Da();else if("spawnThread"===f)Rc(g);else if("cleanupThread"===f)Xc(()=>{Wc(Qc[g.$c])});else if("loaded"===f)a.loaded=!0,b(a);else if("setimmediate"===g.target)a.postMessage(g);else if("callHandler"===f)h[g.Cc](...g.qc);else f&&r(`worker sent an unknown command ${f}`)}; -a.onerror=f=>{r(`${"worker sent an error!"} ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onExit","onAbort","print","printErr"],e;for(e of d)h.propertyIsEnumerable(e)&&c.push(e);a.postMessage({lb:"load",Dc:c,bd:oa,cd:la})});async function Vc(){if(!m)return Promise.all(Mc.map(Oc))} -function Nc(){if(h.mainScriptUrlOrBlob){var a=h.mainScriptUrlOrBlob;"string"!=typeof a&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkIdModule.js",import.meta.url),{type:"module",name:"em-pthread"});Mc.push(a)}var Yc=[];function wa(a){var b=(t(),H)[a+52>>2];a=(t(),H)[a+56>>2];zc(b,b-a);Ac(b)}var Zc=[],$c=a=>{var b=Zc[a];b||(Zc[a]=b=Dc.get(a));return b},Ca=(a,b)=>{Sc=L=0;a=$c(a)(b);Sc||0$c(a)(b); -function ad(a,b,c,d){return m?N(2,1,a,b,c,d):$a(a,b,c,d)} -var bc=()=>!!globalThis.SharedArrayBuffer,$a=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(m&&0===e.length)return ad(a,b,c,d);a={Yc:c,hb:a,Qb:d,pc:e};return m?(a.lb="spawnThread",postMessage(a,e),0):Rc(a)},cd=()=>{var a=(t(),E)[+bd>>2];bd+=4;return a},dd=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},ed=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=dd(a.split("/").filter(d=> -!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},fd=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},gd=()=>a=>a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),hd=a=>{(hd=gd())(a)},jd=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b; -c="/"===c.charAt(0)}b=dd(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},kd=globalThis.TextDecoder&&new TextDecoder,ld=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},md=(a,b=0,c,d)=>{c=ld(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},nd=[],od=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},pd=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>= -g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},qd=a=>{var b=Array(od(a)+1);a=pd(a,b,0,b.length);b.length=a;return b},rd=[];function sd(a,b){rd[a]={input:[],output:[],nb:b};td(a,ud)} -var ud={open(a){var b=rd[a.node.Ab];if(!b)throw new O(43);a.Qa=b;a.seekable=!1},close(a){a.Qa.nb.Fb(a.Qa)},Fb(a){a.Qa.nb.Fb(a.Qa)},read(a,b,c,d){if(!a.Qa||!a.Qa.nb.jc)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=tc(65536,a);b&&(t(),B).fill(0,b,b+a);return b},P={gb:null,mb(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.gb||(P.gb={dir:{node:{eb:P.Oa.eb,kb:P.Oa.kb,wb:P.Oa.wb,Ib:P.Oa.Ib,nc:P.Oa.nc,Ob:P.Oa.Ob,oc:P.Oa.oc,Yb:P.Oa.Yb,Mb:P.Oa.Mb},stream:{fb:P.Ma.fb}}, -file:{node:{eb:P.Oa.eb,kb:P.Oa.kb},stream:{fb:P.Ma.fb,read:P.Ma.read,write:P.Ma.write,xb:P.Ma.xb,Jb:P.Ma.Jb}},link:{node:{eb:P.Oa.eb,kb:P.Oa.kb,Bb:P.Oa.Bb},stream:{}},cc:{node:{eb:P.Oa.eb,kb:P.Oa.kb},stream:yd}});c=zd(a,b,c,d);Q(c.mode)?(c.Oa=P.gb.dir.node,c.Ma=P.gb.dir.stream,c.Na={}):32768===(c.mode&61440)?(c.Oa=P.gb.file.node,c.Ma=P.gb.file.stream,c.Ta=0,c.Na=null):40960===(c.mode&61440)?(c.Oa=P.gb.link.node,c.Ma=P.gb.link.stream):8192===(c.mode&61440)&&(c.Oa=P.gb.cc.node,c.Ma=P.gb.cc.stream); -c.pb=c.ab=c.$a=Date.now();a&&(a.Na[b]=c,a.pb=a.ab=a.$a=c.pb);return c},md(a){return a.Na?a.Na.subarray?a.Na.subarray(0,a.Ta):new Uint8Array(a.Na):new Uint8Array(0)},Oa:{eb(a){var b={};b.uc=8192===(a.mode&61440)?a.id:1;b.Fc=a.id;b.mode=a.mode;b.Oc=1;b.uid=0;b.Bc=0;b.Ab=a.Ab;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.Ta:40960===(a.mode&61440)?a.link.length:0;b.pb=new Date(a.pb);b.ab=new Date(a.ab);b.$a=new Date(a.$a);b.rc=4096;b.sc=Math.ceil(b.size/b.rc);return b},kb(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.Ta!=b&&(0==b?(a.Na=null,a.Ta=0):(c=a.Na,a.Na=new Uint8Array(b),c&&a.Na.set(c.subarray(0,Math.min(b,a.Ta))),a.Ta=b)))},wb(){P.Rb||(P.Rb=new O(44),P.Rb.stack="");throw P.Rb;},Ib(a,b,c,d){return P.createNode(a,b,c,d)},nc(a,b,c){try{var d=Ad(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.Na)throw new O(55);Bd(d)}delete a.parent.Na[a.name];b.Na[c]=a;a.name=c;b.$a=b.ab=a.parent.$a=a.parent.ab=Date.now()},Ob(a, -b){delete a.Na[b];a.$a=a.ab=Date.now()},oc(a,b){var c=Ad(a,b),d;for(d in c.Na)throw new O(55);delete a.Na[b];a.$a=a.ab=Date.now()},Yb(a){return[".","..",...Object.keys(a.Na)]},Mb(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},Bb(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},Ma:{read(a,b,c,d,e){var f=a.node.Na;if(e>=a.node.Ta)return 0;a=Math.min(a.node.Ta-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.Na,a.Na=new Uint8Array(f),0b)throw new O(28);return b},xb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.Na;if(e&2||!a||a.buffer!==(t(),A).buffer){d=!0;e=xd(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},Dd=async a=>{a=await ha(a);return new Uint8Array(a)},Ed=[],Fd=async(a,b)=>{"undefined"!=typeof Browser&&Browser.nd();for(var c of Ed)if(c.canHandle(b))return c.handle(a,b);return a},Gd=null,Hd={},Id=[],Jd=1,Kd=null,La=!1,Qa=!0,Ld={},O=class{name="ErrnoError";constructor(a){this.Ua=a}},Md=class{Lb={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.Lb.flags}set flags(a){this.Lb.flags= -a}get position(){return this.Lb.position}set position(a){this.Lb.position=a}},Nd=class{Oa={};Ma={};Kb=365;Pb=146;yb=null;constructor(a,b,c,d){a||=this;this.parent=a;this.mb=a.mb;this.id=Jd++;this.name=b;this.mode=c;this.Ab=d;this.pb=this.ab=this.$a=Date.now()}get read(){return(this.mode&this.Kb)===this.Kb}set read(a){a?this.mode|=this.Kb:this.mode&=~this.Kb}get write(){return(this.mode&this.Pb)===this.Pb}set write(a){a?this.mode|=this.Pb:this.mode&=~this.Pb}get Lc(){return Q(this.mode)}get Kc(){return 8192=== -(this.mode&61440)}}; -function Od(a,b={}){if(!a)throw new O(44);b.Sb??(b.Sb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(k=>!!k);for(var d=Gd,e="/",f=0;f>>0)%Kd.length} -function Bd(a){var b=Qd(a.parent.id,a.name);if(Kd[b]===a)Kd[b]=a.sb;else for(b=Kd[b];b;){if(b.sb===a){b.sb=a.sb;break}b=b.sb}}function Ad(a,b){var c=Q(a.mode)?(c=Rd(a,"x"))?c:a.Oa.wb?0:2:54;if(c)throw new O(c);for(c=Kd[Qd(a.id,b)];c;c=c.sb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Oa.wb(a,b)}function zd(a,b,c,d){a=new Nd(a,b,c,d);b=Qd(a.parent.id,a.name);a.sb=Kd[b];return Kd[b]=a}function Q(a){return 16384===(a&61440)} -function Sd(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Rd(a,b){if(Qa)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Td(a,b){if(!Q(a.mode))return 54;try{return Ad(a,b),20}catch(c){}return Rd(a,"wx")}function Ud(a){if(!a)throw new O(63);return a}function R(a){a=Id[a];if(!a)throw new O(8);return a} -function Vd(a,b=-1){a=Object.assign(new Md,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!Id[b])break a;throw new O(33);}a.qb=b;return Id[b]=a}function Wd(a,b=-1){a=Vd(a,b);a.Ma?.kd?.(a);return a}function Xd(a,b){var c=null?.Ma.kb,d=c?null:a;c??=a.Oa.kb;Ud(c);c(d,b)}var yd={open(a){a.Ma=Hd[a.node.Ab].Ma;a.Ma.open?.(a)},fb(){throw new O(70);}};function td(a,b){Hd[a]={Ma:b}} -function Yd(a,b){var c="/"===b;if(c&&Gd)throw new O(10);if(!c&&b){var d=Od(b,{Sb:!1});b=d.path;d=d.node;if(d.yb)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,od:{},lc:b,Nc:[]};a=a.mb(b);a.mb=b;b.root=a;c?Gd=a:d&&(d.yb=b,d.mb&&d.mb.Nc.push(b))}function Zd(a,b,c){var d=Od(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Td(d,a);if(e)throw new O(e);if(!d.Oa.Ib)throw new O(63);return d.Oa.Ib(d,a,b,c)} -function $d(a,b=438){return Zd(a,b&4095|32768,0)}function S(a){return Zd(a,16895,0)}function ae(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Zd(a,b|8192,c)}function Na(a,b){if(!jd(a))throw new O(44);var c=Od(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Td(c,b);if(d)throw new O(d);if(!c.Oa.Mb)throw new O(63);c.Oa.Mb(c,b,a)} -function be(a){var b=Od(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=Ad(b,a);a:{try{var d=Ad(b,a)}catch(f){d=f.Ua;break a}var e=Rd(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.Oa.Ob)throw new O(63);if(c.yb)throw new O(10);b.Oa.Ob(b,a);Bd(c)}function ce(a,b){a=Od(a,{Eb:!b}).node;return Ud(a.Oa.eb)(a)}function de(a,b){a="string"==typeof a?Od(a,{Eb:!0}).node:a;Xd(a,{mode:b&4095|a.mode&-4096,$a:Date.now(),jd:void 0})} -function Oa(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Od(a,{Eb:!(b&131072),Pc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Zd(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Sd(b)||b&576)?31:Rd(d,Sd(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Od(e,{Eb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Rd(e,"w");if(g)throw new O(g);Xd(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Vd({node:d,path:Pd(d),flags:b,seekable:!0,position:0,Ma:d.Ma,ad:[],error:!1});e.Ma.open&&e.Ma.open(e);f&&de(d,c&511);!h.logReadFiles||b&1||a in Ld||(Ld[a]=1);return e} -function ee(a){if(null===a.qb)throw new O(8);a.Tb&&(a.Tb=null);try{a.Ma.close&&a.Ma.close(a)}catch(b){throw b;}finally{Id[a.qb]=null}a.qb=null}function fe(a,b,c){if(null===a.qb)throw new O(8);if(!a.seekable||!a.Ma.fb)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.Ma.fb(a,b,c);a.ad=[]} -function ge(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.qb)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.Ma.write)throw new O(28);a.seekable&&a.flags&1024&&fe(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.Ma.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function he(a,b){a="string"==typeof a?a:Pd(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=ed(a+"/"+c);try{S(d)}catch(e){if(20!=e.Ua)throw e;}a=d}}return d}function ie(a,b,c,d){a=ed(("string"==typeof a?a:Pd(a))+"/"+b);return $d(a,Cd(c,d))} -function je(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Pd(a),g=b?ed(a+"/"+b):a);a=Cd(d,e);g=$d(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=p.length)return 0;v=Math.min(p.length-w,v);if(p.slice)for(var x=0;xthis.length-1||0>p)){var u=p%this.dc;return this.vb(p/this.dc|0)[u]}}Tc(p){this.vb=p}bc(){var p=new XMLHttpRequest;p.open("HEAD",c,!1);p.send(null);200<=p.status&&300>p.status||304===p.status||Ra("Couldn't load "+c+". Status: "+p.status);var u=Number(p.getResponseHeader("Content-length")), -z,v=(z=p.getResponseHeader("Accept-Ranges"))&&"bytes"===z;p=(z=p.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;v||(w=u);var x=this;x.Tc(F=>{var G=F*w,M=(F+1)*w-1;M=Math.min(M,u-1);if("undefined"==typeof x.Db[F]){var y=x.Db;G>M&&Ra("invalid range ("+G+", "+M+") or no bytes requested!");M>u-1&&Ra("only "+u+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);u!==w&&J.setRequestHeader("Range","bytes="+G+"-"+M);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||Ra("Couldn't load "+c+". Status: "+J.status);G=void 0!==J.response?new Uint8Array(J.response||[]):qd(J.responseText||"");y[F]=G}"undefined"==typeof x.Db[F]&&Ra("doXHR failed!");return x.Db[F]});if(p||!u)w=u=1,w=u=this.vb(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.ac=u;this.$b=w;this.Vb=!0}get length(){this.Vb||this.bc();return this.ac}get dc(){this.Vb|| -this.bc();return this.$b}}if(globalThis.XMLHttpRequest){ba||Ra("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var k=new g;var l=void 0}else l=c,k=void 0;var n=ie(a,b,d,e);k?n.Na=k:l&&(n.Na=null,n.url=l);Object.defineProperties(n,{Ta:{get:function(){return this.Na.length}}});var q={};Object.keys(n.Ma).forEach(p=>{var u=n.Ma[p];q[p]=(...z)=>{ke(n);return u(...z)}});q.read=(p,u,z,v,w)=>{ke(n);return f(p,u,z,v,w)};q.xb=(p,u,z)=>{ke(n); -var v=xd(u);if(!v)throw new O(48);f(p,(t(),A),v,u,z);return{Pa:v,ob:!0}};n.Ma=q;return n}var T={},U=(a,b,c)=>a?md((t(),B),a,b,c):"";function me(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":R(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function ne(a,b){(t(),H)[a>>2]=b.uc;(t(),H)[a+4>>2]=b.mode;(t(),H)[a+8>>2]=b.Oc;(t(),H)[a+12>>2]=b.uid;(t(),H)[a+16>>2]=b.Bc;(t(),H)[a+20>>2]=b.Ab;(t(),K)[a+24>>3]=BigInt(b.size);(t(),E)[a+32>>2]=4096;(t(),E)[a+36>>2]=b.sc;var c=b.pb.getTime(),d=b.ab.getTime(),e=b.$a.getTime();(t(),K)[a+40>>3]=BigInt(Math.floor(c/1E3));(t(),H)[a+48>>2]=c%1E3*1E6;(t(),K)[a+56>>3]=BigInt(Math.floor(d/1E3));(t(),H)[a+64>>2]=d%1E3*1E6;(t(),K)[a+72>>3]=BigInt(Math.floor(e/1E3));(t(),H)[a+80>>2]=e%1E3*1E6;(t(),K)[a+88>> -3]=BigInt(b.Fc);return 0}var bd=void 0;function ab(a,b,c){if(m)return N(3,1,a,b,c);bd=c;try{var d=R(a);switch(b){case 0:var e=cd();if(0>e)break;for(;Id[e];)e++;return Wd(d,e).qb;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=cd(),d.flags|=e,0;case 12:return e=cd(),(t(),C)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ua}} -function bb(a,b){if(m)return N(4,1,a,b);try{var c=R(a),d=c.node,e=c.Ma.eb;a=e?c:d;e??=d.Oa.eb;Ud(e);var f=e(a);return ne(b,f)}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ua}} -function cb(a,b,c){if(m)return N(5,1,a,b,c);bd=c;try{var d=R(a);switch(b){case 21509:return d.Qa?0:-59;case 21505:if(!d.Qa)return-59;if(d.Qa.nb.Hc){a=[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];var e=cd();(t(),E)[e>>2]=25856;(t(),E)[e+4>>2]=5;(t(),E)[e+8>>2]=191;(t(),E)[e+12>>2]=35387;for(var f=0;32>f;f++)(t(),A)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Qa?0:-59;case 21506:case 21507:case 21508:if(!d.Qa)return-59;if(d.Qa.nb.Ic)for(e=cd(), -t(),t(),t(),t(),a=[],f=0;32>f;f++)a.push((t(),A)[e+f+17]);return 0;case 21519:if(!d.Qa)return-59;e=cd();return(t(),E)[e>>2]=0;case 21520:return d.Qa?-28:-59;case 21537:case 21531:e=cd();if(!d.Ma.Gc)throw new O(59);return d.Ma.Gc(d,b,e);case 21523:if(!d.Qa)return-59;d.Qa.nb.Jc&&(f=[24,80],e=cd(),(t(),C)[e>>1]=f[0],(t(),C)[e+2>>1]=f[1]);return 0;case 21524:return d.Qa?0:-59;case 21515:return d.Qa?0:-59;default:return-28}}catch(g){if("undefined"==typeof T||"ErrnoError"!==g.name)throw g;return-g.Ua}} -function db(a,b){if(m)return N(6,1,a,b);try{return a=U(a),ne(b,ce(a,!0))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ua}}function eb(a,b,c,d){if(m)return N(7,1,a,b,c,d);try{b=U(b);var e=d&256;b=me(a,b,d&4096);return ne(c,e?ce(b,!0):ce(b))}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ua}} -function fb(a,b,c,d){if(m)return N(8,1,a,b,c,d);bd=d;try{b=U(b);b=me(a,b);var e=d?cd():0;return Oa(b,c,e).qb}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return-f.Ua}}function gb(a,b){if(m)return N(9,1,a,b);try{return a=U(a),ne(b,ce(a))}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return-c.Ua}}var hb=()=>Ra(""),oe={},pe=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function qe(a){return this.Va((t(),H)[a>>2])} -var re={},se={},te={},ue=class extends Error{constructor(a){super(a);this.name="InternalError"}},ve=(a,b,c)=>{function d(k){k=c(k);if(k.length!==a.length)throw new ue("Mismatched type converter count");for(var l=0;lte[k]=b);var e=Array(b.length),f=[],g=0;b.forEach((k,l)=>{se.hasOwnProperty(k)?e[l]=se[k]:(f.push(k),re.hasOwnProperty(k)||(re[k]=[]),re[k].push(()=>{e[l]=se[k];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},ib=a=>{var b=oe[a];delete oe[a];var c= -b.Xb,d=b.ib,e=b.hc,f=e.map(g=>g.Ac).concat(e.map(g=>g.Vc));ve([a],f,g=>{var k={};e.forEach((l,n)=>{var q=g[n],p=l.vb,u=l.zc,z=g[n+e.length],v=l.Uc,w=l.Wc;k[l.wc]={read:x=>q.Va(p(u,x)),write:(x,F)=>{var G=[];v(w,x,z.Ya(G,F));pe(G)},optional:g[n].optional}});return[{name:b.name,Va:l=>{var n={},q;for(q in k)n[q]=k[q].read(l);d(l);return n},Ya:(l,n)=>{for(var q in k)if(!(q in n||k[q].optional))throw new TypeError(`Missing field: "${q}"`);var p=c();for(q in k)k[q].write(p,n[q]);null!==l&&l.push(d,p);return p}, -jb:qe,cb:d}]})},W=a=>{for(var b="";;){var c=(t(),B)[a++];if(!c)return b;b+=String.fromCharCode(c)}},X=class extends Error{constructor(a){super(a);this.name="BindingError"}};function we(a,b,c={}){var d=b.name;if(!a)throw new X(`type "${d}" must have a positive integer typeid pointer`);if(se.hasOwnProperty(a)){if(c.Ec)return;throw new X(`Cannot register type '${d}' twice`);}se[a]=b;delete te[a];re.hasOwnProperty(a)&&(b=re[a],delete re[a],b.forEach(e=>e()))}function V(a,b,c={}){return we(a,b,c)} -var xe=(a,b,c)=>{switch(b){case 1:return c?d=>(t(),A)[d]:d=>(t(),B)[d];case 2:return c?d=>(t(),C)[d>>1]:d=>(t(),Fa)[d>>1];case 4:return c?d=>(t(),E)[d>>2]:d=>(t(),H)[d>>2];case 8:return c?d=>(t(),K)[d>>3]:d=>(t(),Ia)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=(a,b,c,d,e)=>{b=W(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=k=>BigInt.asUintN(g,k);e=f(e)}V(a,{name:b,Va:f,Ya:(g,k)=>{"number"==typeof k&&(k=BigInt(k));return k},jb:xe(b,c,!d),cb:null})},kb=(a,b,c,d)=>{b=W(b); -V(a,{name:b,Va:function(e){return!!e},Ya:function(e,f){return f?c:d},jb:function(e){return this.Va((t(),B)[e])},cb:null})},ye=a=>{throw new X(a.La.Sa.Ra.name+" instance already deleted");},ze=!1,Ae=()=>{},Be=a=>{if(!globalThis.FinalizationRegistry)return Be=b=>b,a;ze=new FinalizationRegistry(b=>{b=b.La;--b.count.value;0===b.count.value&&(b.Xa?b.bb.ib(b.Xa):b.Sa.Ra.ib(b.Pa))});Be=b=>{var c=b.La;c.Xa&&ze.register(b,{La:c},b);return b};Ae=b=>{ze.unregister(b)};return Be(a)},Ce=[];function De(){} -var Ee=(a,b)=>Object.defineProperty(b,"name",{value:a}),Fe={},Ge=(a,b,c)=>{if(void 0===a[b].Wa){var d=a[b];a[b]=function(...e){if(!a[b].Wa.hasOwnProperty(e.length))throw new X(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Wa})!`);return a[b].Wa[e.length].apply(this,e)};a[b].Wa=[];a[b].Wa[d.tb]=d}},He=(a,b,c)=>{if(h.hasOwnProperty(a)){if(void 0===c||void 0!==h[a].Wa&&void 0!==h[a].Wa[c])throw new X(`Cannot register public name '${a}' twice`);Ge(h, -a,a);if(h[a].Wa.hasOwnProperty(c))throw new X(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);h[a].Wa[c]=b}else h[a]=b,h[a].tb=c},Ie=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Je(a,b,c,d,e,f,g,k){this.name=a;this.constructor=b;this.rb=c;this.ib=d;this.Za=e;this.xc=f;this.Cb=g;this.vc=k;this.Rc=[]} -var Ke=(a,b,c)=>{for(;b!==c;){if(!b.Cb)throw new X(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.Cb(a);b=b.Za}return a},Le=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Me(a,b){if(null===b){if(this.Ub)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.La)throw new X(`Cannot pass "${Le(b)}" as a ${this.name}`);if(!b.La.Pa)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);return Ke(b.La.Pa,b.La.Sa.Ra,this.Ra)} -function Ne(a,b){if(null===b){if(this.Ub)throw new X(`null is not a valid ${this.name}`);if(this.Hb){var c=this.Xb();null!==a&&a.push(this.ib,c);return c}return 0}if(!b||!b.La)throw new X(`Cannot pass "${Le(b)}" as a ${this.name}`);if(!b.La.Pa)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.Gb&&b.La.Sa.Gb)throw new X(`Cannot convert argument of type ${b.La.bb?b.La.bb.name:b.La.Sa.name} to parameter type ${this.name}`);c=Ke(b.La.Pa,b.La.Sa.Ra,this.Ra);if(this.Hb){if(void 0=== -b.La.Xa)throw new X("Passing raw pointer to smart pointer is illegal");switch(this.Xc){case 0:if(b.La.bb===this)c=b.La.Xa;else throw new X(`Cannot convert argument of type ${b.La.bb?b.La.bb.name:b.La.Sa.name} to parameter type ${this.name}`);break;case 1:c=b.La.Xa;break;case 2:if(b.La.bb===this)c=b.La.Xa;else{var d=b.clone();c=this.Sc(c,Oe(()=>d["delete"]()));null!==a&&a.push(this.ib,c)}break;default:throw new X("Unsupporting sharing policy");}}return c} -function Pe(a,b){if(null===b){if(this.Ub)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.La)throw new X(`Cannot pass "${Le(b)}" as a ${this.name}`);if(!b.La.Pa)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.La.Sa.Gb)throw new X(`Cannot convert argument of type ${b.La.Sa.name} to parameter type ${this.name}`);return Ke(b.La.Pa,b.La.Sa.Ra,this.Ra)} -var Qe=(a,b,c)=>{if(b===c)return a;if(void 0===c.Za)return null;a=Qe(a,b,c.Za);return null===a?null:c.vc(a)},Re={},Se=(a,b)=>{if(void 0===b)throw new X("ptr should not be undefined");for(;a.Za;)b=a.Cb(b),a=a.Za;return Re[b]},Te=(a,b)=>{if(!b.Sa||!b.Pa)throw new ue("makeClassHandle requires ptr and ptrType");if(!!b.bb!==!!b.Xa)throw new ue("Both smartPtrType and smartPtr must be specified");b.count={value:1};return Be(Object.create(a,{La:{value:b,writable:!0}}))}; -function Ue(a,b,c,d,e,f,g,k,l,n,q){this.name=a;this.Ra=b;this.Ub=c;this.Gb=d;this.Hb=e;this.Qc=f;this.Xc=g;this.mc=k;this.Xb=l;this.Sc=n;this.ib=q;e||void 0!==b.Za?this.Ya=Ne:(this.Ya=d?Me:Pe,this.cb=null)}var Ve=(a,b,c)=>{if(!h.hasOwnProperty(a))throw new ue("Replacing nonexistent public symbol");void 0!==h[a].Wa&&void 0!==c?h[a].Wa[c]=b:(h[a]=b,h[a].tb=c)},We=(a,b)=>{a=W(a);var c=$c(b);if("function"!=typeof c)throw new X(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Xe extends Error{} -var Ye=a=>{a=pc(a);var b=W(a);sc(a);return b},Ze=(a,b)=>{function c(f){e[f]||se[f]||(te[f]?te[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Xe(`${a}: `+d.map(Ye).join([", "]));},lb=(a,b,c,d,e,f,g,k,l,n,q,p,u)=>{q=W(q);f=We(e,f);k&&=We(g,k);n&&=We(l,n);u=We(p,u);var z=Ie(q);He(z,function(){Ze(`Cannot construct ${q} due to unbound types`,[d])});ve([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var w=v.Ra;var x=w.rb}else x=De.prototype;v=Ee(q,function(...y){if(Object.getPrototypeOf(this)!==F)throw new X(`Use 'new' to construct ${q}`); -if(void 0===G.ec)throw new X(`${q} has no accessible constructor`);var J=G.ec[y.length];if(void 0===J)throw new X(`Tried to invoke ctor of ${q} with invalid number of parameters (${y.length}) - expected (${Object.keys(G.ec).toString()}) parameters instead!`);return J.apply(this,y)});var F=Object.create(x,{constructor:{value:v}});v.prototype=F;var G=new Je(q,v,F,u,w,f,k,n);if(G.Za){var M;(M=G.Za).Zb??(M.Zb=[]);G.Za.Zb.push(G)}w=new Ue(q,G,!0,!1,!1);M=new Ue(q+"*",G,!1,!1,!1);x=new Ue(q+" const*",G, -!1,!0,!1);Fe[a]={pointerType:M,tc:x};Ve(z,v);return[w,M,x]})};function $e(a){for(var b=1;bf)throw new X("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=$e(b),l=!b[0].Mc,n=f-2,q=Array(n),p=[],u=[];return Ee(a,function(...z){u.length=0;p.length=g?2:1;p[0]=e;if(g){var v=b[1].Ya(u,this);p[1]=v}for(var w=0;w{for(var c=[],d=0;d>2]);return c},cf=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},mb=(a,b,c,d,e,f,g,k)=>{var l=bf(c,d);b=W(b);b=cf(b);f=We(e,f);ve([],[a],n=>{function q(){Ze(`Cannot call ${p} due to unbound types`,l)}n=n[0];var p=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);k&&n.Ra.Rc.push(b);var u=n.Ra.rb,z=u[b];void 0===z||void 0===z.Wa&&z.className!==n.name&&z.tb===c-2?(q.tb=c-2,q.className=n.name,u[b]=q):(Ge(u, -b,p),u[b].Wa[c-2]=q);ve([],l,v=>{v=af(p,v,n,f,g);void 0===u[b].Wa?(v.tb=c-2,u[b]=v):u[b].Wa[c-2]=v;return[]});return[]})},df=[],ef=[0,1,,1,null,1,!0,1,!1,1],Fb=a=>{9{if(!a)throw new X(`Cannot use deleted val. handle = ${a}`);return ef[a]},Oe=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=df.pop()||ef.length;ef[b]=a;ef[b+1]=1;return b}},gf={name:"emscripten::val",Va:a=>{var b=ff(a);Fb(a);return b}, -Ya:(a,b)=>Oe(b),jb:qe,cb:null},nb=a=>V(a,gf),hf=(a,b)=>{switch(b){case 4:return function(c){return this.Va((t(),Ga)[c>>2])};case 8:return function(c){return this.Va((t(),Ha)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ob=(a,b,c)=>{b=W(b);V(a,{name:b,Va:d=>d,Ya:(d,e)=>e,jb:hf(b,c),cb:null})},pb=(a,b,c,d,e,f)=>{var g=bf(b,c);a=W(a);a=cf(a);e=We(d,e);He(a,function(){Ze(`Cannot call ${a} due to unbound types`,g)},b-1);ve([],g,k=>{Ve(a,af(a,[k[0],null].concat(k.slice(1)), -null,e,f),b-1);return[]})},qb=(a,b,c,d,e)=>{b=W(b);let f=k=>k;if(0===d){var g=32-8*c;f=k=>k<>>g;e=f(e)}V(a,{name:b,Va:f,Ya:(k,l)=>l,jb:xe(b,c,0!==d),cb:null})},rb=(a,b,c)=>{function d(f){var g=(t(),H)[f>>2];f=(t(),H)[f+4>>2];return new e((t(),A).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=W(c);V(a,{name:c,Va:d,jb:d},{Ec:!0})},jf=Object.assign({optional:!0},gf),sb=a=>{V(a,jf)},Y=(a,b,c)=>pd(a, -(t(),B),b,c),tb=(a,b)=>{b=W(b);V(a,{name:b,Va(c){var d=(t(),H)[c>>2];d=U(c+4,d,!0);sc(c);return d},Ya(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new X("Cannot pass non-string to std::string");var f=e?od(d):d.length;var g=rc(4+f+1),k=g+4;(t(),H)[g>>2]=f;e?Y(d,k,f+1):(t(),B).set(d,k);null!==c&&c.push(sc,g);return g},jb:qe,cb(c){sc(c)}})},kf=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,lf=(a, -b,c)=>{a>>=1;b=ld((t(),Fa),a,b/2,c);if(16{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}(t(),C)[b>>1]=0;return b-d},nf=a=>2*a.length,of=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(t(),H)[a+e];if(!f&&!c)break; -d+=String.fromCodePoint(f)}return d},pf=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}(t(),E)[b>>2]=0;return b-d},qf=a=>{for(var b=0,c=0;c{c=W(c);if(2===b){var d=lf;var e=mf;var f=nf}else d=of,e=pf,f=qf;V(a,{name:c,Va:g=>{var k=(t(),H)[g>>2];k=d(g+4,k*b,!0);sc(g);return k},Ya:(g,k)=>{if("string"!=typeof k)throw new X(`Cannot pass non-string to C++ string type ${c}`); -var l=f(k),n=rc(4+l+b);(t(),H)[n>>2]=l/b;e(k,n+4,l+b);null!==g&&g.push(sc,n);return n},jb:qe,cb(g){sc(g)}})},vb=(a,b,c,d,e,f)=>{oe[a]={name:W(b),Xb:We(c,d),ib:We(e,f),hc:[]}},wb=(a,b,c,d,e,f,g,k,l,n)=>{oe[a].hc.push({wc:W(b),Ac:c,vb:We(d,e),zc:f,Vc:g,Uc:We(k,l),Wc:n})},xb=(a,b)=>{b=W(b);V(a,{Mc:!0,name:b,Va:()=>{},Ya:()=>{}})},yb=a=>{xa(a,!ba,1,!aa,5242880,!1);ya()},rf=a=>{if(!(a instanceof Ec||"unwind"==a))throw a;},Xc=a=>{if(!ma)try{if(a(),!(Sc||0{Atomics.waitAsync&&(Atomics.waitAsync((t(),E),a>>2,a).value.then(Da),a+=128,Atomics.store((t(),E),a>>2,1))},Da=()=>Xc(()=>{var a=qc();a&&(za(a),yc())}),zb=(a,b)=>{a==b?setTimeout(Da):m?postMessage({Nb:a,lb:"checkMailbox"}):(a=Qc[a])&&a.postMessage({lb:"checkMailbox"})},sf=[],Ab=(a,b,c,d,e)=>{d/=2;sf.length=d;c=e>>3;for(e=0;e{Sc=!1;L=0},Cb=a=>{m?postMessage({lb:"cleanupThread",$c:a}):Wc(Qc[a])}, -Db=()=>{},vf=[],wf=a=>{var b=vf.length;vf.push(a);return b},xf=(a,b)=>{for(var c=Array(a),d=0;d>2],g=se[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Ye(f)}`,new X(a);c[e]=g}return c},yf={},zf=a=>{var b=yf[a];return void 0===b?W(a):b},Eb=(a,b,c)=>{var [d,...e]=xf(a,b),f=d.Ya.bind(d),g=e.map(l=>l.jb.bind(l));a--;var k=Array(a);b=`methodCaller<(${e.map(l=>l.name)}) => ${d.name}>`;return wf(Ee(b,(l,n,q,p)=>{for(var u=0,z=0;z>2]=Oe(l));return v}))},Gb=a=>{if(!a)return Oe(globalThis);a=zf(a);return Oe(globalThis[a])},Hb=(a,b)=>{a=ff(a);b=ff(b);return Oe(a[b])},Ib=a=>{9vf[a](b,c,d,e),Kb=()=>Oe([]),Lb=a=>Oe(zf(a)),Mb=()=>Oe({}),Nb=a=>{var b=ff(a);pe(b);Fb(a)},Ob=(a,b,c)=>{a=ff(a);b=ff(b);c=ff(c);a[b]=c},Af=a=>0=== -a%4&&(0!==a%100||0===a%400),Bf=[0,31,60,91,121,152,182,213,244,274,305,335],Cf=[0,31,59,90,120,151,181,212,243,273,304,334]; -function Pb(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();(t(),E)[b+4>>2]=a.getMinutes();(t(),E)[b+8>>2]=a.getHours();(t(),E)[b+12>>2]=a.getDate();(t(),E)[b+16>>2]=a.getMonth();(t(),E)[b+20>>2]=a.getFullYear()-1900;(t(),E)[b+24>>2]=a.getDay();var c=(Af(a.getFullYear())?Bf:Cf)[a.getMonth()]+a.getDate()-1|0;(t(),E)[b+28>>2]=c;(t(),E)[b+36>>2]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(t(),E)[b+32>>2]=a} -function Qb(a){var b=new Date((t(),E)[a+20>>2]+1900,(t(),E)[a+16>>2],(t(),E)[a+12>>2],(t(),E)[a+8>>2],(t(),E)[a+4>>2],(t(),E)[a>>2],0),c=(t(),E)[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?(t(),E)[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();c=(Af(b.getFullYear())?Bf:Cf)[b.getMonth()]+b.getDate()-1|0; -(t(),E)[a+28>>2]=c;(t(),E)[a>>2]=b.getSeconds();(t(),E)[a+4>>2]=b.getMinutes();(t(),E)[a+8>>2]=b.getHours();(t(),E)[a+12>>2]=b.getDate();(t(),E)[a+16>>2]=b.getMonth();(t(),E)[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)}var Df={},ac=()=>performance.timeOrigin+performance.now(); -function Rb(a,b){if(m)return N(12,1,a,b);Df[a]&&(clearTimeout(Df[a].id),delete Df[a]);if(!b)return 0;var c=setTimeout(()=>{delete Df[a];Xc(()=>xc(a,performance.timeOrigin+performance.now()))},b);Df[a]={id:c,pd:b};return 0} -var Sb=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);(t(),H)[a>>2]=60*g;(t(),E)[b>>2]=Number(f!=e);b=k=>{var l=Math.abs(k);return`UTC${0<=k?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(e);eDate.now(),Ef=1; -function Ub(a,b,c){if(!(0<=a&&3>=a))return 28;if(0===a)a=Date.now();else if(Ef)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(1E6*a);(t(),K)[c>>3]=BigInt(a);return 0}var Ff=[],Vb=(a,b,c)=>{Ff.length=0;for(var d;d=(t(),B)[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;Ff.push(112==d?(t(),H)[c>>2]:106==d?(t(),K)[c>>3]:105==d?(t(),E)[c>>2]:(t(),Ha)[c>>3]);c+=e?8:4}return tf[a](...Ff)},Wb=()=>{},Yb=()=>{L+=1;throw"unwind";}; -function Zb(a){if(Gf.has(a)){var b=Gf.get(a),c=Gf;c.ob[a]=void 0;c.ic.push(a);0b.readyState&&b.abort()}}var $b=()=>2147483648,cc=a=>{var b=(t(),B).length;a>>>=0;if(a<=b||2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1};function Hf(a){var b=Gf,c=b.ic.pop()||b.ob.length;b.ob[c]=a;return c} -class If{ob=[void 0];ic=[];get(a){return this.ob[a]}has(a){return void 0!==this.ob[a]}}async function Jf(){return new Promise((a,b)=>{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Gf,Kf; -function Lf(a,b,c,d,e){function f(){var I=0,D=0;y.response&&F&&0===(t(),H)[a+12>>2]&&(D=y.response.byteLength);0>2]=I;Z(a+16,D);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);(t(),C)[a+40>>1]=y.readyState;(t(),C)[a+42>>1]=y.status;y.statusText&&Y(y.statusText,a+44,64);M&&(I=Mf(y.responseURL),(t(),H)[a+200>>2]=I)}var g=(t(),H)[a+8>>2];if(g){var k=U(g),l=a+108,n=U(l+0);n||="GET";var q=(t(),H)[l+56>>2],p=(t(),H)[l+68>> -2],u=(t(),H)[l+72>>2];g=(t(),H)[l+76>>2];var z=(t(),H)[l+80>>2],v=(t(),H)[l+84>>2],w=(t(),H)[l+88>>2],x=(t(),H)[l+52>>2],F=!!(x&1),G=!!(x&2),M=!!(x&64);p=p?U(p):void 0;u=u?U(u):void 0;var y=new XMLHttpRequest;y.withCredentials=!!(t(),B)[l+60];y.open(n,k,!M,p,u);M||(y.timeout=q);y.qd=k;y.responseType="arraybuffer";z&&(k=U(z),y.overrideMimeType(k));if(g)for(;;){l=(t(),H)[g>>2];if(!l)break;k=(t(),H)[g+4>>2];if(!k)break;g+=8;l=U(l);k=U(k);y.setRequestHeader(l,k)}var J=Hf(y);(t(),H)[a>>2]=J;g=v&&w?(t(), -B).slice(v,v+w):null;y.onload=I=>{Gf.has(J)&&(f(),200<=y.status&&300>y.status?b(a,y,I):c(a,I))};y.onerror=I=>{Gf.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Gf.has(J)&&c(a,I)};y.onprogress=I=>{if(Gf.has(J)){var D=F&&G&&y.response?y.response.byteLength:0,Aa=0;0>2]=Aa;Z(a+16,D);Z(a+24,I.loaded-D);Z(a+32,I.total);(t(),C)[a+40>>1]=y.readyState;D=y.status;3<=y.readyState&&0===y.status&&0>1]=D;y.statusText&& -Y(y.statusText,a+44,64);d(a,I);sc(Aa)}};y.onreadystatechange=I=>{if(Gf.has(J)){(t(),C)[a+40>>1]=y.readyState;2<=y.readyState&&((t(),C)[a+42>>1]=y.status);if(!M&&2===y.readyState&&0>2]=D}e(a,I)}else--L};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{(t(),H)[a>>2]=b;var c=(t(),H)[a>>2];(t(),H)[a+4>>2]=(b-c)/4294967296},Mf=a=>{var b=od(a)+1,c=rc(b);c&&Y(a,c,b);return c}; -function Nf(a,b,c,d){var e=Kf;if(e){var f=a+108;(f=(t(),H)[f+64>>2])||(f=(t(),H)[a+8>>2]);var g=U(f);try{var k=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);k.onsuccess=()=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);c(a,0,g)};k.onerror=l=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=413;Y("Payload Too Large",a+44,64);d(a,0,l)}}catch(l){d(a,0,l)}}else d(a,0,"IndexedDB not available!")} -function Of(a,b,c){var d=Kf;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var k=g.byteLength||g.length,l=rc(k);(t(),B).set(new Uint8Array(g),l);(t(),H)[a+12>>2]=l;Z(a+16,k);Z(a+24,0);Z(a+32,k);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)}else(t(),C)[a+40>>1]=4,(t(),C)[a+42>>1]=404,Y("Not Found",a+44,64),c(a,0,"no data")};f.onerror= -g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Pf(a,b,c){var d=Kf;if(d){var e=a+108;(e=(t(),H)[e+64>>2])||(e=(t(),H)[a+8>>2]);e=U(e);try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;(t(),H)[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=200;Y("OK",a+44,64);b(a,0,g)};f.onerror=g=>{(t(),C)[a+40>>1]=4;(t(),C)[a+42>>1]=404;Y("Not Found",a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function dc(a,b,c,d,e){function f(D){u?D():Xc(D)}L+=1;var g=a+108,k=(t(),H)[g+36>>2],l=(t(),H)[g+40>>2],n=(t(),H)[g+44>>2],q=(t(),H)[g+48>>2],p=(t(),H)[g+52>>2],u=!!(p&64),z=D=>{--L;f(()=>{k?$c(k)(D):b?.(D)})},v=D=>{f(()=>{n?$c(n)(D):d?.(D)})},w=D=>{--L;f(()=>{l?$c(l)(D):c?.(D)})},x=D=>{f(()=>{q?$c(q)(D):e?.(D)})},F=D=>{Lf(D,z,w,v,x)},G=(D,Aa)=>{Nf(D,Aa.response,Ua=>{--L;f(()=>{k?$c(k)(Ua):b?.(Ua)})},Ua=>{--L;f(()=>{k?$c(k)(Ua):b?.(Ua)})})},M=D=>{Lf(D,G,w,v,x)},y=U(g+0),J=!!(p&16),I=!!(p&4);p=!!(p& -32);if("EM_IDB_STORE"===y)F=(t(),H)[g+84>>2],g=(t(),H)[g+88>>2],Nf(a,(t(),B).slice(F,F+g),z,w);else if("EM_IDB_DELETE"===y)Pf(a,z,w);else if(J){if(p)return 0;Lf(a,I?G:z,w,v,x)}else Of(a,z,p?w:I?M:F);return a} -var Qf={},Sf=()=>{if(!Rf){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Qf)void 0===Qf[b]?delete a[b]:a[b]=Qf[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Rf=c}return Rf},Rf;function ec(a,b){if(m)return N(13,1,a,b);var c=0,d=0,e;for(e of Sf()){var f=b+c;(t(),H)[a+d>>2]=f;c+=Y(e,f,Infinity)+1;d+=4}return 0} -function fc(a,b){if(m)return N(14,1,a,b);var c=Sf();(t(),H)[a>>2]=c.length;a=0;for(var d of c)a+=od(d)+1;(t(),H)[b>>2]=a;return 0}function hc(a){if(m)return N(15,1,a);try{var b=R(a);ee(b);return 0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ua}} -function ic(a,b,c,d){if(m)return N(16,1,a,b,c,d);try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var n=e,q=(t(),A),p=k,u=l,z=f;if(0>u||0>z)throw new O(28);if(null===n.qb)throw new O(8);if(1===(n.flags&2097155))throw new O(8);if(Q(n.node.mode))throw new O(31);if(!n.Ma.read)throw new O(28);var v="undefined"!=typeof z;if(!v)z=n.position;else if(!n.seekable)throw new O(70);var w=n.Ma.read(n,q,p,u,z);v||(n.position+=w);var x=w;if(0>x){var F=-1;break a}b+=x;if(x< -l)break;"undefined"!=typeof f&&(f+=x)}F=b}(t(),H)[d>>2]=F;return 0}catch(G){if("undefined"==typeof T||"ErrnoError"!==G.name)throw G;return G.Ua}}function jc(a,b,c,d){if(m)return N(17,1,a,b,c,d);b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.Tb&&0===b&&0===c&&(e.Tb=null);return 0}catch(f){if("undefined"==typeof T||"ErrnoError"!==f.name)throw f;return f.Ua}} -function kc(a,b,c,d){if(m)return N(18,1,a,b,c,d);try{a:{var e=R(a);a=b;for(var f,g=b=0;g>2],l=(t(),H)[a+4>>2];a+=8;var n=ge(e,(t(),A),k,l,f);if(0>n){var q=-1;break a}b+=n;if(n>2]=q;return 0}catch(p){if("undefined"==typeof T||"ErrnoError"!==p.name)throw p;return p.Ua}}function nc(a,b){try{return hd((t(),B).subarray(a,a+b)),0}catch(c){if("undefined"==typeof T||"ErrnoError"!==c.name)throw c;return c.Ua}}m||Uc();Kd=Array(4096); -Yd(P,"/");S("/tmp");S("/home");S("/home/web_user");(function(){S("/dev");td(259,{read:()=>0,write:(d,e,f,g)=>g,fb:()=>0});ae("/dev/null",259);sd(1280,vd);sd(1536,wd);ae("/dev/tty",1280);ae("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(hd(a),b=a.byteLength);return a[--b]};Ma("/dev","random",c);Ma("/dev","urandom",c);S("/dev/shm");S("/dev/shm/tmp")})(); -(function(){S("/proc");var a=S("/proc/self");S("/proc/self/fd");Yd({mb(){var b=zd(a,"fd",16895,73);b.Ma={fb:P.Ma.fb};b.Oa={wb(c,d){c=+d;var e=R(c);c={parent:null,mb:{lc:"fake"},Oa:{Bb:()=>e.path},id:c+1};return c.parent=c},Yb(){return Array.from(Id.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=De.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof De&&c instanceof De))return!1;var d=this.La.Sa.Ra,e=this.La.Pa;c.La=c.La;var f=c.La.Sa.Ra;for(c=c.La.Pa;d.Za;)e=d.Cb(e),d=d.Za;for(;f.Za;)c=f.Cb(c),f=f.Za;return d===f&&e===c},clone:function(){this.La.Pa||ye(this);if(this.La.zb)return this.La.count.value+=1,this;var c=Be,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.La;c=c(e.call(d,f,{La:{value:{count:g.count,ub:g.ub,zb:g.zb,Pa:g.Pa,Sa:g.Sa,Xa:g.Xa,bb:g.bb}}})); -c.La.count.value+=1;c.La.ub=!1;return c},["delete"](){this.La.Pa||ye(this);if(this.La.ub&&!this.La.zb)throw new X("Object already scheduled for deletion");Ae(this);var c=this.La;--c.count.value;0===c.count.value&&(c.Xa?c.bb.ib(c.Xa):c.Sa.Ra.ib(c.Pa));this.La.zb||(this.La.Xa=void 0,this.La.Pa=void 0)},isDeleted:function(){return!this.La.Pa},deleteLater:function(){this.La.Pa||ye(this);if(this.La.ub&&!this.La.zb)throw new X("Object already scheduled for deletion");Ce.push(this);this.La.ub=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Ue.prototype,{yc(a){this.mc&&(a=this.mc(a));return a},fc(a){this.ib?.(a)},jb:qe,Va:function(a){function b(){return this.Hb?Te(this.Ra.rb,{Sa:this.Qc,Pa:c,bb:this,Xa:a}):Te(this.Ra.rb,{Sa:this,Pa:a})}var c=this.yc(a);if(!c)return this.fc(a),null;var d=Se(this.Ra,c);if(void 0!==d){if(0===d.La.count.value)return d.La.Pa=c,d.La.Xa=a,d.clone();d=d.clone();this.fc(a);return d}d=this.Ra.xc(c);d=Fe[d];if(!d)return b.call(this);d=this.Gb?d.tc:d.pointerType;var e=Qe(c,this.Ra,d.Ra);return null=== -e?b.call(this):this.Hb?Te(d.Ra.rb,{Sa:d,Pa:e,bb:this,Xa:a}):Te(d.Ra.rb,{Sa:d,Pa:e})}});(async function(){Gf=new If;if(!m){Lc("library_fetch_init");try{Kf=await Jf()}catch(a){Kf=!1}finally{Kc("library_fetch_init")}}})();m||(oa=h.wasmMemory?h.wasmMemory:new WebAssembly.Memory({initial:(h.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());h.noExitRuntime&&(Sc=h.noExitRuntime);h.preloadPlugins&&(Ed=h.preloadPlugins);h.print&&(ja=h.print);h.printErr&&(r=h.printErr);h.wasmBinary&&(ka=h.wasmBinary); -h.thisProgram&&(da=h.thisProgram);if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0{var l=b?jd(ed(a+"/"+b)):a,n=`cp ${l}`;Lc(n);try{var q=c;"string"==typeof c&&(q=await Dd(c));q=await Fd(q,l);k?.();f||je(a,b,q,d,e,g)}finally{Kc(n)}};h.FS_unlink=(...a)=>be(...a);h.FS_createPath=(...a)=>he(...a);h.FS_createDevice=(...a)=>Ma(...a); -h.FS_createDataFile=(...a)=>je(...a);h.FS_createLazyFile=(...a)=>le(...a); -var uf=[mc,Tc,ad,ab,bb,cb,db,eb,fb,gb,function(a,b,c,d,e,f,g){if(m)return N(10,1,a,b,c,d,e,f,g);e=-9007199254740992>e||9007199254740992>2]=l.ob;(t(),H)[g>>2]=n;return 0}catch(q){if("undefined"==typeof T||"ErrnoError"!==q.name)throw q;return-q.Ua}},function(a,b,c,d,e,f){if(m)return N(11, -1,a,b,c,d,e,f);f=-9007199254740992>f||9007199254740992{a=U(a);b=U(b);c=U(c);d=U(d);throw Error(a+b+c+d);},467581:(a,b)=>{a=U(a);b=U(b);throw Error(a+b);},467691:a=>{a=U(a);throw Error(a);},467755:a=>{a=U(a);throw Error(a); -},467819:a=>{a=U(a);throw Error(a);}};function Tb(){var a=h.allowedThreads;return a?a:navigator.hardwareConcurrency}function lc(){var a=stackTrace(),b=od(a)+1,c=rc(b);Y(a,c,b);return c}var pc,Ba,qc,rc,sc,tc,xa,Ea,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc;h.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=175408;var Ya; -function va(){function a(){h.calledRun=!0;if(!ma&&(Ka(),qa?.(h),h.onRuntimeInitialized?.(),!m)){if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;){var b=h.postRun.shift();Yc.push(b)}Gc(Yc)}}if(0{setTimeout(()=>h.setStatus(""),1);a()},1)):a()}} -var Pa;m||(Pa=await (ua()),va());moduleRtn=Ja?h:new Promise((a,b)=>{qa=a;ra=b}); -;return moduleRtn}export default createModule;var isPthread=globalThis.self?.name?.startsWith("em-pthread");isPthread&&createModule(); diff --git a/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.wasm deleted file mode 100755 index 5eebcd6a..00000000 Binary files a/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.js b/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.js deleted file mode 100644 index 4e78658c..00000000 --- a/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.js +++ /dev/null @@ -1,122 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var l=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=l).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);l.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,n){var p;(p=l).dataFileDownloads??(p.dataFileDownloads={});try{var m=await fetch(k)}catch(x){throw Error(`Network Error: ${k}`,{e:x});}if(!m.ok)throw Error(`${m.status}: ${m.url}`);p=[];n=Number(m.headers.get("Content-Length")??n);let t=0;l.setStatus?.("Downloading data...");for(m=m.body.getReader();;){var {done:z, -value:u}=await m.read();if(z)break;p.push(u);t+=u.length;l.dataFileDownloads[k]={loaded:t,total:n};let x=0,E=0;for(var w of Object.values(l.dataFileDownloads))x+=w.loaded,E+=w.total;l.setStatus?.(`Downloading data... (${x}/${E})`)}k=new Uint8Array(p.map(x=>x.length).reduce((x,E)=>x+E,0));w=0;for(const x of p)k.set(x,w),w+=x.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkid",!0,!0);for(var n of b.files)k.addRunDependency(`fp ${n.filename}`); -k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.data"]={Cc:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var m of b.files){var t=m.filename; -k.FS_createDataFile(t,null,p.subarray(m.start,m.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+ -"/");var e=l.locateFile?.("BlinkIdModule.data","")??"BlinkIdModule.data",f=b.remote_package_size,g,h=l.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(l.calledRun)d(l);else{let k;((k=l).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop",start:0,end:103198},{filename:"/microblink/blinkid/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/microblink/blinkid/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop", -start:106933,end:451389},{filename:"/microblink/blinkid/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/microblink/blinkid/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:775876,end:1044597},{filename:"/microblink/blinkid/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop",start:1044597,end:1051046},{filename:"/microblink/blinkid/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop", -start:1051046,end:2476219},{filename:"/microblink/blinkid/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2476219,end:3503074},{filename:"/microblink/blinkid/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop",start:3503074,end:3798876},{filename:"/microblink/blinkid/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:3798876,end:3805372},{filename:"/microblink/blinkid/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop", -start:3805372,end:7911221},{filename:"/microblink/blinkid/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop",start:7911221,end:8036425},{filename:"/microblink/blinkid/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop",start:8036425,end:8110870},{filename:"/microblink/blinkid/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:8110870,end:8186272},{filename:"/microblink/blinkid/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop", -start:8186272,end:8849325},{filename:"/microblink/blinkid/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:8849325,end:8875623},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:8875623,end:8896092},{filename:"/microblink/blinkid/serialized_embedder_db_1.12.bin",start:8896092,end:12173753}],remote_package_size:12173753})})();l.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}}; -l="undefined"!==typeof l?l:{};(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!l.locateFile&&(l.locateFile=function(d,e){return"BlinkIdModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,v,A,pa,B,D,ra,sa,G,ta,ua=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);v=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);D=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);G=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function H(a){l.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),H(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=l.preRun.shift();Ea.push(a)},Ha=!0,Ia=[],Ka=a=>{var b=Ia[a];b||(Ia[a]=b=Ja.get(a));return b},Ma=()=>{var a=B[+La>>2];La+=4;return a},Na=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Oa=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Na(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/"); -return(b?"/":"")+a},Pa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Qa=()=>a=>crypto.getRandomValues(a),Ra=a=>{(Ra=Qa())(a)},Sa=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Na(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/": -"")+b||"."},Ta=globalThis.TextDecoder&&new TextDecoder,Ua=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},L=(a,b=0,c,d)=>{c=Ua(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+= -String.fromCharCode(e)}return d},Va=[],Wa=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},M=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128| -g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},Xa=a=>{var b=Array(Wa(a)+1);a=M(a,b,0,b.length);b.length=a;return b},Ya=[];function Za(a,b){Ya[a]={input:[],output:[],Pa:b};$a(a,ab)} -var ab={open(a){var b=Ya[a.node.ab];if(!b)throw new N(43);a.ua=b;a.seekable=!1},close(a){a.ua.Pa.gb(a.ua)},gb(a){a.ua.Pa.gb(a.ua)},read(a,b,c,d){if(!a.ua||!a.ua.Pa.Jb)throw new N(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=db(65536,a);b&&v.fill(0,b,b+a);return b},O={Ka:null,Oa(){return O.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new N(63);O.Ka||(O.Ka={dir:{node:{Ia:O.sa.Ia,Na:O.sa.Na,Ya:O.sa.Ya,jb:O.sa.jb,Nb:O.sa.Nb,ob:O.sa.ob,Ob:O.sa.Ob,yb:O.sa.yb,nb:O.sa.nb},stream:{Ja:O.qa.Ja}}, -file:{node:{Ia:O.sa.Ia,Na:O.sa.Na},stream:{Ja:O.qa.Ja,read:O.qa.read,write:O.qa.write,vb:O.qa.vb,kb:O.qa.kb}},link:{node:{Ia:O.sa.Ia,Na:O.sa.Na,bb:O.sa.bb},stream:{}},Db:{node:{Ia:O.sa.Ia,Na:O.sa.Na},stream:fb}});c=gb(a,b,c,d);P(c.mode)?(c.sa=O.Ka.dir.node,c.qa=O.Ka.dir.stream,c.ra={}):32768===(c.mode&61440)?(c.sa=O.Ka.file.node,c.qa=O.Ka.file.stream,c.xa=0,c.ra=null):40960===(c.mode&61440)?(c.sa=O.Ka.link.node,c.qa=O.Ka.link.stream):8192===(c.mode&61440)&&(c.sa=O.Ka.Db.node,c.qa=O.Ka.Db.stream); -c.Qa=c.Fa=c.Ea=Date.now();a&&(a.ra[b]=c,a.Qa=a.Fa=a.Ea=c.Qa);return c},Dc(a){return a.ra?a.ra.subarray?a.ra.subarray(0,a.xa):new Uint8Array(a.ra):new Uint8Array(0)},sa:{Ia(a){var b={};b.Sb=8192===(a.mode&61440)?a.id:1;b.ac=a.id;b.mode=a.mode;b.kc=1;b.uid=0;b.Zb=0;b.ab=a.ab;b.size=P(a.mode)?4096:32768===(a.mode&61440)?a.xa:40960===(a.mode&61440)?a.link.length:0;b.Qa=new Date(a.Qa);b.Fa=new Date(a.Fa);b.Ea=new Date(a.Ea);b.Pb=4096;b.Qb=Math.ceil(b.size/b.Pb);return b},Na(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.xa!=b&&(0==b?(a.ra=null,a.xa=0):(c=a.ra,a.ra=new Uint8Array(b),c&&a.ra.set(c.subarray(0,Math.min(b,a.xa))),a.xa=b)))},Ya(){O.qb||(O.qb=new N(44),O.qb.stack="");throw O.qb;},jb(a,b,c,d){return O.createNode(a,b,c,d)},Nb(a,b,c){try{var d=hb(b,c)}catch(f){}if(d){if(P(a.mode))for(var e in d.ra)throw new N(55);ib(d)}delete a.parent.ra[a.name];b.ra[c]=a;a.name=c;b.Ea=b.Fa=a.parent.Ea=a.parent.Fa=Date.now()},ob(a, -b){delete a.ra[b];a.Ea=a.Fa=Date.now()},Ob(a,b){var c=hb(a,b),d;for(d in c.ra)throw new N(55);delete a.ra[b];a.Ea=a.Fa=Date.now()},yb(a){return[".","..",...Object.keys(a.ra)]},nb(a,b,c){a=O.createNode(a,b,41471,0);a.link=c;return a},bb(a){if(40960!==(a.mode&61440))throw new N(28);return a.link}},qa:{read(a,b,c,d,e){var f=a.node.ra;if(e>=a.node.xa)return 0;a=Math.min(a.node.xa-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.ra,a.ra=new Uint8Array(f),0b)throw new N(28);return b},vb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new N(43);a=a.node.ra;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=eb(b);if(!e)throw new N(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},kb=async a=>{a=await ha(a);return new Uint8Array(a)},lb=0,mb=null,nb=()=>{lb--;l.monitorRunDependencies?.(lb);if(0==lb&&mb){var a=mb;mb=null;a()}},ob=()=>{lb++;l.monitorRunDependencies?.(lb)},pb=[],qb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Ec();for(var c of pb)if(c.canHandle(b))return c.handle(a,b);return a},rb=null,sb={},tb=[],ub=1,vb=null,wb=!1,xb=!0,yb={},N=class{name="ErrnoError";constructor(a){this.ya=a}},zb=class{mb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.mb.flags}set flags(a){this.mb.flags=a}get position(){return this.mb.position}set position(a){this.mb.position=a}},Ab=class{sa={};qa={};lb=365;pb=146;Za=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Oa=a.Oa;this.id=ub++;this.name=b;this.mode=c;this.ab=d;this.Qa=this.Fa=this.Ea=Date.now()}get read(){return(this.mode&this.lb)===this.lb}set read(a){a?this.mode|=this.lb:this.mode&=~this.lb}get write(){return(this.mode&this.pb)===this.pb}set write(a){a?this.mode|=this.pb: -this.mode&=~this.pb}get hc(){return P(this.mode)}get fc(){return 8192===(this.mode&61440)}}; -function Bb(a,b={}){if(!a)throw new N(44);b.rb??(b.rb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=rb,e="/",f=0;f>>0)%vb.length} -function ib(a){var b=Db(a.parent.id,a.name);if(vb[b]===a)vb[b]=a.Ua;else for(b=vb[b];b;){if(b.Ua===a){b.Ua=a.Ua;break}b=b.Ua}}function hb(a,b){var c=P(a.mode)?(c=Eb(a,"x"))?c:a.sa.Ya?0:2:54;if(c)throw new N(c);for(c=vb[Db(a.id,b)];c;c=c.Ua){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.sa.Ya(a,b)}function gb(a,b,c,d){a=new Ab(a,b,c,d);b=Db(a.parent.id,a.name);a.Ua=vb[b];return vb[b]=a}function P(a){return 16384===(a&61440)} -function Fb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Eb(a,b){if(xb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Gb(a,b){if(!P(a.mode))return 54;try{return hb(a,b),20}catch(c){}return Eb(a,"wx")}function Hb(a){if(!a)throw new N(63);return a}function Q(a){a=tb[a];if(!a)throw new N(8);return a} -function Ib(a,b=-1){a=Object.assign(new zb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!tb[b])break a;throw new N(33);}a.Ra=b;return tb[b]=a}function Jb(a,b=-1){a=Ib(a,b);a.qa?.Bc?.(a);return a}function Kb(a,b){var c=null?.qa.Na,d=c?null:a;c??=a.sa.Na;Hb(c);c(d,b)}var fb={open(a){a.qa=sb[a.node.ab].qa;a.qa.open?.(a)},Ja(){throw new N(70);}};function $a(a,b){sb[a]={qa:b}} -function Lb(a,b){var c="/"===b;if(c&&rb)throw new N(10);if(!c&&b){var d=Bb(b,{rb:!1});b=d.path;d=d.node;if(d.Za)throw new N(10);if(!P(d.mode))throw new N(54);}b={type:a,Fc:{},Lb:b,jc:[]};a=a.Oa(b);a.Oa=b;b.root=a;c?rb=a:d&&(d.Za=b,d.Oa&&d.Oa.jc.push(b))}function Mb(a,b,c){var d=Bb(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new N(28);if("."===a||".."===a)throw new N(20);var e=Gb(d,a);if(e)throw new N(e);if(!d.sa.jb)throw new N(63);return d.sa.jb(d,a,b,c)} -function Nb(a,b=438){return Mb(a,b&4095|32768,0)}function R(a){return Mb(a,16895,0)}function Ob(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Mb(a,b|8192,c)}function Pb(a,b){if(!Sa(a))throw new N(44);var c=Bb(b,{parent:!0}).node;if(!c)throw new N(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Gb(c,b);if(d)throw new N(d);if(!c.sa.nb)throw new N(63);c.sa.nb(c,b,a)} -function Qb(a){var b=Bb(a,{parent:!0}).node;if(!b)throw new N(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=hb(b,a);a:{try{var d=hb(b,a)}catch(f){d=f.ya;break a}var e=Eb(b,"wx");d=e?e:P(d.mode)?31:0}if(d)throw new N(d);if(!b.sa.ob)throw new N(63);if(c.Za)throw new N(10);b.sa.ob(b,a);ib(c)}function Rb(a,b){a=Bb(a,{fb:!b}).node;return Hb(a.sa.Ia)(a)}function Sb(a,b){a="string"==typeof a?Bb(a,{fb:!0}).node:a;Kb(a,{mode:b&4095|a.mode&-4096,Ea:Date.now(),Ac:void 0})} -function Tb(a,b,c=438){if(""===a)throw new N(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Bb(a,{fb:!(b&131072),lc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new N(20);}else{if(e)throw new N(31);d=Mb(a,c|511,0);f=!0}if(!d)throw new N(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!P(d.mode))throw new N(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:P(d.mode)&&("r"!==Fb(b)||b&576)?31:Eb(d,Fb(b)):44))throw new N(e);if(b&512&&!f){e=d;e="string"==typeof e?Bb(e,{fb:!0}).node:e;if(P(e.mode))throw new N(31);if(32768!==(e.mode&61440))throw new N(28);var g=Eb(e,"w");if(g)throw new N(g);Kb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Ib({node:d,path:Cb(d),flags:b,seekable:!0,position:0,qa:d.qa,uc:[],error:!1});e.qa.open&&e.qa.open(e);f&&Sb(d,c&511);!l.logReadFiles||b&1||a in yb||(yb[a]=1);return e} -function Ub(a){if(null===a.Ra)throw new N(8);a.sb&&(a.sb=null);try{a.qa.close&&a.qa.close(a)}catch(b){throw b;}finally{tb[a.Ra]=null}a.Ra=null}function Vb(a,b,c){if(null===a.Ra)throw new N(8);if(!a.seekable||!a.qa.Ja)throw new N(70);if(0!=c&&1!=c&&2!=c)throw new N(28);a.position=a.qa.Ja(a,b,c);a.uc=[]} -function Wb(a,b,c,d,e,f){if(0>d||0>e)throw new N(28);if(null===a.Ra)throw new N(8);if(0===(a.flags&2097155))throw new N(8);if(P(a.node.mode))throw new N(31);if(!a.qa.write)throw new N(28);a.seekable&&a.flags&1024&&Vb(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new N(70);b=a.qa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Xb(a,b){a="string"==typeof a?a:Cb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Oa(a+"/"+c);try{R(d)}catch(e){if(20!=e.ya)throw e;}a=d}}return d}function Yb(a,b,c,d){a=Oa(("string"==typeof a?a:Cb(a))+"/"+b);return Nb(a,jb(c,d))} -function Zb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Cb(a),g=b?Oa(a+"/"+b):a);a=jb(d,e);g=Nb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=m.length)return 0;u=Math.min(m.length-w,u);if(m.slice)for(var x=0;xthis.length-1||0>m)){var t=m%this.Eb;return this.Xa(m/this.Eb|0)[t]}}pc(m){this.Xa=m}Cb(){var m=new XMLHttpRequest;m.open("HEAD",c,!1);m.send(null);200<=m.status&&300>m.status||304===m.status||H("Couldn't load "+c+". Status: "+m.status);var t=Number(m.getResponseHeader("Content-length")), -z,u=(z=m.getResponseHeader("Accept-Ranges"))&&"bytes"===z;m=(z=m.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;u||(w=t);var x=this;x.pc(E=>{var F=E*w,K=(E+1)*w-1;K=Math.min(K,t-1);if("undefined"==typeof x.eb[E]){var y=x.eb;F>K&&H("invalid range ("+F+", "+K+") or no bytes requested!");K>t-1&&H("only "+t+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);t!==w&&J.setRequestHeader("Range","bytes="+F+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||H("Couldn't load "+c+". Status: "+J.status);F=void 0!==J.response?new Uint8Array(J.response||[]):Xa(J.responseText||"");y[E]=F}"undefined"==typeof x.eb[E]&&H("doXHR failed!");return x.eb[E]});if(m||!t)w=t=1,w=t=this.Xa(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.Bb=t;this.Ab=w;this.ub=!0}get length(){this.ub||this.Cb();return this.Bb}get Eb(){this.ub|| -this.Cb();return this.Ab}}if(globalThis.XMLHttpRequest){ba||H("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var n=Yb(a,b,d,e);h?n.ra=h:k&&(n.ra=null,n.url=k);Object.defineProperties(n,{xa:{get:function(){return this.ra.length}}});var p={};Object.keys(n.qa).forEach(m=>{var t=n.qa[m];p[m]=(...z)=>{ac(n);return t(...z)}});p.read=(m,t,z,u,w)=>{ac(n);return f(m,t,z,u,w)};p.vb=(m,t,z)=>{ac(n); -var u=eb(t);if(!u)throw new N(48);f(m,r,u,t,z);return{ta:u,Sa:!0}};n.qa=p;return n}var S={},cc=(a,b,c)=>a?L(v,a,b,c):"";function dc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":Q(a).path;if(0==b.length){if(!c)throw new N(44);return a}return a+"/"+b} -function ec(a,b){D[a>>2]=b.Sb;D[a+4>>2]=b.mode;D[a+8>>2]=b.kc;D[a+12>>2]=b.uid;D[a+16>>2]=b.Zb;D[a+20>>2]=b.ab;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.Qb;var c=b.Qa.getTime(),d=b.Fa.getTime(),e=b.Ea.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));D[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));D[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));D[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.ac);return 0}var La=void 0,fc={},gc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function hc(a){return this.za(D[a>>2])} -var ic={},jc={},kc={},lc=class extends Error{constructor(a){super(a);this.name="InternalError"}},mc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new lc("Mismatched type converter count");for(var k=0;kkc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{jc.hasOwnProperty(h)?e[k]=jc[h]:(f.push(h),ic.hasOwnProperty(h)||(ic[h]=[]),ic[h].push(()=>{e[k]=jc[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},U=a=>{for(var b="";;){var c=v[a++];if(!c)return b; -b+=String.fromCharCode(c)}},V=class extends Error{constructor(a){super(a);this.name="BindingError"}};function nc(a,b,c={}){var d=b.name;if(!a)throw new V(`type "${d}" must have a positive integer typeid pointer`);if(jc.hasOwnProperty(a)){if(c.$b)return;throw new V(`Cannot register type '${d}' twice`);}jc[a]=b;delete kc[a];ic.hasOwnProperty(a)&&(b=ic[a],delete ic[a],b.forEach(e=>e()))}function T(a,b,c={}){return nc(a,b,c)} -var oc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>v[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>D[d>>2];case 8:return c?d=>G[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},pc=a=>{throw new V(a.pa.wa.va.name+" instance already deleted");},qc=!1,rc=()=>{},sc=a=>{if(!globalThis.FinalizationRegistry)return sc=b=>b,a;qc=new FinalizationRegistry(b=>{b=b.pa;--b.count.value;0===b.count.value&&(b.Ba?b.Ga.La(b.Ba):b.wa.va.La(b.ta))});sc= -b=>{var c=b.pa;c.Ba&&qc.register(b,{pa:c},b);return b};rc=b=>{qc.unregister(b)};return sc(a)},tc=[];function uc(){} -var vc=(a,b)=>Object.defineProperty(b,"name",{value:a}),wc={},xc=(a,b,c)=>{if(void 0===a[b].Aa){var d=a[b];a[b]=function(...e){if(!a[b].Aa.hasOwnProperty(e.length))throw new V(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Aa})!`);return a[b].Aa[e.length].apply(this,e)};a[b].Aa=[];a[b].Aa[d.Va]=d}},yc=(a,b,c)=>{if(l.hasOwnProperty(a)){if(void 0===c||void 0!==l[a].Aa&&void 0!==l[a].Aa[c])throw new V(`Cannot register public name '${a}' twice`);xc(l, -a,a);if(l[a].Aa.hasOwnProperty(c))throw new V(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);l[a].Aa[c]=b}else l[a]=b,l[a].Va=c},zc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Ac(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Ta=c;this.La=d;this.Da=e;this.Vb=f;this.cb=g;this.Tb=h;this.nc=[]} -var Bc=(a,b,c)=>{for(;b!==c;){if(!b.cb)throw new V(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.cb(a);b=b.Da}return a},Cc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Dc(a,b){if(null===b){if(this.tb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.pa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.pa.ta)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);return Bc(b.pa.ta,b.pa.wa.va,this.va)} -function Ec(a,b){if(null===b){if(this.tb)throw new V(`null is not a valid ${this.name}`);if(this.ib){var c=this.xb();null!==a&&a.push(this.La,c);return c}return 0}if(!b||!b.pa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.pa.ta)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.hb&&b.pa.wa.hb)throw new V(`Cannot convert argument of type ${b.pa.Ga?b.pa.Ga.name:b.pa.wa.name} to parameter type ${this.name}`);c=Bc(b.pa.ta,b.pa.wa.va,this.va);if(this.ib){if(void 0=== -b.pa.Ba)throw new V("Passing raw pointer to smart pointer is illegal");switch(this.tc){case 0:if(b.pa.Ga===this)c=b.pa.Ba;else throw new V(`Cannot convert argument of type ${b.pa.Ga?b.pa.Ga.name:b.pa.wa.name} to parameter type ${this.name}`);break;case 1:c=b.pa.Ba;break;case 2:if(b.pa.Ga===this)c=b.pa.Ba;else{var d=b.clone();c=this.oc(c,Fc(()=>d["delete"]()));null!==a&&a.push(this.La,c)}break;default:throw new V("Unsupporting sharing policy");}}return c} -function Gc(a,b){if(null===b){if(this.tb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.pa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.pa.ta)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.pa.wa.hb)throw new V(`Cannot convert argument of type ${b.pa.wa.name} to parameter type ${this.name}`);return Bc(b.pa.ta,b.pa.wa.va,this.va)} -var Hc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Da)return null;a=Hc(a,b,c.Da);return null===a?null:c.Tb(a)},Ic={},Jc=(a,b)=>{if(void 0===b)throw new V("ptr should not be undefined");for(;a.Da;)b=a.cb(b),a=a.Da;return Ic[b]},Kc=(a,b)=>{if(!b.wa||!b.ta)throw new lc("makeClassHandle requires ptr and ptrType");if(!!b.Ga!==!!b.Ba)throw new lc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return sc(Object.create(a,{pa:{value:b,writable:!0}}))}; -function Lc(a,b,c,d,e,f,g,h,k,n,p){this.name=a;this.va=b;this.tb=c;this.hb=d;this.ib=e;this.mc=f;this.tc=g;this.Mb=h;this.xb=k;this.oc=n;this.La=p;e||void 0!==b.Da?this.Ca=Ec:(this.Ca=d?Dc:Gc,this.Ha=null)}var Mc=(a,b,c)=>{if(!l.hasOwnProperty(a))throw new lc("Replacing nonexistent public symbol");void 0!==l[a].Aa&&void 0!==c?l[a].Aa[c]=b:(l[a]=b,l[a].Va=c)},W=(a,b)=>{a=U(a);var c=Ka(b);if("function"!=typeof c)throw new V(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Nc extends Error{}var Qc=a=>{a=Oc(a);var b=U(a);Pc(a);return b},Rc=(a,b)=>{function c(f){e[f]||jc[f]||(kc[f]?kc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Nc(`${a}: `+d.map(Qc).join([", "]));};function Sc(a){for(var b=1;bf)throw new V("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Sc(b),k=!b[0].ic,n=f-2,p=Array(n),m=[],t=[];return vc(a,function(...z){t.length=0;m.length=g?2:1;m[0]=e;if(g){var u=b[1].Ca(t,this);m[1]=u}for(var w=0;w{for(var c=[],d=0;d>2]);return c},Vc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Wc=[],Xc=[0,1,,1,null,1,!0,1,!1,1],Yc=a=>{9{if(!a)throw new V(`Cannot use deleted val. handle = ${a}`);return Xc[a]},Fc=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Wc.pop()||Xc.length;Xc[b]=a;Xc[b+1]=1;return b}},Zc={name:"emscripten::val",za:a=>{var b= -X(a);Yc(a);return b},Ca:(a,b)=>Fc(b),Ma:hc,Ha:null},$c=(a,b)=>{switch(b){case 4:return function(c){return this.za(ra[c>>2])};case 8:return function(c){return this.za(sa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ad=Object.assign({optional:!0},Zc),bd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,cd=(a,b,c)=>{a>>=1;b=Ua(pa,a,b/2,c);if(16{c??=2147483647; -if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},ed=a=>2*a.length,fd=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=D[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},gd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},hd=a=>{for(var b=0,c=0;c{var b=kd.length;kd.push(a);return b},md=(a,b)=>{for(var c=Array(a),d=0;d>2],g=jc[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Qc(f)}`,new V(a);c[e]=g}return c},nd={},od=a=>{var b=nd[a];return void 0===b?U(a):b},pd=a=>0===a%4&&(0!==a%100||0===a%400),qd=[0,31,60,91,121,152,182,213,244,274,305,335],rd=[0,31,59,90,120,151,181,212,243,273,304,334],sd={},td=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},ud=a=>{ma=a;Ha|| -0{if(!la)try{if(a(),!(Ha||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Ad; -function Bd(a,b,c,d,e){function f(){var I=0,C=0;y.response&&E&&0===D[a+12>>2]&&(C=y.response.byteLength);0>2]=I;Z(a+16,C);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);A[a+40>>1]=y.readyState;A[a+42>>1]=y.status;y.statusText&&M(y.statusText,v,a+44,64);K&&(I=Dd(y.responseURL),D[a+200>>2]=I)}var g=D[a+8>>2];if(g){var h=g?L(v,g):"",k=a+108,n=cc(k+0);n||="GET";var p=D[k+56>>2],m=D[k+68>>2],t=D[k+72>>2];g=D[k+76>>2];var z=D[k+80>>2], -u=D[k+84>>2],w=D[k+88>>2],x=D[k+52>>2],E=!!(x&1),F=!!(x&2),K=!!(x&64);m=m?m?L(v,m):"":void 0;t=t?t?L(v,t):"":void 0;var y=new XMLHttpRequest;y.withCredentials=!!v[k+60];y.open(n,h,!K,m,t);K||(y.timeout=p);y.Hc=h;y.responseType="arraybuffer";z&&(h=z?L(v,z):"",y.overrideMimeType(h));if(g)for(;;){k=D[g>>2];if(!k)break;h=D[g+4>>2];if(!h)break;g+=8;k=k?L(v,k):"";h=h?L(v,h):"";y.setRequestHeader(k,h)}var J=xd(y);D[a>>2]=J;g=u&&w?v.slice(u,u+w):null;y.onload=I=>{Y.has(J)&&(f(),200<=y.status&&300>y.status? -b(a,y,I):c(a,I))};y.onerror=I=>{Y.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Y.has(J)&&c(a,I)};y.onprogress=I=>{if(Y.has(J)){var C=E&&F&&y.response?y.response.byteLength:0,qa=0;0>2]=qa;Z(a+16,C);Z(a+24,I.loaded-C);Z(a+32,I.total);A[a+40>>1]=y.readyState;C=y.status;3<=y.readyState&&0===y.status&&0>1]=C;y.statusText&&M(y.statusText,v,a+44,64);d(a,I);Pc(qa)}};y.onreadystatechange=I=>{if(Y.has(J)){A[a+40>>1]=y.readyState; -2<=y.readyState&&(A[a+42>>1]=y.status);if(!K&&2===y.readyState&&0>2]=C}e(a,I)}};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{D[a>>2]=b;D[a+4>>2]=(b-D[a>>2])/4294967296},Dd=a=>{var b=Wa(a)+1,c=Cd(b);c&&M(a,v,c,b);return c}; -function Ed(a,b,c,d){var e=Ad;if(e){var f=D[a+108+64>>2];f||=D[a+8>>2];var g=f?L(v,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;M("OK",v,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;M("Payload Too Large",v,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Fd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?L(v,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Cd(h);v.set(new Uint8Array(g),k);D[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;M("OK",v,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,M("Not Found",v,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;M("Not Found", -v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?L(v,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;D[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;M("OK",v,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;M("Not Found",v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Hd={},Jd=()=>{if(!Id){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Hd)void 0===Hd[b]?delete a[b]:a[b]=Hd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Id=c}return Id},Id;vb=Array(4096);Lb(O,"/");R("/tmp");R("/home");R("/home/web_user"); -(function(){R("/dev");$a(259,{read:()=>0,write:(d,e,f,g)=>g,Ja:()=>0});Ob("/dev/null",259);Za(1280,bb);Za(1536,cb);Ob("/dev/tty",1280);Ob("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Ra(a),b=a.byteLength);return a[--b]};$b("/dev","random",c);$b("/dev","urandom",c);R("/dev/shm");R("/dev/shm/tmp")})(); -(function(){R("/proc");var a=R("/proc/self");R("/proc/self/fd");Lb({Oa(){var b=gb(a,"fd",16895,73);b.qa={Ja:O.qa.Ja};b.sa={Ya(c,d){c=+d;var e=Q(c);c={parent:null,Oa:{Lb:"fake"},sa:{bb:()=>e.path},id:c+1};return c.parent=c},yb(){return Array.from(tb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=uc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof uc&&c instanceof uc))return!1;var d=this.pa.wa.va,e=this.pa.ta;c.pa=c.pa;var f=c.pa.wa.va;for(c=c.pa.ta;d.Da;)e=d.cb(e),d=d.Da;for(;f.Da;)c=f.cb(c),f=f.Da;return d===f&&e===c},clone:function(){this.pa.ta||pc(this);if(this.pa.$a)return this.pa.count.value+=1,this;var c=sc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.pa;c=c(e.call(d,f,{pa:{value:{count:g.count,Wa:g.Wa,$a:g.$a,ta:g.ta,wa:g.wa,Ba:g.Ba,Ga:g.Ga}}})); -c.pa.count.value+=1;c.pa.Wa=!1;return c},["delete"](){this.pa.ta||pc(this);if(this.pa.Wa&&!this.pa.$a)throw new V("Object already scheduled for deletion");rc(this);var c=this.pa;--c.count.value;0===c.count.value&&(c.Ba?c.Ga.La(c.Ba):c.wa.va.La(c.ta));this.pa.$a||(this.pa.Ba=void 0,this.pa.ta=void 0)},isDeleted:function(){return!this.pa.ta},deleteLater:function(){this.pa.ta||pc(this);if(this.pa.Wa&&!this.pa.$a)throw new V("Object already scheduled for deletion");tc.push(this);this.pa.Wa=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Lc.prototype,{Wb(a){this.Mb&&(a=this.Mb(a));return a},Gb(a){this.La?.(a)},Ma:hc,za:function(a){function b(){return this.ib?Kc(this.va.Ta,{wa:this.mc,ta:c,Ga:this,Ba:a}):Kc(this.va.Ta,{wa:this,ta:a})}var c=this.Wb(a);if(!c)return this.Gb(a),null;var d=Jc(this.va,c);if(void 0!==d){if(0===d.pa.count.value)return d.pa.ta=c,d.pa.Ba=a,d.clone();d=d.clone();this.Gb(a);return d}d=this.va.Vb(c);d=wc[d];if(!d)return b.call(this);d=this.hb?d.Rb:d.pointerType;var e=Hc(c,this.va,d.va);return null=== -e?b.call(this):this.ib?Kc(d.va.Ta,{wa:d,ta:e,Ga:this,Ba:a}):Kc(d.va.Ta,{wa:d,ta:e})}});(async function(){Y=new yd;ob("library_fetch_init");try{Ad=await zd()}catch(a){Ad=!1}finally{nb("library_fetch_init")}})();wa=l.wasmMemory?l.wasmMemory:new WebAssembly.Memory({initial:(l.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();l.noExitRuntime&&(Ha=l.noExitRuntime);l.preloadPlugins&&(pb=l.preloadPlugins);l.print&&(ja=l.print);l.printErr&&(q=l.printErr);l.wasmBinary&&(ka=l.wasmBinary); -l.thisProgram&&(da=l.thisProgram);if(l.preInit)for("function"==typeof l.preInit&&(l.preInit=[l.preInit]);0{var k=b?Sa(Oa(a+"/"+b)):a,n=`cp ${k}`;ob(n);try{var p=c;"string"==typeof c&&(p=await kb(c));p=await qb(p,k);h?.();f||Zb(a,b,p,d,e,g)}finally{nb(n)}};l.FS_unlink=(...a)=>Qb(...a);l.FS_createPath=(...a)=>Xb(...a);l.FS_createDevice=(...a)=>$b(...a); -l.FS_createDataFile=(...a)=>Zb(...a);l.FS_createLazyFile=(...a)=>bc(...a);var Kd={465097:(a,b,c,d)=>{a=a?L(v,a):"";b=b?L(v,b):"";c=c?L(v,c):"";d=d?L(v,d):"";throw Error(a+b+c+d);},465313:(a,b)=>{a=a?L(v,a):"";b=b?L(v,b):"";throw Error(a+b);},465423:a=>{a=a?L(v,a):"";throw Error(a);},465487:a=>{a=a?L(v,a):"";throw Error(a);},465551:a=>{a=a?L(v,a):"";throw Error(a);}},Oc,Cd,Pc,db,Ld,Ja;l.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Md={B:(a,b)=>Ka(a)(b),t:function(a,b,c){La=c;try{var d=Q(a);switch(b){case 0:var e=Ma();if(0>e)break;for(;tb[e];)e++;return Jb(d,e).Ra;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=Ma(),d.flags|=e,0;case 12:return e=Ma(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},V:function(a,b){try{var c=Q(a),d=c.node,e=c.qa.Ia;a=e?c:d;e??=d.sa.Ia;Hb(e);var f=e(a);return ec(b,f)}catch(g){if("undefined"==typeof S|| -"ErrnoError"!==g.name)throw g;return-g.ya}},W:function(a,b,c){La=c;try{var d=Q(a);switch(b){case 21509:return d.ua?0:-59;case 21505:if(!d.ua)return-59;if(d.ua.Pa.cc){a=[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];var e=Ma();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.ua?0:-59;case 21506:case 21507:case 21508:if(!d.ua)return-59;if(d.ua.Pa.dc)for(e=Ma(),a=[],f=0;32> -f;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.ua)return-59;e=Ma();return B[e>>2]=0;case 21520:return d.ua?-28:-59;case 21537:case 21531:e=Ma();if(!d.qa.bc)throw new N(59);return d.qa.bc(d,b,e);case 21523:if(!d.ua)return-59;d.ua.Pa.ec&&(f=[24,80],e=Ma(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.ua?0:-59;case 21515:return d.ua?0:-59;default:return-28}}catch(g){if("undefined"==typeof S||"ErrnoError"!==g.name)throw g;return-g.ya}},T:function(a,b){try{return a=a?L(v,a):"",ec(b,Rb(a, -!0))}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return-c.ya}},S:function(a,b,c,d){try{b=b?L(v,b):"";var e=d&256;b=dc(a,b,d&4096);return ec(c,e?Rb(b,!0):Rb(b))}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},u:function(a,b,c,d){La=d;try{b=b?L(v,b):"";b=dc(a,b);var e=d?Ma():0;return Tb(b,c,e).Ra}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},U:function(a,b){try{return a=a?L(v,a):"",ec(b,Rb(a))}catch(c){if("undefined"== -typeof S||"ErrnoError"!==c.name)throw c;return-c.ya}},Y:()=>H(""),e:a=>{var b=fc[a];delete fc[a];var c=b.xb,d=b.La,e=b.Hb,f=e.map(g=>g.Yb).concat(e.map(g=>g.rc));mc([a],f,g=>{var h={};e.forEach((k,n)=>{var p=g[n],m=k.Xa,t=k.Xb,z=g[n+e.length],u=k.qc,w=k.sc;h[k.Ub]={read:x=>p.za(m(t,x)),write:(x,E)=>{var F=[];u(w,x,z.Ca(F,E));gc(F)},optional:g[n].optional}});return[{name:b.name,za:k=>{var n={},p;for(p in h)n[p]=h[p].read(k);d(k);return n},Ca:(k,n)=>{for(var p in h)if(!(p in n||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var m=c();for(p in h)h[p].write(m,n[p]);null!==k&&k.push(d,m);return m},Ma:hc,Ha:d}]})},x:(a,b,c,d,e)=>{b=U(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}T(a,{name:b,za:f,Ca:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},Ma:oc(b,c,!d),Ha:null})},z:(a,b,c,d)=>{b=U(b);T(a,{name:b,za:function(e){return!!e},Ca:function(e,f){return f?c:d},Ma:function(e){return this.za(v[e])},Ha:null})},ga:(a,b,c,d,e,f,g,h,k,n,p,m,t)=>{p=U(p);f=W(e,f);h&&=W(g,h);n&&=W(k,n);t=W(m,t);var z= -zc(p);yc(z,function(){Rc(`Cannot construct ${p} due to unbound types`,[d])});mc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var w=u.va;var x=w.Ta}else x=uc.prototype;u=vc(p,function(...y){if(Object.getPrototypeOf(this)!==E)throw new V(`Use 'new' to construct ${p}`);if(void 0===F.Fb)throw new V(`${p} has no accessible constructor`);var J=F.Fb[y.length];if(void 0===J)throw new V(`Tried to invoke ctor of ${p} with invalid number of parameters (${y.length}) - expected (${Object.keys(F.Fb).toString()}) parameters instead!`); -return J.apply(this,y)});var E=Object.create(x,{constructor:{value:u}});u.prototype=E;var F=new Ac(p,u,E,t,w,f,h,n);if(F.Da){var K;(K=F.Da).zb??(K.zb=[]);F.Da.zb.push(F)}w=new Lc(p,F,!0,!1,!1);K=new Lc(p+"*",F,!1,!1,!1);x=new Lc(p+" const*",F,!1,!0,!1);wc[a]={pointerType:K,Rb:x};Mc(z,u);return[w,K,x]})},m:(a,b,c,d,e,f,g,h)=>{var k=Uc(c,d);b=U(b);b=Vc(b);f=W(e,f);mc([],[a],n=>{function p(){Rc(`Cannot call ${m} due to unbound types`,k)}n=n[0];var m=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&n.va.nc.push(b);var t=n.va.Ta,z=t[b];void 0===z||void 0===z.Aa&&z.className!==n.name&&z.Va===c-2?(p.Va=c-2,p.className=n.name,t[b]=p):(xc(t,b,m),t[b].Aa[c-2]=p);mc([],k,u=>{u=Tc(m,u,n,f,g);void 0===t[b].Aa?(u.Va=c-2,t[b]=u):t[b].Aa[c-2]=u;return[]});return[]})},ha:a=>T(a,Zc),w:(a,b,c)=>{b=U(b);T(a,{name:b,za:d=>d,Ca:(d,e)=>e,Ma:$c(b,c),Ha:null})},k:(a,b,c,d,e,f)=>{var g=Uc(b,c);a=U(a);a=Vc(a);e=W(d,e);yc(a,function(){Rc(`Cannot call ${a} due to unbound types`,g)},b-1);mc([],g,h=>{Mc(a,Tc(a,[h[0], -null].concat(h.slice(1)),null,e,f),b-1);return[]})},l:(a,b,c,d,e)=>{b=U(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}T(a,{name:b,za:f,Ca:(h,k)=>k,Ma:oc(b,c,0!==d),Ha:null})},h:(a,b,c)=>{function d(f){return new e(r.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=U(c);T(a,{name:c,za:d,Ma:d},{$b:!0})},g:a=>{T(a,ad)},y:(a,b)=>{b=U(b);T(a,{name:b,za(c){var d=cc(c+4,D[c>>2],!0); -Pc(c);return d},Ca(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new V("Cannot pass non-string to std::string");var f=e?Wa(d):d.length;var g=Cd(4+f+1),h=g+4;D[g>>2]=f;e?M(d,v,h,f+1):v.set(d,h);null!==c&&c.push(Pc,g);return g},Ma:hc,Ha(c){Pc(c)}})},r:(a,b,c)=>{c=U(c);if(2===b){var d=cd;var e=dd;var f=ed}else d=fd,e=gd,f=hd;T(a,{name:c,za:g=>{var h=d(g+4,D[g>>2]*b,!0);Pc(g);return h},Ca:(g,h)=>{if("string"!= -typeof h)throw new V(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),n=Cd(4+k+b);D[n>>2]=k/b;e(h,n+4,k+b);null!==g&&g.push(Pc,n);return n},Ma:hc,Ha(g){Pc(g)}})},f:(a,b,c,d,e,f)=>{fc[a]={name:U(b),xb:W(c,d),La:W(e,f),Hb:[]}},b:(a,b,c,d,e,f,g,h,k,n)=>{fc[a].Hb.push({Ub:U(b),Yb:c,Xa:W(d,e),Xb:f,rc:g,qc:W(h,k),sc:n})},A:(a,b)=>{b=U(b);T(a,{ic:!0,name:b,za:()=>{},Ca:()=>{}})},E:()=>{Ha=!1;jd=0},d:(a,b,c)=>{var [d,...e]=md(a,b),f=d.Ca.bind(d),g=e.map(k=>k.Ma.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=> -k.name)}) => ${d.name}>`;return ld(vc(b,(k,n,p,m)=>{for(var t=0,z=0;z>2]=Fc(k));return u}))},fa:Yc,ba:a=>{if(!a)return Fc(globalThis);a=od(a);return Fc(globalThis[a])},i:(a,b)=>{a=X(a);b=X(b);return Fc(a[b])},N:a=>{9kd[a](b,c,d,e),ea:()=>Fc([]),da:a=>Fc(od(a)),ca:()=>Fc({}),C:a=> -{var b=X(a);gc(b);Yc(a)},j:(a,b,c)=>{a=X(a);b=X(b);c=X(c);a[b]=c},K:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(pd(a.getFullYear())?qd:rd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},L:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(pd(b.getFullYear())? -qd:rd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},J:function(a,b,c,d,e,f){f=-9007199254740992>f||9007199254740992{sd[a]&&(clearTimeout(sd[a].id),delete sd[a]);if(!b)return 0;var c=setTimeout(()=>{delete sd[a];vd(()=>Ld(a,performance.now()))},b);sd[a]={id:c,Gc:b};return 0},M:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();D[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},n:(a,b,c)=>{wd.length=0;for(var d;d=v[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;wd.push(112==d?D[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]:sa[c>>3]);c+=e?8:4}return Kd[a](...wd)},X:()=>Date.now(),Z:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.Sa[a]=void 0;c.Ib.push(a);0b.readyState&&b.abort()}},I:()=>2147483648,o:()=>performance.now(), -$:()=>!ba,H:a=>{var b=v.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},_:function(a,b,c,d,e){function f(C){t?C():vd(C)}var g=a+108,h=D[g+36>>2],k=D[g+40>>2],n=D[g+44>>2],p=D[g+48>>2],m=D[g+52>>2],t=!!(m&64),z=C=>{f(()=>{h?Ka(h)(C):b?.(C)})},u=C=>{f(()=>{n?Ka(n)(C):d?.(C)})},w=C=>{f(()=>{k?Ka(k)(C): -c?.(C)})},x=C=>{f(()=>{p?Ka(p)(C):e?.(C)})},E=C=>{Bd(C,z,w,u,x)},F=(C,qa)=>{Ed(C,qa.response,Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})},Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})})},K=C=>{Bd(C,F,w,u,x)},y=cc(g+0),J=!!(m&16),I=!!(m&4);m=!!(m&32);if("EM_IDB_STORE"===y)E=D[g+84>>2],Ed(a,v.slice(E,E+D[g+88>>2]),z,w);else if("EM_IDB_DELETE"===y)Gd(a,z,w);else if(J){if(m)return 0;Bd(a,I?F:z,w,u,x)}else Fd(a,z,m?w:I?K:E);return a},Q:(a,b)=>{var c=0,d=0,e;for(e of Jd()){var f=b+c;D[a+d>>2]=f;c+=M(e,v,f,Infinity)+1;d+=4}return 0}, -R:(a,b)=>{var c=Jd();D[a>>2]=c.length;a=0;for(var d of c)a+=Wa(d)+1;D[b>>2]=a;return 0},v:a=>{ma=a;ud(a)},q:function(a){try{var b=Q(a);Ub(b);return 0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ya}},s:function(a,b,c,d){try{a:{var e=Q(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var n=e,p=h,m=k,t=f,z=r;if(0>m||0>t)throw new N(28);if(null===n.Ra)throw new N(8);if(1===(n.flags&2097155))throw new N(8);if(P(n.node.mode))throw new N(31);if(!n.qa.read)throw new N(28); -var u="undefined"!=typeof t;if(!u)t=n.position;else if(!n.seekable)throw new N(70);var w=n.qa.read(n,z,p,m,t);u||(n.position+=w);var x=w;if(0>x){var E=-1;break a}b+=x;if(x>2]=E;return 0}catch(F){if("undefined"==typeof S||"ErrnoError"!==F.name)throw F;return F.ya}},P:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.sb&&0===b&&0===c&&(e.sb=null);return 0}catch(f){if("undefined"== -typeof S||"ErrnoError"!==f.name)throw f;return f.ya}},p:function(a,b,c,d){try{a:{var e=Q(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var n=Wb(e,r,h,k,f);if(0>n){var p=-1;break a}b+=n;if(n>2]=p;return 0}catch(m){if("undefined"==typeof S||"ErrnoError"!==m.name)throw m;return m.ya}},aa:function(){var a=stackTrace(),b=Wa(a)+1,c=Cd(b);M(a,v,c,b);return c},a:wa,D:ud,G:function(a,b){try{return Ra(v.subarray(a,a+b)),0}catch(c){if("undefined"== -typeof S||"ErrnoError"!==c.name)throw c;return c.ya}}}; -function Nd(){function a(){l.calledRun=!0;if(!la){ua=!0;if(!l.noFSInit&&!wb){var b,c;wb=!0;b??=l.stdin;c??=l.stdout;d??=l.stderr;b?$b("/dev","stdin",b):Pb("/dev/tty","/dev/stdin");c?$b("/dev","stdout",null,c):Pb("/dev/tty","/dev/stdout");d?$b("/dev","stderr",null,d):Pb("/dev/tty1","/dev/stderr");Tb("/dev/stdin",0);Tb("/dev/stdout",1);Tb("/dev/stderr",1)}Od.ia();xb=!1;na?.(l);l.onRuntimeInitialized?.();if(l.postRun)for("function"==typeof l.postRun&&(l.postRun=[l.postRun]);l.postRun.length;){var d= -l.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>l.setStatus(""),1);a()},1)):a()}}var Od; -Od=await (async function(){function a(c){c=Od=c.exports;Oc=c.ja;Cd=c.ka;Pc=c.la;db=c.na;Ld=c.oa;Ja=c.ma;return Od}var b={a:Md};if(l.instantiateWasm)return new Promise(c=>{l.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=l.locateFile?l.locateFile?l.locateFile("BlinkIdModule.wasm",fa):fa+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Nd();moduleRtn=ua?l:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.wasm deleted file mode 100755 index 7c6c57b9..00000000 Binary files a/packages/blinkid-wasm/dist/lightweight/advanced/BlinkIdModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.js b/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.js deleted file mode 100644 index 859caf0c..00000000 --- a/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.js +++ /dev/null @@ -1,121 +0,0 @@ -async function createModule(moduleArg={}){var moduleRtn;var l=moduleArg,aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;let ca;(ca=l).expectedDataFileDownloads??(ca.expectedDataFileDownloads=0);l.expectedDataFileDownloads++; -(()=>{var a="undefined"!=typeof ENVIRONMENT_IS_WASM_WORKER&&ENVIRONMENT_IS_WASM_WORKER;"undefined"!=typeof ENVIRONMENT_IS_PTHREAD&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(k,n){var p;(p=l).dataFileDownloads??(p.dataFileDownloads={});try{var m=await fetch(k)}catch(x){throw Error(`Network Error: ${k}`,{e:x});}if(!m.ok)throw Error(`${m.status}: ${m.url}`);p=[];n=Number(m.headers.get("Content-Length")??n);let t=0;l.setStatus?.("Downloading data...");for(m=m.body.getReader();;){var {done:z, -value:u}=await m.read();if(z)break;p.push(u);t+=u.length;l.dataFileDownloads[k]={loaded:t,total:n};let x=0,E=0;for(var w of Object.values(l.dataFileDownloads))x+=w.loaded,E+=w.total;l.setStatus?.(`Downloading data... (${x}/${E})`)}k=new Uint8Array(p.map(x=>x.length).reduce((x,E)=>x+E,0));w=0;for(const x of p)k.set(x,w),w+=x.length;return k.buffer}async function d(k){k.FS_createPath("/","microblink",!0,!0);k.FS_createPath("/microblink","blinkid",!0,!0);for(var n of b.files)k.addRunDependency(`fp ${n.filename}`); -k.addRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.data");k.preloadResults??(k.preloadResults={});k.preloadResults["/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.data"]={Bc:!1};h||=await g;(async function(p){if(!p)throw Error("Loading data file failed.");if(p.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData");p=new Uint8Array(p);for(var m of b.files){var t=m.filename;k.FS_createDataFile(t, -null,p.subarray(m.start,m.end),!0,!0,!0);k.removeRunDependency(`fp ${t}`)}k.removeRunDependency("datafile_/opt/jenkins/root/E2/b/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.data")})(h)}"object"===typeof window?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):"undefined"===typeof process&&"undefined"!==typeof location&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=l.locateFile?.("BlinkIdModule.data", -"")??"BlinkIdModule.data",f=b.remote_package_size,g,h=l.getPreloadedPackage?.(e,f);h||(g=c(e,f));if(l.calledRun)d(l);else{let k;((k=l).preRun??(k.preRun=[])).push(d)}}({files:[{filename:"/microblink/blinkid/Model_07c7ab860e77ec2e92bb822f6d62424b8595a5beb4340f6b2f7f6a4cffa5d050.strop",start:0,end:103198},{filename:"/microblink/blinkid/Model_2880751121560047e6dc571bc8ff4683aeb863886f7c0789234594ceb1e23577.strop",start:103198,end:106933},{filename:"/microblink/blinkid/Model_36d8e94f4cb46097bd6b7385f2aa91fcdee1a5fefeec59e56d1b9e82c94b00a7.strop", -start:106933,end:451389},{filename:"/microblink/blinkid/Model_38a69625879a5def5ed58d768f00e49df43fce8fc74c2e37099b680b526b96df.strop",start:451389,end:775876},{filename:"/microblink/blinkid/Model_3b11c3ffacbbf390b932fb9a7024f1a0016f66281ea8c790f8b5903374ad89c2.strop",start:775876,end:1044597},{filename:"/microblink/blinkid/Model_473ac5f5e256623c0a6b282698c1f1b033b9fb5359e6aa142e9fb4a4022afe4e.strop",start:1044597,end:1051046},{filename:"/microblink/blinkid/Model_5c3ce8ee662bb907221a996cde55d0f4aae47facdfa0b13115f73d03cca0f283.strop", -start:1051046,end:2476219},{filename:"/microblink/blinkid/Model_8c7727da554fd257fa758787ca3d0f517b47f6c5ba791792f516da7dd210fde8.strop",start:2476219,end:3503074},{filename:"/microblink/blinkid/Model_a1516add883f909ebecf9b565238086f8f31bbb3e7fb2113258e3ae7c659555e.strop",start:3503074,end:3798876},{filename:"/microblink/blinkid/Model_b452fd3cd4037080cfcb4c423dba5bc58c8ceafc28427fdf9c5778fb353f088e.strop",start:3798876,end:3805372},{filename:"/microblink/blinkid/Model_c5a91c9c674a51d2243b9fce7804aed845c089b9c5d9ac874bd47dcdb9997422.strop", -start:3805372,end:7911221},{filename:"/microblink/blinkid/Model_d08a72e6ee68dea50b91816dd10ee8a9009d78fb75eee0b332b4ed10d633530f.strop",start:7911221,end:8036425},{filename:"/microblink/blinkid/Model_e89a89677e2469c66d02864bd83e04ceb72f0c95cd943b883875f8796b370495.strop",start:8036425,end:8110870},{filename:"/microblink/blinkid/Model_f2874f5766b779c063dbe30467979163497dc4b29c43bab23d70c798ee32993a.strop",start:8110870,end:8186272},{filename:"/microblink/blinkid/Model_f531088a1f65a31d6ba039e09446fe24c18360080fec3792308ac01514803620.strop", -start:8186272,end:8849325},{filename:"/microblink/blinkid/Model_f64218cba75f4fd879729341a58d376d371def418ab752ac8ff4050d34f6ea10.strop",start:8849325,end:8875623},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:8875623,end:8896092},{filename:"/microblink/blinkid/serialized_embedder_db_1.12.bin",start:8896092,end:12173753}],remote_package_size:12173753})})();l.onAbort=function(a){q("Aborted with message: "+a);try{throw new WebAssembly.RuntimeError(a);}catch(b){q("Stacktrace: "+b.stack)}}; -l="undefined"!==typeof l?l:{};(function(){var a="",b=!1;try{if("undefined"!==typeof self&&self.location&&self.location.href){var c=self.location.href;0===c.indexOf("blob:")&&(a=c,b=!0)}}catch(d){}b&&!l.locateFile&&(l.locateFile=function(d,e){return"BlinkIdModule.wasm"===d?a:e+d})})();var da="./this.program",ea=import.meta.url,fa="",ha,ia; -if(aa||ba){try{fa=(new URL(".",ea)).href}catch{}ba&&(ia=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ha=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ja=console.log.bind(console),q=console.error.bind(console),ka,la=!1,ma,na,oa,r,v,A,pa,B,D,ra,sa,G,ta,ua=!1; -function va(){var a=wa.buffer;r=new Int8Array(a);A=new Int16Array(a);v=new Uint8Array(a);pa=new Uint16Array(a);B=new Int32Array(a);D=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);G=new BigInt64Array(a);ta=new BigUint64Array(a)}var wa;function H(a){l.onAbort?.(a);a="Aborted("+a+")";q(a);la=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");oa?.(a);throw a;}var xa; -async function ya(a){if(!ka)try{var b=await ha(a);return new Uint8Array(b)}catch{}if(a==xa&&ka)a=new Uint8Array(ka);else if(ia)a=ia(a);else throw"both async and sync fetching of the wasm failed";return a}async function za(a,b){try{var c=await ya(a);return await WebAssembly.instantiate(c,b)}catch(d){q(`failed to asynchronously prepare wasm: ${d}`),H(d)}} -async function Aa(a){var b=xa;if(!ka)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){q(`wasm streaming compile failed: ${d}`),q("falling back to ArrayBuffer instantiation")}return za(b,a)}class Ba{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}} -var Ca=a=>{for(;0{var a=l.preRun.shift();Ea.push(a)},Ha=!0,Ia=[],Ka=a=>{var b=Ia[a];b||(Ia[a]=b=Ja.get(a));return b},L=()=>{var a=B[+La>>2];La+=4;return a},Ma=(a,b)=>{for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Na=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=Ma(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b? -"/":"")+a},Oa=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Pa=()=>a=>crypto.getRandomValues(a),Qa=a=>{(Qa=Pa())(a)},Ra=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:"/";if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=Ma(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."}, -Sa=globalThis.TextDecoder&&new TextDecoder,Ta=(a,b,c,d)=>{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},M=(a,b=0,c,d)=>{c=Ta(a,b,c,d);if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}, -Ua=[],Va=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},N=(a,b,c,d)=>{if(!(0=g){if(c>=d)break;b[c++]=g}else if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]= -128|g&63;f++}}b[c]=0;return c-e},Wa=a=>{var b=Array(Va(a)+1);a=N(a,b,0,b.length);b.length=a;return b},Xa=[];function Ya(a,b){Xa[a]={input:[],output:[],Oa:b};Za(a,$a)} -var $a={open(a){var b=Xa[a.node.$a];if(!b)throw new O(43);a.ta=b;a.seekable=!1},close(a){a.ta.Oa.fb(a.ta)},fb(a){a.ta.Oa.fb(a.ta)},read(a,b,c,d){if(!a.ta||!a.ta.Oa.Hb)throw new O(60);for(var e=0,f=0;f{a=65536*Math.ceil(a/65536);var b=cb(65536,a);b&&v.fill(0,b,b+a);return b},P={Ja:null,Na(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new O(63);P.Ja||(P.Ja={dir:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma,Xa:P.ra.Xa,ib:P.ra.ib,Mb:P.ra.Mb,mb:P.ra.mb,Nb:P.ra.Nb,wb:P.ra.wb,lb:P.ra.lb},stream:{Ia:P.qa.Ia}}, -file:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma},stream:{Ia:P.qa.Ia,read:P.qa.read,write:P.qa.write,tb:P.qa.tb,Kb:P.qa.Kb}},link:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma,ab:P.ra.ab},stream:{}},Bb:{node:{Ha:P.ra.Ha,Ma:P.ra.Ma},stream:eb}});c=fb(a,b,c,d);Q(c.mode)?(c.ra=P.Ja.dir.node,c.qa=P.Ja.dir.stream,c.pa={}):32768===(c.mode&61440)?(c.ra=P.Ja.file.node,c.qa=P.Ja.file.stream,c.wa=0,c.pa=null):40960===(c.mode&61440)?(c.ra=P.Ja.link.node,c.qa=P.Ja.link.stream):8192===(c.mode&61440)&&(c.ra=P.Ja.Bb.node,c.qa=P.Ja.Bb.stream); -c.Pa=c.Ea=c.Da=Date.now();a&&(a.pa[b]=c,a.Pa=a.Ea=a.Da=c.Pa);return c},Cc(a){return a.pa?a.pa.subarray?a.pa.subarray(0,a.wa):new Uint8Array(a.pa):new Uint8Array(0)},ra:{Ha(a){var b={};b.Rb=8192===(a.mode&61440)?a.id:1;b.$b=a.id;b.mode=a.mode;b.jc=1;b.uid=0;b.Yb=0;b.$a=a.$a;b.size=Q(a.mode)?4096:32768===(a.mode&61440)?a.wa:40960===(a.mode&61440)?a.link.length:0;b.Pa=new Date(a.Pa);b.Ea=new Date(a.Ea);b.Da=new Date(a.Da);b.Ob=4096;b.Pb=Math.ceil(b.size/b.Ob);return b},Ma(a,b){for(var c of["mode","atime", -"mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.wa!=b&&(0==b?(a.pa=null,a.wa=0):(c=a.pa,a.pa=new Uint8Array(b),c&&a.pa.set(c.subarray(0,Math.min(b,a.wa))),a.wa=b)))},Xa(){P.ob||(P.ob=new O(44),P.ob.stack="");throw P.ob;},ib(a,b,c,d){return P.createNode(a,b,c,d)},Mb(a,b,c){try{var d=gb(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.pa)throw new O(55);hb(d)}delete a.parent.pa[a.name];b.pa[c]=a;a.name=c;b.Da=b.Ea=a.parent.Da=a.parent.Ea=Date.now()},mb(a, -b){delete a.pa[b];a.Da=a.Ea=Date.now()},Nb(a,b){var c=gb(a,b),d;for(d in c.pa)throw new O(55);delete a.pa[b];a.Da=a.Ea=Date.now()},wb(a){return[".","..",...Object.keys(a.pa)]},lb(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},ab(a){if(40960!==(a.mode&61440))throw new O(28);return a.link}},qa:{read(a,b,c,d,e){var f=a.node.pa;if(e>=a.node.wa)return 0;a=Math.min(a.node.wa-e,d);if(8=f||(f=Math.max(f,g*(1048576>g?2:1.125)>>>0),0!=g&&(f=Math.max(f,256)),g=a.pa,a.pa=new Uint8Array(f),0b)throw new O(28);return b},tb(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new O(43);a=a.node.pa;if(e&2||!a||a.buffer!==r.buffer){d=!0;e=db(b);if(!e)throw new O(48);if(a){if(0{var c=0;a&&(c|=365);b&&(c|=146);return c},jb=async a=>{a=await ha(a);return new Uint8Array(a)},kb=0,lb=null,mb=()=>{kb--;l.monitorRunDependencies?.(kb);if(0==kb&&lb){var a=lb;lb=null;a()}},nb=()=>{kb++;l.monitorRunDependencies?.(kb)},ob=[],pb=async(a,b)=>{"undefined"!=typeof Browser&&Browser.Dc();for(var c of ob)if(c.canHandle(b))return c.handle(a,b);return a},qb=null,rb={},sb=[],tb=1,ub=null,vb=!1,wb=!0,xb={},O=class{name="ErrnoError";constructor(a){this.ya=a}},yb=class{kb={};node=null;get object(){return this.node}set object(a){this.node= -a}get flags(){return this.kb.flags}set flags(a){this.kb.flags=a}get position(){return this.kb.position}set position(a){this.kb.position=a}},zb=class{ra={};qa={};jb=365;nb=146;Ya=null;constructor(a,b,c,d){a||=this;this.parent=a;this.Na=a.Na;this.id=tb++;this.name=b;this.mode=c;this.$a=d;this.Pa=this.Ea=this.Da=Date.now()}get read(){return(this.mode&this.jb)===this.jb}set read(a){a?this.mode|=this.jb:this.mode&=~this.jb}get write(){return(this.mode&this.nb)===this.nb}set write(a){a?this.mode|=this.nb: -this.mode&=~this.nb}get fc(){return Q(this.mode)}get ec(){return 8192===(this.mode&61440)}}; -function Ab(a,b={}){if(!a)throw new O(44);b.pb??(b.pb=!0);"/"===a.charAt(0)||(a="//"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(h=>!!h);for(var d=qb,e="/",f=0;f>>0)%ub.length} -function hb(a){var b=Cb(a.parent.id,a.name);if(ub[b]===a)ub[b]=a.Ta;else for(b=ub[b];b;){if(b.Ta===a){b.Ta=a.Ta;break}b=b.Ta}}function gb(a,b){var c=Q(a.mode)?(c=Db(a,"x"))?c:a.ra.Xa?0:2:54;if(c)throw new O(c);for(c=ub[Cb(a.id,b)];c;c=c.Ta){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ra.Xa(a,b)}function fb(a,b,c,d){a=new zb(a,b,c,d);b=Cb(a.parent.id,a.name);a.Ta=ub[b];return ub[b]=a}function Q(a){return 16384===(a&61440)} -function Eb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Db(a,b){if(wb)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Fb(a,b){if(!Q(a.mode))return 54;try{return gb(a,b),20}catch(c){}return Db(a,"wx")}function Gb(a){if(!a)throw new O(63);return a}function Hb(a){a=sb[a];if(!a)throw new O(8);return a} -function Ib(a,b=-1){a=Object.assign(new yb,a);if(-1==b)a:{for(b=0;4096>=b;b++)if(!sb[b])break a;throw new O(33);}a.Qa=b;return sb[b]=a}function Jb(a,b=-1){a=Ib(a,b);a.qa?.Ac?.(a);return a}function Kb(a,b){var c=null?.qa.Ma,d=c?null:a;c??=a.ra.Ma;Gb(c);c(d,b)}var eb={open(a){a.qa=rb[a.node.$a].qa;a.qa.open?.(a)},Ia(){throw new O(70);}};function Za(a,b){rb[a]={qa:b}} -function Lb(a,b){var c="/"===b;if(c&&qb)throw new O(10);if(!c&&b){var d=Ab(b,{pb:!1});b=d.path;d=d.node;if(d.Ya)throw new O(10);if(!Q(d.mode))throw new O(54);}b={type:a,Ec:{},Jb:b,ic:[]};a=a.Na(b);a.Na=b;b.root=a;c?qb=a:d&&(d.Ya=b,d.Na&&d.Na.ic.push(b))}function Mb(a,b,c){var d=Ab(a,{parent:!0}).node;a=a&&a.match(/([^\/]+|\/)\/*$/)[1];if(!a)throw new O(28);if("."===a||".."===a)throw new O(20);var e=Fb(d,a);if(e)throw new O(e);if(!d.ra.ib)throw new O(63);return d.ra.ib(d,a,b,c)} -function Nb(a,b=438){return Mb(a,b&4095|32768,0)}function R(a){return Mb(a,16895,0)}function Ob(a,b,c){"undefined"==typeof c&&(c=b,b=438);return Mb(a,b|8192,c)}function Pb(a,b){if(!Ra(a))throw new O(44);var c=Ab(b,{parent:!0}).node;if(!c)throw new O(44);b=b&&b.match(/([^\/]+|\/)\/*$/)[1];var d=Fb(c,b);if(d)throw new O(d);if(!c.ra.lb)throw new O(63);c.ra.lb(c,b,a)} -function Qb(a){var b=Ab(a,{parent:!0}).node;if(!b)throw new O(44);a=a&&a.match(/([^\/]+|\/)\/*$/)[1];var c=gb(b,a);a:{try{var d=gb(b,a)}catch(f){d=f.ya;break a}var e=Db(b,"wx");d=e?e:Q(d.mode)?31:0}if(d)throw new O(d);if(!b.ra.mb)throw new O(63);if(c.Ya)throw new O(10);b.ra.mb(b,a);hb(c)}function Rb(a,b){a=Ab(a,{eb:!b}).node;return Gb(a.ra.Ha)(a)}function Sb(a,b){a="string"==typeof a?Ab(a,{eb:!0}).node:a;Kb(a,{mode:b&4095|a.mode&-4096,Da:Date.now(),zc:void 0})} -function Tb(a,b,c=438){if(""===a)throw new O(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=Ab(a,{eb:!(b&131072),kc:!0});d=a.node;a=a.path}var f=!1;if(b&64)if(d){if(b&128)throw new O(20);}else{if(e)throw new O(31);d=Mb(a,c|511,0);f=!0}if(!d)throw new O(44);8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O(54); -if(!f&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Eb(b)||b&576)?31:Db(d,Eb(b)):44))throw new O(e);if(b&512&&!f){e=d;e="string"==typeof e?Ab(e,{eb:!0}).node:e;if(Q(e.mode))throw new O(31);if(32768!==(e.mode&61440))throw new O(28);var g=Db(e,"w");if(g)throw new O(g);Kb(e,{size:0,timestamp:Date.now()})}b&=-131713;e=Ib({node:d,path:Bb(d),flags:b,seekable:!0,position:0,qa:d.qa,tc:[],error:!1});e.qa.open&&e.qa.open(e);f&&Sb(d,c&511);!l.logReadFiles||b&1||a in xb||(xb[a]=1);return e} -function Ub(a){if(null===a.Qa)throw new O(8);a.qb&&(a.qb=null);try{a.qa.close&&a.qa.close(a)}catch(b){throw b;}finally{sb[a.Qa]=null}a.Qa=null}function Vb(a,b,c){if(null===a.Qa)throw new O(8);if(!a.seekable||!a.qa.Ia)throw new O(70);if(0!=c&&1!=c&&2!=c)throw new O(28);a.position=a.qa.Ia(a,b,c);a.tc=[]} -function Wb(a,b,c,d,e,f){if(0>d||0>e)throw new O(28);if(null===a.Qa)throw new O(8);if(0===(a.flags&2097155))throw new O(8);if(Q(a.node.mode))throw new O(31);if(!a.qa.write)throw new O(28);a.seekable&&a.flags&1024&&Vb(a,0,2);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O(70);b=a.qa.write(a,b,c,d,e,f);g||(a.position+=b);return b} -function Xb(a,b){a="string"==typeof a?a:Bb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Na(a+"/"+c);try{R(d)}catch(e){if(20!=e.ya)throw e;}a=d}}return d}function Yb(a,b,c,d){a=Na(("string"==typeof a?a:Bb(a))+"/"+b);return Nb(a,ib(c,d))} -function Zb(a,b,c,d,e,f){var g=b;a&&(a="string"==typeof a?a:Bb(a),g=b?Na(a+"/"+b):a);a=ib(d,e);g=Nb(g,a);if(c){if("string"==typeof c){b=Array(c.length);d=0;for(e=c.length;d=m.length)return 0;u=Math.min(m.length-w,u);if(m.slice)for(var x=0;xthis.length-1||0>m)){var t=m%this.Cb;return this.Wa(m/this.Cb|0)[t]}}oc(m){this.Wa=m}Ab(){var m=new XMLHttpRequest;m.open("HEAD",c,!1);m.send(null);200<=m.status&&300>m.status||304===m.status||H("Couldn't load "+c+". Status: "+m.status);var t=Number(m.getResponseHeader("Content-length")), -z,u=(z=m.getResponseHeader("Accept-Ranges"))&&"bytes"===z;m=(z=m.getResponseHeader("Content-Encoding"))&&"gzip"===z;var w=1048576;u||(w=t);var x=this;x.oc(E=>{var F=E*w,K=(E+1)*w-1;K=Math.min(K,t-1);if("undefined"==typeof x.cb[E]){var y=x.cb;F>K&&H("invalid range ("+F+", "+K+") or no bytes requested!");K>t-1&&H("only "+t+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);t!==w&&J.setRequestHeader("Range","bytes="+F+"-"+K);J.responseType="arraybuffer";J.overrideMimeType&& -J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);200<=J.status&&300>J.status||304===J.status||H("Couldn't load "+c+". Status: "+J.status);F=void 0!==J.response?new Uint8Array(J.response||[]):Wa(J.responseText||"");y[E]=F}"undefined"==typeof x.cb[E]&&H("doXHR failed!");return x.cb[E]});if(m||!t)w=t=1,w=t=this.Wa(0).length,ja("LazyFiles on gzip forces download of the whole file when length is accessed");this.zb=t;this.yb=w;this.sb=!0}get length(){this.sb||this.Ab();return this.zb}get Cb(){this.sb|| -this.Ab();return this.yb}}if(globalThis.XMLHttpRequest){ba||H("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var k=void 0}else k=c,h=void 0;var n=Yb(a,b,d,e);h?n.pa=h:k&&(n.pa=null,n.url=k);Object.defineProperties(n,{wa:{get:function(){return this.pa.length}}});var p={};Object.keys(n.qa).forEach(m=>{var t=n.qa[m];p[m]=(...z)=>{ac(n);return t(...z)}});p.read=(m,t,z,u,w)=>{ac(n);return f(m,t,z,u,w)};p.tb=(m,t,z)=>{ac(n); -var u=db(t);if(!u)throw new O(48);f(m,r,u,t,z);return{sa:u,Ra:!0}};n.qa=p;return n}var S={},cc=(a,b,c)=>a?M(v,a,b,c):"";function dc(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?"/":Hb(a).path;if(0==b.length){if(!c)throw new O(44);return a}return a+"/"+b} -function ec(a,b){D[a>>2]=b.Rb;D[a+4>>2]=b.mode;D[a+8>>2]=b.jc;D[a+12>>2]=b.uid;D[a+16>>2]=b.Yb;D[a+20>>2]=b.$a;G[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.Pb;var c=b.Pa.getTime(),d=b.Ea.getTime(),e=b.Da.getTime();G[a+40>>3]=BigInt(Math.floor(c/1E3));D[a+48>>2]=c%1E3*1E6;G[a+56>>3]=BigInt(Math.floor(d/1E3));D[a+64>>2]=d%1E3*1E6;G[a+72>>3]=BigInt(Math.floor(e/1E3));D[a+80>>2]=e%1E3*1E6;G[a+88>>3]=BigInt(b.$b);return 0}var La=void 0,fc={},gc=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}}; -function hc(a){return this.xa(D[a>>2])} -var ic={},jc={},kc={},lc=class extends Error{constructor(a){super(a);this.name="InternalError"}},mc=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new lc("Mismatched type converter count");for(var k=0;kkc[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{jc.hasOwnProperty(h)?e[k]=jc[h]:(f.push(h),ic.hasOwnProperty(h)||(ic[h]=[]),ic[h].push(()=>{e[k]=jc[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)},U=a=>{for(var b="";;){var c=v[a++];if(!c)return b; -b+=String.fromCharCode(c)}},V=class extends Error{constructor(a){super(a);this.name="BindingError"}};function nc(a,b,c={}){var d=b.name;if(!a)throw new V(`type "${d}" must have a positive integer typeid pointer`);if(jc.hasOwnProperty(a)){if(c.Zb)return;throw new V(`Cannot register type '${d}' twice`);}jc[a]=b;delete kc[a];ic.hasOwnProperty(a)&&(b=ic[a],delete ic[a],b.forEach(e=>e()))}function T(a,b,c={}){return nc(a,b,c)} -var oc=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>v[d];case 2:return c?d=>A[d>>1]:d=>pa[d>>1];case 4:return c?d=>B[d>>2]:d=>D[d>>2];case 8:return c?d=>G[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},pc=a=>{throw new V(a.oa.va.ua.name+" instance already deleted");},qc=!1,rc=()=>{},sc=a=>{if(!globalThis.FinalizationRegistry)return sc=b=>b,a;qc=new FinalizationRegistry(b=>{b=b.oa;--b.count.value;0===b.count.value&&(b.Aa?b.Fa.Ka(b.Aa):b.va.ua.Ka(b.sa))});sc= -b=>{var c=b.oa;c.Aa&&qc.register(b,{oa:c},b);return b};rc=b=>{qc.unregister(b)};return sc(a)},tc=[];function uc(){} -var vc=(a,b)=>Object.defineProperty(b,"name",{value:a}),wc={},xc=(a,b,c)=>{if(void 0===a[b].za){var d=a[b];a[b]=function(...e){if(!a[b].za.hasOwnProperty(e.length))throw new V(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].za})!`);return a[b].za[e.length].apply(this,e)};a[b].za=[];a[b].za[d.Ua]=d}},yc=(a,b,c)=>{if(l.hasOwnProperty(a)){if(void 0===c||void 0!==l[a].za&&void 0!==l[a].za[c])throw new V(`Cannot register public name '${a}' twice`);xc(l, -a,a);if(l[a].za.hasOwnProperty(c))throw new V(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);l[a].za[c]=b}else l[a]=b,l[a].Ua=c},zc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function Ac(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Sa=c;this.Ka=d;this.Ca=e;this.Ub=f;this.bb=g;this.Sb=h;this.mc=[]} -var Bc=(a,b,c)=>{for(;b!==c;){if(!b.bb)throw new V(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.bb(a);b=b.Ca}return a},Cc=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}; -function Dc(a,b){if(null===b){if(this.rb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.oa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.oa.sa)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);return Bc(b.oa.sa,b.oa.va.ua,this.ua)} -function Ec(a,b){if(null===b){if(this.rb)throw new V(`null is not a valid ${this.name}`);if(this.hb){var c=this.vb();null!==a&&a.push(this.Ka,c);return c}return 0}if(!b||!b.oa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.oa.sa)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.gb&&b.oa.va.gb)throw new V(`Cannot convert argument of type ${b.oa.Fa?b.oa.Fa.name:b.oa.va.name} to parameter type ${this.name}`);c=Bc(b.oa.sa,b.oa.va.ua,this.ua);if(this.hb){if(void 0=== -b.oa.Aa)throw new V("Passing raw pointer to smart pointer is illegal");switch(this.sc){case 0:if(b.oa.Fa===this)c=b.oa.Aa;else throw new V(`Cannot convert argument of type ${b.oa.Fa?b.oa.Fa.name:b.oa.va.name} to parameter type ${this.name}`);break;case 1:c=b.oa.Aa;break;case 2:if(b.oa.Fa===this)c=b.oa.Aa;else{var d=b.clone();c=this.nc(c,Fc(()=>d["delete"]()));null!==a&&a.push(this.Ka,c)}break;default:throw new V("Unsupporting sharing policy");}}return c} -function Gc(a,b){if(null===b){if(this.rb)throw new V(`null is not a valid ${this.name}`);return 0}if(!b.oa)throw new V(`Cannot pass "${Cc(b)}" as a ${this.name}`);if(!b.oa.sa)throw new V(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.oa.va.gb)throw new V(`Cannot convert argument of type ${b.oa.va.name} to parameter type ${this.name}`);return Bc(b.oa.sa,b.oa.va.ua,this.ua)} -var Hc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Ca)return null;a=Hc(a,b,c.Ca);return null===a?null:c.Sb(a)},Ic={},Jc=(a,b)=>{if(void 0===b)throw new V("ptr should not be undefined");for(;a.Ca;)b=a.bb(b),a=a.Ca;return Ic[b]},Kc=(a,b)=>{if(!b.va||!b.sa)throw new lc("makeClassHandle requires ptr and ptrType");if(!!b.Fa!==!!b.Aa)throw new lc("Both smartPtrType and smartPtr must be specified");b.count={value:1};return sc(Object.create(a,{oa:{value:b,writable:!0}}))}; -function Lc(a,b,c,d,e,f,g,h,k,n,p){this.name=a;this.ua=b;this.rb=c;this.gb=d;this.hb=e;this.lc=f;this.sc=g;this.Lb=h;this.vb=k;this.nc=n;this.Ka=p;e||void 0!==b.Ca?this.Ba=Ec:(this.Ba=d?Dc:Gc,this.Ga=null)}var Mc=(a,b,c)=>{if(!l.hasOwnProperty(a))throw new lc("Replacing nonexistent public symbol");void 0!==l[a].za&&void 0!==c?l[a].za[c]=b:(l[a]=b,l[a].Ua=c)},W=(a,b)=>{a=U(a);var c=Ka(b);if("function"!=typeof c)throw new V(`unknown function pointer with signature ${a}: ${b}`);return c}; -class Nc extends Error{}var Qc=a=>{a=Oc(a);var b=U(a);Pc(a);return b},Rc=(a,b)=>{function c(f){e[f]||jc[f]||(kc[f]?kc[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Nc(`${a}: `+d.map(Qc).join([", "]));};function Sc(a){for(var b=1;bf)throw new V("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,h=Sc(b),k=!b[0].hc,n=f-2,p=Array(n),m=[],t=[];return vc(a,function(...z){t.length=0;m.length=g?2:1;m[0]=e;if(g){var u=b[1].Ba(t,this);m[1]=u}for(var w=0;w{for(var c=[],d=0;d>2]);return c},Vc=a=>{a=a.trim();const b=a.indexOf("(");return-1===b?a:a.slice(0,b)},Wc=[],Xc=[0,1,,1,null,1,!0,1,!1,1],Yc=a=>{9{if(!a)throw new V(`Cannot use deleted val. handle = ${a}`);return Xc[a]},Fc=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Wc.pop()||Xc.length;Xc[b]=a;Xc[b+1]=1;return b}},Zc={name:"emscripten::val",xa:a=>{var b= -X(a);Yc(a);return b},Ba:(a,b)=>Fc(b),La:hc,Ga:null},$c=(a,b)=>{switch(b){case 4:return function(c){return this.xa(ra[c>>2])};case 8:return function(c){return this.xa(sa[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ad=Object.assign({optional:!0},Zc),bd=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,cd=(a,b,c)=>{a>>=1;b=Ta(pa,a,b/2,c);if(16{c??=2147483647; -if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;A[b>>1]=0;return b-d},ed=a=>2*a.length,fd=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=D[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},gd=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e>2]=f;b+=4;if(b+4>c)break}B[b>>2]=0;return b-d},hd=a=>{for(var b=0,c=0;c{var b=kd.length;kd.push(a);return b},md=(a,b)=>{for(var c=Array(a),d=0;d>2],g=jc[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Qc(f)}`,new V(a);c[e]=g}return c},nd={},od=a=>{var b=nd[a];return void 0===b?U(a):b},pd=a=>0===a%4&&(0!==a%100||0===a%400),qd=[0,31,60,91,121,152,182,213,244,274,305,335],rd=[0,31,59,90,120,151,181,212,243,273,304,334],sd={},td=a=>{if(!(a instanceof Ba||"unwind"==a))throw a;},ud=a=>{ma=a;Ha|| -0{if(!la)try{if(a(),!(Ha||0{try{var c=indexedDB.open("emscripten_filesystem",1)}catch(d){return b(d)}c.onupgradeneeded=d=>{d=d.target.result;d.objectStoreNames.contains("FILES")&&d.deleteObjectStore("FILES");d.createObjectStore("FILES")};c.onsuccess=d=>a(d.target.result);c.onerror=b})}var Y,Ad; -function Bd(a,b,c,d,e){function f(){var I=0,C=0;y.response&&E&&0===D[a+12>>2]&&(C=y.response.byteLength);0>2]=I;Z(a+16,C);Z(a+24,0);(I=y.response?y.response.byteLength:0)&&Z(a+32,I);A[a+40>>1]=y.readyState;A[a+42>>1]=y.status;y.statusText&&N(y.statusText,v,a+44,64);K&&(I=Dd(y.responseURL),D[a+200>>2]=I)}var g=D[a+8>>2];if(g){var h=g?M(v,g):"",k=a+108,n=cc(k+0);n||="GET";var p=D[k+56>>2],m=D[k+68>>2],t=D[k+72>>2];g=D[k+76>>2];var z=D[k+80>>2], -u=D[k+84>>2],w=D[k+88>>2],x=D[k+52>>2],E=!!(x&1),F=!!(x&2),K=!!(x&64);m=m?m?M(v,m):"":void 0;t=t?t?M(v,t):"":void 0;var y=new XMLHttpRequest;y.withCredentials=!!v[k+60];y.open(n,h,!K,m,t);K||(y.timeout=p);y.Gc=h;y.responseType="arraybuffer";z&&(h=z?M(v,z):"",y.overrideMimeType(h));if(g)for(;;){k=D[g>>2];if(!k)break;h=D[g+4>>2];if(!h)break;g+=8;k=k?M(v,k):"";h=h?M(v,h):"";y.setRequestHeader(k,h)}var J=xd(y);D[a>>2]=J;g=u&&w?v.slice(u,u+w):null;y.onload=I=>{Y.has(J)&&(f(),200<=y.status&&300>y.status? -b(a,y,I):c(a,I))};y.onerror=I=>{Y.has(J)&&(f(),c(a,I))};y.ontimeout=I=>{Y.has(J)&&c(a,I)};y.onprogress=I=>{if(Y.has(J)){var C=E&&F&&y.response?y.response.byteLength:0,qa=0;0>2]=qa;Z(a+16,C);Z(a+24,I.loaded-C);Z(a+32,I.total);A[a+40>>1]=y.readyState;C=y.status;3<=y.readyState&&0===y.status&&0>1]=C;y.statusText&&N(y.statusText,v,a+44,64);d(a,I);Pc(qa)}};y.onreadystatechange=I=>{if(Y.has(J)){A[a+40>>1]=y.readyState; -2<=y.readyState&&(A[a+42>>1]=y.status);if(!K&&2===y.readyState&&0>2]=C}e(a,I)}};try{y.send(g)}catch(I){c(a,I)}}else c(a,"no url specified!")}var Z=(a,b)=>{D[a>>2]=b;D[a+4>>2]=(b-D[a>>2])/4294967296},Dd=a=>{var b=Va(a)+1,c=Cd(b);c&&N(a,v,c,b);return c}; -function Ed(a,b,c,d){var e=Ad;if(e){var f=D[a+108+64>>2];f||=D[a+8>>2];var g=f?M(v,f):"";try{var h=e.transaction(["FILES"],"readwrite").objectStore("FILES").put(b,g);h.onsuccess=()=>{A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);c(a,0,g)};h.onerror=k=>{A[a+40>>1]=4;A[a+42>>1]=413;N("Payload Too Large",v,a+44,64);d(a,0,k)}}catch(k){d(a,0,k)}}else d(a,0,"IndexedDB not available!")} -function Fd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readonly").objectStore("FILES").get(e);f.onsuccess=g=>{if(g.target.result){g=g.target.result;var h=g.byteLength||g.length,k=Cd(h);v.set(new Uint8Array(g),k);D[a+12>>2]=k;Z(a+16,h);Z(a+24,0);Z(a+32,h);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)}else A[a+40>>1]=4,A[a+42>>1]=404,N("Not Found",v,a+44,64),c(a,0,"no data")};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found", -v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -function Gd(a,b,c){var d=Ad;if(d){var e=D[a+108+64>>2];e||=D[a+8>>2];e=e?M(v,e):"";try{var f=d.transaction(["FILES"],"readwrite").objectStore("FILES").delete(e);f.onsuccess=g=>{g=g.target.result;D[a+12>>2]=0;Z(a+16,0);Z(a+24,0);Z(a+32,0);A[a+40>>1]=4;A[a+42>>1]=200;N("OK",v,a+44,64);b(a,0,g)};f.onerror=g=>{A[a+40>>1]=4;A[a+42>>1]=404;N("Not Found",v,a+44,64);c(a,0,g)}}catch(g){c(a,0,g)}}else c(a,0,"IndexedDB not available!")} -var Hd={},Jd=()=>{if(!Id){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in Hd)void 0===Hd[b]?delete a[b]:a[b]=Hd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Id=c}return Id},Id;ub=Array(4096);Lb(P,"/");R("/tmp");R("/home");R("/home/web_user"); -(function(){R("/dev");Za(259,{read:()=>0,write:(d,e,f,g)=>g,Ia:()=>0});Ob("/dev/null",259);Ya(1280,ab);Ya(1536,bb);Ob("/dev/tty",1280);Ob("/dev/tty1",1536);var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(Qa(a),b=a.byteLength);return a[--b]};$b("/dev","random",c);$b("/dev","urandom",c);R("/dev/shm");R("/dev/shm/tmp")})(); -(function(){R("/proc");var a=R("/proc/self");R("/proc/self/fd");Lb({Na(){var b=fb(a,"fd",16895,73);b.qa={Ia:P.qa.Ia};b.ra={Xa(c,d){c=+d;var e=Hb(c);c={parent:null,Na:{Jb:"fake"},ra:{ab:()=>e.path},id:c+1};return c.parent=c},wb(){return Array.from(sb.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},"/proc/self/fd")})(); -(()=>{let a=uc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof uc&&c instanceof uc))return!1;var d=this.oa.va.ua,e=this.oa.sa;c.oa=c.oa;var f=c.oa.va.ua;for(c=c.oa.sa;d.Ca;)e=d.bb(e),d=d.Ca;for(;f.Ca;)c=f.bb(c),f=f.Ca;return d===f&&e===c},clone:function(){this.oa.sa||pc(this);if(this.oa.Za)return this.oa.count.value+=1,this;var c=sc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.oa;c=c(e.call(d,f,{oa:{value:{count:g.count,Va:g.Va,Za:g.Za,sa:g.sa,va:g.va,Aa:g.Aa,Fa:g.Fa}}})); -c.oa.count.value+=1;c.oa.Va=!1;return c},["delete"](){this.oa.sa||pc(this);if(this.oa.Va&&!this.oa.Za)throw new V("Object already scheduled for deletion");rc(this);var c=this.oa;--c.count.value;0===c.count.value&&(c.Aa?c.Fa.Ka(c.Aa):c.va.ua.Ka(c.sa));this.oa.Za||(this.oa.Aa=void 0,this.oa.sa=void 0)},isDeleted:function(){return!this.oa.sa},deleteLater:function(){this.oa.sa||pc(this);if(this.oa.Va&&!this.oa.Za)throw new V("Object already scheduled for deletion");tc.push(this);this.oa.Va=!0;return this}}); -const b=Symbol.dispose;b&&(a[b]=a["delete"])})(); -Object.assign(Lc.prototype,{Vb(a){this.Lb&&(a=this.Lb(a));return a},Eb(a){this.Ka?.(a)},La:hc,xa:function(a){function b(){return this.hb?Kc(this.ua.Sa,{va:this.lc,sa:c,Fa:this,Aa:a}):Kc(this.ua.Sa,{va:this,sa:a})}var c=this.Vb(a);if(!c)return this.Eb(a),null;var d=Jc(this.ua,c);if(void 0!==d){if(0===d.oa.count.value)return d.oa.sa=c,d.oa.Aa=a,d.clone();d=d.clone();this.Eb(a);return d}d=this.ua.Ub(c);d=wc[d];if(!d)return b.call(this);d=this.gb?d.Qb:d.pointerType;var e=Hc(c,this.ua,d.ua);return null=== -e?b.call(this):this.hb?Kc(d.ua.Sa,{va:d,sa:e,Fa:this,Aa:a}):Kc(d.ua.Sa,{va:d,sa:e})}});(async function(){Y=new yd;nb("library_fetch_init");try{Ad=await zd()}catch(a){Ad=!1}finally{mb("library_fetch_init")}})();wa=l.wasmMemory?l.wasmMemory:new WebAssembly.Memory({initial:(l.INITIAL_MEMORY||209715200)/65536,maximum:32768});va();l.noExitRuntime&&(Ha=l.noExitRuntime);l.preloadPlugins&&(ob=l.preloadPlugins);l.print&&(ja=l.print);l.printErr&&(q=l.printErr);l.wasmBinary&&(ka=l.wasmBinary); -l.thisProgram&&(da=l.thisProgram);if(l.preInit)for("function"==typeof l.preInit&&(l.preInit=[l.preInit]);0{var k=b?Ra(Na(a+"/"+b)):a,n=`cp ${k}`;nb(n);try{var p=c;"string"==typeof c&&(p=await jb(c));p=await pb(p,k);h?.();f||Zb(a,b,p,d,e,g)}finally{mb(n)}};l.FS_unlink=(...a)=>Qb(...a);l.FS_createPath=(...a)=>Xb(...a);l.FS_createDevice=(...a)=>$b(...a); -l.FS_createDataFile=(...a)=>Zb(...a);l.FS_createLazyFile=(...a)=>bc(...a);var Kd={464985:(a,b,c,d)=>{a=a?M(v,a):"";b=b?M(v,b):"";c=c?M(v,c):"";d=d?M(v,d):"";throw Error(a+b+c+d);},465201:(a,b)=>{a=a?M(v,a):"";b=b?M(v,b):"";throw Error(a+b);},465311:a=>{a=a?M(v,a):"";throw Error(a);},465375:a=>{a=a?M(v,a):"";throw Error(a);},465439:a=>{a=a?M(v,a):"";throw Error(a);}},Oc,Cd,Pc,cb,Ld,Ja;l.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=1024; -var Md={C:(a,b)=>Ka(a)(b),t:function(a,b,c){La=c;try{var d=Hb(a);switch(b){case 0:var e=L();if(0>e)break;for(;sb[e];)e++;return Jb(d,e).Qa;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=L(),d.flags|=e,0;case 12:return e=L(),A[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},U:function(a,b){try{var c=Hb(a),d=c.node,e=c.qa.Ha;a=e?c:d;e??=d.ra.Ha;Gb(e);var f=e(a);return ec(b,f)}catch(g){if("undefined"==typeof S|| -"ErrnoError"!==g.name)throw g;return-g.ya}},V:function(a,b,c){La=c;try{var d=Hb(a);switch(b){case 21509:return d.ta?0:-59;case 21505:if(!d.ta)return-59;if(d.ta.Oa.bc){a=[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];var e=L();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var f=0;32>f;f++)r[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.ta?0:-59;case 21506:case 21507:case 21508:if(!d.ta)return-59;if(d.ta.Oa.cc)for(e=L(),a=[],f=0;32>f;f++)a.push(r[e+ -f+17]);return 0;case 21519:if(!d.ta)return-59;e=L();return B[e>>2]=0;case 21520:return d.ta?-28:-59;case 21537:case 21531:e=L();if(!d.qa.ac)throw new O(59);return d.qa.ac(d,b,e);case 21523:if(!d.ta)return-59;d.ta.Oa.dc&&(f=[24,80],e=L(),A[e>>1]=f[0],A[e+2>>1]=f[1]);return 0;case 21524:return d.ta?0:-59;case 21515:return d.ta?0:-59;default:return-28}}catch(g){if("undefined"==typeof S||"ErrnoError"!==g.name)throw g;return-g.ya}},S:function(a,b){try{return a=a?M(v,a):"",ec(b,Rb(a,!0))}catch(c){if("undefined"== -typeof S||"ErrnoError"!==c.name)throw c;return-c.ya}},R:function(a,b,c,d){try{b=b?M(v,b):"";var e=d&256;b=dc(a,b,d&4096);return ec(c,e?Rb(b,!0):Rb(b))}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},u:function(a,b,c,d){La=d;try{b=b?M(v,b):"";b=dc(a,b);var e=d?L():0;return Tb(b,c,e).Qa}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return-f.ya}},T:function(a,b){try{return a=a?M(v,a):"",ec(b,Rb(a))}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c; -return-c.ya}},X:()=>H(""),e:a=>{var b=fc[a];delete fc[a];var c=b.vb,d=b.Ka,e=b.Fb,f=e.map(g=>g.Xb).concat(e.map(g=>g.qc));mc([a],f,g=>{var h={};e.forEach((k,n)=>{var p=g[n],m=k.Wa,t=k.Wb,z=g[n+e.length],u=k.pc,w=k.rc;h[k.Tb]={read:x=>p.xa(m(t,x)),write:(x,E)=>{var F=[];u(w,x,z.Ba(F,E));gc(F)},optional:g[n].optional}});return[{name:b.name,xa:k=>{var n={},p;for(p in h)n[p]=h[p].read(k);d(k);return n},Ba:(k,n)=>{for(var p in h)if(!(p in n||h[p].optional))throw new TypeError(`Missing field: "${p}"`); -var m=c();for(p in h)h[p].write(m,n[p]);null!==k&&k.push(d,m);return m},La:hc,Ga:d}]})},x:(a,b,c,d,e)=>{b=U(b);d=0n===d;let f=g=>g;if(d){const g=8*c;f=h=>BigInt.asUintN(g,h);e=f(e)}T(a,{name:b,xa:f,Ba:(g,h)=>{"number"==typeof h&&(h=BigInt(h));return h},La:oc(b,c,!d),Ga:null})},z:(a,b,c,d)=>{b=U(b);T(a,{name:b,xa:function(e){return!!e},Ba:function(e,f){return f?c:d},La:function(e){return this.xa(v[e])},Ga:null})},fa:(a,b,c,d,e,f,g,h,k,n,p,m,t)=>{p=U(p);f=W(e,f);h&&=W(g,h);n&&=W(k,n);t=W(m,t);var z= -zc(p);yc(z,function(){Rc(`Cannot construct ${p} due to unbound types`,[d])});mc([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var w=u.ua;var x=w.Sa}else x=uc.prototype;u=vc(p,function(...y){if(Object.getPrototypeOf(this)!==E)throw new V(`Use 'new' to construct ${p}`);if(void 0===F.Db)throw new V(`${p} has no accessible constructor`);var J=F.Db[y.length];if(void 0===J)throw new V(`Tried to invoke ctor of ${p} with invalid number of parameters (${y.length}) - expected (${Object.keys(F.Db).toString()}) parameters instead!`); -return J.apply(this,y)});var E=Object.create(x,{constructor:{value:u}});u.prototype=E;var F=new Ac(p,u,E,t,w,f,h,n);if(F.Ca){var K;(K=F.Ca).xb??(K.xb=[]);F.Ca.xb.push(F)}w=new Lc(p,F,!0,!1,!1);K=new Lc(p+"*",F,!1,!1,!1);x=new Lc(p+" const*",F,!1,!0,!1);wc[a]={pointerType:K,Qb:x};Mc(z,u);return[w,K,x]})},m:(a,b,c,d,e,f,g,h)=>{var k=Uc(c,d);b=U(b);b=Vc(b);f=W(e,f);mc([],[a],n=>{function p(){Rc(`Cannot call ${m} due to unbound types`,k)}n=n[0];var m=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]); -h&&n.ua.mc.push(b);var t=n.ua.Sa,z=t[b];void 0===z||void 0===z.za&&z.className!==n.name&&z.Ua===c-2?(p.Ua=c-2,p.className=n.name,t[b]=p):(xc(t,b,m),t[b].za[c-2]=p);mc([],k,u=>{u=Tc(m,u,n,f,g);void 0===t[b].za?(u.Ua=c-2,t[b]=u):t[b].za[c-2]=u;return[]});return[]})},ga:a=>T(a,Zc),w:(a,b,c)=>{b=U(b);T(a,{name:b,xa:d=>d,Ba:(d,e)=>e,La:$c(b,c),Ga:null})},k:(a,b,c,d,e,f)=>{var g=Uc(b,c);a=U(a);a=Vc(a);e=W(d,e);yc(a,function(){Rc(`Cannot call ${a} due to unbound types`,g)},b-1);mc([],g,h=>{Mc(a,Tc(a,[h[0], -null].concat(h.slice(1)),null,e,f),b-1);return[]})},l:(a,b,c,d,e)=>{b=U(b);let f=h=>h;if(0===d){var g=32-8*c;f=h=>h<>>g;e=f(e)}T(a,{name:b,xa:f,Ba:(h,k)=>k,La:oc(b,c,0!==d),Ga:null})},h:(a,b,c)=>{function d(f){return new e(r.buffer,D[f+4>>2],D[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=U(c);T(a,{name:c,xa:d,La:d},{Zb:!0})},g:a=>{T(a,ad)},y:(a,b)=>{b=U(b);T(a,{name:b,xa(c){var d=cc(c+4,D[c>>2],!0); -Pc(c);return d},Ba(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e="string"==typeof d;if(!(e||ArrayBuffer.isView(d)&&1==d.BYTES_PER_ELEMENT))throw new V("Cannot pass non-string to std::string");var f=e?Va(d):d.length;var g=Cd(4+f+1),h=g+4;D[g>>2]=f;e?N(d,v,h,f+1):v.set(d,h);null!==c&&c.push(Pc,g);return g},La:hc,Ga(c){Pc(c)}})},r:(a,b,c)=>{c=U(c);if(2===b){var d=cd;var e=dd;var f=ed}else d=fd,e=gd,f=hd;T(a,{name:c,xa:g=>{var h=d(g+4,D[g>>2]*b,!0);Pc(g);return h},Ba:(g,h)=>{if("string"!= -typeof h)throw new V(`Cannot pass non-string to C++ string type ${c}`);var k=f(h),n=Cd(4+k+b);D[n>>2]=k/b;e(h,n+4,k+b);null!==g&&g.push(Pc,n);return n},La:hc,Ga(g){Pc(g)}})},f:(a,b,c,d,e,f)=>{fc[a]={name:U(b),vb:W(c,d),Ka:W(e,f),Fb:[]}},b:(a,b,c,d,e,f,g,h,k,n)=>{fc[a].Fb.push({Tb:U(b),Xb:c,Wa:W(d,e),Wb:f,qc:g,pc:W(h,k),rc:n})},A:(a,b)=>{b=U(b);T(a,{hc:!0,name:b,xa:()=>{},Ba:()=>{}})},E:()=>{Ha=!1;jd=0},d:(a,b,c)=>{var [d,...e]=md(a,b),f=d.Ba.bind(d),g=e.map(k=>k.La.bind(k));a--;var h=Array(a);b=`methodCaller<(${e.map(k=> -k.name)}) => ${d.name}>`;return ld(vc(b,(k,n,p,m)=>{for(var t=0,z=0;z>2]=Fc(k));return u}))},ea:Yc,aa:a=>{if(!a)return Fc(globalThis);a=od(a);return Fc(globalThis[a])},i:(a,b)=>{a=X(a);b=X(b);return Fc(a[b])},M:a=>{9kd[a](b,c,d,e),da:()=>Fc([]),ca:a=>Fc(od(a)),ba:()=>Fc({}),B:a=> -{var b=X(a);gc(b);Yc(a)},j:(a,b,c)=>{a=X(a);b=X(b);c=X(c);a[b]=c},J:function(a,b){a=-9007199254740992>a||9007199254740992>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>2]=a.getDay();B[b+28>>2]=(pd(a.getFullYear())?qd:rd)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(), -0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},K:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),f=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),g=Math.min(f,e);0>c?B[a+32>>2]=Number(e!=f&&g==d):0>2]=b.getDay();B[a+28>>2]=(pd(b.getFullYear())? -qd:rd)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},F:(a,b)=>{sd[a]&&(clearTimeout(sd[a].id),delete sd[a]);if(!b)return 0;var c=setTimeout(()=>{delete sd[a];vd(()=>Ld(a,performance.now()))},b);sd[a]={id:c,Fc:b};return 0},L:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset(); -D[a>>2]=60*Math.max(f,e);B[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(h/60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=a))return 28;G[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},n:(a,b,c)=>{wd.length=0;for(var d;d=v[b++];){var e=105!=d;e&=112!=d;c+=e&&c%8?4:0;wd.push(112==d?D[c>>2]:106==d?G[c>>3]:105==d?B[c>>2]: -sa[c>>3]);c+=e?8:4}return Kd[a](...wd)},W:()=>Date.now(),Y:function(a){if(Y.has(a)){var b=Y.get(a),c=Y;c.Ra[a]=void 0;c.Gb.push(a);0b.readyState&&b.abort()}},I:()=>2147483648,o:()=>performance.now(),_:()=>!ba,H:a=>{var b=v.length;a>>>=0;if(2147483648=c;c*=2){a:{var d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,b+2097152/c)/65536))-wa.buffer.byteLength+65535)/65536|0;try{wa.grow(d);va();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Z:function(a, -b,c,d,e){function f(C){t?C():vd(C)}var g=a+108,h=D[g+36>>2],k=D[g+40>>2],n=D[g+44>>2],p=D[g+48>>2],m=D[g+52>>2],t=!!(m&64),z=C=>{f(()=>{h?Ka(h)(C):b?.(C)})},u=C=>{f(()=>{n?Ka(n)(C):d?.(C)})},w=C=>{f(()=>{k?Ka(k)(C):c?.(C)})},x=C=>{f(()=>{p?Ka(p)(C):e?.(C)})},E=C=>{Bd(C,z,w,u,x)},F=(C,qa)=>{Ed(C,qa.response,Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})},Fa=>{f(()=>{h?Ka(h)(Fa):b?.(Fa)})})},K=C=>{Bd(C,F,w,u,x)},y=cc(g+0),J=!!(m&16),I=!!(m&4);m=!!(m&32);if("EM_IDB_STORE"===y)E=D[g+84>>2],Ed(a,v.slice(E,E+D[g+88>> -2]),z,w);else if("EM_IDB_DELETE"===y)Gd(a,z,w);else if(J){if(m)return 0;Bd(a,I?F:z,w,u,x)}else Fd(a,z,m?w:I?K:E);return a},P:(a,b)=>{var c=0,d=0,e;for(e of Jd()){var f=b+c;D[a+d>>2]=f;c+=N(e,v,f,Infinity)+1;d+=4}return 0},Q:(a,b)=>{var c=Jd();D[a>>2]=c.length;a=0;for(var d of c)a+=Va(d)+1;D[b>>2]=a;return 0},v:a=>{ma=a;ud(a)},q:function(a){try{var b=Hb(a);Ub(b);return 0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ya}},s:function(a,b,c,d){try{a:{var e=Hb(a);a=b;for(var f, -g=b=0;g>2],k=D[a+4>>2];a+=8;var n=e,p=h,m=k,t=f,z=r;if(0>m||0>t)throw new O(28);if(null===n.Qa)throw new O(8);if(1===(n.flags&2097155))throw new O(8);if(Q(n.node.mode))throw new O(31);if(!n.qa.read)throw new O(28);var u="undefined"!=typeof t;if(!u)t=n.position;else if(!n.seekable)throw new O(70);var w=n.qa.read(n,z,p,m,t);u||(n.position+=w);var x=w;if(0>x){var E=-1;break a}b+=x;if(x>2]=E;return 0}catch(F){if("undefined"==typeof S||"ErrnoError"!== -F.name)throw F;return F.ya}},O:function(a,b,c,d){b=-9007199254740992>b||9007199254740992>3]=BigInt(e.position);e.qb&&0===b&&0===c&&(e.qb=null);return 0}catch(f){if("undefined"==typeof S||"ErrnoError"!==f.name)throw f;return f.ya}},p:function(a,b,c,d){try{a:{var e=Hb(a);a=b;for(var f,g=b=0;g>2],k=D[a+4>>2];a+=8;var n=Wb(e,r,h,k,f);if(0>n){var p=-1;break a}b+=n;if(n> -2]=p;return 0}catch(m){if("undefined"==typeof S||"ErrnoError"!==m.name)throw m;return m.ya}},$:function(){var a=stackTrace(),b=Va(a)+1,c=Cd(b);N(a,v,c,b);return c},a:wa,D:ud,G:function(a,b){try{return Qa(v.subarray(a,a+b)),0}catch(c){if("undefined"==typeof S||"ErrnoError"!==c.name)throw c;return c.ya}}}; -function Nd(){function a(){l.calledRun=!0;if(!la){ua=!0;if(!l.noFSInit&&!vb){var b,c;vb=!0;b??=l.stdin;c??=l.stdout;d??=l.stderr;b?$b("/dev","stdin",b):Pb("/dev/tty","/dev/stdin");c?$b("/dev","stdout",null,c):Pb("/dev/tty","/dev/stdout");d?$b("/dev","stderr",null,d):Pb("/dev/tty1","/dev/stderr");Tb("/dev/stdin",0);Tb("/dev/stdout",1);Tb("/dev/stderr",1)}Od.ha();wb=!1;na?.(l);l.onRuntimeInitialized?.();if(l.postRun)for("function"==typeof l.postRun&&(l.postRun=[l.postRun]);l.postRun.length;){var d= -l.postRun.shift();Da.push(d)}Ca(Da)}}if(0{setTimeout(()=>l.setStatus(""),1);a()},1)):a()}}var Od; -Od=await (async function(){function a(c){c=Od=c.exports;Oc=c.ia;Cd=c.ja;Pc=c.ka;cb=c.ma;Ld=c.na;Ja=c.la;return Od}var b={a:Md};if(l.instantiateWasm)return new Promise(c=>{l.instantiateWasm(b,(d,e)=>{c(a(d,e))})});xa??=l.locateFile?l.locateFile?l.locateFile("BlinkIdModule.wasm",fa):fa+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;return a((await Aa(b)).instance)}());Nd();moduleRtn=ua?l:new Promise((a,b)=>{na=a;oa=b}); -;return moduleRtn}export default createModule; diff --git a/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.wasm deleted file mode 100755 index 4faebf55..00000000 Binary files a/packages/blinkid-wasm/dist/lightweight/basic/BlinkIdModule.wasm and /dev/null differ diff --git a/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.data b/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.data similarity index 56% rename from packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.data rename to packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.data index f7fb2264..f24be209 100644 Binary files a/packages/blinkid-wasm/dist/lightweight/advanced-threads/BlinkIdModule.data and b/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.data differ diff --git a/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.js b/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.js new file mode 100644 index 00000000..a33e74c1 --- /dev/null +++ b/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.js @@ -0,0 +1,139 @@ +async function createModule(moduleArg={}){var Module=moduleArg;var aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope,k=ba&&globalThis.name=="em-pthread";Module.expectedDataFileDownloads||(Module.expectedDataFileDownloads=0);Module.expectedDataFileDownloads++;(()=>{var a=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;typeof k!="undefined"&&k||a||async function(b){async function c(l,m){Module.dataFileDownloads||(Module.dataFileDownloads={});try{var n=await fetch(l)}catch(F){throw Error(`Network Error: ${l}`,{e:F});}if(!n.ok)throw Error(`${n.status}: ${n.url}`); +var q=[];m=Number(n.headers.get("Content-Length")||m);var x=0;Module.setStatus&&Module.setStatus("Downloading data...");for(n=n.body.getReader();;){var y;({done:y,value:z}=await n.read());if(y)break;q.push(z);x+=z.length;Module.dataFileDownloads[l]={loaded:x,total:m};var z=y=0;for(var A of Object.values(Module.dataFileDownloads))y+=A.loaded,z+=A.total;Module.setStatus&&Module.setStatus(`Downloading data... (${y}/${z})`)}l=new Uint8Array(q.map(F=>F.length).reduce((F,H)=>F+H,0));A=0;for(let F of q)l.set(F, +A),A+=F.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkid",!0,!0);l.addRunDependency("datafile_bazel-out/wasm-opt-ST-bed47c7d9c4e/bin/packages/blinkid-wasm/binding/full/simd-threads/BlinkIdModule.data");l.preloadResults||(l.preloadResults={});l.preloadResults["bazel-out/wasm-opt-ST-bed47c7d9c4e/bin/packages/blinkid-wasm/binding/full/simd-threads/BlinkIdModule.data"]={Zf:!1};h||=await g;await async function(m){if(!m)throw Error("Loading data file failed."); +if(m.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData "+m.constructor.name);m=new Uint8Array(m);for(var n of b.files)l.FS_createDataFile(n.filename,null,m.subarray(n.start,n.end),!0,!0,!0);l.removeRunDependency("datafile_bazel-out/wasm-opt-ST-bed47c7d9c4e/bin/packages/blinkid-wasm/binding/full/simd-threads/BlinkIdModule.data")}(h)}typeof window==="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"): +typeof process==="undefined"&&typeof location!=="undefined"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=Module.locateFile?Module.locateFile("BlinkIdModule.data",""):"BlinkIdModule.data",f=b.remote_package_size,g,h=Module.getPreloadedPackage&&Module.getPreloadedPackage(e,f);h||(g=c(e,f));Module.FS_createPath?d(Module):(Module.preRun||(Module.preRun=[]),Module.preRun.push(d))}({files:[{filename:"/microblink/blinkid/Model_02957b97.strop",start:0,end:103788}, +{filename:"/microblink/blinkid/Model_08a8e22c.strop",start:103788,end:1538982},{filename:"/microblink/blinkid/Model_11a41e0f.strop",start:1538982,end:1543187},{filename:"/microblink/blinkid/Model_3a69425d.strop",start:1543187,end:1869180},{filename:"/microblink/blinkid/Model_44dff8bf.strop",start:1869180,end:1994954},{filename:"/microblink/blinkid/Model_48e189e2.strop",start:1994954,end:2320287},{filename:"/microblink/blinkid/Model_49210872.strop",start:2320287,end:6960739},{filename:"/microblink/blinkid/Model_649c20b5.strop", +start:6960739,end:7989463},{filename:"/microblink/blinkid/Model_6683cb47.strop",start:7989463,end:8065443},{filename:"/microblink/blinkid/Model_7b97ad87.strop",start:8065443,end:8092846},{filename:"/microblink/blinkid/Model_7f5a4bc5.strop",start:8092846,end:8100046},{filename:"/microblink/blinkid/Model_a54429ec.strop",start:8100046,end:8175325},{filename:"/microblink/blinkid/Model_a91e7e31.strop",start:8175325,end:8444867},{filename:"/microblink/blinkid/Model_a958c31c.strop",start:8444867,end:8789955}, +{filename:"/microblink/blinkid/Model_ad5b6c8e.strop",start:8789955,end:9453794},{filename:"/microblink/blinkid/Model_b18ce029.strop",start:9453794,end:11116320},{filename:"/microblink/blinkid/Model_de3c93f5.strop",start:11116320,end:11123137},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:11123137,end:11143606}],remote_package_size:11143606})})();var ca=import.meta.url,da="",ea,fa;if(aa||ba){try{da=(new URL(".",ca)).href}catch{}ba&&(fa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1); +b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ea=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ha=console.log.bind(console),p=console.error.bind(console),ia,ja,ka=!1,la;class r{}class ma extends r{constructor(a){super();this.Yd=a}}function t(){oa.buffer!=u.buffer&&pa()}var qa;if(k){var ra=!1;self.onunhandledrejection=b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.xd;if(d==1){let e= +[];self.onmessage=f=>e.push(f);qa=()=>{postMessage({xd:3});for(let f of e)a(f);self.onmessage=a};for(let f of c.gf)if(!Module[f]||Module[f].proxy)Module[f]=(...g)=>{postMessage({xd:9,ff:f,Pe:g})},f=="print"&&(ha=Module[f]),f=="printErr"&&(p=Module[f]);oa=c.Hf;pa();ja=c.If;sa();ta()}else if(d==2){ua(c.td);va(c.td,0,0,1,0,0);wa();xa(c.td);ra||(ya(),ra=!0);try{za(c.Df,c.fe)}catch(e){if(e!="unwind")throw e;}}else d==4?ra&&Aa():d&&(p(`worker: received unknown command ${d}`),p(c))}catch(e){throw Ba&&Ca(), +e;}}self.onmessage=a}var Ba=!1;function pa(){if(!u?.buffer?.cg){var a=oa.buffer;u=new Int8Array(a);Da=new Int16Array(a);v=new Uint8Array(a);Ea=new Uint16Array(a);w=new Int32Array(a);B=new Uint32Array(a);Fa=new Float32Array(a);Ga=new Float64Array(a);C=new BigInt64Array(a);Ha=new BigUint64Array(a)}}function Ia(){Ba=!0;k?qa():(Module.noFSInit||D.ie||D.init(),Ja.pc(),D.Ge=!1)}function E(a){Module.onAbort?.(a);a=`Aborted(${a})`;p(a);ka=!0;throw new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info."); +}var Ka;async function La(a){if(!ia)try{var b=await ea(a);return new Uint8Array(b)}catch{}if(a==Ka&&ia)a=new Uint8Array(ia);else if(fa)a=fa(a);else throw"both async and sync fetching of the wasm failed";return a}async function Ma(a,b){try{var c=await La(a);return await WebAssembly.instantiate(c,b)}catch(d){p(`failed to asynchronously prepare wasm: ${d}`),E(d)}}async function Na(a){var b=Ka;if(!ia)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){p(`wasm streaming compile failed: ${d}`), +p("falling back to ArrayBuffer instantiation")}return Ma(b,a)}function Oa(){Pa={ab:Qa,x:Ra,I:Sa,b:Ta,l:Ua,q:Va,qa:Wa,D:Xa,fb:Ya,jb:Za,f:$a,Ca:ab,zb:bb,Ab:cb,xb:db,wb:eb,Ba:fb,yb:gb,Fb:hb,y:ib,Ea:jb,Ib:kb,Eb:lb,aa:mb,Gb:nb,Da:ob,P:pb,Y:qb,H:rb,C:sb,Hb:tb,pa:ub,z:vb,n:wb,Jb:xb,sb:yb,hb:zb,za:Ab,cb:Bb,xa:Cb,rb:xa,Cb:Db,p:Eb,Kb:Fb,Nb:Gb,L:Hb,$a:Ib,o:Jb,ba:Kb,Ub:Lb,fc:Mb,lc:Nb,_a:Ob,Q:Pb,mb:Qb,nb:Rb,kb:Sb,lb:Tb,db:Ub,ob:Vb,Za:Wb,pb:Xb,ha:Yb,ya:Zb,Db:$b,Bb:ac,Fa:bc,ib:cc,ea:dc,Ga:ec,gb:fc,Lb:hc,ub:ic,vb:jc, +ra:kc,oa:lc,tb:mc,Aa:nc,qb:oc,na:pc,K:qc,wa:rc,Xa:sc,S:tc,Na:uc,N:vc,Z:wc,B:xc,Ra:yc,g:zc,la:Ac,c:Bc,ia:Cc,Ma:Dc,i:Ec,V:Fc,Ta:Gc,Ua:Hc,Va:Ic,k:Jc,va:Kc,Vb:Lc,sa:Mc,w:Nc,ma:Oc,Zb:Pc,u:Qc,Sa:Rc,Yb:Sc,T:Tc,M:Uc,O:Vc,mc:Wc,fa:Xc,Oa:Yc,Ya:Zc,Ka:$c,ja:ad,m:bd,Pb:cd,r:dd,Wa:ed,Pa:fd,$:gd,Ha:hd,ga:jd,_b:kd,e:ld,G:md,ca:nd,Ob:od,Wb:pd,Qb:qd,Xb:rd,U:sd,ec:td,gc:ud,h:vd,_:wd,A:xd,J:zd,nc:Ad,ua:Bd,ac:Cd,j:Dd,W:Ed,ta:Fd,Ia:Gd,Sb:Hd,oc:Id,La:Jd,ka:Kd,Tb:Ld,d:Md,$b:Nd,bc:Od,Qa:Pd,cc:Qd,s:Rd,hc:Sd,ic:Td,kc:Ud,t:Vd, +Rb:Wd,dc:Xd,v:Yd,E:Zd,jc:$d,X:ae,Ja:be,R:ce,da:de,F:ee,a:oa,bb:fe,eb:ge,Mb:he};return{a:Pa}}async function sa(){function a(c,d){Ja=c.exports;ie.push(Ja.yc);c=Ja;je=c.qc;ke=c.rc;le=Module._mbPingRequestFinished=c.sc;me=c.tc;ne=c.uc;oe=c.wc;ya=c.xc;pe=c.zc;va=c.Bc;Ca=c.Dc;qe=c.Ec;re=c.Fc;se=c.Gc;te=c.Hc;ue=c.Ic;ve=c.Jc;G=c.Kc;we=c.Lc;xe=c.Mc;I=c.Nc;ye=c.Oc;J=c.Pc;ze=c.Qc;Ae=c.Rc;Be=c.Sc;Module.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=c.vc.value;Ce=c.Ac;ja=d;return Ja}var b=Oa();if(k)return b= +new WebAssembly.Instance(ja,Oa()),a(b,ja);Ka??=Module.locateFile?Module.locateFile?Module.locateFile("BlinkIdModule.wasm",da):da+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;return function(c){return a(c.instance,c.module)}(await Na(b))}class De{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}var Da,w,C,u,Fa,Ga,Ea,B,Ha,v,Ee=a=>{a.terminate();a.onmessage=()=>{}},Fe=[],Ge=null,He=async()=>Ge,Ie=0,Je=()=>{Ie--;Ie||Ge.resolve()}, +Ke=()=>{if(!Ie){var a;Ge=new Promise(b=>a=b);Ge.resolve=a}Ie++},Pe=a=>{if(Le.length==0){var b=Me();Ne(b)}b=Le.pop();if(!b)return 6;Oe[a.td]=b;b.td=a.td;b.postMessage({xd:2,Df:a.Cf,fe:a.fe,td:a.td},a.Ff);return 0},Qe=0,L=(a,b,...c)=>{var d=8*c.length*2,e=J(),f=ye(d),g=f>>3,h;for(h of c)typeof h=="bigint"?((t(),C)[g++]=1n,(t(),C)[g++]=h):((t(),C)[g++]=0n,(t(),Ga)[g++]=h);a=re(a,0,d,f,b);I(e);return a};function fe(a){if(k)return L(0,1,a);la=a;if(!(Re||Qe>0)){for(var b of Object.values(Oe))Ee(b);for(b of Le)Ee(b); +Le=[];Oe={};ka=!0}throw new De(a);}function Se(a){if(k)return L(1,0,a);kc(a)}var kc=a=>{la=a;if(k)throw Se(a),"unwind";fe(a)},Te=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)||[])[2])<91,Le=[],ie=[],Oe={};function Ue(){for(var a=Math.min(navigator.hardwareConcurrency,16);a--;)Me();Fe.push(async()=>{var b=Ve();Ke("loading-workers");await b;Je("loading-workers")})}var We=a=>{var b=a.td;delete Oe[b];Le.push(a);a.td=0;se(b)};function wa(){ie.forEach(a=> +a())}var Ne=a=>new Promise(b=>{a.onmessage=f=>{var g=f.data;f=g.xd;if(g.Le)Oe[g.Le]?.postMessage(g);else if(g==="setimmediate"||g==="_si")a.postMessage(g);else switch(f){case 4:Aa();break;case 5:Pe(g);break;case 6:Xe(()=>{We(Oe[g.Ef])});break;case 3:b(a);break;case 9:Module[g.ff](...g.Pe);break;default:f&&p(`worker sent an unknown command ${f}`)}};a.onerror=f=>{p(`worker sent an error! ${f.filename}:${f.lineno}: ${f.message}`);throw f;};var c=[],d=["onAbort","printErr"],e;for(e of d)Module.propertyIsEnumerable(e)&& +c.push(e);a.postMessage({xd:1,gf:c,Hf:oa,If:ja})});async function Ve(){if(!k)return Promise.all(Le.map(Ne))}function Me(){if(Module.mainScriptUrlOrBlob){var a=Module.mainScriptUrlOrBlob;typeof a!="string"&&(a=URL.createObjectURL(a));a=new Worker(a,{type:"module",name:"em-pthread"})}else a=new Worker(new URL("BlinkIdModule",import.meta.url),{type:"module",name:"em-pthread"});Le.push(a);return a}function ua(a){var b=(t(),B)[a+48>>2];a=(t(),B)[a+52>>2];xe(b,b-a);I(b)}var Ye=[],M=a=>{var b=Ye[a];b||(Ye[a]= +b=Ce.get(a));return b},za=(a,b)=>{Re=Qe=0;a=M(a)(b);Re||Qe>0?la=a:te(a)},Re=!0,oa,Qa=(a,b)=>M(a)(b),Ze=[],$e=0,Ra=a=>{var b=new af(a);if((t(),u)[b.Wc+12]==0){var c=1;(t(),u)[b.Wc+12]=c;$e--}c=0;(t(),u)[b.Wc+13]=c;Ze.push(b);return ne(a)},bf=null,Sa=()=>{G(0,0);var a=Ze.pop();ze(a.Yd);bf=null};class af{constructor(a){this.Yd=a;this.Wc=a-24}init(a,b){(t(),B)[this.Wc+16>>2]=0;(t(),B)[this.Wc+4>>2]=a;(t(),B)[this.Wc+8>>2]=b}}var cf=a=>{var b=bf?.Yd;if(!b)return we(0),0;var c=new af(b);(t(),B)[c.Wc+16>> +2]=b;var d=(t(),B)[c.Wc+4>>2];if(!d)return we(0),b;for(var e of a){if(e===0||e===d)break;if(Be(e,d,c.Wc+16))return we(e),b}we(d);return b},Ta=()=>cf([]),Ua=a=>cf([a]),Va=(a,b)=>cf([a,b]),Wa=()=>{Ze.length||E("no exception to throw");var a=Ze.at(-1),b=a.Yd;var c=1;(t(),u)[a.Wc+13]=c;c=0;(t(),u)[a.Wc+12]=c;$e++;Ae(b);bf=new ma(b);throw bf;},Xa=(a,b,c)=>{(new af(a)).init(b,c);Ae(a);bf=new ma(a);$e++;throw bf;},Ya=()=>$e;function df(a,b,c,d){return k?L(2,1,a,b,c,d):Za(a,b,c,d)}var ec=()=>!!globalThis.SharedArrayBuffer, +Za=(a,b,c,d)=>{if(!globalThis.SharedArrayBuffer)return 6;var e=[];if(k&&e.length===0)return df(a,b,c,d);a={Cf:c,td:a,fe:d,Ff:e};return k?(a.xd=5,postMessage(a,e),0):Pe(a)},$a=a=>{bf||=new ma(a);throw bf;},N=()=>{var a=(t(),w)[+ef>>2];ef+=4;return a},ff=(a,b)=>{for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];e==="."?a.splice(d,1):e===".."?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},gf=a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=ff(a.split("/").filter(d=> +!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},hf=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},jf=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],kf=(a,b)=>gf(a+"/"+b),lf=()=>a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),0),mf=a=>(mf=lf())(a),nf=(...a)=>{for(var b="",c=!1,d=a.length-1;d>=-1&&!c;d--){c=d>=0?a[d]:D.Xd();if(typeof c!="string")throw new TypeError("Arguments to path.resolve must be strings"); +if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=ff(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},of=(a,b)=>{function c(g){for(var h=0;h=0&&g[l]==="";l--);return h>l?[]:g.slice(h,l-h+1)}a=nf(a).slice(1);b=nf(b).slice(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),e=d,f=0;f{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},rf=(a,b=0,c,d)=>{c=qf(a,b,c,d);if(c-b>16&&a.buffer&&pf)return pf.decode(a.buffer instanceof ArrayBuffer?a.subarray(b,c):a.slice(b,c));for(d="";b>10,56320|e&1023))}}else d+= +String.fromCharCode(e)}return d},sf=[],tf=a=>{for(var b=0,c=0;c=55296&&d<=57343?(b+=4,++c):b+=3}return b},uf=(a,b,c,d)=>{if(!(d>0))return 0;var e=c;d=c+d-1;for(var f=0;f=d)break;b[c++]=g}else if(g<=2047){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(g<=65535){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128| +g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},vf=a=>{var b=Array(tf(a)+1);a=uf(a,b,0,b.length);b.length=a;return b},wf=[];function xf(a,b){wf[a]={input:[],output:[],Ad:b};yf(a,zf)}var zf={open(a){var b=wf[a.node.Rd];if(!b)throw new D.Cc(43);a.Yc=b;a.seekable=!1},close(a){a.Yc.Ad.$d(a.Yc)},$d(a){a.Yc.Ad.$d(a.Yc)},read(a,b,c,d){if(!a.Yc||!a.Yc.Ad.Fe)throw new D.Cc(60);for(var e=0,f=0;f0&&(ha(rf(a.output)),a.output=[])},kf(){return{Of:25856,Qf:5,Nf:191,Pf:35387,Mf:[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]}},lf(){return 0},mf(){return[24,80]}},Bf={pe(a,b){b===null||b===10?(p(rf(a.output)),a.output=[]):b!=0&&a.output.push(b)},$d(a){a.output?.length>0&&(p(rf(a.output)),a.output=[])}},Cf=a=>{a=Math.ceil(a/65536)*65536;var b=pe(65536,a);b&&(t(),v).fill(0,b,b+a);return b},P={sd:null,$c(){return P.createNode(null,"/",16895,0)}, +createNode(a,b,c,d){var e;(e=(c&61440)===24576)||(e=(c&61440)===4096);if(e)throw new D.Cc(63);P.sd||(P.sd={dir:{node:{pd:P.Uc.pd,rd:P.Uc.rd,Fd:P.Uc.Fd,yd:P.Uc.yd,Td:P.Uc.Td,Ld:P.Uc.Ld,Ud:P.Uc.Ud,Sd:P.Uc.Sd,Ed:P.Uc.Ed},stream:{kd:P.Vc.kd}},file:{node:{pd:P.Uc.pd,rd:P.Uc.rd},stream:{kd:P.Vc.kd,read:P.Vc.read,write:P.Vc.write,Hd:P.Vc.Hd,Kd:P.Vc.Kd}},link:{node:{pd:P.Uc.pd,rd:P.Uc.rd,Dd:P.Uc.Dd},stream:{}},xe:{node:{pd:P.Uc.pd,rd:P.Uc.rd},stream:D.Re}});c=D.createNode(a,b,c,d);Q(c.mode)?(c.Uc=P.sd.dir.node, +c.Vc=P.sd.dir.stream,c.Xc={}):D.isFile(c.mode)?(c.Uc=P.sd.file.node,c.Vc=P.sd.file.stream,c.gd=0,c.Xc=P.Ve??(P.Ve=new Uint8Array(0))):(c.mode&61440)===40960?(c.Uc=P.sd.link.node,c.Vc=P.sd.link.stream):(c.mode&61440)===8192&&(c.Uc=P.sd.xe.node,c.Vc=P.sd.xe.stream);c.wd=c.ld=c.jd=Date.now();a&&(a.Xc[b]=c,a.wd=a.ld=a.jd=c.wd);return c},Uc:{pd(a){var b={};b.Te=(a.mode&61440)===8192?a.id:1;b.jf=a.id;b.mode=a.mode;b.rf=1;b.uid=0;b.ef=0;b.Rd=a.Rd;Q(a.mode)?b.size=4096:D.isFile(a.mode)?b.size=a.gd:b.size= +(a.mode&61440)===40960?a.link.length:0;b.wd=new Date(a.wd);b.ld=new Date(a.ld);b.jd=new Date(a.jd);b.Qe=4096;b.ve=Math.ceil(b.size/b.Qe);return b},rd(a,b){for(var c of["mode","atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!==void 0&&(b=b.size,a.gd!=b&&(c=a.Xc,a.Xc=new Uint8Array(b),a.Xc.set(c.subarray(0,Math.min(b,a.gd))),a.gd=b))},Fd(){P.ge||(P.ge=new D.Cc(44),P.ge.stack="");throw P.ge;},yd(a,b,c,d){return P.createNode(a,b,c,d)},Td(a,b,c){try{var d=Df(b,c)}catch(f){}if(d){if(Q(a.mode))for(var e in d.Xc)throw new D.Cc(55); +Ef(d)}delete a.parent.Xc[a.name];b.Xc[c]=a;a.name=c;b.jd=b.ld=a.parent.jd=a.parent.ld=Date.now()},Ld(a,b){delete a.Xc[b];a.jd=a.ld=Date.now()},Ud(a,b){var c=Df(a,b),d;for(d in c.Xc)throw new D.Cc(55);delete a.Xc[b];a.jd=a.ld=Date.now()},Sd(a){return[".","..",...Object.keys(a.Xc)]},Ed(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},Dd(a){if((a.mode&61440)!==40960)throw new D.Cc(28);return a.link}},Vc:{read(a,b,c,d,e){if(e>=a.node.gd)return 0;d=Math.min(a.node.gd-e,d);b.set(a.node.Xc.subarray(e, +e+d),c);return d},write(a,b,c,d,e,f){b.buffer===(t(),u).buffer&&(f=!1);if(!d)return 0;a=a.node;a.ld=a.jd=Date.now();if(f)a.Xc=b.subarray(c,c+d),a.gd=d;else if(a.gd===0&&e===0)a.Xc=b.slice(c,c+d),a.gd=d;else{f=e+d;var g=a.Xc.length;g>=f||(f=Math.max(f,g*(g<1048576?2:1.125)>>>0),g&&(f=Math.max(f,256)),g=a.Xc.subarray(0,a.gd),a.Xc=new Uint8Array(f),a.Xc.set(g));a.Xc.set(b.subarray(c,c+d),e);a.gd=Math.max(a.gd,e+d)}return d},kd(a,b,c){c===1?b+=a.position:c===2&&D.isFile(a.node.mode)&&(b+=a.node.gd);if(b< +0)throw new D.Cc(28);return b},Hd(a,b,c,d,e){if(!D.isFile(a.node.mode))throw new D.Cc(43);a=a.node.Xc;if(e&2||a.buffer!==(t(),u).buffer){d=!0;e=Cf(b);if(!e)throw new D.Cc(48);if(a){if(c>0||c+b{typeof a=="string"&&(a=vf(a));a.subarray||(a=new Uint8Array(a));return a},Gf=(a,b)=>{var c=0;a&&(c|=365);b&&(c|=146); +return c},Hf=async a=>{a=await ea(a);return new Uint8Array(a)},If=[],Jf=async(a,b)=>{typeof Browser!="undefined"&&Browser.init();for(var c of If)if(c.canHandle(b))return c.handle(a,b);return a},Lf=async(a,b,c,d,e,f,g,h)=>{var l=b?nf(gf(a+"/"+b)):a,m=`cp ${l}`;Ke(m);try{var n=c;typeof c=="string"&&(n=await Hf(c));n=await Jf(n,l);h?.();f||Kf(a,b,n,d,e,g)}finally{Je(m)}};function yf(a,b){D.Ce[a]={Vc:b}}function Q(a){return(a&61440)===16384}function Df(a,b){var c=Q(a.mode)?(c=Mf(a,"x"))?c:a.Uc.Fd?0:2: +54;if(c)throw new D.Cc(c);for(c=D.zd[Nf(a.id,b)];c;c=c.Id){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return D.Fd(a,b)}function Ef(a){var b=Nf(a.parent.id,a.name);if(D.zd[b]===a)D.zd[b]=a.Id;else for(b=D.zd[b];b;){if(b.Id===a){b.Id=a.Id;break}b=b.Id}}function Kf(a,b,c,d,e,f){var g=b;a&&(a=typeof a=="string"?a:Of(a),g=b?gf(a+"/"+b):a);a=Gf(d,e);g=D.create(g,a);c&&(c=Ff(c),Pf(g,a|146),b=D.open(g,577),D.write(b,c,0,c.length,0,f),D.close(b),Pf(g,a))}function R(a,b={}){if(!a)throw new D.Cc(44); +b.Zd??(b.Zd=!0);a.charAt(0)==="/"||(a=D.Xd()+"/"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(h=>!!h);for(var d=D.root,e="/",f=0;f>>0)%D.zd.length}function Qf(a){var b=Nf(a.parent.id,a.name);a.Id=D.zd[b];D.zd[b]=a}function Mf(a,b){return D.Ge?0:b.includes("r")&&!(a.mode&292)|| +b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73)?2:0}function Rf(a,b){if(!Q(a.mode))return 54;try{return Df(a,b),20}catch(c){}return Mf(a,"wx")}function Sf(a,b,c){try{var d=Df(a,b)}catch(e){return e.bd}if(a=Mf(a,"wx"))return a;if(c){if(!Q(d.mode))return 54;if(D.le(d)||Of(d)===D.Xd())return 10}else if(Q(d.mode))return 31;return 0}function Tf(a,b){if(!a)throw new D.Cc(b);return a}function S(a){a=D.bf(a);if(!a)throw new D.Cc(8);return a}function Uf(a,b=-1){a=Object.assign(new D.Ne,a);if(b== +-1)a:{for(b=0;b<=D.Oe;b++)if(!D.streams[b])break a;throw new D.Cc(33);}a.Cd=b;return D.streams[b]=a}function Vf(a,b=-1){a=Uf(a,b);a.Vc?.Uf?.(a);return a}function Wf(a,b,c){var d=a?.Vc.rd;a=d?a:b;d??=b.Uc.rd;Tf(d,63);try{d(a,c)}catch(e){if(e instanceof RangeError)throw new D.Cc(22);throw e;}}function Xf(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push(...c.Pd)}return b}function Yf(a){var b={Lf:4096,$f:4096,ve:1E6,Kf:5E5,Jf:5E5,files:D.oe,Xf:D.oe-1,ag:42,flags:2,ig:255};a.Uc.Je&&Object.assign(b, +a.Uc.Je(a.$c.tf.root));return b}function T(a,b=511){return D.yd(a,b&1023|16384,0)}function Zf(a,b,c){typeof c=="undefined"&&(c=b,b=438);return D.yd(a,b|8192,c)}function $f(a,b,c,d){Wf(a,b,{mode:c&4095|b.mode&-4096,jd:Date.now(),De:d})}function Pf(a,b,c){a=typeof a=="string"?R(a,{od:!c}).node:a;$f(null,a,b,c)}function ag(a,b,c){if(Q(b.mode))throw new D.Cc(31);if(!D.isFile(b.mode))throw new D.Cc(28);var d=Mf(b,"w");if(d)throw new D.Cc(d);Wf(a,b,{size:c,timestamp:Date.now()})}function bg(a,b={}){b.flags= +b.flags??0;b.encoding=b.encoding??"binary";b.encoding!=="utf8"&&b.encoding!=="binary"&&E(`Invalid encoding type "${b.encoding}"`);var c=D.open(a,b.flags);a=D.stat(a).size;var d=new Uint8Array(a);D.read(c,d,0,a,0);b.encoding==="utf8"&&(d=rf(d));D.close(c);return d}function cg(a,b){a=typeof a=="string"?a:Of(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=gf(a+"/"+c);try{T(d)}catch(e){if(e.bd!=20)throw e;}a=d}}return d}function dg(a,b,c,d){a=typeof a=="string"?a:Of(a);b=gf(a+"/"+ +b);return D.create(b,Gf(c,d))}function eg(a){if(!(a.nf||a.pf||a.link||a.Xc))if(globalThis.XMLHttpRequest)E("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.Xc=fa(a.url)}catch(b){throw new D.Cc(29);}}function fg(a,b,c,d,e){function f(n,q,x,y,z){n=n.node.Xc;if(z>=n.length)return 0;y=Math.min(n.length-z,y);if(n.slice)for(var A=0;Athis.length-1||n<0)){var q=n%this.ye;return this.Od(n/this.ye|0)[q]}}xf(n){this.Od=n}we(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);n.status>=200&&n.status<300||n.status===304||E("Couldn't load "+c+". Status: "+n.status);var q=Number(n.getResponseHeader("Content-length")),x,y=(x=n.getResponseHeader("Accept-Ranges"))&&x==="bytes";n=(x=n.getResponseHeader("Content-Encoding"))&& +x==="gzip";var z=1048576;y||(z=q);var A=this;A.xf(F=>{var H=F*z,K=(F+1)*z-1;K=Math.min(K,q-1);if(typeof A.Wd[F]=="undefined"){var na=A.Wd;H>K&&E(`invalid range (${H}, ${K}) or no bytes requested!`);K>q-1&&E(`only ${q} bytes available! programmer error!`);var O=new XMLHttpRequest;O.open("GET",c,!1);q!==z&&O.setRequestHeader("Range","bytes="+H+"-"+K);O.responseType="arraybuffer";O.overrideMimeType&&O.overrideMimeType("text/plain; charset=x-user-defined");O.send(null);O.status>=200&&O.status<300||O.status=== +304||E("Couldn't load "+c+". Status: "+O.status);H=O.response!==void 0?new Uint8Array(O.response||[]):vf(O.responseText??"");na[F]=H}typeof A.Wd[F]=="undefined"&&E("doXHR failed!");return A.Wd[F]});if(n||!q)z=q=1,z=q=this.Od(0).length,ha("LazyFiles on gzip forces download of the whole file when length is accessed");this.te=q;this.se=z;this.me=!0}get length(){this.me||this.we();return this.te}get ye(){this.me||this.we();return this.se}}if(globalThis.XMLHttpRequest){ba||E("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"); +var h=new g;var l=void 0}else l=c,h=void 0;var m=dg(a,b,d,e);h?m.Xc=h:l&&(m.Xc=null,m.url=l);Object.defineProperties(m,{gd:{get:function(){return this.Xc.length}}});a={};for(let [n,q]of Object.entries(m.Vc))a[n]=(...x)=>{eg(m);return q(...x)};a.read=(n,q,x,y,z)=>{eg(m);return f(n,q,x,y,z)};a.Hd=(n,q,x)=>{eg(m);var y=Cf(q);if(!y)throw new D.Cc(48);f(n,(t(),u),y,q,x);return{Wc:y,ue:!0}};m.Vc=a;return m}var D={root:null,Pd:[],Ce:{},streams:[],oe:1,zd:null,Ae:"/",ie:!1,Ge:!0,Ye:null,de:0,Cc:class{name= +"ErrnoError";constructor(a){this.bd=a}},Ne:class{shared={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},Me:class{Uc={};Vc={};ce=365;ee=146;qd=null;constructor(a,b,c,d){a||=this;this.parent=a;this.$c=a.$c;this.id=D.oe++;this.name=b;this.mode=c;this.Rd=d;this.wd=this.ld=this.jd=Date.now()}get read(){return(this.mode&this.ce)=== +this.ce}set read(a){a?this.mode|=this.ce:this.mode&=~this.ce}get write(){return(this.mode&this.ee)===this.ee}set write(a){a?this.mode|=this.ee:this.mode&=~this.ee}get pf(){return Q(this.mode)}get nf(){return(this.mode&61440)===8192}},createNode(a,b,c,d){a=new D.Me(a,b,c,d);Qf(a);return a},le(a){return a===a.parent},isFile(a){return(a&61440)===32768},dg(a){return(a&49152)===49152},Oe:4096,bf:a=>D.streams[a],Re:{open(a){a.Vc=D.$e(a.node.Rd).Vc;a.Vc.open?.(a)},kd(){throw new D.Cc(70);}},ne:a=>a>>8,gg:a=> +a&255,Gd:(a,b)=>a<<8|b,$e:a=>D.Ce[a],Ke(a,b){function c(h){D.de--;return b(h)}function d(h){if(h){if(!d.We)return d.We=!0,c(h)}else++f>=e.length&&c(null)}typeof a=="function"&&(b=a,a=!1);D.de++;D.de>1&&p(`warning: ${D.de} FS.syncfs operations in flight at once, probably just doing extra work`);var e=Xf(D.root.$c),f=0,g;for(g of e)g.type.Ke?g.type.Ke(g,a,d):d(null)},$c(a,b,c){var d=c==="/";if(d&&D.root)throw new D.Cc(10);if(!d&&c){var e=R(c,{Zd:!1});c=e.path;e=e.node;if(e.qd)throw new D.Cc(10);if(!Q(e.mode))throw new D.Cc(54); +}b={type:a,tf:b,He:c,Pd:[]};a=a.$c(b);a.$c=b;b.root=a;d?D.root=a:e&&(e.qd=b,e.$c&&e.$c.Pd.push(b));return a},ng(a){a=R(a,{Zd:!1});if(!a.node.qd)throw new D.Cc(28);a=a.node;var b=a.qd,c=Xf(b);for([,e]of Object.entries(D.zd))for(;e;){var d=e.Id;c.includes(e.$c)&&Ef(e);var e=d}a.qd=null;a.$c.Pd.splice(a.$c.Pd.indexOf(b),1)},Fd(a,b){return a.Uc.Fd(a,b)},yd(a,b,c){var d=R(a,{parent:!0}).node;a=jf(a);if(!a)throw new D.Cc(28);if(a==="."||a==="..")throw new D.Cc(20);var e=Rf(d,a);if(e)throw new D.Cc(e);if(!d.Uc.yd)throw new D.Cc(63); +return d.Uc.yd(d,a,b,c)},Je(a){return Yf(R(a,{od:!0}).node)},lg(a){return Yf(a.node)},create(a,b=438){return D.yd(a,b&4095|32768,0)},hg(a,b){var c=a.split("/"),d="",e;for(e of c)if(e){if(d||a.charAt(0)==="/")d+="/";d+=e;try{T(d,b)}catch(f){if(f.bd!=20)throw f;}}},Ed(a,b){if(!nf(a))throw new D.Cc(44);var c=R(b,{parent:!0}).node;if(!c)throw new D.Cc(44);b=jf(b);var d=Rf(c,b);if(d)throw new D.Cc(d);if(!c.Uc.Ed)throw new D.Cc(63);return c.Uc.Ed(c,b,a)},Td(a,b){var c=hf(a),d=hf(b),e=jf(a),f=jf(b);var g= +R(a,{parent:!0});var h=g.node;g=R(b,{parent:!0});g=g.node;if(!h||!g)throw new D.Cc(44);if(h.$c!==g.$c)throw new D.Cc(75);var l=Df(h,e);a=of(a,d);if(a.charAt(0)!==".")throw new D.Cc(28);a=of(b,c);if(a.charAt(0)!==".")throw new D.Cc(55);try{var m=Df(g,f)}catch(n){}if(l!==m){b=Q(l.mode);if(e=Sf(h,e,b))throw new D.Cc(e);if(e=m?Sf(g,f,b):Rf(g,f))throw new D.Cc(e);if(!h.Uc.Td)throw new D.Cc(63);if(l.qd||m&&m.qd)throw new D.Cc(10);if(g!==h&&(e=Mf(h,"w")))throw new D.Cc(e);Ef(l);try{h.Uc.Td(l,g,f),l.parent= +g}catch(n){throw n;}finally{Qf(l)}}},Ud(a){var b=R(a,{parent:!0}).node;a=jf(a);var c=Df(b,a),d=Sf(b,a,!0);if(d)throw new D.Cc(d);if(!b.Uc.Ud)throw new D.Cc(63);if(c.qd)throw new D.Cc(10);b.Uc.Ud(b,a);Ef(c)},Sd(a){a=R(a,{od:!0}).node;return Tf(a.Uc.Sd,54)(a)},Ld(a){var b=R(a,{parent:!0}).node;if(!b)throw new D.Cc(44);a=jf(a);var c=Df(b,a),d=Sf(b,a,!1);if(d)throw new D.Cc(d);if(!b.Uc.Ld)throw new D.Cc(63);if(c.qd)throw new D.Cc(10);b.Uc.Ld(b,a);Ef(c)},Dd(a){a=R(a).node;if(!a)throw new D.Cc(44);if(!a.Uc.Dd)throw new D.Cc(28); +return a.Uc.Dd(a)},stat(a,b){a=R(a,{od:!b}).node;return Tf(a.Uc.pd,63)(a)},eg(a,b){Pf(a,b,!0)},Vf(a,b){a=S(a);$f(a,a.node,b,!1)},fg(a){a=typeof a=="string"?R(a,{od:!1}).node:a;Wf(null,a,{timestamp:Date.now(),De:!0})},Wf(a){a=S(a);Wf(a,a.node,{timestamp:Date.now(),De:!1})},truncate(a,b){if(b<0)throw new D.Cc(28);a=typeof a=="string"?R(a,{od:!0}).node:a;ag(null,a,b)},bg(a,b){a=S(a);if(b<0||(a.flags&2097155)===0)throw new D.Cc(28);ag(a,a.node,b)},og(a,b,c){a=R(a,{od:!0}).node;Tf(a.Uc.rd,63)(a,{wd:b, +ld:c})},open(a,b,c=438){if(a==="")throw new D.Cc(44);if(typeof b=="string"){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof d=="undefined")throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if(typeof a=="object")d=a;else{var e=a.endsWith("/");var f=R(a,{od:!(b&131072),sf:!0});d=f.node;a=f.path}f=!1;if(b&64)if(d){if(b&128)throw new D.Cc(20);}else{if(e)throw new D.Cc(31);d=D.yd(a,c|511,0);f=!0}if(!d)throw new D.Cc(44);(d.mode&61440)===8192&&(b&=-513);if(b&65536&&!Q(d.mode))throw new D.Cc(54); +if(!f&&(d?(d.mode&61440)===40960?e=32:(e=["r","w","rw"][b&3],b&512&&(e+="w"),e=Q(d.mode)&&(e!=="r"||b&576)?31:Mf(d,e)):e=44,e))throw new D.Cc(e);b&512&&!f&&D.truncate(d,0);b&=-131713;b=Uf({node:d,path:Of(d),flags:b,seekable:!0,position:0,Vc:d.Vc,Gf:[],error:!1});b.Vc.open&&b.Vc.open(b);f&&Pf(d,c&511);return b},close(a){if(a.Cd===null)throw new D.Cc(8);a.he&&(a.he=null);try{a.Vc.close&&a.Vc.close(a)}catch(b){throw b;}finally{D.streams[a.Cd]=null}a.Cd=null},kd(a,b,c){if(a.Cd===null)throw new D.Cc(8); +if(!a.seekable||!a.Vc.kd)throw new D.Cc(70);if(c!=0&&c!=1&&c!=2)throw new D.Cc(28);a.position=a.Vc.kd(a,b,c);a.Gf=[];return a.position},read(a,b,c,d,e){if(d<0||e<0)throw new D.Cc(28);if(a.Cd===null)throw new D.Cc(8);if((a.flags&2097155)===1)throw new D.Cc(8);if(Q(a.node.mode))throw new D.Cc(31);if(!a.Vc.read)throw new D.Cc(28);var f=typeof e!="undefined";if(!f)e=a.position;else if(!a.seekable)throw new D.Cc(70);b=a.Vc.read(a,b,c,d,e);f||(a.position+=b);return b},write(a,b,c,d,e,f){if(d<0||e<0)throw new D.Cc(28); +if(a.Cd===null)throw new D.Cc(8);if((a.flags&2097155)===0)throw new D.Cc(8);if(Q(a.node.mode))throw new D.Cc(31);if(!a.Vc.write)throw new D.Cc(28);a.seekable&&a.flags&1024&&D.kd(a,0,2);var g=typeof e!="undefined";if(!g)e=a.position;else if(!a.seekable)throw new D.Cc(70);b=a.Vc.write(a,b,c,d,e,f);g||(a.position+=b);return b},Hd(a,b,c,d,e){if((d&2)!==0&&(e&2)===0&&(a.flags&2097155)!==2)throw new D.Cc(2);if((a.flags&2097155)===1)throw new D.Cc(2);if(!a.Vc.Hd)throw new D.Cc(43);if(!b)throw new D.Cc(28); +return a.Vc.Hd(a,b,c,d,e)},Kd(a,b,c,d,e){return a.Vc.Kd?a.Vc.Kd(a,b,c,d,e):0},je(a,b,c){if(!a.Vc.je)throw new D.Cc(59);return a.Vc.je(a,b,c)},pg(a,b,c={}){c.flags=c.flags??577;a=D.open(a,c.flags,c.mode);b=Ff(b);D.write(a,b,0,b.byteLength,void 0,c.Rf);D.close(a)},Xd:()=>D.Ae,Sf(a){a=R(a,{od:!0});if(a.node===null)throw new D.Cc(44);if(!Q(a.node.mode))throw new D.Cc(54);var b=Mf(a.node,"x");if(b)throw new D.Cc(b);D.Ae=a.path},init(a,b,c){D.ie=!0;a?D.Bd("/dev","stdin",a):D.Ed("/dev/tty","/dev/stdin"); +b?D.Bd("/dev","stdout",null,b):D.Ed("/dev/tty","/dev/stdout");c?D.Bd("/dev","stderr",null,c):D.Ed("/dev/tty1","/dev/stderr");D.open("/dev/stdin",0);D.open("/dev/stdout",1);D.open("/dev/stderr",1)},kg(){D.ie=!1;for(var a of D.streams)a&&D.close(a)},Yf(a,b){try{var c=R(a,{od:!b});a=c.path}catch(f){}var d=!1,e=null;try{c=R(a,{parent:!0}),jf(a),c=R(a,{od:!b}),d=!0,e=c.node}catch(f){}return d?e:null},Bd(a,b,c,d){a=kf(typeof a=="string"?a:Of(a),b);b=Gf(!!c,!!d);var e;(e=D.Bd).ne??(e.ne=64);e=D.Gd(D.Bd.ne++, +0);yf(e,{open(f){f.seekable=!1},close(){d?.buffer?.length&&d(10)},read(f,g,h,l){for(var m=0,n=0;na?rf((t(),v),a,b,c):"",gg=18;function hg(a,b,c){if(b.charAt(0)==="/")return b;a= +a===-100?D.Xd():S(a).path;if(b.length==0){if(!c)throw new D.Cc(44);return a}return a+"/"+b}function ig(a,b){(t(),B)[a>>2]=b.Te;(t(),B)[a+4>>2]=b.mode;(t(),B)[a+8>>2]=b.rf;(t(),B)[a+12>>2]=b.uid;(t(),B)[a+16>>2]=b.ef;(t(),B)[a+20>>2]=b.Rd;(t(),C)[a+24>>3]=BigInt(b.size);(t(),w)[a+32>>2]=4096;(t(),w)[a+36>>2]=b.ve;var c=b.wd.getTime(),d=b.ld.getTime(),e=b.jd.getTime();(t(),C)[a+40>>3]=BigInt(Math.floor(c/1E3));(t(),B)[a+48>>2]=c%1E3*1E3*1E3;(t(),C)[a+56>>3]=BigInt(Math.floor(d/1E3));(t(),B)[a+64>>2]= +d%1E3*1E3*1E3;(t(),C)[a+72>>3]=BigInt(Math.floor(e/1E3));(t(),B)[a+80>>2]=e%1E3*1E3*1E3;(t(),C)[a+88>>3]=BigInt(b.jf);return 0}var ef=void 0;function ab(a,b,c){if(k)return L(3,1,a,b,c);ef=c;try{var d=S(a);switch(b){case 0:var e=N();if(e<0)break;for(;D.streams[e];)e++;return Vf(d,e).Cd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=N(),d.flags=d.flags&-289793|e&289792,0;case 12:return e=N(),(t(),Da)[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if(typeof D=="undefined"||f.name!== +"ErrnoError")throw f;return-f.bd}}function bb(a,b){if(k)return L(4,1,a,b);try{var c=S(a),d=c.node,e=c.Vc.pd;a=e?c:d;e??=d.Uc.pd;Tf(e,63);var f=e(a);return ig(b,f)}catch(g){if(typeof D=="undefined"||g.name!=="ErrnoError")throw g;return-g.bd}}function cb(a,b,c){if(k)return L(5,1,a,b,c);ef=c;try{var d=S(a);switch(b){case 21509:return d.Yc?0:-59;case 21505:if(!d.Yc)return-59;if(d.Yc.Ad.kf){a=[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];var e=N();(t(),w)[e>>2]=25856;(t(), +w)[e+4>>2]=5;(t(),w)[e+8>>2]=191;(t(),w)[e+12>>2]=35387;for(var f=0;f<32;f++)(t(),u)[e+f+17]=a[f]||0}return 0;case 21510:case 21511:case 21512:return d.Yc?0:-59;case 21506:case 21507:case 21508:if(!d.Yc)return-59;if(d.Yc.Ad.lf)for(e=N(),t(),t(),t(),t(),a=[],f=0;f<32;f++)a.push((t(),u)[e+f+17]);return 0;case 21519:if(!d.Yc)return-59;e=N();return(t(),w)[e>>2]=0;case 21520:return d.Yc?-28:-59;case 21537:case 21531:return e=N(),D.je(d,b,e);case 21523:if(!d.Yc)return-59;d.Yc.Ad.mf&&(f=[24,80],e=N(),(t(), +Da)[e>>1]=f[0],(t(),Da)[e+2>>1]=f[1]);return 0;case 21524:return d.Yc?0:-59;case 21515:return d.Yc?0:-59;default:return-28}}catch(g){if(typeof D=="undefined"||g.name!=="ErrnoError")throw g;return-g.bd}}function db(a,b){if(k)return L(6,1,a,b);try{return a=U(a),ig(b,D.stat(a,!0))}catch(c){if(typeof D=="undefined"||c.name!=="ErrnoError")throw c;return-c.bd}}function eb(a,b,c,d){if(k)return L(7,1,a,b,c,d);try{b=U(b);var e=d&256;b=hg(a,b,d&4096);return ig(c,e?D.stat(b,!0):D.stat(b))}catch(f){if(typeof D== +"undefined"||f.name!=="ErrnoError")throw f;return-f.bd}}function fb(a,b,c,d){if(k)return L(8,1,a,b,c,d);ef=d;try{b=U(b);b=hg(a,b);var e=d?N():0;c&64&&(e&=~gg);return D.open(b,c,e).Cd}catch(f){if(typeof D=="undefined"||f.name!=="ErrnoError")throw f;return-f.bd}}function gb(a,b){if(k)return L(9,1,a,b);try{return a=U(a),ig(b,D.stat(a))}catch(c){if(typeof D=="undefined"||c.name!=="ErrnoError")throw c;return-c.bd}}var hb=()=>E(""),jg={},kg=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function lg(a){return this.cd((t(), +B)[a>>2])}var mg={},ng={},og={},pg=class extends Error{constructor(a){super(a);this.name="InternalError"}},qg=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new pg("Mismatched type converter count");for(var l=0;log[h]=b);var e=Array(b.length),f=[],g=0;for(let [h,l]of b.entries())ng.hasOwnProperty(l)?e[h]=ng[l]:(f.push(l),mg.hasOwnProperty(l)||(mg[l]=[]),mg[l].push(()=>{e[h]=ng[l];++g;g===f.length&&d(e)}));0===f.length&&d(e)},ib=a=>{var b=jg[a]; +delete jg[a];var c=b.qe,d=b.ud,e=b.Ee,f=e.map(g=>g.df).concat(e.map(g=>g.zf));qg([a],f,g=>{var h={},l,m;for([l,m]of e.entries()){let n=g[l],q=m.Od,x=m.cf,y=g[l+e.length],z=m.yf,A=m.Af;h[m.Xe]={read:F=>n.cd(q(x,F)),write:(F,H)=>{var K=[];z(A,F,y.fd(K,H));kg(K)},optional:n.optional}}return[{name:b.name,cd:n=>{var q={},x;for(x in h)q[x]=h[x].read(n);d(n);return q},fd:(n,q)=>{for(var x in h)if(!(x in q||h[x].optional))throw new TypeError(`Missing field: "${x}"`);var y=c();for(x in h)h[x].write(y,q[x]); +n!==null&&n.push(d,y);return y},vd:lg,nd:d}]})},W=a=>{for(var b="";;){var c=(t(),v)[a++];if(!c)return b;b+=String.fromCharCode(c)}},X=class extends Error{constructor(a){super(a);this.name="BindingError"}};function rg(a,b,c={}){var d=b.name;if(!a)throw new X(`type "${d}" must have a positive integer typeid pointer`);if(ng.hasOwnProperty(a)){if(c.hf)return;throw new X(`Cannot register type '${d}' twice`);}ng[a]=b;delete og[a];mg.hasOwnProperty(a)&&(b=mg[a],delete mg[a],b.forEach(e=>e()))}function V(a, +b,c={}){return rg(a,b,c)}var sg=(a,b,c)=>{switch(b){case 1:return c?d=>(t(),u)[d]:d=>(t(),v)[d];case 2:return c?d=>(t(),Da)[d>>1]:d=>(t(),Ea)[d>>1];case 4:return c?d=>(t(),w)[d>>2]:d=>(t(),B)[d>>2];case 8:return c?d=>(t(),C)[d>>3]:d=>(t(),Ha)[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=(a,b,c,d,e)=>{b=W(b);d=d===0n;var f=g=>g;if(d){let g=c*8;f=h=>BigInt.asUintN(g,h);e=f(e)}V(a,{name:b,cd:f,fd:(g,h)=>{typeof h=="number"&&(h=BigInt(h));return h},vd:sg(b,c,!d),nd:null})}, +kb=(a,b,c,d)=>{b=W(b);V(a,{name:b,cd:function(e){return!!e},fd:function(e,f){return f?c:d},vd:function(e){return this.cd((t(),v)[e])},nd:null})},tg=a=>{throw new X(a.Tc.ad.Zc.name+" instance already deleted");},ug=!1,vg=()=>{},wg=a=>{if(!globalThis.FinalizationRegistry)return wg=b=>b,a;ug=new FinalizationRegistry(b=>{b=b.Tc;--b.count.value;0===b.count.value&&(b.ed?b.md.ud(b.ed):b.ad.Zc.ud(b.Wc))});wg=b=>{var c=b.Tc;c.ed&&ug.register(b,{Tc:c},b);return b};vg=b=>{ug.unregister(b)};return wg(a)},xg= +[];function yg(){}var zg=(a,b)=>Object.defineProperty(b,"name",{value:a}),Ag={},Bg=(a,b,c)=>{if(void 0===a[b].dd){var d=a[b];a[b]=function(...e){if(!a[b].dd.hasOwnProperty(e.length))throw new X(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].dd})!`);return a[b].dd[e.length].apply(this,e)};a[b].dd=[];a[b].dd[d.Md]=d}},Cg=(a,b,c)=>{if(Module.hasOwnProperty(a)){if(void 0===c||void 0!==Module[a].dd&&void 0!==Module[a].dd[c])throw new X(`Cannot register public name '${a}' twice`); +Bg(Module,a,a);if(Module[a].dd.hasOwnProperty(c))throw new X(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);Module[a].dd[c]=b}else Module[a]=b,Module[a].Md=c},Dg=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return b>=48&&b<=57?`_${a}`:a};function Eg(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.Jd=c;this.ud=d;this.hd=e;this.Ze=f;this.Vd=g;this.Ue=h;this.vf=[]}var Fg=(a,b,c)=>{for(;b!==c;){if(!b.Vd)throw new X(`Expected null or instance of ${c.name}, got an instance of ${b.name}`); +a=b.Vd(a);b=b.hd}return a},Gg=a=>{if(a===null)return"null";var b=typeof a;return b==="object"||b==="array"||b==="function"?a.toString():""+a};function Hg(a,b){if(b===null){if(this.ke)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.Tc)throw new X(`Cannot pass "${Gg(b)}" as a ${this.name}`);if(!b.Tc.Wc)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);return Fg(b.Tc.Wc,b.Tc.ad.Zc,this.Zc)}function Ig(a,b){if(b===null){if(this.ke)throw new X(`null is not a valid ${this.name}`); +if(this.be){var c=this.qe();a!==null&&a.push(this.ud,c);return c}return 0}if(!b||!b.Tc)throw new X(`Cannot pass "${Gg(b)}" as a ${this.name}`);if(!b.Tc.Wc)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.ae&&b.Tc.ad.ae)throw new X(`Cannot convert argument of type ${b.Tc.md?b.Tc.md.name:b.Tc.ad.name} to parameter type ${this.name}`);c=Fg(b.Tc.Wc,b.Tc.ad.Zc,this.Zc);if(this.be){if(void 0===b.Tc.ed)throw new X("Passing raw pointer to smart pointer is illegal");switch(this.Bf){case 0:if(b.Tc.md=== +this)c=b.Tc.ed;else throw new X(`Cannot convert argument of type ${b.Tc.md?b.Tc.md.name:b.Tc.ad.name} to parameter type ${this.name}`);break;case 1:c=b.Tc.ed;break;case 2:if(b.Tc.md===this)c=b.Tc.ed;else{var d=b.clone();c=this.wf(c,Jg(()=>d["delete"]()));a!==null&&a.push(this.ud,c)}break;default:throw new X("Unsupported sharing policy");}}return c}function Kg(a,b){if(b===null){if(this.ke)throw new X(`null is not a valid ${this.name}`);return 0}if(!b.Tc)throw new X(`Cannot pass "${Gg(b)}" as a ${this.name}`); +if(!b.Tc.Wc)throw new X(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.Tc.ad.ae)throw new X(`Cannot convert argument of type ${b.Tc.ad.name} to parameter type ${this.name}`);return Fg(b.Tc.Wc,b.Tc.ad.Zc,this.Zc)}var Lg=(a,b,c)=>{if(b===c)return a;if(void 0===c.hd)return null;a=Lg(a,b,c.hd);return a===null?null:c.Ue(a)},Mg={},Ng=(a,b)=>{if(b===void 0)throw new X("ptr should not be undefined");for(;a.hd;)b=a.Vd(b),a=a.hd;return Mg[b]},Og=(a,b)=>{if(!b.ad||!b.Wc)throw new pg("makeClassHandle requires ptr and ptrType"); +if(!!b.md!==!!b.ed)throw new pg("Both smartPtrType and smartPtr must be specified");b.count={value:1};return wg(Object.create(a,{Tc:{value:b,writable:!0}}))};function Pg(a,b,c,d,e,f,g,h,l,m,n){this.name=a;this.Zc=b;this.ke=c;this.ae=d;this.be=e;this.uf=f;this.Bf=g;this.Ie=h;this.qe=l;this.wf=m;this.ud=n;e||b.hd!==void 0?this.fd=Ig:(this.fd=d?Hg:Kg,this.nd=null)}var Qg=(a,b,c)=>{if(!Module.hasOwnProperty(a))throw new pg("Replacing nonexistent public symbol");void 0!==Module[a].dd&&void 0!==c?Module[a].dd[c]= +b:(Module[a]=b,Module[a].Md=c)},Y=(a,b)=>{a=W(a);var c=M(b);if(typeof c!="function")throw new X(`unknown function pointer with signature ${a}: ${b}`);return c};class Rg extends Error{}var Sg=a=>{a=oe(a);var b=W(a);me(a);return b},Tg=(a,b)=>{function c(f){e[f]||ng[f]||(og[f]?og[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Rg(`${a}: `+d.map(Sg).join([", "]));},lb=(a,b,c,d,e,f,g,h,l,m,n,q,x)=>{n=W(n);f=Y(e,f);h&&=Y(g,h);m&&=Y(l,m);x=Y(q,x);var y=Dg(n);Cg(y,function(){Tg(`Cannot construct ${n} due to unbound types`, +[d])});qg([a,b,c],d?[d]:[],z=>{z=z[0];if(d){var A=z.Zc;var F=A.Jd}else F=yg.prototype;z=zg(n,function(...O){if(Object.getPrototypeOf(this)!==H)throw new X(`Use 'new' to construct ${n}`);if(void 0===K.ze)throw new X(`${n} has no accessible constructor`);var yd=K.ze[O.length];if(void 0===yd)throw new X(`Tried to invoke ctor of ${n} with invalid number of parameters (${O.length}) - expected (${Object.keys(K.ze).toString()}) parameters instead!`);return yd.apply(this,O)});var H=Object.create(F,{constructor:{value:z}}); +z.prototype=H;var K=new Eg(n,z,H,x,A,f,h,m);if(K.hd){var na;(na=K.hd).re??(na.re=[]);K.hd.re.push(K)}A=new Pg(n,K,!0,!1,!1);na=new Pg(n+"*",K,!1,!1,!1);F=new Pg(n+" const*",K,!1,!0,!1);Ag[a]={pointerType:na,Se:F};Qg(y,z);return[A,na,F]})};function Ug(a){for(var b=1;b{for(var c=[],d=0;d>2]);return c},Xg=a=>{a=a.trim();var b=a.indexOf("(");return b===-1?a:a.slice(0,b)},mb=(a,b,c,d,e,f,g,h)=>{var l= +Wg(c,d);b=W(b);b=Xg(b);f=Y(e,f);qg([],[a],m=>{function n(){Tg(`Cannot call ${q} due to unbound types`,l)}m=m[0];var q=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&m.Zc.vf.push(b);var x=m.Zc.Jd,y=x[b];void 0===y||void 0===y.dd&&y.className!==m.name&&y.Md===c-2?(n.Md=c-2,n.className=m.name,x[b]=n):(Bg(x,b,q),x[b].dd[c-2]=n);qg([],l,z=>{z=Vg(q,z,m,f,g);void 0===x[b].dd?(z.Md=c-2,x[b]=z):x[b].dd[c-2]=z;return[]});return[]})},Yg=[],Zg=[0,1,,1,null,1,!0,1,!1,1],$g=[],Fb=a=>{if(a>9&& +0===--Zg[a+1]){var b=Zg[a];Zg[a]=void 0;var c=$g[a];c&&($g[a]=void 0,c(b));Yg.push(a)}},Z=a=>{if(!a)throw new X(`Cannot use deleted val. handle = ${a}`);return Zg[a]},Jg=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:let b=Yg.pop()||Zg.length;Zg[b]=a;Zg[b+1]=1;return b}},ah={name:"emscripten::val",cd:a=>{var b=Z(a);Fb(a);return b},fd:(a,b)=>Jg(b),vd:lg,nd:null},nb=a=>V(a,ah),bh=(a,b)=>{switch(b){case 4:return function(c){return this.cd((t(),Fa)[c>> +2])};case 8:return function(c){return this.cd((t(),Ga)[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},ob=(a,b,c)=>{b=W(b);V(a,{name:b,cd:d=>d,fd:(d,e)=>e,vd:bh(b,c),nd:null})},pb=(a,b,c,d,e,f)=>{var g=Wg(b,c);a=W(a);a=Xg(a);e=Y(d,e);Cg(a,function(){Tg(`Cannot call ${a} due to unbound types`,g)},b-1);qg([],g,h=>{Qg(a,Vg(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},qb=(a,b,c,d,e)=>{b=W(b);var f=h=>h;if(d===0){var g=32-8*c;f=h=>h<>>g;e=f(e)}V(a,{name:b,cd:f, +fd:(h,l)=>l,vd:sg(b,c,d!==0),nd:null})},rb=(a,b,c)=>{function d(f){var g=(t(),B)[f>>2];f=(t(),B)[f+4>>2];return new e((t(),u).buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=W(c);V(a,{name:c,cd:d,vd:d},{hf:!0})},ch=Object.assign({optional:!0},ah),sb=a=>{V(a,ch)},dh=(a,b,c)=>uf(a,(t(),v),b,c),tb=(a,b)=>{b=W(b);V(a,{name:b,cd(c){var d=(t(),B)[c>>2];d=U(c+4,d,!0);me(c);return d},fd(c,d){d instanceof ArrayBuffer&& +(d=new Uint8Array(d));var e=typeof d=="string";if(!(e||ArrayBuffer.isView(d)&&d.BYTES_PER_ELEMENT==1))throw new X("Cannot pass non-string to std::string");var f=e?tf(d):d.length;var g=je(4+f+1),h=g+4;(t(),B)[g>>2]=f;e?dh(d,h,f+1):(t(),v).set(d,h);c!==null&&c.push(me,g);return g},vd:lg,nd(c){me(c)}})},eh=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,fh=(a,b,c)=>{a>>=1;b=qf((t(),Ea),a,b/2,c);if(b-a>16&&eh)return eh.decode((t(),Ea).slice(a,b));for(c="";a{if(c<2)return 0;c-=2;var d=b;c=c>1]=f;b+=2}(t(),Da)[b>>1]=0;return b-d},hh=a=>a.length*2,ih=(a,b,c)=>{var d="";a>>=2;for(var e=0;!(e>=b/4);e++){var f=(t(),B)[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},jh=(a,b,c=2147483647)=>{if(c<4)return 0;var d=b;c=d+c-4;for(var e=0;e65535&&e++;(t(),w)[b>>2]=f;b+=4;if(b+4>c)break}(t(),w)[b>>2]=0;return b-d}, +kh=a=>{for(var b=0,c=0;c65535&&c++,b+=4;return b},ub=(a,b,c)=>{c=W(c);if(b===2){var d=fh;var e=gh;var f=hh}else d=ih,e=jh,f=kh;V(a,{name:c,cd:g=>{var h=(t(),B)[g>>2];h=d(g+4,h*b,!0);me(g);return h},fd:(g,h)=>{if(typeof h!="string")throw new X(`Cannot pass non-string to C++ string type ${c}`);var l=f(h),m=je(4+l+b);(t(),B)[m>>2]=l/b;e(h,m+4,l+b);g!==null&&g.push(me,m);return m},vd:lg,nd(g){me(g)}})},vb=(a,b,c,d,e,f)=>{jg[a]={name:W(b),qe:Y(c,d),ud:Y(e,f),Ee:[]}},wb=(a, +b,c,d,e,f,g,h,l,m)=>{jg[a].Ee.push({Xe:W(b),df:c,Od:Y(d,e),cf:f,zf:g,yf:Y(h,l),Af:m})},xb=(a,b)=>{b=W(b);V(a,{qf:!0,name:b,cd:()=>{},fd:()=>{}})},yb=a=>{var b=!aa;try{Atomics.wait((t(),w),0,0,0),b=!0}catch(c){}va(a,!ba,1,b,5242880,!1);wa()},lh=a=>{if(!(a instanceof De||a=="unwind"))throw a;},Xe=a=>{if(!ka)try{a()}catch(b){lh(b)}finally{if(!(Re||Qe>0))try{k?ke()&&te(la):kc(la)}catch(b){lh(b)}}},xa=a=>{Te||(Atomics.waitAsync((t(),w),a>>2,a).value.then(Aa),a+=112,Atomics.store((t(),w),a>>2,1))},Aa=()=> +{var a=ke();a&&Xe(()=>{xa(a);ve()})},zb=(a,b)=>{a==b?setTimeout(Aa):k?postMessage({Le:a,xd:4}):(a=Oe[a])&&a.postMessage({xd:4})},mh=[],Ab=(a,b,c,d,e,f,g)=>{mh.length=0;c=e>>3;for(d=e+d>>3;cqe(f,g,h));else return a},Bb=()=>{Re=!1;Qe=0},Cb=a=>{k?postMessage({xd:6,Ef:a}):We(Oe[a])},Db=()=>{},ph=[],qh=a=>{var b=ph.length;ph.push(a);return b},rh=(a,b)=>{for(var c=Array(a),d=0;d>2],g=ng[f];if(void 0===g)throw a=`${`parameter ${d}`} has unknown type ${Sg(f)}`,new X(a);c[e]=g}return c},sh={},th=a=>{var b=sh[a];return b===void 0?W(a):b},Eb=(a,b,c)=>{var d;[b,...d]=rh(a,b);var e=b.fd.bind(b),f=d.map(h=>h.vd.bind(h));a--;var g=Array(a);b=`methodCaller<(${d.map(h=>h.name)}) => ${b.name}>`;return qh(zg(b,(h,l,m,n)=>{for(var q=0,x=0;x>2]=Jg(h));return y}))},Gb=a=>{if(!a)return Jg(globalThis);a=th(a);return Jg(globalThis[a])},Hb=(a,b)=>{a=Z(a);b=Z(b);return Jg(a[b])},Ib=a=>{a>9&&(Zg[a+1]+=1)},Jb=(a,b,c,d,e)=>ph[a](b,c,d,e),Kb=a=>{a=Z(a);return typeof a=="string"},Lb=()=>Jg([]),Mb=a=>Jg(th(a)),Nb=()=>Jg({}),Ob=a=>{var b=Z(a);kg(b);Fb(a)},Pb=(a,b,c)=>{a=Z(a);b=Z(b);c=Z(c);a[b]=c},uh=a=>a%4===0&&(a%100!==0||a%400===0),vh=[0,31,60,91,121,152,182,213,244,274,305,335],wh=[0,31,59, +90,120,151,181,212,243,273,304,334];function Qb(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);if(isNaN(a.getTime()))return 1;(t(),w)[b>>2]=a.getSeconds();(t(),w)[b+4>>2]=a.getMinutes();(t(),w)[b+8>>2]=a.getHours();(t(),w)[b+12>>2]=a.getDate();(t(),w)[b+16>>2]=a.getMonth();(t(),w)[b+20>>2]=a.getFullYear()-1900;(t(),w)[b+24>>2]=a.getDay();var c=(uh(a.getFullYear())?vh:wh)[a.getMonth()]+a.getDate()-1|0;(t(),w)[b+28>>2]=c;(t(),w)[b+36>>2]=-(a.getTimezoneOffset()*60);c= +(new Date(a.getFullYear(),6,1)).getTimezoneOffset();var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;(t(),w)[b+32>>2]=a;return 0}function Rb(a){var b=(()=>{var c=new Date((t(),w)[a+20>>2]+1900,(t(),w)[a+16>>2],(t(),w)[a+12>>2],(t(),w)[a+8>>2],(t(),w)[a+4>>2],(t(),w)[a>>2],0);if(isNaN(c.getTime()))return-1;var d=(t(),w)[a+32>>2],e=c.getTimezoneOffset(),f=(new Date(c.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(c.getFullYear(),0,1)).getTimezoneOffset(), +h=Math.min(g,f);if(d<0)d=Number(f!=g&&h==e);else if(d>0!=(h==e)&&(f=Math.max(g,f),c.setTime(c.getTime()+((d>0?h:f)-e)*6E4),isNaN(c.getTime())))return-1;(t(),w)[a+32>>2]=d;(t(),w)[a+24>>2]=c.getDay();d=(uh(c.getFullYear())?vh:wh)[c.getMonth()]+c.getDate()-1|0;(t(),w)[a+28>>2]=d;(t(),w)[a>>2]=c.getSeconds();(t(),w)[a+4>>2]=c.getMinutes();(t(),w)[a+8>>2]=c.getHours();(t(),w)[a+12>>2]=c.getDate();(t(),w)[a+16>>2]=c.getMonth();(t(),w)[a+20>>2]=c.getYear();return c.getTime()/1E3})();return BigInt(b)}function Sb(a, +b,c,d,e,f,g){if(k)return L(10,1,a,b,c,d,e,f,g);e=e<-9007199254740992||e>9007199254740992?NaN:Number(e);try{var h=S(d),l=D.Hd(h,a,e,b,c),m=l.Wc;(t(),w)[f>>2]=l.ue;(t(),B)[g>>2]=m;return 0}catch(n){if(typeof D=="undefined"||n.name!=="ErrnoError")throw n;return-n.bd}}function Tb(a,b,c,d,e,f){if(k)return L(11,1,a,b,c,d,e,f);f=f<-9007199254740992||f>9007199254740992?NaN:Number(f);try{var g=S(e);if(c&2){c=f;if(!D.isFile(g.node.mode))throw new D.Cc(43);if(!(d&2)){var h=(t(),v).subarray(a,a+b);D.Kd(g,h,c, +b,d)}}}catch(l){if(typeof D=="undefined"||l.name!=="ErrnoError")throw l;return-l.bd}}var xh={},dc=()=>performance.timeOrigin+performance.now();function Ub(a,b){if(k)return L(12,1,a,b);xh[a]&&(clearTimeout(xh[a].id),delete xh[a]);if(!b)return 0;var c=setTimeout(()=>{delete xh[a];Xe(()=>ue(a,performance.timeOrigin+performance.now()))},b);xh[a]={id:c,mg:b};return 0}var Vb=(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g= +Math.max(f,e);(t(),B)[a>>2]=g*60;(t(),w)[b>>2]=Number(f!=e);b=h=>{var l=Math.abs(h);return`UTC${h>=0?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(f);b=b(e);eDate.now(),yh=1;function Xb(a,b,c){if(!(a>=0&&a<=3))return 28;if(a===0)a=Date.now();else if(yh)a=performance.timeOrigin+performance.now();else return 52;a=Math.round(a*1E3*1E3);(t(),C)[c>>3]=BigInt(a);return 0}var zh=[],Yb=(a,b,c)=>{zh.length= +0;for(var d;d=(t(),v)[b++];){var e=d!=105;e&=d!=112;c+=e&&c%8?4:0;zh.push(d==112?(t(),B)[c>>2]:d==106?(t(),C)[c>>3]:d==105?(t(),w)[c>>2]:(t(),Ga)[c>>3]);c+=e?8:4}return nh[a](...zh)},Zb=()=>{},ac=()=>{Qe+=1;throw"unwind";},bc=(a,b,c)=>{var d=Error().stack.toString(),e=d.split("\n");d="";var f=RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),g=RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"),h;for(h of e){var l=g.exec(h);if(l?.length==5){e=l[1];var m=l[2];var n=l[3];l=l[4]}else if(l=f.exec(h),l?.length>=4)e= +l[1],m=l[2],n=l[3],l=l[4]|0;else{d+=h+"\n";continue}e=="_emscripten_log"||e=="_emscripten_get_callstack"?d="":a&24&&(a&64&&(m=m.substring(m.replace(/\\/g,"/").lastIndexOf("/")+1)),d+=` at ${e} (${m}:${n}:${l})\n`)}a=d=d.replace(/\s+$/,"");return!b||c<=0?tf(a)+1:dh(a,b,c)+1},cc=()=>2147483648,fc=a=>{var b=(t(),v).length;a>>>=0;if(a<=b||a>2147483648)return!1;for(var c=1;c<=4;c*=2){a:{var d=(Math.min(2147483648,Math.ceil(Math.max(a,b+2097152/c)/65536)*65536)-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d); +pa();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Ah=(a,b)=>{Qe+=1;return setTimeout(()=>{--Qe;Xe(a)},b)},hc=(a,b,c)=>Ah(()=>M(a)(c),b),Bh={},Dh=()=>{if(!Ch){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in Bh)Bh[b]===void 0?delete a[b]:a[b]=Bh[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Ch=c}return Ch},Ch;function ic(a,b){if(k)return L(13,1,a,b);var c= +0,d=0,e;for(e of Dh()){var f=b+c;(t(),B)[a+d>>2]=f;c+=dh(e,f,Infinity)+1;d+=4}return 0}function jc(a,b){if(k)return L(14,1,a,b);var c=Dh();(t(),B)[a>>2]=c.length;a=0;for(var d of c)a+=tf(d)+1;(t(),B)[b>>2]=a;return 0}function lc(a){if(k)return L(15,1,a);try{var b=S(a);D.close(b);return 0}catch(c){if(typeof D=="undefined"||c.name!=="ErrnoError")throw c;return c.bd}}function mc(a,b){if(k)return L(16,1,a,b);try{var c=S(a),d=c.Yc?2:Q(c.mode)?3:(c.mode&61440)===40960?7:4;(t(),u)[b]=d;(t(),Da)[b+2>>1]= +0;(t(),C)[b+8>>3]=BigInt(0);(t(),C)[b+16>>3]=BigInt(0);return 0}catch(e){if(typeof D=="undefined"||e.name!=="ErrnoError")throw e;return e.bd}}function nc(a,b,c,d){if(k)return L(17,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),B)[a+4>>2];a+=8;var m=D.read(e,(t(),u),h,l,f);if(m<0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(q){if(typeof D=="undefined"||q.name!=="ErrnoError")throw q;return q.bd}}function oc(a, +b,c,d){if(k)return L(18,1,a,b,c,d);b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 22;var e=S(a);D.kd(e,b,c);(t(),C)[d>>3]=BigInt(e.position);e.he&&b===0&&c===0&&(e.he=null);return 0}catch(f){if(typeof D=="undefined"||f.name!=="ErrnoError")throw f;return f.bd}}function pc(a,b,c,d){if(k)return L(19,1,a,b,c,d);try{a:{var e=S(a);a=b;for(var f,g=b=0;g>2],l=(t(),B)[a+4>>2];a+=8;var m=D.write(e,(t(),u),h,l,f);if(m<0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(q){if(typeof D=="undefined"||q.name!=="ErrnoError")throw q;return q.bd}}var ee=a=>a,ge=(a,b)=>mf((t(),v).subarray(a,a+b));k||Ue();D.Tf=(a,b,c,d,e,f,g,h,l,m)=>{Lf(a,b,c,d,e,h,l,m).then(f).catch(g)};D.jg=Lf;D.zd=Array(4096);D.$c(P,{},"/");T("/tmp");T("/home");T("/home/web_user");(function(){T("/dev");yf(D.Gd(1,3),{read:()=>0,write:(d,e,f,g)=>g,kd:()=>0});Zf("/dev/null",D.Gd(1,3));xf(D.Gd(5,0),Af);xf(D.Gd(6,0),Bf);Zf("/dev/tty",D.Gd(5, +0));Zf("/dev/tty1",D.Gd(6,0));var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(mf(a),b=a.byteLength);return a[--b]};D.Bd("/dev","random",c);D.Bd("/dev","urandom",c);T("/dev/shm");T("/dev/shm/tmp")})();(function(){T("/proc");var a=T("/proc/self");T("/proc/self/fd");D.$c({$c(){var b=D.createNode(a,"fd",16895,73);b.Vc={kd:P.Vc.kd};b.Uc={Fd(c,d){c=+d;var e=S(c);c={parent:null,$c:{He:"fake"},Uc:{Dd:()=>e.path},id:c+1};return c.parent=c},Sd(){return Array.from(D.streams.entries()).filter(([,c])=>c).map(([c])=> +c.toString())}};return b}},{},"/proc/self/fd")})();D.Ye={MEMFS:P};(()=>{var a=yg.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof yg&&c instanceof yg))return!1;var d=this.Tc.ad.Zc,e=this.Tc.Wc;c.Tc=c.Tc;var f=c.Tc.ad.Zc;for(c=c.Tc.Wc;d.hd;)e=d.Vd(e),d=d.hd;for(;f.hd;)c=f.Vd(c),f=f.hd;return d===f&&e===c},clone:function(){this.Tc.Wc||tg(this);if(this.Tc.Qd)return this.Tc.count.value+=1,this;var c=wg,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.Tc;c=c(e.call(d,f,{Tc:{value:{count:g.count, +Nd:g.Nd,Qd:g.Qd,Wc:g.Wc,ad:g.ad,ed:g.ed,md:g.md}}}));c.Tc.count.value+=1;c.Tc.Nd=!1;return c},["delete"](){this.Tc.Wc||tg(this);if(this.Tc.Nd&&!this.Tc.Qd)throw new X("Object already scheduled for deletion");vg(this);var c=this.Tc;--c.count.value;0===c.count.value&&(c.ed?c.md.ud(c.ed):c.ad.Zc.ud(c.Wc));this.Tc.Qd||(this.Tc.ed=void 0,this.Tc.Wc=void 0)},isDeleted:function(){return!this.Tc.Wc},deleteLater:function(){this.Tc.Wc||tg(this);if(this.Tc.Nd&&!this.Tc.Qd)throw new X("Object already scheduled for deletion"); +xg.push(this);this.Tc.Nd=!0;return this}});var b=Symbol.dispose;b&&(a[b]=a["delete"])})();Object.assign(Pg.prototype,{af(a){this.Ie&&(a=this.Ie(a));return a},Be(a){this.ud?.(a)},vd:lg,cd:function(a){function b(){return this.be?Og(this.Zc.Jd,{ad:this.uf,Wc:c,md:this,ed:a}):Og(this.Zc.Jd,{ad:this,Wc:a})}var c=this.af(a);if(!c)return this.Be(a),null;var d=Ng(this.Zc,c);if(void 0!==d){if(0===d.Tc.count.value)return d.Tc.Wc=c,d.Tc.ed=a,d.clone();d=d.clone();this.Be(a);return d}d=this.Zc.Ze(c);d=Ag[d]; +if(!d)return b.call(this);d=this.ae?d.Se:d.pointerType;var e=Lg(c,this.Zc,d.Zc);return e===null?b.call(this):this.be?Og(d.Zc.Jd,{ad:d,Wc:e,md:this,ed:a}):Og(d.Zc.Jd,{ad:d,Wc:e})}});k||(oa=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:(Module.INITIAL_MEMORY||209715200)/65536,maximum:32768,shared:!0}),pa());Module.noExitRuntime&&(Re=Module.noExitRuntime);Module.printErr&&(p=Module.printErr);Module.wasmBinary&&(ia=Module.wasmBinary);Module.addRunDependency=Ke;Module.removeRunDependency= +Je;Module.FS_preloadFile=Lf;Module.FS_unlink=(...a)=>D.Ld(...a);Module.FS_createPath=(...a)=>cg(...a);Module.FS_createDevice=(...a)=>D.Bd(...a);Module.FS_readFile=(...a)=>bg(...a);Module.FS=D;Module.FS_createDataFile=(...a)=>Kf(...a);Module.FS_createLazyFile=(...a)=>fg(...a);var oh=[fe,Se,df,ab,bb,cb,db,eb,fb,gb,Sb,Tb,Ub,ic,jc,lc,mc,nc,oc,pc],nh={714609:(a,b,c,d)=>{a=U(a);b=U(b);c=U(c);d=U(d);throw Error(a+b+c+d);},714825:(a,b)=>{a=U(a);b=U(b);throw Error(a+b);},714935:a=>{a=U(a);throw Error(a);}, +714999:a=>{a=U(a);throw Error(a);},715063:a=>{a=U(a);throw Error(a);}};function Wb(){var a=Module.allowedThreads;return a?a:navigator.hardwareConcurrency}function he(a,b,c,d,e){var f=!1,g=l=>{f||(f=!0,clearTimeout(h),le(a,l))};try{let l=new AbortController,m=new Uint8Array(d);m.set((t(),v).subarray(c,c+d));var h=setTimeout(()=>l.abort(),e);fetch(U(b),{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:m,signal:l.signal}).then(n=>g(n.status),()=>g(0))}catch{g(0)}}var je,ke, +le,me,ne,oe,ya,pe,va,Ca,qe,re,se,te,ue,ve,G,we,xe,I,ye,J,ze,Ae,Be,Ce,Pa;function Tc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function xc(a){var b=J();try{return M(a)()}catch(c){I(b);if(!(c instanceof r))throw c;G(1,0)}}function Bc(a,b,c){var d=J();try{return M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function vd(a,b,c,d){var e=J();try{M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function ld(a,b, +c){var d=J();try{M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function bd(a){var b=J();try{M(a)()}catch(c){I(b);if(!(c instanceof r))throw c;G(1,0)}}function dd(a,b){var c=J();try{M(a)(b)}catch(d){I(c);if(!(d instanceof r))throw d;G(1,0)}}function Dd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function zc(a,b){var c=J();try{return M(a)(b)}catch(d){I(c);if(!(d instanceof r))throw d;G(1,0)}}function Yd(a,b,c,d,e,f,g,h,l){var m=J();try{M(a)(b, +c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function Ec(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Jc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Qc(a,b,c,d,e,f,g){var h=J();try{return M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Vd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m; +G(1,0)}}function Md(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Cc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Rd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function rc(a,b,c){var d=J();try{return M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function Oc(a,b,c,d,e,f,g){var h=J();try{return M(a)(b,c,d,e,f,g)}catch(l){I(h); +if(!(l instanceof r))throw l;G(1,0)}}function Ac(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function tc(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function ce(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Id(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Nc(a, +b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Zd(a,b,c,d,e,f,g,h,l,m){var n=J();try{M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function Zc(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Uc(a,b,c,d,e,f,g,h,l){var m=J();try{return M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function ae(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b, +c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function xd(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function sc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function zd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Ad(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m; +G(1,0)}}function Wc(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function ed(a,b,c){var d=J();try{M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function Fc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Kc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Ic(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b, +c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Ud(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function $d(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Hc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function jd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof +r))throw g;G(1,0)}}function gd(a,b,c,d){var e=J();try{M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Td(a,b,c,d,e,f,g,h,l){var m=J();try{M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function wd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Gc(a,b,c,d,e,f){var g=J();try{return M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function sd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c, +d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Bd(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Vc(a,b,c,d,e,f,g,h,l,m){var n=J();try{return M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function qc(a,b){var c=J();try{return M(a)(b)}catch(d){I(c);if(!(d instanceof r))throw d;G(1,0)}}function md(a,b,c,d){var e=J();try{M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Fd(a, +b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Rc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function yc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Sd(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function Pd(a,b,c,d,e,f,g,h,l,m,n,q,x){var y=J(); +try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x)}catch(z){I(y);if(!(z instanceof r))throw z;G(1,0)}}function ud(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function td(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function Xd(a,b,c,d,e,f,g,h,l,m){var n=J();try{M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function Qd(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h, +l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Od(a,b,c,d,e,f,g,h,l,m){var n=J();try{M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function Cd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h);if(!(l instanceof r))throw l;G(1,0)}}function de(a,b,c,d,e,f,g,h,l,m,n,q,x,y,z,A){var F=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y,z,A)}catch(H){I(F);if(!(H instanceof r))throw H;G(1,0)}}function Nd(a,b,c,d,e,f,g){var h=J();try{M(a)(b,c,d,e,f,g)}catch(l){I(h); +if(!(l instanceof r))throw l;G(1,0)}}function fd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function kd(a,b,c){var d=J();try{M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function Pc(a,b,c,d,e,f,g,h,l,m){var n=J();try{return M(a)(b,c,d,e,f,g,h,l,m)}catch(q){I(n);if(!(q instanceof r))throw q;G(1,0)}}function nd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Xc(a,b,c,d,e,f,g, +h,l,m,n,q){var x=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function Yc(a,b,c,d,e,f,g,h,l,m,n,q,x){var y=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n,q,x)}catch(z){I(y);if(!(z instanceof r))throw z;G(1,0)}}function Sc(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{return M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function rd(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function uc(a, +b,c){var d=J();try{return M(a)(b,c)}catch(e){I(d);if(!(e instanceof r))throw e;G(1,0)}}function pd(a,b,c,d,e,f,g,h,l){var m=J();try{M(a)(b,c,d,e,f,g,h,l)}catch(n){I(m);if(!(n instanceof r))throw n;G(1,0)}}function Dc(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function Lc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Mc(a,b,c,d,e,f,g){var h=J();try{return M(a)(b,c,d,e,f,g)}catch(l){I(h); +if(!(l instanceof r))throw l;G(1,0)}}function vc(a,b,c,d){var e=J();try{return M(a)(b,c,d)}catch(f){I(e);if(!(f instanceof r))throw f;G(1,0)}}function Jd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function Kd(a,b,c,d,e,f,g,h,l,m,n,q){var x=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q)}catch(y){I(x);if(!(y instanceof r))throw y;G(1,0)}}function wc(a,b,c,d,e,f,g,h){var l=J();try{return M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1, +0)}}function $c(a){var b=J();try{return M(a)()}catch(c){I(b);if(!(c instanceof r))throw c;G(1,0);return 0n}}function Ld(a,b,c,d,e,f,g,h,l,m,n,q,x,y,z,A){var F=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y,z,A)}catch(H){I(F);if(!(H instanceof r))throw H;G(1,0)}}function Hd(a,b,c,d,e,f,g,h,l,m,n,q,x,y,z,A){var F=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y,z,A)}catch(H){I(F);if(!(H instanceof r))throw H;G(1,0)}}function be(a,b,c,d,e,f,g,h,l,m,n,q,x,y){var z=J();try{M(a)(b,c,d,e,f,g,h,l,m,n,q,x,y)}catch(A){I(z); +if(!(A instanceof r))throw A;G(1,0)}}function Wd(a,b,c,d,e,f,g,h,l,m,n){var q=J();try{M(a)(b,c,d,e,f,g,h,l,m,n)}catch(x){I(q);if(!(x instanceof r))throw x;G(1,0)}}function Ed(a,b,c,d,e,f){var g=J();try{M(a)(b,c,d,e,f)}catch(h){I(g);if(!(h instanceof r))throw h;G(1,0)}}function Gd(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function qd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function hd(a,b, +c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function cd(a,b,c,d,e){var f=J();try{M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0)}}function od(a,b,c,d,e,f,g,h){var l=J();try{M(a)(b,c,d,e,f,g,h)}catch(m){I(l);if(!(m instanceof r))throw m;G(1,0)}}function ad(a,b,c,d,e){var f=J();try{return M(a)(b,c,d,e)}catch(g){I(f);if(!(g instanceof r))throw g;G(1,0);return 0n}}async function ta(){if(k)Ia();else{var a=Module.preRun;a&&(typeof a== +"function"&&(a=[a]),Fe.push(...a));for(a=Fe;a.length>0;)a.shift()(Module);Ie&&await He();ka||Ia()}}var Ja;k||(Ja=await (sa()),await (ta()));;return Module}export default createModule;var isPthread=globalThis.name=="em-pthread";isPthread&&createModule(); diff --git a/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.wasm new file mode 100644 index 00000000..c0b114b6 Binary files /dev/null and b/packages/blinkid-wasm/dist/lightweight/simd-threads/BlinkIdModule.wasm differ diff --git a/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.data b/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.data similarity index 53% rename from packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.data rename to packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.data index 85ecead9..f24be209 100644 Binary files a/packages/blinkid-wasm/dist/full/advanced/BlinkIdModule.data and b/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.data differ diff --git a/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.js b/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.js new file mode 100644 index 00000000..3ca79475 --- /dev/null +++ b/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.js @@ -0,0 +1,127 @@ +async function createModule(moduleArg={}){var Module=moduleArg;var aa=!!globalThis.window,ba=!!globalThis.WorkerGlobalScope;Module.expectedDataFileDownloads||(Module.expectedDataFileDownloads=0);Module.expectedDataFileDownloads++;(()=>{var a=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD||a||async function(b){async function c(l,m){Module.dataFileDownloads||(Module.dataFileDownloads={});try{var n=await fetch(l)}catch(D){throw Error(`Network Error: ${l}`,{e:D});}if(!n.ok)throw Error(`${n.status}: ${n.url}`); +var p=[];m=Number(n.headers.get("Content-Length")||m);var w=0;Module.setStatus&&Module.setStatus("Downloading data...");for(n=n.body.getReader();;){var x;({done:x,value:y}=await n.read());if(x)break;p.push(y);w+=y.length;Module.dataFileDownloads[l]={loaded:w,total:m};var y=x=0;for(var z of Object.values(Module.dataFileDownloads))x+=z.loaded,y+=z.total;Module.setStatus&&Module.setStatus(`Downloading data... (${x}/${y})`)}l=new Uint8Array(p.map(D=>D.length).reduce((D,G)=>D+G,0));z=0;for(let D of p)l.set(D, +z),z+=D.length;return l.buffer}async function d(l){l.FS_createPath("/","microblink",!0,!0);l.FS_createPath("/microblink","blinkid",!0,!0);l.addRunDependency("datafile_bazel-out/wasm-opt-ST-e67fcd5a01c0/bin/packages/blinkid-wasm/binding/full/simd/BlinkIdModule.data");l.preloadResults||(l.preloadResults={});l.preloadResults["bazel-out/wasm-opt-ST-e67fcd5a01c0/bin/packages/blinkid-wasm/binding/full/simd/BlinkIdModule.data"]={nf:!1};h||=await g;await async function(m){if(!m)throw Error("Loading data file failed."); +if(m.constructor.name!==ArrayBuffer.name)throw Error("bad input to processPackageData "+m.constructor.name);m=new Uint8Array(m);for(var n of b.files)l.FS_createDataFile(n.filename,null,m.subarray(n.start,n.end),!0,!0,!0);l.removeRunDependency("datafile_bazel-out/wasm-opt-ST-e67fcd5a01c0/bin/packages/blinkid-wasm/binding/full/simd/BlinkIdModule.data")}(h)}typeof window==="object"?window.encodeURIComponent(window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/"):typeof process=== +"undefined"&&typeof location!=="undefined"&&encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/");var e=Module.locateFile?Module.locateFile("BlinkIdModule.data",""):"BlinkIdModule.data",f=b.remote_package_size,g,h=Module.getPreloadedPackage&&Module.getPreloadedPackage(e,f);h||(g=c(e,f));Module.FS_createPath?d(Module):(Module.preRun||(Module.preRun=[]),Module.preRun.push(d))}({files:[{filename:"/microblink/blinkid/Model_02957b97.strop",start:0,end:103788},{filename:"/microblink/blinkid/Model_08a8e22c.strop", +start:103788,end:1538982},{filename:"/microblink/blinkid/Model_11a41e0f.strop",start:1538982,end:1543187},{filename:"/microblink/blinkid/Model_3a69425d.strop",start:1543187,end:1869180},{filename:"/microblink/blinkid/Model_44dff8bf.strop",start:1869180,end:1994954},{filename:"/microblink/blinkid/Model_48e189e2.strop",start:1994954,end:2320287},{filename:"/microblink/blinkid/Model_49210872.strop",start:2320287,end:6960739},{filename:"/microblink/blinkid/Model_649c20b5.strop",start:6960739,end:7989463}, +{filename:"/microblink/blinkid/Model_6683cb47.strop",start:7989463,end:8065443},{filename:"/microblink/blinkid/Model_7b97ad87.strop",start:8065443,end:8092846},{filename:"/microblink/blinkid/Model_7f5a4bc5.strop",start:8092846,end:8100046},{filename:"/microblink/blinkid/Model_a54429ec.strop",start:8100046,end:8175325},{filename:"/microblink/blinkid/Model_a91e7e31.strop",start:8175325,end:8444867},{filename:"/microblink/blinkid/Model_a958c31c.strop",start:8444867,end:8789955},{filename:"/microblink/blinkid/Model_ad5b6c8e.strop", +start:8789955,end:9453794},{filename:"/microblink/blinkid/Model_b18ce029.strop",start:9453794,end:11116320},{filename:"/microblink/blinkid/Model_de3c93f5.strop",start:11116320,end:11123137},{filename:"/microblink/blinkid/ccc_lookup_table.zzip",start:11123137,end:11143606}],remote_package_size:11143606})})();var ca=import.meta.url,da="",ea,fa;if(aa||ba){try{da=(new URL(".",ca)).href}catch{}ba&&(fa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}); +ea=async a=>{a=await fetch(a,{credentials:"same-origin"});if(a.ok)return a.arrayBuffer();throw Error(a.status+" : "+a.url);}}var ia=console.log.bind(console),k=console.error.bind(console),ja,ka=!1,la;class q{}class ma extends q{constructor(a){super();this.yd=a}}function na(){if(!r?.buffer?.Af){var a=oa.buffer;r=new Int8Array(a);pa=new Int16Array(a);t=new Uint8Array(a);qa=new Uint16Array(a);u=new Int32Array(a);v=new Uint32Array(a);ra=new Float32Array(a);sa=new Float64Array(a);A=new BigInt64Array(a); +ta=new BigUint64Array(a)}}function B(a){Module.onAbort?.(a);a=`Aborted(${a})`;k(a);ka=!0;throw new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");}var ua;async function va(a){if(!ja)try{var b=await ea(a);return new Uint8Array(b)}catch{}if(a==ua&&ja)a=new Uint8Array(ja);else if(fa)a=fa(a);else throw"both async and sync fetching of the wasm failed";return a}async function wa(a,b){try{var c=await va(a);return await WebAssembly.instantiate(c,b)}catch(d){k(`failed to asynchronously prepare wasm: ${d}`), +B(d)}}async function xa(a){var b=ua;if(!ja)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){k(`wasm streaming compile failed: ${d}`),k("falling back to ArrayBuffer instantiation")}return wa(b,a)}class ya{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}var pa,u,A,r,ra,sa,qa,v,ta,t,za=[],Aa=!0,oa,Ba=[],C=a=>{var b=Ba[a];b||(Ba[a]=b=Ca.get(a));return b},Da=[],Ea=0,Fa=null;class Ga{constructor(a){this.yd= +a;this.yc=a-24}init(a,b){v[this.yc+16>>2]=0;v[this.yc+4>>2]=a;v[this.yc+8>>2]=b}}var Ja=a=>{var b=Fa?.yd;if(!b)return Ha(0),0;var c=new Ga(b);v[c.yc+16>>2]=b;var d=v[c.yc+4>>2];if(!d)return Ha(0),b;for(var e of a){if(e===0||e===d)break;if(Ia(e,d,c.yc+16))return Ha(e),b}Ha(d);return b},E=()=>{var a=u[+Ka>>2];Ka+=4;return a},La=(a,b)=>{for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];e==="."?a.splice(d,1):e===".."?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},Ma= +a=>{var b=a.charAt(0)==="/",c=a.slice(-1)==="/";(a=La(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},Na=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},Oa=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],Pa=(a,b)=>Ma(a+"/"+b),Qa=()=>a=>(crypto.getRandomValues(a),0),Ra=a=>(Ra=Qa())(a),Sa=(...a)=>{for(var b="",c=!1,d=a.length-1;d>=-1&&!c;d--){c=d>=0?a[d]:F.xd();if(typeof c!= +"string")throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c=c.charAt(0)==="/"}b=La(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},Ta=(a,b)=>{function c(g){for(var h=0;h=0&&g[l]==="";l--);return h>l?[]:g.slice(h,l-h+1)}a=Sa(a).slice(1);b=Sa(b).slice(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),e=d,f=0;f{c=b+c;if(d)return c;for(;a[b]&&!(b>=c);)++b;return b},H=(a,b=0,c,d)=>{c=Va(a,b,c,d);if(c-b>16&&a.buffer&&Ua)return Ua.decode(a.subarray(b,c));for(d="";b>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},Wa=[],Xa=a=>{for(var b=0,c=0;c=55296&&d<=57343?(b+=4,++c):b+=3}return b},Ya=(a,b,c,d)=>{if(!(d>0))return 0;var e=c;d=c+d-1;for(var f=0;f=d)break;b[c++]=g}else if(g<=2047){if(c+1>=d)break;b[c++]=192|g>>6;b[c++]=128|g&63}else if(g<=65535){if(c+2>=d)break;b[c++]=224|g>>12;b[c++]=128|g>>6&63;b[c++]=128|g&63}else{if(c+3>=d)break; +b[c++]=240|g>>18;b[c++]=128|g>>12&63;b[c++]=128|g>>6&63;b[c++]=128|g&63;f++}}b[c]=0;return c-e},Za=a=>{var b=Array(Xa(a)+1);a=Ya(a,b,0,b.length);b.length=a;return b},$a=[];function ab(a,b){$a[a]={input:[],output:[],$c:b};bb(a,cb)}var cb={open(a){var b=$a[a.node.rd];if(!b)throw new F.uc(43);a.Ac=b;a.seekable=!1},close(a){a.Ac.$c.Ad(a.Ac)},Ad(a){a.Ac.$c.Ad(a.Ac)},read(a,b,c,d){if(!a.Ac||!a.Ac.$c.ee)throw new F.uc(60);for(var e=0,f=0;f0&&(ia(H(a.output)),a.output=[])},Fe(){return{bf:25856,df:5,af:191,cf:35387,$e:[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]}},Ge(){return 0},He(){return[24,80]}},eb={Pd(a,b){b===null||b===10?(k(H(a.output)),a.output=[]):b!=0&&a.output.push(b)},Ad(a){a.output?.length>0&&(k(H(a.output)),a.output=[])}},gb=a=>{a=Math.ceil(a/65536)*65536;var b=fb(65536,a);b&&t.fill(0,b,b+a);return b},I={Uc:null,Cc(){return I.createNode(null, +"/",16895,0)},createNode(a,b,c,d){var e;(e=(c&61440)===24576)||(e=(c&61440)===4096);if(e)throw new F.uc(63);I.Uc||(I.Uc={dir:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc,ed:I.wc.ed,Yc:I.wc.Yc,td:I.wc.td,ld:I.wc.ld,ud:I.wc.ud,sd:I.wc.sd,dd:I.wc.dd},stream:{Mc:I.xc.Mc}},file:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc},stream:{Mc:I.xc.Mc,read:I.xc.read,write:I.xc.write,gd:I.xc.gd,kd:I.xc.kd}},link:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc,cd:I.wc.cd},stream:{}},Xd:{node:{Rc:I.wc.Rc,Tc:I.wc.Tc},stream:F.oe}});c=F.createNode(a,b,c,d);K(c.mode)? +(c.wc=I.Uc.dir.node,c.xc=I.Uc.dir.stream,c.zc={}):F.isFile(c.mode)?(c.wc=I.Uc.file.node,c.xc=I.Uc.file.stream,c.Jc=0,c.zc=I.se??(I.se=new Uint8Array(0))):(c.mode&61440)===40960?(c.wc=I.Uc.link.node,c.xc=I.Uc.link.stream):(c.mode&61440)===8192&&(c.wc=I.Uc.Xd.node,c.xc=I.Uc.Xd.stream);c.Xc=c.Nc=c.Lc=Date.now();a&&(a.zc[b]=c,a.Xc=a.Nc=a.Lc=c.Xc);return c},wc:{Rc(a){var b={};b.qe=(a.mode&61440)===8192?a.id:1;b.Ee=a.id;b.mode=a.mode;b.Le=1;b.uid=0;b.Ce=0;b.rd=a.rd;K(a.mode)?b.size=4096:F.isFile(a.mode)? +b.size=a.Jc:b.size=(a.mode&61440)===40960?a.link.length:0;b.Xc=new Date(a.Xc);b.Nc=new Date(a.Nc);b.Lc=new Date(a.Lc);b.ne=4096;b.Vd=Math.ceil(b.size/b.ne);return b},Tc(a,b){for(var c of["mode","atime","mtime","ctime"])b[c]!=null&&(a[c]=b[c]);b.size!==void 0&&(b=b.size,a.Jc!=b&&(c=a.zc,a.zc=new Uint8Array(b),a.zc.set(c.subarray(0,Math.min(b,a.Jc))),a.Jc=b))},ed(){I.Gd||(I.Gd=new F.uc(44),I.Gd.stack="");throw I.Gd;},Yc(a,b,c,d){return I.createNode(a,b,c,d)},td(a,b,c){try{var d= +L(b,c)}catch(f){}if(d){if(K(a.mode))for(var e in d.zc)throw new F.uc(55);hb(d)}delete a.parent.zc[a.name];b.zc[c]=a;a.name=c;b.Lc=b.Nc=a.parent.Lc=a.parent.Nc=Date.now()},ld(a,b){delete a.zc[b];a.Lc=a.Nc=Date.now()},ud(a,b){var c=L(a,b),d;for(d in c.zc)throw new F.uc(55);delete a.zc[b];a.Lc=a.Nc=Date.now()},sd(a){return[".","..",...Object.keys(a.zc)]},dd(a,b,c){a=I.createNode(a,b,41471,0);a.link=c;return a},cd(a){if((a.mode&61440)!==40960)throw new F.uc(28);return a.link}},xc:{read(a,b,c,d,e){if(e>= +a.node.Jc)return 0;d=Math.min(a.node.Jc-e,d);b.set(a.node.zc.subarray(e,e+d),c);return d},write(a,b,c,d,e,f){b.buffer===r.buffer&&(f=!1);if(!d)return 0;a=a.node;a.Nc=a.Lc=Date.now();if(f)a.zc=b.subarray(c,c+d),a.Jc=d;else if(a.Jc===0&&e===0)a.zc=b.slice(c,c+d),a.Jc=d;else{f=e+d;var g=a.zc.length;g>=f||(f=Math.max(f,g*(g<1048576?2:1.125)>>>0),g&&(f=Math.max(f,256)),g=a.zc.subarray(0,a.Jc),a.zc=new Uint8Array(f),a.zc.set(g));a.zc.set(b.subarray(c,c+d),e);a.Jc=Math.max(a.Jc,e+d)}return d},Mc(a,b,c){c=== +1?b+=a.position:c===2&&F.isFile(a.node.mode)&&(b+=a.node.Jc);if(b<0)throw new F.uc(28);return b},gd(a,b,c,d,e){if(!F.isFile(a.node.mode))throw new F.uc(43);a=a.node.zc;if(e&2||a.buffer!==r.buffer){d=!0;e=gb(b);if(!e)throw new F.uc(48);if(a){if(c>0||c+b{typeof a=="string"&&(a=Za(a));a.subarray||(a=new Uint8Array(a)); +return a},jb=(a,b)=>{var c=0;a&&(c|=365);b&&(c|=146);return c},kb=async a=>{a=await ea(a);return new Uint8Array(a)},lb=null,mb=async()=>lb,nb=0,ob=()=>{nb--;nb||lb.resolve()},pb=()=>{if(!nb){var a;lb=new Promise(b=>a=b);lb.resolve=a}nb++},qb=[],rb=async(a,b)=>{typeof Browser!="undefined"&&Browser.init();for(var c of qb)if(c.canHandle(b))return c.handle(a,b);return a},tb=async(a,b,c,d,e,f,g,h)=>{var l=b?Sa(Ma(a+"/"+b)):a,m=`cp ${l}`;pb(m);try{var n=c;typeof c=="string"&&(n=await kb(c));n=await rb(n, +l);h?.();f||sb(a,b,n,d,e,g)}finally{ob(m)}};function bb(a,b){F.be[a]={xc:b}}function K(a){return(a&61440)===16384}function L(a,b){var c=K(a.mode)?(c=ub(a,"x"))?c:a.wc.ed?0:2:54;if(c)throw new F.uc(c);for(c=F.Zc[vb(a.id,b)];c;c=c.hd){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return F.ed(a,b)}function hb(a){var b=vb(a.parent.id,a.name);if(F.Zc[b]===a)F.Zc[b]=a.hd;else for(b=F.Zc[b];b;){if(b.hd===a){b.hd=a.hd;break}b=b.hd}}function sb(a,b,c,d,e,f){var g=b;a&&(a=typeof a=="string"?a:wb(a),g= +b?Ma(a+"/"+b):a);a=jb(d,e);g=F.create(g,a);c&&(c=ib(c),xb(g,a|146),b=F.open(g,577),F.write(b,c,0,c.length,0,f),F.close(b),xb(g,a))}function N(a,b={}){if(!a)throw new F.uc(44);b.zd??(b.zd=!0);a.charAt(0)==="/"||(a=F.xd()+"/"+a);var c=0;a:for(;c<40;c++){a=a.split("/").filter(h=>!!h);for(var d=F.root,e="/",f=0;f>>0)%F.Zc.length}function yb(a){var b=vb(a.parent.id,a.name);a.hd=F.Zc[b];F.Zc[b]=a}function ub(a,b){return F.fe?0:b.includes("r")&&!(a.mode&292)||b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73)?2:0}function zb(a,b){if(!K(a.mode))return 54;try{return L(a,b),20}catch(c){}return ub(a,"wx")}function Ab(a,b,c){try{var d=L(a,b)}catch(e){return e.Ec}if(a=ub(a,"wx"))return a;if(c){if(!K(d.mode))return 54;if(F.Ld(d)||wb(d)===F.xd())return 10}else if(K(d.mode))return 31;return 0} +function Bb(a,b){if(!a)throw new F.uc(b);return a}function O(a){a=F.ze(a);if(!a)throw new F.uc(8);return a}function Cb(a,b=-1){a=Object.assign(new F.le,a);if(b==-1)a:{for(b=0;b<=F.me;b++)if(!F.streams[b])break a;throw new F.uc(33);}a.bd=b;return F.streams[b]=a}function Db(a,b=-1){a=Cb(a,b);a.xc?.hf?.(a);return a}function Eb(a,b,c){var d=a?.xc.Tc;a=d?a:b;d??=b.wc.Tc;Bb(d,63);try{d(a,c)}catch(e){if(e instanceof RangeError)throw new F.uc(22);throw e;}}function Fb(a){var b=[];for(a=[a];a.length;){var c= +a.pop();b.push(c);a.push(...c.pd)}return b}function Gb(a){var b={Ze:4096,pf:4096,Vd:1E6,Ye:5E5,Xe:5E5,files:F.Od,lf:F.Od-1,qf:42,flags:2,xf:255};a.wc.ie&&Object.assign(b,a.wc.ie(a.Cc.Ne.root));return b}function P(a,b=511){return F.Yc(a,b&1023|16384,0)}function Hb(a,b,c){typeof c=="undefined"&&(c=b,b=438);return F.Yc(a,b|8192,c)}function Ib(a,b,c,d){Eb(a,b,{mode:c&4095|b.mode&-4096,Lc:Date.now(),ce:d})}function xb(a,b,c){a=typeof a=="string"?N(a,{Qc:!c}).node:a;Ib(null,a,b,c)}function Jb(a,b,c){if(K(b.mode))throw new F.uc(31); +if(!F.isFile(b.mode))throw new F.uc(28);var d=ub(b,"w");if(d)throw new F.uc(d);Eb(a,b,{size:c,timestamp:Date.now()})}function Kb(a,b={}){b.flags=b.flags??0;b.encoding=b.encoding??"binary";b.encoding!=="utf8"&&b.encoding!=="binary"&&B(`Invalid encoding type "${b.encoding}"`);var c=F.open(a,b.flags);a=F.stat(a).size;var d=new Uint8Array(a);F.read(c,d,0,a,0);b.encoding==="utf8"&&(d=H(d));F.close(c);return d}function Lb(a,b){a=typeof a=="string"?a:wb(a);for(b=b.split("/").reverse();b.length;){var c=b.pop(); +if(c){var d=Ma(a+"/"+c);try{P(d)}catch(e){if(e.Ec!=20)throw e;}a=d}}return d}function Mb(a,b,c,d){a=typeof a=="string"?a:wb(a);b=Ma(a+"/"+b);return F.create(b,jb(c,d))}function Nb(a){if(!(a.Ie||a.Je||a.link||a.zc))if(globalThis.XMLHttpRequest)B("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.zc=fa(a.url)}catch(b){throw new F.uc(29);}}function Ob(a, +b,c,d,e){function f(n,p,w,x,y){n=n.node.zc;if(y>=n.length)return 0;x=Math.min(n.length-y,x);if(n.slice)for(var z=0;zthis.length-1||n<0)){var p=n%this.Yd;return this.od(n/this.Yd|0)[p]}}Re(n){this.od=n}Wd(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);n.status>=200&&n.status<300||n.status===304||B("Couldn't load "+c+". Status: "+n.status);var p=Number(n.getResponseHeader("Content-length")), +w,x=(w=n.getResponseHeader("Accept-Ranges"))&&w==="bytes";n=(w=n.getResponseHeader("Content-Encoding"))&&w==="gzip";var y=1048576;x||(y=p);var z=this;z.Re(D=>{var G=D*y,J=(D+1)*y-1;J=Math.min(J,p-1);if(typeof z.wd[D]=="undefined"){var ha=z.wd;G>J&&B(`invalid range (${G}, ${J}) or no bytes requested!`);J>p-1&&B(`only ${p} bytes available! programmer error!`);var M=new XMLHttpRequest;M.open("GET",c,!1);p!==y&&M.setRequestHeader("Range","bytes="+G+"-"+J);M.responseType="arraybuffer";M.overrideMimeType&& +M.overrideMimeType("text/plain; charset=x-user-defined");M.send(null);M.status>=200&&M.status<300||M.status===304||B("Couldn't load "+c+". Status: "+M.status);G=M.response!==void 0?new Uint8Array(M.response||[]):Za(M.responseText??"");ha[D]=G}typeof z.wd[D]=="undefined"&&B("doXHR failed!");return z.wd[D]});if(n||!p)y=p=1,y=p=this.od(0).length,ia("LazyFiles on gzip forces download of the whole file when length is accessed");this.Td=p;this.Sd=y;this.Md=!0}get length(){this.Md||this.Wd();return this.Td}get Yd(){this.Md|| +this.Wd();return this.Sd}}if(globalThis.XMLHttpRequest){ba||B("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var h=new g;var l=void 0}else l=c,h=void 0;var m=Mb(a,b,d,e);h?m.zc=h:l&&(m.zc=null,m.url=l);Object.defineProperties(m,{Jc:{get:function(){return this.zc.length}}});a={};for(let [n,p]of Object.entries(m.xc))a[n]=(...w)=>{Nb(m);return p(...w)};a.read=(n,p,w,x,y)=>{Nb(m);return f(n,p,w,x,y)};a.gd=(n,p,w)=>{Nb(m);var x=gb(p); +if(!x)throw new F.uc(48);f(n,r,x,p,w);return{yc:x,Ud:!0}};m.xc=a;return m}var F={root:null,pd:[],be:{},streams:[],Od:1,Zc:null,$d:"/",Id:!1,fe:!0,ve:null,Ed:0,uc:class{name="ErrnoError";constructor(a){this.Ec=a}},le:class{shared={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},ke:class{wc={};xc={};Dd=365;Fd=146;Sc=null;constructor(a, +b,c,d){a||=this;this.parent=a;this.Cc=a.Cc;this.id=F.Od++;this.name=b;this.mode=c;this.rd=d;this.Xc=this.Nc=this.Lc=Date.now()}get read(){return(this.mode&this.Dd)===this.Dd}set read(a){a?this.mode|=this.Dd:this.mode&=~this.Dd}get write(){return(this.mode&this.Fd)===this.Fd}set write(a){a?this.mode|=this.Fd:this.mode&=~this.Fd}get Je(){return K(this.mode)}get Ie(){return(this.mode&61440)===8192}},createNode(a,b,c,d){a=new F.ke(a,b,c,d);yb(a);return a},Ld(a){return a===a.parent},isFile(a){return(a& +61440)===32768},sf(a){return(a&49152)===49152},me:4096,ze:a=>F.streams[a],oe:{open(a){a.xc=F.xe(a.node.rd).xc;a.xc.open?.(a)},Mc(){throw new F.uc(70);}},Nd:a=>a>>8,vf:a=>a&255,fd:(a,b)=>a<<8|b,xe:a=>F.be[a],je(a,b){function c(h){F.Ed--;return b(h)}function d(h){if(h){if(!d.te)return d.te=!0,c(h)}else++f>=e.length&&c(null)}typeof a=="function"&&(b=a,a=!1);F.Ed++;F.Ed>1&&k(`warning: ${F.Ed} FS.syncfs operations in flight at once, probably just doing extra work`);var e=Fb(F.root.Cc),f=0,g;for(g of e)g.type.je? +g.type.je(g,a,d):d(null)},Cc(a,b,c){var d=c==="/";if(d&&F.root)throw new F.uc(10);if(!d&&c){var e=N(c,{zd:!1});c=e.path;e=e.node;if(e.Sc)throw new F.uc(10);if(!K(e.mode))throw new F.uc(54);}b={type:a,Ne:b,ge:c,pd:[]};a=a.Cc(b);a.Cc=b;b.root=a;d?F.root=a:e&&(e.Sc=b,e.Cc&&e.Cc.pd.push(b));return a},Df(a){a=N(a,{zd:!1});if(!a.node.Sc)throw new F.uc(28);a=a.node;var b=a.Sc,c=Fb(b);for([,e]of Object.entries(F.Zc))for(;e;){var d=e.hd;c.includes(e.Cc)&&hb(e);var e=d}a.Sc=null;a.Cc.pd.splice(a.Cc.pd.indexOf(b), +1)},ed(a,b){return a.wc.ed(a,b)},Yc(a,b,c){var d=N(a,{parent:!0}).node;a=Oa(a);if(!a)throw new F.uc(28);if(a==="."||a==="..")throw new F.uc(20);var e=zb(d,a);if(e)throw new F.uc(e);if(!d.wc.Yc)throw new F.uc(63);return d.wc.Yc(d,a,b,c)},ie(a){return Gb(N(a,{Qc:!0}).node)},Bf(a){return Gb(a.node)},create(a,b=438){return F.Yc(a,b&4095|32768,0)},wf(a,b){var c=a.split("/"),d="",e;for(e of c)if(e){if(d||a.charAt(0)==="/")d+="/";d+=e;try{P(d,b)}catch(f){if(f.Ec!=20)throw f;}}},dd(a,b){if(!Sa(a))throw new F.uc(44); +var c=N(b,{parent:!0}).node;if(!c)throw new F.uc(44);b=Oa(b);var d=zb(c,b);if(d)throw new F.uc(d);if(!c.wc.dd)throw new F.uc(63);return c.wc.dd(c,b,a)},td(a,b){var c=Na(a),d=Na(b),e=Oa(a),f=Oa(b);var g=N(a,{parent:!0});var h=g.node;g=N(b,{parent:!0});g=g.node;if(!h||!g)throw new F.uc(44);if(h.Cc!==g.Cc)throw new F.uc(75);var l=L(h,e);a=Ta(a,d);if(a.charAt(0)!==".")throw new F.uc(28);a=Ta(b,c);if(a.charAt(0)!==".")throw new F.uc(55);try{var m=L(g,f)}catch(n){}if(l!==m){b=K(l.mode);if(e=Ab(h,e,b))throw new F.uc(e); +if(e=m?Ab(g,f,b):zb(g,f))throw new F.uc(e);if(!h.wc.td)throw new F.uc(63);if(l.Sc||m&&m.Sc)throw new F.uc(10);if(g!==h&&(e=ub(h,"w")))throw new F.uc(e);hb(l);try{h.wc.td(l,g,f),l.parent=g}catch(n){throw n;}finally{yb(l)}}},ud(a){var b=N(a,{parent:!0}).node;a=Oa(a);var c=L(b,a),d=Ab(b,a,!0);if(d)throw new F.uc(d);if(!b.wc.ud)throw new F.uc(63);if(c.Sc)throw new F.uc(10);b.wc.ud(b,a);hb(c)},sd(a){a=N(a,{Qc:!0}).node;return Bb(a.wc.sd,54)(a)},ld(a){var b=N(a,{parent:!0}).node;if(!b)throw new F.uc(44); +a=Oa(a);var c=L(b,a),d=Ab(b,a,!1);if(d)throw new F.uc(d);if(!b.wc.ld)throw new F.uc(63);if(c.Sc)throw new F.uc(10);b.wc.ld(b,a);hb(c)},cd(a){a=N(a).node;if(!a)throw new F.uc(44);if(!a.wc.cd)throw new F.uc(28);return a.wc.cd(a)},stat(a,b){a=N(a,{Qc:!b}).node;return Bb(a.wc.Rc,63)(a)},tf(a,b){xb(a,b,!0)},jf(a,b){a=O(a);Ib(a,a.node,b,!1)},uf(a){a=typeof a=="string"?N(a,{Qc:!1}).node:a;Eb(null,a,{timestamp:Date.now(),ce:!0})},kf(a){a=O(a);Eb(a,a.node,{timestamp:Date.now(),ce:!1})},truncate(a,b){if(b< +0)throw new F.uc(28);a=typeof a=="string"?N(a,{Qc:!0}).node:a;Jb(null,a,b)},rf(a,b){a=O(a);if(b<0||(a.flags&2097155)===0)throw new F.uc(28);Jb(a,a.node,b)},Ef(a,b,c){a=N(a,{Qc:!0}).node;Bb(a.wc.Tc,63)(a,{Xc:b,Nc:c})},open(a,b,c=438){if(a==="")throw new F.uc(44);if(typeof b=="string"){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if(typeof d=="undefined")throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if(typeof a=="object")d=a;else{var e=a.endsWith("/");var f=N(a,{Qc:!(b& +131072),Me:!0});d=f.node;a=f.path}f=!1;if(b&64)if(d){if(b&128)throw new F.uc(20);}else{if(e)throw new F.uc(31);d=F.Yc(a,c|511,0);f=!0}if(!d)throw new F.uc(44);(d.mode&61440)===8192&&(b&=-513);if(b&65536&&!K(d.mode))throw new F.uc(54);if(!f&&(d?(d.mode&61440)===40960?e=32:(e=["r","w","rw"][b&3],b&512&&(e+="w"),e=K(d.mode)&&(e!=="r"||b&576)?31:ub(d,e)):e=44,e))throw new F.uc(e);b&512&&!f&&F.truncate(d,0);b&=-131713;b=Cb({node:d,path:wb(d),flags:b,seekable:!0,position:0,xc:d.xc,We:[],error:!1});b.xc.open&& +b.xc.open(b);f&&xb(d,c&511);return b},close(a){if(a.bd===null)throw new F.uc(8);a.Hd&&(a.Hd=null);try{a.xc.close&&a.xc.close(a)}catch(b){throw b;}finally{F.streams[a.bd]=null}a.bd=null},Mc(a,b,c){if(a.bd===null)throw new F.uc(8);if(!a.seekable||!a.xc.Mc)throw new F.uc(70);if(c!=0&&c!=1&&c!=2)throw new F.uc(28);a.position=a.xc.Mc(a,b,c);a.We=[];return a.position},read(a,b,c,d,e){if(d<0||e<0)throw new F.uc(28);if(a.bd===null)throw new F.uc(8);if((a.flags&2097155)===1)throw new F.uc(8);if(K(a.node.mode))throw new F.uc(31); +if(!a.xc.read)throw new F.uc(28);var f=typeof e!="undefined";if(!f)e=a.position;else if(!a.seekable)throw new F.uc(70);b=a.xc.read(a,b,c,d,e);f||(a.position+=b);return b},write(a,b,c,d,e,f){if(d<0||e<0)throw new F.uc(28);if(a.bd===null)throw new F.uc(8);if((a.flags&2097155)===0)throw new F.uc(8);if(K(a.node.mode))throw new F.uc(31);if(!a.xc.write)throw new F.uc(28);a.seekable&&a.flags&1024&&F.Mc(a,0,2);var g=typeof e!="undefined";if(!g)e=a.position;else if(!a.seekable)throw new F.uc(70);b=a.xc.write(a, +b,c,d,e,f);g||(a.position+=b);return b},gd(a,b,c,d,e){if((d&2)!==0&&(e&2)===0&&(a.flags&2097155)!==2)throw new F.uc(2);if((a.flags&2097155)===1)throw new F.uc(2);if(!a.xc.gd)throw new F.uc(43);if(!b)throw new F.uc(28);return a.xc.gd(a,b,c,d,e)},kd(a,b,c,d,e){return a.xc.kd?a.xc.kd(a,b,c,d,e):0},Jd(a,b,c){if(!a.xc.Jd)throw new F.uc(59);return a.xc.Jd(a,b,c)},Ff(a,b,c={}){c.flags=c.flags??577;a=F.open(a,c.flags,c.mode);b=ib(b);F.write(a,b,0,b.byteLength,void 0,c.ef);F.close(a)},xd:()=>F.$d,ff(a){a= +N(a,{Qc:!0});if(a.node===null)throw new F.uc(44);if(!K(a.node.mode))throw new F.uc(54);var b=ub(a.node,"x");if(b)throw new F.uc(b);F.$d=a.path},init(a,b,c){F.Id=!0;a?F.ad("/dev","stdin",a):F.dd("/dev/tty","/dev/stdin");b?F.ad("/dev","stdout",null,b):F.dd("/dev/tty","/dev/stdout");c?F.ad("/dev","stderr",null,c):F.dd("/dev/tty1","/dev/stderr");F.open("/dev/stdin",0);F.open("/dev/stdout",1);F.open("/dev/stderr",1)},zf(){F.Id=!1;for(var a of F.streams)a&&F.close(a)},mf(a,b){try{var c=N(a,{Qc:!b});a=c.path}catch(f){}var d= +!1,e=null;try{c=N(a,{parent:!0}),Oa(a),c=N(a,{Qc:!b}),d=!0,e=c.node}catch(f){}return d?e:null},ad(a,b,c,d){a=Pa(typeof a=="string"?a:wb(a),b);b=jb(!!c,!!d);var e;(e=F.ad).Nd??(e.Nd=64);e=F.fd(F.ad.Nd++,0);bb(e,{open(f){f.seekable=!1},close(){d?.buffer?.length&&d(10)},read(f,g,h,l){for(var m=0,n=0;n>2]=b.qe;v[a+4>>2]=b.mode;v[a+8>>2]=b.Le;v[a+12>>2]=b.uid;v[a+16>>2]=b.Ce;v[a+20>>2]=b.rd;A[a+24>>3]=BigInt(b.size);u[a+32>>2]=4096;u[a+36>>2]=b.Vd;var c=b.Xc.getTime(),d=b.Nc.getTime(),e=b.Lc.getTime();A[a+40>>3]=BigInt(Math.floor(c/1E3)); +v[a+48>>2]=c%1E3*1E3*1E3;A[a+56>>3]=BigInt(Math.floor(d/1E3));v[a+64>>2]=d%1E3*1E3*1E3;A[a+72>>3]=BigInt(Math.floor(e/1E3));v[a+80>>2]=e%1E3*1E3*1E3;A[a+88>>3]=BigInt(b.Ee);return 0}var Ka=void 0,Rb={},Sb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Tb(a){return this.Fc(v[a>>2])}var Ub={},Vb={},Wb={},Xb=class extends Error{constructor(a){super(a);this.name="InternalError"}},Yb=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new Xb("Mismatched type converter count");for(var l= +0;lWb[h]=b);var e=Array(b.length),f=[],g=0;for(let [h,l]of b.entries())Vb.hasOwnProperty(l)?e[h]=Vb[l]:(f.push(l),Ub.hasOwnProperty(l)||(Ub[l]=[]),Ub[l].push(()=>{e[h]=Vb[l];++g;g===f.length&&d(e)}));0===f.length&&d(e)},R=a=>{for(var b="";;){var c=t[a++];if(!c)return b;b+=String.fromCharCode(c)}},S=class extends Error{constructor(a){super(a);this.name="BindingError"}};function Zb(a,b,c={}){var d=b.name;if(!a)throw new S(`type "${d}" must have a positive integer typeid pointer`); +if(Vb.hasOwnProperty(a)){if(c.De)return;throw new S(`Cannot register type '${d}' twice`);}Vb[a]=b;delete Wb[a];Ub.hasOwnProperty(a)&&(b=Ub[a],delete Ub[a],b.forEach(e=>e()))}function Q(a,b,c={}){return Zb(a,b,c)}var $b=(a,b,c)=>{switch(b){case 1:return c?d=>r[d]:d=>t[d];case 2:return c?d=>pa[d>>1]:d=>qa[d>>1];case 4:return c?d=>u[d>>2]:d=>v[d>>2];case 8:return c?d=>A[d>>3]:d=>ta[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},ac=a=>{throw new S(a.vc.Dc.Bc.name+" instance already deleted"); +},bc=!1,cc=()=>{},dc=a=>{if(!globalThis.FinalizationRegistry)return dc=b=>b,a;bc=new FinalizationRegistry(b=>{b=b.vc;--b.count.value;0===b.count.value&&(b.Hc?b.Oc.Vc(b.Hc):b.Dc.Bc.Vc(b.yc))});dc=b=>{var c=b.vc;c.Hc&&bc.register(b,{vc:c},b);return b};cc=b=>{bc.unregister(b)};return dc(a)},ec=[];function fc(){}var hc=(a,b)=>Object.defineProperty(b,"name",{value:a}),ic={},jc=(a,b,c)=>{if(void 0===a[b].Gc){var d=a[b];a[b]=function(...e){if(!a[b].Gc.hasOwnProperty(e.length))throw new S(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].Gc})!`); +return a[b].Gc[e.length].apply(this,e)};a[b].Gc=[];a[b].Gc[d.md]=d}},kc=(a,b,c)=>{if(Module.hasOwnProperty(a)){if(void 0===c||void 0!==Module[a].Gc&&void 0!==Module[a].Gc[c])throw new S(`Cannot register public name '${a}' twice`);jc(Module,a,a);if(Module[a].Gc.hasOwnProperty(c))throw new S(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);Module[a].Gc[c]=b}else Module[a]=b,Module[a].md=c},lc=a=>{a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return b>= +48&&b<=57?`_${a}`:a};function mc(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.jd=c;this.Vc=d;this.Kc=e;this.we=f;this.vd=g;this.re=h;this.Pe=[]}var nc=(a,b,c)=>{for(;b!==c;){if(!b.vd)throw new S(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.vd(a);b=b.Kc}return a},oc=a=>{if(a===null)return"null";var b=typeof a;return b==="object"||b==="array"||b==="function"?a.toString():""+a};function pc(a,b){if(b===null){if(this.Kd)throw new S(`null is not a valid ${this.name}`); +return 0}if(!b.vc)throw new S(`Cannot pass "${oc(b)}" as a ${this.name}`);if(!b.vc.yc)throw new S(`Cannot pass deleted object as a pointer of type ${this.name}`);return nc(b.vc.yc,b.vc.Dc.Bc,this.Bc)}function qc(a,b){if(b===null){if(this.Kd)throw new S(`null is not a valid ${this.name}`);if(this.Cd){var c=this.Qd();a!==null&&a.push(this.Vc,c);return c}return 0}if(!b||!b.vc)throw new S(`Cannot pass "${oc(b)}" as a ${this.name}`);if(!b.vc.yc)throw new S(`Cannot pass deleted object as a pointer of type ${this.name}`); +if(!this.Bd&&b.vc.Dc.Bd)throw new S(`Cannot convert argument of type ${b.vc.Oc?b.vc.Oc.name:b.vc.Dc.name} to parameter type ${this.name}`);c=nc(b.vc.yc,b.vc.Dc.Bc,this.Bc);if(this.Cd){if(void 0===b.vc.Hc)throw new S("Passing raw pointer to smart pointer is illegal");switch(this.Ve){case 0:if(b.vc.Oc===this)c=b.vc.Hc;else throw new S(`Cannot convert argument of type ${b.vc.Oc?b.vc.Oc.name:b.vc.Dc.name} to parameter type ${this.name}`);break;case 1:c=b.vc.Hc;break;case 2:if(b.vc.Oc===this)c=b.vc.Hc; +else{var d=b.clone();c=this.Qe(c,T(()=>d["delete"]()));a!==null&&a.push(this.Vc,c)}break;default:throw new S("Unsupported sharing policy");}}return c}function rc(a,b){if(b===null){if(this.Kd)throw new S(`null is not a valid ${this.name}`);return 0}if(!b.vc)throw new S(`Cannot pass "${oc(b)}" as a ${this.name}`);if(!b.vc.yc)throw new S(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.vc.Dc.Bd)throw new S(`Cannot convert argument of type ${b.vc.Dc.name} to parameter type ${this.name}`); +return nc(b.vc.yc,b.vc.Dc.Bc,this.Bc)}var sc=(a,b,c)=>{if(b===c)return a;if(void 0===c.Kc)return null;a=sc(a,b,c.Kc);return a===null?null:c.re(a)},tc={},uc=(a,b)=>{if(b===void 0)throw new S("ptr should not be undefined");for(;a.Kc;)b=a.vd(b),a=a.Kc;return tc[b]},vc=(a,b)=>{if(!b.Dc||!b.yc)throw new Xb("makeClassHandle requires ptr and ptrType");if(!!b.Oc!==!!b.Hc)throw new Xb("Both smartPtrType and smartPtr must be specified");b.count={value:1};return dc(Object.create(a,{vc:{value:b,writable:!0}}))}; +function wc(a,b,c,d,e,f,g,h,l,m,n){this.name=a;this.Bc=b;this.Kd=c;this.Bd=d;this.Cd=e;this.Oe=f;this.Ve=g;this.he=h;this.Qd=l;this.Qe=m;this.Vc=n;e||b.Kc!==void 0?this.Ic=qc:(this.Ic=d?pc:rc,this.Pc=null)}var xc=(a,b,c)=>{if(!Module.hasOwnProperty(a))throw new Xb("Replacing nonexistent public symbol");void 0!==Module[a].Gc&&void 0!==c?Module[a].Gc[c]=b:(Module[a]=b,Module[a].md=c)},U=(a,b)=>{a=R(a);var c=C(b);if(typeof c!="function")throw new S(`unknown function pointer with signature ${a}: ${b}`); +return c};class yc extends Error{}var Bc=a=>{a=zc(a);var b=R(a);Ac(a);return b},Cc=(a,b)=>{function c(f){e[f]||Vb[f]||(Wb[f]?Wb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new yc(`${a}: `+d.map(Bc).join([", "]));};function Ec(a){for(var b=1;b{for(var c=[],d=0;d>2]);return c},Hc=a=>{a=a.trim();var b=a.indexOf("(");return b===-1?a:a.slice(0,b)},Ic=[],V=[0,1,,1,null,1,!0,1,!1,1],Jc=[], +Kc=a=>{if(a>9&&0===--V[a+1]){var b=V[a];V[a]=void 0;var c=Jc[a];c&&(Jc[a]=void 0,c(b));Ic.push(a)}},W=a=>{if(!a)throw new S(`Cannot use deleted val. handle = ${a}`);return V[a]},T=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:let b=Ic.pop()||V.length;V[b]=a;V[b+1]=1;return b}},Lc={name:"emscripten::val",Fc:a=>{var b=W(a);Kc(a);return b},Ic:(a,b)=>T(b),Wc:Tb,Pc:null},Mc=(a,b)=>{switch(b){case 4:return function(c){return this.Fc(ra[c>>2])};case 8:return function(c){return this.Fc(sa[c>> +3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},Nc=Object.assign({optional:!0},Lc),Oc=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Pc=(a,b,c)=>{a>>=1;b=Va(qa,a,b/2,c);if(b-a>16&&Oc)return Oc.decode(qa.subarray(a,b));for(c="";a{if(c<2)return 0;c-=2;var d=b;c=c>1]=a.charCodeAt(e),b+=2;pa[b>>1]=0;return b-d},Rc=a=>a.length*2,Sc=(a,b,c)=>{var d=""; +a>>=2;for(var e=0;!(e>=b/4);e++){var f=v[a+e];if(!f&&!c)break;d+=String.fromCodePoint(f)}return d},Tc=(a,b,c=2147483647)=>{if(c<4)return 0;var d=b;c=d+c-4;for(var e=0;e65535&&e++;u[b>>2]=f;b+=4;if(b+4>c)break}u[b>>2]=0;return b-d},Uc=a=>{for(var b=0,c=0;c65535&&c++,b+=4;return b},Vc=0,Wc=[],Xc=a=>{var b=Wc.length;Wc.push(a);return b},Yc=(a,b)=>{for(var c=Array(a),d=0;d>2],g=Vb[f];if(void 0===g)throw a= +`${`parameter ${d}`} has unknown type ${Bc(f)}`,new S(a);c[e]=g}return c},Zc={},$c=a=>{var b=Zc[a];return b===void 0?R(a):b},ad=a=>a%4===0&&(a%100!==0||a%400===0),bd=[0,31,60,91,121,152,182,213,244,274,305,335],cd=[0,31,59,90,120,151,181,212,243,273,304,334],dd={},ed=a=>{if(!(a instanceof ya||a=="unwind"))throw a;},fd=a=>{la=a;Aa||Vc>0||(ka=!0);throw new ya(a);},gd=a=>{if(!ka)try{a()}catch(b){ed(b)}finally{if(!(Aa||Vc>0))try{la=a=la,fd(a)}catch(b){ed(b)}}},hd=[],jd=(a,b)=>setTimeout(()=>{gd(a)},b), +kd={},md=()=>{if(!ld){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in kd)kd[b]===void 0?delete a[b]:a[b]=kd[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);ld=c}return ld},ld;F.gf=(a,b,c,d,e,f,g,h,l,m)=>{tb(a,b,c,d,e,h,l,m).then(f).catch(g)};F.yf=tb;F.Zc=Array(4096);F.Cc(I,{},"/");P("/tmp");P("/home");P("/home/web_user");(function(){P("/dev");bb(F.fd(1,3),{read:()=>0, +write:(d,e,f,g)=>g,Mc:()=>0});Hb("/dev/null",F.fd(1,3));ab(F.fd(5,0),db);ab(F.fd(6,0),eb);Hb("/dev/tty",F.fd(5,0));Hb("/dev/tty1",F.fd(6,0));var a=new Uint8Array(1024),b=0,c=()=>{b===0&&(Ra(a),b=a.byteLength);return a[--b]};F.ad("/dev","random",c);F.ad("/dev","urandom",c);P("/dev/shm");P("/dev/shm/tmp")})();(function(){P("/proc");var a=P("/proc/self");P("/proc/self/fd");F.Cc({Cc(){var b=F.createNode(a,"fd",16895,73);b.xc={Mc:I.xc.Mc};b.wc={ed(c,d){c=+d;var e=O(c);c={parent:null,Cc:{ge:"fake"},wc:{cd:()=> +e.path},id:c+1};return c.parent=c},sd(){return Array.from(F.streams.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},{},"/proc/self/fd")})();F.ve={MEMFS:I};(()=>{var a=fc.prototype;Object.assign(a,{isAliasOf:function(c){if(!(this instanceof fc&&c instanceof fc))return!1;var d=this.vc.Dc.Bc,e=this.vc.yc;c.vc=c.vc;var f=c.vc.Dc.Bc;for(c=c.vc.yc;d.Kc;)e=d.vd(e),d=d.Kc;for(;f.Kc;)c=f.vd(c),f=f.Kc;return d===f&&e===c},clone:function(){this.vc.yc||ac(this);if(this.vc.qd)return this.vc.count.value+= +1,this;var c=dc,d=Object,e=d.create,f=Object.getPrototypeOf(this),g=this.vc;c=c(e.call(d,f,{vc:{value:{count:g.count,nd:g.nd,qd:g.qd,yc:g.yc,Dc:g.Dc,Hc:g.Hc,Oc:g.Oc}}}));c.vc.count.value+=1;c.vc.nd=!1;return c},["delete"](){this.vc.yc||ac(this);if(this.vc.nd&&!this.vc.qd)throw new S("Object already scheduled for deletion");cc(this);var c=this.vc;--c.count.value;0===c.count.value&&(c.Hc?c.Oc.Vc(c.Hc):c.Dc.Bc.Vc(c.yc));this.vc.qd||(this.vc.Hc=void 0,this.vc.yc=void 0)},isDeleted:function(){return!this.vc.yc}, +deleteLater:function(){this.vc.yc||ac(this);if(this.vc.nd&&!this.vc.qd)throw new S("Object already scheduled for deletion");ec.push(this);this.vc.nd=!0;return this}});var b=Symbol.dispose;b&&(a[b]=a["delete"])})();Object.assign(wc.prototype,{ye(a){this.he&&(a=this.he(a));return a},ae(a){this.Vc?.(a)},Wc:Tb,Fc:function(a){function b(){return this.Cd?vc(this.Bc.jd,{Dc:this.Oe,yc:c,Oc:this,Hc:a}):vc(this.Bc.jd,{Dc:this,yc:a})}var c=this.ye(a);if(!c)return this.ae(a),null;var d=uc(this.Bc,c);if(void 0!== +d){if(0===d.vc.count.value)return d.vc.yc=c,d.vc.Hc=a,d.clone();d=d.clone();this.ae(a);return d}d=this.Bc.we(c);d=ic[d];if(!d)return b.call(this);d=this.Bd?d.pe:d.pointerType;var e=sc(c,this.Bc,d.Bc);return e===null?b.call(this):this.Cd?vc(d.Bc.jd,{Dc:d,yc:e,Oc:this,Hc:a}):vc(d.Bc.jd,{Dc:d,yc:e})}});oa=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:(Module.INITIAL_MEMORY||209715200)/65536,maximum:32768});na();Module.noExitRuntime&&(Aa=Module.noExitRuntime);Module.printErr&&(k= +Module.printErr);Module.wasmBinary&&(ja=Module.wasmBinary);Module.addRunDependency=pb;Module.removeRunDependency=ob;Module.FS_preloadFile=tb;Module.FS_unlink=(...a)=>F.ld(...a);Module.FS_createPath=(...a)=>Lb(...a);Module.FS_createDevice=(...a)=>F.ad(...a);Module.FS_readFile=(...a)=>Kb(...a);Module.FS=F;Module.FS_createDataFile=(...a)=>sb(...a);Module.FS_createLazyFile=(...a)=>Ob(...a);var nd={711469:(a,b,c,d)=>{a=a?H(t,a):"";b=b?H(t,b):"";c=c?H(t,c):"";d=d?H(t,d):"";throw Error(a+b+c+d);},711685:(a, +b)=>{a=a?H(t,a):"";b=b?H(t,b):"";throw Error(a+b);},711795:a=>{a=a?H(t,a):"";throw Error(a);},711859:a=>{a=a?H(t,a):"";throw Error(a);},711923:a=>{a=a?H(t,a):"";throw Error(a);}},od,pd,Ac,qd,zc,fb,rd,X,Ha,Y,Z,sd,td,Ia,Ca,gf={eb:(a,b)=>C(a)(b),x:a=>{var b=new Ga(a);r[b.yc+12]==0&&(r[b.yc+12]=1,Ea--);r[b.yc+13]=0;Da.push(b);return qd(a)},J:()=>{X(0,0);var a=Da.pop();sd(a.yd);Fa=null},b:()=>Ja([]),l:a=>Ja([a]),q:(a,b)=>Ja([a,b]),ua:()=>{Da.length||B("no exception to throw");var a=Da.at(-1),b=a.yd;r[a.yc+ +13]=1;r[a.yc+12]=0;Ea++;td(b);Fa=new ma(b);throw Fa;},C:(a,b,c)=>{(new Ga(a)).init(b,c);td(a);Fa=new ma(a);Ea++;throw Fa;},bb:()=>Ea,e:a=>{Fa||=new ma(a);throw Fa;},Ca:function(a,b,c){Ka=c;try{var d=O(a);switch(b){case 0:var e=E();if(e<0)break;for(;F.streams[e];)e++;return Db(d,e).bd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=E(),d.flags=d.flags&-289793|e&289792,0;case 12:return e=E(),pa[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(f){if(typeof F=="undefined"||f.name!=="ErrnoError")throw f; +return-f.Ec}},ub:function(a,b){try{var c=O(a),d=c.node,e=c.xc.Rc;a=e?c:d;e??=d.wc.Rc;Bb(e,63);var f=e(a);return Qb(b,f)}catch(g){if(typeof F=="undefined"||g.name!=="ErrnoError")throw g;return-g.Ec}},vb:function(a,b,c){Ka=c;try{var d=O(a);switch(b){case 21509:return d.Ac?0:-59;case 21505:if(!d.Ac)return-59;if(d.Ac.$c.Fe){a=[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];var e=E();u[e>>2]=25856;u[e+4>>2]=5;u[e+8>>2]=191;u[e+12>>2]=35387;for(var f=0;f<32;f++)r[e+f+17]=a[f]|| +0}return 0;case 21510:case 21511:case 21512:return d.Ac?0:-59;case 21506:case 21507:case 21508:if(!d.Ac)return-59;if(d.Ac.$c.Ge)for(e=E(),a=[],f=0;f<32;f++)a.push(r[e+f+17]);return 0;case 21519:if(!d.Ac)return-59;e=E();return u[e>>2]=0;case 21520:return d.Ac?-28:-59;case 21537:case 21531:return e=E(),F.Jd(d,b,e);case 21523:if(!d.Ac)return-59;d.Ac.$c.He&&(f=[24,80],e=E(),pa[e>>1]=f[0],pa[e+2>>1]=f[1]);return 0;case 21524:return d.Ac?0:-59;case 21515:return d.Ac?0:-59;default:return-28}}catch(g){if(typeof F== +"undefined"||g.name!=="ErrnoError")throw g;return-g.Ec}},sb:function(a,b){try{return a=a?H(t,a):"",Qb(b,F.stat(a,!0))}catch(c){if(typeof F=="undefined"||c.name!=="ErrnoError")throw c;return-c.Ec}},rb:function(a,b,c,d){try{b=b?H(t,b):"";var e=d&256;b=Pb(a,b,d&4096);return Qb(c,e?F.stat(b,!0):F.stat(b))}catch(f){if(typeof F=="undefined"||f.name!=="ErrnoError")throw f;return-f.Ec}},Ba:function(a,b,c,d){Ka=d;try{b=b?H(t,b):"";b=Pb(a,b);var e=d?E():0;c&64&&(e&=-19);return F.open(b,c,e).bd}catch(f){if(typeof F== +"undefined"||f.name!=="ErrnoError")throw f;return-f.Ec}},tb:function(a,b){try{return a=a?H(t,a):"",Qb(b,F.stat(a))}catch(c){if(typeof F=="undefined"||c.name!=="ErrnoError")throw c;return-c.Ec}},xb:()=>B(""),z:a=>{var b=Rb[a];delete Rb[a];var c=b.Qd,d=b.Vc,e=b.de,f=e.map(g=>g.Be).concat(e.map(g=>g.Te));Yb([a],f,g=>{var h={},l,m;for([l,m]of e.entries()){let n=g[l],p=m.od,w=m.Ae,x=g[l+e.length],y=m.Se,z=m.Ue;h[m.ue]={read:D=>n.Fc(p(w,D)),write:(D,G)=>{var J=[];y(z,D,x.Ic(J,G));Sb(J)},optional:n.optional}}return[{name:b.name, +Fc:n=>{var p={},w;for(w in h)p[w]=h[w].read(n);d(n);return p},Ic:(n,p)=>{for(var w in h)if(!(w in p||h[w].optional))throw new TypeError(`Missing field: "${w}"`);var x=c();for(w in h)h[w].write(x,p[w]);n!==null&&n.push(d,x);return x},Wc:Tb,Pc:d}]})},Ea:(a,b,c,d,e)=>{b=R(b);d=d===0n;var f=g=>g;if(d){let g=c*8;f=h=>BigInt.asUintN(g,h);e=f(e)}Q(a,{name:b,Fc:f,Ic:(g,h)=>{typeof h=="number"&&(h=BigInt(h));return h},Wc:$b(b,c,!d),Pc:null})},Bb:(a,b,c,d)=>{b=R(b);Q(a,{name:b,Fc:function(e){return!!e},Ic:function(e, +f){return f?c:d},Wc:function(e){return this.Fc(t[e])},Pc:null})},Ab:(a,b,c,d,e,f,g,h,l,m,n,p,w)=>{n=R(n);f=U(e,f);h&&=U(g,h);m&&=U(l,m);w=U(p,w);var x=lc(n);kc(x,function(){Cc(`Cannot construct ${n} due to unbound types`,[d])});Yb([a,b,c],d?[d]:[],y=>{y=y[0];if(d){var z=y.Bc;var D=z.jd}else D=fc.prototype;y=hc(n,function(...M){if(Object.getPrototypeOf(this)!==G)throw new S(`Use 'new' to construct ${n}`);if(void 0===J.Zd)throw new S(`${n} has no accessible constructor`);var Dc=J.Zd[M.length];if(void 0=== +Dc)throw new S(`Tried to invoke ctor of ${n} with invalid number of parameters (${M.length}) - expected (${Object.keys(J.Zd).toString()}) parameters instead!`);return Dc.apply(this,M)});var G=Object.create(D,{constructor:{value:y}});y.prototype=G;var J=new mc(n,y,G,w,z,f,h,m);if(J.Kc){var ha;(ha=J.Kc).Rd??(ha.Rd=[]);J.Kc.Rd.push(J)}z=new wc(n,J,!0,!1,!1);ha=new wc(n+"*",J,!1,!1,!1);D=new wc(n+" const*",J,!1,!0,!1);ic[a]={pointerType:ha,pe:D};xc(x,y);return[z,ha,D]})},da:(a,b,c,d,e,f,g,h)=>{var l= +Gc(c,d);b=R(b);b=Hc(b);f=U(e,f);Yb([],[a],m=>{function n(){Cc(`Cannot call ${p} due to unbound types`,l)}m=m[0];var p=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&m.Bc.Pe.push(b);var w=m.Bc.jd,x=w[b];void 0===x||void 0===x.Gc&&x.className!==m.name&&x.md===c-2?(n.md=c-2,n.className=m.name,w[b]=n):(jc(w,b,p),w[b].Gc[c-2]=n);Yb([],l,y=>{y=Fc(p,y,m,f,g);void 0===w[b].Gc?(y.md=c-2,w[b]=y):w[b].Gc[c-2]=y;return[]});return[]})},yb:a=>Q(a,Lc),Da:(a,b,c)=>{b=R(b);Q(a,{name:b,Fc:d=>d, +Ic:(d,e)=>e,Wc:Mc(b,c),Pc:null})},U:(a,b,c,d,e,f)=>{var g=Gc(b,c);a=R(a);a=Hc(a);e=U(d,e);kc(a,function(){Cc(`Cannot call ${a} due to unbound types`,g)},b-1);Yb([],g,h=>{xc(a,Fc(a,[h[0],null].concat(h.slice(1)),null,e,f),b-1);return[]})},_:(a,b,c,d,e)=>{b=R(b);var f=h=>h;if(d===0){var g=32-8*c;f=h=>h<>>g;e=f(e)}Q(a,{name:b,Fc:f,Ic:(h,l)=>l,Wc:$b(b,c,d!==0),Pc:null})},I:(a,b,c)=>{function d(f){return new e(r.buffer,v[f+4>>2],v[f>>2])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array, +Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=R(c);Q(a,{name:c,Fc:d,Wc:d},{De:!0})},D:a=>{Q(a,Nc)},zb:(a,b)=>{b=R(b);Q(a,{name:b,Fc(c){var d=(d=c+4)?H(t,d,v[c>>2],!0):"";Ac(c);return d},Ic(c,d){d instanceof ArrayBuffer&&(d=new Uint8Array(d));var e=typeof d=="string";if(!(e||ArrayBuffer.isView(d)&&d.BYTES_PER_ELEMENT==1))throw new S("Cannot pass non-string to std::string");var f=e?Xa(d):d.length;var g=od(4+f+1),h=g+4;v[g>>2]=f;e?Ya(d,t,h,f+1):t.set(d,h);c!==null&&c.push(Ac, +g);return g},Wc:Tb,Pc(c){Ac(c)}})},ta:(a,b,c)=>{c=R(c);if(b===2){var d=Pc;var e=Qc;var f=Rc}else d=Sc,e=Tc,f=Uc;Q(a,{name:c,Fc:g=>{var h=d(g+4,v[g>>2]*b,!0);Ac(g);return h},Ic:(g,h)=>{if(typeof h!="string")throw new S(`Cannot pass non-string to C++ string type ${c}`);var l=f(h),m=od(4+l+b);v[m>>2]=l/b;e(h,m+4,l+b);g!==null&&g.push(Ac,m);return m},Wc:Tb,Pc(g){Ac(g)}})},y:(a,b,c,d,e,f)=>{Rb[a]={name:R(b),Qd:U(c,d),Vc:U(e,f),de:[]}},n:(a,b,c,d,e,f,g,h,l,m)=>{Rb[a].de.push({ue:R(b),Be:c,od:U(d,e),Ae:f, +Te:g,Se:U(h,l),Ue:m})},Cb:(a,b)=>{b=R(b);Q(a,{Ke:!0,name:b,Fc:()=>{},Ic:()=>{}})},gb:()=>{Aa=!1;Vc=0},p:(a,b,c)=>{var d;[b,...d]=Yc(a,b);var e=b.Ic.bind(b),f=d.map(h=>h.Wc.bind(h));a--;var g=Array(a);b=`methodCaller<(${d.map(h=>h.name)}) => ${b.name}>`;return Xc(hc(b,(h,l,m,n)=>{for(var p=0,w=0;w>2]=T(h));return x}))}, +Fb:Kc,fa:a=>{if(!a)return T(globalThis);a=$c(a);return T(globalThis[a])},O:(a,b)=>{a=W(a);b=W(b);return T(a[b])},_a:a=>{a>9&&(V[a+1]+=1)},o:(a,b,c,d,e)=>Wc[a](b,c,d,e),ea:a=>{a=W(a);return typeof a=="string"},K:()=>T([]),F:a=>T($c(a)),ca:()=>T({}),Za:a=>{var b=W(a);Sb(b);Kc(a)},T:(a,b,c)=>{a=W(a);b=W(b);c=W(c);a[b]=c},jb:function(a,b){a=a<-9007199254740992||a>9007199254740992?NaN:Number(a);a=new Date(a*1E3);if(isNaN(a.getTime()))return 1;u[b>>2]=a.getSeconds();u[b+4>>2]=a.getMinutes();u[b+8>>2]=a.getHours(); +u[b+12>>2]=a.getDate();u[b+16>>2]=a.getMonth();u[b+20>>2]=a.getFullYear()-1900;u[b+24>>2]=a.getDay();u[b+28>>2]=(ad(a.getFullYear())?bd:cd)[a.getMonth()]+a.getDate()-1|0;u[b+36>>2]=-(a.getTimezoneOffset()*60);var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();u[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;return 0},kb:function(a){var b=(()=>{var c=new Date(u[a+20>>2]+1900,u[a+16>>2],u[a+12>>2],u[a+8>>2],u[a+4>>2],u[a>>2],0);if(isNaN(c.getTime()))return-1; +var d=u[a+32>>2],e=c.getTimezoneOffset(),f=(new Date(c.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(c.getFullYear(),0,1)).getTimezoneOffset(),h=Math.min(g,f);if(d<0)d=Number(f!=g&&h==e);else if(d>0!=(h==e)&&(f=Math.max(g,f),c.setTime(c.getTime()+((d>0?h:f)-e)*6E4),isNaN(c.getTime())))return-1;u[a+32>>2]=d;u[a+24>>2]=c.getDay();u[a+28>>2]=(ad(c.getFullYear())?bd:cd)[c.getMonth()]+c.getDate()-1|0;u[a>>2]=c.getSeconds();u[a+4>>2]=c.getMinutes();u[a+8>>2]=c.getHours();u[a+12>>2]=c.getDate();u[a+ +16>>2]=c.getMonth();u[a+20>>2]=c.getYear();return c.getTime()/1E3})();return BigInt(b)},hb:function(a,b,c,d,e,f,g){e=e<-9007199254740992||e>9007199254740992?NaN:Number(e);try{var h=O(d),l=F.gd(h,a,e,b,c),m=l.yc;u[f>>2]=l.Ud;v[g>>2]=m;return 0}catch(n){if(typeof F=="undefined"||n.name!=="ErrnoError")throw n;return-n.Ec}},ib:function(a,b,c,d,e,f){f=f<-9007199254740992||f>9007199254740992?NaN:Number(f);try{var g=O(e);if(c&2){c=f;if(!F.isFile(g.node.mode))throw new F.uc(43);d&2||F.kd(g,t.subarray(a,a+ +b),c,b,d)}}catch(h){if(typeof F=="undefined"||h.name!=="ErrnoError")throw h;return-h.Ec}},$a:(a,b)=>{dd[a]&&(clearTimeout(dd[a].id),delete dd[a]);if(!b)return 0;var c=setTimeout(()=>{delete dd[a];gd(()=>rd(a,performance.now()))},b);dd[a]={id:c,Cf:b};return 0},lb:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();v[a>>2]=Math.max(f,e)*60;u[b>>2]=Number(f!=e);b=g=>{var h=Math.abs(g);return`UTC${g>=0?"-":"+"}${String(Math.floor(h/ +60)).padStart(2,"0")}${String(h%60).padStart(2,"0")}`};a=b(f);b=b(e);e=0&&a<=3))return 28;A[c>>3]=BigInt(Math.round((a===0?Date.now():performance.now())*1E3*1E3));return 0},ka:(a,b,c)=>{hd.length=0;for(var d;d=t[b++];){var e=d!=105;e&=d!=112;c+=e&&c%8?4:0;hd.push(d==112?v[c>>2]:d==106?A[c>>3]:d==105?u[c>>2]:sa[c>>3]);c+=e?8:4}return nd[a](...hd)},wb:()=>Date.now(),Fa:(a,b,c)=>{var d=Error().stack.toString(),e=d.split("\n"); +d="";var f=RegExp("\\s*(.*?)@(.*?):([0-9]+):([0-9]+)"),g=RegExp("\\s*at (.*?) \\((.*):(.*):(.*)\\)"),h;for(h of e){var l=g.exec(h);if(l?.length==5){e=l[1];var m=l[2];var n=l[3];l=l[4]}else if(l=f.exec(h),l?.length>=4)e=l[1],m=l[2],n=l[3],l=l[4]|0;else{d+=h+"\n";continue}e=="_emscripten_log"||e=="_emscripten_get_callstack"?d="":a&24&&(a&64&&(m=m.substring(m.replace(/\\/g,"/").lastIndexOf("/")+1)),d+=` at ${e} (${m}:${n}:${l})\n`)}a=d=d.replace(/\s+$/,"");return!b||c<=0?Xa(a)+1:Ya(a,t,b,c)+1},db:()=> +2147483648,cb:a=>{var b=t.length;a>>>=0;if(a>2147483648)return!1;for(var c=1;c<=4;c*=2){a:{var d=(Math.min(2147483648,Math.ceil(Math.max(a,b+2097152/c)/65536)*65536)-oa.buffer.byteLength+65535)/65536|0;try{oa.grow(d);na();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},Db:(a,b,c)=>jd(()=>C(a)(c),b),pb:(a,b)=>{var c=0,d=0,e;for(e of md()){var f=b+c;v[a+d>>2]=f;c+=Ya(e,t,f,Infinity)+1;d+=4}return 0},qb:(a,b)=>{var c=md();v[a>>2]=c.length;a=0;for(var d of c)a+=Xa(d)+1;v[b>>2]=a;return 0}, +Ga:a=>{la=a;fd(a)},sa:function(a){try{var b=O(a);F.close(b);return 0}catch(c){if(typeof F=="undefined"||c.name!=="ErrnoError")throw c;return c.Ec}},ob:function(a,b){try{var c=O(a);r[b]=c.Ac?2:K(c.mode)?3:(c.mode&61440)===40960?7:4;pa[b+2>>1]=0;A[b+8>>3]=BigInt(0);A[b+16>>3]=BigInt(0);return 0}catch(d){if(typeof F=="undefined"||d.name!=="ErrnoError")throw d;return d.Ec}},Aa:function(a,b,c,d){try{a:{var e=O(a);a=b;for(var f,g=b=0;g>2],l=v[a+4>>2];a+=8;var m=F.read(e,r,h,l,f);if(m< +0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(p){if(typeof F=="undefined"||p.name!=="ErrnoError")throw p;return p.Ec}},nb:function(a,b,c,d){b=b<-9007199254740992||b>9007199254740992?NaN:Number(b);try{if(isNaN(b))return 22;var e=O(a);F.Mc(e,b,c);A[d>>3]=BigInt(e.position);e.Hd&&b===0&&c===0&&(e.Hd=null);return 0}catch(f){if(typeof F=="undefined"||f.name!=="ErrnoError")throw f;return f.Ec}},ra:function(a,b,c,d){try{a:{var e=O(a);a=b;for(var f,g=b=0;g< +c;g++){var h=v[a>>2],l=v[a+4>>2];a+=8;var m=F.write(e,r,h,l,f);if(m<0){var n=-1;break a}b+=m;if(m>2]=n;return 0}catch(p){if(typeof F=="undefined"||p.name!=="ErrnoError")throw p;return p.Ec}},M:ud,qa:vd,Xa:wd,S:xd,Na:yd,P:zd,$:Ad,B:Bd,Ra:Cd,g:Dd,la:Ed,c:Fd,na:Gd,Ma:Hd,j:Id,X:Jd,Ta:Kd,Ua:Ld,Va:Md,k:Nd,ya:Od,Mb:Pd,va:Qd,w:Rd,ma:Sd,Qb:Td,u:Ud,Sa:Vd,Pb:Wd,V:Xd,N:Yd,Q:Zd,bc:$d,ia:ae,Oa:be,za:ce,Ka:de,oa:ee,m:fe,Hb:ge,s:he,Wa:ie,Pa:je,ba:ke,Ha:le,ja:me,Rb:ne, +f:oe,H:pe,ga:qe,Gb:re,Nb:se,Ib:te,Ob:ue,W:ve,Xb:we,Yb:xe,h:ye,aa:ze,A:Ae,L:Be,cc:Ce,xa:De,Tb:Ee,i:Fe,Z:Ge,wa:He,Ia:Ie,Kb:Je,Ya:Ke,La:Le,pa:Me,Lb:Ne,d:Oe,Sb:Pe,Ub:Qe,Qa:Re,Vb:Se,r:Te,Zb:Ue,_b:Ve,ac:We,t:Xe,Jb:Ye,Wb:Ze,v:$e,E:af,$b:bf,Y:cf,Ja:df,R:ef,ha:ff,G:a=>a,a:oa,fb:fd,ab:(a,b)=>Ra(t.subarray(a,a+b)),Eb:function(a,b,c,d,e){var f=!1,g=l=>{f||(f=!0,clearTimeout(h),pd(a,l))};try{let l=new AbortController,m=new Uint8Array(d);m.set(t.subarray(c,c+d));var h=setTimeout(()=>l.abort(),e);fetch(b?H(t,b): +"",{method:"POST",headers:{"Content-Type":"application/json;charset=UTF-8"},body:m,signal:l.signal}).then(n=>g(n.status),()=>g(0))}catch{g(0)}}};function Xd(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Bd(a){var b=Z();try{return C(a)()}catch(c){Y(b);if(!(c instanceof q))throw c;X(1,0)}}function Fd(a,b,c){var d=Z();try{return C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function ye(a,b,c,d){var e=Z();try{C(a)(b, +c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function oe(a,b,c){var d=Z();try{C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function fe(a){var b=Z();try{C(a)()}catch(c){Y(b);if(!(c instanceof q))throw c;X(1,0)}}function he(a,b){var c=Z();try{C(a)(b)}catch(d){Y(c);if(!(d instanceof q))throw d;X(1,0)}}function Fe(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Dd(a,b){var c=Z();try{return C(a)(b)}catch(d){Y(c);if(!(d instanceof +q))throw d;X(1,0)}}function $e(a,b,c,d,e,f,g,h,l){var m=Z();try{C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof q))throw n;X(1,0)}}function Id(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Nd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Ud(a,b,c,d,e,f,g){var h=Z();try{return C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Xe(a,b,c,d,e,f,g,h){var l= +Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Oe(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Gd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Te(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function vd(a,b,c){var d=Z();try{return C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1, +0)}}function Sd(a,b,c,d,e,f,g){var h=Z();try{return C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Ed(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function xd(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function ef(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Ke(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b, +c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Rd(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function af(a,b,c,d,e,f,g,h,l,m){var n=Z();try{C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function ce(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Yd(a,b,c,d,e,f,g,h,l){var m=Z();try{return C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof +q))throw n;X(1,0)}}function cf(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function Ae(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function wd(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Be(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Ce(a,b,c,d,e,f,g,h){var l= +Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function $d(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function ie(a,b,c){var d=Z();try{C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function Jd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Od(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof +q))throw h;X(1,0)}}function Md(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function We(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function bf(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Ld(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h; +X(1,0)}}function me(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function ke(a,b,c,d){var e=Z();try{C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Ve(a,b,c,d,e,f,g,h,l){var m=Z();try{C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof q))throw n;X(1,0)}}function ze(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Kd(a,b,c,d,e,f){var g=Z();try{return C(a)(b,c,d,e,f)}catch(h){Y(g); +if(!(h instanceof q))throw h;X(1,0)}}function ve(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function De(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Zd(a,b,c,d,e,f,g,h,l,m){var n=Z();try{return C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function ud(a,b){var c=Z();try{return C(a)(b)}catch(d){Y(c);if(!(d instanceof q))throw d;X(1,0)}}function pe(a,b,c, +d){var e=Z();try{C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function He(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Vd(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Cd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Ue(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p); +if(!(w instanceof q))throw w;X(1,0)}}function Re(a,b,c,d,e,f,g,h,l,m,n,p,w){var x=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w)}catch(y){Y(x);if(!(y instanceof q))throw y;X(1,0)}}function xe(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function we(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function Ze(a,b,c,d,e,f,g,h,l,m){var n=Z();try{C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p; +X(1,0)}}function Se(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Qe(a,b,c,d,e,f,g,h,l,m){var n=Z();try{C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function Ee(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function ff(a,b,c,d,e,f,g,h,l,m,n,p,w,x,y,z){var D=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x,y,z)}catch(G){Y(D);if(!(G instanceof q))throw G; +X(1,0)}}function Pe(a,b,c,d,e,f,g){var h=Z();try{C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function je(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function ne(a,b,c){var d=Z();try{C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function Td(a,b,c,d,e,f,g,h,l,m){var n=Z();try{return C(a)(b,c,d,e,f,g,h,l,m)}catch(p){Y(n);if(!(p instanceof q))throw p;X(1,0)}}function qe(a,b,c,d,e){var f=Z();try{C(a)(b,c, +d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function ae(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function be(a,b,c,d,e,f,g,h,l,m,n,p,w){var x=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n,p,w)}catch(y){Y(x);if(!(y instanceof q))throw y;X(1,0)}}function Wd(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{return C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function ue(a,b,c,d,e,f){var g=Z(); +try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function yd(a,b,c){var d=Z();try{return C(a)(b,c)}catch(e){Y(d);if(!(e instanceof q))throw e;X(1,0)}}function se(a,b,c,d,e,f,g,h,l){var m=Z();try{C(a)(b,c,d,e,f,g,h,l)}catch(n){Y(m);if(!(n instanceof q))throw n;X(1,0)}}function Hd(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function Pd(a,b,c,d,e,f,g,h){var l=Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m; +X(1,0)}}function Qd(a,b,c,d,e,f,g){var h=Z();try{return C(a)(b,c,d,e,f,g)}catch(l){Y(h);if(!(l instanceof q))throw l;X(1,0)}}function zd(a,b,c,d){var e=Z();try{return C(a)(b,c,d)}catch(f){Y(e);if(!(f instanceof q))throw f;X(1,0)}}function Le(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function Me(a,b,c,d,e,f,g,h,l,m,n,p){var w=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p)}catch(x){Y(w);if(!(x instanceof q))throw x;X(1,0)}}function Ad(a,b,c,d,e,f,g,h){var l= +Z();try{return C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function de(a){var b=Z();try{return C(a)()}catch(c){Y(b);if(!(c instanceof q))throw c;X(1,0);return 0n}}function Ne(a,b,c,d,e,f,g,h,l,m,n,p,w,x,y,z){var D=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x,y,z)}catch(G){Y(D);if(!(G instanceof q))throw G;X(1,0)}}function Je(a,b,c,d,e,f,g,h,l,m,n,p,w,x,y,z){var D=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x,y,z)}catch(G){Y(D);if(!(G instanceof q))throw G;X(1,0)}}function df(a,b,c,d, +e,f,g,h,l,m,n,p,w,x){var y=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n,p,w,x)}catch(z){Y(y);if(!(z instanceof q))throw z;X(1,0)}}function Ye(a,b,c,d,e,f,g,h,l,m,n){var p=Z();try{C(a)(b,c,d,e,f,g,h,l,m,n)}catch(w){Y(p);if(!(w instanceof q))throw w;X(1,0)}}function Ge(a,b,c,d,e,f){var g=Z();try{C(a)(b,c,d,e,f)}catch(h){Y(g);if(!(h instanceof q))throw h;X(1,0)}}function Ie(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function te(a,b,c,d,e){var f=Z();try{C(a)(b, +c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function le(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function ge(a,b,c,d,e){var f=Z();try{C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0)}}function re(a,b,c,d,e,f,g,h){var l=Z();try{C(a)(b,c,d,e,f,g,h)}catch(m){Y(l);if(!(m instanceof q))throw m;X(1,0)}}function ee(a,b,c,d,e){var f=Z();try{return C(a)(b,c,d,e)}catch(g){Y(f);if(!(g instanceof q))throw g;X(1,0);return 0n}} +var hf;hf=await (async function(){var a={a:gf};ua??=Module.locateFile?Module.locateFile?Module.locateFile("BlinkIdModule.wasm",da):da+"BlinkIdModule.wasm":(new URL("BlinkIdModule.wasm",import.meta.url)).href;a=hf=(await xa(a)).instance.exports;od=a.ec;pd=Module._mbPingRequestFinished=a.fc;Ac=a.gc;qd=a.hc;zc=a.jc;fb=a.lc;rd=a.mc;X=a.nc;Ha=a.oc;Y=a.pc;Z=a.qc;sd=a.rc;td=a.sc;Ia=a.tc;Module.__ZN2MB2NN28LinearDefragmentingAllocator10Allocation4nullE=a.ic.value;Ca=a.kc;return hf}());await (async function(){var a= +Module.preRun;a&&(typeof a=="function"&&(a=[a]),za.push(...a));for(;za.length>0;)za.shift()(Module);nb&&await mb();ka||(Module.noFSInit||F.Id||F.init(),hf.dc(),F.fe=!1)}());;return Module}export default createModule; diff --git a/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.wasm b/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.wasm new file mode 100644 index 00000000..3bc3c3ba Binary files /dev/null and b/packages/blinkid-wasm/dist/lightweight/simd/BlinkIdModule.wasm differ diff --git a/packages/blinkid-wasm/dist/ota-resources/knowledge-database.zzip b/packages/blinkid-wasm/dist/ota-resources/knowledge-database.zzip new file mode 100644 index 00000000..e51ec5cd Binary files /dev/null and b/packages/blinkid-wasm/dist/ota-resources/knowledge-database.zzip differ diff --git a/packages/blinkid-wasm/dist/ota-resources/ota-resources.json b/packages/blinkid-wasm/dist/ota-resources/ota-resources.json new file mode 100644 index 00000000..32036e82 --- /dev/null +++ b/packages/blinkid-wasm/dist/ota-resources/ota-resources.json @@ -0,0 +1,19 @@ +{ + "resources": [ + { + "filename": "serialized-embedder-database.bin", + "version": "1.0.14", + "url": "serialized-embedder-database.bin" + }, + { + "filename": "template-database.zzip", + "version": "1.0.1", + "url": "template-database.zzip" + }, + { + "filename": "knowledge-database.zzip", + "version": "2.0.1", + "url": "knowledge-database.zzip" + } + ] +} diff --git a/packages/blinkid-wasm/dist/ota-resources/serialized-embedder-database.bin b/packages/blinkid-wasm/dist/ota-resources/serialized-embedder-database.bin new file mode 100644 index 00000000..1f1ee75a Binary files /dev/null and b/packages/blinkid-wasm/dist/ota-resources/serialized-embedder-database.bin differ diff --git a/packages/blinkid-wasm/dist/ota-resources/template-database.zzip b/packages/blinkid-wasm/dist/ota-resources/template-database.zzip new file mode 100644 index 00000000..9de7ffc6 Binary files /dev/null and b/packages/blinkid-wasm/dist/ota-resources/template-database.zzip differ diff --git a/packages/blinkid-wasm/dist/size-manifest.json b/packages/blinkid-wasm/dist/size-manifest.json index d51c1299..cde1055f 100644 --- a/packages/blinkid-wasm/dist/size-manifest.json +++ b/packages/blinkid-wasm/dist/size-manifest.json @@ -1,30 +1,22 @@ { "wasm": { - "basic": { - "full": 3454331, - "lightweight": 3493773 + "simd": { + "full": 4633969, + "lightweight": 4605555 }, - "advanced": { - "full": 3464883, - "lightweight": 3502051 - }, - "advanced-threads": { - "full": 3514548, - "lightweight": 3550604 + "simd-threads": { + "full": 4679816, + "lightweight": 4647889 } }, "data": { - "basic": { - "full": 13806438, - "lightweight": 12173753 - }, - "advanced": { - "full": 13806438, - "lightweight": 12173753 + "simd": { + "full": 12778825, + "lightweight": 11143606 }, - "advanced-threads": { - "full": 13806438, - "lightweight": 12173753 + "simd-threads": { + "full": 12778825, + "lightweight": 11143606 } } } \ No newline at end of file diff --git a/packages/blinkid-wasm/docs/README.md b/packages/blinkid-wasm/docs/README.md index 8a7fe3b7..389652b9 100644 --- a/packages/blinkid-wasm/docs/README.md +++ b/packages/blinkid-wasm/docs/README.md @@ -6,6 +6,7 @@ ## Interfaces +- [MemFSModule](interfaces/MemFSModule.md) - [WasmBindings](interfaces/WasmBindings.md) - [WasmModule](interfaces/WasmModule.md) @@ -46,7 +47,11 @@ - [DetailedFieldType](type-aliases/DetailedFieldType.md) - [DetectionStatus](type-aliases/DetectionStatus.md) - [DocumentCaptureModuleSettings](type-aliases/DocumentCaptureModuleSettings.md) +- [DocumentClassComponent](type-aliases/DocumentClassComponent.md) +- [DocumentClassCountry](type-aliases/DocumentClassCountry.md) +- [DocumentClassDocumentType](type-aliases/DocumentClassDocumentType.md) - [DocumentClassInfo](type-aliases/DocumentClassInfo.md) +- [DocumentClassRegion](type-aliases/DocumentClassRegion.md) - [DocumentImageColor](type-aliases/DocumentImageColor.md) - [DocumentNumberRedactionSettings](type-aliases/DocumentNumberRedactionSettings.md) - [DocumentOrientation](type-aliases/DocumentOrientation.md) @@ -64,6 +69,9 @@ - [ImageCompleteness](type-aliases/ImageCompleteness.md) - [ImageExtractionType](type-aliases/ImageExtractionType.md) - [InputImageAnalysisResult](type-aliases/InputImageAnalysisResult.md) +- [InputImageCropAnalysis](type-aliases/InputImageCropAnalysis.md) +- [InputImageCropType](type-aliases/InputImageCropType.md) +- [InputImageSelectionStrategy](type-aliases/InputImageSelectionStrategy.md) - [InputImageSource](type-aliases/InputImageSource.md) - [LicenseRequest](type-aliases/LicenseRequest.md) - [LicenseTokenState](type-aliases/LicenseTokenState.md) @@ -99,16 +107,15 @@ - [VehicleClassInfo](type-aliases/VehicleClassInfo.md) - [VehicleClassInfoCompleteness](type-aliases/VehicleClassInfoCompleteness.md) - [VizCompleteness](type-aliases/VizCompleteness.md) +- [VizExtractionType](type-aliases/VizExtractionType.md) - [VizFieldsCompleteness](type-aliases/VizFieldsCompleteness.md) - [VizModuleSettings](type-aliases/VizModuleSettings.md) - [VizResult](type-aliases/VizResult.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) ## Variables - [resourceFileTypes](variables/resourceFileTypes.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) diff --git a/packages/blinkid-wasm/docs/interfaces/MemFSModule.md b/packages/blinkid-wasm/docs/interfaces/MemFSModule.md new file mode 100644 index 00000000..15766356 --- /dev/null +++ b/packages/blinkid-wasm/docs/interfaces/MemFSModule.md @@ -0,0 +1,171 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / MemFSModule + +# Interface: MemFSModule + +## Properties + +### FS? + +> `optional` **FS**: `object` + +#### mkdirTree()? + +> `optional` **mkdirTree**(`path`): `void` + +##### Parameters + +###### path + +`string` + +##### Returns + +`void` + +#### readdir()? + +> `optional` **readdir**(`path`): `string`[] + +##### Parameters + +###### path + +`string` + +##### Returns + +`string`[] + +#### readFile()? + +> `optional` **readFile**(`path`): `Uint8Array` + +##### Parameters + +###### path + +`string` + +##### Returns + +`Uint8Array` + +#### stat()? + +> `optional` **stat**(`path`): `object` + +##### Parameters + +###### path + +`string` + +##### Returns + +`object` + +###### size + +> **size**: `number` + +#### writeFile()? + +> `optional` **writeFile**(`path`, `data`): `void` + +##### Parameters + +###### path + +`string` + +###### data + +`Uint8Array` + +##### Returns + +`void` + +*** + +### FS\_createDataFile()? + +> `optional` **FS\_createDataFile**: (`parent`, `name`, `data`, `canRead`, `canWrite`, `canOwn?`) => `void` + +#### Parameters + +##### parent + +`string` + +##### name + +`string` + +##### data + +`Uint8Array` + +##### canRead + +`boolean` + +##### canWrite + +`boolean` + +##### canOwn? + +`boolean` + +#### Returns + +`void` + +*** + +### FS\_createPath()? + +> `optional` **FS\_createPath**: (`parent`, `path`, `canRead`, `canWrite`) => `void` + +#### Parameters + +##### parent + +`string` + +##### path + +`string` + +##### canRead + +`boolean` + +##### canWrite + +`boolean` + +#### Returns + +`void` + +*** + +### FS\_unlink()? + +> `optional` **FS\_unlink**: (`path`) => `void` + +#### Parameters + +##### path + +`string` + +#### Returns + +`void` diff --git a/packages/blinkid-wasm/docs/type-aliases/BarcodeModuleSettings.md b/packages/blinkid-wasm/docs/type-aliases/BarcodeModuleSettings.md index 2bc0af29..d361fef4 100644 --- a/packages/blinkid-wasm/docs/type-aliases/BarcodeModuleSettings.md +++ b/packages/blinkid-wasm/docs/type-aliases/BarcodeModuleSettings.md @@ -25,6 +25,22 @@ extract barcode immediately at the initialization. ## Properties +### aztecScanningEnabled + +> **aztecScanningEnabled**: `boolean` + +Enables the scanning and processing of Aztec barcodes. + +This setting can be enabled only if `documentCaptureEnabled` is disabled. + +#### Default + +```ts +false +``` + +*** + ### barcodeImageReturnEnabled > **barcodeImageReturnEnabled**: `boolean` diff --git a/packages/blinkid-wasm/docs/type-aliases/BlinkIdScanningResult.md b/packages/blinkid-wasm/docs/type-aliases/BlinkIdScanningResult.md index ff9a9932..c89e6567 100644 --- a/packages/blinkid-wasm/docs/type-aliases/BlinkIdScanningResult.md +++ b/packages/blinkid-wasm/docs/type-aliases/BlinkIdScanningResult.md @@ -157,11 +157,14 @@ The additional number of the document *** -### documentClassInfo +### documentClassInfo? -> **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) +> `optional` **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) -The document class information +The document class information. + +Absent when the document could not be classified (for example, for +unsupported documents without any extracted class info). *** @@ -229,6 +232,14 @@ The employer of the document owner *** +### ethnicity + +> **ethnicity**: [`StringResult`](StringResult.md) \| `undefined` + +The ethnicity of the document owner + +*** + ### faceImageScanningSide > **faceImageScanningSide**: [`ScanningSide`](ScanningSide.md) \| `undefined` diff --git a/packages/blinkid-wasm/docs/type-aliases/DocumentCaptureModuleSettings.md b/packages/blinkid-wasm/docs/type-aliases/DocumentCaptureModuleSettings.md index e6b170a8..c0392a67 100644 --- a/packages/blinkid-wasm/docs/type-aliases/DocumentCaptureModuleSettings.md +++ b/packages/blinkid-wasm/docs/type-aliases/DocumentCaptureModuleSettings.md @@ -47,6 +47,31 @@ blur; it may detect as blur even something that only resembles blur. *** +### cropType + +> **cropType**: [`InputImageCropType`](InputImageCropType.md) + +Specifies whether the input image is already cropped, likely cropped, or +not cropped. + +When set to `"cropped"`, the input image must consist solely of the already +cropped and corrected document. + +When set to `"unknown"`, the recognizer first attempts extraction as if the +image is cropped, then falls back to the regular localization pipeline if +extraction fails. + +`"cropped"` and `"unknown"` are applicable only to `Photo` sources and will +cause a validation error for `Video`. + +#### Default + +```ts +"not-cropped" +``` + +*** + ### documentImageReturnEnabled > **documentImageReturnEnabled**: `boolean` @@ -227,12 +252,13 @@ document will be excluded from further processing. If occlusion is detected, `ProcessingStatus` will be `ImagePreprocessingFailed` and hand occlusion status will be reported in the `ProcessResult`. -Default behavior depends on `inputImageCropped`: +Default behavior depends on `cropType`: -- `true`: Defaults to `false`. This setting is not applicable. Setting this - to `true` while `inputImageCropped` is also `true` will result in a - settings validation failure. -- `false`: Defaults to `true`. Images with hand occlusion are rejected. +- `"cropped"`: Defaults to `false`. This setting is not applicable. Setting + this to `true` while `cropType` is `"cropped"` will result in a settings + validation failure. +- `"not-cropped"` and `"unknown"`: Defaults to `true`. Images with hand + occlusion are rejected. #### Default @@ -267,29 +293,6 @@ true *** -### inputImageCropped - -> **inputImageCropped**: `boolean` - -Indicates whether the input image is already cropped and -perspective-corrected. - -If `true`, the input image must consist solely of the already cropped and -corrected document. - -Default value is `false`. - -This setting is not applicable to `Video` sources and will cause a -validation error if set to true. - -#### Default - -```ts -false -``` - -*** - ### inputImageMargin > **inputImageMargin**: `number` @@ -333,6 +336,29 @@ false *** +### inputImageSelectionStrategy + +> **inputImageSelectionStrategy**: [`InputImageSelectionStrategy`](InputImageSelectionStrategy.md) + +Represents the strategy used to select the best input image from a pool of +stable input images. + +Available strategies are `"single-image"`, `"optimize-for-speed"`, +`"default"`, and `"optimize-for-quality"`. The `"default"` strategy +represents a trade-off between speed and quality, while +`"optimize-for-speed"` and `"optimize-for-quality"` are optimized for speed +and quality respectively. + +This setting is only applicable for the `Video` input image source. + +#### Default + +```ts +"default" +``` + +*** + ### passportDataPageScanOnly > **passportDataPageScanOnly**: `boolean` diff --git a/packages/blinkid-wasm/docs/type-aliases/DocumentClassComponent.md b/packages/blinkid-wasm/docs/type-aliases/DocumentClassComponent.md new file mode 100644 index 00000000..c1f2fc13 --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/DocumentClassComponent.md @@ -0,0 +1,37 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / DocumentClassComponent + +# Type Alias: DocumentClassComponent\ + +> **DocumentClassComponent**\<`TId`\> = `object` + +A single document classification component. + +`id` is present when the classification maps to a value known at build time. +`rawValue` always carries the raw classification token from the document +knowledge database, including OTA-delivered classes unknown at build time. + +## Type Parameters + +### TId + +`TId` *extends* `string` + +## Properties + +### id? + +> `optional` **id**: `TId` + +Strongly-typed identifier, when known at build time. + +*** + +### rawValue + +> **rawValue**: `string` + +Raw classification value (document knowledge database format). diff --git a/packages/blinkid-wasm/docs/type-aliases/DocumentClassCountry.md b/packages/blinkid-wasm/docs/type-aliases/DocumentClassCountry.md new file mode 100644 index 00000000..a7ae764a --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/DocumentClassCountry.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / DocumentClassCountry + +# Type Alias: DocumentClassCountry + +> **DocumentClassCountry** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`Country`](Country.md)\> + +The document country classification. diff --git a/packages/blinkid-wasm/docs/type-aliases/DocumentClassDocumentType.md b/packages/blinkid-wasm/docs/type-aliases/DocumentClassDocumentType.md new file mode 100644 index 00000000..419c9eb3 --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/DocumentClassDocumentType.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / DocumentClassDocumentType + +# Type Alias: DocumentClassDocumentType + +> **DocumentClassDocumentType** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`DocumentType`](DocumentType.md)\> + +The document type classification. diff --git a/packages/blinkid-wasm/docs/type-aliases/DocumentClassInfo.md b/packages/blinkid-wasm/docs/type-aliases/DocumentClassInfo.md index 753fd5d8..219c3c62 100644 --- a/packages/blinkid-wasm/docs/type-aliases/DocumentClassInfo.md +++ b/packages/blinkid-wasm/docs/type-aliases/DocumentClassInfo.md @@ -14,54 +14,54 @@ Represents the document class information. ### country -> **country**: [`Country`](Country.md) \| `undefined` +> **country**: [`DocumentClassCountry`](DocumentClassCountry.md) \| `undefined` The document country. *** -### countryName +### countryName? -> **countryName**: `string` +> `optional` **countryName**: `string` The name of the country that issued the scanned document. *** -### isoAlpha2CountryCode +### documentType -> **isoAlpha2CountryCode**: `string` +> **documentType**: [`DocumentClassDocumentType`](DocumentClassDocumentType.md) \| `undefined` -The 2-letter ISO code of the country that issued the scanned document. +The type of the scanned document. *** -### isoAlpha3CountryCode +### isoAlpha2CountryCode? -> **isoAlpha3CountryCode**: `string` +> `optional` **isoAlpha2CountryCode**: `string` -The 3-letter ISO code of the country that issued the scanned document. +The 2-letter ISO code of the country that issued the scanned document. *** -### isoNumericCountryCode +### isoAlpha3CountryCode? -> **isoNumericCountryCode**: `string` +> `optional` **isoAlpha3CountryCode**: `string` -The ISO numeric code of the country that issued the scanned document. +The 3-letter ISO code of the country that issued the scanned document. *** -### region +### isoNumericCountryCode? -> **region**: [`Region`](Region.md) \| `undefined` +> `optional` **isoNumericCountryCode**: `string` -The document region. +The ISO numeric code of the country that issued the scanned document. *** -### type +### region -> **type**: [`DocumentType`](DocumentType.md) \| `undefined` +> **region**: [`DocumentClassRegion`](DocumentClassRegion.md) \| `undefined` -The type of the scanned document. +The document region. diff --git a/packages/blinkid-wasm/docs/type-aliases/DocumentClassRegion.md b/packages/blinkid-wasm/docs/type-aliases/DocumentClassRegion.md new file mode 100644 index 00000000..31532e06 --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/DocumentClassRegion.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / DocumentClassRegion + +# Type Alias: DocumentClassRegion + +> **DocumentClassRegion** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`Region`](Region.md)\> + +The document region classification. diff --git a/packages/blinkid-wasm/docs/type-aliases/FieldType.md b/packages/blinkid-wasm/docs/type-aliases/FieldType.md index 33386fe0..3fddf843 100644 --- a/packages/blinkid-wasm/docs/type-aliases/FieldType.md +++ b/packages/blinkid-wasm/docs/type-aliases/FieldType.md @@ -6,6 +6,6 @@ # Type Alias: FieldType -> **FieldType** = `"localizedName"` \| `"additionalAddressInformation"` \| `"additionalNameInformation"` \| `"additionalOptionalAddressInformation"` \| `"additionalPersonalIdNumber"` \| `"address"` \| `"bloodType"` \| `"classEffectiveDate"` \| `"classExpiryDate"` \| `"conditions"` \| `"dateOfBirth"` \| `"dateOfExpiry"` \| `"dateOfIssue"` \| `"documentAdditionalNumber"` \| `"documentNumber"` \| `"documentOptionalAdditionalNumber"` \| `"employer"` \| `"endorsements"` \| `"fathersName"` \| `"firstName"` \| `"fullName"` \| `"issuingAuthority"` \| `"lastName"` \| `"licenceType"` \| `"maritalStatus"` \| `"mothersName"` \| `"mrz"` \| `"nationality"` \| `"personalIdNumber"` \| `"placeOfBirth"` \| `"profession"` \| `"race"` \| `"religion"` \| `"residentialStatus"` \| `"restrictions"` \| `"sex"` \| `"sponsor"` \| `"vehicleClass"` \| `"visaType"` \| `"dependentDateOfBirth"` \| `"dependentDocumentNumber"` \| `"dependentFullName"` \| `"dependentSex"` \| `"documentSubtype"` \| `"eligibilityCategory"` \| `"manufacturingYear"` \| `"remarks"` \| `"residencePermitType"` \| `"specificDocumentValidity"` \| `"vehicleOwner"` \| `"vehicleType"` \| `"nationalInsuranceNumber"` \| `"countryCode"` \| `"certificateNumber"` \| `"municipalityOfRegistration"` \| `"localityCode"` \| `"maidenName"` \| `"stateCode"` \| `"dateOfEntry"` \| `"municipalityCode"` \| `"pollingStationCode"` \| `"sectionCode"` \| `"registrationCenterCode"` \| `"stateName"` \| `"effectiveDate"` \| `"parentsLastName"` \| `"workRestriction"` \| `"parentsFirstName"` \| `"socialSecurityStatus"` \| `"legalStatus"` \| `"husbandName"` \| `"cardAccessNumber"` +> **FieldType** = `"localizedName"` \| `"additionalAddressInformation"` \| `"additionalNameInformation"` \| `"additionalOptionalAddressInformation"` \| `"additionalPersonalIdNumber"` \| `"address"` \| `"bloodType"` \| `"classEffectiveDate"` \| `"classExpiryDate"` \| `"conditions"` \| `"dateOfBirth"` \| `"dateOfExpiry"` \| `"dateOfIssue"` \| `"documentAdditionalNumber"` \| `"documentNumber"` \| `"documentOptionalAdditionalNumber"` \| `"employer"` \| `"endorsements"` \| `"fathersName"` \| `"firstName"` \| `"fullName"` \| `"issuingAuthority"` \| `"lastName"` \| `"licenceType"` \| `"maritalStatus"` \| `"mothersName"` \| `"mrz"` \| `"nationality"` \| `"personalIdNumber"` \| `"placeOfBirth"` \| `"profession"` \| `"race"` \| `"religion"` \| `"residentialStatus"` \| `"restrictions"` \| `"sex"` \| `"sponsor"` \| `"vehicleClass"` \| `"visaType"` \| `"dependentDateOfBirth"` \| `"dependentDocumentNumber"` \| `"dependentFullName"` \| `"dependentSex"` \| `"documentSubtype"` \| `"eligibilityCategory"` \| `"manufacturingYear"` \| `"remarks"` \| `"residencePermitType"` \| `"specificDocumentValidity"` \| `"vehicleOwner"` \| `"vehicleType"` \| `"nationalInsuranceNumber"` \| `"countryCode"` \| `"certificateNumber"` \| `"municipalityOfRegistration"` \| `"localityCode"` \| `"maidenName"` \| `"stateCode"` \| `"dateOfEntry"` \| `"municipalityCode"` \| `"pollingStationCode"` \| `"sectionCode"` \| `"registrationCenterCode"` \| `"stateName"` \| `"effectiveDate"` \| `"parentsLastName"` \| `"workRestriction"` \| `"parentsFirstName"` \| `"socialSecurityStatus"` \| `"legalStatus"` \| `"husbandName"` \| `"cardAccessNumber"` \| `"parentFullName"` \| `"ethnicity"` Represents all possible field types that can be extracted from the document. diff --git a/packages/blinkid-wasm/docs/type-aliases/InputImageAnalysisResult.md b/packages/blinkid-wasm/docs/type-aliases/InputImageAnalysisResult.md index cced71ab..6bf3c6bb 100644 --- a/packages/blinkid-wasm/docs/type-aliases/InputImageAnalysisResult.md +++ b/packages/blinkid-wasm/docs/type-aliases/InputImageAnalysisResult.md @@ -32,11 +32,14 @@ The status of blur detection *** -### documentClassInfo +### documentClassInfo? -> **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) +> `optional` **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) -Information about the document class +Information about the document class. + +Absent when the document could not be classified (for example, for +unsupported documents without any extracted class info). *** @@ -144,6 +147,19 @@ List of failed image extractions *** +### inputImageCropAnalysis + +> **inputImageCropAnalysis**: [`InputImageCropAnalysis`](InputImageCropAnalysis.md) + +Records the conclusion drawn about whether the input image was already +cropped and perspective-corrected. + +Only meaningful when the document capture module `cropType` was set to +`"unknown"` and the input source is `Photo`; otherwise always +`"not-available"`. + +*** + ### invalidCharacterFields > **invalidCharacterFields**: [`FieldType`](FieldType.md)[] @@ -190,3 +206,13 @@ The status of real ID detection > **scanningSide**: [`ScanningSide`](ScanningSide.md) Side of the document being scanned + +*** + +### vizExtractionType + +> **vizExtractionType**: [`VizExtractionType`](VizExtractionType.md) + +Type or availability status of VIZ extraction for this input image. + +The value is `"not-available"` until a document is scanned. diff --git a/packages/blinkid-wasm/docs/type-aliases/InputImageCropAnalysis.md b/packages/blinkid-wasm/docs/type-aliases/InputImageCropAnalysis.md new file mode 100644 index 00000000..77883bbf --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/InputImageCropAnalysis.md @@ -0,0 +1,30 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / InputImageCropAnalysis + +# Type Alias: InputImageCropAnalysis + +> **InputImageCropAnalysis** = `"not-cropped"` \| `"cropped"` \| `"not-available"` \| `"undetermined"` + +Describes the conclusion drawn about whether the input image was already +cropped and perspective-corrected prior to being submitted for recognition. + +This analysis is only performed when the document capture module `cropType` +is set to `"unknown"` and the input source is `Photo`. In all other cases the +value is `"not-available"`. + +- `"not-cropped"`: The first attempt (treating the image as pre-cropped) did + not yield a valid result, so the standard detection-and-perspective- + correction pipeline was executed as a fallback and succeeded. Conclusion: + the input image was likely not pre-cropped. +- `"cropped"`: The first attempt (treating the image as pre-cropped) yielded a + valid result without running the document detector. Conclusion: the input + image was likely already cropped and perspective-corrected. +- `"not-available"`: The two-attempt analysis was not performed because + `cropType` was `"cropped"` or `"not-cropped"`, or the input source was + `Video`. +- `"undetermined"`: The analysis does not allow for a conclusion to be drawn + because a valid stage could not be reached, neither considering the image + as cropped nor as not cropped. diff --git a/packages/blinkid-wasm/docs/type-aliases/InputImageCropType.md b/packages/blinkid-wasm/docs/type-aliases/InputImageCropType.md new file mode 100644 index 00000000..23ae3d71 --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/InputImageCropType.md @@ -0,0 +1,19 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / InputImageCropType + +# Type Alias: InputImageCropType + +> **InputImageCropType** = `"not-cropped"` \| `"unknown"` \| `"cropped"` + +Specifies whether the input image is already cropped, likely cropped, or not +cropped. + +- `"not-cropped"`: The image is considered raw and goes through document + detection and perspective correction. +- `"unknown"`: The image may already be cropped. The recognizer first tries + cropped processing and falls back to detection if extraction fails. +- `"cropped"`: The input image must contain only the cropped and + perspective-corrected document. diff --git a/packages/blinkid-wasm/docs/type-aliases/InputImageSelectionStrategy.md b/packages/blinkid-wasm/docs/type-aliases/InputImageSelectionStrategy.md new file mode 100644 index 00000000..cf022d4e --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/InputImageSelectionStrategy.md @@ -0,0 +1,28 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / InputImageSelectionStrategy + +# Type Alias: InputImageSelectionStrategy + +> **InputImageSelectionStrategy** = `"single-image"` \| `"optimize-for-speed"` \| `"balanced"` \| `"optimize-for-quality"` + +Represents the strategy used to select the best input image from a pool of +stable input images. + +Before selecting the best-quality image, a sequence of stable input images +must be collected. From this pool, the one with the highest quality is +selected. An input image is considered stable when the image analysis results +are consistent across a consecutive stream of input images. + +A larger pool size increases the likelihood of capturing a high-quality image +but may introduce a slight delay, as more stable input images need to be +collected. + +- `"single-image"`: Selects the first acceptable stable input image. +- `"optimize-for-speed"`: Faster processing, but may select a lower-quality + image because a smaller pool of stable input images is considered. +- `"default"`: Trade-off between quality and speed. +- `"optimize-for-quality"`: Slower processing in order to select a high-quality + input image, because a larger pool of stable input images is considered. diff --git a/packages/blinkid-wasm/docs/type-aliases/ProcessingStatus.md b/packages/blinkid-wasm/docs/type-aliases/ProcessingStatus.md index 251b2dbb..da2a6435 100644 --- a/packages/blinkid-wasm/docs/type-aliases/ProcessingStatus.md +++ b/packages/blinkid-wasm/docs/type-aliases/ProcessingStatus.md @@ -6,7 +6,7 @@ # Type Alias: ProcessingStatus -> **ProcessingStatus** = `"success"` \| `"detection-failed"` \| `"image-preprocessing-failed"` \| `"stability-test-failed"` \| `"scanning-wrong-side"` \| `"field-identification-failed"` \| `"mandatory-field-missing"` \| `"invalid-characters-found"` \| `"image-return-failed"` \| `"barcode-recognition-failed"` \| `"mrz-parsing-failed"` \| `"unsupported-document"` \| `"awaiting-other-side"` \| `"not-scanned"` \| `"barcode-detection-failed"` \| `"mrz-detection-failed"` \| `"input-image-not-focused"` \| `"canceled"` +> **ProcessingStatus** = `"success"` \| `"detection-failed"` \| `"image-preprocessing-failed"` \| `"stability-test-failed"` \| `"scanning-wrong-side"` \| `"field-identification-failed"` \| `"mandatory-field-missing"` \| `"invalid-characters-found"` \| `"image-return-failed"` \| `"barcode-recognition-failed"` \| `"mrz-parsing-failed"` \| `"unsupported-document"` \| `"awaiting-other-side"` \| `"not-scanned"` \| `"barcode-detection-failed"` \| `"mrz-detection-failed"` \| `"input-image-not-focused"` \| `"awaiting-more-stable-input-images"` \| `"canceled"` Represents the status of the document processing. @@ -45,4 +45,7 @@ stages of the recognition and extraction process. - `mrz-detection-failed` The MRZ was not found on the image. This processing status can only occur if document has mandatory MRZ. - `input-image-not-focused` Input image is not focused. +- `awaiting-more-stable-input-images` More stable input images are required to + proceed to data and image extraction. Available only for `Video` input + source. An input image is stable if it passed the stability test. - `canceled` Scanning was terminated by cancel delegate. diff --git a/packages/blinkid-wasm/docs/type-aliases/VizExtractionType.md b/packages/blinkid-wasm/docs/type-aliases/VizExtractionType.md new file mode 100644 index 00000000..5a4c9317 --- /dev/null +++ b/packages/blinkid-wasm/docs/type-aliases/VizExtractionType.md @@ -0,0 +1,17 @@ +[**@microblink/blinkid-wasm**](../README.md) + +*** + +[@microblink/blinkid-wasm](../README.md) / VizExtractionType + +# Type Alias: VizExtractionType + +> **VizExtractionType** = `"not-available"` \| `"segmentation"` \| `"templating"` \| `"unsupported"` + +Describes whether VIZ extraction was available for the processed input image +and which extraction path was selected. + +- `"not-available"`: VIZ extraction has not been evaluated yet. +- `"segmentation"`: VIZ data was extracted using segmentation. +- `"templating"`: VIZ data was extracted using a document template. +- `"unsupported"`: VIZ extraction is not supported for the processed image. diff --git a/packages/blinkid-wasm/docs/type-aliases/VizFieldsCompleteness.md b/packages/blinkid-wasm/docs/type-aliases/VizFieldsCompleteness.md index 88cd28ef..569d2e02 100644 --- a/packages/blinkid-wasm/docs/type-aliases/VizFieldsCompleteness.md +++ b/packages/blinkid-wasm/docs/type-aliases/VizFieldsCompleteness.md @@ -142,6 +142,12 @@ *** +### ethnicity? + +> `optional` **ethnicity**: [`StringResultCompleteness`](StringResultCompleteness.md) + +*** + ### fathersName? > `optional` **fathersName**: [`StringResultCompleteness`](StringResultCompleteness.md) diff --git a/packages/blinkid-wasm/docs/type-aliases/VizResult.md b/packages/blinkid-wasm/docs/type-aliases/VizResult.md index 595bcaf5..d7b2e7b7 100644 --- a/packages/blinkid-wasm/docs/type-aliases/VizResult.md +++ b/packages/blinkid-wasm/docs/type-aliases/VizResult.md @@ -196,6 +196,14 @@ The employer of the document owner *** +### ethnicity + +> **ethnicity**: [`StringResult`](StringResult.md) \| `null` + +The ethnicity of the document owner + +*** + ### fathersName > **fathersName**: [`StringResult`](StringResult.md) \| `null` diff --git a/packages/blinkid-wasm/docs/type-aliases/WasmSimdVariant.md b/packages/blinkid-wasm/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index a340e491..00000000 --- a/packages/blinkid-wasm/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-wasm**](../README.md) - -*** - -[@microblink/blinkid-wasm](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkid-wasm/docs/variables/wasmSimdVariants.md b/packages/blinkid-wasm/docs/variables/wasmSimdVariants.md deleted file mode 100644 index 9c17250f..00000000 --- a/packages/blinkid-wasm/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid-wasm**](../README.md) - -*** - -[@microblink/blinkid-wasm](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkid-wasm/docs/variables/wasmVariants.md b/packages/blinkid-wasm/docs/variables/wasmVariants.md index 271ba78a..b52bb760 100644 --- a/packages/blinkid-wasm/docs/variables/wasmVariants.md +++ b/packages/blinkid-wasm/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkid-wasm/package.json b/packages/blinkid-wasm/package.json index 2303065b..e60b5559 100644 --- a/packages/blinkid-wasm/package.json +++ b/packages/blinkid-wasm/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid-wasm", "private": true, - "version": "8000.0.1", + "version": "8001.0.0", "scripts": { "build": "tsc", "build:publish": "tsc", diff --git a/packages/blinkid-wasm/src/result/FieldType.ts b/packages/blinkid-wasm/src/result/FieldType.ts index fe8a08cf..6812b1f0 100644 --- a/packages/blinkid-wasm/src/result/FieldType.ts +++ b/packages/blinkid-wasm/src/result/FieldType.ts @@ -75,4 +75,6 @@ export type FieldType = | "socialSecurityStatus" | "legalStatus" | "husbandName" - | "cardAccessNumber"; + | "cardAccessNumber" + | "parentFullName" + | "ethnicity"; diff --git a/packages/blinkid-wasm/src/result/InputImageAnalysisResult.ts b/packages/blinkid-wasm/src/result/InputImageAnalysisResult.ts index 9b7ef047..7f1a9395 100644 --- a/packages/blinkid-wasm/src/result/InputImageAnalysisResult.ts +++ b/packages/blinkid-wasm/src/result/InputImageAnalysisResult.ts @@ -12,8 +12,10 @@ import { FieldType } from "./FieldType"; import { ImageAnalysisDetectionStatus } from "./ImageAnalysisDetectionStatus"; import { ImageAnalysisLightingStatus } from "./ImageAnalysisLightingStatus"; import { ImageExtractionType } from "./ImageExtractionType"; +import { InputImageCropAnalysis } from "./InputImageCropAnalysis"; import { ProcessingStatus } from "./ProcessingStatus"; import { ScanningSide } from "./ScanningSide"; +import { VizExtractionType } from "./VizExtractionType"; /** * Represents the results of processing and analyzing an input image. @@ -44,6 +46,13 @@ export type InputImageAnalysisResult = { /** List of failed image extractions */ imageExtractionFailures: ImageExtractionType[]; + /** + * Type or availability status of VIZ extraction for this input image. + * + * The value is `"not-available"` until a document is scanned. + */ + vizExtractionType: VizExtractionType; + /** Side of the document being scanned */ scanningSide: ScanningSide; @@ -53,8 +62,13 @@ export type InputImageAnalysisResult = { /** The location of the detected document within an image */ documentLocation?: Quadrilateral; - /** Information about the document class */ - documentClassInfo: DocumentClassInfo; + /** + * Information about the document class. + * + * Absent when the document could not be classified (for example, for + * unsupported documents without any extracted class info). + */ + documentClassInfo?: DocumentClassInfo; /** The status of blur detection */ blurDetectionStatus: ImageAnalysisDetectionStatus; @@ -91,4 +105,14 @@ export type InputImageAnalysisResult = { /** The rotation of the document in the frame */ documentRotation: DocumentRotation; + + /** + * Records the conclusion drawn about whether the input image was already + * cropped and perspective-corrected. + * + * Only meaningful when the document capture module `cropType` was set to + * `"unknown"` and the input source is `Photo`; otherwise always + * `"not-available"`. + */ + inputImageCropAnalysis: InputImageCropAnalysis; }; diff --git a/packages/blinkid-wasm/src/result/InputImageCropAnalysis.ts b/packages/blinkid-wasm/src/result/InputImageCropAnalysis.ts new file mode 100644 index 00000000..9cf62b9a --- /dev/null +++ b/packages/blinkid-wasm/src/result/InputImageCropAnalysis.ts @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +/** + * Describes the conclusion drawn about whether the input image was already + * cropped and perspective-corrected prior to being submitted for recognition. + * + * This analysis is only performed when the document capture module `cropType` + * is set to `"unknown"` and the input source is `Photo`. In all other cases the + * value is `"not-available"`. + * + * - `"not-cropped"`: The first attempt (treating the image as pre-cropped) did + * not yield a valid result, so the standard detection-and-perspective- + * correction pipeline was executed as a fallback and succeeded. Conclusion: + * the input image was likely not pre-cropped. + * - `"cropped"`: The first attempt (treating the image as pre-cropped) yielded a + * valid result without running the document detector. Conclusion: the input + * image was likely already cropped and perspective-corrected. + * - `"not-available"`: The two-attempt analysis was not performed because + * `cropType` was `"cropped"` or `"not-cropped"`, or the input source was + * `Video`. + * - `"undetermined"`: The analysis does not allow for a conclusion to be drawn + * because a valid stage could not be reached, neither considering the image + * as cropped nor as not cropped. + */ +export type InputImageCropAnalysis = + | "not-cropped" + | "cropped" + | "not-available" + | "undetermined"; diff --git a/packages/blinkid-wasm/src/result/ProcessingStatus.ts b/packages/blinkid-wasm/src/result/ProcessingStatus.ts index 48caa0bc..c7d9052e 100644 --- a/packages/blinkid-wasm/src/result/ProcessingStatus.ts +++ b/packages/blinkid-wasm/src/result/ProcessingStatus.ts @@ -40,6 +40,9 @@ * - `mrz-detection-failed` The MRZ was not found on the image. This processing * status can only occur if document has mandatory MRZ. * - `input-image-not-focused` Input image is not focused. + * - `awaiting-more-stable-input-images` More stable input images are required to + * proceed to data and image extraction. Available only for `Video` input + * source. An input image is stable if it passed the stability test. * - `canceled` Scanning was terminated by cancel delegate. */ export type ProcessingStatus = @@ -60,4 +63,5 @@ export type ProcessingStatus = | "barcode-detection-failed" | "mrz-detection-failed" | "input-image-not-focused" + | "awaiting-more-stable-input-images" | "canceled"; diff --git a/packages/blinkid-wasm/src/result/VizExtractionType.ts b/packages/blinkid-wasm/src/result/VizExtractionType.ts new file mode 100644 index 00000000..a0475f46 --- /dev/null +++ b/packages/blinkid-wasm/src/result/VizExtractionType.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +/** + * Describes whether VIZ extraction was available for the processed input image + * and which extraction path was selected. + * + * - `"not-available"`: VIZ extraction has not been evaluated yet. + * - `"segmentation"`: VIZ data was extracted using segmentation. + * - `"templating"`: VIZ data was extracted using a document template. + * - `"unsupported"`: VIZ extraction is not supported for the processed image. + */ +export type VizExtractionType = + "not-available" | "segmentation" | "templating" | "unsupported"; diff --git a/packages/blinkid-wasm/src/result/classinfo/DocumentClassInfo.ts b/packages/blinkid-wasm/src/result/classinfo/DocumentClassInfo.ts index a3010d30..f716dcb0 100644 --- a/packages/blinkid-wasm/src/result/classinfo/DocumentClassInfo.ts +++ b/packages/blinkid-wasm/src/result/classinfo/DocumentClassInfo.ts @@ -6,26 +6,50 @@ import { Country } from "./Country"; import { DocumentType } from "./DocumentType"; import { Region } from "./Region"; +/** + * A single document classification component. + * + * `id` is present when the classification maps to a value known at build time. + * `rawValue` always carries the raw classification token from the document + * knowledge database, including OTA-delivered classes unknown at build time. + */ +export type DocumentClassComponent = { + /** Strongly-typed identifier, when known at build time. */ + id?: TId; + + /** Raw classification value (document knowledge database format). */ + rawValue: string; +}; + +/** The document country classification. */ +export type DocumentClassCountry = DocumentClassComponent; + +/** The document region classification. */ +export type DocumentClassRegion = DocumentClassComponent; + +/** The document type classification. */ +export type DocumentClassDocumentType = DocumentClassComponent; + /** Represents the document class information. */ export type DocumentClassInfo = { /** The document country. */ - country: Country | undefined; + country: DocumentClassCountry | undefined; /** The document region. */ - region: Region | undefined; + region: DocumentClassRegion | undefined; /** The type of the scanned document. */ - type: DocumentType | undefined; + documentType: DocumentClassDocumentType | undefined; /** The name of the country that issued the scanned document. */ - countryName: string; + countryName?: string; /** The ISO numeric code of the country that issued the scanned document. */ - isoNumericCountryCode: string; + isoNumericCountryCode?: string; /** The 2-letter ISO code of the country that issued the scanned document. */ - isoAlpha2CountryCode: string; + isoAlpha2CountryCode?: string; /** The 3-letter ISO code of the country that issued the scanned document. */ - isoAlpha3CountryCode: string; + isoAlpha3CountryCode?: string; }; diff --git a/packages/blinkid-wasm/src/result/index.ts b/packages/blinkid-wasm/src/result/index.ts index 1278e85b..07c9bf87 100644 --- a/packages/blinkid-wasm/src/result/index.ts +++ b/packages/blinkid-wasm/src/result/index.ts @@ -15,6 +15,7 @@ export type * from "./ImageAnalysisDetectionStatus"; export type * from "./ImageAnalysisLightingStatus"; export type * from "./ImageExtractionType"; export type * from "./InputImageAnalysisResult"; +export type * from "./InputImageCropAnalysis"; export type * from "./mrz"; export type * from "./ProcessingStatus"; export type * from "./result-completeness"; @@ -23,3 +24,4 @@ export type * from "./ScanningStatus"; export type * from "./SingleSideScanningResult"; export type * from "./StringResult"; export type * from "./viz"; +export type * from "./VizExtractionType"; diff --git a/packages/blinkid-wasm/src/result/result-completeness.ts b/packages/blinkid-wasm/src/result/result-completeness.ts index fa2ab8ef..060975a4 100644 --- a/packages/blinkid-wasm/src/result/result-completeness.ts +++ b/packages/blinkid-wasm/src/result/result-completeness.ts @@ -184,6 +184,7 @@ export type VizFieldsCompleteness = { documentSubtype?: StringResultCompleteness; effectiveDate?: DateResultCompleteness; eligibilityCategory?: StringResultCompleteness; + ethnicity?: StringResultCompleteness; husbandName?: StringResultCompleteness; legalStatus?: StringResultCompleteness; localityCode?: StringResultCompleteness; diff --git a/packages/blinkid-wasm/src/result/viz/VizResult.ts b/packages/blinkid-wasm/src/result/viz/VizResult.ts index 66dd7207..8d453f3f 100644 --- a/packages/blinkid-wasm/src/result/viz/VizResult.ts +++ b/packages/blinkid-wasm/src/result/viz/VizResult.ts @@ -86,6 +86,8 @@ export type VizResult = { effectiveDate: DateResult | null; /** The eligibility category */ eligibilityCategory: StringResult | null; + /** The ethnicity of the document owner */ + ethnicity: StringResult | null; /** The husband's name of the document owner */ husbandName: StringResult | null; /** The legal status of the document owner */ @@ -107,6 +109,7 @@ export type VizResult = { | { firstName: StringResult | null; lastName: StringResult | null; + fullName: StringResult | null; }[] | null; /** The polling station code of the document owner */ diff --git a/packages/blinkid-wasm/src/session/BlinkIdScanningResult.ts b/packages/blinkid-wasm/src/session/BlinkIdScanningResult.ts index f7577502..64f9b845 100644 --- a/packages/blinkid-wasm/src/session/BlinkIdScanningResult.ts +++ b/packages/blinkid-wasm/src/session/BlinkIdScanningResult.ts @@ -14,8 +14,13 @@ import { DateResult, DriverLicenceDetailedInfo } from "../utils"; /** Represents the final complete result of the scanning process. */ export type BlinkIdScanningResult = { - /** The document class information */ - documentClassInfo: DocumentClassInfo; + /** + * The document class information. + * + * Absent when the document could not be classified (for example, for + * unsupported documents without any extracted class info). + */ + documentClassInfo?: DocumentClassInfo; /** Info on whether the data extracted from multiple sides matches */ dataMatchResult: DataMatchResult | undefined; @@ -69,6 +74,8 @@ export type BlinkIdScanningResult = { eligibilityCategory: StringResult | undefined; /** The employer of the document owner */ employer: StringResult | undefined; + /** The ethnicity of the document owner */ + ethnicity: StringResult | undefined; /** The father's name of the document owner */ fathersName: StringResult | undefined; /** The first name of the document owner */ @@ -106,6 +113,7 @@ export type BlinkIdScanningResult = { | { firstName: StringResult | undefined; lastName: StringResult | undefined; + fullName: StringResult | undefined; }[] | undefined; /** The personal identification number */ diff --git a/packages/blinkid-wasm/src/settings/RedactionMode.ts b/packages/blinkid-wasm/src/settings/RedactionMode.ts index 7e940bdc..599ea406 100644 --- a/packages/blinkid-wasm/src/settings/RedactionMode.ts +++ b/packages/blinkid-wasm/src/settings/RedactionMode.ts @@ -14,4 +14,4 @@ export type RedactionMode = /** Result fields containing sensitive data are removed from result. */ | "result-fields-only" /** This mode is combination of ImageOnly and ResultFieldsOnly modes. */ - | "full-result"; + | "full-result"; \ No newline at end of file diff --git a/packages/blinkid-wasm/src/settings/ScanningSettings.ts b/packages/blinkid-wasm/src/settings/ScanningSettings.ts index bfd27431..506ba453 100644 --- a/packages/blinkid-wasm/src/settings/ScanningSettings.ts +++ b/packages/blinkid-wasm/src/settings/ScanningSettings.ts @@ -4,6 +4,45 @@ import { SensitivityLevel } from "./SensitivityLevel"; +/** + * Specifies whether the input image is already cropped, likely cropped, or not + * cropped. + * + * - `"not-cropped"`: The image is considered raw and goes through document + * detection and perspective correction. + * - `"unknown"`: The image may already be cropped. The recognizer first tries + * cropped processing and falls back to detection if extraction fails. + * - `"cropped"`: The input image must contain only the cropped and + * perspective-corrected document. + */ +export type InputImageCropType = "not-cropped" | "unknown" | "cropped"; + +/** + * Represents the strategy used to select the best input image from a pool of + * stable input images. + * + * Before selecting the best-quality image, a sequence of stable input images + * must be collected. From this pool, the one with the highest quality is + * selected. An input image is considered stable when the image analysis results + * are consistent across a consecutive stream of input images. + * + * A larger pool size increases the likelihood of capturing a high-quality image + * but may introduce a slight delay, as more stable input images need to be + * collected. + * + * - `"single-image"`: Selects the first acceptable stable input image. + * - `"optimize-for-speed"`: Faster processing, but may select a lower-quality + * image because a smaller pool of stable input images is considered. + * - `"default"`: Trade-off between quality and speed. + * - `"optimize-for-quality"`: Slower processing in order to select a high-quality + * input image, because a larger pool of stable input images is considered. + */ +export type InputImageSelectionStrategy = + | "single-image" + | "optimize-for-speed" + | "balanced" + | "optimize-for-quality"; + /** * Settings for the document capture module. * @@ -23,20 +62,22 @@ import { SensitivityLevel } from "./SensitivityLevel"; */ export type DocumentCaptureModuleSettings = { /** - * Indicates whether the input image is already cropped and - * perspective-corrected. + * Specifies whether the input image is already cropped, likely cropped, or + * not cropped. * - * If `true`, the input image must consist solely of the already cropped and - * corrected document. + * When set to `"cropped"`, the input image must consist solely of the already + * cropped and corrected document. * - * Default value is `false`. + * When set to `"unknown"`, the recognizer first attempts extraction as if the + * image is cropped, then falls back to the regular localization pipeline if + * extraction fails. * - * This setting is not applicable to `Video` sources and will cause a - * validation error if set to true. + * `"cropped"` and `"unknown"` are applicable only to `Photo` sources and will + * cause a validation error for `Video`. * - * @default false + * @default "not-cropped" */ - inputImageCropped: boolean; + cropType: InputImageCropType; /** * Enables the scanning and processing of unsupported document types. * @@ -268,16 +309,32 @@ export type DocumentCaptureModuleSettings = { * detected, `ProcessingStatus` will be `ImagePreprocessingFailed` and hand * occlusion status will be reported in the `ProcessResult`. * - * Default behavior depends on `inputImageCropped`: + * Default behavior depends on `cropType`: * - * - `true`: Defaults to `false`. This setting is not applicable. Setting this - * to `true` while `inputImageCropped` is also `true` will result in a - * settings validation failure. - * - `false`: Defaults to `true`. Images with hand occlusion are rejected. + * - `"cropped"`: Defaults to `false`. This setting is not applicable. Setting + * this to `true` while `cropType` is `"cropped"` will result in a settings + * validation failure. + * - `"not-cropped"` and `"unknown"`: Defaults to `true`. Images with hand + * occlusion are rejected. * * @default true */ imageWithHandOcclusionRejected: boolean; + /** + * Represents the strategy used to select the best input image from a pool of + * stable input images. + * + * Available strategies are `"single-image"`, `"optimize-for-speed"`, + * `"default"`, and `"optimize-for-quality"`. The `"default"` strategy + * represents a trade-off between speed and quality, while + * `"optimize-for-speed"` and `"optimize-for-quality"` are optimized for speed + * and quality respectively. + * + * This setting is only applicable for the `Video` input image source. + * + * @default "default" + */ + inputImageSelectionStrategy: InputImageSelectionStrategy; }; /** @@ -417,6 +474,14 @@ export type BarcodeModuleSettings = { * @default false */ dataMatrixScanningEnabled: boolean; + /** + * Enables the scanning and processing of Aztec barcodes. + * + * This setting can be enabled only if `documentCaptureEnabled` is disabled. + * + * @default false + */ + aztecScanningEnabled: boolean; }; /** diff --git a/packages/blinkid-wasm/src/wasm-module.ts b/packages/blinkid-wasm/src/wasm-module.ts index d0cc7bcc..ff183795 100644 --- a/packages/blinkid-wasm/src/wasm-module.ts +++ b/packages/blinkid-wasm/src/wasm-module.ts @@ -12,10 +12,12 @@ import { DocumentClassInfo } from "./result"; * * @ignore */ -export interface BlinkIdWasmModule extends BlinkIdBindings, EmscriptenModule { +export interface BlinkIdWasmModule + extends BlinkIdBindings, EmscriptenModule, MemFSModule { getDefaultRedactionSettings: ( documentType: DocumentClassInfo, ) => RedactionSettings; + getRecognizerVersion: () => string; } /** @@ -27,3 +29,30 @@ export interface BlinkIdBindings extends WasmBindings< BlinkIdSessionSettingsInput, BlinkIdScanningSession > {} + +export interface MemFSModule { + FS?: { + mkdirTree?(path: string): void; + writeFile?(path: string, data: Uint8Array): void; + readdir?(path: string): string[]; + readFile?(path: string): Uint8Array; + stat?(path: string): { + size: number; + }; + }; + FS_createPath?: ( + parent: string, + path: string, + canRead: boolean, + canWrite: boolean, + ) => void; + FS_createDataFile?: ( + parent: string, + name: string, + data: Uint8Array, + canRead: boolean, + canWrite: boolean, + canOwn?: boolean, + ) => void; + FS_unlink?: (path: string) => void; +} diff --git a/packages/blinkid-worker/CHANGELOG.md b/packages/blinkid-worker/CHANGELOG.md index 5635aab5..db57b350 100644 --- a/packages/blinkid-worker/CHANGELOG.md +++ b/packages/blinkid-worker/CHANGELOG.md @@ -1,5 +1,20 @@ # @microblink/blinkid-worker +## 8001.0.0 + +### Major Changes + +- **Breaking:** `DocumentClassInfo.country`, `region`, and `type` are now wrapper objects (`{ id?, rawValue }`) instead of plain string values. `id` carries the strongly-typed kebab-case value (`Country` / `Region` / `DocumentType`) when the document class is known at build time; `rawValue` always carries the raw classification token from the document knowledge database, including OTA-delivered document classes unknown at build time. Update comparisons such as `documentClassInfo.country === "usa"` to `documentClassInfo.country?.id === "usa"`, and use `id ?? rawValue` when displaying values. This affects `redactionSettingsResolver`, `addDocumentClassFilter`, `addOnDocumentFilteredCallback`, and the `documentClassInfo` fields on process and scanning results. + - Added the `DocumentClassComponent`, `DocumentClassCountry`, `DocumentClassRegion`, and `DocumentClassDocumentType` types. + - `countryName` and the ISO country-code fields on `DocumentClassInfo` are unchanged (plain strings, empty when unknown), and `documentClassInfo` on results remains non-optional — an unclassified document still yields `undefined` components and empty strings. + - Updated the native bindings to the new document classification API (enum identifiers renamed to `CountryID` / `RegionID` / `DocumentTypeID`; document class construction now goes through the document knowledge database). Unrecognized classification strings passed to `getDefaultRedactionSettings` no longer abort the Wasm module; they are forwarded as raw values instead. +- Renamed `DocumentClassInfo.type` to `DocumentClassInfo.documentType` to align with other platforms. + - Migration: replace `documentClassInfo.type` with `documentClassInfo.documentType`. +- Updated dependencies + - @microblink/analytics@2.0.2 + - @microblink/blinkid-wasm@8001.0.0 + - @microblink/worker-common@1.0.5 + ## 8000.0.1 ### Patch Changes diff --git a/packages/blinkid-worker/README.md b/packages/blinkid-worker/README.md index 0cbb8352..7ea91d67 100644 --- a/packages/blinkid-worker/README.md +++ b/packages/blinkid-worker/README.md @@ -35,6 +35,59 @@ This package is bundled and distributed as part of the BlinkID browser SDK. If y - [`@microblink/blinkid`](https://www.npmjs.com/package/@microblink/blinkid) - [`@microblink/blinkid-core`](https://www.npmjs.com/package/@microblink/blinkid-core) +## OTA Document Support Updates + +The worker loads BlinkID document-support resources during initialization. +Every SDK build hosts a baseline under `resources/ota-resources/`, separate from +`BlinkIdModule.data`. + +The hosted directory contains `ota-resources.json` and the canonical files: + +```jsonc +{ + "resources": [ + { + "filename": "knowledge-database.zzip", + "version": "2.0.1", + "url": "knowledge-database.zzip", + }, + ], +} +``` + +Applications can override the hosted baseline and provider URLs: + +```ts +const initSettings = { + licenseKey: "your-license-key", + otaResources: { + resourcesLocation: "https://cdn.example.com/blinkid-ota", + otaResourceProviderUrl: "https://your-proxy.example.com/blinkid-ota", + }, +}; +``` + +The provider URL can point to Microblink's OTA resource provider or to a proxy +service owned by your application. A proxy service is useful when you need to +route OTA traffic through your own domain, network policy, or CORS +configuration. + +The provider or proxy must expose the OTA versions endpoint: + +```text +GET {otaResourceProviderUrl}/api/v1/versions?generic_version={recognizerVersion} +``` + +The worker obtains `generic_version` from the BlinkID recognizer and selects a +provider resource only when it is newer than the hosted version. It writes the +selected files under `/microblink/blinkid-ota` before SDK initialization. +Provider failures fall back to the hosted file unless `strict: true` is set. +Hosted baseline failures are always fatal. Set `checkForUpdates: false` to skip +the provider check while still loading the hosted baseline. + +The OTA provider URL is separate from `microblinkProxyUrl`, which is used for +Microblink license and analytics proxying. + ## Development To build the worker locally: diff --git a/packages/blinkid-worker/docs/README.md b/packages/blinkid-worker/docs/README.md index a85fa432..9a65ee89 100644 --- a/packages/blinkid-worker/docs/README.md +++ b/packages/blinkid-worker/docs/README.md @@ -11,6 +11,7 @@ ## Type Aliases - [BlinkIdCreateScanningSessionOptions](type-aliases/BlinkIdCreateScanningSessionOptions.md) +- [BlinkIdOtaResourceSettings](type-aliases/BlinkIdOtaResourceSettings.md) - [BlinkIdSessionErrorWithBuffer](type-aliases/BlinkIdSessionErrorWithBuffer.md) - [BlinkIdWorkerInitSettings](type-aliases/BlinkIdWorkerInitSettings.md) - [BlinkIdWorkerProxy](type-aliases/BlinkIdWorkerProxy.md) @@ -24,4 +25,5 @@ ## Variables +- [DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL](variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md) - [DEFAULT\_REDACTION\_SETTINGS](variables/DEFAULT_REDACTION_SETTINGS.md) diff --git a/packages/blinkid-worker/docs/type-aliases/BlinkIdOtaResourceSettings.md b/packages/blinkid-worker/docs/type-aliases/BlinkIdOtaResourceSettings.md new file mode 100644 index 00000000..727878f3 --- /dev/null +++ b/packages/blinkid-worker/docs/type-aliases/BlinkIdOtaResourceSettings.md @@ -0,0 +1,80 @@ +[**@microblink/blinkid-worker**](../README.md) + +*** + +[@microblink/blinkid-worker](../README.md) / BlinkIdOtaResourceSettings + +# Type Alias: BlinkIdOtaResourceSettings + +> **BlinkIdOtaResourceSettings** = `object` + +## Properties + +### checkForUpdates? + +> `optional` **checkForUpdates**: `boolean` + +Check the OTA provider for newer resources during SDK initialization. + +The hosted baseline resources are always loaded. + +#### Default Value + +`true` + +*** + +### otaResourceProviderUrl? + +> `optional` **otaResourceProviderUrl**: `string` + +Base URL of the OTA resource provider service. + +Use this when the SDK should ask an OTA API service for the current +resource download URLs. + +#### Default Value + +`"https://blinkid-ota.microblink.com"` + +*** + +### resourcesLocation? + +> `optional` **resourcesLocation**: `string` + +Base URL where the baseline OTA resource files are hosted. + +When omitted, the worker loads them from the SDK's +`resources/ota-resources` directory. + +*** + +### strict? + +> `optional` **strict**: `boolean` + +Fail SDK initialization when OTA resolve or download fails. + +#### Default Value + +`false` + +*** + +### timeoutMilis? + +> `optional` **timeoutMilis**: `number` + +#### Default + +```ts +20_000 +OTA resource download timeout. + +If strict is +``` + +#### True + +the SDK will throw TimeoutError DOMException on initialization if the download times out. diff --git a/packages/blinkid-worker/docs/type-aliases/BlinkIdWorkerInitSettings.md b/packages/blinkid-worker/docs/type-aliases/BlinkIdWorkerInitSettings.md index 89e41879..ca88bfb4 100644 --- a/packages/blinkid-worker/docs/type-aliases/BlinkIdWorkerInitSettings.md +++ b/packages/blinkid-worker/docs/type-aliases/BlinkIdWorkerInitSettings.md @@ -56,6 +56,17 @@ The URL of the Microblink proxy server. This proxy handles requests to Microblin *** +### otaResources? + +> `optional` **otaResources**: [`BlinkIdOtaResourceSettings`](BlinkIdOtaResourceSettings.md) + +Optional browser-only OTA resource settings. + +Hosted baseline resources are always loaded. Provider update checks are +enabled by default; set `checkForUpdates` to `false` to skip the provider. + +*** + ### resourcesLocation? > `optional` **resourcesLocation**: `string` diff --git a/packages/blinkid-worker/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md b/packages/blinkid-worker/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md new file mode 100644 index 00000000..b2b802e4 --- /dev/null +++ b/packages/blinkid-worker/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md @@ -0,0 +1,9 @@ +[**@microblink/blinkid-worker**](../README.md) + +*** + +[@microblink/blinkid-worker](../README.md) / DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL + +# Variable: DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL + +> `const` **DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL**: `"https://blinkid-ota.microblink.com"` = `"https://blinkid-ota.microblink.com"` diff --git a/packages/blinkid-worker/package.json b/packages/blinkid-worker/package.json index 5b4e7289..eece89cb 100644 --- a/packages/blinkid-worker/package.json +++ b/packages/blinkid-worker/package.json @@ -2,7 +2,7 @@ "name": "@microblink/blinkid-worker", "description": "Provides a worker which runs the BlinkID WebAssembly in separate thread", "private": true, - "version": "8000.0.1", + "version": "8001.0.0", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", "build:js": "vite build --mode ${VITE_BUILD_MODE:-production}", diff --git a/packages/blinkid-worker/src/BlinkIdWorker.initBlinkId.test.ts b/packages/blinkid-worker/src/BlinkIdWorker.initBlinkId.test.ts index 9f865bc3..e481c037 100644 --- a/packages/blinkid-worker/src/BlinkIdWorker.initBlinkId.test.ts +++ b/packages/blinkid-worker/src/BlinkIdWorker.initBlinkId.test.ts @@ -26,6 +26,7 @@ import { createLicenseUnlockResult } from "@microblink/test-utils/mocks/licensin import { createScanningSessionMock } from "@microblink/test-utils/mocks/scanningSession"; import { BlinkIdWasmModule } from "@microblink/blinkid-wasm"; import { type RedactionSettingsResolver } from "./BlinkIdWorker"; +import type { BlinkIdOtaResource } from "./otaResources"; const getCrossOriginWorkerURLMock = vi.fn(); const downloadResourceBufferMock = vi.fn(); @@ -33,12 +34,18 @@ const detectWasmFeaturesMock = vi.fn(); const validateLicenseProxyPermissionsMock = vi.fn(); const sanitizeProxyUrlsMock = vi.fn(); const obtainNewServerPermissionMock = vi.fn(); +const resolveBlinkIdOtaResourcesMock = vi.fn(); +const resolveBlinkIdOtaResourcesFromLocationMock = vi.fn(); +const selectBlinkIdOtaResourcesMock = vi.fn(); +const writeBlinkIdOtaResourcesToMemfsMock = vi.fn(); let workerEventListeners = new Map(); /** Deterministic values for stubbed globals and mock return shapes. */ const hostName = "example.com" as const; const userId = "test-user" as const; -const wasmVariant = "advanced-threads" as const; +const wasmVariant = "simd-threads" as const; +const otaResourcesPath = "/microblink/blinkid-ota" as const; +const defaultOtaProviderUrl = "https://blinkid-ota.microblink.com"; vi.mock("comlink", () => { const finalizer = Symbol("finalizer"); @@ -82,6 +89,16 @@ vi.mock("@microblink/worker-common/licencing", () => ({ obtainNewServerPermission: obtainNewServerPermissionMock, })); +vi.mock("./otaResources", () => ({ + BLINK_ID_OTA_RESOURCES_DIRECTORY: "ota-resources", + BLINK_ID_OTA_RESOURCES_PATH: otaResourcesPath, + resolveBlinkIdOtaResources: resolveBlinkIdOtaResourcesMock, + resolveBlinkIdOtaResourcesFromLocation: + resolveBlinkIdOtaResourcesFromLocationMock, + selectBlinkIdOtaResources: selectBlinkIdOtaResourcesMock, + writeBlinkIdOtaResourcesToMemfs: writeBlinkIdOtaResourcesToMemfsMock, +})); + let BlinkIdWorker: typeof import("./BlinkIdWorker").BlinkIdWorker; const getLatestWorkerListener = (type: string) => { @@ -122,6 +139,10 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { validateLicenseProxyPermissionsMock.mockReset(); sanitizeProxyUrlsMock.mockReset(); obtainNewServerPermissionMock.mockReset(); + resolveBlinkIdOtaResourcesMock.mockReset(); + resolveBlinkIdOtaResourcesFromLocationMock.mockReset(); + selectBlinkIdOtaResourcesMock.mockReset(); + writeBlinkIdOtaResourcesToMemfsMock.mockReset(); workerEventListeners = new Map(); @@ -157,6 +178,29 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { getCrossOriginWorkerURLMock.mockResolvedValue(factoryUrl); detectWasmFeaturesMock.mockResolvedValue(wasmVariant); downloadResourceBufferMock.mockResolvedValue(new ArrayBuffer(0)); + const providerResources = [ + { + filename: "template-database.zzip", + version: "1.0.1", + url: "provider-template-url", + }, + ]; + resolveBlinkIdOtaResourcesMock.mockResolvedValue(providerResources); + const hostedResources = [ + { + filename: "template-database.zzip", + version: "1.0.0", + url: "https://example.com/resources/ota-resources/template-database_1.0.zzip", + }, + ]; + resolveBlinkIdOtaResourcesFromLocationMock.mockResolvedValue( + hostedResources, + ); + selectBlinkIdOtaResourcesMock.mockImplementation( + (_hosted: BlinkIdOtaResource[], provider: BlinkIdOtaResource[]) => + provider, + ); + writeBlinkIdOtaResourcesToMemfsMock.mockResolvedValue(otaResourcesPath); sanitizeProxyUrlsMock.mockReturnValue({ ping: "https://proxy.example.com/ping", baltazar: "https://proxy.example.com/api/v2/status/check", @@ -238,6 +282,358 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { ); }); + it("loads OTA resources by default using the default provider URL and recognizer version", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + getRecognizerVersion: vi.fn(() => "2.3.4"), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId(baseInitSettings); + + expect(resolveBlinkIdOtaResourcesMock).toHaveBeenCalledWith({ + resourceProviderUrl: defaultOtaProviderUrl, + genericVersion: "2.3.4", + }); + expect(resolveBlinkIdOtaResourcesFromLocationMock).toHaveBeenCalledWith({ + resourcesLocation: "https://example.com/resources/ota-resources", + timeoutMilis: undefined, + }); + expect(writeBlinkIdOtaResourcesToMemfsMock).toHaveBeenCalledWith({ + module, + resources: [ + { + filename: "template-database.zzip", + version: "1.0.1", + url: "provider-template-url", + }, + ], + directory: otaResourcesPath, + fallbackOnError: true, + timeoutMilis: undefined, + }); + expect(spies.initializeSdk).toHaveBeenCalledOnce(); + }); + + it("writes the resources selected from hosted and provider manifests", async () => { + const selectedResources = [ + { + filename: "template-database.zzip", + version: "1.0.2", + url: "provider-template-url", + fallbackUrl: "hosted-template-url", + }, + ]; + selectBlinkIdOtaResourcesMock.mockReturnValue(selectedResources); + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId(baseInitSettings); + + expect(selectBlinkIdOtaResourcesMock).toHaveBeenCalledWith( + [ + { + filename: "template-database.zzip", + version: "1.0.0", + url: "https://example.com/resources/ota-resources/template-database_1.0.zzip", + }, + ], + [ + { + filename: "template-database.zzip", + version: "1.0.1", + url: "provider-template-url", + }, + ], + ); + expect(writeBlinkIdOtaResourcesToMemfsMock).toHaveBeenCalledWith({ + module, + resources: selectedResources, + directory: otaResourcesPath, + fallbackOnError: true, + timeoutMilis: undefined, + }); + expect(spies.initializeSdk).toHaveBeenCalledOnce(); + }); + + it("loads hosted resources without contacting the provider when checkForUpdates is false", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: false, + }, + }); + + expect(resolveBlinkIdOtaResourcesMock).not.toHaveBeenCalled(); + expect(selectBlinkIdOtaResourcesMock).not.toHaveBeenCalled(); + expect(resolveBlinkIdOtaResourcesFromLocationMock).toHaveBeenCalledWith({ + resourcesLocation: "https://example.com/resources/ota-resources", + timeoutMilis: undefined, + }); + expect(writeBlinkIdOtaResourcesToMemfsMock).toHaveBeenCalledWith({ + module, + resources: [ + { + filename: "template-database.zzip", + version: "1.0.0", + url: "https://example.com/resources/ota-resources/template-database_1.0.zzip", + }, + ], + directory: otaResourcesPath, + fallbackOnError: true, + timeoutMilis: undefined, + }); + expect(spies.initializeSdk).toHaveBeenCalledOnce(); + }); + + it("uses a custom hosted location and still checks the configured provider", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + resourcesLocation: " https://cdn.example.com/ota ", + otaResourceProviderUrl: "https://ota.example.com", + }, + }); + + expect(resolveBlinkIdOtaResourcesFromLocationMock).toHaveBeenCalledWith({ + resourcesLocation: "https://cdn.example.com/ota", + timeoutMilis: undefined, + }); + expect(resolveBlinkIdOtaResourcesMock).toHaveBeenCalledWith({ + resourceProviderUrl: "https://ota.example.com", + genericVersion: "1.0.0", + }); + expect(spies.getRecognizerVersion).toHaveBeenCalledOnce(); + expect(spies.initializeSdk).toHaveBeenCalledOnce(); + }); + + it("loads OTA resources before initializing the SDK", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + }, + }); + + expect(resolveBlinkIdOtaResourcesMock).toHaveBeenCalledWith({ + resourceProviderUrl: "https://ota.example.com", + genericVersion: "1.0.0", + }); + expect(writeBlinkIdOtaResourcesToMemfsMock).toHaveBeenCalledWith({ + module, + resources: [ + { + filename: "template-database.zzip", + version: "1.0.1", + url: "provider-template-url", + }, + ], + directory: otaResourcesPath, + fallbackOnError: true, + timeoutMilis: undefined, + }); + expect( + writeBlinkIdOtaResourcesToMemfsMock.mock.invocationCallOrder[0], + ).toBeLessThan(spies.initializeSdk.mock.invocationCallOrder[0]); + }); + + it("trims OTA provider URL and recognizer version before resolving resources", async () => { + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + getRecognizerVersion: vi.fn(() => " 2.3.4 "), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: " https://ota.example.com ", + }, + }); + + expect(resolveBlinkIdOtaResourcesMock).toHaveBeenCalledWith({ + resourceProviderUrl: "https://ota.example.com", + genericVersion: "2.3.4", + }); + }); + + it("uses the default OTA provider URL when the override is blank", async () => { + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: " ", + }, + }); + + expect(resolveBlinkIdOtaResourcesMock).toHaveBeenCalledWith({ + resourceProviderUrl: defaultOtaProviderUrl, + genericVersion: "1.0.0", + }); + }); + + it("falls back to hosted resources when recognizer version is blank", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + getRecognizerVersion: vi.fn(() => " "), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId(baseInitSettings); + + expect(resolveBlinkIdOtaResourcesMock).not.toHaveBeenCalled(); + expect(writeBlinkIdOtaResourcesToMemfsMock).toHaveBeenCalledWith({ + module, + resources: [ + { + filename: "template-database.zzip", + version: "1.0.0", + url: "https://example.com/resources/ota-resources/template-database_1.0.zzip", + }, + ], + directory: otaResourcesPath, + fallbackOnError: true, + timeoutMilis: undefined, + }); + expect(spies.initializeWithLicenseKey).toHaveBeenCalledOnce(); + expect(spies.initializeSdk).toHaveBeenCalledOnce(); + }); + + it("does not pass the loaded OTA resources path to created scanning sessions", async () => { + const session = createScanningSessionMock(); + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + createScanningSession: vi.fn(() => session), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + }, + }); + worker.createScanningSession({ inputImageSource: "photo" }); + + expect(spies.createScanningSession).toHaveBeenCalledWith( + { + inputImageSource: "photo", + }, + userId, + ); + }); + + it("falls back to hosted resources when the provider request fails", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + resolveBlinkIdOtaResourcesMock.mockRejectedValue(new Error("ota-failed")); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + }, + }); + + expect(writeBlinkIdOtaResourcesToMemfsMock).toHaveBeenCalledWith({ + module, + resources: [ + { + filename: "template-database.zzip", + version: "1.0.0", + url: "https://example.com/resources/ota-resources/template-database_1.0.zzip", + }, + ], + directory: otaResourcesPath, + fallbackOnError: true, + timeoutMilis: undefined, + }); + expect(spies.initializeWithLicenseKey).toHaveBeenCalledOnce(); + expect(spies.initializeSdk).toHaveBeenCalledOnce(); + }); + + it("fails initialization when the hosted manifest is unavailable", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + resolveBlinkIdOtaResourcesFromLocationMock.mockRejectedValue( + new Error("manifest-missing"), + ); + + const worker = new BlinkIdWorker(); + await expect(worker.initBlinkId(baseInitSettings)).rejects.toThrow( + "manifest-missing", + ); + + expect(resolveBlinkIdOtaResourcesMock).not.toHaveBeenCalled(); + expect(writeBlinkIdOtaResourcesToMemfsMock).not.toHaveBeenCalled(); + expect(spies.initializeWithLicenseKey).not.toHaveBeenCalled(); + expect(spies.initializeSdk).not.toHaveBeenCalled(); + }); + + it("fails initialization when strict OTA fails", async () => { + const { module, spies } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + }); + setWasmModuleMock(module); + resolveBlinkIdOtaResourcesMock.mockRejectedValue(new Error("ota-failed")); + + const worker = new BlinkIdWorker(); + await expect( + worker.initBlinkId({ + ...baseInitSettings, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + strict: true, + }, + }), + ).rejects.toThrow("ota-failed"); + + expect(spies.initializeWithLicenseKey).not.toHaveBeenCalled(); + expect(spies.initializeSdk).not.toHaveBeenCalled(); + }); + it("uses ping and baltazar proxies without flushing pinglets on successful init", async () => { const proxyUrl = "https://proxy.example.com"; const licenseUnlockResult = createLicenseUnlockResult({ @@ -663,9 +1059,9 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { it("resolves redaction settings in worker from cached class info before getResult", async () => { const documentClassInfo = { - country: "germany", + country: { id: "germany", rawValue: "GERMANY" }, region: undefined, - type: "id", + documentType: { id: "id", rawValue: "ID" }, countryName: "Germany", isoNumericCountryCode: "276", isoAlpha2CountryCode: "DE", @@ -712,9 +1108,9 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { it("keeps SDK default redaction when resolver returns undefined", async () => { const documentClassInfo = { - country: "germany", + country: { id: "germany", rawValue: "GERMANY" }, region: undefined, - type: "id", + documentType: { id: "id", rawValue: "ID" }, countryName: "Germany", isoNumericCountryCode: "276", isoAlpha2CountryCode: "DE", @@ -756,9 +1152,9 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { it("does not resolve redaction settings after reset clears cached class info", async () => { const documentClassInfo = { - country: "germany", + country: { id: "germany", rawValue: "GERMANY" }, region: undefined, - type: "id", + documentType: { id: "id", rawValue: "ID" }, countryName: "Germany", isoNumericCountryCode: "276", isoAlpha2CountryCode: "DE", @@ -804,9 +1200,9 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { it("rejects getResult when redaction resolver rejects", async () => { const documentClassInfo = { - country: "germany", + country: { id: "germany", rawValue: "GERMANY" }, region: undefined, - type: "id", + documentType: { id: "id", rawValue: "ID" }, countryName: "Germany", isoNumericCountryCode: "276", isoAlpha2CountryCode: "DE", @@ -845,9 +1241,9 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { it("getDefaultRedactionSettings is correctly passed to the resolver by the worker", async () => { const documentClassInfo = { - country: "germany", + country: { id: "germany", rawValue: "GERMANY" }, region: undefined, - type: "id", + documentType: { id: "id", rawValue: "ID" }, countryName: "Germany", isoNumericCountryCode: "276", isoAlpha2CountryCode: "DE", @@ -910,9 +1306,9 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { it("explicit undefined field in redactionSettingsResolver keeps the default", async () => { const documentClassInfo = { - country: "germany", + country: { id: "germany", rawValue: "GERMANY" }, region: undefined, - type: "id", + documentType: { id: "id", rawValue: "ID" }, countryName: "Germany", isoNumericCountryCode: "276", isoAlpha2CountryCode: "DE", @@ -972,6 +1368,138 @@ describe("BlinkIdWorker initBlinkId ping flush and proxy ordering", () => { }); }); + it("does not reproject cached class info after a detection-failed document swap", async () => { + const documentClassInfo = { + country: { id: "germany", rawValue: "GERMANY" }, + region: undefined, + documentType: { id: "id", rawValue: "ID" }, + countryName: "Germany", + isoNumericCountryCode: "276", + isoAlpha2CountryCode: "DE", + isoAlpha3CountryCode: "DEU", + } satisfies DocumentClassInfo; + const classifiedResult = { + inputImageAnalysisResult: { + processingStatus: "awaiting-other-side", + documentClassInfo, + documentRotation: "not-available", + }, + } as unknown as BlinkIdProcessResult; + const swapResult = { + inputImageAnalysisResult: { + processingStatus: "detection-failed", + documentClassInfo: undefined, + documentRotation: "not-available", + }, + } as unknown as BlinkIdProcessResult; + const session = createScanningSessionMock({ + process: vi + .fn() + .mockReturnValueOnce(classifiedResult) + .mockReturnValueOnce(swapResult), + }); + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + createScanningSession: vi.fn(() => session), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId(baseInitSettings); + + const proxySession = worker.createScanningSession(); + proxySession.process(createFakeImageData()); + const swapProcessResult = proxySession.process( + createFakeImageData(), + ) as BlinkIdProcessResult; + + expect( + swapProcessResult.inputImageAnalysisResult.documentClassInfo, + ).toBeUndefined(); + }); + + it("does not reproject cached class info after a stability-test-failed document swap", async () => { + const documentClassInfo = { + country: { id: "germany", rawValue: "GERMANY" }, + region: undefined, + documentType: { id: "id", rawValue: "ID" }, + countryName: "Germany", + isoNumericCountryCode: "276", + isoAlpha2CountryCode: "DE", + isoAlpha3CountryCode: "DEU", + } satisfies DocumentClassInfo; + const classifiedResult = { + inputImageAnalysisResult: { + processingStatus: "awaiting-other-side", + documentClassInfo, + documentRotation: "not-available", + }, + } as unknown as BlinkIdProcessResult; + const swapResult = { + inputImageAnalysisResult: { + processingStatus: "stability-test-failed", + documentClassInfo: undefined, + documentRotation: "not-available", + }, + } as unknown as BlinkIdProcessResult; + const session = createScanningSessionMock({ + process: vi + .fn() + .mockReturnValueOnce(classifiedResult) + .mockReturnValueOnce(swapResult), + }); + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + createScanningSession: vi.fn(() => session), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId(baseInitSettings); + + const proxySession = worker.createScanningSession(); + proxySession.process(createFakeImageData()); + const swapProcessResult = proxySession.process( + createFakeImageData(), + ) as BlinkIdProcessResult; + + expect( + swapProcessResult.inputImageAnalysisResult.documentClassInfo, + ).toBeUndefined(); + }); + + it("does not resolve redaction settings when documentClassInfo is absent", async () => { + const processResult = { + inputImageAnalysisResult: { + processingStatus: "detection-failed", + documentClassInfo: undefined, + documentRotation: "not-available", + }, + } as unknown as BlinkIdProcessResult; + const redactionSettingsResolver = vi.fn(); + const session = createScanningSessionMock({ + process: vi.fn(() => processResult), + getResult: vi.fn(), + }); + const { module } = createWasmModuleMock({ + initializeWithLicenseKey: vi.fn(() => createLicenseUnlockResult()), + createScanningSession: vi.fn(() => session), + }); + setWasmModuleMock(module); + + const worker = new BlinkIdWorker(); + await worker.initBlinkId(baseInitSettings); + + const proxySession = worker.createScanningSession(undefined, { + redactionSettingsResolver, + }); + proxySession.process(createFakeImageData()); + await proxySession.getResult(); + + expect(redactionSettingsResolver).not.toHaveBeenCalled(); + expect(session.getResult).toHaveBeenCalledWith(); + }); + it("reports reset failures as non-fatal pinglets", async () => { const session = createScanningSessionMock({ reset: vi.fn(() => { diff --git a/packages/blinkid-worker/src/BlinkIdWorker.test.ts b/packages/blinkid-worker/src/BlinkIdWorker.test.ts index cdd2c1e2..e9177aa2 100644 --- a/packages/blinkid-worker/src/BlinkIdWorker.test.ts +++ b/packages/blinkid-worker/src/BlinkIdWorker.test.ts @@ -32,6 +32,15 @@ vi.mock("comlink", () => { }; }); +vi.mock("./otaResources", () => ({ + BLINK_ID_OTA_RESOURCES_DIRECTORY: "ota-resources", + BLINK_ID_OTA_RESOURCES_PATH: "/microblink/blinkid-ota", + resolveBlinkIdOtaResources: vi.fn(), + resolveBlinkIdOtaResourcesFromLocation: vi.fn(), + selectBlinkIdOtaResources: vi.fn(), + writeBlinkIdOtaResourcesToMemfs: vi.fn(), +})); + let BlinkIdWorker: typeof import("./BlinkIdWorker").BlinkIdWorker; describe("BlinkIdWorker", () => { @@ -57,11 +66,12 @@ describe("BlinkIdWorker", () => { const worker = new BlinkIdWorker(); const pinglet: Ping = { schemaName: "ping.sdk.init.start", - schemaVersion: "1.3.0", + schemaVersion: "2.0.0", sessionNumber: 0, data: { product: "BlinkID", platform: "Emscripten", + // TODO: update this after pinglets schema is updated platformDetails: "advanced-threads", packageName: "example.com", userId: "test-user", diff --git a/packages/blinkid-worker/src/BlinkIdWorker.ts b/packages/blinkid-worker/src/BlinkIdWorker.ts index 2f91a363..3e4fb725 100644 --- a/packages/blinkid-worker/src/BlinkIdWorker.ts +++ b/packages/blinkid-worker/src/BlinkIdWorker.ts @@ -46,11 +46,93 @@ import { ServerPermissionError, } from "@microblink/worker-common/errors"; import { installWorkerCrashReporter } from "@microblink/worker-common/workerCrashReporter"; +import { + BLINK_ID_OTA_RESOURCES_DIRECTORY, + BLINK_ID_OTA_RESOURCES_PATH, + resolveBlinkIdOtaResources, + resolveBlinkIdOtaResourcesFromLocation, + selectBlinkIdOtaResources, + type BlinkIdOtaResource, + writeBlinkIdOtaResourcesToMemfs, +} from "./otaResources"; import { mergeRedactionSettings } from "./utils"; export type { DownloadProgress } from "@microblink/worker-common/downloadResourceBuffer"; const FRAME_TRANSFER_ERROR_NAME = "FrameTransferError"; +export const DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL = + "https://blinkid-ota.microblink.com"; + +export type BlinkIdOtaResourceSettings = { + /** + * Check the OTA provider for newer resources during SDK initialization. + * + * The hosted baseline resources are always loaded. + * + * @defaultValue `true` + */ + checkForUpdates?: boolean; + + /** + * Fail SDK initialization when OTA resolve or download fails. + * + * @defaultValue `false` + */ + strict?: boolean; + + /** + * Base URL of the OTA resource provider service. + * + * Use this when the SDK should ask an OTA API service for the current + * resource download URLs. + * + * @defaultValue `"https://blinkid-ota.microblink.com"` + */ + otaResourceProviderUrl?: string; + + /** + * Base URL where the baseline OTA resource files are hosted. + * + * When omitted, the worker loads them from the SDK's + * `resources/ota-resources` directory. + */ + resourcesLocation?: string; + + /** + * @default 20_000 + * OTA resource download timeout. + * + * If strict is @true the SDK will throw TimeoutError DOMException on initialization if the download times out. + */ + timeoutMilis?: number; +}; + +type ResolvedBlinkIdOtaResourceSettings = { + checkForUpdates: boolean; + strict: boolean; + otaResourceProviderUrl: string; + resourcesLocation?: string; +}; + +function resolveOtaSettings( + settings: BlinkIdOtaResourceSettings | undefined, +): ResolvedBlinkIdOtaResourceSettings { + const configuredResourcesLocation = settings?.resourcesLocation?.trim(); + const configuredOtaResourceProviderUrl = + settings?.otaResourceProviderUrl?.trim(); + const otaResourceProviderUrl = configuredOtaResourceProviderUrl + ? configuredOtaResourceProviderUrl + : DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL; + + return { + checkForUpdates: settings?.checkForUpdates ?? true, + otaResourceProviderUrl, + ...(configuredResourcesLocation + ? { resourcesLocation: configuredResourcesLocation } + : {}), + strict: settings?.strict ?? false, + }; +} /** * Default redaction settings used when @type {RedactionSettingsResolver} returns a partial/incomplete setting @@ -124,12 +206,6 @@ export class BlinkIdWorker { * Active scanning session created by this worker. */ #activeSession?: BlinkIdScanningSession; - /** - * The default session settings. - * - * Must be initialized when calling initBlinkId. - */ - #defaultSessionSettings!: BlinkIdSessionSettings; /** * The progress status callback. */ @@ -226,7 +302,7 @@ export class BlinkIdWorker { const wasmMemory = new WebAssembly.Memory({ initial: mbToWasmPages(initialMemory), maximum: mbToWasmPages(2048), - shared: wasmVariant === "advanced-threads", + shared: wasmVariant === "simd-threads", }); // Create progress trackers for each download @@ -334,7 +410,7 @@ export class BlinkIdWorker { */ this.#wasmModule = await createModule({ locateFile: (path) => { - return `${variantUrl}/${wasmVariant}/${path}`; + return `${variantUrl}/${path}`; }, onAbort: (what) => { if (!this.#wasmModule) { @@ -376,6 +452,9 @@ export class BlinkIdWorker { }, // pthreads build breaks without this: // "Failed to execute 'createObjectURL' on 'URL': Overload resolution failed." + // Emscripten 6.x's native `-sCROSS_ORIGIN` was evaluated as a replacement + // for this userspace cross-origin worker workaround but rejected: it is + // incompatible with our `-sDYNAMIC_EXECUTION=0` (no-eval) CSP hardening. mainScriptUrlOrBlob: crossOriginWorkerUrl, wasmBinary: preloadedWasm, getPreloadedPackage() { @@ -390,6 +469,74 @@ export class BlinkIdWorker { } } + async #prepareOtaResources( + settings: BlinkIdOtaResourceSettings | undefined, + resourcesLocation: string, + ): Promise { + const otaSettings = resolveOtaSettings(settings); + + if (!this.#wasmModule) { + throw new Error("Wasm module not loaded"); + } + + const hostedResourcesLocation = + otaSettings.resourcesLocation ?? + buildResourcePath(resourcesLocation, BLINK_ID_OTA_RESOURCES_DIRECTORY); + const hostedResources = await resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation: hostedResourcesLocation, + timeoutMilis: settings?.timeoutMilis, + }); + + let resources: BlinkIdOtaResource[] = hostedResources; + if (otaSettings.checkForUpdates) { + try { + const providerResources = await this.#resolveOtaResourcesFromProvider( + otaSettings.otaResourceProviderUrl, + settings?.timeoutMilis, + ); + resources = selectBlinkIdOtaResources( + hostedResources, + providerResources, + ); + } catch (error) { + if (otaSettings.strict) { + throw error; + } + + console.warn( + "BlinkID OTA provider resources were not loaded. Using hosted resources.", + error, + ); + } + } + + await writeBlinkIdOtaResourcesToMemfs({ + module: this.#wasmModule, + resources, + directory: BLINK_ID_OTA_RESOURCES_PATH, + fallbackOnError: !otaSettings.strict, + timeoutMilis: settings?.timeoutMilis, + }); + } + + async #resolveOtaResourcesFromProvider( + otaResourceProviderUrl: string, + timeoutMilis?: number, + ) { + const genericVersion = this.#wasmModule!.getRecognizerVersion().trim(); + if (!genericVersion) { + throw new Error( + "Loaded BlinkID Wasm module returned an empty recognizer version", + ); + } + + return resolveBlinkIdOtaResources({ + resourceProviderUrl: otaResourceProviderUrl, + genericVersion, + timeoutMilis: timeoutMilis, + }); + } + reportPinglet(pinglet: Ping) { if (!this.#wasmModule) { throw new Error("Cannot report pinglet: Wasm module not loaded"); @@ -451,6 +598,8 @@ export class BlinkIdWorker { throw new Error("Wasm module not loaded"); } + await this.#prepareOtaResources(settings.otaResources, resourcesPath); + // Initialize with license key const licenseUnlockResult = this.#wasmModule.initializeWithLicenseKey( settings.licenseKey, @@ -461,12 +610,13 @@ export class BlinkIdWorker { // Queue init pinglet before remote license check; flush only if init fails. this.reportPinglet({ schemaName: "ping.sdk.init.start", - schemaVersion: "1.3.0", + schemaVersion: "2.0.0", sessionNumber: 0, data: { packageName: self.location.hostname, platform: "Emscripten", - platformDetails: `${featureVariant}-${wasmVariant}`, + // TODO: update this after pinglets schema is updated + platformDetails: `${featureVariant}-${wasmVariant === "simd" ? "advanced" : "advanced-threads"}`, product: "BlinkID", userId: this.#userId, ...getMicroblinkProxyPingFlags( @@ -662,7 +812,7 @@ export class BlinkIdWorker { this.getDefaultRedactionSettings({ country: opts.country, region: opts.region, - type: opts.type, + documentType: opts.documentType, countryName: "", isoAlpha2CountryCode: "", isoAlpha3CountryCode: "", @@ -728,45 +878,54 @@ export class BlinkIdWorker { // not an error: processResult is ProcessResultWithBuffer } else { + const analysisResult = processResult.inputImageAnalysisResult; + /** - * As documentClassInfo is not an optional property, assume that `type` being - * defined means the whole object is defined and can be cached. + * When core signals a potential document swap - the document left + * the frame (`detection-failed`) or a newly presented document + * destabilised the classification window (`stability-test-failed`) - + * drop the cached classification and rotation so we don't reintroduce + * stale document data for the newly presented document. */ - if (processResult.inputImageAnalysisResult.documentClassInfo.type) { + if ( + analysisResult.processingStatus === "detection-failed" || + analysisResult.processingStatus === "stability-test-failed" + ) { + cachedClassInfo = null; + cachedRotation = null; + } + + /** + * documentClassInfo is optional; a defined `type` means the + * classification is available and can be cached. + */ + if (analysisResult.documentClassInfo?.documentType) { // cache class info for future use - cachedClassInfo = - processResult.inputImageAnalysisResult.documentClassInfo; + cachedClassInfo = analysisResult.documentClassInfo; } /** * Cache rotation, assume that rotation remains the same if document is not detected, * i.e. rotation is only updated when detection is successful. */ - if ( - processResult.inputImageAnalysisResult.documentRotation !== - "not-available" - ) { + if (analysisResult.documentRotation !== "not-available") { // cache rotation for future use - cachedRotation = - processResult.inputImageAnalysisResult.documentRotation; + cachedRotation = analysisResult.documentRotation; } if ( cachedClassInfo && - cachedClassInfo?.type !== - processResult.inputImageAnalysisResult.documentClassInfo.type + cachedClassInfo.documentType?.rawValue !== + analysisResult.documentClassInfo?.documentType?.rawValue ) { - processResult.inputImageAnalysisResult.documentClassInfo = - cachedClassInfo; + analysisResult.documentClassInfo = cachedClassInfo; } if ( cachedRotation && - cachedRotation !== - processResult.inputImageAnalysisResult.documentRotation + cachedRotation !== analysisResult.documentRotation ) { - processResult.inputImageAnalysisResult.documentRotation = - cachedRotation; + analysisResult.documentRotation = cachedRotation; } } @@ -1153,6 +1312,14 @@ export type BlinkIdWorkerInitSettings = { */ resourcesLocation?: string; + /** + * Optional browser-only OTA resource settings. + * + * Hosted baseline resources are always loaded. Provider update checks are + * enabled by default; set `checkForUpdates` to `false` to skip the provider. + */ + otaResources?: BlinkIdOtaResourceSettings; + /** * A unique identifier for the user/session. * Used for analytics and tracking purposes. diff --git a/packages/blinkid-worker/src/otaResources.test.ts b/packages/blinkid-worker/src/otaResources.test.ts new file mode 100644 index 00000000..5a3b7772 --- /dev/null +++ b/packages/blinkid-worker/src/otaResources.test.ts @@ -0,0 +1,587 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { describe, expect, it, vi } from "vitest"; +import { + BLINK_ID_OTA_RESOURCES_PATH, + inspectBlinkIdOtaMemfs, + normalizeOtaResourceProviderUrl, + resolveBlinkIdOtaResources, + resolveBlinkIdOtaResourcesFromLocation, + selectBlinkIdOtaResources, + writeBlinkIdOtaResourcesToMemfs, +} from "./otaResources"; + +const createJsonResponse = (body: unknown, ok = true) => + ({ + ok, + status: ok ? 200 : 500, + statusText: ok ? "OK" : "Server Error", + json: vi.fn().mockResolvedValue(body), + }) as unknown as Response; + +const createBufferResponse = (body: ArrayBuffer, ok = true) => + ({ + ok, + status: ok ? 200 : 404, + statusText: ok ? "OK" : "Not Found", + arrayBuffer: vi.fn().mockResolvedValue(body), + }) as unknown as Response; + +describe("BlinkID OTA resources", () => { + it("normalizes provider URLs that already include /api/v1/versions", () => { + expect( + normalizeOtaResourceProviderUrl( + "https://blinkid-ota.microblink.com/api/v1/versions", + ), + ).toBe("https://blinkid-ota.microblink.com"); + expect( + normalizeOtaResourceProviderUrl( + "https://blinkid-ota.microblink.com/api/v1/versions/", + ), + ).toBe("https://blinkid-ota.microblink.com"); + }); + + it("resolves OTA service response filename metadata", async () => { + const fetchFn = vi.fn().mockResolvedValue( + createJsonResponse({ + generic_version: "1.2.3", + embedder_engine: { + latest_version: "999.0.0", + db_file_name: "serialized_embedder_db.bin", + db_download_link: + "http://localhost:4443/download/storage/v1/b/ota-models/o/serialized_embedder_db%2F11111111-1111-4111-8111-111111111111%2F21111111-1111-4111-8111-111111111111%2Fserialized_embedder_db.bin?alt=media", + }, + template_engine: { + latest_version: "999.0.0", + db_file_name: "template_db.bin", + db_download_link: + "http://localhost:4443/download/storage/v1/b/ota-models/o/template_db%2F12222222-2222-4222-8222-222222222222%2F22222222-2222-4222-8222-222222222222%2Ftemplate_db.bin?alt=media", + }, + document_knowledge_engine: { + latest_version: "999.0.0", + db_file_name: "document_knowledge_db.bin", + db_download_link: + "http://localhost:4443/download/storage/v1/b/ota-models/o/document_knowledge_db%2F13333333-3333-4333-8333-333333333333%2F23333333-3333-4333-8333-333333333333%2Fdocument_knowledge_db.bin?alt=media", + }, + }), + ); + + await expect( + resolveBlinkIdOtaResources({ + resourceProviderUrl: "http://localhost:8080", + genericVersion: "1.2.3", + fetchFn, + }), + ).resolves.toEqual([ + { + filename: "serialized-embedder-database.bin", + version: "999.0.0", + url: "http://localhost:4443/download/storage/v1/b/ota-models/o/serialized_embedder_db%2F11111111-1111-4111-8111-111111111111%2F21111111-1111-4111-8111-111111111111%2Fserialized_embedder_db.bin?alt=media", + }, + { + filename: "template-database.zzip", + version: "999.0.0", + url: "http://localhost:4443/download/storage/v1/b/ota-models/o/template_db%2F12222222-2222-4222-8222-222222222222%2F22222222-2222-4222-8222-222222222222%2Ftemplate_db.bin?alt=media", + }, + { + filename: "knowledge-database.zzip", + version: "999.0.0", + url: "http://localhost:4443/download/storage/v1/b/ota-models/o/document_knowledge_db%2F13333333-3333-4333-8333-333333333333%2F23333333-3333-4333-8333-333333333333%2Fdocument_knowledge_db.bin?alt=media", + }, + ]); + + expect(fetchFn).toHaveBeenCalledWith( + "http://localhost:8080/api/v1/versions?generic_version=1.2.3", + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + expect.objectContaining({ signal: expect.any(AbortSignal) }), + ); + }); + + it("uses canonical filenames regardless of signed download URLs", async () => { + const fetchFn = vi.fn().mockResolvedValue( + createJsonResponse({ + generic_version: "1.2.3", + embedder_engine: { + latest_version: "999.0.0", + db_download_link: + "https://storage.example.com/download/o/resources%2Fembedder.bin?alt=media", + }, + template_engine: { + latest_version: "999.0.0", + db_download_link: + "https://storage.example.com/download/o/resources%2Ftemplate.zzip?alt=media", + }, + document_knowledge_engine: { + latest_version: "999.0.0", + db_download_link: + "https://storage.example.com/download/o/resources%2Fknowledge.zzip?alt=media", + }, + }), + ); + + await expect( + resolveBlinkIdOtaResources({ + resourceProviderUrl: "http://localhost:8080", + genericVersion: "1.2.3", + fetchFn, + }), + ).resolves.toEqual([ + { + filename: "serialized-embedder-database.bin", + version: "999.0.0", + url: "https://storage.example.com/download/o/resources%2Fembedder.bin?alt=media", + }, + { + filename: "template-database.zzip", + version: "999.0.0", + url: "https://storage.example.com/download/o/resources%2Ftemplate.zzip?alt=media", + }, + { + filename: "knowledge-database.zzip", + version: "999.0.0", + url: "https://storage.example.com/download/o/resources%2Fknowledge.zzip?alt=media", + }, + ]); + }); + + it("accepts provider URLs that already include /api/v1/versions", async () => { + const fetchFn = vi.fn().mockResolvedValue( + createJsonResponse({ + generic_version: "1.2.3", + embedder_engine: { + latest_version: "999.0.0", + db_download_link: "https://ota.example.com/embedder.bin", + }, + template_engine: { + latest_version: "999.0.0", + db_download_link: "https://ota.example.com/template.bin", + }, + document_knowledge_engine: { + latest_version: "999.0.0", + db_download_link: "https://ota.example.com/knowledge.bin", + }, + }), + ); + + await resolveBlinkIdOtaResources({ + resourceProviderUrl: "http://localhost:8080/api/v1/versions", + genericVersion: "1.2.3", + fetchFn, + }); + + expect(fetchFn).toHaveBeenCalledWith( + "http://localhost:8080/api/v1/versions?generic_version=1.2.3", + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + expect.objectContaining({ signal: expect.any(AbortSignal) }), + ); + }); + + it("resolves direct OTA resource URLs from a resources-location manifest", async () => { + const fetchFn = vi.fn().mockResolvedValue( + createJsonResponse({ + resources: [ + { + filename: "serialized-embedder-database.bin", + version: "1.0.12", + url: "serialized_embedder_db_1.12.bin", + }, + { + filename: "template-database.zzip", + version: "1.0.1", + url: "template-database_0.1.zzip", + }, + { + filename: "knowledge-database.zzip", + version: "2.0.1", + url: "https://assets.example.com/blinkid-ota/knowledge-database_0.1.zzip?token=1", + }, + ], + }), + ); + + await expect( + resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation: " https://cdn.example.com/blinkid-ota/ ", + fetchFn, + }), + ).resolves.toEqual([ + { + filename: "serialized-embedder-database.bin", + version: "1.0.12", + url: "https://cdn.example.com/blinkid-ota/serialized_embedder_db_1.12.bin", + }, + { + filename: "template-database.zzip", + version: "1.0.1", + url: "https://cdn.example.com/blinkid-ota/template-database_0.1.zzip", + }, + { + filename: "knowledge-database.zzip", + version: "2.0.1", + url: "https://assets.example.com/blinkid-ota/knowledge-database_0.1.zzip?token=1", + }, + ]); + + expect(fetchFn).toHaveBeenCalledWith( + "https://cdn.example.com/blinkid-ota/ota-resources.json", + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + expect.objectContaining({ signal: expect.any(AbortSignal) }), + ); + }); + + it("rejects failed direct OTA resources manifest requests", async () => { + const fetchFn = vi.fn().mockResolvedValue(createJsonResponse({}, false)); + + await expect( + resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation: "https://cdn.example.com/blinkid-ota/", + fetchFn, + }), + ).rejects.toThrow( + "Failed to resolve BlinkID OTA resources manifest: 500 Server Error", + ); + }); + + it("rejects malformed direct OTA resources manifests", async () => { + const fetchFn = vi.fn().mockResolvedValue(createJsonResponse({})); + + await expect( + resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation: "https://cdn.example.com/blinkid-ota/", + fetchFn, + }), + ).rejects.toThrow("BlinkID OTA resources manifest is missing resources"); + }); + + it("rejects direct OTA resources manifest entries without filenames", async () => { + const fetchFn = vi.fn().mockResolvedValue( + createJsonResponse({ + resources: [{ url: "template_database_0.1.bin" }], + }), + ); + + await expect( + resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation: "https://cdn.example.com/blinkid-ota/", + fetchFn, + }), + ).rejects.toThrow( + "BlinkID OTA resources manifest entry 0 is missing filename", + ); + }); + + it("rejects hosted OTA manifest entries without versions", async () => { + const fetchFn = vi.fn().mockResolvedValue( + createJsonResponse({ + resources: [{ filename: "template-database.zzip" }], + }), + ); + + await expect( + resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation: "https://cdn.example.com/resources/ota-resources", + fetchFn, + }), + ).rejects.toThrow( + "BlinkID OTA resources manifest entry 0 is missing version", + ); + }); + + it("selects only strictly newer provider resources", () => { + const hostedResources = [ + { + filename: "serialized-embedder-database.bin", + version: "1.0.14", + url: "hosted-embedder-url", + }, + { + filename: "template-database.zzip", + version: "1.0.1", + url: "hosted-template-url", + }, + { + filename: "knowledge-database.zzip", + version: "2.0.1", + url: "hosted-knowledge-url", + }, + ]; + const providerResources = [ + { + filename: "serialized-embedder-database.bin", + version: "1.0.14", + url: "provider-embedder-url", + }, + { + filename: "template-database.zzip", + version: "1.0.2", + url: "provider-template-url", + }, + { + filename: "knowledge-database.zzip", + version: "2.0.0", + url: "provider-knowledge-url", + }, + ]; + + expect( + selectBlinkIdOtaResources(hostedResources, providerResources), + ).toEqual([ + hostedResources[0], + { + ...providerResources[1], + fallbackUrl: hostedResources[1].url, + }, + hostedResources[2], + ]); + }); + + it("rejects malformed resource versions during provider selection", () => { + expect(() => + selectBlinkIdOtaResources( + [ + { + filename: "template-database.zzip", + version: "1.0.1", + url: "hosted", + }, + ], + [ + { + filename: "template-database.zzip", + version: "latest", + url: "provider", + }, + ], + ), + ).toThrow("Invalid BlinkID OTA resource version: latest"); + }); + + it("writes downloaded OTA resources into MEMFS", async () => { + const embedder = new Uint8Array([1]).buffer; + const template = new Uint8Array([2]).buffer; + const knowledge = new Uint8Array([3]).buffer; + const fetchFn = vi + .fn() + .mockResolvedValueOnce(createBufferResponse(embedder)) + .mockResolvedValueOnce(createBufferResponse(template)) + .mockResolvedValueOnce(createBufferResponse(knowledge)); + const module = { + FS: {}, + FS_createPath: vi.fn(), + FS_createDataFile: vi.fn(), + FS_unlink: vi.fn(), + }; + + await expect( + writeBlinkIdOtaResourcesToMemfs({ + module, + resources: [ + { filename: "embedder.bin", version: "1.0.0", url: "embedder-url" }, + { filename: "template.zzip", version: "1.0.0", url: "template-url" }, + { + filename: "knowledge.zzip", + version: "1.0.0", + url: "knowledge-url", + }, + ], + fetchFn, + }), + ).resolves.toBe(BLINK_ID_OTA_RESOURCES_PATH); + + expect(module.FS_createPath).toHaveBeenCalledWith( + "/", + "microblink", + true, + true, + ); + expect(module.FS_createPath).toHaveBeenCalledWith( + "/microblink", + "blinkid-ota", + true, + true, + ); + expect(module.FS_createDataFile).toHaveBeenCalledTimes(3); + expect(module.FS_createDataFile).toHaveBeenNthCalledWith( + 1, + BLINK_ID_OTA_RESOURCES_PATH, + "embedder.bin", + new Uint8Array(embedder), + true, + true, + true, + ); + }); + + it("reads back OTA resources from Emscripten FS for diagnostics", async () => { + const files = new Map(); + const template = new Uint8Array([0x50, 0x4b, 0x03, 0x04]).buffer; + const fetchFn = vi.fn().mockResolvedValue(createBufferResponse(template)); + const module = { + FS: { + mkdirTree: vi.fn(), + writeFile: vi.fn((path: string, data: Uint8Array) => { + files.set(path, data); + }), + readdir: vi.fn(() => [".", "..", "template.zzip"]), + readFile: vi.fn((path: string) => { + const file = files.get(path); + if (!file) { + throw new Error("ENOENT"); + } + return file; + }), + stat: vi.fn((path: string) => { + const file = files.get(path); + if (!file) { + throw new Error("ENOENT"); + } + return { size: file.byteLength }; + }), + }, + }; + const resources = [ + { filename: "template.zzip", version: "1.0.0", url: "template-url" }, + ]; + + await writeBlinkIdOtaResourcesToMemfs({ + module, + resources, + fetchFn, + }); + + expect( + inspectBlinkIdOtaMemfs({ + module, + resources, + }), + ).toEqual({ + directory: BLINK_ID_OTA_RESOURCES_PATH, + fsAvailable: true, + directoryEntries: [".", "..", "template.zzip"], + files: [ + { + filename: "template.zzip", + path: `${BLINK_ID_OTA_RESOURCES_PATH}/template.zzip`, + exists: true, + size: 4, + firstBytesHex: "50 4b 03 04", + firstBytesAscii: "PK..", + }, + ], + }); + }); + + it("falls back to the hosted file when a provider download fails", async () => { + const hosted = new Uint8Array([7]).buffer; + const fetchFn = vi + .fn() + .mockResolvedValueOnce(createBufferResponse(new ArrayBuffer(0), false)) + .mockResolvedValueOnce(createBufferResponse(hosted)); + const module = { + FS_createPath: vi.fn(), + FS_createDataFile: vi.fn(), + }; + const warnSpy = vi + .spyOn(console, "warn") + .mockImplementation(() => undefined); + + await writeBlinkIdOtaResourcesToMemfs({ + module, + resources: [ + { + filename: "template-database.zzip", + version: "1.0.2", + url: "provider-url", + fallbackUrl: "hosted-url", + }, + ], + fetchFn, + fallbackOnError: true, + }); + + expect(fetchFn).toHaveBeenNthCalledWith( + 1, + "provider-url", + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + expect.objectContaining({ signal: expect.any(AbortSignal) }), + ); + expect(fetchFn).toHaveBeenNthCalledWith( + 2, + "hosted-url", + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + expect.objectContaining({ signal: expect.any(AbortSignal) }), + ); + expect(module.FS_createDataFile).toHaveBeenCalledWith( + BLINK_ID_OTA_RESOURCES_PATH, + "template-database.zzip", + new Uint8Array(hosted), + true, + true, + true, + ); + + warnSpy.mockRestore(); + }); + + it("rejects malformed resolve responses", async () => { + const fetchFn = vi.fn().mockResolvedValue(createJsonResponse({})); + + await expect( + resolveBlinkIdOtaResources({ + resourceProviderUrl: "https://ota.example.com", + genericVersion: "1.0.0", + fetchFn, + }), + ).rejects.toThrow( + "BlinkID OTA response is missing embedder_engine.db_download_link", + ); + }); + + it("rejects empty OTA downloads before writing to MEMFS", async () => { + const fetchFn = vi + .fn() + .mockResolvedValue(createBufferResponse(new ArrayBuffer(0), true)); + const module = { + FS_createPath: vi.fn(), + FS_createDataFile: vi.fn(), + }; + + await expect( + writeBlinkIdOtaResourcesToMemfs({ + module, + resources: [ + { filename: "template.zzip", version: "1.0.0", url: "empty-url" }, + ], + fetchFn, + }), + ).rejects.toThrow( + "Failed to download BlinkID OTA resource template.zzip: empty response body", + ); + + expect(module.FS_createDataFile).not.toHaveBeenCalled(); + }); + + it("rejects failed downloads before writing the failed file", async () => { + const fetchFn = vi + .fn() + .mockResolvedValue(createBufferResponse(new ArrayBuffer(0), false)); + const module = { + FS_createPath: vi.fn(), + FS_createDataFile: vi.fn(), + }; + + await expect( + writeBlinkIdOtaResourcesToMemfs({ + module, + resources: [ + { filename: "template.zzip", version: "1.0.0", url: "bad-url" }, + ], + fetchFn, + }), + ).rejects.toThrow("Failed to download BlinkID OTA resource template.zzip"); + + expect(module.FS_createDataFile).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/blinkid-worker/src/otaResources.ts b/packages/blinkid-worker/src/otaResources.ts new file mode 100644 index 00000000..9f5bd748 --- /dev/null +++ b/packages/blinkid-worker/src/otaResources.ts @@ -0,0 +1,612 @@ +/** + * Copyright (c) 2026 Microblink Ltd. All rights reserved. + */ + +import { buildResourcePath } from "@microblink/worker-common/buildResourcePath"; +import { MemFSModule } from "@microblink/blinkid-wasm"; + +const OTA_VERSIONS_ENDPOINT = "api/v1/versions"; +const OTA_VERSIONS_PATH_SUFFIX = "/api/v1/versions"; + +export const BLINK_ID_OTA_RESOURCES_PATH = "/microblink/blinkid-ota"; +export const BLINK_ID_OTA_RESOURCES_DIRECTORY = "ota-resources"; +export const BLINK_ID_OTA_RESOURCES_MANIFEST_FILENAME = "ota-resources.json"; + +const OTA_RESOURCES_DOWNLOAD_TIMEOUT_MILIS = 20_000; + +export type BlinkIdOtaVersionsResponse = { + generic_version: string; + embedder_engine: BlinkIdOtaEngineEntry; + template_engine: BlinkIdOtaEngineEntry; + document_knowledge_engine: BlinkIdOtaEngineEntry; +}; + +type BlinkIdOtaEngineField = Exclude< + keyof BlinkIdOtaVersionsResponse, + "generic_version" +>; + +const OTA_RESOURCE_FILENAMES: Record = { + embedder_engine: "serialized-embedder-database.bin", + template_engine: "template-database.zzip", + document_knowledge_engine: "knowledge-database.zzip", +}; + +export type BlinkIdOtaEngineEntry = { + latest_version: string; + db_download_link: string; + db_file_name?: string; + db_filename?: string; + filename?: string; +}; + +export type BlinkIdOtaResource = { + filename: string; + url: string; + version: string; + fallbackUrl?: string; +}; + +export type BlinkIdOtaResourcesManifest = { + resources?: BlinkIdOtaResourcesManifestEntry[]; +}; + +export type BlinkIdOtaResourcesManifestEntry = { + filename?: string; + version?: string; + url?: string; +}; + +export type BlinkIdOtaMemfsInspection = { + directory: string; + fsAvailable: boolean; + directoryEntries?: string[]; + directoryError?: string; + files: BlinkIdOtaMemfsFileInspection[]; +}; + +export type BlinkIdOtaMemfsFileInspection = { + filename: string; + path: string; + exists: boolean; + size?: number; + firstBytesHex?: string; + firstBytesAscii?: string; + error?: string; +}; + +export type ResolveBlinkIdOtaResourcesParams = { + resourceProviderUrl: string; + genericVersion: string; + fetchFn?: typeof fetch; + timeoutMilis?: number; +}; + +export type ResolveBlinkIdOtaResourcesFromLocationParams = { + resourcesLocation: string; + fetchFn?: typeof fetch; + timeoutMilis?: number; +}; + +export type WriteBlinkIdOtaResourcesParams = { + module: MemFSModule; + resources: BlinkIdOtaResource[]; + directory?: string; + fetchFn?: typeof fetch; + fallbackOnError?: boolean; + timeoutMilis?: number; +}; + +export type InspectBlinkIdOtaMemfsParams = { + module: MemFSModule; + resources: BlinkIdOtaResource[]; + directory?: string; +}; + +export function normalizeOtaResourceProviderUrl( + resourceProviderUrl: string, +): string { + const trimmed = resourceProviderUrl.trim().replace(/\/+$/, ""); + + if (trimmed.endsWith(OTA_VERSIONS_PATH_SUFFIX)) { + return trimmed + .slice(0, -OTA_VERSIONS_PATH_SUFFIX.length) + .replace(/\/+$/, ""); + } + + return trimmed; +} + +export async function resolveBlinkIdOtaResourcesFromLocation({ + resourcesLocation, + fetchFn = fetch, + timeoutMilis = OTA_RESOURCES_DOWNLOAD_TIMEOUT_MILIS, +}: ResolveBlinkIdOtaResourcesFromLocationParams): Promise< + BlinkIdOtaResource[] +> { + const normalizedResourcesLocation = resourcesLocation + .trim() + .replace(/\/+$/, ""); + + if (!normalizedResourcesLocation) { + throw new Error("BlinkID OTA resources location is empty"); + } + + const manifestUrl = buildResourcePath( + normalizedResourcesLocation, + BLINK_ID_OTA_RESOURCES_MANIFEST_FILENAME, + ); + + const response = await fetchFn(manifestUrl, { + signal: createOtaDownloadTimeoutSignal(timeoutMilis), + }); + if (!response.ok) { + throw new Error( + `Failed to resolve BlinkID OTA resources manifest: ${response.status} ${response.statusText}`, + ); + } + + const payload = + (await response.json()) as Partial; + + if (!Array.isArray(payload.resources) || payload.resources.length === 0) { + throw new Error("BlinkID OTA resources manifest is missing resources"); + } + + return payload.resources.map((entry, index) => + resourceFromManifestEntry(entry, index, normalizedResourcesLocation), + ); +} + +export function selectBlinkIdOtaResources( + hostedResources: BlinkIdOtaResource[], + providerResources: BlinkIdOtaResource[], +): BlinkIdOtaResource[] { + const providerResourcesByFilename = new Map( + providerResources.map((resource) => [resource.filename, resource]), + ); + + return hostedResources.map((hostedResource) => { + const providerResource = providerResourcesByFilename.get( + hostedResource.filename, + ); + + if ( + !providerResource || + compareSemver(providerResource.version, hostedResource.version) <= 0 + ) { + return hostedResource; + } + + return { + ...providerResource, + fallbackUrl: hostedResource.url, + }; + }); +} + +export async function resolveBlinkIdOtaResources({ + resourceProviderUrl, + genericVersion, + fetchFn = fetch, + timeoutMilis = OTA_RESOURCES_DOWNLOAD_TIMEOUT_MILIS, +}: ResolveBlinkIdOtaResourcesParams): Promise { + const normalizedProviderUrl = + normalizeOtaResourceProviderUrl(resourceProviderUrl); + const url = new URL( + OTA_VERSIONS_ENDPOINT, + normalizedProviderUrl.endsWith("/") + ? normalizedProviderUrl + : `${normalizedProviderUrl}/`, + ); + url.searchParams.set("generic_version", genericVersion); + + const response = await fetchFn(url.toString(), { + signal: createOtaDownloadTimeoutSignal(timeoutMilis), + }); + + if (!response.ok) { + throw new Error( + `Failed to resolve BlinkID OTA resources: ${response.status} ${response.statusText}`, + ); + } + + const payload = + (await response.json()) as Partial; + + return [ + resourceFromEntry(payload.embedder_engine, "embedder_engine"), + resourceFromEntry(payload.template_engine, "template_engine"), + resourceFromEntry( + payload.document_knowledge_engine, + "document_knowledge_engine", + ), + ]; +} + +export async function writeBlinkIdOtaResourcesToMemfs({ + module, + resources, + directory = BLINK_ID_OTA_RESOURCES_PATH, + fetchFn = fetch, + fallbackOnError = false, + timeoutMilis = OTA_RESOURCES_DOWNLOAD_TIMEOUT_MILIS, +}: WriteBlinkIdOtaResourcesParams): Promise { + createDirectory(module, directory); + + await Promise.all( + resources.map(async (resource) => { + const buffer = await downloadOtaResource({ + resource, + fetchFn, + fallbackOnError, + timeoutMilis, + }); + const data = new Uint8Array(buffer); + writeFile(module, directory, resource.filename, data); + assertWrittenFileReadable( + module, + `${directory}/${resource.filename}`, + data.byteLength, + ); + }), + ); + + return directory; +} + +export function inspectBlinkIdOtaMemfs({ + module, + resources, + directory = BLINK_ID_OTA_RESOURCES_PATH, +}: InspectBlinkIdOtaMemfsParams): BlinkIdOtaMemfsInspection { + const inspection: BlinkIdOtaMemfsInspection = { + directory, + fsAvailable: Boolean(module.FS), + files: [], + }; + + if (!module.FS) { + inspection.directoryError = + "Loaded BlinkID Wasm module does not expose the Emscripten FS object"; + return inspection; + } + + try { + inspection.directoryEntries = module.FS.readdir?.(directory); + } catch (error) { + inspection.directoryError = errorToString(error); + } + + for (const resource of resources) { + const path = `${directory}/${resource.filename}`; + inspection.files.push(inspectMemfsFile(module, resource.filename, path)); + } + + return inspection; +} + +function createOtaDownloadTimeoutSignal( + timeoutMilis = OTA_RESOURCES_DOWNLOAD_TIMEOUT_MILIS, +) { + const controller = new AbortController(); + + setTimeout(() => { + controller.abort(new Error("Ota resource download failed")); + }, timeoutMilis); + + return controller.signal; +} + +async function downloadOtaResource({ + resource, + fetchFn, + fallbackOnError, + timeoutMilis, +}: { + resource: BlinkIdOtaResource; + fetchFn: typeof fetch; + fallbackOnError: boolean; + timeoutMilis: number; +}): Promise { + try { + return await fetchOtaResource( + resource.filename, + resource.url, + fetchFn, + timeoutMilis, + ); + } catch (error) { + if (!fallbackOnError || !resource.fallbackUrl) { + throw error; + } + + console.warn( + `BlinkID OTA provider resource ${resource.filename} was not loaded. Falling back to the hosted resource.`, + error, + ); + + return fetchOtaResource( + resource.filename, + resource.fallbackUrl, + fetchFn, + timeoutMilis, + ); + } +} + +async function fetchOtaResource( + filename: string, + url: string, + fetchFn: typeof fetch, + timeoutMilis: number, +): Promise { + const response = await fetchFn(url, { + signal: createOtaDownloadTimeoutSignal(timeoutMilis), + }); + + if (!response.ok) { + throw new Error( + `Failed to download BlinkID OTA resource ${filename}: ${response.status} ${response.statusText}`, + ); + } + + const buffer = await response.arrayBuffer(); + if (buffer.byteLength === 0) { + throw new Error( + `Failed to download BlinkID OTA resource ${filename}: empty response body`, + ); + } + + return buffer; +} + +function resourceFromEntry( + entry: Partial | undefined, + field: BlinkIdOtaEngineField, +): BlinkIdOtaResource { + const url = requireDownloadLink(entry, field); + + return { + filename: OTA_RESOURCE_FILENAMES[field], + version: requireVersion(entry, field), + url, + }; +} + +function resourceFromManifestEntry( + entry: Partial | undefined, + index: number, + resourcesLocation: string, +): BlinkIdOtaResource { + const filename = extractFilename(entry?.filename); + + if (!filename) { + throw new Error( + `BlinkID OTA resources manifest entry ${index} is missing filename`, + ); + } + + const version = entry?.version?.trim(); + if (!version) { + throw new Error( + `BlinkID OTA resources manifest entry ${index} is missing version`, + ); + } + + return { + filename, + version, + url: resolveManifestResourceUrl(resourcesLocation, filename, entry?.url), + }; +} + +function resolveManifestResourceUrl( + resourcesLocation: string, + filename: string, + url: string | undefined, +): string { + const trimmedUrl = url?.trim(); + + if (!trimmedUrl) { + return buildResourcePath(resourcesLocation, filename); + } + + if (isAbsoluteUrl(trimmedUrl)) { + return trimmedUrl; + } + + return buildResourcePath(resourcesLocation, trimmedUrl); +} + +function isAbsoluteUrl(value: string): boolean { + try { + new URL(value); + return true; + } catch { + return false; + } +} + +function requireDownloadLink( + entry: Partial | undefined, + field: BlinkIdOtaEngineField, +): string { + const downloadLink = entry?.db_download_link; + + if (!downloadLink) { + throw new Error( + `BlinkID OTA response is missing ${field}.db_download_link`, + ); + } + + return downloadLink; +} + +function requireVersion( + entry: Partial | undefined, + field: BlinkIdOtaEngineField, +): string { + const version = entry?.latest_version?.trim(); + + if (!version) { + throw new Error(`BlinkID OTA response is missing ${field}.latest_version`); + } + + return version; +} + +function compareSemver(left: string, right: string): number { + const leftParts = parseSemver(left); + const rightParts = parseSemver(right); + + for (let index = 0; index < leftParts.length; index++) { + const difference = leftParts[index] - rightParts[index]; + if (difference !== 0) { + return difference; + } + } + + return 0; +} + +function parseSemver(version: string): [number, number, number] { + const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version); + if (!match) { + throw new Error(`Invalid BlinkID OTA resource version: ${version}`); + } + + return [Number(match[1]), Number(match[2]), Number(match[3])]; +} + +function extractFilename(value: string | undefined): string | undefined { + const filename = value?.split(/[\\/]/).filter(Boolean).at(-1)?.trim(); + + if (!filename || filename === "." || filename === "..") { + return undefined; + } + + return filename; +} + +function createDirectory(module: MemFSModule, directory: string) { + if (typeof module.FS?.mkdirTree === "function") { + module.FS.mkdirTree(directory); + return; + } + + if (!module.FS_createPath) { + throw new Error( + "Loaded BlinkID Wasm module does not expose Emscripten filesystem path creation", + ); + } + + const segments = directory.split("/").filter(Boolean); + let parent = "/"; + + for (const segment of segments) { + try { + module.FS_createPath(parent, segment, true, true); + } catch { + // Emscripten throws if the path already exists. The bundled data package + // already creates /microblink, so existing path segments are expected. + } + parent = parent === "/" ? `/${segment}` : `${parent}/${segment}`; + } +} + +function writeFile( + module: MemFSModule, + directory: string, + filename: string, + data: Uint8Array, +) { + if (typeof module.FS?.writeFile === "function") { + module.FS.writeFile(`${directory}/${filename}`, data); + return; + } + + if (!module.FS_createDataFile) { + throw new Error( + "Loaded BlinkID Wasm module does not expose Emscripten filesystem file creation", + ); + } + + try { + module.FS_unlink?.(`${directory}/${filename}`); + } catch { + // Ignore missing files; unlink is only used to make repeated init attempts + // deterministic when the same worker survives a failed initialization. + } + + module.FS_createDataFile(directory, filename, data, true, true, true); +} + +function assertWrittenFileReadable( + module: MemFSModule, + path: string, + expectedByteLength: number, +) { + if (!module.FS?.readFile) { + return; + } + + const writtenData = module.FS.readFile(path); + if (writtenData.byteLength !== expectedByteLength) { + throw new Error( + `BlinkID OTA MEMFS write verification failed for ${path}: expected ${expectedByteLength} bytes, got ${writtenData.byteLength}`, + ); + } +} + +function inspectMemfsFile( + module: MemFSModule, + filename: string, + path: string, +): BlinkIdOtaMemfsFileInspection { + try { + const data = module.FS?.readFile?.(path); + const stat = module.FS?.stat?.(path); + + if (!data) { + return { + filename, + path, + exists: false, + error: "Emscripten FS.readFile is not available", + }; + } + + return { + filename, + path, + exists: true, + size: stat?.size ?? data.byteLength, + firstBytesHex: formatBytesAsHex(data), + firstBytesAscii: formatBytesAsAscii(data), + }; + } catch (error) { + return { + filename, + path, + exists: false, + error: errorToString(error), + }; + } +} + +function formatBytesAsHex(data: Uint8Array, length = 16): string { + return Array.from(data.slice(0, length), (byte) => + byte.toString(16).padStart(2, "0"), + ).join(" "); +} + +function formatBytesAsAscii(data: Uint8Array, length = 16): string { + return Array.from(data.slice(0, length), (byte) => + byte >= 32 && byte <= 126 ? String.fromCharCode(byte) : ".", + ).join(""); +} + +function errorToString(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} diff --git a/packages/blinkid/CHANGELOG.md b/packages/blinkid/CHANGELOG.md index b16daba7..a6b45400 100644 --- a/packages/blinkid/CHANGELOG.md +++ b/packages/blinkid/CHANGELOG.md @@ -1,5 +1,21 @@ # @microblink/blinkid +## 8001.0.0 + +### Major Changes + +- **Breaking:** `DocumentClassInfo.country`, `region`, and `type` are now wrapper objects (`{ id?, rawValue }`) instead of plain string values. `id` carries the strongly-typed kebab-case value (`Country` / `Region` / `DocumentType`) when the document class is known at build time; `rawValue` always carries the raw classification token from the document knowledge database, including OTA-delivered document classes unknown at build time. Update comparisons such as `documentClassInfo.country === "usa"` to `documentClassInfo.country?.id === "usa"`, and use `id ?? rawValue` when displaying values. This affects `redactionSettingsResolver`, `addDocumentClassFilter`, `addOnDocumentFilteredCallback`, and the `documentClassInfo` fields on process and scanning results. + - Added the `DocumentClassComponent`, `DocumentClassCountry`, `DocumentClassRegion`, and `DocumentClassDocumentType` types. + - `countryName` and the ISO country-code fields on `DocumentClassInfo` are unchanged (plain strings, empty when unknown), and `documentClassInfo` on results remains non-optional — an unclassified document still yields `undefined` components and empty strings. + - Updated the native bindings to the new document classification API (enum identifiers renamed to `CountryID` / `RegionID` / `DocumentTypeID`; document class construction now goes through the document knowledge database). Unrecognized classification strings passed to `getDefaultRedactionSettings` no longer abort the Wasm module; they are forwarded as raw values instead. +- Updated the minimum browser requirements after removing the non-SIMD `basic` Wasm build. The SDKs now require WebAssembly SIMD support: Chrome/Edge 91+, Firefox 89+, Safari/iOS Safari 16.4+, and Samsung Internet 16+. +- Adds browser OTA resource bootstrap through the `otaResources` initialization option. BlinkID always loads the hosted SDK baseline and checks the OTA provider for strictly newer resources by default; `checkForUpdates: false` skips only the provider check. +- Renamed `DocumentClassInfo.type` to `DocumentClassInfo.documentType` to align with other platforms. + - Migration: replace `documentClassInfo.type` with `documentClassInfo.documentType`. +- Updated dependencies + - @microblink/blinkid-core@8001.0.0 + - @microblink/blinkid-ux-manager@8001.0.0 + ## 8000.0.1 ### Patch Changes diff --git a/packages/blinkid/README.md b/packages/blinkid/README.md index 78a8664b..8a688f46 100644 --- a/packages/blinkid/README.md +++ b/packages/blinkid/README.md @@ -130,6 +130,74 @@ console.log(blinkid.cameraUi); await blinkid.destroy(); ``` +### OTA Document Support Updates + +BlinkID can download document-support resources over the air (OTA) during SDK +initialization. This lets Microblink add or update supported document resources +without requiring a new SDK release or an application package update. + +Every SDK build ships baseline OTA files under: + +```text +{resourcesLocation}/resources/ota-resources/ +``` + +The worker reads `ota-resources.json` from that directory and writes the listed +files into the BlinkID Wasm filesystem before SDK initialization. The manifest +records the version while preserving the canonical filenames required by +BlinkID: + +```jsonc +{ + "resources": [ + { + "filename": "serialized-embedder-database.bin", + "version": "1.0.14", + "url": "serialized-embedder-database.bin", + }, + ], +} +``` + +By default, BlinkID also asks `https://blinkid-ota.microblink.com` for compatible +updates and uses a provider file only when its semantic version is newer than +the hosted baseline. You can override the baseline and provider locations: + +```js +const blinkid = await createBlinkId({ + licenseKey: import.meta.env.VITE_LICENCE_KEY, + otaResources: { + resourcesLocation: "https://cdn.example.com/blinkid-ota", + otaResourceProviderUrl: "https://your-proxy.example.com/blinkid-ota", + }, +}); +``` + +The provider or proxy endpoint must serve the BlinkID OTA versions API: + +```text +GET {otaResourceProviderUrl}/api/v1/versions?generic_version={recognizerVersion} +``` + +The SDK supplies `generic_version` automatically from the BlinkID recognizer. +The OTA settings are separate from top-level `resourcesLocation`, which points +to the static SDK `resources` directory, and from `microblinkProxyUrl`, which +proxies licensing and analytics traffic. Provider failures fall back to the +hosted baseline unless `strict: true` is set. The hosted baseline is required +because these files are not embedded in `BlinkIdModule.data`. + +To load the hosted baseline without contacting the provider, set +`checkForUpdates: false`: + +```js +const blinkid = await createBlinkId({ + licenseKey: import.meta.env.VITE_LICENCE_KEY, + otaResources: { + checkForUpdates: false, + }, +}); +``` + ### UX Extraction Modes BlinkID chooses the feedback UI flow automatically from the session settings you @@ -139,8 +207,9 @@ modules. | UX extraction mode | When it is used | UI behavior | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | -| `full-document` | Default document capture flow, including document capture, MRZ, VIZ, mixed extraction, optional barcode, or multi-side extraction. | Shows standard document capture guidance. | +| `full-document` | Default document capture flow, including document capture, optional MRZ, VIZ, mixed extraction, optional barcode, or multi-side extraction. | Shows standard document capture guidance. | | `document-with-barcode` | `scanningMode: "single"` with `documentCaptureModule` enabled, `barcodeModule.presenceMandatory: true`, and both `mrzModule` and `vizModule` disabled. | Shows document capture guidance focused on scanning the barcode side of the document. | +| `document-with-mrz` | `scanningMode: "single"` with `documentCaptureModule` enabled, `mrzModule` enabled, and `mrzModule.presenceMandatory: true`. | Shows document capture guidance focused on scanning the MRZ side of the document. | | `barcode-only` | `documentCaptureModule`, `mrzModule`, and `vizModule` are disabled, while `barcodeModule` is enabled. | Shows barcode-only onboarding, help, and feedback copy. | Example: single-side document capture where barcode presence is mandatory: @@ -177,6 +246,8 @@ const blinkid = await createBlinkId({ The selected extraction mode controls feedback messages, onboarding content, help modal copy, and extraction-specific illustrations in the built-in UI. +### Redaction Settings + You can choose result redaction per classified document with `redactionSettingsResolver`: @@ -185,8 +256,8 @@ const blinkid = await createBlinkId({ licenseKey: import.meta.env.VITE_LICENCE_KEY, redactionSettingsResolver: async (documentClassInfo, getDefaultSettings) => { if ( - documentClassInfo.country === "germany" && - documentClassInfo.type === "id" + documentClassInfo.country?.id === "germany" && + documentClassInfo.type?.id === "id" ) { // Optionally use the SDK defaults for this document class. const defaults = await getDefaultSettings(documentClassInfo); @@ -213,7 +284,10 @@ const blinkid = await createBlinkId({ settings (`scanningSettings.anonymizationMode` and `scanningSettings.customDocumentAnonymizationSettings`). The resolver receives the classified `DocumentClassInfo`; return `RedactionSettings` for custom -redaction or `null` to keep the SDK defaults. See the +redaction or `null` to keep the SDK defaults. The `country`, `region`, and +`type` fields are wrapper objects: `id` holds the strongly-typed value when the +document class is known at build time, while `rawValue` always carries the raw +classification token (including OTA-delivered classes without an `id`). See the [BlinkID v8000 migration guide](https://docs.microblink.com/blinkid/migration-v8000) for the full migration. @@ -324,7 +398,8 @@ BlinkID proceeds to the final result. Return `true` to allow the document and const removeDocumentClassFilter = blinkid.addDocumentClassFilter( (documentClassInfo) => { return ( - documentClassInfo.country === "usa" && documentClassInfo.type === "dl" + documentClassInfo.country?.id === "usa" && + documentClassInfo.type?.id === "dl" ); }, ); @@ -364,6 +439,7 @@ Explore example applications in the GitHub repository for ready-to-run demos: - **[blinkid-simple](https://github.com/microblink/web-sdks/tree/main/apps/examples/blinkid-simple)**: Minimal integration with default UI. - **[blinkid-core-api](https://github.com/microblink/web-sdks/tree/main/apps/examples/blinkid-core-api)**: Low-level usage of the core API. - **[blinkid-advanced-setup](https://github.com/microblink/web-sdks/tree/main/apps/examples/blinkid-advanced-setup)**: Custom UI and advanced configuration. +- **[blinkid-ota-setup](https://github.com/microblink/web-sdks/tree/main/apps/examples/blinkid-ota-setup)**: Configuring over-the-air document-support resource updates. - **[blinkid-preload](https://github.com/microblink/web-sdks/tree/main/apps/examples/blinkid-preload)**: Preloading resources for faster startup. - **[blinkid-photo-upload](https://github.com/microblink/web-sdks/tree/main/apps/examples/blinkid-photo-upload)**: Uploading photos example. @@ -420,35 +496,30 @@ localhost. ### WebAssembly runtime -The SDK ships three Wasm build variants (`basic`, `advanced`, and -`advanced-threads`). The runtime selects the best supported variant automatically. - -#### `basic` - -Requires mutable globals, reference types, bulk memory, non-trapping float-to-int -conversions, and sign-extension operators. +The SDK ships two Wasm build variants (`simd` and `simd-threads`). The runtime +selects the best supported variant automatically. -#### `advanced` +#### `simd` -Requires all `basic` features plus +Requires the Emscripten-generated Wasm feature set used by the SDK plus [fixed-width SIMD](https://web-platform-dx.github.io/web-features-explorer/features/wasm-simd/). -#### `advanced-threads` +#### `simd-threads` -Requires all `advanced` features plus +Requires all `simd` features plus [Wasm threads and atomics](https://caniuse.com/wasm-threads). Multithreaded Wasm also requires cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin` and `Cross-Origin-Embedder-Policy: require-corp`). -Safari is excluded from `advanced-threads` even when it reports Wasm thread -support. Emscripten `advanced-threads` builds use pthreads that spawn workers +Safari is excluded from `simd-threads` even when it reports Wasm thread +support. Emscripten `simd-threads` builds use pthreads that spawn workers from inside a worker, and Safari historically lacked reliable nested worker support when Wasm threads shipped in Safari 16. There are also known Safari issues with shared memory in Emscripten pthread builds ([emscripten-core/emscripten#19374](https://github.com/emscripten-core/emscripten/issues/19374)). -For these reasons the runtime falls back to the single-threaded `advanced` -variant on Safari instead of loading `advanced-threads`. +For these reasons the runtime falls back to the single-threaded `simd` +variant on Safari instead of loading `simd-threads`. ### Firefox for Android diff --git a/packages/blinkid/docs/README.md b/packages/blinkid/docs/README.md index 12991efb..ad68efcb 100644 --- a/packages/blinkid/docs/README.md +++ b/packages/blinkid/docs/README.md @@ -18,6 +18,7 @@ ## Interfaces - [BlinkIdUxManager](interfaces/BlinkIdUxManager.md) +- [MemFSModule](interfaces/MemFSModule.md) - [PingBase](interfaces/PingBase.md) - [UADataValues](interfaces/UADataValues.md) - [WasmBindings](interfaces/WasmBindings.md) @@ -44,6 +45,7 @@ - [BlinkIdCreateScanningSessionOptions](type-aliases/BlinkIdCreateScanningSessionOptions.md) - [BlinkIdFrameProcessCallback](type-aliases/BlinkIdFrameProcessCallback.md) - [BlinkIdInitSettings](type-aliases/BlinkIdInitSettings.md) +- [BlinkIdOtaResourceSettings](type-aliases/BlinkIdOtaResourceSettings.md) - [BlinkIdPageTransitionKey](type-aliases/BlinkIdPageTransitionKey.md) - [BlinkIdProcessingError](type-aliases/BlinkIdProcessingError.md) - [BlinkIdProcessResult](type-aliases/BlinkIdProcessResult.md) @@ -101,8 +103,12 @@ - [DeviceScreenInfo](type-aliases/DeviceScreenInfo.md) - [DismountCallback](type-aliases/DismountCallback.md) - [DocumentCaptureModuleSettings](type-aliases/DocumentCaptureModuleSettings.md) +- [DocumentClassComponent](type-aliases/DocumentClassComponent.md) +- [DocumentClassCountry](type-aliases/DocumentClassCountry.md) +- [DocumentClassDocumentType](type-aliases/DocumentClassDocumentType.md) - [DocumentClassFilter](type-aliases/DocumentClassFilter.md) - [DocumentClassInfo](type-aliases/DocumentClassInfo.md) +- [DocumentClassRegion](type-aliases/DocumentClassRegion.md) - [DocumentImageColor](type-aliases/DocumentImageColor.md) - [DocumentNumberRedactionSettings](type-aliases/DocumentNumberRedactionSettings.md) - [DocumentOrientation](type-aliases/DocumentOrientation.md) @@ -131,6 +137,9 @@ - [ImageExtractionType](type-aliases/ImageExtractionType.md) - [ImageSource](type-aliases/ImageSource.md) - [InputImageAnalysisResult](type-aliases/InputImageAnalysisResult.md) +- [InputImageCropAnalysis](type-aliases/InputImageCropAnalysis.md) +- [InputImageCropType](type-aliases/InputImageCropType.md) +- [InputImageSelectionStrategy](type-aliases/InputImageSelectionStrategy.md) - [InputImageSource](type-aliases/InputImageSource.md) - [LicenseRequest](type-aliases/LicenseRequest.md) - [LicenseTokenState](type-aliases/LicenseTokenState.md) @@ -204,11 +213,11 @@ - [VideoFrameProcessorInitOptions](type-aliases/VideoFrameProcessorInitOptions.md) - [VideoResolutionName](type-aliases/VideoResolutionName.md) - [VizCompleteness](type-aliases/VizCompleteness.md) +- [VizExtractionType](type-aliases/VizExtractionType.md) - [VizFieldsCompleteness](type-aliases/VizFieldsCompleteness.md) - [VizModuleSettings](type-aliases/VizModuleSettings.md) - [VizResult](type-aliases/VizResult.md) - [WasmBuildType](type-aliases/WasmBuildType.md) -- [WasmSimdVariant](type-aliases/WasmSimdVariant.md) - [WasmVariant](type-aliases/WasmVariant.md) - [WorkerScanningSession](type-aliases/WorkerScanningSession.md) @@ -222,6 +231,7 @@ - [cameraManagerStore](variables/cameraManagerStore.md) - [cameraUiRefStore](variables/cameraUiRefStore.md) - [createBlinkIdUxManager](variables/createBlinkIdUxManager.md) +- [DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL](variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md) - [DEFAULT\_REDACTION\_SETTINGS](variables/DEFAULT_REDACTION_SETTINGS.md) - [defaultCameraManagerOptions](variables/defaultCameraManagerOptions.md) - [getBuffer](variables/getBuffer.md) @@ -232,7 +242,6 @@ - [resourceFileTypes](variables/resourceFileTypes.md) - [videoResolutions](variables/videoResolutions.md) - [wasmBuildTypes](variables/wasmBuildTypes.md) -- [wasmSimdVariants](variables/wasmSimdVariants.md) - [wasmVariants](variables/wasmVariants.md) ## Functions diff --git a/packages/blinkid/docs/classes/AnalyticService.md b/packages/blinkid/docs/classes/AnalyticService.md index e7f14f95..18b9dc9d 100644 --- a/packages/blinkid/docs/classes/AnalyticService.md +++ b/packages/blinkid/docs/classes/AnalyticService.md @@ -293,6 +293,16 @@ Provides a clean interface for tracking user interactions and events *** +### logInactivityTimeoutEvent() + +> **logInactivityTimeoutEvent**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logInfo() > **logInfo**(`logMessage`): `Promise`\<`void`\> @@ -329,6 +339,16 @@ Provides a clean interface for tracking user interactions and events *** +### logUnsupportedBarcodeTimeout() + +> **logUnsupportedBarcodeTimeout**(): `Promise`\<`void`\> + +#### Returns + +`Promise`\<`void`\> + +*** + ### logWarning() > **logWarning**(`logMessage`): `Promise`\<`void`\> diff --git a/packages/blinkid/docs/functions/createBlinkId.md b/packages/blinkid/docs/functions/createBlinkId.md index 2a39cc57..7b848582 100644 --- a/packages/blinkid/docs/functions/createBlinkId.md +++ b/packages/blinkid/docs/functions/createBlinkId.md @@ -75,6 +75,15 @@ The URL of the Microblink proxy server. This proxy handles requests to Microblin "https://your-proxy.example.com" ``` +#### otaResources? + +[`BlinkIdOtaResourceSettings`](../type-aliases/BlinkIdOtaResourceSettings.md) + +Optional browser-only OTA resource settings. + +Hosted baseline resources are always loaded. Provider update checks are +enabled by default; set `checkForUpdates` to `false` to skip the provider. + #### redactionSettingsResolver? [`RedactionSettingsResolver`](../type-aliases/RedactionSettingsResolver.md) @@ -142,7 +151,7 @@ Controls headless UX flow details such as timeout configuration. #### wasmVariant? -`"basic"` \| `"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid/docs/functions/loadBlinkIdCore.md b/packages/blinkid/docs/functions/loadBlinkIdCore.md index 3f9946ab..191a5c02 100644 --- a/packages/blinkid/docs/functions/loadBlinkIdCore.md +++ b/packages/blinkid/docs/functions/loadBlinkIdCore.md @@ -51,6 +51,15 @@ The URL of the Microblink proxy server. This proxy handles requests to Microblin "https://your-proxy.example.com" ``` +#### otaResources? + +[`BlinkIdOtaResourceSettings`](../type-aliases/BlinkIdOtaResourceSettings.md) + +Optional browser-only OTA resource settings. + +Hosted baseline resources are always loaded. Provider update checks are +enabled by default; set `checkForUpdates` to `false` to skip the provider. + #### resourcesLocation? `string` @@ -74,7 +83,7 @@ Used for analytics and tracking purposes. #### wasmVariant? -`"basic"` \| `"advanced"` \| `"advanced-threads"` +`"simd"` \| `"simd-threads"` The WebAssembly module variant to use. Different variants may offer different performance/size tradeoffs. diff --git a/packages/blinkid/docs/interfaces/BlinkIdUxManager.md b/packages/blinkid/docs/interfaces/BlinkIdUxManager.md index 25a9993e..859ffbdd 100644 --- a/packages/blinkid/docs/interfaces/BlinkIdUxManager.md +++ b/packages/blinkid/docs/interfaces/BlinkIdUxManager.md @@ -189,7 +189,7 @@ callback. ```ts const cleanup = manager.addDocumentClassFilter((docClassInfo) => { - return docClassInfo.country === 'usa'; + return docClassInfo.country?.id === 'usa'; }); // Later, to remove the callback: diff --git a/packages/blinkid/docs/interfaces/MemFSModule.md b/packages/blinkid/docs/interfaces/MemFSModule.md new file mode 100644 index 00000000..07ec4e99 --- /dev/null +++ b/packages/blinkid/docs/interfaces/MemFSModule.md @@ -0,0 +1,171 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / MemFSModule + +# Interface: MemFSModule + +## Properties + +### FS? + +> `optional` **FS**: `object` + +#### mkdirTree()? + +> `optional` **mkdirTree**(`path`): `void` + +##### Parameters + +###### path + +`string` + +##### Returns + +`void` + +#### readdir()? + +> `optional` **readdir**(`path`): `string`[] + +##### Parameters + +###### path + +`string` + +##### Returns + +`string`[] + +#### readFile()? + +> `optional` **readFile**(`path`): `Uint8Array` + +##### Parameters + +###### path + +`string` + +##### Returns + +`Uint8Array` + +#### stat()? + +> `optional` **stat**(`path`): `object` + +##### Parameters + +###### path + +`string` + +##### Returns + +`object` + +###### size + +> **size**: `number` + +#### writeFile()? + +> `optional` **writeFile**(`path`, `data`): `void` + +##### Parameters + +###### path + +`string` + +###### data + +`Uint8Array` + +##### Returns + +`void` + +*** + +### FS\_createDataFile()? + +> `optional` **FS\_createDataFile**: (`parent`, `name`, `data`, `canRead`, `canWrite`, `canOwn?`) => `void` + +#### Parameters + +##### parent + +`string` + +##### name + +`string` + +##### data + +`Uint8Array` + +##### canRead + +`boolean` + +##### canWrite + +`boolean` + +##### canOwn? + +`boolean` + +#### Returns + +`void` + +*** + +### FS\_createPath()? + +> `optional` **FS\_createPath**: (`parent`, `path`, `canRead`, `canWrite`) => `void` + +#### Parameters + +##### parent + +`string` + +##### path + +`string` + +##### canRead + +`boolean` + +##### canWrite + +`boolean` + +#### Returns + +`void` + +*** + +### FS\_unlink()? + +> `optional` **FS\_unlink**: (`path`) => `void` + +#### Parameters + +##### path + +`string` + +#### Returns + +`void` diff --git a/packages/blinkid/docs/type-aliases/BarcodeModuleSettings.md b/packages/blinkid/docs/type-aliases/BarcodeModuleSettings.md index 7445eb2a..0fec3442 100644 --- a/packages/blinkid/docs/type-aliases/BarcodeModuleSettings.md +++ b/packages/blinkid/docs/type-aliases/BarcodeModuleSettings.md @@ -25,6 +25,22 @@ extract barcode immediately at the initialization. ## Properties +### aztecScanningEnabled + +> **aztecScanningEnabled**: `boolean` + +Enables the scanning and processing of Aztec barcodes. + +This setting can be enabled only if `documentCaptureEnabled` is disabled. + +#### Default + +```ts +false +``` + +*** + ### barcodeImageReturnEnabled > **barcodeImageReturnEnabled**: `boolean` diff --git a/packages/blinkid/docs/type-aliases/BlinkIdOtaResourceSettings.md b/packages/blinkid/docs/type-aliases/BlinkIdOtaResourceSettings.md new file mode 100644 index 00000000..ef927c90 --- /dev/null +++ b/packages/blinkid/docs/type-aliases/BlinkIdOtaResourceSettings.md @@ -0,0 +1,80 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / BlinkIdOtaResourceSettings + +# Type Alias: BlinkIdOtaResourceSettings + +> **BlinkIdOtaResourceSettings** = `object` + +## Properties + +### checkForUpdates? + +> `optional` **checkForUpdates**: `boolean` + +Check the OTA provider for newer resources during SDK initialization. + +The hosted baseline resources are always loaded. + +#### Default Value + +`true` + +*** + +### otaResourceProviderUrl? + +> `optional` **otaResourceProviderUrl**: `string` + +Base URL of the OTA resource provider service. + +Use this when the SDK should ask an OTA API service for the current +resource download URLs. + +#### Default Value + +`"https://blinkid-ota.microblink.com"` + +*** + +### resourcesLocation? + +> `optional` **resourcesLocation**: `string` + +Base URL where the baseline OTA resource files are hosted. + +When omitted, the worker loads them from the SDK's +`resources/ota-resources` directory. + +*** + +### strict? + +> `optional` **strict**: `boolean` + +Fail SDK initialization when OTA resolve or download fails. + +#### Default Value + +`false` + +*** + +### timeoutMilis? + +> `optional` **timeoutMilis**: `number` + +#### Default + +```ts +20_000 +OTA resource download timeout. + +If strict is +``` + +#### True + +the SDK will throw TimeoutError DOMException on initialization if the download times out. diff --git a/packages/blinkid/docs/type-aliases/BlinkIdProcessingError.md b/packages/blinkid/docs/type-aliases/BlinkIdProcessingError.md index 8e3ceb94..892905ec 100644 --- a/packages/blinkid/docs/type-aliases/BlinkIdProcessingError.md +++ b/packages/blinkid/docs/type-aliases/BlinkIdProcessingError.md @@ -6,7 +6,7 @@ # Type Alias: BlinkIdProcessingError -> **BlinkIdProcessingError** = `"timeout"` \| `"unsupported_document"` \| `"result_retrieval_failed"` \| `"unknown"` +> **BlinkIdProcessingError** = `"inactivity_timeout"` \| `"scan_step_timeout"` \| `"unsupported_document"` \| `"result_retrieval_failed"` \| `"unknown"` BlinkID processing error. These errors are usually unrecoverable and require the user to retry the scanning process. diff --git a/packages/blinkid/docs/type-aliases/BlinkIdScanningResult.md b/packages/blinkid/docs/type-aliases/BlinkIdScanningResult.md index 274f4b8e..5ae39700 100644 --- a/packages/blinkid/docs/type-aliases/BlinkIdScanningResult.md +++ b/packages/blinkid/docs/type-aliases/BlinkIdScanningResult.md @@ -157,11 +157,14 @@ The additional number of the document *** -### documentClassInfo +### documentClassInfo? -> **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) +> `optional` **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) -The document class information +The document class information. + +Absent when the document could not be classified (for example, for +unsupported documents without any extracted class info). *** @@ -229,6 +232,14 @@ The employer of the document owner *** +### ethnicity + +> **ethnicity**: [`StringResult`](StringResult.md) \| `undefined` + +The ethnicity of the document owner + +*** + ### faceImageScanningSide > **faceImageScanningSide**: [`ScanningSide`](ScanningSide.md) \| `undefined` diff --git a/packages/blinkid/docs/type-aliases/BlinkIdWorkerInitSettings.md b/packages/blinkid/docs/type-aliases/BlinkIdWorkerInitSettings.md index 19c15895..d77ecfd7 100644 --- a/packages/blinkid/docs/type-aliases/BlinkIdWorkerInitSettings.md +++ b/packages/blinkid/docs/type-aliases/BlinkIdWorkerInitSettings.md @@ -56,6 +56,17 @@ The URL of the Microblink proxy server. This proxy handles requests to Microblin *** +### otaResources? + +> `optional` **otaResources**: [`BlinkIdOtaResourceSettings`](BlinkIdOtaResourceSettings.md) + +Optional browser-only OTA resource settings. + +Hosted baseline resources are always loaded. Provider update checks are +enabled by default; set `checkForUpdates` to `false` to skip the provider. + +*** + ### resourcesLocation? > `optional` **resourcesLocation**: `string` diff --git a/packages/blinkid/docs/type-aliases/DocumentCaptureModuleSettings.md b/packages/blinkid/docs/type-aliases/DocumentCaptureModuleSettings.md index 33a6a0b0..c3ce0d64 100644 --- a/packages/blinkid/docs/type-aliases/DocumentCaptureModuleSettings.md +++ b/packages/blinkid/docs/type-aliases/DocumentCaptureModuleSettings.md @@ -47,6 +47,31 @@ blur; it may detect as blur even something that only resembles blur. *** +### cropType + +> **cropType**: [`InputImageCropType`](InputImageCropType.md) + +Specifies whether the input image is already cropped, likely cropped, or +not cropped. + +When set to `"cropped"`, the input image must consist solely of the already +cropped and corrected document. + +When set to `"unknown"`, the recognizer first attempts extraction as if the +image is cropped, then falls back to the regular localization pipeline if +extraction fails. + +`"cropped"` and `"unknown"` are applicable only to `Photo` sources and will +cause a validation error for `Video`. + +#### Default + +```ts +"not-cropped" +``` + +*** + ### documentImageReturnEnabled > **documentImageReturnEnabled**: `boolean` @@ -227,12 +252,13 @@ document will be excluded from further processing. If occlusion is detected, `ProcessingStatus` will be `ImagePreprocessingFailed` and hand occlusion status will be reported in the `ProcessResult`. -Default behavior depends on `inputImageCropped`: +Default behavior depends on `cropType`: -- `true`: Defaults to `false`. This setting is not applicable. Setting this - to `true` while `inputImageCropped` is also `true` will result in a - settings validation failure. -- `false`: Defaults to `true`. Images with hand occlusion are rejected. +- `"cropped"`: Defaults to `false`. This setting is not applicable. Setting + this to `true` while `cropType` is `"cropped"` will result in a settings + validation failure. +- `"not-cropped"` and `"unknown"`: Defaults to `true`. Images with hand + occlusion are rejected. #### Default @@ -267,29 +293,6 @@ true *** -### inputImageCropped - -> **inputImageCropped**: `boolean` - -Indicates whether the input image is already cropped and -perspective-corrected. - -If `true`, the input image must consist solely of the already cropped and -corrected document. - -Default value is `false`. - -This setting is not applicable to `Video` sources and will cause a -validation error if set to true. - -#### Default - -```ts -false -``` - -*** - ### inputImageMargin > **inputImageMargin**: `number` @@ -333,6 +336,29 @@ false *** +### inputImageSelectionStrategy + +> **inputImageSelectionStrategy**: [`InputImageSelectionStrategy`](InputImageSelectionStrategy.md) + +Represents the strategy used to select the best input image from a pool of +stable input images. + +Available strategies are `"single-image"`, `"optimize-for-speed"`, +`"default"`, and `"optimize-for-quality"`. The `"default"` strategy +represents a trade-off between speed and quality, while +`"optimize-for-speed"` and `"optimize-for-quality"` are optimized for speed +and quality respectively. + +This setting is only applicable for the `Video` input image source. + +#### Default + +```ts +"default" +``` + +*** + ### passportDataPageScanOnly > **passportDataPageScanOnly**: `boolean` diff --git a/packages/blinkid/docs/type-aliases/DocumentClassComponent.md b/packages/blinkid/docs/type-aliases/DocumentClassComponent.md new file mode 100644 index 00000000..8b2eab90 --- /dev/null +++ b/packages/blinkid/docs/type-aliases/DocumentClassComponent.md @@ -0,0 +1,37 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / DocumentClassComponent + +# Type Alias: DocumentClassComponent\ + +> **DocumentClassComponent**\<`TId`\> = `object` + +A single document classification component. + +`id` is present when the classification maps to a value known at build time. +`rawValue` always carries the raw classification token from the document +knowledge database, including OTA-delivered classes unknown at build time. + +## Type Parameters + +### TId + +`TId` *extends* `string` + +## Properties + +### id? + +> `optional` **id**: `TId` + +Strongly-typed identifier, when known at build time. + +*** + +### rawValue + +> **rawValue**: `string` + +Raw classification value (document knowledge database format). diff --git a/packages/blinkid/docs/type-aliases/DocumentClassCountry.md b/packages/blinkid/docs/type-aliases/DocumentClassCountry.md new file mode 100644 index 00000000..bed59874 --- /dev/null +++ b/packages/blinkid/docs/type-aliases/DocumentClassCountry.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / DocumentClassCountry + +# Type Alias: DocumentClassCountry + +> **DocumentClassCountry** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`Country`](Country.md)\> + +The document country classification. diff --git a/packages/blinkid/docs/type-aliases/DocumentClassDocumentType.md b/packages/blinkid/docs/type-aliases/DocumentClassDocumentType.md new file mode 100644 index 00000000..3d29accb --- /dev/null +++ b/packages/blinkid/docs/type-aliases/DocumentClassDocumentType.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / DocumentClassDocumentType + +# Type Alias: DocumentClassDocumentType + +> **DocumentClassDocumentType** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`DocumentType`](DocumentType.md)\> + +The document type classification. diff --git a/packages/blinkid/docs/type-aliases/DocumentClassFilter.md b/packages/blinkid/docs/type-aliases/DocumentClassFilter.md index 866ece6c..3198a789 100644 --- a/packages/blinkid/docs/type-aliases/DocumentClassFilter.md +++ b/packages/blinkid/docs/type-aliases/DocumentClassFilter.md @@ -24,6 +24,9 @@ marked as "unsupported-document". [`DocumentClassInfo`](DocumentClassInfo.md) Information about the document class, such as country and type. +Each classification component is a wrapper object — compare against its `id` +(e.g. `documentClassInfo.country?.id === "usa"`); `id` is absent for +OTA-delivered classes unknown at build time (use `rawValue` for those). ## Returns diff --git a/packages/blinkid/docs/type-aliases/DocumentClassInfo.md b/packages/blinkid/docs/type-aliases/DocumentClassInfo.md index 39717bb8..c860e4c5 100644 --- a/packages/blinkid/docs/type-aliases/DocumentClassInfo.md +++ b/packages/blinkid/docs/type-aliases/DocumentClassInfo.md @@ -14,54 +14,54 @@ Represents the document class information. ### country -> **country**: [`Country`](Country.md) \| `undefined` +> **country**: [`DocumentClassCountry`](DocumentClassCountry.md) \| `undefined` The document country. *** -### countryName +### countryName? -> **countryName**: `string` +> `optional` **countryName**: `string` The name of the country that issued the scanned document. *** -### isoAlpha2CountryCode +### documentType -> **isoAlpha2CountryCode**: `string` +> **documentType**: [`DocumentClassDocumentType`](DocumentClassDocumentType.md) \| `undefined` -The 2-letter ISO code of the country that issued the scanned document. +The type of the scanned document. *** -### isoAlpha3CountryCode +### isoAlpha2CountryCode? -> **isoAlpha3CountryCode**: `string` +> `optional` **isoAlpha2CountryCode**: `string` -The 3-letter ISO code of the country that issued the scanned document. +The 2-letter ISO code of the country that issued the scanned document. *** -### isoNumericCountryCode +### isoAlpha3CountryCode? -> **isoNumericCountryCode**: `string` +> `optional` **isoAlpha3CountryCode**: `string` -The ISO numeric code of the country that issued the scanned document. +The 3-letter ISO code of the country that issued the scanned document. *** -### region +### isoNumericCountryCode? -> **region**: [`Region`](Region.md) \| `undefined` +> `optional` **isoNumericCountryCode**: `string` -The document region. +The ISO numeric code of the country that issued the scanned document. *** -### type +### region -> **type**: [`DocumentType`](DocumentType.md) \| `undefined` +> **region**: [`DocumentClassRegion`](DocumentClassRegion.md) \| `undefined` -The type of the scanned document. +The document region. diff --git a/packages/blinkid/docs/type-aliases/DocumentClassRegion.md b/packages/blinkid/docs/type-aliases/DocumentClassRegion.md new file mode 100644 index 00000000..fff9d266 --- /dev/null +++ b/packages/blinkid/docs/type-aliases/DocumentClassRegion.md @@ -0,0 +1,11 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / DocumentClassRegion + +# Type Alias: DocumentClassRegion + +> **DocumentClassRegion** = [`DocumentClassComponent`](DocumentClassComponent.md)\<[`Region`](Region.md)\> + +The document region classification. diff --git a/packages/blinkid/docs/type-aliases/FieldType.md b/packages/blinkid/docs/type-aliases/FieldType.md index 6fbe23d5..138bdfd3 100644 --- a/packages/blinkid/docs/type-aliases/FieldType.md +++ b/packages/blinkid/docs/type-aliases/FieldType.md @@ -6,6 +6,6 @@ # Type Alias: FieldType -> **FieldType** = `"localizedName"` \| `"additionalAddressInformation"` \| `"additionalNameInformation"` \| `"additionalOptionalAddressInformation"` \| `"additionalPersonalIdNumber"` \| `"address"` \| `"bloodType"` \| `"classEffectiveDate"` \| `"classExpiryDate"` \| `"conditions"` \| `"dateOfBirth"` \| `"dateOfExpiry"` \| `"dateOfIssue"` \| `"documentAdditionalNumber"` \| `"documentNumber"` \| `"documentOptionalAdditionalNumber"` \| `"employer"` \| `"endorsements"` \| `"fathersName"` \| `"firstName"` \| `"fullName"` \| `"issuingAuthority"` \| `"lastName"` \| `"licenceType"` \| `"maritalStatus"` \| `"mothersName"` \| `"mrz"` \| `"nationality"` \| `"personalIdNumber"` \| `"placeOfBirth"` \| `"profession"` \| `"race"` \| `"religion"` \| `"residentialStatus"` \| `"restrictions"` \| `"sex"` \| `"sponsor"` \| `"vehicleClass"` \| `"visaType"` \| `"dependentDateOfBirth"` \| `"dependentDocumentNumber"` \| `"dependentFullName"` \| `"dependentSex"` \| `"documentSubtype"` \| `"eligibilityCategory"` \| `"manufacturingYear"` \| `"remarks"` \| `"residencePermitType"` \| `"specificDocumentValidity"` \| `"vehicleOwner"` \| `"vehicleType"` \| `"nationalInsuranceNumber"` \| `"countryCode"` \| `"certificateNumber"` \| `"municipalityOfRegistration"` \| `"localityCode"` \| `"maidenName"` \| `"stateCode"` \| `"dateOfEntry"` \| `"municipalityCode"` \| `"pollingStationCode"` \| `"sectionCode"` \| `"registrationCenterCode"` \| `"stateName"` \| `"effectiveDate"` \| `"parentsLastName"` \| `"workRestriction"` \| `"parentsFirstName"` \| `"socialSecurityStatus"` \| `"legalStatus"` \| `"husbandName"` \| `"cardAccessNumber"` +> **FieldType** = `"localizedName"` \| `"additionalAddressInformation"` \| `"additionalNameInformation"` \| `"additionalOptionalAddressInformation"` \| `"additionalPersonalIdNumber"` \| `"address"` \| `"bloodType"` \| `"classEffectiveDate"` \| `"classExpiryDate"` \| `"conditions"` \| `"dateOfBirth"` \| `"dateOfExpiry"` \| `"dateOfIssue"` \| `"documentAdditionalNumber"` \| `"documentNumber"` \| `"documentOptionalAdditionalNumber"` \| `"employer"` \| `"endorsements"` \| `"fathersName"` \| `"firstName"` \| `"fullName"` \| `"issuingAuthority"` \| `"lastName"` \| `"licenceType"` \| `"maritalStatus"` \| `"mothersName"` \| `"mrz"` \| `"nationality"` \| `"personalIdNumber"` \| `"placeOfBirth"` \| `"profession"` \| `"race"` \| `"religion"` \| `"residentialStatus"` \| `"restrictions"` \| `"sex"` \| `"sponsor"` \| `"vehicleClass"` \| `"visaType"` \| `"dependentDateOfBirth"` \| `"dependentDocumentNumber"` \| `"dependentFullName"` \| `"dependentSex"` \| `"documentSubtype"` \| `"eligibilityCategory"` \| `"manufacturingYear"` \| `"remarks"` \| `"residencePermitType"` \| `"specificDocumentValidity"` \| `"vehicleOwner"` \| `"vehicleType"` \| `"nationalInsuranceNumber"` \| `"countryCode"` \| `"certificateNumber"` \| `"municipalityOfRegistration"` \| `"localityCode"` \| `"maidenName"` \| `"stateCode"` \| `"dateOfEntry"` \| `"municipalityCode"` \| `"pollingStationCode"` \| `"sectionCode"` \| `"registrationCenterCode"` \| `"stateName"` \| `"effectiveDate"` \| `"parentsLastName"` \| `"workRestriction"` \| `"parentsFirstName"` \| `"socialSecurityStatus"` \| `"legalStatus"` \| `"husbandName"` \| `"cardAccessNumber"` \| `"parentFullName"` \| `"ethnicity"` Represents all possible field types that can be extracted from the document. diff --git a/packages/blinkid/docs/type-aliases/InputImageAnalysisResult.md b/packages/blinkid/docs/type-aliases/InputImageAnalysisResult.md index 403dd39f..5cac66eb 100644 --- a/packages/blinkid/docs/type-aliases/InputImageAnalysisResult.md +++ b/packages/blinkid/docs/type-aliases/InputImageAnalysisResult.md @@ -32,11 +32,14 @@ The status of blur detection *** -### documentClassInfo +### documentClassInfo? -> **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) +> `optional` **documentClassInfo**: [`DocumentClassInfo`](DocumentClassInfo.md) -Information about the document class +Information about the document class. + +Absent when the document could not be classified (for example, for +unsupported documents without any extracted class info). *** @@ -144,6 +147,19 @@ List of failed image extractions *** +### inputImageCropAnalysis + +> **inputImageCropAnalysis**: [`InputImageCropAnalysis`](InputImageCropAnalysis.md) + +Records the conclusion drawn about whether the input image was already +cropped and perspective-corrected. + +Only meaningful when the document capture module `cropType` was set to +`"unknown"` and the input source is `Photo`; otherwise always +`"not-available"`. + +*** + ### invalidCharacterFields > **invalidCharacterFields**: [`FieldType`](FieldType.md)[] @@ -190,3 +206,13 @@ The status of real ID detection > **scanningSide**: [`ScanningSide`](ScanningSide.md) Side of the document being scanned + +*** + +### vizExtractionType + +> **vizExtractionType**: [`VizExtractionType`](VizExtractionType.md) + +Type or availability status of VIZ extraction for this input image. + +The value is `"not-available"` until a document is scanned. diff --git a/packages/blinkid/docs/type-aliases/InputImageCropAnalysis.md b/packages/blinkid/docs/type-aliases/InputImageCropAnalysis.md new file mode 100644 index 00000000..a77c4257 --- /dev/null +++ b/packages/blinkid/docs/type-aliases/InputImageCropAnalysis.md @@ -0,0 +1,30 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / InputImageCropAnalysis + +# Type Alias: InputImageCropAnalysis + +> **InputImageCropAnalysis** = `"not-cropped"` \| `"cropped"` \| `"not-available"` \| `"undetermined"` + +Describes the conclusion drawn about whether the input image was already +cropped and perspective-corrected prior to being submitted for recognition. + +This analysis is only performed when the document capture module `cropType` +is set to `"unknown"` and the input source is `Photo`. In all other cases the +value is `"not-available"`. + +- `"not-cropped"`: The first attempt (treating the image as pre-cropped) did + not yield a valid result, so the standard detection-and-perspective- + correction pipeline was executed as a fallback and succeeded. Conclusion: + the input image was likely not pre-cropped. +- `"cropped"`: The first attempt (treating the image as pre-cropped) yielded a + valid result without running the document detector. Conclusion: the input + image was likely already cropped and perspective-corrected. +- `"not-available"`: The two-attempt analysis was not performed because + `cropType` was `"cropped"` or `"not-cropped"`, or the input source was + `Video`. +- `"undetermined"`: The analysis does not allow for a conclusion to be drawn + because a valid stage could not be reached, neither considering the image + as cropped nor as not cropped. diff --git a/packages/blinkid/docs/type-aliases/InputImageCropType.md b/packages/blinkid/docs/type-aliases/InputImageCropType.md new file mode 100644 index 00000000..38c1946c --- /dev/null +++ b/packages/blinkid/docs/type-aliases/InputImageCropType.md @@ -0,0 +1,19 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / InputImageCropType + +# Type Alias: InputImageCropType + +> **InputImageCropType** = `"not-cropped"` \| `"unknown"` \| `"cropped"` + +Specifies whether the input image is already cropped, likely cropped, or not +cropped. + +- `"not-cropped"`: The image is considered raw and goes through document + detection and perspective correction. +- `"unknown"`: The image may already be cropped. The recognizer first tries + cropped processing and falls back to detection if extraction fails. +- `"cropped"`: The input image must contain only the cropped and + perspective-corrected document. diff --git a/packages/blinkid/docs/type-aliases/InputImageSelectionStrategy.md b/packages/blinkid/docs/type-aliases/InputImageSelectionStrategy.md new file mode 100644 index 00000000..0140b4db --- /dev/null +++ b/packages/blinkid/docs/type-aliases/InputImageSelectionStrategy.md @@ -0,0 +1,28 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / InputImageSelectionStrategy + +# Type Alias: InputImageSelectionStrategy + +> **InputImageSelectionStrategy** = `"single-image"` \| `"optimize-for-speed"` \| `"balanced"` \| `"optimize-for-quality"` + +Represents the strategy used to select the best input image from a pool of +stable input images. + +Before selecting the best-quality image, a sequence of stable input images +must be collected. From this pool, the one with the highest quality is +selected. An input image is considered stable when the image analysis results +are consistent across a consecutive stream of input images. + +A larger pool size increases the likelihood of capturing a high-quality image +but may introduce a slight delay, as more stable input images need to be +collected. + +- `"single-image"`: Selects the first acceptable stable input image. +- `"optimize-for-speed"`: Faster processing, but may select a lower-quality + image because a smaller pool of stable input images is considered. +- `"default"`: Trade-off between quality and speed. +- `"optimize-for-quality"`: Slower processing in order to select a high-quality + input image, because a larger pool of stable input images is considered. diff --git a/packages/blinkid/docs/type-aliases/PingSdkInitStart.md b/packages/blinkid/docs/type-aliases/PingSdkInitStart.md index 16610a2d..5b3b4946 100644 --- a/packages/blinkid/docs/type-aliases/PingSdkInitStart.md +++ b/packages/blinkid/docs/type-aliases/PingSdkInitStart.md @@ -6,6 +6,6 @@ # Type Alias: PingSdkInitStart -> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"1.3.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> +> **PingSdkInitStart** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.init.start"`, `"2.0.0"`, [`PingSdkInitStartData`](PingSdkInitStartData.md)\> Ping type for ping.sdk.init.start diff --git a/packages/blinkid/docs/type-aliases/PingUxEvent.md b/packages/blinkid/docs/type-aliases/PingUxEvent.md index ce6f3529..ce7a1035 100644 --- a/packages/blinkid/docs/type-aliases/PingUxEvent.md +++ b/packages/blinkid/docs/type-aliases/PingUxEvent.md @@ -6,6 +6,6 @@ # Type Alias: PingUxEvent -> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.1.0"`, [`PingUxEventData`](PingUxEventData.md)\> +> **PingUxEvent** = [`PingBase`](../interfaces/PingBase.md)\<`"ping.sdk.ux.event"`, `"1.2.0"`, [`PingUxEventData`](PingUxEventData.md)\> Ping type for ping.sdk.ux.event diff --git a/packages/blinkid/docs/type-aliases/ProcessingStatus.md b/packages/blinkid/docs/type-aliases/ProcessingStatus.md index bcad3f07..0dad2d5c 100644 --- a/packages/blinkid/docs/type-aliases/ProcessingStatus.md +++ b/packages/blinkid/docs/type-aliases/ProcessingStatus.md @@ -6,7 +6,7 @@ # Type Alias: ProcessingStatus -> **ProcessingStatus** = `"success"` \| `"detection-failed"` \| `"image-preprocessing-failed"` \| `"stability-test-failed"` \| `"scanning-wrong-side"` \| `"field-identification-failed"` \| `"mandatory-field-missing"` \| `"invalid-characters-found"` \| `"image-return-failed"` \| `"barcode-recognition-failed"` \| `"mrz-parsing-failed"` \| `"unsupported-document"` \| `"awaiting-other-side"` \| `"not-scanned"` \| `"barcode-detection-failed"` \| `"mrz-detection-failed"` \| `"input-image-not-focused"` \| `"canceled"` +> **ProcessingStatus** = `"success"` \| `"detection-failed"` \| `"image-preprocessing-failed"` \| `"stability-test-failed"` \| `"scanning-wrong-side"` \| `"field-identification-failed"` \| `"mandatory-field-missing"` \| `"invalid-characters-found"` \| `"image-return-failed"` \| `"barcode-recognition-failed"` \| `"mrz-parsing-failed"` \| `"unsupported-document"` \| `"awaiting-other-side"` \| `"not-scanned"` \| `"barcode-detection-failed"` \| `"mrz-detection-failed"` \| `"input-image-not-focused"` \| `"awaiting-more-stable-input-images"` \| `"canceled"` Represents the status of the document processing. @@ -45,4 +45,7 @@ stages of the recognition and extraction process. - `mrz-detection-failed` The MRZ was not found on the image. This processing status can only occur if document has mandatory MRZ. - `input-image-not-focused` Input image is not focused. +- `awaiting-more-stable-input-images` More stable input images are required to + proceed to data and image extraction. Available only for `Video` input + source. An input image is stable if it passed the stability test. - `canceled` Scanning was terminated by cancel delegate. diff --git a/packages/blinkid/docs/type-aliases/VizExtractionType.md b/packages/blinkid/docs/type-aliases/VizExtractionType.md new file mode 100644 index 00000000..928b23ce --- /dev/null +++ b/packages/blinkid/docs/type-aliases/VizExtractionType.md @@ -0,0 +1,17 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / VizExtractionType + +# Type Alias: VizExtractionType + +> **VizExtractionType** = `"not-available"` \| `"segmentation"` \| `"templating"` \| `"unsupported"` + +Describes whether VIZ extraction was available for the processed input image +and which extraction path was selected. + +- `"not-available"`: VIZ extraction has not been evaluated yet. +- `"segmentation"`: VIZ data was extracted using segmentation. +- `"templating"`: VIZ data was extracted using a document template. +- `"unsupported"`: VIZ extraction is not supported for the processed image. diff --git a/packages/blinkid/docs/type-aliases/VizFieldsCompleteness.md b/packages/blinkid/docs/type-aliases/VizFieldsCompleteness.md index 09986684..651ad8a4 100644 --- a/packages/blinkid/docs/type-aliases/VizFieldsCompleteness.md +++ b/packages/blinkid/docs/type-aliases/VizFieldsCompleteness.md @@ -142,6 +142,12 @@ *** +### ethnicity? + +> `optional` **ethnicity**: [`StringResultCompleteness`](StringResultCompleteness.md) + +*** + ### fathersName? > `optional` **fathersName**: [`StringResultCompleteness`](StringResultCompleteness.md) diff --git a/packages/blinkid/docs/type-aliases/VizResult.md b/packages/blinkid/docs/type-aliases/VizResult.md index 767dc67c..aebace6c 100644 --- a/packages/blinkid/docs/type-aliases/VizResult.md +++ b/packages/blinkid/docs/type-aliases/VizResult.md @@ -196,6 +196,14 @@ The employer of the document owner *** +### ethnicity + +> **ethnicity**: [`StringResult`](StringResult.md) \| `null` + +The ethnicity of the document owner + +*** + ### fathersName > **fathersName**: [`StringResult`](StringResult.md) \| `null` diff --git a/packages/blinkid/docs/type-aliases/WasmSimdVariant.md b/packages/blinkid/docs/type-aliases/WasmSimdVariant.md deleted file mode 100644 index 5966f45b..00000000 --- a/packages/blinkid/docs/type-aliases/WasmSimdVariant.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid**](../README.md) - -*** - -[@microblink/blinkid](../README.md) / WasmSimdVariant - -# Type Alias: WasmSimdVariant - -> **WasmSimdVariant** = *typeof* [`wasmSimdVariants`](../variables/wasmSimdVariants.md)\[`number`\] diff --git a/packages/blinkid/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md b/packages/blinkid/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md new file mode 100644 index 00000000..02d79a5e --- /dev/null +++ b/packages/blinkid/docs/variables/DEFAULT_BLINK_ID_OTA_RESOURCE_PROVIDER_URL.md @@ -0,0 +1,9 @@ +[**@microblink/blinkid**](../README.md) + +*** + +[@microblink/blinkid](../README.md) / DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL + +# Variable: DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL + +> `const` **DEFAULT\_BLINK\_ID\_OTA\_RESOURCE\_PROVIDER\_URL**: `"https://blinkid-ota.microblink.com"` = `"https://blinkid-ota.microblink.com"` diff --git a/packages/blinkid/docs/variables/wasmSimdVariants.md b/packages/blinkid/docs/variables/wasmSimdVariants.md deleted file mode 100644 index 40d68a35..00000000 --- a/packages/blinkid/docs/variables/wasmSimdVariants.md +++ /dev/null @@ -1,9 +0,0 @@ -[**@microblink/blinkid**](../README.md) - -*** - -[@microblink/blinkid](../README.md) / wasmSimdVariants - -# Variable: wasmSimdVariants - -> `const` **wasmSimdVariants**: readonly \[`"advanced"`, `"advanced-threads"`\] diff --git a/packages/blinkid/docs/variables/wasmVariants.md b/packages/blinkid/docs/variables/wasmVariants.md index 3423689c..e2f841ea 100644 --- a/packages/blinkid/docs/variables/wasmVariants.md +++ b/packages/blinkid/docs/variables/wasmVariants.md @@ -6,4 +6,4 @@ # Variable: wasmVariants -> `const` **wasmVariants**: readonly \[`"basic"`, `"advanced"`, `"advanced-threads"`\] +> `const` **wasmVariants**: readonly \[`"simd"`, `"simd-threads"`\] diff --git a/packages/blinkid/package.json b/packages/blinkid/package.json index 6054e09a..edd50232 100644 --- a/packages/blinkid/package.json +++ b/packages/blinkid/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/blinkid", "description": "All-in-one BlinkID browser SDK for fast and accurate ID document scanning and recognition in web applications.", - "version": "8000.0.1", + "version": "8001.0.0", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -19,7 +19,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm pack-check", + "publish-test": "pnpm pack-check", "type-rollup": "api-extractor run --local", "watch": "concurrently pnpm:watch:js pnpm:watch:types", "watch:js": "pnpm run build:js --watch --mode development", @@ -51,14 +51,14 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", + "@microblink/repo-utils": "workspace:*", "@microblink/test-utils": "workspace:*", "@microblink/tsconfig": "workspace:*", - "@vitest/browser": "^3.0.8", - "@microblink/repo-utils": "workspace:*", "@microsoft/api-extractor": "^7.52.4", "@typescript-eslint/eslint-plugin": "^6.9.0", "@typescript-eslint/parser": "^6.9.0", + "@vitest/browser": "^3.0.8", "concurrently": "^9.1.2", "eslint": "^8.57.0", "eslint-config-prettier": "10.1.8", @@ -86,4 +86,4 @@ "Safari >= 16.4", "iOS >= 16.4" ] -} \ No newline at end of file +} diff --git a/packages/blinkid/src/createBlinkId.test.ts b/packages/blinkid/src/createBlinkId.test.ts index 3afc434f..689308fb 100644 --- a/packages/blinkid/src/createBlinkId.test.ts +++ b/packages/blinkid/src/createBlinkId.test.ts @@ -176,8 +176,14 @@ describe("createBlinkId", () => { licenseKey: "my-license", microblinkProxyUrl: "https://proxy.example.com", initialMemory: 32, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + resourcesLocation: "https://cdn.example.com/blinkid-ota", + strict: true, + }, resourcesLocation: "https://resources.example.com", - wasmVariant: "basic", + wasmVariant: "simd", useLightweightBuild: true, }); @@ -186,8 +192,14 @@ describe("createBlinkId", () => { licenseKey: "my-license", microblinkProxyUrl: "https://proxy.example.com", initialMemory: 32, + otaResources: { + checkForUpdates: true, + otaResourceProviderUrl: "https://ota.example.com", + resourcesLocation: "https://cdn.example.com/blinkid-ota", + strict: true, + }, resourcesLocation: "https://resources.example.com", - wasmVariant: "basic", + wasmVariant: "simd", useLightweightBuild: true, }); }); diff --git a/packages/blinkid/src/createBlinkId.ts b/packages/blinkid/src/createBlinkId.ts index 59a8b1e5..a54f22b4 100644 --- a/packages/blinkid/src/createBlinkId.ts +++ b/packages/blinkid/src/createBlinkId.ts @@ -180,6 +180,7 @@ export const createBlinkId = async ({ targetNode, cameraManagerUiOptions, initialMemory, + otaResources, resourcesLocation, scanningSettings, useLightweightBuild, @@ -196,14 +197,17 @@ export const createBlinkId = async ({ try { // we first initialize the direct API. This loads the WASM module and initializes the engine - blinkIdCore = await loadBlinkIdCore({ + const initSettings: BlinkIdInitSettings = { licenseKey, microblinkProxyUrl, initialMemory, + otaResources, resourcesLocation, useLightweightBuild, wasmVariant, - }); + }; + + blinkIdCore = await loadBlinkIdCore(initSettings); const sessionSettings = { scanningMode, diff --git a/packages/camera-manager/CHANGELOG.md b/packages/camera-manager/CHANGELOG.md index df77216c..f76148ed 100644 --- a/packages/camera-manager/CHANGELOG.md +++ b/packages/camera-manager/CHANGELOG.md @@ -1,5 +1,11 @@ # @microblink/camera-manager +## 7.3.4 + +### Patch Changes + +- Update dependencies + ## 7.3.3 ### Patch Changes diff --git a/packages/camera-manager/package.json b/packages/camera-manager/package.json index a0b394bf..863d5dab 100644 --- a/packages/camera-manager/package.json +++ b/packages/camera-manager/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/camera-manager", "description": "Manages cameras and stream, provides both a headless component and a UI component", - "version": "7.3.3", + "version": "7.3.4", "author": "Microblink", "scripts": { "build": "concurrently pnpm:build:js pnpm:build:types", @@ -17,7 +17,7 @@ "pack-check": "pnpm pack | tail -n1 | xargs attw --profile esm-only && publint publish", "prepack": "pnpm prepare-publish", "prepare-publish": "tsx scripts/prepare-publish.mts", - "publish-test": "pnpm build:publish && pnpm prepare-publish && pnpm pack-check", + "publish-test": "pnpm prepare-publish && pnpm pack-check", "test": "vitest run", "test:watch": "vitest", "type-rollup": "api-extractor run --local", @@ -55,7 +55,7 @@ "type-fest": "^4.35.0" }, "devDependencies": { - "@arethetypeswrong/cli": "0.18.2", + "@arethetypeswrong/cli": "0.18.3", "@iconify-json/material-symbols": "^1.2.14", "@iconify-json/mdi": "^1.2.3", "@microblink/repo-utils": "workspace:*", diff --git a/packages/repo-utils/utils.mts b/packages/repo-utils/utils.mts index d852af84..4cb508f5 100644 --- a/packages/repo-utils/utils.mts +++ b/packages/repo-utils/utils.mts @@ -91,6 +91,11 @@ export async function linkResources( } await fs.ensureSymlink(sourcePath, destinationPath); } catch (error) { + const symlinkError = error as NodeJS.ErrnoException; + if (symlinkError.code === "EEXIST" && fs.existsSync(destinationPath)) { + return; + } + // If symlinking fails, fall back to copying console.log( `Symlinking failed, falling back to copying: ${(error as Error).message}`, diff --git a/packages/repo-utils/utils.test.mts b/packages/repo-utils/utils.test.mts index 22722eb5..255e0e4d 100644 --- a/packages/repo-utils/utils.test.mts +++ b/packages/repo-utils/utils.test.mts @@ -129,6 +129,23 @@ describe("Utils", () => { ); }); + it("should accept a destination created by a concurrent symlink", async () => { + const error = Object.assign( + new Error("EEXIST: file already exists"), + { + code: "EEXIST", + }, + ); + vi.mocked(fs.ensureSymlink).mockRejectedValue(error); + vi.mocked(fs.existsSync) + .mockReturnValueOnce(false) + .mockReturnValueOnce(true); + + await linkResources(sourcePath, destinationPath); + + expect(fs.copy).not.toHaveBeenCalled(); + }); + it("should fall back to copying when copy succeeds", async () => { await linkResources(sourcePath, destinationPath); diff --git a/packages/test-utils/src/mocks/wasmModuleFactory.ts b/packages/test-utils/src/mocks/wasmModuleFactory.ts index 29269a19..24ff47cf 100644 --- a/packages/test-utils/src/mocks/wasmModuleFactory.ts +++ b/packages/test-utils/src/mocks/wasmModuleFactory.ts @@ -9,7 +9,6 @@ import type { WasmModule } from "@microblink/wasm-common"; import { vi } from "vitest"; - let wasmModuleMock: WasmModule | null = null; let lastModuleOverrides: Record | undefined; @@ -34,8 +33,8 @@ type WasmModuleSpies> = { export function createWasmModuleMock>( overrides?: Partial, ): { - spies: WasmModuleSpies; - module: T; + spies: WasmModuleSpies; + module: T; } { const spies: WasmModuleSpies = { createScanningSession: vi.fn(), @@ -44,6 +43,7 @@ export function createWasmModuleMock>( getActiveLicenseTokenInfo: vi.fn(), setPingProxyUrl: vi.fn(), initializeSdk: vi.fn(), + getRecognizerVersion: vi.fn().mockReturnValue("1.0.0"), terminateSdk: vi.fn(), sendPinglets: vi.fn(), arePingRequestsInProgress: vi.fn(), @@ -55,8 +55,8 @@ export function createWasmModuleMock>( return { spies, module: { - ...spies, - } + ...spies, + }, } as unknown as { spies: WasmModuleSpies; module: T; @@ -78,9 +78,7 @@ export function getWasmModuleMock(): Promise> { */ export default function createMockModule( moduleOverrides?: Record, -): Promise< - WasmModule -> { +): Promise> { lastModuleOverrides = moduleOverrides; if (!wasmModuleMock) { throw new Error( diff --git a/packages/wasm-common/CHANGELOG.md b/packages/wasm-common/CHANGELOG.md index dc43cdbc..12428024 100644 --- a/packages/wasm-common/CHANGELOG.md +++ b/packages/wasm-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @microblink/wasm-common +## 2.2.0 + +### Minor Changes + +- Removed the `basic` Wasm variant from `wasmVariants` and build profiles. + - Renamed Wasm variant identifiers: `advanced` → `simd` and `advanced-threads` → `simd-threads`. + - Removed the redundant `WasmSimdVariant` type and `wasmSimdVariants` constant; use `WasmVariant` instead. +- Added a non-asserting `tryFromStringView` to the generated enum binder, returning `std::optional` (empty on unknown values) instead of asserting. + ## 2.1.0 ### Minor Changes @@ -11,9 +20,9 @@ ### Major Changes - Typescript: - - Added `WasmSimdVariant` type for all products + - Added `WasmSimdVariant` type for all products - Cplusplus: - - Updated internal imporevements for cleaner binding of types + - Updated internal imporevements for cleaner binding of types ## 1.0.1 diff --git a/packages/wasm-common/package.json b/packages/wasm-common/package.json index b06511cc..a3b76e52 100644 --- a/packages/wasm-common/package.json +++ b/packages/wasm-common/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/wasm-common", "private": true, - "version": "2.1.0", + "version": "2.2.0", "scripts": { "build": "tsc", "build:publish": "tsc", diff --git a/packages/wasm-common/src/wasm-constants.ts b/packages/wasm-common/src/wasm-constants.ts index a4969878..cd15524d 100644 --- a/packages/wasm-common/src/wasm-constants.ts +++ b/packages/wasm-common/src/wasm-constants.ts @@ -4,10 +4,8 @@ export const resourceFileTypes = ["wasm", "data"] as const; export const wasmBuildTypes = ["full", "lightweight"] as const; -export const wasmVariants = ["basic", "advanced", "advanced-threads"] as const; -export const wasmSimdVariants = ["advanced", "advanced-threads"] as const; +export const wasmVariants = ["simd", "simd-threads"] as const; export type ResourceFileType = (typeof resourceFileTypes)[number]; export type WasmBuildType = (typeof wasmBuildTypes)[number]; export type WasmVariant = (typeof wasmVariants)[number]; -export type WasmSimdVariant = (typeof wasmSimdVariants)[number]; \ No newline at end of file diff --git a/packages/worker-common/CHANGELOG.md b/packages/worker-common/CHANGELOG.md index 38f79ef7..0837a513 100644 --- a/packages/worker-common/CHANGELOG.md +++ b/packages/worker-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @microblink/worker-common +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @microblink/wasm-common@2.2.0 + ## 1.0.4 ### Patch Changes diff --git a/packages/worker-common/package.json b/packages/worker-common/package.json index c5768df7..8328252e 100644 --- a/packages/worker-common/package.json +++ b/packages/worker-common/package.json @@ -1,7 +1,7 @@ { "name": "@microblink/worker-common", "private": true, - "version": "1.0.4", + "version": "1.0.5", "scripts": { "build": "tsc", "build:publish": "tsc", diff --git a/packages/worker-common/src/downloadResourceBuffer.test.ts b/packages/worker-common/src/downloadResourceBuffer.test.ts index 0999da14..b0ba26dc 100644 --- a/packages/worker-common/src/downloadResourceBuffer.test.ts +++ b/packages/worker-common/src/downloadResourceBuffer.test.ts @@ -55,7 +55,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "wasm", - variant: "basic", + variant: "simd", }, getExpectedSize, ); @@ -72,7 +72,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "wasm", - variant: "basic", + variant: "simd", progressCallback, }, getExpectedSize, @@ -104,7 +104,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "wasm", - variant: "basic", + variant: "simd", progressCallback, }, getExpectedSize, @@ -112,7 +112,7 @@ describe("downloadResourceBuffer", () => { expect(getExpectedSize).toHaveBeenCalledWith({ fileType: "wasm", - variant: "basic", + variant: "simd", buildType: undefined, }); expect(progressCallback).toHaveBeenNthCalledWith(1, { @@ -133,7 +133,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "data", - variant: "advanced", + variant: "simd", buildType: "lightweight", progressCallback, }, @@ -142,7 +142,7 @@ describe("downloadResourceBuffer", () => { expect(getExpectedSize).toHaveBeenCalledWith({ fileType: "data", - variant: "advanced", + variant: "simd", buildType: "lightweight", }); }); @@ -161,7 +161,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "wasm", - variant: "basic", + variant: "simd", progressCallback, }, getExpectedSize, @@ -181,7 +181,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "wasm", - variant: "basic", + variant: "simd", progressCallback, }, getExpectedSize, @@ -206,7 +206,7 @@ describe("downloadResourceBuffer", () => { { url: mockUrl, fileType: "wasm", - variant: "basic", + variant: "simd", }, getExpectedSize, ), diff --git a/packages/worker-common/src/getWasmFileSize.test.ts b/packages/worker-common/src/getWasmFileSize.test.ts index 7876f0fb..212c12ae 100644 --- a/packages/worker-common/src/getWasmFileSize.test.ts +++ b/packages/worker-common/src/getWasmFileSize.test.ts @@ -7,27 +7,23 @@ import { getWasmFileSize, type SizeManifest } from "./getWasmFileSize"; const twoLevelManifest: SizeManifest = { wasm: { - basic: 1000, - advanced: 1200, - "advanced-threads": 1300, + simd: 1200, + "simd-threads": 1300, }, data: { - basic: 2000, - advanced: 2100, - "advanced-threads": 2200, + simd: 2100, + "simd-threads": 2200, }, }; const threeLevelManifest: SizeManifest = { wasm: { - basic: { full: 1000, lightweight: 800 }, - advanced: { full: 1200, lightweight: 900 }, - "advanced-threads": { full: 1300, lightweight: 950 }, + simd: { full: 1200, lightweight: 900 }, + "simd-threads": { full: 1300, lightweight: 950 }, }, data: { - basic: { full: 2000, lightweight: 1600 }, - advanced: { full: 2100, lightweight: 1700 }, - "advanced-threads": { full: 2200, lightweight: 1800 }, + simd: { full: 2100, lightweight: 1700 }, + "simd-threads": { full: 2200, lightweight: 1800 }, }, }; @@ -35,16 +31,16 @@ describe("getWasmFileSize", () => { describe("two-level manifest (BlinkCard)", () => { it("returns correct size for known wasm file", () => { const size = getWasmFileSize( - { fileType: "wasm", variant: "basic" }, + { fileType: "wasm", variant: "simd" }, twoLevelManifest, ); expect(typeof size).toBe("number"); - expect(size).toBe(1000); + expect(size).toBe(1200); }); it("returns correct size for known data file", () => { const size = getWasmFileSize( - { fileType: "data", variant: "advanced" }, + { fileType: "data", variant: "simd" }, twoLevelManifest, ); expect(typeof size).toBe("number"); @@ -55,7 +51,7 @@ describe("getWasmFileSize", () => { expect(() => { getWasmFileSize( // @ts-expect-error Testing invalid parameters - { fileType: "invalid", variant: "basic" }, + { fileType: "invalid", variant: "simd" }, twoLevelManifest, ); }).toThrow(); @@ -65,16 +61,16 @@ describe("getWasmFileSize", () => { describe("three-level manifest (BlinkID)", () => { it("returns correct size for known wasm file with buildType", () => { const size = getWasmFileSize( - { fileType: "wasm", variant: "basic", buildType: "full" }, + { fileType: "wasm", variant: "simd", buildType: "full" }, threeLevelManifest, ); expect(typeof size).toBe("number"); - expect(size).toBe(1000); + expect(size).toBe(1200); }); it("returns correct size for known data file with lightweight buildType", () => { const size = getWasmFileSize( - { fileType: "data", variant: "advanced", buildType: "lightweight" }, + { fileType: "data", variant: "simd", buildType: "lightweight" }, threeLevelManifest, ); expect(typeof size).toBe("number"); @@ -85,7 +81,7 @@ describe("getWasmFileSize", () => { expect(() => { getWasmFileSize( // @ts-expect-error Testing invalid parameters - { fileType: "invalid", variant: "basic", buildType: "full" }, + { fileType: "invalid", variant: "simd", buildType: "full" }, threeLevelManifest, ); }).toThrow(); @@ -94,7 +90,7 @@ describe("getWasmFileSize", () => { it("throws when build-aware entry is used without buildType", () => { expect(() => { getWasmFileSize( - { fileType: "wasm", variant: "basic" }, + { fileType: "wasm", variant: "simd" }, threeLevelManifest, ); }).toThrow("buildType is required"); diff --git a/packages/worker-common/src/wasm-feature-detect.ts b/packages/worker-common/src/wasm-feature-detect.ts index 71e8fafb..4d7a6853 100644 --- a/packages/worker-common/src/wasm-feature-detect.ts +++ b/packages/worker-common/src/wasm-feature-detect.ts @@ -56,31 +56,28 @@ export default async function checkThreadsSupport(): Promise { * @returns The WASM variant. */ export async function detectWasmFeatures(): Promise { - const basicSet = [ + const minRequiredFeaturesSet = [ mutableGlobals(), referenceTypes(), bulkMemory(), saturatedFloatToInt(), signExtensions(), + simd(), ]; - const supportsBasic = (await Promise.all(basicSet)).every(Boolean); + const supportsMinRequiredFeaturesSet = ( + await Promise.all(minRequiredFeaturesSet) + ).every(Boolean); - if (!supportsBasic) { + if (!supportsMinRequiredFeaturesSet) { throw new Error("Browser doesn't meet minimum requirements!"); } - const supportsAdvanced = await simd(); + const supportsThreads = await checkThreadsSupport(); - if (!supportsAdvanced) { - return "basic"; + if (!supportsThreads) { + return "simd"; } - const supportsAdvancedThreads = await checkThreadsSupport(); - - if (!supportsAdvancedThreads) { - return "advanced"; - } - - return "advanced-threads"; + return "simd-threads"; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c3dbf93..6ee55d9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -46,7 +46,7 @@ importers: version: 14.0.0 turbo: specifier: ^2.8.10 - version: 2.8.11 + version: 2.9.14 typescript: specifier: 5.8.3 version: 5.8.3 @@ -116,16 +116,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -180,10 +180,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -256,16 +256,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -323,10 +323,71 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + zx: + specifier: ^8.8.5 + version: 8.8.5 + + apps/examples/blinkid-ota-setup: + dependencies: + '@microblink/blinkid': + specifier: workspace:^ + version: link:../../../packages/blinkid + devDependencies: + '@microblink/repo-utils': + specifier: workspace:* + version: link:../../../packages/repo-utils + '@microblink/tsconfig': + specifier: workspace:* + version: link:../../../packages/tsconfig + '@typescript-eslint/eslint-plugin': + specifier: ^6.9.0 + version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) + concurrently: + specifier: ^9.1.2 + version: 9.1.2 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: 10.1.8 + version: 10.1.8(eslint@8.57.0) + eslint-define-config: + specifier: ^1.24.1 + version: 1.24.1 + eslint-plugin-solid: + specifier: 0.14.5 + version: 0.14.5(eslint@8.57.0)(typescript@5.8.3) + mkcert-cli: + specifier: ^1.5.0 + version: 1.5.0 + prettier: + specifier: ^3.8.1 + version: 3.9.4 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + sass: + specifier: ^1.85.0 + version: 1.85.0 + serve: + specifier: ^14.2.4 + version: 14.2.4 + tsc-files: + specifier: ^1.1.4 + version: 1.1.4(typescript@5.8.3) + typescript: + specifier: 5.8.3 + version: 5.8.3 + vite: + specifier: ^6.2.1 + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite-plugin-mkcert: + specifier: ^1.17.9 + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -387,16 +448,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -463,13 +524,13 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -527,10 +588,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -600,16 +661,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -676,16 +737,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -740,10 +801,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) zx: specifier: ^8.8.5 version: 8.8.5 @@ -804,16 +865,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) yy-fps: specifier: ^2.0.1 version: 2.0.1 @@ -877,16 +938,16 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-mkcert: specifier: ^1.17.9 - version: 1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-qrcode: specifier: 0.3.0 - version: 0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) yy-fps: specifier: ^2.0.1 version: 2.0.1 @@ -937,10 +998,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) zx: specifier: ^8.8.5 version: 8.8.5 @@ -961,8 +1022,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/repo-utils': specifier: workspace:* version: link:../repo-utils @@ -974,7 +1035,7 @@ importers: version: link:../tsconfig '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) @@ -983,7 +1044,7 @@ importers: version: 6.9.0(eslint@8.57.0)(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1016,10 +1077,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1053,8 +1114,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/repo-utils': specifier: workspace:* version: link:../repo-utils @@ -1072,7 +1133,7 @@ importers: version: link:../worker-common '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@types/common-tags': specifier: ^1.8.3 version: 1.8.3 @@ -1114,10 +1175,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1169,8 +1230,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/feedback-stabilizer': specifier: workspace:^ version: link:../feedback-stabilizer @@ -1191,7 +1252,7 @@ importers: version: link:../unocss-config '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) @@ -1206,7 +1267,7 @@ importers: version: 66.6.5 '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1224,7 +1285,7 @@ importers: version: 0.14.5(eslint@8.57.0)(typescript@5.8.3) prettier-plugin-classnames: specifier: 0.9.0 - version: 0.9.0(prettier@3.8.1) + version: 0.9.0(prettier@3.9.4) publint: specifier: ^0.3.12 version: 0.3.12 @@ -1248,25 +1309,25 @@ importers: version: 5.8.3 unocss: specifier: ^66.6.5 - version: 66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-css-injected-by-js: specifier: ^3.5.2 - version: 3.5.2(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 3.5.2(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-externalize-dependencies: specifier: 1.0.1 version: 1.0.1 vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid-svg: specifier: 0.8.1 - version: 0.8.1(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.8.1(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1288,7 +1349,7 @@ importers: version: 8.0.0 prettier-plugin-jsdoc: specifier: ^1.3.3 - version: 1.8.0(prettier@3.8.1) + version: 1.8.0(prettier@3.9.4) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1373,10 +1434,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) zx: specifier: ^8.8.5 version: 8.8.5 @@ -1397,8 +1458,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/repo-utils': specifier: workspace:* version: link:../repo-utils @@ -1410,7 +1471,7 @@ importers: version: link:../tsconfig '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) @@ -1419,7 +1480,7 @@ importers: version: 6.9.0(eslint@8.57.0)(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1455,10 +1516,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1492,8 +1553,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/repo-utils': specifier: workspace:* version: link:../repo-utils @@ -1511,7 +1572,7 @@ importers: version: link:../worker-common '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@types/common-tags': specifier: ^1.8.3 version: 1.8.3 @@ -1523,7 +1584,7 @@ importers: version: 6.9.0(eslint@8.57.0)(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1538,7 +1599,7 @@ importers: version: 1.24.1 playwright: specifier: ^1.51.0 - version: 1.51.0 + version: 1.55.1 publint: specifier: ^0.3.12 version: 0.3.12 @@ -1559,10 +1620,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1614,8 +1675,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/feedback-stabilizer': specifier: workspace:^ version: link:../feedback-stabilizer @@ -1636,7 +1697,7 @@ importers: version: link:../unocss-config '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) @@ -1651,7 +1712,7 @@ importers: version: 66.6.5 '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1669,7 +1730,7 @@ importers: version: 0.14.5(eslint@8.57.0)(typescript@5.8.3) prettier-plugin-classnames: specifier: 0.9.0 - version: 0.9.0(prettier@3.8.1) + version: 0.9.0(prettier@3.9.4) publint: specifier: ^0.3.12 version: 0.3.12 @@ -1693,25 +1754,25 @@ importers: version: 5.8.3 unocss: specifier: ^66.6.5 - version: 66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-css-injected-by-js: specifier: ^3.5.2 - version: 3.5.2(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 3.5.2(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-externalize-dependencies: specifier: 1.0.1 version: 1.0.1 vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid-svg: specifier: 0.8.1 - version: 0.8.1(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.8.1(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1736,8 +1797,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/repo-utils': specifier: workspace:* version: link:../repo-utils @@ -1749,7 +1810,7 @@ importers: version: link:../tsconfig '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) @@ -1788,7 +1849,7 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1822,8 +1883,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/repo-utils': specifier: workspace:* version: link:../repo-utils @@ -1841,7 +1902,7 @@ importers: version: link:../worker-common '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@types/common-tags': specifier: ^1.8.3 version: 1.8.3 @@ -1853,7 +1914,7 @@ importers: version: 6.9.0(eslint@8.57.0)(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1868,7 +1929,7 @@ importers: version: 1.24.1 playwright: specifier: ^1.51.0 - version: 1.51.0 + version: 1.55.1 publint: specifier: ^0.3.12 version: 0.3.12 @@ -1889,10 +1950,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -1941,8 +2002,8 @@ importers: version: 4.35.0 devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@microblink/feedback-stabilizer': specifier: workspace:^ version: link:../feedback-stabilizer @@ -1963,7 +2024,7 @@ importers: version: link:../ux-common '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@typescript-eslint/eslint-plugin': specifier: ^6.9.0 version: 6.9.0(@typescript-eslint/parser@6.9.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3) @@ -1976,6 +2037,9 @@ importers: '@unocss/preset-uno': specifier: ^66.6.5 version: 66.6.5 + '@vitest/browser': + specifier: ^3.0.8 + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -1993,7 +2057,7 @@ importers: version: 0.14.5(eslint@8.57.0)(typescript@5.8.3) prettier-plugin-classnames: specifier: 0.9.0 - version: 0.9.0(prettier@3.8.1) + version: 0.9.0(prettier@3.9.4) publint: specifier: ^0.3.12 version: 0.3.12 @@ -2017,25 +2081,25 @@ importers: version: 5.8.3 unocss: specifier: ^66.6.5 - version: 66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-css-injected-by-js: specifier: ^3.5.2 - version: 3.5.2(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 3.5.2(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-externalize-dependencies: specifier: 1.0.1 version: 1.0.1 vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid-svg: specifier: 0.8.1 - version: 0.8.1(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.8.1(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -2054,7 +2118,7 @@ importers: version: link:../wasm-common '@vitest/browser-playwright': specifier: ^4.0.8 - version: 4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(playwright@1.51.0)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + version: 4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(playwright@1.55.1)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) arktype: specifier: ^2.2.0 version: 2.2.0 @@ -2063,7 +2127,7 @@ importers: version: 8.0.0 prettier-plugin-jsdoc: specifier: ^1.3.3 - version: 1.8.0(prettier@3.8.1) + version: 1.8.0(prettier@3.9.4) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2081,10 +2145,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^4.0.8 - version: 4.0.18(@types/node@25.2.3)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@types/node@25.9.4)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) zx: specifier: ^8.8.5 version: 8.8.5 @@ -2148,10 +2212,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) zx: specifier: ^8.8.5 version: 8.8.5 @@ -2169,7 +2233,7 @@ importers: version: 8.0.0 prettier-plugin-jsdoc: specifier: ^1.3.3 - version: 1.8.0(prettier@3.8.1) + version: 1.8.0(prettier@3.9.4) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2251,10 +2315,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) zx: specifier: ^8.8.5 version: 8.8.5 @@ -2299,8 +2363,8 @@ importers: version: 4.5.5(react@18.2.0) devDependencies: '@arethetypeswrong/cli': - specifier: 0.18.2 - version: 0.18.2 + specifier: 0.18.3 + version: 0.18.3 '@iconify-json/material-symbols': specifier: ^1.2.14 version: 1.2.14 @@ -2324,7 +2388,7 @@ importers: version: link:../unocss-config '@microsoft/api-extractor': specifier: ^7.52.4 - version: 7.52.4(@types/node@25.2.3) + version: 7.52.4(@types/node@25.9.4) '@solid-primitives/scheduled': specifier: ^1.5.0 version: 1.5.0(solid-js@1.9.11) @@ -2342,7 +2406,7 @@ importers: version: 6.9.0(eslint@8.57.0)(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) concurrently: specifier: ^9.1.2 version: 9.1.2 @@ -2360,10 +2424,10 @@ importers: version: 0.14.5(eslint@8.57.0)(typescript@5.8.3) playwright: specifier: ^1.51.0 - version: 1.51.0 + version: 1.55.1 prettier-plugin-classnames: specifier: 0.9.0 - version: 0.9.0(prettier@3.8.1) + version: 0.9.0(prettier@3.9.4) publint: specifier: ^0.3.12 version: 0.3.12 @@ -2387,28 +2451,28 @@ importers: version: 5.8.3 unocss: specifier: ^66.6.5 - version: 66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) unplugin-icons: specifier: ^22.0.0 version: 22.1.0(@vue/compiler-sfc@3.5.13) vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-css-injected-by-js: specifier: ^3.5.2 - version: 3.5.2(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 3.5.2(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-externalize-dependencies: specifier: 1.0.1 version: 1.0.1 vite-plugin-solid: specifier: ^2.11.10 - version: 2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vite-plugin-solid-svg: specifier: 0.8.1 - version: 0.8.1(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 0.8.1(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) write-package: specifier: ^7.1.0 version: 7.1.0 @@ -2427,7 +2491,7 @@ importers: version: 1.8.2 nanoid: specifier: ^5.0.2 - version: 5.0.2 + version: 5.0.9 devDependencies: '@microblink/tsconfig': specifier: workspace:* @@ -2443,7 +2507,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) packages/feedback-stabilizer: devDependencies: @@ -2467,7 +2531,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) packages/repo-utils: devDependencies: @@ -2476,7 +2540,7 @@ importers: version: 25.2.3 browserslist-to-esbuild: specifier: ^2.1.1 - version: 2.1.1(browserslist@4.28.2) + version: 2.1.1(browserslist@4.28.4) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -2509,7 +2573,7 @@ importers: version: 2.1.5(solid-js@1.9.11) prettier-plugin-classnames: specifier: 0.9.0 - version: 0.9.0(prettier@3.8.1) + version: 0.9.0(prettier@3.9.4) solid-js: specifier: ^1.9.11 version: 1.9.11 @@ -2530,7 +2594,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) packages/tsconfig: {} @@ -2538,7 +2602,7 @@ importers: devDependencies: unocss: specifier: ^66.6.5 - version: 66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) packages/ux-common: dependencies: @@ -2554,7 +2618,7 @@ importers: version: link:../tsconfig '@vitest/browser': specifier: ^3.0.8 - version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + version: 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -2563,7 +2627,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) packages/wasm-common: devDependencies: @@ -2600,7 +2664,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.0.8 - version: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + version: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) packages: @@ -2624,13 +2688,13 @@ packages: '@antfu/utils@8.1.0': resolution: {integrity: sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA==} - '@arethetypeswrong/cli@0.18.2': - resolution: {integrity: sha512-PcFM20JNlevEDKBg4Re29Rtv2xvjvQZzg7ENnrWFSS0PHgdP2njibVFw+dRUhNkPgNfac9iUqO0ohAXqQL4hbw==} + '@arethetypeswrong/cli@0.18.3': + resolution: {integrity: sha512-GeAlc+lUD4gKHD/LDQNvQY30FfQ+xAXg2inbQKUjFZgTOdI5ygEweaOnGHGBPSKXSLGQC7VLhpXu9zMnYk/4sQ==} engines: {node: '>=20'} hasBin: true - '@arethetypeswrong/core@0.18.2': - resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==} + '@arethetypeswrong/core@0.18.3': + resolution: {integrity: sha512-sWBB/tdIktaT5xMq0Dz6CJyqcf6oMNdmiKiuPU1lWoJLTL6gjRSsksBuSgqot21hylkklBQY1wiSu+PkZhW7sw==} engines: {node: '>=20'} '@ark-ui/solid@5.30.0': @@ -2717,8 +2781,8 @@ packages: resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': @@ -2733,8 +2797,8 @@ packages: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.24.7': @@ -2759,8 +2823,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true @@ -2790,12 +2854,12 @@ packages: resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@braidai/lang@1.1.0': - resolution: {integrity: sha512-xyJYkiyNQtTyCLeHxZmOs7rnB94D+N1IjKNArQIh8+8lTBOY7TFgwEV+Ow5a1uaBi5j2w9fLbWcJFTWLDItl5g==} + '@braidai/lang@1.1.2': + resolution: {integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==} '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} @@ -2911,6 +2975,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -2923,6 +2993,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} @@ -2935,6 +3011,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.2': resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} @@ -2947,6 +3029,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.2': resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} @@ -2959,6 +3047,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} @@ -2971,6 +3065,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.2': resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} @@ -2983,6 +3083,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} @@ -2995,6 +3101,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.2': resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} @@ -3007,6 +3119,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} @@ -3019,6 +3137,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.2': resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} @@ -3031,6 +3155,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.2': resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} @@ -3043,6 +3173,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.2': resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} @@ -3055,6 +3191,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.2': resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} @@ -3067,6 +3209,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.2': resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} @@ -3079,6 +3227,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.2': resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} @@ -3091,6 +3245,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.2': resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} @@ -3103,6 +3263,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.2': resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} @@ -3115,6 +3281,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} @@ -3127,6 +3299,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.2': resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} @@ -3139,6 +3317,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} @@ -3151,12 +3335,24 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.2': resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.2': resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} @@ -3169,6 +3365,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} @@ -3181,6 +3383,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} @@ -3193,6 +3401,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.2': resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} @@ -3205,6 +3419,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.2': resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} @@ -3336,8 +3556,8 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@loaderkit/resolve@1.0.4': - resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} + '@loaderkit/resolve@1.0.6': + resolution: {integrity: sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg==} '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -3752,55 +3972,121 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.32.0': resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.32.0': resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.32.0': resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.32.0': resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.32.0': resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.32.0': resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} cpu: [arm] os: [linux] libc: [glibc] + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} + cpu: [arm] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-arm-musleabihf@4.32.0': resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} cpu: [arm] os: [linux] libc: [musl] + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} + cpu: [arm] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-arm64-gnu@4.32.0': resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} cpu: [arm64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-arm64-gnu@4.62.2': + resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-arm64-musl@4.32.0': resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} cpu: [arm64] os: [linux] libc: [musl] + '@rollup/rollup-linux-arm64-musl@4.62.2': + resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.62.2': + resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.62.2': + resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} + cpu: [loong64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-loongarch64-gnu@4.32.0': resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} cpu: [loong64] @@ -3813,45 +4099,117 @@ packages: os: [linux] libc: [glibc] + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.62.2': + resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} + cpu: [ppc64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-riscv64-gnu@4.32.0': resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} cpu: [riscv64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.62.2': + resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-s390x-gnu@4.32.0': resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} cpu: [s390x] os: [linux] libc: [glibc] + '@rollup/rollup-linux-s390x-gnu@4.62.2': + resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-x64-gnu@4.32.0': resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} cpu: [x64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-x64-gnu@4.62.2': + resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-x64-musl@4.32.0': resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} cpu: [x64] os: [linux] libc: [musl] + '@rollup/rollup-linux-x64-musl@4.62.2': + resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.62.2': + resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.62.2': + resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.32.0': resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.62.2': + resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.32.0': resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.62.2': + resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.62.2': + resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.32.0': resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.62.2': + resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} + cpu: [x64] + os: [win32] + '@rushstack/node-core-library@5.13.0': resolution: {integrity: sha512-IGVhy+JgUacAdCGXKUrRhwHMTzqhWwZUI+qEPcdzsb80heOw0QPbhhoVsoiMF7Klp8eYsp7hzpScMXmOa3Uhfg==} peerDependencies: @@ -3978,6 +4336,36 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@turbo/darwin-64@2.9.14': + resolution: {integrity: sha512-t7QiPflaEyBE4oayeZtSmu4mEfjgIrcNlNNl1z1dmIVPqEdtA7+CfTf8d7KXsOGPh6aNgWjKxyvQg9uGfDQF+A==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.9.14': + resolution: {integrity: sha512-d23147mC9BsCPA9mJ0h/ubcpbRgcJBXbcG3+Vq7YLhjz3IXuvQsJ1UXH8f4MD76ZjJ4m/E4aRdJV+MW88CDfbw==} + cpu: [arm64] + os: [darwin] + + '@turbo/linux-64@2.9.14': + resolution: {integrity: sha512-P3ZKB5tuUDdDQWuAsACGUR1qv9W7BNWxdxqVJ0kZNuNNPRaVYTPPikLcp79+GiEcW3npsR+KyP38lnQiBc5aSA==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.9.14': + resolution: {integrity: sha512-ZRTlzcUMrrPv9ZuDzRF9n60Ym13bKeG9jDB8WjxyLhWNzV+AJQN+zdpIk3NJYf2zQsGUm1mNar2P0elRzLw25g==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.9.14': + resolution: {integrity: sha512-exanwN6sIduZwykYeiTQj8kCmOhazP5WOz3bvXMcYtjhL6Z3iRWLewKrXCBq0bqwSP3iBMb/AerRCnHI4lx46A==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.9.14': + resolution: {integrity: sha512-fVdCsnmYoKICsycbWuuGp6Jvi51/3G/UluFWuAUCvR8PIW5IJkAk5BM9UF8PSm0Q2IphWHFZjYEgjHsh3B9y/g==} + cpu: [arm64] + os: [win32] + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -4017,6 +4405,9 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -4035,6 +4426,9 @@ packages: '@types/node@25.2.3': resolution: {integrity: sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==} + '@types/node@25.9.4': + resolution: {integrity: sha512-dszCsrKb5U7ZsVZBWiHFklTloVl0mSEnWH/iZXfZUlI4rzCUnsvGmgqfuVRHL54ugE7/wRuxEIXRa2iMZ+BG6g==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4081,10 +4475,6 @@ packages: resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@8.24.0': - resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.56.1': resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4109,10 +4499,6 @@ packages: resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@8.24.0': - resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.56.1': resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4126,12 +4512,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.24.0': - resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@8.56.1': resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4140,16 +4520,9 @@ packages: '@typescript-eslint/utils@6.9.0': resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@8.24.0': - resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + eslint: ^7.0.0 || ^8.0.0 '@typescript-eslint/utils@8.56.1': resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} @@ -4162,10 +4535,6 @@ packages: resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@8.24.0': - resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.56.1': resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4647,6 +5016,10 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -4655,6 +5028,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -4734,6 +5111,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + baseline-browser-mapping@2.11.1: + resolution: {integrity: sha512-HYXq73DDpCtNzOmrFsm9eSwCvWCql0RzqjpDzXN9EadiLJ4DNat0nsZ/Bzmy+Ud12mb4/zKDY0cQ805ZzN+i0A==} + engines: {node: '>=6.0.0'} + hasBin: true + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -4774,6 +5156,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.4: + resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -4801,6 +5188,9 @@ packages: caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001806: + resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==} + chai@5.2.0: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} @@ -4829,6 +5219,10 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -5163,6 +5557,9 @@ packages: electron-to-chromium@1.5.367: resolution: {integrity: sha512-4Mk/mrynCNQ+atY40D3UpmhLWB6AHMbYMlIrPhHcMF6x0L7O0b052FCAsxw1LlaR++UFuNg3D/A6XCuGDa0guQ==} + electron-to-chromium@1.5.396: + resolution: {integrity: sha512-yHiw2Y3C3H9U6TMbOfoWK/BPreiOPXRfTWPBwQBoZG6/8TB6eOPnsy5oaRYuatR7Fw2SJ4kKforgufeo7fq0EQ==} + emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -5218,6 +5615,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -5270,10 +5672,6 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@5.0.1: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -5360,8 +5758,8 @@ packages: picomatch: optional: true - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -5403,6 +5801,10 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + formatly@0.3.0: resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} engines: {node: '>=18.3.0'} @@ -5537,6 +5939,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} @@ -5858,6 +6264,10 @@ packages: resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} engines: {node: 20 || >=22} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -6102,18 +6512,18 @@ packages: resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} engines: {node: '>=20.17'} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.2: - resolution: {integrity: sha512-2ustYUX1R2rL/Br5B/FMhi8d5/QzvkJ912rBYxskcpu0myTHzSZfTr1LAS2Sm7jxRUObRrSBFoyzwAhL49aVSg==} + nanoid@5.0.9: + resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} engines: {node: ^18 || >=20} hasBin: true @@ -6138,6 +6548,10 @@ packages: resolution: {integrity: sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==} engines: {node: '>=18'} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} + normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -6149,8 +6563,8 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.23: - resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + nwsapi@2.2.24: + resolution: {integrity: sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -6327,6 +6741,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -6343,13 +6761,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.51.0: - resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} + playwright-core@1.55.1: + resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==} engines: {node: '>=18'} hasBin: true - playwright@1.51.0: - resolution: {integrity: sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==} + playwright@1.55.1: + resolution: {integrity: sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==} engines: {node: '>=18'} hasBin: true @@ -6357,12 +6775,16 @@ packages: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.16: + resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.22: + resolution: {integrity: sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -6401,6 +6823,11 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.9.4: + resolution: {integrity: sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==} + engines: {node: '>=14'} + hasBin: true + pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6551,6 +6978,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.62.2: + resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} @@ -6604,11 +7036,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.0: - resolution: {integrity: sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -6619,6 +7046,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + seroval-plugins@1.5.0: resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} engines: {node: '>=10'} @@ -6909,6 +7341,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6966,12 +7402,6 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -6995,38 +7425,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.8.11: - resolution: {integrity: sha512-XKaCWaz4OCt77oYYvGCIRpvYD4c/aNaKjRkUpv+e8rN3RZb+5Xsyew4yRO+gaHdMIUhQznXNXfHlhs+/p7lIhA==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.8.11: - resolution: {integrity: sha512-VvynLHGUNvQ9k7GZjRPSsRcK4VkioTfFb7O7liAk4nHKjEcMdls7GqxzjVWgJiKz3hWmQGaP9hRa9UUnhVWCxA==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.8.11: - resolution: {integrity: sha512-cbSn37dcm+EmkQ7DD0euy7xV7o2el4GAOr1XujvkAyKjjNvQ+6QIUeDgQcwAx3D17zPpDvfDMJY2dLQadWnkmQ==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.8.11: - resolution: {integrity: sha512-+trymp2s2aBrhS04l6qFxcExzZ8ffndevuUB9c5RCeqsVpZeiWuGQlWNm5XjOmzoMayxRARZ5ma7yiWbGMiLqQ==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.8.11: - resolution: {integrity: sha512-3kJjFSM4yw1n9Uzmi+XkAUgCae19l/bH6RJ442xo7mnZm0tpOjo33F+FYHoSVpIWVMd0HG0LDccyafPSdylQbA==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.8.11: - resolution: {integrity: sha512-JOM4uF2vuLsJUvibdR6X9QqdZr6BhC6Nhlrw4LKFPsXZZI/9HHLoqAiYRpE4MuzIwldCH/jVySnWXrI1SKto0g==} - cpu: [arm64] - os: [win32] - - turbo@2.8.11: - resolution: {integrity: sha512-H+rwSHHPLoyPOSoHdmI1zY0zy0GGj1Dmr7SeJW+nZiWLz2nex8EJ+fkdVabxXFMNEux+aywI4Sae8EqhmnOv4A==} + turbo@2.9.14: + resolution: {integrity: sha512-BQqXRr4UoWI3UPFrtznCLykYHxwxWh53iCB57x092jPMjIlW1wnm3N895g5irpiXmnxUhREBB0n6+y8BHhs4nw==} hasBin: true type-check@0.4.0: @@ -7098,6 +7498,9 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} @@ -7285,6 +7688,46 @@ packages: yaml: optional: true + vite@6.4.3: + resolution: {integrity: sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitefu@1.0.4: resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} peerDependencies: @@ -7459,8 +7902,8 @@ packages: utf-8-validate: optional: true - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7510,8 +7953,8 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + yargs@16.2.2: + resolution: {integrity: sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==} engines: {node: '>=10'} yargs@17.7.2: @@ -7578,24 +8021,24 @@ snapshots: '@antfu/utils@8.1.0': {} - '@arethetypeswrong/cli@0.18.2': + '@arethetypeswrong/cli@0.18.3': dependencies: - '@arethetypeswrong/core': 0.18.2 + '@arethetypeswrong/core': 0.18.3 chalk: 4.1.2 cli-table3: 0.6.5 commander: 10.0.1 marked: 9.1.6 marked-terminal: 7.3.0(marked@9.1.6) - semver: 7.7.1 + semver: 7.8.5 - '@arethetypeswrong/core@0.18.2': + '@arethetypeswrong/core@0.18.3': dependencies: '@andrewbranch/untar.js': 1.0.3 - '@loaderkit/resolve': 1.0.4 + '@loaderkit/resolve': 1.0.6 cjs-module-lexer: 1.4.3 - fflate: 0.8.2 - lru-cache: 11.0.2 - semver: 7.7.1 + fflate: 0.8.3 + lru-cache: 11.5.2 + semver: 7.8.5 typescript: 5.6.1-rc validate-npm-package-name: 5.0.1 @@ -7780,7 +8223,7 @@ snapshots: '@babel/helper-string-parser@7.24.7': {} - '@babel/helper-string-parser@7.27.1': + '@babel/helper-string-parser@7.29.7': optional: true '@babel/helper-validator-identifier@7.22.20': {} @@ -7789,7 +8232,7 @@ snapshots: '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-identifier@7.28.5': + '@babel/helper-validator-identifier@7.29.7': optional: true '@babel/helper-validator-option@7.24.7': {} @@ -7814,9 +8257,9 @@ snapshots: dependencies: '@babel/types': 7.24.7 - '@babel/parser@7.29.2': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 optional: true '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.24.7)': @@ -7861,13 +8304,13 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@babel/types@7.29.0': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 optional: true - '@braidai/lang@1.1.0': {} + '@braidai/lang@1.1.2': {} '@bundled-es-modules/cookie@2.0.1': dependencies: @@ -8075,153 +8518,231 @@ snapshots: '@esbuild/aix-ppc64@0.25.1': optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.27.2': optional: true '@esbuild/android-arm64@0.25.1': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.27.2': optional: true '@esbuild/android-arm@0.25.1': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.2': optional: true '@esbuild/android-x64@0.25.1': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.2': optional: true '@esbuild/darwin-arm64@0.25.1': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.2': optional: true '@esbuild/darwin-x64@0.25.1': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.2': optional: true '@esbuild/freebsd-arm64@0.25.1': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.2': optional: true '@esbuild/freebsd-x64@0.25.1': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.2': optional: true '@esbuild/linux-arm64@0.25.1': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.2': optional: true '@esbuild/linux-arm@0.25.1': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.2': optional: true '@esbuild/linux-ia32@0.25.1': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.2': optional: true '@esbuild/linux-loong64@0.25.1': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.2': optional: true '@esbuild/linux-mips64el@0.25.1': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.2': optional: true '@esbuild/linux-ppc64@0.25.1': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.2': optional: true '@esbuild/linux-riscv64@0.25.1': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.2': optional: true '@esbuild/linux-s390x@0.25.1': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.2': optional: true '@esbuild/linux-x64@0.25.1': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.2': optional: true '@esbuild/netbsd-arm64@0.25.1': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.2': optional: true '@esbuild/netbsd-x64@0.25.1': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.2': optional: true '@esbuild/openbsd-arm64@0.25.1': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.2': optional: true '@esbuild/openbsd-x64@0.25.1': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.2': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.2': optional: true '@esbuild/sunos-x64@0.25.1': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.2': optional: true '@esbuild/win32-arm64@0.25.1': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.2': optional: true '@esbuild/win32-ia32@0.25.1': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.2': optional: true '@esbuild/win32-x64@0.25.1': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.2': optional: true @@ -8318,6 +8839,13 @@ snapshots: '@inquirer/core': 10.1.0(@types/node@25.2.3) '@inquirer/type': 3.0.1(@types/node@25.2.3) '@types/node': 25.2.3 + optional: true + + '@inquirer/confirm@5.0.2(@types/node@25.9.4)': + dependencies: + '@inquirer/core': 10.1.0(@types/node@25.9.4) + '@inquirer/type': 3.0.1(@types/node@25.9.4) + '@types/node': 25.9.4 '@inquirer/core@10.1.0(@types/node@25.2.3)': dependencies: @@ -8332,6 +8860,21 @@ snapshots: yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' + optional: true + + '@inquirer/core@10.1.0(@types/node@25.9.4)': + dependencies: + '@inquirer/figures': 1.0.8 + '@inquirer/type': 3.0.1(@types/node@25.9.4) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + transitivePeerDependencies: + - '@types/node' '@inquirer/external-editor@1.0.3(@types/node@25.2.3)': dependencies: @@ -8345,6 +8888,11 @@ snapshots: '@inquirer/type@3.0.1(@types/node@25.2.3)': dependencies: '@types/node': 25.2.3 + optional: true + + '@inquirer/type@3.0.1(@types/node@25.9.4)': + dependencies: + '@types/node': 25.9.4 '@internationalized/date@3.10.0': dependencies: @@ -8387,9 +8935,9 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@loaderkit/resolve@1.0.4': + '@loaderkit/resolve@1.0.6': dependencies: - '@braidai/lang': 1.1.0 + '@braidai/lang': 1.1.2 '@manypkg/find-root@1.1.0': dependencies: @@ -8409,23 +8957,23 @@ snapshots: '@mdn/browser-compat-data@5.7.6': {} - '@microsoft/api-extractor-model@7.30.5(@types/node@25.2.3)': + '@microsoft/api-extractor-model@7.30.5(@types/node@25.9.4)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.0(@types/node@25.2.3) + '@rushstack/node-core-library': 5.13.0(@types/node@25.9.4) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.4(@types/node@25.2.3)': + '@microsoft/api-extractor@7.52.4(@types/node@25.9.4)': dependencies: - '@microsoft/api-extractor-model': 7.30.5(@types/node@25.2.3) + '@microsoft/api-extractor-model': 7.30.5(@types/node@25.9.4) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.0(@types/node@25.2.3) + '@rushstack/node-core-library': 5.13.0(@types/node@25.9.4) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.2(@types/node@25.2.3) - '@rushstack/ts-command-line': 4.23.7(@types/node@25.2.3) + '@rushstack/terminal': 0.15.2(@types/node@25.9.4) + '@rushstack/ts-command-line': 4.23.7(@types/node@25.9.4) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -8716,61 +9264,136 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.32.0': optional: true + '@rollup/rollup-android-arm-eabi@4.62.2': + optional: true + '@rollup/rollup-android-arm64@4.32.0': optional: true + '@rollup/rollup-android-arm64@4.62.2': + optional: true + '@rollup/rollup-darwin-arm64@4.32.0': optional: true + '@rollup/rollup-darwin-arm64@4.62.2': + optional: true + '@rollup/rollup-darwin-x64@4.32.0': optional: true + '@rollup/rollup-darwin-x64@4.62.2': + optional: true + '@rollup/rollup-freebsd-arm64@4.32.0': optional: true + '@rollup/rollup-freebsd-arm64@4.62.2': + optional: true + '@rollup/rollup-freebsd-x64@4.32.0': optional: true + '@rollup/rollup-freebsd-x64@4.62.2': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.32.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.32.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.32.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.62.2': + optional: true + '@rollup/rollup-linux-arm64-musl@4.32.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.62.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.62.2': + optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.32.0': optional: true '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.62.2': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.32.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.62.2': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.32.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.62.2': + optional: true + '@rollup/rollup-linux-x64-gnu@4.32.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.62.2': + optional: true + '@rollup/rollup-linux-x64-musl@4.32.0': optional: true + '@rollup/rollup-linux-x64-musl@4.62.2': + optional: true + + '@rollup/rollup-openbsd-x64@4.62.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.62.2': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.32.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.62.2': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.32.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.62.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.62.2': + optional: true + '@rollup/rollup-win32-x64-msvc@4.32.0': optional: true - '@rushstack/node-core-library@5.13.0(@types/node@25.2.3)': + '@rollup/rollup-win32-x64-msvc@4.62.2': + optional: true + + '@rushstack/node-core-library@5.13.0(@types/node@25.9.4)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -8781,23 +9404,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 25.2.3 + '@types/node': 25.9.4 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.2(@types/node@25.2.3)': + '@rushstack/terminal@0.15.2(@types/node@25.9.4)': dependencies: - '@rushstack/node-core-library': 5.13.0(@types/node@25.2.3) + '@rushstack/node-core-library': 5.13.0(@types/node@25.9.4) supports-color: 8.1.1 optionalDependencies: - '@types/node': 25.2.3 + '@types/node': 25.9.4 - '@rushstack/ts-command-line@4.23.7(@types/node@25.2.3)': + '@rushstack/ts-command-line@4.23.7(@types/node@25.9.4)': dependencies: - '@rushstack/terminal': 0.15.2(@types/node@25.2.3) + '@rushstack/terminal': 0.15.2(@types/node@25.9.4) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -8907,6 +9530,24 @@ snapshots: '@trysound/sax@0.2.0': {} + '@turbo/darwin-64@2.9.14': + optional: true + + '@turbo/darwin-arm64@2.9.14': + optional: true + + '@turbo/linux-64@2.9.14': + optional: true + + '@turbo/linux-arm64@2.9.14': + optional: true + + '@turbo/windows-64@2.9.14': + optional: true + + '@turbo/windows-arm64@2.9.14': + optional: true + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.6.2 @@ -8954,6 +9595,8 @@ snapshots: '@types/estree@1.0.6': {} + '@types/estree@1.0.9': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -8970,7 +9613,11 @@ snapshots: '@types/node@25.2.3': dependencies: - undici-types: 7.16.0 + undici-types: 7.16.0 + + '@types/node@25.9.4': + dependencies: + undici-types: 7.24.6 '@types/normalize-package-data@2.4.4': {} @@ -9029,11 +9676,6 @@ snapshots: '@typescript-eslint/types': 6.9.0 '@typescript-eslint/visitor-keys': 6.9.0 - '@typescript-eslint/scope-manager@8.24.0': - dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 - '@typescript-eslint/scope-manager@8.56.1': dependencies: '@typescript-eslint/types': 8.56.1 @@ -9057,8 +9699,6 @@ snapshots: '@typescript-eslint/types@6.9.0': {} - '@typescript-eslint/types@8.24.0': {} - '@typescript-eslint/types@8.56.1': {} '@typescript-eslint/typescript-estree@6.9.0(typescript@5.8.3)': @@ -9068,27 +9708,13 @@ snapshots: debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.1 + semver: 7.7.4 ts-api-utils: 1.0.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.24.0(typescript@5.8.3)': - dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 - debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.56.1(typescript@5.8.3) @@ -9098,7 +9724,7 @@ snapshots: debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-api-utils: 2.4.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -9113,22 +9739,11 @@ snapshots: '@typescript-eslint/types': 6.9.0 '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.8.3) eslint: 8.57.0 - semver: 7.7.1 + semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.24.0(eslint@8.57.0)(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.8.3) - eslint: 8.57.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.56.1(eslint@8.57.0)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.0) @@ -9145,11 +9760,6 @@ snapshots: '@typescript-eslint/types': 6.9.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.24.0': - dependencies: - '@typescript-eslint/types': 8.24.0 - eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.56.1': dependencies: '@typescript-eslint/types': 8.56.1 @@ -9296,7 +9906,7 @@ snapshots: dependencies: '@unocss/core': 66.6.5 - '@unocss/vite@66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))': + '@unocss/vite@66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.6.4 @@ -9307,22 +9917,22 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.15 unplugin-utils: 0.3.1 - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/browser-playwright@4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(playwright@1.51.0)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': + '@vitest/browser-playwright@4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(playwright@1.55.1)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': dependencies: - '@vitest/browser': 4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) - '@vitest/mocker': 4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) - playwright: 1.51.0 + '@vitest/browser': 4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + '@vitest/mocker': 4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + playwright: 1.55.1 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@25.2.3)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@types/node@25.9.4)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8)': + '@vitest/browser@3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.55.1)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8)': dependencies: '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) '@vitest/mocker': 3.0.8(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) @@ -9334,7 +9944,29 @@ snapshots: vitest: 3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) ws: 8.18.1 optionalDependencies: - playwright: 1.51.0 + playwright: 1.55.1 + transitivePeerDependencies: + - '@testing-library/dom' + - '@types/node' + - bufferutil + - typescript + - utf-8-validate + - vite + optional: true + + '@vitest/browser@3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8)': + dependencies: + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) + '@vitest/mocker': 3.0.8(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/utils': 3.0.8 + magic-string: 0.30.17 + msw: 2.7.3(@types/node@25.9.4)(typescript@5.8.3) + sirv: 3.0.1 + tinyrainbow: 2.0.0 + vitest: 3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + ws: 8.18.1 + optionalDependencies: + playwright: 1.55.1 transitivePeerDependencies: - '@testing-library/dom' - '@types/node' @@ -9343,16 +9975,16 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': + '@vitest/browser@4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18)': dependencies: - '@vitest/mocker': 4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/utils': 4.0.18 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@25.2.3)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@types/node@25.9.4)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -9385,14 +10017,32 @@ snapshots: msw: 2.7.3(@types/node@25.2.3)(typescript@5.8.3) vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@3.0.8(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.2.1(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 3.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.3(@types/node@25.9.4)(typescript@5.8.3) + vite: 6.2.1(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/mocker@3.0.8(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 3.0.8 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.7.3(@types/node@25.9.4)(typescript@5.8.3) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + + '@vitest/mocker@4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.7.3(@types/node@25.2.3)(typescript@5.8.3) - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + msw: 2.7.3(@types/node@25.9.4)(typescript@5.8.3) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@3.0.8': dependencies: @@ -9443,7 +10093,7 @@ snapshots: '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -9458,14 +10108,14 @@ snapshots: '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.8 + postcss: 8.5.22 source-map-js: 1.2.1 optional: true @@ -10081,10 +10731,16 @@ snapshots: dependencies: environment: 1.1.0 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -10161,6 +10817,8 @@ snapshots: baseline-browser-mapping@2.10.33: {} + baseline-browser-mapping@2.11.1: {} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -10197,9 +10855,9 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist-to-esbuild@2.1.1(browserslist@4.28.2): + browserslist-to-esbuild@2.1.1(browserslist@4.28.4): dependencies: - browserslist: 4.28.2 + browserslist: 4.28.4 meow: 13.2.0 browserslist@4.28.2: @@ -10210,6 +10868,14 @@ snapshots: node-releases: 2.0.47 update-browserslist-db: 1.2.3(browserslist@4.28.2) + browserslist@4.28.4: + dependencies: + baseline-browser-mapping: 2.11.1 + caniuse-lite: 1.0.30001806 + electron-to-chromium: 1.5.396 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.4) + bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -10229,6 +10895,8 @@ snapshots: caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001806: {} + chai@5.2.0: dependencies: assertion-error: 2.0.1 @@ -10258,6 +10926,8 @@ snapshots: chalk@5.4.1: {} + chalk@5.6.2: {} + char-regex@1.0.2: {} character-entities@2.0.2: {} @@ -10291,7 +10961,7 @@ snapshots: mz: 2.7.0 parse5: 5.1.1 parse5-htmlparser2-tree-adapter: 6.0.1 - yargs: 16.2.0 + yargs: 16.2.2 cli-table3@0.6.5: dependencies: @@ -10555,6 +11225,8 @@ snapshots: electron-to-chromium@1.5.367: {} + electron-to-chromium@1.5.396: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -10622,6 +11294,35 @@ snapshots: '@esbuild/win32-ia32': 0.25.1 '@esbuild/win32-x64': 0.25.1 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -10679,7 +11380,7 @@ snapshots: eslint-plugin-solid@0.14.5(eslint@8.57.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.24.0(eslint@8.57.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.56.1(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 estraverse: 5.3.0 is-html: 2.0.0 @@ -10697,8 +11398,6 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} - eslint-visitor-keys@5.0.1: {} eslint@8.57.0: @@ -10817,7 +11516,11 @@ snapshots: optionalDependencies: picomatch: 4.0.3 - fflate@0.8.2: {} + fdir@6.5.0(picomatch@4.0.5): + optionalDependencies: + picomatch: 4.0.5 + + fflate@0.8.3: {} file-entry-cache@6.0.1: dependencies: @@ -10862,6 +11565,15 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + optional: true + formatly@0.3.0: dependencies: fd-package-json: 2.0.0 @@ -11000,6 +11712,11 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + optional: true + headers-polyfill@4.0.3: {} hey-listen@1.0.8: {} @@ -11165,12 +11882,12 @@ snapshots: cssstyle: 4.6.0 data-urls: 5.0.0 decimal.js: 10.6.0 - form-data: 4.0.5 + form-data: 4.0.6 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.23 + nwsapi: 2.2.24 parse5: 7.3.0 rrweb-cssom: 0.7.1 saxes: 6.0.0 @@ -11181,7 +11898,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.20.0 + ws: 8.21.1 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -11305,6 +12022,8 @@ snapshots: lru-cache@11.0.2: {} + lru-cache@11.5.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -11346,9 +12065,9 @@ snapshots: marked-terminal@7.3.0(marked@9.1.6): dependencies: - ansi-escapes: 7.0.0 - ansi-regex: 6.1.0 - chalk: 5.4.1 + ansi-escapes: 7.3.0 + ansi-regex: 6.2.2 + chalk: 5.6.2 cli-highlight: 2.1.11 cli-table3: 0.6.5 marked: 9.1.6 @@ -11634,6 +12353,32 @@ snapshots: typescript: 5.8.3 transitivePeerDependencies: - '@types/node' + optional: true + + msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.0.2(@types/node@25.9.4) + '@mswjs/interceptors': 0.37.3 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.9.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.35.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@types/node' mute-stream@2.0.0: {} @@ -11645,12 +12390,12 @@ snapshots: nano-spawn@2.0.0: {} - nanoid@3.3.11: - optional: true + nanoid@3.3.15: {} - nanoid@3.3.8: {} + nanoid@3.3.16: + optional: true - nanoid@5.0.2: {} + nanoid@5.0.9: {} natural-compare@1.4.0: {} @@ -11670,10 +12415,12 @@ snapshots: node-releases@2.0.47: {} + node-releases@2.0.51: {} + normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.0 + semver: 7.7.4 validate-npm-package-license: 3.0.4 npm-run-path@4.0.1: @@ -11684,7 +12431,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.23: + nwsapi@2.2.24: optional: true object-assign@4.1.1: {} @@ -11880,6 +12627,8 @@ snapshots: picomatch@4.0.3: {} + picomatch@4.0.5: {} + pidtree@0.6.0: {} pify@4.0.1: {} @@ -11894,29 +12643,35 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - playwright-core@1.51.0: {} + playwright-core@1.55.1: {} - playwright@1.51.0: + playwright@1.55.1: dependencies: - playwright-core: 1.51.0 + playwright-core: 1.55.1 optionalDependencies: fsevents: 2.3.2 pngjs@7.0.0: {} - postcss@8.5.3: + postcss@8.5.16: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.15 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.8: + postcss@8.5.22: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.16 picocolors: 1.1.1 source-map-js: 1.2.1 optional: true + postcss@8.5.3: + dependencies: + nanoid: 3.3.15 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier-plugin-classnames@0.9.0(prettier@3.8.1): @@ -11924,12 +12679,17 @@ snapshots: prettier: 3.8.1 zod: 3.22.4 - prettier-plugin-jsdoc@1.8.0(prettier@3.8.1): + prettier-plugin-classnames@0.9.0(prettier@3.9.4): + dependencies: + prettier: 3.9.4 + zod: 3.22.4 + + prettier-plugin-jsdoc@1.8.0(prettier@3.9.4): dependencies: binary-searching: 2.0.5 comment-parser: 1.4.1 mdast-util-from-markdown: 2.0.2 - prettier: 3.8.1 + prettier: 3.9.4 transitivePeerDependencies: - supports-color @@ -11937,6 +12697,8 @@ snapshots: prettier@3.8.1: {} + prettier@3.9.4: {} + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 @@ -12090,6 +12852,37 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.32.0 fsevents: 2.3.3 + rollup@4.62.2: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.62.2 + '@rollup/rollup-android-arm64': 4.62.2 + '@rollup/rollup-darwin-arm64': 4.62.2 + '@rollup/rollup-darwin-x64': 4.62.2 + '@rollup/rollup-freebsd-arm64': 4.62.2 + '@rollup/rollup-freebsd-x64': 4.62.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 + '@rollup/rollup-linux-arm-musleabihf': 4.62.2 + '@rollup/rollup-linux-arm64-gnu': 4.62.2 + '@rollup/rollup-linux-arm64-musl': 4.62.2 + '@rollup/rollup-linux-loong64-gnu': 4.62.2 + '@rollup/rollup-linux-loong64-musl': 4.62.2 + '@rollup/rollup-linux-ppc64-gnu': 4.62.2 + '@rollup/rollup-linux-ppc64-musl': 4.62.2 + '@rollup/rollup-linux-riscv64-gnu': 4.62.2 + '@rollup/rollup-linux-riscv64-musl': 4.62.2 + '@rollup/rollup-linux-s390x-gnu': 4.62.2 + '@rollup/rollup-linux-x64-gnu': 4.62.2 + '@rollup/rollup-linux-x64-musl': 4.62.2 + '@rollup/rollup-openbsd-x64': 4.62.2 + '@rollup/rollup-openharmony-arm64': 4.62.2 + '@rollup/rollup-win32-arm64-msvc': 4.62.2 + '@rollup/rollup-win32-ia32-msvc': 4.62.2 + '@rollup/rollup-win32-x64-gnu': 4.62.2 + '@rollup/rollup-win32-x64-msvc': 4.62.2 + fsevents: 2.3.3 + rrweb-cssom@0.7.1: optional: true @@ -12139,12 +12932,12 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.7.0: {} - semver@7.7.1: {} semver@7.7.4: {} + semver@7.8.5: {} + seroval-plugins@1.5.0(seroval@1.5.0): dependencies: seroval: 1.5.0 @@ -12429,6 +13222,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + tinypool@1.0.2: {} tinyrainbow@2.0.0: {} @@ -12476,10 +13274,6 @@ snapshots: dependencies: typescript: 5.8.3 - ts-api-utils@2.0.1(typescript@5.8.3): - dependencies: - typescript: 5.8.3 - ts-api-utils@2.4.0(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -12499,32 +13293,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo-darwin-64@2.8.11: - optional: true - - turbo-darwin-arm64@2.8.11: - optional: true - - turbo-linux-64@2.8.11: - optional: true - - turbo-linux-arm64@2.8.11: - optional: true - - turbo-windows-64@2.8.11: - optional: true - - turbo-windows-arm64@2.8.11: - optional: true - - turbo@2.8.11: + turbo@2.9.14: optionalDependencies: - turbo-darwin-64: 2.8.11 - turbo-darwin-arm64: 2.8.11 - turbo-linux-64: 2.8.11 - turbo-linux-arm64: 2.8.11 - turbo-windows-64: 2.8.11 - turbo-windows-arm64: 2.8.11 + '@turbo/darwin-64': 2.9.14 + '@turbo/darwin-arm64': 2.9.14 + '@turbo/linux-64': 2.9.14 + '@turbo/linux-arm64': 2.9.14 + '@turbo/windows-64': 2.9.14 + '@turbo/windows-arm64': 2.9.14 type-check@0.4.0: dependencies: @@ -12580,6 +13356,8 @@ snapshots: undici-types@7.16.0: {} + undici-types@7.24.6: {} + unicode-emoji-modifier-base@1.0.0: {} unicorn-magic@0.1.0: {} @@ -12594,7 +13372,7 @@ snapshots: universalify@2.0.1: {} - unocss@66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + unocss@66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@unocss/cli': 66.6.5 '@unocss/core': 66.6.5 @@ -12612,7 +13390,7 @@ snapshots: '@unocss/transformer-compile-class': 66.6.5 '@unocss/transformer-directives': 66.6.5 '@unocss/transformer-variant-group': 66.6.5 - '@unocss/vite': 66.6.5(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + '@unocss/vite': 66.6.5(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - vite @@ -12631,7 +13409,7 @@ snapshots: unplugin-utils@0.3.1: dependencies: pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.5 unplugin@2.2.0: dependencies: @@ -12644,6 +13422,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.4): + dependencies: + browserslist: 4.28.4 + escalade: 3.2.0 + picocolors: 1.1.1 + update-check@1.5.4: dependencies: registry-auth-token: 3.3.2 @@ -12681,7 +13465,7 @@ snapshots: debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.3(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -12696,33 +13480,54 @@ snapshots: - tsx - yaml - vite-plugin-css-injected-by-js@3.5.2(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-node@3.0.8(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-plugin-css-injected-by-js@3.5.2(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + dependencies: + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-externalize-dependencies@1.0.1: {} - vite-plugin-mkcert@1.17.10(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-mkcert@1.17.10(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: axios: 1.13.5(debug@4.4.3) debug: 4.4.3 picocolors: 1.1.1 - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - vite-plugin-qrcode@0.3.0(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-qrcode@0.3.0(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: qrcode-terminal: 0.12.0 - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-solid-svg@0.8.1(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-solid-svg@0.8.1(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: solid-js: 1.9.11 svgo: 3.3.2 - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@babel/core': 7.24.7 '@types/babel__core': 7.20.5 @@ -12730,8 +13535,8 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.11 solid-refresh: 0.6.3(solid-js@1.9.11) - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.0.4(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.0.4(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) transitivePeerDependencies: - supports-color @@ -12748,9 +13553,54 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.0.4(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + vite@6.2.1(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.32.0 optionalDependencies: - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + '@types/node': 25.9.4 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.85.0 + tsx: 4.21.0 + yaml: 2.8.2 + + vite@6.4.3(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + postcss: 8.5.16 + rollup: 4.62.2 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 25.2.3 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.85.0 + tsx: 4.21.0 + yaml: 2.8.2 + + vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 + postcss: 8.5.16 + rollup: 4.62.2 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 25.9.4 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.85.0 + tsx: 4.21.0 + yaml: 2.8.2 + + vitefu@1.0.4(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)): + optionalDependencies: + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) vitest@3.0.8(@types/debug@4.1.12)(@types/node@25.2.3)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: @@ -12777,7 +13627,49 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 25.2.3 - '@vitest/browser': 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.51.0)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + '@vitest/browser': 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.2.3)(playwright@1.55.1)(typescript@5.8.3)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) + happy-dom: 15.7.4 + jsdom: 25.0.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vitest@3.0.8(@types/debug@4.1.12)(@types/node@25.9.4)(@vitest/browser@3.0.8)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): + dependencies: + '@vitest/expect': 3.0.8 + '@vitest/mocker': 3.0.8(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.2.1(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.1(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.0.8(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 25.9.4 + '@vitest/browser': 3.0.8(@testing-library/dom@10.4.0)(@types/node@25.9.4)(playwright@1.55.1)(typescript@5.8.3)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@3.0.8) happy-dom: 15.7.4 jsdom: 25.0.1 transitivePeerDependencies: @@ -12794,10 +13686,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@types/node@25.2.3)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@types/node@25.9.4)(@vitest/browser-playwright@4.0.18)(happy-dom@15.7.4)(jiti@2.6.1)(jsdom@25.0.1)(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -12814,11 +13706,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.2.3 - '@vitest/browser-playwright': 4.0.18(msw@2.7.3(@types/node@25.2.3)(typescript@5.8.3))(playwright@1.51.0)(vite@6.2.1(@types/node@25.2.3)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) + '@types/node': 25.9.4 + '@vitest/browser-playwright': 4.0.18(msw@2.7.3(@types/node@25.9.4)(typescript@5.8.3))(playwright@1.55.1)(vite@6.4.3(@types/node@25.9.4)(jiti@2.6.1)(sass@1.85.0)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18) happy-dom: 15.7.4 jsdom: 25.0.1 transitivePeerDependencies: @@ -12928,7 +13820,7 @@ snapshots: ws@8.18.3: {} - ws@8.20.0: + ws@8.21.1: optional: true wsl-utils@0.1.0: @@ -12955,10 +13847,10 @@ snapshots: yargs-parser@21.1.1: {} - yargs@16.2.0: + yargs@16.2.2: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/release-manifest.json b/release-manifest.json new file mode 100644 index 00000000..6ad700ca --- /dev/null +++ b/release-manifest.json @@ -0,0 +1,41 @@ +{ + "baselineRef": "origin/main", + "selected": [ + "camera-manager", + "blinkid", + "blinkcard", + "blinkid-verify" + ], + "changed": [ + "camera-manager", + "blinkid", + "blinkcard", + "blinkid-verify" + ], + "products": { + "camera-manager": { + "selected": true, + "changed": true, + "newVersion": "7.3.4", + "baselineVersion": "7.3.3" + }, + "blinkid": { + "selected": true, + "changed": true, + "newVersion": "8001.0.0", + "baselineVersion": "8000.0.1" + }, + "blinkcard": { + "selected": true, + "changed": true, + "newVersion": "3000.1.0-next", + "baselineVersion": "3000.0.8" + }, + "blinkid-verify": { + "selected": true, + "changed": true, + "newVersion": "3.22.0-next", + "baselineVersion": "3.21.1" + } + } +} diff --git a/turbo.json b/turbo.json index 5b594826..1a33352a 100644 --- a/turbo.json +++ b/turbo.json @@ -1,23 +1,38 @@ { "$schema": "https://v2-8-9.turborepo.dev/schema.json", + "globalDependencies": [ + "packages/tsconfig/**" + ], "tasks": { "build": { - "dependsOn": ["^build"], - "outputs": ["dist/**", "types/**"], + "dependsOn": [ + "^build" + ], + "outputs": [ + "dist/**", + "types/**" + ], "outputLogs": "new-only" }, "build:publish": { - "dependsOn": ["^build:publish"], + "dependsOn": [ + "^build:publish" + ], "cache": false }, "lint": { - "cache": false + "dependsOn": [ + "^build" + ], + "outputs": [] }, "lint:browserslist": { "cache": false }, "publish-test": { - "dependsOn": ["^build:publish"], + "dependsOn": [ + "build:publish" + ], "cache": false }, "test": {