From cff488bb033051909ae078991787e0c272a2d5eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E6=9C=94?= <565183519@qq.com> Date: Wed, 12 Aug 2026 10:29:00 +0800 Subject: [PATCH] feat: establish native desktop update trust root --- ...ATIVE-DESKTOP-TRUST-ROOT-001-20260812.json | 47 + .../hololake-native-desktop/.gitignore | 13 + .../hololake-native-desktop/README.md | 9 +- .../contracts/release-broadcast.schema.json | 94 +- .../hololake-native-desktop/foundation.json | 8 +- .../hololake-native-desktop/index.html | 12 + .../hololake-native-desktop/package-lock.json | 2462 ++++++++ .../hololake-native-desktop/package.json | 28 + .../scripts/foundation.test.mjs | 62 + .../src-tauri/Cargo.lock | 5415 +++++++++++++++++ .../src-tauri/Cargo.toml | 26 + .../src-tauri/build.rs | 3 + .../src-tauri/capabilities/default.json | 7 + .../src-tauri/icons/icon.png | Bin 0 -> 61139 bytes .../src-tauri/release-trust.json | 11 + .../src-tauri/src/lib.rs | 12 + .../src-tauri/src/main.rs | 5 + .../src-tauri/src/release_trust.rs | 179 + .../src-tauri/tauri.conf.json | 33 + .../hololake-native-desktop/src/main.tsx | 24 + .../hololake-native-desktop/src/styles.css | 16 + .../hololake-native-desktop/tsconfig.app.json | 20 + .../hololake-native-desktop/tsconfig.json | 7 + .../tsconfig.node.json | 9 + .../hololake-native-desktop/vite.config.ts | 12 + ...SHELL-AND-CAPABILITY-MIGRATION-20260812.md | 7 +- routing/hololake-canonical-desktop-shell.json | 6 +- .../hololake-canonical-desktop-shell.test.mjs | 16 +- routing/hololake-current-architecture.json | 2 +- 29 files changed, 8485 insertions(+), 60 deletions(-) create mode 100644 deployment/receipts/HLP-NATIVE-DESKTOP-TRUST-ROOT-001-20260812.json create mode 100644 product-source/hololake-native-desktop/.gitignore create mode 100644 product-source/hololake-native-desktop/index.html create mode 100644 product-source/hololake-native-desktop/package-lock.json create mode 100644 product-source/hololake-native-desktop/package.json create mode 100644 product-source/hololake-native-desktop/scripts/foundation.test.mjs create mode 100644 product-source/hololake-native-desktop/src-tauri/Cargo.lock create mode 100644 product-source/hololake-native-desktop/src-tauri/Cargo.toml create mode 100644 product-source/hololake-native-desktop/src-tauri/build.rs create mode 100644 product-source/hololake-native-desktop/src-tauri/capabilities/default.json create mode 100644 product-source/hololake-native-desktop/src-tauri/icons/icon.png create mode 100644 product-source/hololake-native-desktop/src-tauri/release-trust.json create mode 100644 product-source/hololake-native-desktop/src-tauri/src/lib.rs create mode 100644 product-source/hololake-native-desktop/src-tauri/src/main.rs create mode 100644 product-source/hololake-native-desktop/src-tauri/src/release_trust.rs create mode 100644 product-source/hololake-native-desktop/src-tauri/tauri.conf.json create mode 100644 product-source/hololake-native-desktop/src/main.tsx create mode 100644 product-source/hololake-native-desktop/src/styles.css create mode 100644 product-source/hololake-native-desktop/tsconfig.app.json create mode 100644 product-source/hololake-native-desktop/tsconfig.json create mode 100644 product-source/hololake-native-desktop/tsconfig.node.json create mode 100644 product-source/hololake-native-desktop/vite.config.ts diff --git a/deployment/receipts/HLP-NATIVE-DESKTOP-TRUST-ROOT-001-20260812.json b/deployment/receipts/HLP-NATIVE-DESKTOP-TRUST-ROOT-001-20260812.json new file mode 100644 index 0000000..54a14b7 --- /dev/null +++ b/deployment/receipts/HLP-NATIVE-DESKTOP-TRUST-ROOT-001-20260812.json @@ -0,0 +1,47 @@ +{ + "schema": "hololake.native-desktop-trust-root-receipt/v1", + "receipt_id": "HLP-NATIVE-DESKTOP-TRUST-ROOT-001-20260812", + "development_id": "DEV-20260811-010", + "repository_id": "REPO-014", + "branch": "main", + "source_base_commit": "a2302cfd13c45d25b0cb1f70e49b05d957a71e31", + "canonical_source": "product-source/hololake-native-desktop", + "recorded_at": "2026-08-12T10:27:13+08:00", + "implemented": { + "clean_tauri_v2_rust_react_scaffold": true, + "inherited_product_tree_copied": false, + "upstream_product_update_endpoints_present": false, + "release_trust_default": "UNPROVISIONED_FAIL_CLOSED", + "tauri_static_manifest_field_compatibility": true, + "human_opt_in_download_install_required": true, + "automatic_update_check_on_startup": false, + "automatic_restart_allowed": false, + "updater_ipc_exposed_to_webview": false, + "private_signing_material_in_source": false, + "product_ui_started": false + }, + "verification": { + "foundation_contract_tests": "PASS_4_OF_4", + "architecture_projection_tests": "PASS_4_OF_4", + "rust_unit_tests": "PASS_3_OF_3", + "rust_strict_clippy": "PASS_100", + "typescript_and_vite_build": "PASS_100", + "tauri_release_binary_build_without_bundle": "PASS_100", + "npm_production_dependency_audit": "PASS_0_VULNERABILITIES", + "git_diff_check": "PASS_100" + }, + "truth_boundary": { + "local_source_implemented": true, + "release_binary_built": true, + "installer_bundle_built": false, + "formal_bundle_identifier_registered": false, + "production_update_domain_registered": false, + "tauri_update_signing_key_provisioned": false, + "platform_signed_and_notarized": false, + "installed_runtime_accepted": false, + "published_to_remote_main": false, + "deployed": false + }, + "next_gate": "REGISTER_PRODUCTION_IDENTITY_OR_CONTINUE_DUAL_DONOR_AUDIT_FROM_THIS_FAIL_CLOSED_BASELINE", + "state": "LOCAL_CHECKPOINT_VERIFIED_NOT_PUBLISHED" +} diff --git a/product-source/hololake-native-desktop/.gitignore b/product-source/hololake-native-desktop/.gitignore new file mode 100644 index 0000000..97ef180 --- /dev/null +++ b/product-source/hololake-native-desktop/.gitignore @@ -0,0 +1,13 @@ +/dist/ +/node_modules/ +/src-tauri/target/ +/src-tauri/gen/ +*.tsbuildinfo +/vite.config.js +/vite.config.d.ts +*.key +*.p12 +*.pfx +*.mobileprovision +.env +.env.* diff --git a/product-source/hololake-native-desktop/README.md b/product-source/hololake-native-desktop/README.md index e7c0564..e7538da 100644 --- a/product-source/hololake-native-desktop/README.md +++ b/product-source/hololake-native-desktop/README.md @@ -1,12 +1,13 @@ # HoloLake Native Desktop -状态:`FOUNDATION_ROOT_CREATED · TAURI_SCAFFOLD_PENDING` +状态:`MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED` 这是 HoloLake 唯一未来桌面产品主线的干净源码根。它将采用 Tauri v2、Rust 和 React/TypeScript,但不会从现有 Tauri 或 Electron 目录整树复制。 -当前只登记产品边界和发布广播合同。选择并验收新的视觉/交互方向之前,不创建会意外继承 -任一旧应用布局的产品 UI。 +当前已经建立可编译的最小 Tauri 工程、默认关闭联网的发布信任根,以及兼容 Tauri 静态更新 +清单的 HoloLake 发布广播合同。选择并验收新的视觉/交互方向之前,不创建会意外继承任一旧 +应用布局的产品 UI;当前窗口只显示基础状态,不代表产品界面方向。 ## 供体边界 @@ -33,4 +34,4 @@ React/TypeScript,但不会从现有 Tauri 或 Electron 目录整树复制。 1. 确认正式 bundle identifier、HoloLake 更新域名和密钥托管责任; 2. 完成双供体功能/数据/许可证/安全审计; 3. 选择新的人类界面视觉方向; -4. 再生成最小 Tauri 工程和第一条知识纵向切片。 +4. 在选定视觉方向后实现第一条知识纵向切片。 diff --git a/product-source/hololake-native-desktop/contracts/release-broadcast.schema.json b/product-source/hololake-native-desktop/contracts/release-broadcast.schema.json index 7a8f357..789a783 100644 --- a/product-source/hololake-native-desktop/contracts/release-broadcast.schema.json +++ b/product-source/hololake-native-desktop/contracts/release-broadcast.schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://releases.hololake.invalid/contracts/release-broadcast.schema.json", + "$id": "urn:hololake:release-broadcast:v1", "title": "HoloLake signed opt-in release broadcast", "type": "object", "additionalProperties": false, @@ -8,12 +8,10 @@ "schema", "releaseId", "version", - "publishedAt", - "features", - "compatibility", - "restart", + "pub_date", + "notes", "platforms", - "rollback" + "hololake" ], "properties": { "schema": { "const": "hololake.release-broadcast/v1" }, @@ -22,61 +20,69 @@ "type": "string", "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$" }, - "publishedAt": { "type": "string", "format": "date-time" }, - "features": { - "type": "array", - "minItems": 1, - "items": { "type": "string", "minLength": 1 } - }, - "fixes": { - "type": "array", - "items": { "type": "string", "minLength": 1 } - }, - "compatibility": { - "type": "object", - "additionalProperties": false, - "required": ["minimumVersion", "dataMigrationRequired"], - "properties": { - "minimumVersion": { "type": "string", "minLength": 1 }, - "dataMigrationRequired": { "type": "boolean" }, - "notes": { "type": "string" } - } - }, - "restart": { - "type": "object", - "additionalProperties": false, - "required": ["required", "automaticAllowed"], - "properties": { - "required": { "const": true }, - "automaticAllowed": { "const": false }, - "message": { "type": "string" } - } - }, + "pub_date": { "type": "string", "format": "date-time" }, + "notes": { "type": "string", "minLength": 1 }, "platforms": { "type": "object", "minProperties": 1, "additionalProperties": { "type": "object", "additionalProperties": false, - "required": ["url", "size", "sha256", "tauriSignature"], + "required": ["url", "signature", "size", "sha256"], "properties": { - "url": { "type": "string", "pattern": "^https://" }, + "url": { "type": "string", "format": "uri", "pattern": "^https://" }, "size": { "type": "integer", "minimum": 1 }, "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, - "tauriSignature": { "type": "string", "minLength": 1 }, + "signature": { "type": "string", "minLength": 1 }, "platformCodeSignatureReceipt": { "type": "string", "minLength": 1 }, "notarizationReceipt": { "type": "string", "minLength": 1 } } } }, - "rollback": { + "hololake": { "type": "object", "additionalProperties": false, - "required": ["supported", "healthReceiptRequired"], + "required": ["features", "compatibility", "restart", "rollback"], "properties": { - "supported": { "const": true }, - "healthReceiptRequired": { "const": true }, - "previousVersion": { "type": "string" } + "features": { + "type": "array", + "minItems": 1, + "items": { "type": "string", "minLength": 1 } + }, + "fixes": { + "type": "array", + "items": { "type": "string", "minLength": 1 } + }, + "compatibility": { + "type": "object", + "additionalProperties": false, + "required": ["minimumVersion", "dataMigrationRequired"], + "properties": { + "minimumVersion": { "type": "string", "minLength": 1 }, + "dataMigrationRequired": { "type": "boolean" }, + "notes": { "type": "string" } + } + }, + "restart": { + "type": "object", + "additionalProperties": false, + "required": ["required", "automaticAllowed"], + "properties": { + "required": { "const": true }, + "automaticAllowed": { "const": false }, + "message": { "type": "string" } + } + }, + "rollback": { + "type": "object", + "additionalProperties": false, + "required": ["supported", "healthReceiptRequired"], + "properties": { + "supported": { "const": true }, + "healthReceiptRequired": { "const": true }, + "previousVersion": { "type": "string" } + } + } } } } diff --git a/product-source/hololake-native-desktop/foundation.json b/product-source/hololake-native-desktop/foundation.json index d19785f..c1f348e 100644 --- a/product-source/hololake-native-desktop/foundation.json +++ b/product-source/hololake-native-desktop/foundation.json @@ -1,13 +1,19 @@ { "schema": "hololake.native-desktop-foundation/v1", "record_id": "HLP-NATIVE-DESKTOP-FOUNDATION-001", - "state": "FOUNDATION_ROOT_CREATED_TAURI_SCAFFOLD_PENDING", + "state": "MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", "canonical_shell": "TAURI_V2_RUST_REACT", "product_ui_implementation_started": false, "selected_visual_direction_present": false, "upstream_product_update_endpoints": [], "production_update_endpoint_owner": "HOLOLAKE_ONLY", "release_broadcast_contract": "contracts/release-broadcast.schema.json", + "release_trust_source": "src-tauri/release-trust.json", + "release_trust_state": "UNPROVISIONED_FAIL_CLOSED", + "tauri_update_artifacts_enabled": true, + "automatic_update_check_on_startup": false, + "human_opt_in_download_install_required": true, + "automatic_restart_allowed": false, "private_signing_material_allowed_in_source": false, "donors": [ { diff --git a/product-source/hololake-native-desktop/index.html b/product-source/hololake-native-desktop/index.html new file mode 100644 index 0000000..93af769 --- /dev/null +++ b/product-source/hololake-native-desktop/index.html @@ -0,0 +1,12 @@ + + + + + + HoloLake + + +
+ + + diff --git a/product-source/hololake-native-desktop/package-lock.json b/product-source/hololake-native-desktop/package-lock.json new file mode 100644 index 0000000..0c34413 --- /dev/null +++ b/product-source/hololake-native-desktop/package-lock.json @@ -0,0 +1,2462 @@ +{ + "name": "hololake-native-desktop", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hololake-native-desktop", + "version": "0.1.0", + "dependencies": { + "@tauri-apps/api": "2.10.1", + "@tauri-apps/plugin-process": "2.3.1", + "@tauri-apps/plugin-updater": "2.10.0", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@tauri-apps/cli": "2.10.0", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "typescript": "~5.9.3", + "vite": "^7.3.5", + "vitest": "^4.0.18" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tauri-apps/api": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.10.1.tgz", + "integrity": "sha512-hKL/jWf293UDSUN09rR69hrToyIXBb8CjGaWC7gfinvnQrBVvnLr08FeFi38gxtugAVyVcTa5/FD/Xnkb1siBw==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.10.0.tgz", + "integrity": "sha512-ZwT0T+7bw4+DPCSWzmviwq5XbXlM0cNoleDKOYPFYqcZqeKY31KlpoMW/MOON/tOFBPgi31a2v3w9gliqwL2+Q==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.10.0", + "@tauri-apps/cli-darwin-x64": "2.10.0", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.10.0", + "@tauri-apps/cli-linux-arm64-gnu": "2.10.0", + "@tauri-apps/cli-linux-arm64-musl": "2.10.0", + "@tauri-apps/cli-linux-riscv64-gnu": "2.10.0", + "@tauri-apps/cli-linux-x64-gnu": "2.10.0", + "@tauri-apps/cli-linux-x64-musl": "2.10.0", + "@tauri-apps/cli-win32-arm64-msvc": "2.10.0", + "@tauri-apps/cli-win32-ia32-msvc": "2.10.0", + "@tauri-apps/cli-win32-x64-msvc": "2.10.0" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.10.0.tgz", + "integrity": "sha512-avqHD4HRjrMamE/7R/kzJPcAJnZs0IIS+1nkDP5b+TNBn3py7N2aIo9LIpy+VQq0AkN8G5dDpZtOOBkmWt/zjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.10.0.tgz", + "integrity": "sha512-keDmlvJRStzVFjZTd0xYkBONLtgBC9eMTpmXnBXzsHuawV2q9PvDo2x6D5mhuoMVrJ9QWjgaPKBBCFks4dK71Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.10.0.tgz", + "integrity": "sha512-e5u0VfLZsMAC9iHaOEANumgl6lfnJx0Dtjkd8IJpysZ8jp0tJ6wrIkto2OzQgzcYyRCKgX72aKE0PFgZputA8g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.10.0.tgz", + "integrity": "sha512-YrYYk2dfmBs5m+OIMCrb+JH/oo+4FtlpcrTCgiFYc7vcs6m3QDd1TTyWu0u01ewsCtK2kOdluhr/zKku+KP7HA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.10.0.tgz", + "integrity": "sha512-GUoPdVJmrJRIXFfW3Rkt+eGK9ygOdyISACZfC/bCSfOnGt8kNdQIQr5WRH9QUaTVFIwxMlQyV3m+yXYP+xhSVA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.10.0.tgz", + "integrity": "sha512-JO7s3TlSxshwsoKNCDkyvsx5gw2QAs/Y2GbR5UE2d5kkU138ATKoPOtxn8G1fFT1aDW4LH0rYAAfBpGkDyJJnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.10.0.tgz", + "integrity": "sha512-Uvh4SUUp4A6DVRSMWjelww0GnZI3PlVy7VS+DRF5napKuIehVjGl9XD0uKoCoxwAQBLctvipyEK+pDXpJeoHng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.10.0.tgz", + "integrity": "sha512-AP0KRK6bJuTpQ8kMNWvhIpKUkQJfcPFeba7QshOQZjJ8wOS6emwTN4K5g/d3AbCMo0RRdnZWwu67MlmtJyxC1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.10.0.tgz", + "integrity": "sha512-97DXVU3dJystrq7W41IX+82JEorLNY+3+ECYxvXWqkq7DBN6FsA08x/EFGE8N/b0LTOui9X2dvpGGoeZKKV08g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.10.0.tgz", + "integrity": "sha512-EHyQ1iwrWy1CwMalEm9z2a6L5isQ121pe7FcA2xe4VWMJp+GHSDDGvbTv/OPdkt2Lyr7DAZBpZHM6nvlHXEc4A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.10.0.tgz", + "integrity": "sha512-NTpyQxkpzGmU6ceWBTY2xRIEaS0ZLbVx1HE1zTA3TY/pV3+cPoPPOs+7YScr4IMzXMtOw7tLw5LEXo5oIG3qaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.3.1.tgz", + "integrity": "sha512-nCa4fGVaDL/B9ai03VyPOjfAHRHSBz5v6F/ObsB73r/dA3MHHhZtldaDMIc0V/pnUw9ehzr2iEG+XkSEyC0JJA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.10.0.tgz", + "integrity": "sha512-ljN8jPlnT0aSn8ecYhuBib84alxfMx6Hc8vJSKMJyzGbTPFZAC44T2I1QNFZssgWKrAlofvJqCC6Rr472JWfkQ==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.10.1" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", + "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", + "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", + "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.10", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", + "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", + "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.10", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", + "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "@vitest/utils": "4.1.10", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", + "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", + "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.13", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", + "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.405", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.405.tgz", + "integrity": "sha512-bNglH7lPH5l+yHOes7Zr4VqxhOy4BQ9ZBUX4VdoFgxMpzJk7W1ZoO3Vgd9Pxa9PyjQ76sfm2aKH/nzEcCNRlew==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-module-lexer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "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 + } + } + }, + "node_modules/vitest": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", + "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.10", + "@vitest/mocker": "4.1.10", + "@vitest/pretty-format": "4.1.10", + "@vitest/runner": "4.1.10", + "@vitest/snapshot": "4.1.10", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.10", + "@vitest/browser-preview": "4.1.10", + "@vitest/browser-webdriverio": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", + "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "4.1.10", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/product-source/hololake-native-desktop/package.json b/product-source/hololake-native-desktop/package.json new file mode 100644 index 0000000..317f564 --- /dev/null +++ b/product-source/hololake-native-desktop/package.json @@ -0,0 +1,28 @@ +{ + "name": "hololake-native-desktop", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "test": "node --test scripts/*.test.mjs", + "tauri": "tauri" + }, + "dependencies": { + "@tauri-apps/api": "2.10.1", + "@tauri-apps/plugin-process": "2.3.1", + "@tauri-apps/plugin-updater": "2.10.0", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@tauri-apps/cli": "2.10.0", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "typescript": "~5.9.3", + "vite": "^7.3.5", + "vitest": "^4.0.18" + } +} diff --git a/product-source/hololake-native-desktop/scripts/foundation.test.mjs b/product-source/hololake-native-desktop/scripts/foundation.test.mjs new file mode 100644 index 0000000..1b40064 --- /dev/null +++ b/product-source/hololake-native-desktop/scripts/foundation.test.mjs @@ -0,0 +1,62 @@ +import assert from 'node:assert/strict' +import fs from 'node:fs' +import path from 'node:path' +import test from 'node:test' +import { fileURLToPath } from 'node:url' + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') +const readJson = (relative) => JSON.parse(fs.readFileSync(path.join(root, relative), 'utf8')) +const readText = (relative) => fs.readFileSync(path.join(root, relative), 'utf8') + +const foundation = readJson('foundation.json') +const trust = readJson('src-tauri/release-trust.json') +const tauriConfig = readJson('src-tauri/tauri.conf.json') +const capability = readJson('src-tauri/capabilities/default.json') +const broadcast = readJson('contracts/release-broadcast.schema.json') + +test('clean Tauri foundation contains no inherited product updater endpoint', () => { + assert.deepEqual(foundation.upstream_product_update_endpoints, []) + assert.deepEqual(trust.endpoints, []) + assert.deepEqual(trust.allowedReleaseHosts, []) + assert.equal(trust.state, 'UNPROVISIONED_FAIL_CLOSED') + assert.equal(trust.publicKey, '') + for (const relative of [ + 'foundation.json', + 'src-tauri/release-trust.json', + 'src-tauri/tauri.conf.json', + 'src-tauri/src/release_trust.rs', + ]) { + const source = readText(relative) + assert.doesNotMatch(source, /refactoringhq|tolaria|outline/i) + } +}) + +test('release activation remains explicitly human controlled', () => { + assert.equal(trust.automaticCheckOnStartup, false) + assert.equal(trust.automaticDownload, false) + assert.equal(trust.humanOptInInstallRequired, true) + assert.equal(trust.automaticRestart, false) + assert.equal(foundation.automatic_update_check_on_startup, false) + assert.equal(foundation.human_opt_in_download_install_required, true) + assert.equal(foundation.automatic_restart_allowed, false) +}) + +test('Tauri can emit signed updater artifacts without exposing updater IPC', () => { + assert.equal(tauriConfig.bundle.createUpdaterArtifacts, true) + assert.deepEqual(capability.permissions, ['core:default']) + assert.equal(capability.permissions.includes('updater:default'), false) +}) + +test('broadcast remains Tauri-compatible and carries HoloLake human metadata', () => { + const platform = broadcast.properties.platforms.additionalProperties + assert.equal(platform.required.includes('signature'), true) + assert.equal(platform.required.includes('url'), true) + assert.equal(broadcast.required.includes('pub_date'), true) + assert.equal(broadcast.required.includes('publishedAt'), false) + assert.equal(broadcast.required.includes('notes'), true) + assert.equal(broadcast.required.includes('hololake'), true) + assert.equal( + broadcast.properties.hololake.properties.restart.properties.automaticAllowed.const, + false, + ) +}) diff --git a/product-source/hololake-native-desktop/src-tauri/Cargo.lock b/product-source/hololake-native-desktop/src-tauri/Cargo.lock new file mode 100644 index 0000000..ee8c1fe --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/Cargo.lock @@ -0,0 +1,5415 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.13.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.2.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.29.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.10.1", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf 0.13.1", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.115", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.115", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.20", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.115", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.115", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.1", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser 0.36.0", + "foldhash", + "html5ever 0.38.0", + "precomputed-hash", + "selectors 0.36.1", + "tendril 0.5.1", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.4+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.13.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hololake-native-desktop" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-updater", + "tauri-runtime", + "tauri-runtime-wry", + "tempfile", +] + +[[package]] +name = "html5ever" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" +dependencies = [ + "log", + "mac", + "markup5ever 0.14.1", + "match_token", +] + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever 0.38.0", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jiff" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link 0.2.1", +] + +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + +[[package]] +name = "jiff-static" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +dependencies = [ + "jiff-core", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.115", +] + +[[package]] +name = "js-sys" +version = "0.3.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.13.1", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.8-speedreader" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" +dependencies = [ + "cssparser 0.29.6", + "html5ever 0.29.1", + "indexmap 2.14.0", + "selectors 0.24.0", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.182" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "markup5ever" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +dependencies = [ + "log", + "phf 0.11.3", + "phf_codegen 0.11.3", + "string_cache 0.8.9", + "string_cache_codegen 0.5.4", + "tendril 0.4.3", +] + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril 0.5.1", + "web_atoms", +] + +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minisign-verify" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.20", + "windows-sys 0.60.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-text", + "objc2-core-video", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-javascript-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1e6550c4caed348956ce3370c9ffeca70bb1dbed4fa96112e7c6170e074586" +dependencies = [ + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-osa-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-security" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-javascript-core", + "objc2-security", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "osakit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b" +dependencies = [ + "objc2", + "objc2-foundation", + "objc2-osa-kit", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_shared 0.8.0", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.3", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.3", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plist" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.0", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.10+spec-1.0.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.20", +] + +[[package]] +name = "ref-cast" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" + +[[package]] +name = "reqwest" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags 2.13.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.115", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" +dependencies = [ + "bitflags 1.3.2", + "cssparser 0.29.6", + "derive_more 0.99.20", + "fxhash", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc 0.2.0", + "smallvec", +] + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.1", + "cssparser 0.36.0", + "derive_more 2.1.1", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen 0.13.1", + "precomputed-hash", + "rustc-hash", + "servo_arc 0.4.3", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "servo_arc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.13.1", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.34.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" +dependencies = [ + "bitflags 2.13.1", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "parking_lot", + "raw-window-handle", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "tar" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "463ae8677aa6d0f063a900b9c41ecd4ac2b7ca82f0b058cc4491540e55b20129" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.20", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.115", + "tauri-utils", + "thiserror 2.0.20", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.115", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-updater" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806d9dac662c2e4594ff03c647a552f2c9bd544e7d0f683ec58f872f952ce4af" +dependencies = [ + "base64 0.22.1", + "dirs", + "flate2", + "futures-util", + "http", + "infer", + "log", + "minisign-verify", + "osakit", + "percent-encoding", + "reqwest", + "rustls", + "semver", + "serde", + "serde_json", + "tar", + "tauri", + "tauri-plugin", + "tempfile", + "thiserror 2.0.20", + "time", + "tokio", + "url", + "windows-sys 0.60.2", + "zip", +] + +[[package]] +name = "tauri-runtime" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b885ffeac82b00f1f6fd292b6e5aabfa7435d537cef57d11e38a489956535651" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5204682391625e867d16584fedc83fc292fb998814c9f7918605c789cd876314" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "html5ever 0.29.1", + "http", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.13.1", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.20", + "toml 1.1.4+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.4+spec-1.1.0", +] + +[[package]] +name = "tempfile" +version = "3.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.23.10+spec-1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "winnow 0.7.15", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.1", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png", + "serde", + "thiserror 2.0.20", + "windows-sys 0.60.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.115", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf 0.13.1", + "phf_codegen 0.13.1", + "string_cache 0.9.0", + "string_cache_codegen 0.6.1", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.20", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "wry" +version = "0.54.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb26159b420aa77684589a744ae9a9461a95395b848764ad12290a14d960a11a" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dpi", + "dunce", + "gdkx11", + "gtk", + "html5ever 0.29.1", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix", +] + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.115", +] + +[[package]] +name = "zip" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" +dependencies = [ + "arbitrary", + "crc32fast", + "indexmap 2.14.0", + "memchr", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/product-source/hololake-native-desktop/src-tauri/Cargo.toml b/product-source/hololake-native-desktop/src-tauri/Cargo.toml new file mode 100644 index 0000000..cca411a --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "hololake-native-desktop" +version = "0.1.0" +description = "HoloLake native desktop foundation" +authors = ["HoloLake"] +license = "AGPL-3.0-or-later" +edition = "2021" +rust-version = "1.77.2" + +[lib] +name = "hololake_native_desktop_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2.5.4", features = [] } + +[dependencies] +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tauri = { version = "=2.10.2", features = [] } +tauri-runtime = "=2.10.0" +tauri-runtime-wry = "=2.10.0" +tauri-plugin-updater = "2.10.0" + +[dev-dependencies] +tempfile = "3" diff --git a/product-source/hololake-native-desktop/src-tauri/build.rs b/product-source/hololake-native-desktop/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/product-source/hololake-native-desktop/src-tauri/capabilities/default.json b/product-source/hololake-native-desktop/src-tauri/capabilities/default.json new file mode 100644 index 0000000..627dc8d --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Minimum HoloLake desktop foundation; updater actions are not exposed to the webview yet.", + "windows": ["main"], + "permissions": ["core:default"] +} diff --git a/product-source/hololake-native-desktop/src-tauri/icons/icon.png b/product-source/hololake-native-desktop/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5f604bb482d305a1f24209e9ea341a3ff0a671 GIT binary patch literal 61139 zcmd>lRZtvV808EMFj#O1KDbM8*WeZ)xCVE3m*DOYJU|HU?(Q1ggS)#f`S)q}efMFv zs_XVhSKYpSKRMqyUx$5>mq13qLjV8($WoG@l>h*!_m5BjFzoy3+HK|$066_2^;!6< z+tP8Hd7|;2Goeen=UKYt>7lz&oz;SVj^hGPpD7nCf*{}kNT?P98VXPt6(k%Bcpu&mD53w(@PL0` zP{{%R{rG?O&;Ofq{jcl$KfA8~b*}&IS^j^z=>M0Et+(Kt>O)gocXoxd*3nIB1?(;D z>ByzE=s%aLS`2(ML9(0wVYWcWCqNG5Z9$qdb;P#*THgUPjQZv-Olrq|Lm)3jg+${Sb$sWW-dU*Ai2&% z!KAN+lX93i=leN_L$&$@wmUq3L92UgMTvv>>olXNxma%LRq|EoF#1n2eu;3X}!hQTy8} z`0u8Be`Pr8d7G>TeQueaI5Fn?F29XQoEn#j-!gr2fHM8e^Xu#)wZMOd5%Jt5=*Y>} zR<%s~x`8P2)2gpT?nQ%9O0s~J4`KF9VCjMlf43R|myP5%VxtUVl;Go=|?NCU)?3tn7pg#b4*8oyYa>DddPh$$0ioH+J5QkdcJ1{>jr?UY+

(C8sH0WX(K3MH|ck6@Y3!sc;#aao=ef zK#|`KD!rYAw)evWR}0!gZ`Ua1ibiNtnN!Y|%gQMCtymKZbPQ0Sp8ZoM zFjaXHfh3;IDJfyK;^>$FmstcDVE_4i0ekuo)M%6VQR?THO-;0}b?GTg3I;U_8mxka z?mXLkbUK=_FI^vp$+czkSyG06TEHTm&R9v*!Es1l*C zL{9mlrA1lA_7+tiS7!$_$QE=i5<4LL-At~LAwVw&*tWgtW)Zgg4bVWyP% zbzF28Gv61Aq~d~jvh>zWBt?n$g_TGXZ=jhA*l4%;U>Xov^e^s}`AoC`yxm*Oedy)9 zq(cj;aSYJtba9%!)_rne*d}%(H4r3LrP`}%)W5+71!(t7I7DVaJuZb1YE<%nVW@Gp z?O9*yV0riDjI{b`#zH&-fCJO+RgMLe)4%XWKb(j-ttSHwk{TF?=VS+CkuQM1QwJgz zgRy~&CU{=L2qGXebZqie!`kJN4rY`J%HHo#S#HbYzu2)tldQz2jq{++LdE z(d}VRb=A!IDhR09WkyEkj6TP;8Xq^L0Plf%+k=4sxy8_yP_7wgY*_%NC3!3=kqtu} zn@w1>7$=_1&-8W_~ z*jVdp@@EXIvNg+%tc--~9~ zq|d-^fTPLvjxqLQ?9V2cv<#?k!p=FkQDMjHj8A7v6xr_gInN8_pJ+BdjfuA2-$G+O ztfO5kWM(J2eUt3oMWscFm}ZkV^S6*%wj|D6_0LAnxncT;1$*mA0QGt|rjIkH?Gt5s zHD8kMVCF|8yzzyxG} zE3)GsI^4u}6=Vlx3Yi9<)0ENmxah_nXvj|n?^Oi#RWh@=DB2YN60zKrrZ$CafxZ{> z3r&8A+u_w(p}z=(`atL|Z6En_O0np4g*K=PjmCDBaw^kR z>hA{O( zeq)n2I-PNkLu6Ir;b%HA5(*ZA67LUQJ*kg?$SMgtle&n8^Y+&Z4RS$wLrbcJTS%b& zh^VhuIv?dV3|z$yKG8BtEMemvrP?a={|C>SoK>$uGSwmpaL|H3gN0HK*@&vmopY6S z(x!ksXPLzKg0zL+wkPZ@+-{)CFG)|-SEgXMG&h)b+y%zl=r+5lv6Bwox|b-P!dua3>vb?a5iiL}lg3a^GbfKt;o$?bi?Axy>Gi27$c0WI)s$mo z6_^OfFAvGyW#o#^GV1SZoVlfU@+|lAA6ZHH+;RHT-zNsDA-NSp}8b!)GgnDFJc;rz*dA6ulB5-%t` zqcdB9(WrWBt!2CWnj1Gg%;@%fB)R^7cS z?9->egU4bDZ@h$|R6qO!aE%YK47^RQ#lZL5IYb#+V%e)@(fx}B_&6DLZf zS^m&rUFSs*eSXH@(%X6zJG1r_`<19oFWBWc5ja|o6D=qGRH2trqwp3t3i;AkI4&Ko z+g5v2PMi&a6#PIpHke zXwQ%I<*(0Hv{c!Alz$Wi=)Q0c6B2tgSiPKk?hIu=88@9jrYo7lj(?QA!70D|X#_{! zeIg*T{4>%*8n`Jj$|uPm?(x~Izykaq3YP;VludpR($K6i`5XqKxCA-wNNrF!G($Da zh_@G`f%4on>_M!@d6KQU(*tgrc6W_~-cNmA%YoHfS)Rrc%%pW!a%r!RGAu98DMq(_ zoCO!d-(=gyii|#BoqZnOH`Yolk(0X82R-C7pqU)8Cf?TMWU5h=;-B1MyYV2HB`+K| zYcF|h8dS`jtu0t?X+Epw49s(5;Mso3PXK@9rk@y4;%$aF<_+v@55_**?x?>S?Qt~K z@K7^};$Ixf>=`}I<{9XE5%wOkyWfuJCHr4|GtcA>F-(*^it~0@R`3!T_j)n^r01q> z^|PH1qbN!hKO!Sa9=bZ!VYB z&rp|nJ|>cwqB1E8*EAS=F(Je1x?W@BLWs=;!JS)e`7>@xIMC`fItf!`6vjN^1mn?` z)Rsa#Gf#^GI@(Um@FZ(4hi?Ca>tl2(HIpdLM^}(Ha1n{Y?Q$8J5y*UQk4kq9o$u@; zf*#2o>^O;3`zwDk+W2t?kp;B%Q)iNCG(#g1L>6$@zW2%fHDY3`UaR_xxDHS+eG(57 zgF?0O4031=!{{y>DmQc^SD92nEsQ#{nLhM##j9HT?KCas)_YfCMed8Rka!cZ+&#AR zq=OyG@Z;Uk-C(E9!c6{+YQI_5#z)I4a-oL~B$Q2YrIacZK1ht$qv2(e@6(ylUt8UH&6*7-G`UC$ zlT&9FU76ey%oc~1z<=4r;LpyJch{uKXpdKyd@R#Y*vkAU_nAsQCK-l;VHouFwXGm^ zK?qUu1&RP=o~J8`jIGSpY!Ay@U19#~bp&%|liyT(@+-SdLC~^4339td$RcT_nZF+L zVZdZeJ_YqniDt(}|CK{-Rtd)M)Gu17-`blvPcaUH%8}8WWM=D^VNn~jgzBt!tLa`+ zJ}mxyLbcm%!IzMCx$O}b@Ehr4x;6xr7EAERDJazifBPxb?U>^{!~iCTE& z`@liWg_9LzQVZ~49iaXpG>#0cilkZbhuT{0%C+-f1xeRG?XxamjFu?r$OfOH97(GC znWs=cK>x7bKj=8I!S&h`b$H?>5~mFBygo!r^Enku^LXTz`qV?z@F_&Ed%ZKJBOqrD z;cNZ;?J6j-`sP+CiX62LONls=&8Q(`ocRj>mPOEhqZwd9Jrl*Pp%yZU?M2!yH44|&;tn+gd2Rrn;1E(X{JxQ5L;v+y zkowYTnMyG!BP8=zoG>E{I2yIImIq;k^(hu@L#dqwSo?Pp!0QH0_fNRKuAaq72wo^Y z)MUSA=R4ahb-1`;L*IL2kOhUQYR&8c$_P2@Lk;79t9A|EER+4mi`r9+c&Z+({+MZ+ zIaog!%z}STT?34oJHaa`2ePi*tvKM*FQVNqhq$iMB!v(q@vhx|zy%MpxNbYAxxd1v z`Rr&k9)FV;lzJf$AZ-r1%9LW?l5i=)ZmMUZn}G46ydiD#@y|MlUMf&qZi!7Q#N%+d zp-|sh+&=m)$7nEvjRf{n70Gx+(}npq=}6{e&;`K}Flnpn^yl4v^e9QP6OfDDAp$&x zJOuZVN>ijQclimAP5n4-In!-ApSCw2>q0zzR^IAQIMi>k2VG z_g-gQzFnv2p_&+K8t9-@UVjc}o9IB`U8kYX73L=9Xzah){1lPx(ZFwe9kEdWD?DeL ztwlS{T0$PAM#s_81okVjNYx(RCqTbCf@xyxk%Lby=jcHLB<#Wp`dCdlb(lnh%=}zU zK6~53Q{{E8^Z3GnE+nO3t33-sNL*-YEpqv;9pCCAKg0}Xzu>$P{Q1a0lS`0i`Qu0* zr(7kcp=cS*N|zQ3_>UCw2MbNQ*5lyFLWK^NCMP-TdFT7{xRe;l0gsGb`5{_FukYr3 zzDkWqmf-tWD(!VC#rSdi2=&KAE>GqDsF}#>G@L|7a@yxkv&Z;4r%1zIjnzlHwX~rI z9Yo=pUuj72exEWuLN%lTJOfN`ZP(s%fdZG?Y?$u9vM~S>y_eO#dy~BJs7{*nK06L1 z2^k;7#~q9KwF8beRKpZ968ccBgO(umAL`>C3fEdCS20?YKLX(a|26|Z9I%j6c!;t) zl{cTompnd$c3y)vWFZ>gcJ*QLVgIRsqg}1L#&OzblRM3OmyTuL4XgM$7~`lYcB1oY zjUhg;C;Rbsz@#hfsximrN!z}5!YV$3*s|lMRQu0GQ2K8uea{*sf2If5ALPOv%7&cr zB{CN*cip9&-KNz^%d~x7Q{M<~_!FNe5*09K+tAK30}vQ4o*oRe)@~yN$wd2r5B-8q z#$lC3%-!A%3Biuqp<-*(N0a!x+G&_*BE;`e#R#UMJxTh2FaXtw)ixrBf1$Md*;o=g zI|{>fP!Lqyt)FbnpqZsSLf zr@h290lIh9WAG8>oCz7JzGBq!a<-*enJBAOY2nqUsP&2nw|Ot;D-NacYf#0|3Z266 z=CgZ8Go0g||1xeicZ~0m_#N}KY0rx400t0R;gufQt29oaWo6vNpZ-Xd=n>v;oxzR) zzH{s=uu{Mb|4&OayoXEwOJ1lquA^_VZHfxUC~cZ^@;c^qx{XT0n3O*;NUlI7w33Y` z{%3u}%9QM?tltNVM2NT*N{_-u=LZcwFYWG!-ZKN{%scIlxQ!iiUUlHV%x1IMLftZ< z3hz1C&PF#t#C0V9H&+XS@ez53*$E!|{LDSHm6?{ZCBJd6t@@_RHsvylf4cp=S(g6} zODe`2G2B-NKfN)jZcZVJ`$_L5MDt<+;_PiiC4Y2(yhG;lcr^>-J-T0EY$;)S{sjF^ z?b_667SdsI&OS1Szwp|E+KBQei8(Z(?nB&Eru6~ywb8-M@ zC6t|t%a?hV+UcCv?1N&!N1)1I;#@5MUrStDV>9J`sFBFhPsjA3fVEG?gr9n!N|JUI z!azdQP~_mvGM<;Faj&n!=OJ{yEOaUvT6^)|q)P6j9$xQ8ZW{#Ymt{re1zuYmp3k>Z z&qBt*GAx74=p@hf^-VY+lUTf2BTSXl?>YL&iRWIbvei-TUK zH3&CpT{r>d#+08|nkyk;6sfT03LRMP16}Gcp@X-7(wbZE@%0if{t^brfvSylxB2FH zsFvO)WNnqU(aHVv5&a-GU6799L(OFju+>{*V~yH5%aVGK`58>91ObV+*sgJuIZUI@N4)o-OL1sMz*TZ;Q>jGHeA~0T&GD zq044&-i}mc;d79`^m_pA+5?I(gT>C%<1vfv66gcJGLGw8K+Z7&D77d-fx)JLgu;G#KqVE1VKV#D`7PQSt*OkkgT4~99OShWrx!t)1B)S;uJg=IdV6q zdWR?dOss2{KA@h>w|`IW!qI1v!5^0K)G~Wks}Xy4m>nsDL?$4qGVq;AIc*_w=3a6~ zejd>64Z}PE+&J{Dn-1QRAYaqDMH25gP-$JH;m>F^W_m?d9AUc_33UlE9ku^C%vcQ3V8-sg>=?C?jfLdPKQ@`e!#dqC4NoK;B{1@7l)C7lrb!z z;6;KhRyYsP>7f7BW;SCO?MVoX#l^v8#pWWZDUBLlH!~=mVC=s$I5r)k_3JOOk=^0W zhYvX0D+gp>jJvXMWY(f&N~>GL*Q?%i81!oC+tKGs1*R^1Mw@q)&w-t^2Vpo_@uro+ z=lsMkL=Q_%Z`9LfhBfxoI~=sIJcO|Y@t1bhFhZyeJV569ZO^A)(K5^Fk49M6@?Epv z7F*uNTa2B4Qx2?qNl_}a1$^uP7y$6sIK=N`6N)@zYLFbV0J*&I6&Zax)(WYy$fYQa ze>IV|8nBAXdq<>7|Ku2*h&4U+tkWG7adSU!E2m;o%NR3?`vb11{MU75-!V%sgU&ev z89r^NWC5Ys4dz@4?&EXNC){=K6r|Gyrl_kBbE%Utq6Jt z8Y|(GMTe-SW686Mt<{moOH^8}$BF%$0kQ<%Qa{S1N{__uR7?xBR7$N0C17W}jmOjO zL1_))W0#)<{>^kl1(?Hy!+EzT9mr0-@MmKx0$JA&Quv!fo>owTh^vjoRaT$j*#RJX zI@>d4QvvW*>`e-6!^qrf!bS`O--AAggTf@K5+3gWcd-q;osMaPT z4-h|;mY{Qng7#m*mJYeT+iNF}Yucc$Ri6p#%Z-o@nb%9-=lOl7y3BS8ISr_Pd9Nu= z`tiY~-RDSoOQNv5bbsXzwAjL^BK0Q#|B7`mzW#WTQDsy?A=6t0n{pyA2}MKyYpiPg z4R(VOVV4St-gf+%(^v{@nz7bqXgcy@@QGpCXa^4a*?cZ~1E1f*QJfSgs&S0mbX znK4O`OLbf)Ruwlpfo(Wj+1EIn2xtXF?KPnQWa|9>#dPml|Jda{VLgi|v;UV&lm(gv zYOi+5Oa=Q8$H>J4uVr@Gr<_;jD(SonK?_Q5JuCsjak&RPQz^wR7kSYec09H_TgB4~n*@ffWwbrzQEB1?E{#Dd zAS5GzZ;6W-FvQ@2?D_EBO5Qu7@y-nzt0MmNXQzTDoNIVS7A7xi4>UQxgp>$sFFUJZ z)hZKp(>G~^9bew>xCi#Qc*|sU{y$`8i4xw?S#mzVe*iG!btYS{ZI+^iV9$xj!e9#y z-#LG#ETP|nYJ@rA>1~S2_?h2!U@uqh%~urw7O@c#OT6CATVYB3LR(j+R5F{tsGe9< zlwfnJR|0je?(FzBt&wK%ysi=KZjeAW#%oaUdG?d_f~Kj%rkd|OE);hMqH6VTAS5(h z8amcDFRi2aIrWy9^d~S$U?U%B_RoH9yge|J^`+}B-0Sgy#LqcM zD?aIZ;#d!zUmeJ5M_=CsCq(gRgc|#UE4N~m7AMGE>#ktD1W}u zIASN|=q^P%1Z=V6;;xe3YcsQak5T|h zfQ=Z!m;Q8KRXVHMF<5kUoh{L6`umB{zvcS5;8+NUVc8$`@LR9}GDyFz4{6bd!a-N< zL@d^XVvxj4sM{NR<~{bojx#b@!+xG35-tr!QZysN?m9U4Ykli@qC)?MBaYAD_r=vD zA6M{G>HD=&r%7ogc%GUu9gCsUR*sxRrYvL@v=$Ylj|TXkN0kRc|}M-(eg za$Zi7K50crN|J$g;sSCH<2s6vFTmoR7G5xWiN5H~HI>~a-bb$~9 zI+O^c0f7*9u&fHmObst^r^@8r{lMSmFVXE6OJ_ac%fFpdZPOC6s_fzPsUo0`1%qE{ z!A|%AH+F@5yZ=)=Pk2~Fp3H*G*#LzMp%LlB==^8oHbc{79=V|;(ICR8pC|OqlOjr8 z;8i=+9fMNzqn=30o81#N8tzzZ7=~YbpP;Lc+FN>itH@xJ$uj<}`!O>*)mb~8{$7a} zX|y=4xjd4cZnb>2%wCugsU_gJr2|3VA%wf;`AoH0&hcWauKLkM+)x8KmaYM86SVfi zB>EtjrtU}0>>$DQg_VJQj1(^CeS6AX&spS+up1$NFfxtZ`v+?#hjSGOKR`G1O)fAC zs{UvyVElrQe;p+HCu$(~rn_9WEH2OsBV*2c_JaWYYRR`KUj{GiPzX@Q7%S+;CwaZT zMYndC&d8&8Jj&7K>rUf3^8woTXMq*x>cNS^Fq|A*!hI#fBQ}7l-#ba>6|1tO zKHg(Az%vIV_J+cw30AdipbwX=R%xw{bOt*=R{-c5@C-;)Tkr-O&sj@={3Ydl!KR)- zZo2^jiH}F|FdBMzet`U{D?M-`0c76<{K|3FvZZrh->gqF99T9sB(zsI)+~5L#Mu%3 zVV!(+9ZqAvydolcn{4^(U#CB4;hG~)hM zm3x7ZE!|O}d^3^eb26_4U3p`#cfx~|`oYpmeecPrOLh~Rc;~K9THk63;vUzp{VZ({#wKe7z8=8Ot`LAOKsZJvnFWJ09|rTB(Zl;-y`_Js>@vk zFi-H-g1*>U>M?{Sm-{25YS$nM&zywPZ8!KIg|M&4Y6Os4ZA#xkn9pK!2&BGrw>SQV z^ce_u8^9M|#D7;LM|)+s=U&J_JT^y5`BJd^n_&NOk;@(jpA*gg7kOViWf7BfBUePl z6{-4shS630uZYTm9)}-nU4}9aOK8$9kpqU;RT9z1sj_!-hmNoZU7oPlFfl|WHo|PJ zwPVs`qY+5n1hj*e^0%r~fCmW~DdhlLS>y^s_zI0SnqNuHSlyuas@pzu-MX? zaY4z5X)w=5UpCFOjr8fbx+)Xl`tw<8#R8TpF<}P^nCrDRFTnwCIaV~LN?}SVJ%!-m zs;BYY0yj2bEWfzoHj7mhEeWGFDnKh-=z}ymCT%06a|6BTi6B(MYB`nLR*Ju5#Gsnm z@k9eRwHte&#@SppBi`tc{BfF!JWBw2q?zVZ4F-e(eEOq6+>LSYYv4~+x^q^(0VKVe z@vTD_tV?Vq&Vssj5q)}A&5{;?*DRIdr;EelK05GCzqqn}y+FPyhJKf+HOxM9cbNy$2x7#(B7W`3AyrPN(6uTqgZ8#klcl$9 z#})!^mxa!=_j|S$Jb(Iw);U@y;Uo%ad410?_N!ukL6gl6*3(jxUjYkPKyl9dUi_7f zDG5PDTL<_SgzHkdt9TBN&4SFq;RA2K)OLX z=<+#GTU84HMRnq-T0RHYc z;dZ~#D6q#2#t%?81(lW+cOSL)IqR*MZQV`rN1+1u&y9SP+@rlUer?-+hZ;QGzz7{V>!;Y2r|9;0QZbl{d)Vyh4=yKa^$@tm&EH;eyED=#_AV1ZNxkLuW+W$IA&G>c5R{AA9 zM#keW*K0ka@v>db2?JKEzrlA13@!d>z;6Z1_;R$p69fTp`f{{sMA&TBp1aM z^&Zo>g3O8#F`uHa{z^-Qow-zdi{@gv(QN{;<=CYfUspO^!{0jL`Sgv=Lq8pjjo){+ zt*ujHRLX-Ln@~D_=}4hkoA2c%5FU2G$nKp(+sZskIF5rex~Ol9SG6dA?@+4`H+?5t z)!xKSIv&-g1)k}nrvfn9&$0gc;B2-prMh-f3_pLG`kSC$f=wq-ksb+X%(Kc5r^?*C zXEcc4jEnJBA8+;e8r|{C(27GQXfb3g^v``XzA2ave2V_%xMssh2!x29xi7!I?DI|x zlRwr2UssXEIm;Yft4Cv*Ccejw@n#0fbNxOQ4h%;JCNz((QyqU9$EhD2oYci7T&3E% zWPZFt*03TJb9wtUIw1m@mt0-9q_q5M6(WRdQPTTZC3w;Z0A{9~T9D&NZC0(od$k~fc5LhgVe`imJ3MiXXDMcsR3Z|OX z6MljG(1cMM`}~7GGy9#SdUu_=30mqa!_RbndD@A=<*miDej)8oyxZF{Ohb!gA*<@@ z$;OyYjv0qs98{R;CroJTf?=r@0m*FqwOqkv!$E=*`R8 znXMi!fKwRJB)p)*JVKAcW5Pf-ym^du6 z{6~SSe0r}78J4HxKfggUxtZF%M_(q+(8&S6L})*157lg%kO6pzmgwEc3Z>Dx(HE&h z(@*!qh5uD5;LS@~z^QB*VjqRw8ao7tic`cLS&Ko1*Fxdqn&vVus+U)ttQ?pVdpBwy zAjdkthZ0B^hqLx4PBQY(F?4vg?$ygA)J)GhIN!$yb=}ZC~>CuS~2F)(Y zrwbfwVB=hXjWb{lQZu0Vk$KP*g11ySCVXSD84$j2k3%RaH^t69_pBNOk zNWa4VR3)7{6|LU!Y}Xof^+_4EU4-`~p%a}AkIeb0^tPn7eT?Iyx5U&=4vi|_-$nXb z0sHx5L8RJcSI2`U;PJIOuHlQzuC!ZrvFOhry!qdxDImZ1Y{@uLu;#nBvKO!>B^u~s z)YkxgJl5R$N1LGbvby7s@V=v~%M*C>8;r1TM`Y9rBRlnNI{5KV4V96}hh5GKwo{w& zBMK|50c#{*xXm0DC~IPnbz%A4HLe80&1#Y5(ys1g;PaJGj04wG1d7 z(}=dw#A%=P$zqzRT5Df`nX;R@xh$hw%yU8+Sp%kSAR!;eE5Valu`oFz7Eb;Vguco% zpXWgXc^M9m|6u=vG|F%@h5Pm^m<`SJ&oWxyj_^90mx@?TgBMNghsA@R+4Q4xlT=H{ zasZDyz#n$pYQpDJL6L%}~f6Y`^xsNK1IhWrZwqF@A${T(hKnG~|(u zhBmeOw?JYv_j6tDgkl%cc>4vMhAa<}@z*8Og8P|2Zb*pJgLv)|GBJj>8gUvw!#m)? z0H|mEO&neZ%*e=9ccDWnrcQi=DTNSi%;$p~NhqPgviu{x2f|3AQkmh})+qU(S)ZN1 zmKfGoYYMqVF!;UFKv|BlGw_f6APdiQG+7Vkz1Zc#`_3T!Ds3$iS#&UAc&v&6Dq#MY z@-6hCU%Vl=;K%SvE5bvxbjzX$1>}0}+20jbVbeu#&W5Q9-p;#dyp9rZw8`|B{3E5F z6{e&*Q9vAOX{d1Lt@krr@AFH{U|R0CA(QiF>oQ5_+t!8bw+vbD1H?&K{q4#ksIHHJ zP(`kcmGNqNkCJ)~!&s%cC6)N8(4ee_!@cRowL}Ej=e^Oj{rQ_+n9^#?H)s^-DvcVw z2!WdA`9O?P6Uk5Dt_5q)?athm?dPejFOMPfVn+2&k#?B@Kb4O{yzx(YUN7h1AD(4f z#!n1C$rt-vV{dtc7#-d7vvAZS5By|I_`@{(aA0d7|3*Jv1+$k<9BiR-BtaIK!+K;> z;i;}G2&HdJ53~~n`_$RRF3aQpUQrQcegRPev%Gcc*L~9SJ^PL8r~LXvRD##;VvV#U z@?Xlflxz(4glC*oN*zpEkpnf_2a8$NzHu0vwDvY@lsINil(l(0P`)>2t!#sYp!HDi zM@hiYd$sk(^DZ4kun(kjnYc3HBqK!^!3!QO0%X8}C;N_qIq7KQ0JLHkn zHTFHtY@mOwCbpgk;9BmtND@T9F#A2ys0t$gRy51m6yWb_b`+;(H60%g+M-(7Oc~Gc zeQWJlOayiEI1-%+A-XyasJi5i$(quZl0t)pv>G~oj&dPq47`)!zRB$j+ zEOdi!%JEX2n&t@&_vJ2z!{1S5^g`3zn2$ic-`h!nTzYdg`~3UPb1T=oS9OFrgX+M> zTTl*@kn1X(vv(C^S6JP4)Tu!A+TuWV0^Sld^jRB9wA*=yr9Z*(Dv8!vy99Q&kKA;B zzyjVHOq3A}FmJJT%RkdttC{$llhdfquR_X;tUbzqFDUP`lm>jcf}(R-Oo}6Fj_6`mtw0Q0MG@Z>HeW@ zr8#78q{%^GeY=lfQKui=54;;;Tbr*Lyrtv49n5NbZ`b^@9y@&uHK&>1W-MvaB+>cK zib?5oXw0x?3pfhf-R=ZPYDl*1~tB=Um89morDrDQ- zK-PXj4L!VFDjSK@ZHwRjaEcqPiA>&kJG5wr+F>cMCyWPwYZ#x~uDP;Vl-r=hC*_;y zM8nrnjO?_nilo91$~jYPvYrrS;nNQKea7v+6;(0ZJqm9WSD6&mdgq-S9*4yQFfAa00MR35^$6`!jw$r&;*zlbvzK z%Pwc7KD;OHntdU;Bld^L#zX!VV=7gw34sefO*m`8_}^s7{=U9ArER^+nlXlUv&Bnm zpN3-;Oei>yH4jAI1)l~05WJ$4Jz1e*FBmrCNjO)d5$b*$*f2DMSRrZe(0_s&bMyVT z)(VT~RO+M__i9;Mm^KXX%Y@gKY7S^5cq&3bVPLdvA03l5f4BA2KgQNKWW{}7;93HM z+wqi}+y0oFexpm^5ppdu_%3`n!!64Fh@rlXQCjq3)vMn&+jsj>517H@cAhKQr6dI& zVcnN+yIdWaw38MfmSoft53Hvn^i`jaep{?JtuSgh!Jx-Xeqc_%T(*%&>J<5SAC9S? zu_eAIw9V7ydlUAxhO#Re-)7S|*=x=to0Acm5(u&R1XaoA7@iTB&4>`Dtx%b7Y{|(; zF!X$6E6HUKyyf_q)NNHu1-Sj8^-@kF-fRGs12YleG~BR?)nM~d%9tu_&V?t$civB( zXLvW*=IRT=eM=?af0X04zZ{viB8Cy1lpf#!`4Hfz_G=S(jT#f1dizKNu6xsM&R@VL z7;U~xT7daF^>Y=VHQg-s#-`nI?br4fw5lF5#^wp6pz5uz2C1h7jX1UO+}XgJIcC#v z=KeJCxj#HDidy6;7sZ+_wbCL`LhrG;8PvJGXl3Cvt`}rGsQVW)*(fZ%n9%@Je!jRq z_qWaAnun1DTKUg%-$nLO1GO?hYKdc+V}QVW3h^}V!2br;LE(~OgC>ZJJ2^`cz4Ikd zZ8LOuUQnCddPBUHFtvZdgL=yml!E;eiiq4$@mfao5Dm5?YXI2rK4`8#M>8P zf9g_nB|_F(e+p&0c*Lxtsr=yGxwecle67b%S1)k3g6qt0kG=DUAUzhq#SlK%D`YX7 zLi*<}hggB+AMCeLftox)v8dM~OoUs%`}o~vkGwxjkyK|m;2F-p7THr(2WXYCTESGJ zhYV~?-2YAX<4CuBBY*vgm!XL&8esI8igw@g`)~!c(Ph%0|vkL>E)rc1nGueIq2@YT!V`flyFe>O2T ze7x5VA&U{9Mof)iVkhHy<~J&Q z6LOd=dZJOkly_ivmR<&WMQD7NUBzN`R`XvM15aUNUws7Q8b%%#Xl>WGtdpI2;S}SS zRg5GsJ^zp;5=7wM09=0vbdS+XdJL=J+JA1x-$8u-p({bY_6Xnc<($sD4obhdpMAs? zYURGuz^2%kzCQhB*;pl=zIz+4Slhgadbc++u|7)Xypx1Rj>^VR*ODuiKO#)lYsZ$E zFnl7id`!%kTC0ks4x6Tu^BD#?<5c)j{Owpy?okpDs^wKR(Pv?_mmFPYj@M`@`S%8t zTCB&vn{TMovSia#KyC3gulRs|A4A^!HQ&&Way{84sq4)_dWX&&ASWV&&a6h3V zLgH&p38y-{o<6SBTX6Tcw2Z`xVY4iu^MwiUAhU;KbR2g#>;#jPttvYG=!bN&z_56= z9)Fv*wMNQwwX5EL60{#1uKlq^5ngD(TPa3t4u5tvLksy|C3hX@MWDT|!`LB0-{w*ShUW=)t_JUv20Ur z&q>@jy#E2HDg|Bdhqoj{rf0Or7Gv;5@TI%2=M-gPU9XNB&i65N5!JG<+J3h6KXh3B zRFz{nI_?^(aVnWr^guVJ5-reQcnDQiAgPoY6*Kk)!WAIf`h8v2Klk{JoM=?Z&ZO-7 z(wGjG=)tMn7UDn4wWc*9zUn?D?8`>ImLw33S@ zJ|dEg>d@b27y6h-YTpt4K1r7bYtQX7^5NPdIRvoy{yNIsg4Hb!{%W#od|MK;MFvpw zW0`|bfli~&DY!m~8Jc_*HCz2?8f)y3N430q*!W8rK!OQG?~S4YaM>1hXaIqgM#JdY zX>lF*H|z0z%7xled?WG5hfpRwEnz7}b{hGx;;c%Rrb-QYq-1x)E$w%PN`&P@SH8D0 zEbi}bpa7cSt>iTK*Zcc$d%gM1)f`d;95bc-{^)tq8S>pisNGme7zEQT_Y#CY&8sl^ z+C?YBo;_g-cLb=aW9+=<{#iI|w2Z06(SoGij}kPBiW7Tgk7n{AC{xD_74&EaMe?BpLNnI57_KCu4UPq!(~mqpxZsa|n1Nm0IP=_Vhr`FqoUj?m zAWXS%efi$HclLJ2!fF4t{kCaha3$RrB5LulOdwR~DjdI`anuvRc&Z_R)o^z7H1r)T zfT;M@C}V-zmaY{=1gm+wU$qP!>S_D^T`mtD1lkYuBH)NV;VbxO;M!Yg4l$t1T(OTz z9)EMS+A4cD81mj~$gwe)?Xi{yvN0jcqYg4WK3S+mA`=?NM(5mPs%ldoIu5XL5tYE? zl?mZ7VCncMN%*1^dEV7#z0KHk*CN13wncXNO#DKZ=KW${L^8M}bfSX+ZXIvphoePc z>V!s$nzNjkh}5qqs&*lVUl?{s*wIm zM%*oG-t*z305CN}tMN>}=wzAdZ^H)}1f|&gxwFwmsXF|3sp-2Fqn>Zlv6!aC+*$5z zgV@=HUL{XMOq9=5rPsMAagxp#4o-bLWt1Gh0Rv2X{tNwsYoUfhck9_D4&MwM9g&-z zm=!mJDTV{76?I*pe|us<`O)F=N(9dUKS=OJN2%$~@N!V_p32NJBe~<@Sx{{5O^x~i z=K@D7zhG17T@vb9!#4Dm+|yoP{~rLbKu^EeU6mHH%GwZUj%3QsEbjjam{^E?DGKnK?iY1-pmw0JflD_(!WRvIceyh4p z(Oh9cg2A#3-|+zU1z>Up(=)m&!$_2ucx>JP2>RaBe)is)^&`;Ev%_6F(+?(pOo1#N zZs807D*(hzs`Q6C9%r&tA%Y?kp%?!aBx6QJolQMcEZrJugYBxmYXq!%sF?-NAp=odZ@@;{ev0i+c3#dp+^1=)&z_ zMSw~5I9JgEXy@AjgWjlIe?R#W_p@4?;pWl?T+8>I@#Xr9Zo@CcNu0Z--wA=aQM^5x z63?EI;>39=)W+TGlvNYFghpxy56S7uU*J8}22~4ODv$8gf~W+a|7J@LKld!Y*LAkG8&o!efH_K= zu5yte>&kQ$v2$$8+_P+B8G$Kb74K|GT6?}*4u10Q$$0&=JoB4BD+}oPR|`7BAGnpT zNm$39sx~0%%lPaHZh@C~Os{ro!I+-qtdbfnvIKoz^qv4%3i@uq=cMN)p#ss|fWhiS z089bYCx3oU?3oEE-huZNh#M>oNqxX4Oao*+~PX%D8Ccp6~yV?0eVS;O{>p6)i!>u@gNRyK&y4dLqu$ zj41S$t;H0pSux%hhFHc@Kq-G=zsO_%l|1l|e^x4Q9F-^j!_Ug}{FBf#%;8Db-I`rr z=2ZXw#s)YEd-Z?EL`Yed3d;O?;!d^U@-J6&;^xWzQtbg>q48D>N}SaR64jdeq9jL; zOA$-4L5}orPwhtCCW>v#;Xk%}CjP`{D zdu8+!|5)yMCtTWo?-%5iXZ|C48?gGt*w!NYvzV*H39jhMvVoH`gd4&H;J&M}AO> zTZSdXiOZsgnQ50?jZ6aT70R|JhFT(Cy5!|*Rmy#Pd}OJ0s_i?GCYV@g*c~FbeMs*7 z^nWYc3-j{qum7@~IQI(TC+JO#=aMu)c2Ee23;2p0+qD1^x2UC?WnWYA*%d0&&GK(R z0MG)63dO!jfn}G=y8orO+sp88g$aS{uqep%eHL8scN=qD#+>4Jv1ZJ;WT+0L_#Bn1 z74f1_vy`vdjo1G-NCK2}s{MCo1$D0=v@x{`tN;+iB{`(cN6GxyQHU&9$LB0;OG8s~ z9q>E;?nh+urBhNrc0$q$M(NsZH)a;+C25-zi0rCP1a?h+yXxpuzMMVMDuq?SpKJc( zVQ8NfkEjG&-)tCFia{y9<9p@aAO4iIUi))->hr&Z6BsrW;$)V#>aI$lC*Zbe}4x2Ai6X!4`ihlX;;v<(q9BC|IRF#9Kb4B=rPKr0g$hjn`gA4b#3I%{sFH< zx4savV#$6rJ=@xCgQe92>5{!G=_cH)RfbG;8Cv~vQ!tTJ_3Kh8jFjLd1JN{|SjVWI zrKp^>@S4@CW%puarazk6d|h<53ggXgfNQ3IUSYK+ZEb0|Js<&<|0Dp!W*>*r(@lVr zeg&kyi85t^q_PlKWT;({8Dzn?ee^qJXh!6jKlq}IsM!y8nAhQK7NqOtLT^@^^h2EY zC(ASxKk64~;6r8wHV`#3xD@Ud^U=Q}_kQO)#r(s4H@Hdyd-ijNESKCy$Y9tMoY{XNgc%gvc5+Z22n+z7L%P%^!1PMwIt`Gw18nAh9)P$Nq5=F-*|*W8-M0*AgY3+5vENrQ^gUQY z`F~-4{wm%(1PK7Kq2F4%o6Ld$hzsu6?w6LN`oP;|-=PQP>Hp)iQpPykqO{=skKcs_ z=ZI(4Bb!@gu26l~^^zi^(%^3b{dg1{0Z76DJckjf{m`dn+xLD%W`Fw^z1XyI;E8+-IiG>42kZN&}jh!uSu^M+-T)=uQ7=b{G&*P zzb#ILkN^-jRb2q*n>s8^Gh`}JjLb4CNqx^&x&Kq&FVFw`FNj&3k)#%*%$`W49!eEk zO`1W+ne2Lt$5yXgxOGF3AA>8zIucrrp+p{^_vEJcNiH;f>6$>x|fnM}5$NZ{y_EVIhsKdOF~wXw zn2Y~R$4PTz)C-*j7~WsyN>!4$<;NQh1*0SY#7%VaLg^oBctlR5)KytThJ4?Te4m_t z?rB+g^#!S!z#E(fQT|5s!7~s4H)u*hOa7tn`y()hu=H(4Td`ziiwyj|Pso9LACbvl z`xTjZ;&ZSA#w0*{7`Cf8fu(8BTqmZUoiNj{$nNZ=bE ze`mew&4%$c$lnuzFaMXTI4{gza4k2>b;TqA#O7X)V)`=|wU@v) zLC`$%`9DIR5(|D{R~og8E^F4SFGT*UvFlfYy!crl8^(y9o;YFk1N{P~6$ZzohRpwt zx8ExZ|L6ZAQ{VV~H|CdOY$*uNLo}B;mp{LF&0N&czP2Vf7iaS>{9CiCbKk`Tz;>q@ zoE34$@)tj@ln10#)yzL~=V+TIy%93gx&KSg@UK1@a5?3EW`S#uZ04k(I*7K7_3t^I zH$|mJO#vJ2MgQ58e0!$xE|g+#{NP34<*|-Xs`IB#oU~f_92uQr2>Cjb01&d7#D2Ni zNFnn9H3@Tty&GLJu79q6~UWDq=4#j^Q z___Xm!Itz3w(J!h*EP%e#$GhKXQbnxw%Y3y_D1rSr0S8I)XZ3t8Dr3!izk{90Kgr7e4)o1K$VGK=Yjs`D`*`6B@!Hq-KxT;*=^cB2at8c7h; zi&+IBpe)Ijiah$skI0+<=}VHFIwLa}j#o=_75p__wD6;GCb_mNOV>V?WO;lxu8a!5 z-tM--0LtkB^!^vhd!_v8e)kT@fBj22`prMYj6W9ssICf&d|Xc)x(3P1thRro zFEIU+@T+9W!5UKlW|iOB<=y=iN9>mT4FnA)UsvoOm+6)MVNj&Ke>E$@IvE)pF1Sem z<5c86um}2LX=MbCjaja5a0X4r_APL+eJB1b|Gja)b58VqON{K2r_o>X=_dh8MQcls z+szdu?3(t|IOZ7r^UImCTqFxxux+~(_wB*ws0E!3UO!U-XN{yfIV0!KoW}RAOg4j=*ML7*m*hqwQoobt8!zMEgMV1-1TApYu#!P8+U?CI~#5T+jaXx zjv~#%7TNNtpOLM9>pNuT-~MxX8w3M9rpdaLmX>2FMw|%qwd40exv7yaY z76sbN82>cCc)*DiS#kT)6vI0N?Kx`@m)_-&}T}pyXG(b7Lm=#>< ze+Fgo@&_M~JNMirkN?wObmyQtGR`V`l?@Zz;1iMYqG%nR!Z%T@Yg1v?1Bbt~IxgXl z|D^2tf$x;Uum6U;@~59izY=4C^~AZaxxQ*%_2>w#Z-j}8@7;HL|EskPyg1Nh;6|2^ z0KX=_;(i~6`a0HRWK_qpa6-liV2IJOG{$RcqVCx{=u`aJ?xcp#*t4wX1mr|rT{EAh zb8P+Dyy>(Eh*b%IlW2kfB$%iPEk0Wy+1YJ7Bp4eO(?*-7q67d7wp6rnZd%g$S#MgE zZvyOZ7j1}&2Lk@^_zuY$Gv3Wmbv7LSAORp`)0HlD2}zc_le*#)N@6$`N-Om$Cy_NY`3kja=T>d&u^hf;dnKsGTJ!$5l+=`)JjpA3GcfLQ#HoF zs`&7wcpZk}qmi6AFG;=OtaaT+K&{l^k`& zFG>^50yYy44oUfY-Y*CK;g8DrUq2<^{OrHMjPfF$6Gr1uAyAuD>5f&|p44d_s{lR_ z_OIU!x+1`iP4IFOU^;7m`&OEUD2}lA+0Ems7@0%4$l=-?|obW@p@)qiNTx#!pKn`x(FMswc|EmOLESO0bptw(5 zZ+H-fKlAIbnbfZFxVsuN)hi;~O`v=)yzgPT?Z5mf*>UoWJpJ$fh0L9qlv=n;8sS+i zSwWvX4f45a$u|_Pvn0*>`R|_Mzqg#n1^FQ8>+knf5LCdIoBH^#ru!9IY~9A}_R3p` zHj5?9W|x%!RN*q$!U?+QG!I!mr|lE}jvX*E&(!AkmvuAzUgqwNhE|_N-yFN@*M&vf z)wJ}Tg;d_3!eCQlx_yVFJGM&<1F8~&ehr$s1toKhR2EL2L-1GAt)$P0D(f=>3Rd_` z*z5SbY?rkKt}z6nvSXLbUO12U9^O~l(g;EZei8s;Lx=xv!#h~A%`FZ?7Yw7+kMy-_ zIQa~f<&p3EK{@<|FQOcIUV?&h``DcXvP{i?Y)A5cnRc~T;+J~yvKyPH=x$Cw?|)le zs8XlDV=_Eek%_~vf`C??XgIJ@_n0o z-P`WWyavxqz0(u@4o-esw#e9LJ|ze4zDuTl^S9+&U;ZoCLp9jyXWhJFXLQY8$w7vHrC?xgi0`vF zTUuVQ>$iT{@s0eYN?e->?-q>CHX;5U-@Q{BbJLPE7O)4TAX&DQ3=*sW5VDyT0cTGA z4+)YqQ<%xzw@dDO&tvk}Kl3l}I|K!k{Y{v;;E?7ka@X5R-R6yI^-9n3;E8?(R{joP zd~rw$f9Io8``8Di`PJtkSo}O@8XFKdg0$#*-`pF(=4L9(Nx-$1quCV}>h;F>I%FVN zBL3_3|8oaF6Xn4lBbl!3?`Ivg1rR!iKfQ$B{x_&N!Cw(Q{~}!3$`x1uXS$)SjB!n9 zIb4}mT&Y%rxvrc=NJ0fboex8&;#L8d%lxhX-Ua_4$;p6p+X9{#EZzQRx@I+(pO@bf z{r@~3X6opNK#8UdT4>PMynU~vYXSn$fKYQA#J9mSFNtkVy1fmVBz=1u zOkRPp>)I@IcL^;}gvVIJ=Whb7z>x#HdIWshD4T z;|2=)6j|hhKk;KS`=uw*i+lqK3j#!(xS3>Y{791PAmruv^+}}iGPChLR5ksvd1jno z?mc|px5?0_e@M1Z%*)Y#^B-j43^J&K2LGlrEXiDE+h^}`5PDLJqZXp!QPGWd2--d1L8;f)B#X4|3XxCJ^!eni z&IvG1wB+B;_sMH3r0x6B8vL~_ApR0KI*6|(m8@g?x2y0Ca+#Eg|YMKS7MxDx-$ISmj_drCqP0~3KSe;~PrxK$*FnDfOX21C?{-WV` zHaHvLY-uHB9fv2}`!%z!{O=|b@bNG0*@ZS!Ad3^{ok-EPa{?f_MnM9eSl9U+P69w& z^&7`6AA^EEgQ?DX}Q1b@>D{z?!uxQC&Z?F+8duXFu@bCc8dK>l;hDg*8Lmyzw) zaH+ZqbA)zI1zYB7wIMuL^k&n@_4yN2L(~#D1`$xpRxjs5un)X9g0==!6JRp6t!?}L zLHfM%@h<-yJHfs8?~YY%5cCNMja;^c^3A?M&ONgvaGI6o$f(E%-i=XOSpT9DgXuZg z=)zbBuUX;6qcZXO>%Q8S#$NSrd+VOpjd6FhH~L!Yn*b}O6Fl}wym$8BdAH2M2~b$qE3m2?qjH^o6o)CUOMR4gt`ULjRV$ zbt?CDdg`6^qbhk15b3g{AhjR*e)<2|dk-*4&gxwFd{v#hC++TR)M}Lj$`K?GK>{OV z3xq-N+Y(45gSo~RaJcyQe{F*?*Xi1qYcRnk$R=Y0#wHsC2t|~$gjU+5%{#GEb%pPL z&-uQpuAb?c)sA*&M^Y6}GpmUms_UHdo;Nrbo=yX|-cNUa@$;CdF!l2V3xq|9zojr) zPnwXQgL@(E*BB(juj-w4yTmXeO1%Faf%0Qd{kQ>;Ccy6d+0Bpl`0{z;j|Kd9d}9tk zQNC`P2E#jdF`bpr5ClP)yiO=Kvkdn$vpmG(cR2$=1qljdnh;k!>m#c-7t3HiKY04n z@ftv-91B�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 G0sjGf`X*NZ literal 0 HcmV?d00001 diff --git a/product-source/hololake-native-desktop/src-tauri/release-trust.json b/product-source/hololake-native-desktop/src-tauri/release-trust.json new file mode 100644 index 0000000..075f774 --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/release-trust.json @@ -0,0 +1,11 @@ +{ + "schema": "hololake.release-trust/v1", + "state": "UNPROVISIONED_FAIL_CLOSED", + "endpoints": [], + "publicKey": "", + "allowedReleaseHosts": [], + "automaticCheckOnStartup": false, + "automaticDownload": false, + "humanOptInInstallRequired": true, + "automaticRestart": false +} diff --git a/product-source/hololake-native-desktop/src-tauri/src/lib.rs b/product-source/hololake-native-desktop/src-tauri/src/lib.rs new file mode 100644 index 0000000..dff9037 --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/src/lib.rs @@ -0,0 +1,12 @@ +mod release_trust; + +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .setup(|app| { + release_trust::install_updater_if_provisioned(app.handle())?; + Ok(()) + }) + .run(tauri::generate_context!()) + .expect("failed to run HoloLake native desktop"); +} diff --git a/product-source/hololake-native-desktop/src-tauri/src/main.rs b/product-source/hololake-native-desktop/src-tauri/src/main.rs new file mode 100644 index 0000000..256b67e --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + hololake_native_desktop_lib::run(); +} diff --git a/product-source/hololake-native-desktop/src-tauri/src/release_trust.rs b/product-source/hololake-native-desktop/src-tauri/src/release_trust.rs new file mode 100644 index 0000000..c7da0a9 --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/src/release_trust.rs @@ -0,0 +1,179 @@ +use serde::Deserialize; +use tauri::{AppHandle, Runtime, Url}; +use tauri_plugin_updater::UpdaterExt; + +const EMBEDDED_RELEASE_TRUST: &str = include_str!("../release-trust.json"); + +#[derive(Debug, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +struct ReleaseTrust { + schema: String, + state: TrustState, + endpoints: Vec, + public_key: String, + allowed_release_hosts: Vec, + automatic_check_on_startup: bool, + automatic_download: bool, + human_opt_in_install_required: bool, + automatic_restart: bool, +} + +#[derive(Debug, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +enum TrustState { + UnprovisionedFailClosed, + Provisioned, +} + +enum ValidatedReleaseTrust { + Disabled, + Enabled { + endpoints: Vec, + public_key: String, + }, +} + +fn validate_release_trust(raw: &str) -> Result { + let trust: ReleaseTrust = serde_json::from_str(raw) + .map_err(|error| format!("invalid HoloLake release trust document: {error}"))?; + + if trust.schema != "hololake.release-trust/v1" { + return Err("unsupported HoloLake release trust schema".into()); + } + if trust.automatic_check_on_startup || trust.automatic_download || trust.automatic_restart { + return Err("automatic check, download and restart must remain disabled".into()); + } + if !trust.human_opt_in_install_required { + return Err("human opt-in installation is required".into()); + } + + match trust.state { + TrustState::UnprovisionedFailClosed => { + if !trust.endpoints.is_empty() + || !trust.public_key.is_empty() + || !trust.allowed_release_hosts.is_empty() + { + return Err( + "unprovisioned trust must not contain endpoint or public key material".into(), + ); + } + Ok(ValidatedReleaseTrust::Disabled) + } + TrustState::Provisioned => { + if trust.endpoints.len() != 1 { + return Err("exactly one HoloLake release endpoint is required".into()); + } + if trust.public_key.trim().is_empty() { + return Err("the HoloLake updater public key is required".into()); + } + if trust.allowed_release_hosts.len() != 1 { + return Err("exactly one HoloLake-owned release host is required".into()); + } + let allowed_host = trust.allowed_release_hosts[0].trim(); + if allowed_host.is_empty() || allowed_host.contains('/') || allowed_host.contains(':') { + return Err("the HoloLake release host must be a bare DNS name".into()); + } + let endpoint = Url::parse(&trust.endpoints[0]) + .map_err(|error| format!("invalid HoloLake release endpoint: {error}"))?; + if endpoint.scheme() != "https" { + return Err("the HoloLake release endpoint must use HTTPS".into()); + } + if endpoint.host_str() != Some(allowed_host) { + return Err( + "the updater endpoint is not owned by the configured HoloLake host".into(), + ); + } + Ok(ValidatedReleaseTrust::Enabled { + endpoints: vec![endpoint], + public_key: trust.public_key, + }) + } + } +} + +pub fn install_updater_if_provisioned( + app: &AppHandle, +) -> Result<(), Box> { + match validate_release_trust(EMBEDDED_RELEASE_TRUST)? { + ValidatedReleaseTrust::Disabled => Ok(()), + ValidatedReleaseTrust::Enabled { + endpoints, + public_key, + } => { + let updater = tauri_plugin_updater::Builder::new() + .pubkey(public_key) + .build(); + app.plugin(updater)?; + app.updater_builder().endpoints(endpoints)?.build()?; + Ok(()) + } + } +} + +#[cfg(test)] +mod tests { + use super::{validate_release_trust, ValidatedReleaseTrust}; + + fn document(state: &str, endpoint: &str, public_key: &str, allowed_host: &str) -> String { + format!( + r#"{{ + "schema":"hololake.release-trust/v1", + "state":"{state}", + "endpoints":[{endpoint}], + "publicKey":"{public_key}", + "allowedReleaseHosts":[{allowed_host}], + "automaticCheckOnStartup":false, + "automaticDownload":false, + "humanOptInInstallRequired":true, + "automaticRestart":false + }}"# + ) + } + + #[test] + fn unprovisioned_document_disables_update_networking() { + let trust = + validate_release_trust(&document("UNPROVISIONED_FAIL_CLOSED", "", "", "")).unwrap(); + assert!(matches!(trust, ValidatedReleaseTrust::Disabled)); + } + + #[test] + fn accepts_https_shape_but_rejects_insecure_endpoints() { + let owned_shape = document( + "PROVISIONED", + "\"https://releases.example.test/latest.json\"", + "public", + "\"releases.example.test\"", + ); + assert!( + validate_release_trust(&owned_shape).is_ok(), + "endpoint ownership is additionally checked by release provisioning" + ); + let insecure = document( + "PROVISIONED", + "\"http://releases.example.test/latest.json\"", + "public", + "\"releases.example.test\"", + ); + assert!(validate_release_trust(&insecure).is_err()); + let mismatched_host = document( + "PROVISIONED", + "\"https://upstream.example.test/latest.json\"", + "public", + "\"releases.example.test\"", + ); + assert!(validate_release_trust(&mismatched_host).is_err()); + } + + #[test] + fn rejects_automatic_or_nonconsensual_install_policy() { + let automatic = document("UNPROVISIONED_FAIL_CLOSED", "", "", "") + .replace("\"automaticDownload\":false", "\"automaticDownload\":true"); + assert!(validate_release_trust(&automatic).is_err()); + let no_opt_in = document("UNPROVISIONED_FAIL_CLOSED", "", "", "").replace( + "\"humanOptInInstallRequired\":true", + "\"humanOptInInstallRequired\":false", + ); + assert!(validate_release_trust(&no_opt_in).is_err()); + } +} diff --git a/product-source/hololake-native-desktop/src-tauri/tauri.conf.json b/product-source/hololake-native-desktop/src-tauri/tauri.conf.json new file mode 100644 index 0000000..8b6e5b4 --- /dev/null +++ b/product-source/hololake-native-desktop/src-tauri/tauri.conf.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "HoloLake", + "version": "0.1.0", + "identifier": "world.guanghu.hololake", + "build": { + "frontendDist": "../dist", + "devUrl": "http://127.0.0.1:5210", + "beforeDevCommand": "npm run dev", + "beforeBuildCommand": "npm run build" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "HoloLake", + "width": 1180, + "height": 760, + "minWidth": 760, + "minHeight": 520 + } + ], + "security": { + "csp": "default-src 'self'; connect-src 'self' ipc: http://ipc.localhost; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'" + } + }, + "bundle": { + "active": true, + "targets": "all", + "createUpdaterArtifacts": true, + "category": "Productivity" + } +} diff --git a/product-source/hololake-native-desktop/src/main.tsx b/product-source/hololake-native-desktop/src/main.tsx new file mode 100644 index 0000000..99216f1 --- /dev/null +++ b/product-source/hololake-native-desktop/src/main.tsx @@ -0,0 +1,24 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './styles.css' + +function FoundationScreen() { + return ( +

+

HoloLake Native Desktop

+

新的光湖桌面主线正在建立信任根

+

+ 当前只完成最小 Tauri 外壳与更新安全边界。知识工作区将在双供体审计和视觉方向确定后开始。 +

+
+
上游更新
已关闭
+
光湖发布广播
等待正式端点与公钥
+
下载与安装
必须由人类选择
+
+
+ ) +} + +createRoot(document.getElementById('root')!).render( + , +) diff --git a/product-source/hololake-native-desktop/src/styles.css b/product-source/hololake-native-desktop/src/styles.css new file mode 100644 index 0000000..39adbb9 --- /dev/null +++ b/product-source/hololake-native-desktop/src/styles.css @@ -0,0 +1,16 @@ +:root { + font-family: ui-sans-serif, system-ui, sans-serif; + color: #eaf0ff; + background: #07101f; + font-synthesis: none; +} + +body { margin: 0; min-width: 320px; min-height: 100vh; } +main { max-width: 720px; margin: 0 auto; padding: 12vh 32px; } +.eyebrow { color: #82a7ff; letter-spacing: .08em; text-transform: uppercase; } +h1 { font-size: clamp(2rem, 5vw, 4rem); line-height: 1.05; } +p { color: #b7c5e5; line-height: 1.7; } +dl { margin-top: 48px; border-top: 1px solid #263554; } +dl div { display: flex; justify-content: space-between; gap: 24px; padding: 16px 0; border-bottom: 1px solid #263554; } +dt { color: #8fa4cf; } +dd { margin: 0; text-align: right; } diff --git a/product-source/hololake-native-desktop/tsconfig.app.json b/product-source/hololake-native-desktop/tsconfig.app.json new file mode 100644 index 0000000..e935337 --- /dev/null +++ b/product-source/hololake-native-desktop/tsconfig.app.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"] +} diff --git a/product-source/hololake-native-desktop/tsconfig.json b/product-source/hololake-native-desktop/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/product-source/hololake-native-desktop/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/product-source/hololake-native-desktop/tsconfig.node.json b/product-source/hololake-native-desktop/tsconfig.node.json new file mode 100644 index 0000000..b80d820 --- /dev/null +++ b/product-source/hololake-native-desktop/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true + }, + "include": ["vite.config.ts"] +} diff --git a/product-source/hololake-native-desktop/vite.config.ts b/product-source/hololake-native-desktop/vite.config.ts new file mode 100644 index 0000000..7aac8a7 --- /dev/null +++ b/product-source/hololake-native-desktop/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + clearScreen: false, + server: { + host: '127.0.0.1', + port: 5210, + strictPort: true, + }, +}) diff --git a/product-source/hololake-platform/architecture/HOLOLAKE-CANONICAL-DESKTOP-SHELL-AND-CAPABILITY-MIGRATION-20260812.md b/product-source/hololake-platform/architecture/HOLOLAKE-CANONICAL-DESKTOP-SHELL-AND-CAPABILITY-MIGRATION-20260812.md index de16c08..d49bcce 100644 --- a/product-source/hololake-platform/architecture/HOLOLAKE-CANONICAL-DESKTOP-SHELL-AND-CAPABILITY-MIGRATION-20260812.md +++ b/product-source/hololake-platform/architecture/HOLOLAKE-CANONICAL-DESKTOP-SHELL-AND-CAPABILITY-MIGRATION-20260812.md @@ -4,7 +4,7 @@ > > 决议:`ADR-0178` > -> 状态:`CURRENT_CANONICAL · CLEAN_SOURCE_NOT_YET_SCAFFOLDED · MIGRATION_NOT_COMPLETE` +> 状态:`CURRENT_CANONICAL · MINIMAL_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED · MIGRATION_NOT_COMPLETE` ## 1 · 最终判定 @@ -136,10 +136,11 @@ Electron 本身不会自动带来更完整的知识库,但当前 Electron 实 ## 8 · 仍未完成 -- 新目录尚未脚手架化; +- 新目录已形成可编译的最小 Tauri 脚手架和默认不联网的更新信任根,但尚未形成产品 UI; - HoloLake 更新域名、签名密钥托管和开发者证书尚未登记; - 双供体完整功能矩阵、许可证清单、数据迁移图和安全威胁模型尚未完成; - 新 UI 视觉方向尚未由冰朔选择; - 不存在可发布的新主线安装包。 -所以当前事实是:**框架和迁移方法已经纠正,开发基线尚待从干净根开始建立。** +所以当前事实是:**框架和迁移方法已经纠正,干净开发基线已经建立;生产发布身份、完整供体 +审计、视觉选择与产品纵向切片仍未完成。** diff --git a/routing/hololake-canonical-desktop-shell.json b/routing/hololake-canonical-desktop-shell.json index 375cb74..a83e33c 100644 --- a/routing/hololake-canonical-desktop-shell.json +++ b/routing/hololake-canonical-desktop-shell.json @@ -2,12 +2,12 @@ "schema": "hololake.canonical-desktop-shell/v2", "record_id": "HLP-CANONICAL-DESKTOP-SHELL-001", "version": "2026-08-12.2", - "state": "CURRENT_CANONICAL_FOUNDATION_ROOT_CREATED_TAURI_SCAFFOLD_PENDING", + "state": "CURRENT_CANONICAL_MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", "development_id": "DEV-20260811-010", "decision": { "canonical_shell": "TAURI_V2_RUST_REACT", "canonical_source": "product-source/hololake-native-desktop", - "canonical_source_state": "FOUNDATION_ROOT_CREATED_TAURI_SCAFFOLD_PENDING", + "canonical_source_state": "MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", "existing_tauri_source": "product-source/hololake-platform", "existing_tauri_role": "READ_ONLY_ENGINEERING_CAPABILITY_DONOR_AND_ACCEPTANCE_ORACLE", "electron_role": "READ_ONLY_KNOWLEDGE_UX_BEHAVIOR_DONOR_AND_ACCEPTANCE_ORACLE", @@ -24,7 +24,7 @@ }, "update_route": { "record_id": "HLP-SIGNED-OPT-IN-UPDATE-001", - "state": "ARCHITECTURE_ACCEPTED_IMPLEMENTATION_NOT_STARTED", + "state": "FAIL_CLOSED_LOCAL_TRUST_ROOT_IMPLEMENTED_PRODUCTION_IDENTITY_UNPROVISIONED", "upstream_product_update_endpoints_allowed": false, "hololake_owned_https_endpoint_only": true, "release_broadcast_may_arrive_automatically": true, diff --git a/routing/hololake-canonical-desktop-shell.test.mjs b/routing/hololake-canonical-desktop-shell.test.mjs index e3b9a6e..caeb102 100644 --- a/routing/hololake-canonical-desktop-shell.test.mjs +++ b/routing/hololake-canonical-desktop-shell.test.mjs @@ -21,7 +21,7 @@ test("HoloLake has one clean canonical desktop destination", () => { assert.equal(shell.decision.canonical_source, "product-source/hololake-native-desktop"); assert.equal( shell.decision.canonical_source_state, - "FOUNDATION_ROOT_CREATED_TAURI_SCAFFOLD_PENDING", + "MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", ); assert.equal( shell.decision.existing_tauri_role, @@ -85,14 +85,22 @@ test("HoloLake owns an opt-in signed update route", () => { assert.deepEqual(foundation.upstream_product_update_endpoints, []); assert.equal(foundation.production_update_endpoint_owner, "HOLOLAKE_ONLY"); assert.equal(foundation.private_signing_material_allowed_in_source, false); - assert.equal(broadcastSchema.properties.restart.properties.required.const, true); - assert.equal(broadcastSchema.properties.restart.properties.automaticAllowed.const, false); + assert.equal( + broadcastSchema.properties.hololake.properties.restart.properties.required.const, + true, + ); + assert.equal( + broadcastSchema.properties.hololake.properties.restart.properties.automaticAllowed.const, + false, + ); assert.match( broadcastSchema.properties.platforms.additionalProperties.properties.url.pattern, /^\^https:/, ); assert.equal( - broadcastSchema.properties.platforms.additionalProperties.required.includes("tauriSignature"), + broadcastSchema.properties.platforms.additionalProperties.required.includes("signature"), true, ); + assert.equal(broadcastSchema.required.includes("pub_date"), true); + assert.equal(broadcastSchema.required.includes("publishedAt"), false); }); diff --git a/routing/hololake-current-architecture.json b/routing/hololake-current-architecture.json index 5556992..6c2458d 100644 --- a/routing/hololake-current-architecture.json +++ b/routing/hololake-current-architecture.json @@ -141,7 +141,7 @@ "adr": "product-source/hololake-platform/docs/adr/0178-tauri-canonical-shell-and-electron-capability-donor.md", "canonical_shell": "TAURI_V2_RUST_REACT", "canonical_source": "product-source/hololake-native-desktop", - "canonical_source_state": "FOUNDATION_ROOT_CREATED_TAURI_SCAFFOLD_PENDING", + "canonical_source_state": "MINIMAL_TAURI_SCAFFOLD_AND_FAIL_CLOSED_UPDATE_TRUST_ROOT_IMPLEMENTED", "existing_tauri_role": "READ_ONLY_ENGINEERING_CAPABILITY_DONOR_AND_ACCEPTANCE_ORACLE", "electron_role": "READ_ONLY_KNOWLEDGE_UX_BEHAVIOR_DONOR_AND_ACCEPTANCE_ORACLE", "parallel_product_lines_allowed": false,