From 9a55c536ced61dece92049c7d372966c6daf15d2 Mon Sep 17 00:00:00 2001 From: wabicai Date: Fri, 24 Apr 2026 12:04:18 +0800 Subject: [PATCH 01/73] chore: add gstack skill routing rules to CLAUDE.md Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index fa7d11802..ff487882f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,4 +70,24 @@ onekey-hw get-address --chain evm --use-empty-passphrase **hardware-sdk-expert** - 硬件SDK架构专家 - 擅长:三层架构分析、WebUSB/BLE协议、BIP32/BIP39/SLIP39 -- 工作方式:优先查阅相关文档,然后进行代码分析 \ No newline at end of file +- 工作方式:优先查阅相关文档,然后进行代码分析 + +## Skill routing + +When the user's request matches an available skill, ALWAYS invoke it using the Skill +tool as your FIRST action. Do NOT answer directly, do NOT use other tools first. +The skill has specialized workflows that produce better results than ad-hoc answers. + +Key routing rules: +- Product ideas, "is this worth building", brainstorming → invoke office-hours +- Bugs, errors, "why is this broken", 500 errors → invoke investigate +- Ship, deploy, push, create PR → invoke ship +- QA, test the site, find bugs → invoke qa +- Code review, check my diff → invoke review +- Update docs after shipping → invoke document-release +- Weekly retro → invoke retro +- Design system, brand → invoke design-consultation +- Visual audit, design polish → invoke design-review +- Architecture review → invoke plan-eng-review +- Save progress, checkpoint, resume → invoke checkpoint +- Code quality, health check → invoke health \ No newline at end of file From b4148f654c344d5e6dd04b89b68b01aa0640c34a Mon Sep 17 00:00:00 2001 From: wabicai Date: Mon, 27 Apr 2026 15:19:17 +0800 Subject: [PATCH 02/73] feat(protobuf-build): generate messages-pro2.json from firmware-pro2 proto sources Pro2 ships a separate set of system messages (file ops, FirmwareUpdate, Reboot, Ping, Failure types) defined under `submodules/firmware-pro2/sys/protobuf/onekey_protocol/legacy/`. This adds a Pro2 branch to `protobuf-build.sh` that pulls those .proto files, strips the `Emmc` prefix from message names, splices in `Success`/`Failure` from messages_common.proto, appends the Pro2-only `Reboot` message (no .proto source), and emits `messages-pro2.json` next to the existing `messages.json`. Both the hd-transport bundle and the core SDK get a copy. Also adds `firmware-pro2` as a submodule so the build is reproducible without manual cloning. Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitmodules | 3 + .../core/src/data/messages/messages-pro2.json | 347 ++++++++++++++++++ .../__tests__/decode-features.test.js | 1 + packages/hd-transport/messages-pro2.json | 347 ++++++++++++++++++ packages/hd-transport/messages.proto | 2 + packages/hd-transport/package.json | 2 +- .../proto-pro2-sys/messages-pro2-sys.proto | 215 +++++++++++ .../hd-transport/scripts/protobuf-build.sh | 255 ++++++++++++- submodules/firmware-pro2 | 1 + 9 files changed, 1152 insertions(+), 21 deletions(-) create mode 100644 packages/core/src/data/messages/messages-pro2.json create mode 100644 packages/hd-transport/messages-pro2.json create mode 100644 packages/hd-transport/messages.proto create mode 100644 packages/hd-transport/scripts/proto-pro2-sys/messages-pro2-sys.proto create mode 160000 submodules/firmware-pro2 diff --git a/.gitmodules b/.gitmodules index 2ea236d7b..ff839cf2b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "submodules/firmware"] path = submodules/firmware url = https://github.com/OneKeyHQ/firmware.git +[submodule "submodules/firmware-pro2"] + path = submodules/firmware-pro2 + url = https://github.com/OneKeyHQ/firmware-pro2.git diff --git a/packages/core/src/data/messages/messages-pro2.json b/packages/core/src/data/messages/messages-pro2.json new file mode 100644 index 000000000..5f40d40ab --- /dev/null +++ b/packages/core/src/data/messages/messages-pro2.json @@ -0,0 +1,347 @@ +{ + "nested": { + "Ping": { + "fields": { + "message": { + "type": "string", + "id": 1, + "options": { + "default": "" + } + }, + "button_protection": { + "type": "bool", + "id": 2 + } + } + }, + "Success": { + "fields": { + "message": { + "type": "string", + "id": 1, + "options": { + "default": "" + } + } + } + }, + "Failure": { + "fields": { + "code": { + "type": "FailureType", + "id": 1 + }, + "message": { + "type": "string", + "id": 2 + } + } + }, + "Reboot": { + "fields": { + "reboot_type": { + "rule": "required", + "type": "RebootType", + "id": 1 + } + } + }, + "FixPermission": { + "fields": {} + }, + "PathInfo": { + "fields": { + "exist": { + "rule": "required", + "type": "bool", + "id": 1 + }, + "size": { + "rule": "required", + "type": "uint64", + "id": 2 + }, + "year": { + "rule": "required", + "type": "uint32", + "id": 3 + }, + "month": { + "rule": "required", + "type": "uint32", + "id": 4 + }, + "day": { + "rule": "required", + "type": "uint32", + "id": 5 + }, + "hour": { + "rule": "required", + "type": "uint32", + "id": 6 + }, + "minute": { + "rule": "required", + "type": "uint32", + "id": 7 + }, + "second": { + "rule": "required", + "type": "uint32", + "id": 8 + }, + "readonly": { + "rule": "required", + "type": "bool", + "id": 9 + }, + "hidden": { + "rule": "required", + "type": "bool", + "id": 10 + }, + "system": { + "rule": "required", + "type": "bool", + "id": 11 + }, + "archive": { + "rule": "required", + "type": "bool", + "id": 12 + }, + "directory": { + "rule": "required", + "type": "bool", + "id": 13 + } + } + }, + "PathInfoQuery": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "File": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + }, + "offset": { + "rule": "required", + "type": "uint32", + "id": 2 + }, + "total_size": { + "rule": "required", + "type": "uint32", + "id": 3 + }, + "data": { + "type": "bytes", + "id": 4 + }, + "data_hash": { + "type": "uint32", + "id": 5 + }, + "processed_byte": { + "type": "uint32", + "id": 6 + } + } + }, + "FileRead": { + "fields": { + "file": { + "rule": "required", + "type": "File", + "id": 1 + }, + "ui_percentage": { + "type": "uint32", + "id": 2 + } + } + }, + "FileWrite": { + "fields": { + "file": { + "rule": "required", + "type": "File", + "id": 1 + }, + "overwrite": { + "rule": "required", + "type": "bool", + "id": 2 + }, + "append": { + "rule": "required", + "type": "bool", + "id": 3 + }, + "ui_percentage": { + "type": "uint32", + "id": 4 + } + } + }, + "FileDelete": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "Dir": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + }, + "child_dirs": { + "type": "string", + "id": 2 + }, + "child_files": { + "type": "string", + "id": 3 + } + } + }, + "DirList": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "DirMake": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "DirRemove": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "MessageType": { + "values": { + "MessageType_Ping": 60206, + "MessageType_Success": 60207, + "MessageType_Failure": 60208, + "MessageType_Reboot": 60400, + "MessageType_FixPermission": 60800, + "MessageType_PathInfo": 60801, + "MessageType_PathInfoQuery": 60802, + "MessageType_File": 60803, + "MessageType_FileRead": 60804, + "MessageType_FileWrite": 60805, + "MessageType_FileDelete": 60806, + "MessageType_Dir": 60807, + "MessageType_DirList": 60808, + "MessageType_DirMake": 60809, + "MessageType_DirRemove": 60810, + "MessageType_FirmwareUpdate": 61000, + "MessageType_FirmwareInstallProgress": 61001 + } + }, + "FailureType": { + "values": { + "Failure_UnexpectedMessage": 1, + "Failure_ButtonExpected": 2, + "Failure_DataError": 3, + "Failure_ActionCancelled": 4, + "Failure_PinExpected": 5, + "Failure_PinCancelled": 6, + "Failure_PinInvalid": 7, + "Failure_InvalidSignature": 8, + "Failure_ProcessError": 9, + "Failure_NotEnoughFunds": 10, + "Failure_NotInitialized": 11, + "Failure_PinMismatch": 12, + "Failure_WipeCodeMismatch": 13, + "Failure_InvalidSession": 14, + "Failure_FirmwareError": 99 + } + }, + "FirmwareTargetType": { + "values": { + "TARGET_MAIN_APP": 0, + "TARGET_MAIN_BOOT": 1, + "TARGET_BLE": 2, + "TARGET_SE1": 3, + "TARGET_SE2": 4, + "TARGET_SE3": 5, + "TARGET_SE4": 6, + "TARGET_RESOURCE": 10 + } + }, + "RebootType": { + "values": { + "REBOOT_NORMAL": 0, + "REBOOT_BOARDLOADER": 1, + "REBOOT_BOOTLOADER": 2 + } + }, + "FirmwareTarget": { + "fields": { + "target_id": { + "rule": "required", + "type": "FirmwareTargetType", + "id": 1 + }, + "path": { + "rule": "required", + "type": "string", + "id": 2 + } + } + }, + "FirmwareUpdate": { + "fields": { + "targets": { + "rule": "repeated", + "type": "FirmwareTarget", + "id": 1 + }, + "reboot_on_success": { + "type": "bool", + "id": 2 + } + } + }, + "FirmwareInstallProgress": { + "fields": { + "progress": { + "rule": "required", + "type": "uint32", + "id": 1 + } + } + } + } +} diff --git a/packages/hd-transport/__tests__/decode-features.test.js b/packages/hd-transport/__tests__/decode-features.test.js index 15b0b0b78..5ac9803da 100644 --- a/packages/hd-transport/__tests__/decode-features.test.js +++ b/packages/hd-transport/__tests__/decode-features.test.js @@ -1,3 +1,4 @@ +/* eslint-disable import/order */ const ProtoBuf = require('protobufjs/light'); const ByteBuffer = require('bytebuffer'); diff --git a/packages/hd-transport/messages-pro2.json b/packages/hd-transport/messages-pro2.json new file mode 100644 index 000000000..5f40d40ab --- /dev/null +++ b/packages/hd-transport/messages-pro2.json @@ -0,0 +1,347 @@ +{ + "nested": { + "Ping": { + "fields": { + "message": { + "type": "string", + "id": 1, + "options": { + "default": "" + } + }, + "button_protection": { + "type": "bool", + "id": 2 + } + } + }, + "Success": { + "fields": { + "message": { + "type": "string", + "id": 1, + "options": { + "default": "" + } + } + } + }, + "Failure": { + "fields": { + "code": { + "type": "FailureType", + "id": 1 + }, + "message": { + "type": "string", + "id": 2 + } + } + }, + "Reboot": { + "fields": { + "reboot_type": { + "rule": "required", + "type": "RebootType", + "id": 1 + } + } + }, + "FixPermission": { + "fields": {} + }, + "PathInfo": { + "fields": { + "exist": { + "rule": "required", + "type": "bool", + "id": 1 + }, + "size": { + "rule": "required", + "type": "uint64", + "id": 2 + }, + "year": { + "rule": "required", + "type": "uint32", + "id": 3 + }, + "month": { + "rule": "required", + "type": "uint32", + "id": 4 + }, + "day": { + "rule": "required", + "type": "uint32", + "id": 5 + }, + "hour": { + "rule": "required", + "type": "uint32", + "id": 6 + }, + "minute": { + "rule": "required", + "type": "uint32", + "id": 7 + }, + "second": { + "rule": "required", + "type": "uint32", + "id": 8 + }, + "readonly": { + "rule": "required", + "type": "bool", + "id": 9 + }, + "hidden": { + "rule": "required", + "type": "bool", + "id": 10 + }, + "system": { + "rule": "required", + "type": "bool", + "id": 11 + }, + "archive": { + "rule": "required", + "type": "bool", + "id": 12 + }, + "directory": { + "rule": "required", + "type": "bool", + "id": 13 + } + } + }, + "PathInfoQuery": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "File": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + }, + "offset": { + "rule": "required", + "type": "uint32", + "id": 2 + }, + "total_size": { + "rule": "required", + "type": "uint32", + "id": 3 + }, + "data": { + "type": "bytes", + "id": 4 + }, + "data_hash": { + "type": "uint32", + "id": 5 + }, + "processed_byte": { + "type": "uint32", + "id": 6 + } + } + }, + "FileRead": { + "fields": { + "file": { + "rule": "required", + "type": "File", + "id": 1 + }, + "ui_percentage": { + "type": "uint32", + "id": 2 + } + } + }, + "FileWrite": { + "fields": { + "file": { + "rule": "required", + "type": "File", + "id": 1 + }, + "overwrite": { + "rule": "required", + "type": "bool", + "id": 2 + }, + "append": { + "rule": "required", + "type": "bool", + "id": 3 + }, + "ui_percentage": { + "type": "uint32", + "id": 4 + } + } + }, + "FileDelete": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "Dir": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + }, + "child_dirs": { + "type": "string", + "id": 2 + }, + "child_files": { + "type": "string", + "id": 3 + } + } + }, + "DirList": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "DirMake": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "DirRemove": { + "fields": { + "path": { + "rule": "required", + "type": "string", + "id": 1 + } + } + }, + "MessageType": { + "values": { + "MessageType_Ping": 60206, + "MessageType_Success": 60207, + "MessageType_Failure": 60208, + "MessageType_Reboot": 60400, + "MessageType_FixPermission": 60800, + "MessageType_PathInfo": 60801, + "MessageType_PathInfoQuery": 60802, + "MessageType_File": 60803, + "MessageType_FileRead": 60804, + "MessageType_FileWrite": 60805, + "MessageType_FileDelete": 60806, + "MessageType_Dir": 60807, + "MessageType_DirList": 60808, + "MessageType_DirMake": 60809, + "MessageType_DirRemove": 60810, + "MessageType_FirmwareUpdate": 61000, + "MessageType_FirmwareInstallProgress": 61001 + } + }, + "FailureType": { + "values": { + "Failure_UnexpectedMessage": 1, + "Failure_ButtonExpected": 2, + "Failure_DataError": 3, + "Failure_ActionCancelled": 4, + "Failure_PinExpected": 5, + "Failure_PinCancelled": 6, + "Failure_PinInvalid": 7, + "Failure_InvalidSignature": 8, + "Failure_ProcessError": 9, + "Failure_NotEnoughFunds": 10, + "Failure_NotInitialized": 11, + "Failure_PinMismatch": 12, + "Failure_WipeCodeMismatch": 13, + "Failure_InvalidSession": 14, + "Failure_FirmwareError": 99 + } + }, + "FirmwareTargetType": { + "values": { + "TARGET_MAIN_APP": 0, + "TARGET_MAIN_BOOT": 1, + "TARGET_BLE": 2, + "TARGET_SE1": 3, + "TARGET_SE2": 4, + "TARGET_SE3": 5, + "TARGET_SE4": 6, + "TARGET_RESOURCE": 10 + } + }, + "RebootType": { + "values": { + "REBOOT_NORMAL": 0, + "REBOOT_BOARDLOADER": 1, + "REBOOT_BOOTLOADER": 2 + } + }, + "FirmwareTarget": { + "fields": { + "target_id": { + "rule": "required", + "type": "FirmwareTargetType", + "id": 1 + }, + "path": { + "rule": "required", + "type": "string", + "id": 2 + } + } + }, + "FirmwareUpdate": { + "fields": { + "targets": { + "rule": "repeated", + "type": "FirmwareTarget", + "id": 1 + }, + "reboot_on_success": { + "type": "bool", + "id": 2 + } + } + }, + "FirmwareInstallProgress": { + "fields": { + "progress": { + "rule": "required", + "type": "uint32", + "id": 1 + } + } + } + } +} diff --git a/packages/hd-transport/messages.proto b/packages/hd-transport/messages.proto new file mode 100644 index 000000000..35f63b9a0 --- /dev/null +++ b/packages/hd-transport/messages.proto @@ -0,0 +1,2 @@ +syntax = "proto2"; +import "google/protobuf/descriptor.proto"; diff --git a/packages/hd-transport/package.json b/packages/hd-transport/package.json index 6e3dde0ac..e282e8965 100644 --- a/packages/hd-transport/package.json +++ b/packages/hd-transport/package.json @@ -16,7 +16,7 @@ "test": "jest", "lint": "eslint .", "lint:fix": "eslint . --fix", - "update:protobuf": "./scripts/protobuf-build.sh" + "update-protobuf": "./scripts/protobuf-build.sh" }, "devDependencies": { "@types/bytebuffer": "^5.0.42", diff --git a/packages/hd-transport/scripts/proto-pro2-sys/messages-pro2-sys.proto b/packages/hd-transport/scripts/proto-pro2-sys/messages-pro2-sys.proto new file mode 100644 index 000000000..c592af2df --- /dev/null +++ b/packages/hd-transport/scripts/proto-pro2-sys/messages-pro2-sys.proto @@ -0,0 +1,215 @@ +// Pro2 System Protocol Messages (60000-61199 range) +// +// These messages are used over the Proto V0 (0x5A) transport layer. +// Message IDs are in little-endian format in the frame header. +// +// Source of truth: webusb_test.html encoder/decoder comments +// This file is the authoritative .proto definition for the Pro2 sys API. + +syntax = "proto2"; + +// ============================================================ +// Message Type Enum +// ============================================================ +enum MessageType { + MessageType_Ping = 60206; + MessageType_Success = 60207; + MessageType_Failure = 60208; + MessageType_Reboot = 60400; + MessageType_FixPermission = 60800; + MessageType_PathInfo = 60801; + MessageType_PathInfoQuery = 60802; + MessageType_File = 60803; + MessageType_FileRead = 60804; + MessageType_FileWrite = 60805; + MessageType_FileDelete = 60806; + MessageType_Dir = 60807; + MessageType_DirList = 60808; + MessageType_DirMake = 60809; + MessageType_DirRemove = 60810; + MessageType_FirmwareUpdate = 61000; + MessageType_FirmwareInstallProgress = 61001; +} + +// ============================================================ +// Enums +// ============================================================ + +enum FailureType { + Failure_UnexpectedMessage = 1; + Failure_ButtonExpected = 2; + Failure_DataError = 3; + Failure_ActionCancelled = 4; + Failure_PinExpected = 5; + Failure_PinCancelled = 6; + Failure_PinInvalid = 7; + Failure_InvalidSignature = 8; + Failure_ProcessError = 9; + Failure_NotEnoughFunds = 10; + Failure_NotInitialized = 11; + Failure_PinMismatch = 12; + Failure_WipeCodeMismatch = 13; + Failure_InvalidSession = 14; + Failure_FirmwareError = 99; +} + +enum FirmwareTargetType { + TARGET_MAIN_APP = 0; + TARGET_MAIN_BOOT = 1; + TARGET_BLE = 2; + TARGET_SE1 = 3; + TARGET_SE2 = 4; + TARGET_SE3 = 5; + TARGET_SE4 = 6; + TARGET_RESOURCE = 10; +} + +enum RebootType { + REBOOT_NORMAL = 0; + REBOOT_BOARDLOADER = 1; + REBOOT_BOOTLOADER = 2; +} + +// ============================================================ +// Common / Response Messages +// ============================================================ + +// Sent to host: Ping response or general success +message Success { + optional string message = 1; +} + +// Sent to host: Error response +message Failure { + optional FailureType code = 1; + optional string message = 2; +} + +// ============================================================ +// Management +// ============================================================ + +// Host → Device: echo test +// Device → Host: Success(message) or Failure +message Ping { + optional string message = 1; + optional bool button_protection = 2; +} + +// Host → Device: reboot into normal / boardloader / bootloader +message Reboot { + required RebootType reboot_type = 1; +} + +// ============================================================ +// Filesystem +// ============================================================ + +// Host → Device: fix EMMC filesystem permissions +// Device → Host: Success or Failure +message FixPermission { + optional string path = 1; +} + +// Host → Device: query file/dir metadata +// Device → Host: PathInfo +message PathInfoQuery { + required string path = 1; +} + +// Device → Host: file/dir metadata response +message PathInfo { + required bool exist = 1; + required uint64 size = 2; + required uint32 year = 3; + required uint32 month = 4; + required uint32 day = 5; + required uint32 hour = 6; + required uint32 minute = 7; + required uint32 second = 8; + optional bool readonly = 9; + optional bool hidden = 10; + optional bool system = 11; + optional bool archive = 12; + optional bool directory = 13; +} + +// Shared file descriptor — used in FileRead/FileWrite requests and File responses +message File { + required string path = 1; + required uint32 offset = 2; + required uint32 total_size = 3; + optional bytes data = 4; + optional uint32 data_hash = 5; + optional uint32 processed_byte = 6; +} + +// Host → Device: read a chunk from a file +// Device → Host: File(data=chunk_bytes, offset, total_size) +message FileRead { + required File file = 1; + optional uint32 chunk_len = 2; + optional uint32 ui_percentage = 3; +} + +// Host → Device: write a chunk to a file +// Device → Host: File(processed_byte) or Failure +message FileWrite { + required File file = 1; + required bool overwrite = 2; + required bool append = 3; + optional uint32 ui_percentage = 4; +} + +// Host → Device: delete a file +// Device → Host: Success or Failure +message FileDelete { + required string path = 1; +} + +// Host → Device: list directory contents +// Device → Host: Dir +message DirList { + required string path = 1; +} + +// Device → Host: directory listing response +// child_dirs and child_files are comma-separated name lists +message Dir { + required string path = 1; + optional string child_dirs = 2; + optional string child_files = 3; +} + +// Host → Device: create a directory +// Device → Host: Success or Failure +message DirMake { + required string path = 1; +} + +// Host → Device: remove a directory (must be empty) +// Device → Host: Success or Failure +message DirRemove { + required string path = 1; +} + +// ============================================================ +// Firmware Update +// ============================================================ + +message FirmwareTarget { + required FirmwareTargetType target_id = 1; + required string path = 2; +} + +// Host → Device: initiate firmware update +// Device → Host: FirmwareInstallProgress (repeated) then Success or Failure +message FirmwareUpdate { + repeated FirmwareTarget targets = 1; + optional bool reboot_on_success = 2; +} + +// Device → Host: firmware installation progress notification +message FirmwareInstallProgress { + required uint32 progress = 1; +} diff --git a/packages/hd-transport/scripts/protobuf-build.sh b/packages/hd-transport/scripts/protobuf-build.sh index 853f91d2d..4a4da46f5 100755 --- a/packages/hd-transport/scripts/protobuf-build.sh +++ b/packages/hd-transport/scripts/protobuf-build.sh @@ -9,6 +9,9 @@ PARENT_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) SRC="../../submodules/firmware/common/protob" DIST="." LANG="typescript" +# Absolute paths — resolved relative to this script's directory +REPO_ROOT="$PARENT_PATH/../../.." +CORE_MESSAGES_DIR="$REPO_ROOT/packages/core/src/data/messages" if [[ $# -ne 0 && $# -ne 3 ]] then @@ -30,29 +33,241 @@ if [[ "$LANG" != "typescript" && "$LANG" != "flow" ]]; fi -# BUILD combined messages.proto file from protobuf files -# this code was copied from ./submodules/firmware/protob Makekile -# clear protobuf syntax and remove unknown values to be able to work with proto2js -echo 'syntax = "proto2";' > $DIST/messages.proto -echo 'import "google/protobuf/descriptor.proto";' >> $DIST/messages.proto -echo "Build proto file from $SRC" -grep -hv -e '^import ' -e '^syntax' -e '^package' -e 'option java_' $SRC/messages*.proto \ -| sed 's/ hw\.trezor\.messages\.common\./ /' \ -| sed 's/ common\./ /' \ -| sed 's/ ethereum_definitions\./ /' \ -| sed 's/ management\./ /' \ -| sed 's/^option /\/\/ option /' \ -| grep -v ' reserved '>> $DIST/messages.proto +# ============================================================ +# BUILD Pro1 messages.json (requires firmware submodule) +# ============================================================ +# Combines all messages*.proto files from firmware submodule into +# messages.json, then copies to core package. +if [ -d "$SRC" ] && ls "$SRC"/messages*.proto 1>/dev/null 2>&1; then + echo "=== Building Pro1 (legacy) protobuf messages ===" + echo 'syntax = "proto2";' > $DIST/messages.proto + echo 'import "google/protobuf/descriptor.proto";' >> $DIST/messages.proto + echo "Build proto file from $SRC" + grep -hv -e '^import ' -e '^syntax' -e '^package' -e 'option java_' $SRC/messages*.proto \ + | sed 's/ hw\.trezor\.messages\.common\./ /' \ + | sed 's/ common\./ /' \ + | sed 's/ ethereum_definitions\./ /' \ + | sed 's/ management\./ /' \ + | sed 's/^option /\/\/ option /' \ + | grep -v ' reserved '>> $DIST/messages.proto -# BUILD messages.json from message.proto -npx pbjs -t json -p $DIST -o $DIST/messages.json --keep-case messages.proto -rm $DIST/messages.proto + npx pbjs -t json -p $DIST -o $DIST/messages.json --keep-case messages.proto + rm $DIST/messages.proto -echo "generating type definitions for: $LANG" + # Copy to core package + cp $DIST/messages.json "$CORE_MESSAGES_DIR/messages.json" + echo "Pro1 messages.json copied to core" + echo "generating type definitions for: $LANG" + + cd "$PARENT_PATH" + + node ./protobuf-types.js $LANG + + yarn prettier --write ../messages.json + yarn prettier --write "$CORE_MESSAGES_DIR/messages.json" + yarn prettier --write **/messages.ts +else + echo "⚠️ firmware submodule not found at $SRC" + echo " Skipping Pro1 protobuf build. To enable:" + echo " git submodule update --init submodules/firmware" +fi + + +# ============================================================ +# BUILD Pro2 messages-pro2.json +# ============================================================ +# Source: submodules/firmware-pro2/sys/protobuf/onekey_protocol/legacy/ +# +# The Pro2 device uses two parallel message ID spaces: +# - Legacy transport (0x3F framing): EmmcFileRead=30104, EmmcDirList=30108, ... +# - Proto V0 transport (0x5A framing): FileRead=60804, DirList=60808, ... +# +# The protobuf message STRUCTURES are identical; only the MessageType IDs differ. +# We derive messages-pro2.json from the firmware-pro2 proto files by: +# 1. Extracting messages_emmc.proto + management messages (Ping/Success/Failure/Reboot) +# 2. Stripping the "Emmc" prefix from message names +# 3. Remapping MessageType IDs from 30xxx → 60xxx (and special cases below) +# +# ID mapping (firmware legacy → Proto V0): +# Ping=1 → 60206 Success=2 → 60207 Failure=3 → 60208 +# Reboot=30000 → 60400 +# EmmcFixPermission=30100 → 60800 EmmcPath=30101 → 60801 +# EmmcPathInfo=30102 → 60802 EmmcFile=30103 → 60803 +# EmmcFileRead=30104 → 60804 EmmcFileWrite=30105 → 60805 +# EmmcFileDelete=30106 → 60806 EmmcDir=30107 → 60807 +# EmmcDirList=30108 → 60808 EmmcDirMake=30109 → 60809 +# EmmcDirRemove=30110 → 60810 +# FirmwareUpdateEmmc=30001 → 61000 FirmwareInstallProgress=30002 → 61001 +# ============================================================ cd "$PARENT_PATH" -node ./protobuf-types.js $LANG +SRC_PRO2_LEGACY="$REPO_ROOT/submodules/firmware-pro2/sys/protobuf/onekey_protocol/legacy" + +if [ -d "$SRC_PRO2_LEGACY" ] && ls "$SRC_PRO2_LEGACY"/messages*.proto 1>/dev/null 2>&1; then + echo "=== Building Pro2 messages from firmware-pro2 submodule ===" + TMP_PROTO="$PARENT_PATH/messages-pro2-tmp.proto" + + # ---------------------------------------------------------------- + # Step 1: extract Ping/Success/Failure/Reboot from messages_management.proto + # and all messages from messages_emmc.proto + # ---------------------------------------------------------------- + { + echo 'syntax = "proto2";' + echo '' + + # Ping from messages_management.proto + # Success, Failure from messages_common.proto (that's where they live in firmware-pro2) + # Reboot is a Pro V0-only message not in legacy protos — defined manually below + echo '// --- Ping ---' + awk '/^message Ping /,/^}/' "$SRC_PRO2_LEGACY/messages_management.proto" || true + echo '' + echo '// --- Success / Failure ---' + for msg in Success Failure; do + awk "/^message ${msg} /,/^}/" "$SRC_PRO2_LEGACY/messages_common.proto" \ + | grep -v 'enum FailureType' \ + | grep -v 'Failure_[A-Za-z]' \ + | grep -v '^\s*}$' \ + | sed 's/ hw\.trezor\.messages\.[a-z_]*\.\([A-Z]\)/\1/g' \ + | sed 's/ common\.\([A-Z]\)/\1/g' \ + || true + echo '}' + echo '' + done + echo '// --- Reboot (Pro V0 only, not in legacy protos) ---' + echo 'message Reboot {' + echo ' required RebootType reboot_type = 1;' + echo '}' + echo '' + + echo '' + echo '// --- Emmc / File system messages (renamed, Emmc prefix stripped) ---' + # Extract messages_emmc.proto body (strip package/import/option/syntax lines) + grep -hv \ + -e '^import ' -e '^syntax' -e '^package' -e 'option java_' \ + -e '^option ' \ + "$SRC_PRO2_LEGACY/messages_emmc.proto" \ + | grep -v ' reserved ' + + } > "$TMP_PROTO" + + # ---------------------------------------------------------------- + # Step 2: rename — strip "Emmc" prefix, order matters (longest match first), + # rename EmmcFile.len → total_size to match Proto V0 semantics. + # Use space/{/; as word-boundary substitute (macOS BSD sed has no \b). + # ---------------------------------------------------------------- + sed -i '' \ + -e 's/message EmmcFixPermission /message FixPermission /g' \ + -e 's/message EmmcPathInfo /message PathInfoQuery /g' \ + -e 's/message EmmcFileRead /message FileRead /g' \ + -e 's/message EmmcFileWrite /message FileWrite /g' \ + -e 's/message EmmcFileDelete /message FileDelete /g' \ + -e 's/message EmmcDirList /message DirList /g' \ + -e 's/message EmmcDirMake /message DirMake /g' \ + -e 's/message EmmcDirRemove /message DirRemove /g' \ + -e 's/message EmmcPath /message PathInfo /g' \ + -e 's/message EmmcFile /message File /g' \ + -e 's/message EmmcDir /message Dir /g' \ + -e 's/ EmmcFile / File /g' \ + -e 's/required uint32 len = 3/required uint32 total_size = 3/g' \ + "$TMP_PROTO" -yarn prettier --write messages.json -yarn prettier --write **/messages.ts + # ---------------------------------------------------------------- + # Step 3: build the MessageType enum with remapped IDs + # ---------------------------------------------------------------- + cat >> "$TMP_PROTO" << 'ENUM_EOF' + +// MessageType enum with Proto V0 IDs (mapped from firmware-pro2 legacy IDs) +enum MessageType { + MessageType_Ping = 60206; + MessageType_Success = 60207; + MessageType_Failure = 60208; + MessageType_Reboot = 60400; + MessageType_FixPermission = 60800; + MessageType_PathInfo = 60801; + MessageType_PathInfoQuery = 60802; + MessageType_File = 60803; + MessageType_FileRead = 60804; + MessageType_FileWrite = 60805; + MessageType_FileDelete = 60806; + MessageType_Dir = 60807; + MessageType_DirList = 60808; + MessageType_DirMake = 60809; + MessageType_DirRemove = 60810; + MessageType_FirmwareUpdate = 61000; + MessageType_FirmwareInstallProgress = 61001; +} + +enum FailureType { + Failure_UnexpectedMessage = 1; + Failure_ButtonExpected = 2; + Failure_DataError = 3; + Failure_ActionCancelled = 4; + Failure_PinExpected = 5; + Failure_PinCancelled = 6; + Failure_PinInvalid = 7; + Failure_InvalidSignature = 8; + Failure_ProcessError = 9; + Failure_NotEnoughFunds = 10; + Failure_NotInitialized = 11; + Failure_PinMismatch = 12; + Failure_WipeCodeMismatch = 13; + Failure_InvalidSession = 14; + Failure_FirmwareError = 99; +} + +enum FirmwareTargetType { + TARGET_MAIN_APP = 0; + TARGET_MAIN_BOOT = 1; + TARGET_BLE = 2; + TARGET_SE1 = 3; + TARGET_SE2 = 4; + TARGET_SE3 = 5; + TARGET_SE4 = 6; + TARGET_RESOURCE = 10; +} + +enum RebootType { + REBOOT_NORMAL = 0; + REBOOT_BOARDLOADER = 1; + REBOOT_BOOTLOADER = 2; +} + +message FirmwareTarget { + required FirmwareTargetType target_id = 1; + required string path = 2; +} + +message FirmwareUpdate { + repeated FirmwareTarget targets = 1; + optional bool reboot_on_success = 2; +} + +message FirmwareInstallProgress { + required uint32 progress = 1; +} +ENUM_EOF + + # ---------------------------------------------------------------- + # Step 4: compile to JSON + # ---------------------------------------------------------------- + npx pbjs -t json \ + -p "$PARENT_PATH" \ + -o "$PARENT_PATH/../messages-pro2.json" \ + --keep-case \ + "$(basename "$TMP_PROTO")" + + rm -f "$TMP_PROTO" + + # Copy to core package + cp "$PARENT_PATH/../messages-pro2.json" "$CORE_MESSAGES_DIR/messages-pro2.json" + echo "Pro2 messages-pro2.json generated from firmware-pro2 submodule and copied to core" + + yarn prettier --write "$PARENT_PATH/../messages-pro2.json" + yarn prettier --write "$CORE_MESSAGES_DIR/messages-pro2.json" + echo "=== Pro2 messages build complete ===" +else + echo "⚠️ firmware-pro2 submodule not found at $SRC_PRO2_LEGACY" + echo " Skipping Pro2 protobuf build. To enable:" + echo " git submodule update --init submodules/firmware-pro2" +fi diff --git a/submodules/firmware-pro2 b/submodules/firmware-pro2 new file mode 160000 index 000000000..50baca3b8 --- /dev/null +++ b/submodules/firmware-pro2 @@ -0,0 +1 @@ +Subproject commit 50baca3b871a8607bb2fe8445d9abb7a395ea8cb From 1cce5ca54619529f2f2dd3598f36e103c1020f76 Mon Sep 17 00:00:00 2001 From: wabicai Date: Mon, 27 Apr 2026 15:20:01 +0800 Subject: [PATCH 03/73] feat(transport): Protocol V2 wire format + WebUSB/BLE transports for Pro2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds Protocol V2 (Pro2's 0x5A framing — formerly known as "Proto V0" / "Proto Link" on the firmware side) alongside the legacy 0x3F chunked Protocol V1, and introduces per-device protocol routing across every transport implementation. Wire format (`packages/hd-transport/src/serialization/protocol-v2/`): - 0x5A SOF, 2-byte little-endian length, CRC8 over header and full frame (init=0x30, poly=0x07), single-frame max 2200 bytes - Channel/packet-source bytes for the firmware's proto-link routing - `parseProtoV2Frame` decode + `buildPbFrame` encode helpers - Cohabits with the legacy V1 codec (renamed dir from `protocol/` → `protocol-v1/`); both are now siblings under `serialization/`. `protocols.ts` is a thin facade that picks the right schema (V1 default + V2 schema for sys-message IDs ≥ 60000). Transport interface (`Transport.getProtocolType(path)`): - Promoted from optional to required so the SDK can route per device without falling back to features-based heuristics. - `WebUsbTransport` detects per-path by USB PID (`PROTOCOL_V2_USB_PID = 0x53c1` shared with Classic/Mini/Pro/Touch for now — see TODO in constants.ts; awaiting Pro2-specific PID). - New `ElectronPro2BleTransport`: BLE GATT bridge for Pro2 over Noble, re-uses the V2 codec, sets `CHANNEL=BLE_UART (1)` and `packet_src=COMMAND (1)` because BLE goes through the BLE-coprocessor ↔ main-MCU UART bridge. Single Pro2 frame may arrive across multiple BLE notifications; reassembly is driven off the LEN field. - Single-protocol transports (Emulator / Http / Lowlevel / ReactNative / NodeUsb / ElectronBle) all return `'V1'`. Routing in `WebUsbTransport.call()`: - Dispatches to `callProtocolV2()` for V2 devices and the legacy 64-byte chunked path for V1 — chosen at acquire time and cached on the per-path `deviceProtocol` map. - Both schemas (`messages` for V1, `messagesV2` for V2) are loaded once on configure(); no mid-flight schema swap. - USB endpoints reach the main MCU directly so the V2 frame doesn't set channel/packet-src — only BLE does. Constants (`packages/hd-transport/src/constants.ts`): - `PROTOCOL_V2_USB_PID` (0x53c1, with TODO) - `PROTOCOL_V2_FRAME_MAX_BYTES` (2200) - `PROTOCOL_V2_FILE_CHUNK_SIZE` (2048) - `PROTOCOL_V2_CHANNEL_USB / BLE_UART / SOCKET` - `PROTOCOL_V2_PACKET_SRC_COMMAND` - `PROTOCOL_V2_SYS_MESSAGE_THRESHOLD` (60000) Auxiliary changes: - `packages/shared/src/constants.ts`: extend ONEKEY_WEBUSB_FILTER with Pro Boot/Touch Boot PIDs (`0x4f4a`, `0x4f4b`) so Pro2-era hardware in either mode is recognized. - `noble-ble-handler.ts`: discover all GATT services and characteristics without UUID filtering — needed because the Pro2 firmware-side BLE service UUIDs are still moving and the previous filter dropped the notify characteristic during scan. Scan timeouts extended for the Pro2 advertising interval. - `hd-common-connect-sdk`: route `desktop-web-ble-pro2` env to `ElectronPro2BleTransport`. This commit collapses 18 incremental WIP commits (initial Pro V0 framing, schema selection fixes, descriptor.protocolType propagation, debug logging, Initialize → Ping init flow iterations, BLE transport wiring, BLE scan tuning, Pro2 prefix removal, V1/V2 rename, lint fixes) into a single coherent change. Co-Authored-By: Claude Opus 4.7 (1M context) --- .eslintignore | 1 + packages/hd-common-connect-sdk/src/index.ts | 7 +- .../src/noble-ble-handler.ts | 72 ++- packages/hd-transport-emulator/src/index.ts | 11 +- packages/hd-transport-http/src/index.ts | 11 +- packages/hd-transport-lowlevel/src/index.ts | 7 +- .../hd-transport-react-native/src/index.ts | 6 + packages/hd-transport-usb/src/index.ts | 7 +- .../src/electron-ble-transport.ts | 6 + .../src/electron-pro2-ble-transport.ts | 553 ++++++++++++++++++ packages/hd-transport-web-device/src/index.ts | 3 +- .../hd-transport-web-device/src/webusb.ts | 244 +++++++- packages/hd-transport/src/constants.ts | 35 ++ packages/hd-transport/src/index.ts | 17 + .../hd-transport/src/serialization/index.ts | 7 +- .../{protocol => protocol-v1}/decode.ts | 0 .../{protocol => protocol-v1}/encode.ts | 0 .../{protocol => protocol-v1}/index.ts | 0 .../serialization/protocol-v2/constants.ts | 6 + .../src/serialization/protocol-v2/crc8.ts | 35 ++ .../src/serialization/protocol-v2/decode.ts | 72 +++ .../src/serialization/protocol-v2/encode.ts | 72 +++ .../src/serialization/protocol-v2/index.ts | 4 + .../src/serialization/protocols.ts | 82 +++ .../hd-transport/src/serialization/receive.ts | 2 +- .../hd-transport/src/serialization/send.ts | 2 +- packages/hd-transport/src/types/transport.ts | 13 +- packages/shared/src/constants.ts | 4 +- 28 files changed, 1222 insertions(+), 57 deletions(-) create mode 100644 packages/hd-transport-web-device/src/electron-pro2-ble-transport.ts rename packages/hd-transport/src/serialization/{protocol => protocol-v1}/decode.ts (100%) rename packages/hd-transport/src/serialization/{protocol => protocol-v1}/encode.ts (100%) rename packages/hd-transport/src/serialization/{protocol => protocol-v1}/index.ts (100%) create mode 100644 packages/hd-transport/src/serialization/protocol-v2/constants.ts create mode 100644 packages/hd-transport/src/serialization/protocol-v2/crc8.ts create mode 100644 packages/hd-transport/src/serialization/protocol-v2/decode.ts create mode 100644 packages/hd-transport/src/serialization/protocol-v2/encode.ts create mode 100644 packages/hd-transport/src/serialization/protocol-v2/index.ts create mode 100644 packages/hd-transport/src/serialization/protocols.ts diff --git a/.eslintignore b/.eslintignore index 51bb10c07..997c6e92a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -13,3 +13,4 @@ packages/connect-examples/react-native-demo/ packages/connect-examples/native-android-example/ packages/connect-examples/native-ios-example/ packages/connect-examples/developer-portal/ +.claude/ diff --git a/packages/hd-common-connect-sdk/src/index.ts b/packages/hd-common-connect-sdk/src/index.ts index f7ff42713..559b9c7c2 100644 --- a/packages/hd-common-connect-sdk/src/index.ts +++ b/packages/hd-common-connect-sdk/src/index.ts @@ -20,7 +20,11 @@ import HardwareSdk, { } from '@onekeyfe/hd-core'; import { ERRORS, HardwareErrorCode, createDeferred } from '@onekeyfe/hd-shared'; import HttpTransport from '@onekeyfe/hd-transport-http'; -import { ElectronBleTransport, WebUsbTransport } from '@onekeyfe/hd-transport-web-device'; +import { + ElectronBleTransport, + ElectronPro2BleTransport, + WebUsbTransport, +} from '@onekeyfe/hd-transport-web-device'; import LowlevelTransport from '@onekeyfe/hd-transport-lowlevel'; import EmulatorTransport from '@onekeyfe/hd-transport-emulator'; @@ -39,6 +43,7 @@ const Log = getLogger(LoggerNames.HdCommonConnectSdk); const getTransport = async (env: ConnectSettings['env']) => { if (env === 'desktop-web-ble') return ElectronBleTransport; + if (env === 'desktop-web-ble-pro2') return ElectronPro2BleTransport; if (env === 'webusb' || env === 'desktop-webusb') return WebUsbTransport; if (env === 'lowlevel') return LowlevelTransport; if (env === 'node-usb') { diff --git a/packages/hd-transport-electron/src/noble-ble-handler.ts b/packages/hd-transport-electron/src/noble-ble-handler.ts index 37226e77b..b4a4cb576 100644 --- a/packages/hd-transport-electron/src/noble-ble-handler.ts +++ b/packages/hd-transport-electron/src/noble-ble-handler.ts @@ -79,8 +79,8 @@ const NORMALIZED_NOTIFY_UUID = '0003'; // Timeout and interval constants const BLUETOOTH_INIT_TIMEOUT = 10000; // 10 seconds for Bluetooth initialization -const DEVICE_SCAN_TIMEOUT = 5000; // 5 seconds for device scanning -const FAST_SCAN_TIMEOUT = 1500; // 1.5 seconds for fast targeted scanning +const DEVICE_SCAN_TIMEOUT = 8000; // 8 seconds for device scanning (Pro2 has longer advertising interval) +const FAST_SCAN_TIMEOUT = 8000; // 8 seconds for targeted scanning (Pro2 has longer advertising interval) const DEVICE_CHECK_INTERVAL = 500; // 500ms interval for periodic device checks const CONNECTION_TIMEOUT = 3000; // 3 seconds for device connection const SERVICE_DISCOVERY_TIMEOUT = 10000; // 10 seconds for service discovery @@ -686,6 +686,14 @@ async function transmitHexDataToDevice(deviceId: string, hexData: string): Promi // Handle discovered device (for general enumeration only) function handleDeviceDiscovered(peripheral: Peripheral): void { const deviceName = peripheral.advertisement?.localName || 'Unknown Device'; + const serviceUuids = peripheral.advertisement?.serviceUuids || []; + + // Log ALL discovered devices to help identify Pro2 BLE service UUID + logger?.info( + `[NobleBLE] Scan found: name="${deviceName}" id=${ + peripheral.id + } serviceUUIDs=[${serviceUuids.join(', ')}]` + ); // Only process OneKey devices for general discovery if (!isOnekeyDevice(deviceName)) { @@ -753,8 +761,8 @@ async function performTargetedScan(targetDeviceId: string): Promise { + // Start scanning — no service UUID filter (Pro2 may use different service UUID) + nobleInstance.startScanning([], false, (error?: Error) => { if (error) { clearTimeout(timeoutId); nobleInstance.removeListener('discover', onDiscover); @@ -816,15 +824,19 @@ async function enumerateDevices(): Promise { }); }; - // Set timeout for scanning + // Set timeout for scanning — use longer timeout to catch slow-advertising devices like Pro2 const timeoutId = setTimeout(() => { + // Final collection before resolving — catches devices discovered near the deadline + checkDevices(); cleanup(); logger?.info('[NobleBLE] Scan completed, found devices:', devices.length); resolve(devices); }, DEVICE_SCAN_TIMEOUT); - // Start scanning for OneKey service UUIDs - nobleInstance.startScanning(ONEKEY_SERVICE_UUIDS, false, (error?: Error) => { + // Start scanning — use empty array to discover ALL BLE devices (Pro2 may use different service UUID) + // TODO: restore ONEKEY_SERVICE_UUIDS filter once Pro2 BLE service UUID is confirmed + logger?.info('[NobleBLE] Scanning for ALL BLE devices (no service UUID filter)'); + nobleInstance.startScanning([], false, (error?: Error) => { if (error) { cleanup(); logger?.error('[NobleBLE] Failed to start scanning:', error); @@ -952,9 +964,9 @@ async function discoverServicesAndCharacteristics( // Main discovery logic as async function const discoveryPromise = (async (): Promise => { - // Step 1: Discover services (promisified) + // Step 1: Discover ALL services (no filter — Pro2 may use different service UUID) const services = await new Promise((resolve, reject) => { - peripheral.discoverServices(ONEKEY_SERVICE_UUIDS, (error, svc) => { + peripheral.discoverServices([], (error, svc) => { if (error) { logger?.error('[NobleBLE] Service discovery failed:', error); reject(ERRORS.TypedError(HardwareErrorCode.BleServiceNotFound, error.message)); @@ -964,26 +976,40 @@ async function discoverServicesAndCharacteristics( }); }); + // Log all discovered services + logger?.info( + '[NobleBLE] All services:', + services?.map(s => s.uuid) + ); + if (!services || services.length === 0) { - throw ERRORS.TypedError(HardwareErrorCode.BleServiceNotFound, 'No OneKey services found'); + throw ERRORS.TypedError(HardwareErrorCode.BleServiceNotFound, 'No services found'); } - const service = services[0]; - logger?.info('[NobleBLE] Found service:', service.uuid); + // Find OneKey service — try known UUID first, fall back to first service + let service = services.find(s => ONEKEY_SERVICE_UUIDS.includes(s.uuid)); + if (!service) { + logger?.info( + '[NobleBLE] Known OneKey service UUID not found, trying first non-generic service' + ); + // Skip generic BLE services (1800=GAP, 1801=GATT, 180a=DeviceInfo) + service = services.find(s => !['1800', '1801', '180a'].includes(s.uuid)) || services[0]; + } + if (!service) { + throw ERRORS.TypedError(HardwareErrorCode.BleServiceNotFound); + } + logger?.info('[NobleBLE] Using service:', service.uuid); - // Step 2: Discover characteristics (promisified) + // Step 2: Discover ALL characteristics (no filter) const characteristics = await new Promise((resolve, reject) => { - service.discoverCharacteristics( - [ONEKEY_WRITE_CHARACTERISTIC_UUID, ONEKEY_NOTIFY_CHARACTERISTIC_UUID], - (error, chars) => { - if (error) { - logger?.error('[NobleBLE] Characteristic discovery failed:', error); - reject(ERRORS.TypedError(HardwareErrorCode.BleCharacteristicNotFound, error.message)); - } else { - resolve(chars); - } + service.discoverCharacteristics([], (error, chars) => { + if (error) { + logger?.error('[NobleBLE] Characteristic discovery failed:', error); + reject(ERRORS.TypedError(HardwareErrorCode.BleCharacteristicNotFound, error.message)); + } else { + resolve(chars); } - ); + }); }); // Step 3: Find required characteristics diff --git a/packages/hd-transport-emulator/src/index.ts b/packages/hd-transport-emulator/src/index.ts index cda7073d2..76fa79f03 100644 --- a/packages/hd-transport-emulator/src/index.ts +++ b/packages/hd-transport-emulator/src/index.ts @@ -4,7 +4,11 @@ import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; import { request as http } from './http'; import { DEFAULT_URL } from './constants'; -import type { AcquireInput, OneKeyDeviceInfoWithSession } from '@onekeyfe/hd-transport'; +import type { + AcquireInput, + OneKeyDeviceInfoWithSession, + ProtocolType, +} from '@onekeyfe/hd-transport'; const { check, buildOne, receiveOne, parseConfigure } = transport; @@ -27,6 +31,11 @@ export default class EmulatorTransport { isOutdated = false; + // EmulatorTransport speaks Protocol V1 only. + getProtocolType(_path: string): ProtocolType { + return 'V1'; + } + url: string; Log?: any; diff --git a/packages/hd-transport-http/src/index.ts b/packages/hd-transport-http/src/index.ts index c51caba7f..bb2347f85 100644 --- a/packages/hd-transport-http/src/index.ts +++ b/packages/hd-transport-http/src/index.ts @@ -4,7 +4,11 @@ import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; import { request as http } from './http'; import { DEFAULT_URL } from './constants'; -import type { AcquireInput, OneKeyDeviceInfoWithSession } from '@onekeyfe/hd-transport'; +import type { + AcquireInput, + OneKeyDeviceInfoWithSession, + ProtocolType, +} from '@onekeyfe/hd-transport'; const { check, buildOne, receiveOne, parseConfigure } = transport; @@ -27,6 +31,11 @@ export default class HttpTransport { Log?: any; + // HttpTransport (Bridge) speaks Protocol V1 only. + getProtocolType(_path: string): ProtocolType { + return 'V1'; + } + constructor(url?: string) { this.url = url == null ? DEFAULT_URL : url; } diff --git a/packages/hd-transport-lowlevel/src/index.ts b/packages/hd-transport-lowlevel/src/index.ts index 6588cadc8..f743942f9 100644 --- a/packages/hd-transport-lowlevel/src/index.ts +++ b/packages/hd-transport-lowlevel/src/index.ts @@ -2,7 +2,7 @@ import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; import transport, { LogBlockCommand } from '@onekeyfe/hd-transport'; import type EventEmitter from 'events'; -import type { LowlevelTransportSharedPlugin } from '@onekeyfe/hd-transport'; +import type { LowlevelTransportSharedPlugin, ProtocolType } from '@onekeyfe/hd-transport'; import type { LowLevelAcquireInput } from './types'; const { check, buildBuffers, receiveOne, parseConfigure } = transport; @@ -18,6 +18,11 @@ export default class LowlevelTransport { plugin: LowlevelTransportSharedPlugin = {} as LowlevelTransportSharedPlugin; + // LowlevelTransport speaks Protocol V1 only (the embedder provides byte plumbing only). + getProtocolType(_path: string): ProtocolType { + return 'V1'; + } + init(logger: any, emitter: EventEmitter, plugin: LowlevelTransportSharedPlugin) { this.Log = logger; this.emitter = emitter; diff --git a/packages/hd-transport-react-native/src/index.ts b/packages/hd-transport-react-native/src/index.ts index 32bcb35a8..782e24ac9 100644 --- a/packages/hd-transport-react-native/src/index.ts +++ b/packages/hd-transport-react-native/src/index.ts @@ -12,6 +12,7 @@ import transport, { COMMON_HEADER_SIZE, LogBlockCommand, type OneKeyDeviceInfoBase, + type ProtocolType, } from '@onekeyfe/hd-transport'; import { ERRORS, HardwareErrorCode, createDeferred, isOnekeyDevice } from '@onekeyfe/hd-shared'; import { LoggerNames, getLogger } from '@onekeyfe/hd-core'; @@ -104,6 +105,11 @@ export default class ReactNativeBleTransport { emitter?: EventEmitter; + // ReactNativeBleTransport speaks Protocol V1 only. + getProtocolType(_path: string): ProtocolType { + return 'V1'; + } + constructor(options: TransportOptions) { this.scanTimeout = options.scanTimeout ?? 3000; } diff --git a/packages/hd-transport-usb/src/index.ts b/packages/hd-transport-usb/src/index.ts index 5e648efee..f0334d46a 100644 --- a/packages/hd-transport-usb/src/index.ts +++ b/packages/hd-transport-usb/src/index.ts @@ -6,7 +6,7 @@ import { ERRORS, HardwareErrorCode, ONEKEY_WEBUSB_FILTER, wait } from '@onekeyfe import { HEADER_LENGTH, PACKET_SIZE, PAYLOAD_SIZE, REPORT_ID } from './constants'; import type EventEmitter from 'events'; -import type { AcquireInput, OneKeyDeviceInfo } from '@onekeyfe/hd-transport'; +import type { AcquireInput, OneKeyDeviceInfo, ProtocolType } from '@onekeyfe/hd-transport'; const { parseConfigure, buildEncodeBuffers, decodeProtocol, receiveOne, check } = transport; @@ -187,6 +187,11 @@ export default class NodeUsbTransport { /** set to true when cancel() is called; checked by retry loops */ private cancelled = false; + // NodeUsbTransport speaks Protocol V1 only (no Pro2 USB support yet via libusb). + getProtocolType(_path: string): ProtocolType { + return 'V1'; + } + /** * Initialize transport. * Signature matches the Transport.init interface (logger, emitter). diff --git a/packages/hd-transport-web-device/src/electron-ble-transport.ts b/packages/hd-transport-web-device/src/electron-ble-transport.ts index 9b58c8fb7..75ee82ac2 100644 --- a/packages/hd-transport-web-device/src/electron-ble-transport.ts +++ b/packages/hd-transport-web-device/src/electron-ble-transport.ts @@ -9,6 +9,7 @@ import { import type { Deferred } from '@onekeyfe/hd-shared'; import type EventEmitter from 'events'; +import type { ProtocolType } from '@onekeyfe/hd-transport'; // Import DesktopAPI type from hd-transport-electron import type { DesktopAPI } from '@onekeyfe/hd-transport-electron'; @@ -58,6 +59,11 @@ export default class ElectronBleTransport { // Disconnect listener cleanup functions private disconnectCleanups: Map void> = new Map(); + // ElectronBleTransport (legacy Pro1/Touch BLE) speaks Protocol V1 only. + getProtocolType(_path: string): ProtocolType { + return 'V1'; + } + // Handle bluetooth related errors with proper error code mapping private handleBluetoothError(error: any): never { if (error && typeof error === 'object') { diff --git a/packages/hd-transport-web-device/src/electron-pro2-ble-transport.ts b/packages/hd-transport-web-device/src/electron-pro2-ble-transport.ts new file mode 100644 index 000000000..afe9427d4 --- /dev/null +++ b/packages/hd-transport-web-device/src/electron-pro2-ble-transport.ts @@ -0,0 +1,553 @@ +import transport, { + LogBlockCommand, + PROTOCOL_V2_CHANNEL_BLE_UART, + PROTOCOL_V2_PACKET_SRC_COMMAND, +} from '@onekeyfe/hd-transport'; +import { + ERRORS, + HardwareErrorCode, + HardwareErrorCodeMessage, + createDeferred, + wait, +} from '@onekeyfe/hd-shared'; + +import type { Deferred } from '@onekeyfe/hd-shared'; +import type { DesktopAPI } from '@onekeyfe/hd-transport-electron'; +import type { OneKeyDeviceInfo, ProtocolType } from '@onekeyfe/hd-transport'; +import type EventEmitter from 'events'; + +const { parseConfigure, ProtocolV2, check } = transport; + +declare global { + interface Window { + desktopApi?: DesktopAPI; + } +} + +export type BleAcquireInput = { + uuid: string; + forceCleanRunPromise?: boolean; +}; + +const toPro2Descriptor = (device: { id: string; name: string | null }): OneKeyDeviceInfo => + ({ + id: device.id, + name: device.name, + path: device.id, + debug: false, + commType: 'electron-ble', + protocolType: 'V2', + } as OneKeyDeviceInfo); + +/** + * BLE write chunking — matches legacy noble-ble-handler BLE_PACKET_SIZE. + * Frames larger than this are split into chunks with inter-packet delay. + */ +const BLE_PACKET_SIZE = 192; + +/** Inter-packet delay in ms between BLE write chunks */ +const BLE_WRITE_DELAY_MS = 5; + +/** Maximum number of retries for a BLE GATT write */ +const BLE_WRITE_MAX_RETRIES = 3; + +/** Delay between write retries in ms */ +const BLE_WRITE_RETRY_DELAY_MS = 300; + +/** Timeout for waiting on a BLE notification response (ms) */ +const BLE_RESPONSE_TIMEOUT_MS = 30_000; + +/** + * ElectronPro2BleTransport — BLE transport for OneKey Pro2 using Protocol V2. + * + * This transport uses the same Protocol V2 framing as WebUSB Pro2, + * but communicates over BLE GATT (via Electron Noble bridge). + * + * Frame format (Protocol V2, 0x5A framing): + * [SOF=0x5A] [LEN_L] [LEN_H] [CRC8_HEAD] [CHANNEL] [ATTR] [SEQ] [DATA...] [CRC8_BODY] + * + * BLE I/O model: + * Send: GATT write to writable characteristic (chunked if > BLE_PACKET_SIZE) + * Receive: GATT notification from notify characteristic + */ +export default class ElectronPro2BleTransport { + /** Protocol V1 protobuf schema (Initialize, GetFeatures, etc.) — kept for cross-protocol message lookup */ + private _messages: ReturnType | undefined; + + /** Protocol V2 protobuf schema (Ping, FileWrite, FirmwareUpdate, etc.) */ + private _messagesV2: ReturnType | undefined; + + name = 'ElectronPro2BleTransport'; + + configured = false; + + runPromise: Deferred | null = null; + + Log?: any; + + emitter?: EventEmitter; + + private connectedDevices: Set = new Set(); + + /** Accumulation buffer for reassembling Protocol V2 response frames from BLE notifications */ + private rxBuffers: Map = new Map(); + + private notificationCleanups: Map void> = new Map(); + + private disconnectCleanups: Map void> = new Map(); + + // ----- Error handling ----- + + private handleBluetoothError(error: any): never { + if (error && typeof error === 'object') { + if ('code' in error) { + if (error.code === HardwareErrorCode.BlePoweredOff) { + throw ERRORS.TypedError(HardwareErrorCode.BlePoweredOff); + } + if (error.code === HardwareErrorCode.BleUnsupported) { + throw ERRORS.TypedError(HardwareErrorCode.BleUnsupported); + } + if (error.code === HardwareErrorCode.BlePermissionError) { + throw ERRORS.TypedError(HardwareErrorCode.BlePermissionError); + } + } + const errorMessage = error.message || String(error); + const poweredOffMessage = HardwareErrorCodeMessage[HardwareErrorCode.BlePoweredOff]; + const unsupportedMessage = HardwareErrorCodeMessage[HardwareErrorCode.BleUnsupported]; + const permissionMessage = HardwareErrorCodeMessage[HardwareErrorCode.BlePermissionError]; + + if (errorMessage.includes(poweredOffMessage) || errorMessage.includes('poweredOff')) { + throw ERRORS.TypedError(HardwareErrorCode.BlePoweredOff); + } + if (errorMessage.includes(unsupportedMessage) || errorMessage.includes('unsupported')) { + throw ERRORS.TypedError(HardwareErrorCode.BleUnsupported); + } + if (errorMessage.includes(permissionMessage) || errorMessage.includes('unauthorized')) { + throw ERRORS.TypedError(HardwareErrorCode.BlePermissionError); + } + } + throw error; + } + + // ----- Lifecycle ----- + + private cleanupDeviceState(deviceId: string): void { + this.connectedDevices.delete(deviceId); + this.rxBuffers.delete(deviceId); + + const notifyCleanup = this.notificationCleanups.get(deviceId); + if (notifyCleanup) { + notifyCleanup(); + this.notificationCleanups.delete(deviceId); + } + + const disconnectCleanup = this.disconnectCleanups.get(deviceId); + if (disconnectCleanup) { + disconnectCleanup(); + this.disconnectCleanups.delete(deviceId); + } + } + + init(logger: any, emitter?: EventEmitter) { + this.Log = logger; + this.emitter = emitter; + + if (!window.desktopApi?.nobleBle) { + throw ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + 'Noble BLE API is not available. Please ensure you are running in Electron with Noble support.' + ); + } + + this.Log?.debug('[Pro2 BLE] Transport initialized'); + } + + configure(signedData: any) { + const messages = parseConfigure(signedData); + this.configured = true; + this._messages = messages; + } + + /** + * Configure Protocol V2 protobuf schema for system messages. + */ + configureProtocolV2(signedData: any) { + this._messagesV2 = parseConfigure(signedData); + this.Log?.debug('[Pro2 BLE] Protocol V2 schema configured'); + } + + async listen() { + return this.enumerate(); + } + + async enumerate(): Promise { + try { + if (!window.desktopApi?.nobleBle) { + throw new Error('Noble BLE API not available'); + } + const devices = await window.desktopApi.nobleBle.enumerate(); + this.Log?.debug(`[Pro2 BLE] enumerate found ${devices.length} device(s):`); + for (const dev of devices) { + this.Log?.debug(`[Pro2 BLE] id="${dev.id}" name="${dev.name}"`); + } + return devices.map(toPro2Descriptor); + } catch (error) { + this.Log?.error('[Pro2 BLE] enumerate failed:', error); + this.handleBluetoothError(error); + } + } + + async acquire(input: BleAcquireInput) { + const { uuid, forceCleanRunPromise } = input; + + if (!uuid) { + throw ERRORS.TypedError(HardwareErrorCode.BleRequiredUUID); + } + + if (forceCleanRunPromise && this.runPromise) { + this.runPromise.reject(ERRORS.TypedError(HardwareErrorCode.BleForceCleanRunPromise)); + } + + try { + if (!window.desktopApi?.nobleBle) { + throw new Error('Noble BLE API not available'); + } + + const device = await window.desktopApi.nobleBle.getDevice(uuid); + if (!device) { + throw ERRORS.TypedError(HardwareErrorCode.DeviceNotFound, `Device ${uuid} not found`); + } + + try { + await window.desktopApi.nobleBle.connect(uuid); + this.connectedDevices.add(uuid); + } catch (error) { + this.handleBluetoothError(error); + } + + // Initialize receive buffer + this.rxBuffers.set(uuid, []); + + // Subscribe to notifications + await window.desktopApi.nobleBle.subscribe(uuid); + + // Set up notification listener — receives raw bytes as hex string + const cleanup = window.desktopApi.nobleBle.onNotification( + (deviceId: string, data: string) => { + if (deviceId === uuid) { + this.handleNotification(uuid, data); + } + } + ); + this.notificationCleanups.set(uuid, cleanup); + + // Set up disconnect listener + const disconnectCleanup = window.desktopApi.nobleBle.onDeviceDisconnected( + (disconnectedDevice: any) => { + if (disconnectedDevice.id === uuid) { + this.cleanupDeviceState(uuid); + this.emitter?.emit('device-disconnect', { + name: disconnectedDevice.name, + id: disconnectedDevice.id, + connectId: disconnectedDevice.id, + }); + } + } + ); + this.disconnectCleanups.set(uuid, disconnectCleanup); + + this.emitter?.emit('device-connect', { + name: device.name, + id: device.id, + connectId: device.id, + }); + + return { + ...toPro2Descriptor({ id: device.id, name: device.name }), + uuid, + }; + } catch (error) { + this.Log?.error('[Pro2 BLE] acquire failed:', error); + throw error; + } + } + + async release(id: string) { + try { + if (this.connectedDevices.has(id)) { + if (window.desktopApi?.nobleBle) { + await window.desktopApi.nobleBle.unsubscribe(id); + await window.desktopApi.nobleBle.disconnect(id); + } + this.cleanupDeviceState(id); + } + } catch (error) { + this.Log?.error('[Pro2 BLE] release failed:', error); + this.cleanupDeviceState(id); + } + } + + // ----- BLE Write with chunking & retry ----- + + /** + * Write data to BLE GATT characteristic with chunking and retry. + * + * If the frame is larger than BLE_PACKET_SIZE (192 bytes), it is split + * into chunks with a small inter-packet delay, matching the legacy + * noble-ble-handler behavior. + * + * Each chunk write is retried up to BLE_WRITE_MAX_RETRIES times on failure. + */ + private async writeWithChunking(uuid: string, hexData: string): Promise { + const totalBytes = hexData.length / 2; + + if (totalBytes <= BLE_PACKET_SIZE) { + await wait(BLE_WRITE_DELAY_MS); + await this.writeWithRetry(uuid, hexData); + return; + } + + // Split into chunks + for (let offset = 0; offset < hexData.length; ) { + const chunkHexLen = Math.min(BLE_PACKET_SIZE * 2, hexData.length - offset); + const chunkHex = hexData.substring(offset, offset + chunkHexLen); + offset += chunkHexLen; + + await this.writeWithRetry(uuid, chunkHex); + + if (offset < hexData.length) { + await wait(BLE_WRITE_DELAY_MS); + } + } + } + + /** + * Write a single chunk to BLE with retry on failure. + */ + private async writeWithRetry(uuid: string, hexData: string): Promise { + let lastError: any; + const nobleBle = window.desktopApi?.nobleBle; + if (!nobleBle) { + throw new Error('Noble BLE API not available'); + } + + for (let attempt = 1; attempt <= BLE_WRITE_MAX_RETRIES; attempt++) { + try { + await nobleBle.write(uuid, hexData); + return; + } catch (error) { + lastError = error; + this.Log?.error( + `[Pro2 BLE] Write failed (attempt ${attempt}/${BLE_WRITE_MAX_RETRIES}):`, + error + ); + if (attempt < BLE_WRITE_MAX_RETRIES) { + await wait(BLE_WRITE_RETRY_DELAY_MS); + } + } + } + throw ERRORS.TypedError( + HardwareErrorCode.BleWriteCharacteristicError, + `BLE write failed after ${BLE_WRITE_MAX_RETRIES} attempts: ${lastError?.message ?? lastError}` + ); + } + + // ----- BLE Notification Handling (Protocol V2 frame reassembly) ----- + + /** + * Handle a single BLE notification payload. + * + * Protocol V2 frames may arrive in multiple BLE notifications + * depending on MTU. We accumulate chunks and attempt parsing + * after each arrival. + */ + private handleNotification(deviceId: string, hexData: string): void { + if (hexData === 'PAIRING_REJECTED') { + this.Log?.debug('[Pro2 BLE] Pairing rejection detected for device:', deviceId); + if (this.runPromise) { + this.runPromise.reject(ERRORS.TypedError(HardwareErrorCode.BleDeviceBondedCanceled)); + } + return; + } + + try { + const bytes = hexToBytes(hexData); + if (bytes.length === 0) return; + + const chunks = this.rxBuffers.get(deviceId); + if (!chunks) return; + + chunks.push(bytes); + + // Try to assemble a complete Protocol V2 frame + const assembled = concatUint8Arrays(chunks); + + // Need at least 4 bytes to read the frame length + if (assembled.length < 4) return; + + // Check SOF + if (assembled[0] !== 0x5a) { + // Not a Protocol V2 frame — discard accumulated data + this.rxBuffers.set(deviceId, []); + this.Log?.error('[Pro2 BLE] Invalid SOF byte, discarding buffer'); + return; + } + + // Read expected frame length + const expectedLen = assembled[1] + assembled[2] * 256; + + // Protocol V2 LEN is the complete frame size, same as parseProtoV2Frame(). + const totalFrameBytes = expectedLen; + + if (assembled.length < totalFrameBytes) { + // Need more data — keep accumulating + return; + } + + // We have a complete frame + const frameData = assembled.slice(0, totalFrameBytes); + this.rxBuffers.set(deviceId, []); + + if (this.runPromise) { + this.runPromise.resolve(frameData); + } + } catch (error) { + this.Log?.error('[Pro2 BLE] Notification handling error:', error); + if (this.runPromise) { + this.runPromise.reject(ERRORS.TypedError(HardwareErrorCode.BleWriteCharacteristicError)); + } + } + } + + // ----- Core RPC (Protocol V2) ----- + + async call(uuid: string, name: string, data: Record) { + if (!this._messages) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); + } + + const forceRun = name === 'Initialize' || name === 'Cancel'; + + if (this.runPromise && !forceRun) { + throw ERRORS.TypedError(HardwareErrorCode.TransportCallInProgress); + } + + if (!this.connectedDevices.has(uuid)) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotFound, `Device ${uuid} not connected`); + } + + if (name === 'ResourceUpdate' || name === 'ResourceAck') { + this.Log?.debug('[Pro2 BLE] call', 'name:', name, 'data:', { + file_name: data?.file_name, + hash: data?.hash, + }); + } else if (LogBlockCommand.has(name)) { + this.Log?.debug('[Pro2 BLE] call', 'name:', name); + } else { + this.Log?.debug('[Pro2 BLE] call', 'name:', name, 'data:', data); + } + + this.runPromise = createDeferred(); + + try { + if (!window.desktopApi?.nobleBle) { + throw new Error('Noble BLE API not available'); + } + + if (!this._messagesV2) { + throw ERRORS.TypedError( + HardwareErrorCode.TransportNotConfigured, + 'Protocol V2 schema not configured' + ); + } + + const frame = ProtocolV2.encode( + { + protocolV1: this._messages, + protocolV2: this._messagesV2, + }, + name, + data, + { + packetSrc: PROTOCOL_V2_PACKET_SRC_COMMAND, + router: PROTOCOL_V2_CHANNEL_BLE_UART, + } + ); + + // Send frame via BLE GATT write (with chunking & retry) + const hexString = bytesToHex(frame); + await this.writeWithChunking(uuid, hexString); + + // Wait for response with timeout + const rxFrame = await Promise.race([ + this.runPromise.promise, + new Promise((_, reject) => { + setTimeout(() => { + reject( + ERRORS.TypedError( + HardwareErrorCode.BleTimeoutError, + `BLE response timeout after ${BLE_RESPONSE_TIMEOUT_MS}ms for ${name}` + ) + ); + }, BLE_RESPONSE_TIMEOUT_MS); + }), + ]); + + if (!(rxFrame instanceof Uint8Array)) { + throw new Error('Response is not Uint8Array'); + } + + const decoded = ProtocolV2.decode( + { + protocolV1: this._messages, + protocolV2: this._messagesV2, + }, + rxFrame + ); + + this.Log?.debug( + `[ProtocolV2 BLE] TX name=${name} | RX msgType=${decoded.msgType} pbPayload=${decoded.pbPayload.length}B` + ); + + return check.call(decoded); + } catch (e) { + this.Log?.error('[Pro2 BLE] call error:', e); + throw e; + } finally { + this.runPromise = null; + } + } + + getProtocolType(_path: string): ProtocolType { + return 'V2'; + } +} + +// ----- Utility functions ----- + +function hexToBytes(hex: string): Uint8Array { + const clean = hex.replace(/\s+/g, ''); + if (clean.length === 0 || clean.length % 2 !== 0) return new Uint8Array(0); + const bytes = new Uint8Array(clean.length / 2); + for (let i = 0; i < bytes.length; i++) { + bytes[i] = parseInt(clean.substring(i * 2, i * 2 + 2), 16); + } + return bytes; +} + +function bytesToHex(bytes: Uint8Array): string { + return Array.from(bytes) + .map(b => b.toString(16).padStart(2, '0')) + .join(''); +} + +function concatUint8Arrays(arrays: Uint8Array[]): Uint8Array { + const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const arr of arrays) { + result.set(arr, offset); + offset += arr.length; + } + return result; +} diff --git a/packages/hd-transport-web-device/src/index.ts b/packages/hd-transport-web-device/src/index.ts index e2e101bd6..6cd43f4c1 100644 --- a/packages/hd-transport-web-device/src/index.ts +++ b/packages/hd-transport-web-device/src/index.ts @@ -1,4 +1,5 @@ import WebUsbTransport from './webusb'; import ElectronBleTransport from './electron-ble-transport'; +import ElectronPro2BleTransport from './electron-pro2-ble-transport'; -export { WebUsbTransport, ElectronBleTransport }; +export { WebUsbTransport, ElectronBleTransport, ElectronPro2BleTransport }; diff --git a/packages/hd-transport-web-device/src/webusb.ts b/packages/hd-transport-web-device/src/webusb.ts index 45138c5cc..ed1b0099e 100644 --- a/packages/hd-transport-web-device/src/webusb.ts +++ b/packages/hd-transport-web-device/src/webusb.ts @@ -1,11 +1,11 @@ /* eslint-disable no-undef */ -import transport, { LogBlockCommand } from '@onekeyfe/hd-transport'; +import transport, { LogBlockCommand, PROTOCOL_V2_USB_PID } from '@onekeyfe/hd-transport'; import { ERRORS, HardwareErrorCode, ONEKEY_WEBUSB_FILTER, wait } from '@onekeyfe/hd-shared'; import ByteBuffer from 'bytebuffer'; -import type { AcquireInput, OneKeyDeviceInfoBase } from '@onekeyfe/hd-transport'; +import type { AcquireInput, OneKeyDeviceInfoBase, ProtocolType } from '@onekeyfe/hd-transport'; -const { parseConfigure, buildEncodeBuffers, decodeProtocol, receiveOne, check } = transport; +const { parseConfigure, decodeProtocol, check, ProtocolV1, ProtocolV2 } = transport; const CONFIGURATION_ID = 1; const INTERFACE_ID = 0; @@ -23,9 +23,25 @@ export interface DeviceInfo extends OneKeyDeviceInfoBase { device: USBDevice; } +/** USB endpoint pair discovered at connect time */ +interface DeviceEndpoints { + interfaceNumber: number; + endpointIn: number; + endpointOut: number; +} + export default class WebUsbTransport { messages: ReturnType | undefined; + /** Protobuf schema for Protocol V2 devices (Pro2) */ + messagesV2: ReturnType | undefined; + + /** Per-path protocol type (set from PID at connect time) */ + private deviceProtocol: Map = new Map(); + + /** Per-path USB endpoint / interface numbers (discovered from USB descriptors) */ + private deviceEndpoints: Map = new Map(); + name = 'WebUsbTransport'; stopped = false; @@ -65,7 +81,7 @@ export default class WebUsbTransport { } /** - * Configure transport protocol + * Configure Protocol V1 protobuf schema (legacy chunked 0x3F framing). */ configure(signedData: any) { const messages = parseConfigure(signedData); @@ -73,6 +89,15 @@ export default class WebUsbTransport { this.messages = messages; } + /** + * Configure Protocol V2 protobuf schema (Pro2 0x5A framing). + * Called by TransportManager after the default configure(). + */ + configureProtocolV2(signedData: any) { + this.messagesV2 = parseConfigure(signedData); + this.Log?.debug('[WebUsbTransport] Protocol V2 schema configured'); + } + /** * Request user to select a device * This method must be called in response to a user action @@ -123,6 +148,16 @@ export default class WebUsbTransport { commType: 'webusb', })); + // Debug: log all discovered devices with PID to identify protocol version + for (const dev of onekeyDevices) { + const isProtocolV2 = dev.productId === PROTOCOL_V2_USB_PID; + this.Log.debug( + `[WebUSB] Device: name="${dev.productName}" serial="${dev.serialNumber}" ` + + `VID=0x${dev.vendorId.toString(16)} PID=0x${dev.productId.toString(16)} ` + + `${isProtocolV2 ? '→ Protocol V2' : '→ Protocol V1'}` + ); + } + return this.deviceList; } @@ -133,6 +168,8 @@ export default class WebUsbTransport { if (!input.path) return; try { await this.connect(input.path ?? '', true); + // Determine protocol from PID (set after connect so deviceList is populated) + this.detectProtocol(input.path); return await Promise.resolve(input.path); } catch (e) { this.Log.debug('acquire error: ', e instanceof Error ? `${e.name}: ${e.message}` : String(e)); @@ -140,6 +177,27 @@ export default class WebUsbTransport { } } + /** + * Determine protocol type from USB Product ID. + * PID 0x53C1 (PROTOCOL_V2_USB_PID) → Protocol V2 (0x5A framing, Pro2) + * All other PIDs → Protocol V1 (64-byte chunked, 0x3F framing, Pro1 and earlier) + * + * We rely on PID because it is set in firmware and uniquely identifies the device + * generation. No wire-level probe is needed. + */ + private detectProtocol(path: string): ProtocolType { + const deviceInfo = this.deviceList.find(d => d.path === path); + const protocol: ProtocolType = + deviceInfo?.device.productId === PROTOCOL_V2_USB_PID ? 'V2' : 'V1'; + this.deviceProtocol.set(path, protocol); + this.Log.debug( + `[WebUsbTransport] detectProtocol: path=${path} PID=0x${( + deviceInfo?.device.productId ?? 0 + ).toString(16)} → ${protocol}` + ); + return protocol; + } + /** * Find device by path */ @@ -182,22 +240,62 @@ export default class WebUsbTransport { } /** - * Connect to specific device + * Discover vendor-class (0xFF) interface and its IN/OUT endpoint numbers from USB descriptors. + * Falls back to legacy hardcoded values if no vendor interface is found. + */ + private discoverEndpoints(device: USBDevice): DeviceEndpoints { + for (const config of device.configurations) { + for (const iface of config.interfaces) { + for (const alt of iface.alternates) { + if (alt.interfaceClass === 0xff) { + let endpointIn = this.endpointId; + let endpointOut = this.endpointId; + for (const ep of alt.endpoints) { + if (ep.direction === 'in') endpointIn = ep.endpointNumber; + else endpointOut = ep.endpointNumber; + } + this.Log?.debug( + `[WebUsbTransport] discovered vendor interface ${iface.interfaceNumber}, ` + + `endpointIn=${endpointIn}, endpointOut=${endpointOut}` + ); + return { interfaceNumber: iface.interfaceNumber, endpointIn, endpointOut }; + } + } + } + } + // Fallback: legacy hardcoded values + this.Log?.debug('[WebUsbTransport] no vendor interface found, using defaults'); + return { + interfaceNumber: this.interfaceId, + endpointIn: this.endpointId, + endpointOut: this.endpointId, + }; + } + + /** + * Connect to specific device. + * Discovers interface/endpoint numbers from USB descriptors on first connection. */ async connectToDevice(path: string, first: boolean) { const device: USBDevice = await this.findDevice(path); + this.Log.debug( + '[WebUsbTransport] connecting to device:', + device.productName, + 'PID:', + device.productId + ); + await device.open(); if (first) { await device.selectConfiguration(this.configurationId); - try { - await device.reset(); - } catch (error) { - // Ignore reset errors - } } - await device.claimInterface(this.interfaceId); + // Discover endpoints from USB descriptors (works for both Pro1 and Pro2) + const endpoints = this.discoverEndpoints(device); + this.deviceEndpoints.set(path, endpoints); + + await device.claimInterface(endpoints.interfaceNumber); } async post(session: string, name: string, data: Record) { @@ -243,8 +341,10 @@ export default class WebUsbTransport { try { const currentDevice = await this.findDevice(path); if (currentDevice.opened) { + const endpoints = this.deviceEndpoints.get(path); + const ifaceNum = endpoints?.interfaceNumber ?? this.interfaceId; try { - await currentDevice.releaseInterface(this.interfaceId); + await currentDevice.releaseInterface(ifaceNum); } catch (releaseError) { this.Log.debug('[WebUsbTransport] releaseInterface before retry error:', releaseError); } @@ -285,10 +385,12 @@ export default class WebUsbTransport { if (!device.opened) { await this.connect(path, false); } + const endpoints = this.deviceEndpoints.get(path); + const endpointOut = endpoints?.endpointOut ?? this.endpointId; const transferBuffer = this.toArrayBuffer( packet.buffer.slice(packet.byteOffset, packet.byteOffset + packet.byteLength) ); - await device.transferOut(this.endpointId, transferBuffer); + await device.transferOut(endpointOut, transferBuffer); return; } catch (error) { lastError = error; @@ -319,7 +421,9 @@ export default class WebUsbTransport { if (!device.opened) { await this.connect(path, false); } - const result = await device.transferIn(this.endpointId, length); + const endpoints = this.deviceEndpoints.get(path); + const endpointIn = endpoints?.endpointIn ?? this.endpointId; + const result = await device.transferIn(endpointIn, length); return this.getTransferInData(result); } catch (error) { lastError = error; @@ -343,7 +447,7 @@ export default class WebUsbTransport { } /** - * Call device method + * Call device method — branches to Protocol V1 or Protocol V2 based on detected protocol. */ async call(path: string, name: string, data: Record) { if (this.messages == null) { @@ -355,19 +459,26 @@ export default class WebUsbTransport { throw ERRORS.TypedError(HardwareErrorCode.DeviceNotFound); } - const { messages } = this; + const protocol = this.deviceProtocol.get(path) ?? 'V1'; + if (LogBlockCommand.has(name)) { - this.Log.debug('call-', ' name: ', name); + this.Log.debug('call-', ' name: ', name, ' protocol: ', protocol); } else { - this.Log.debug('call-', ' name: ', name, ' data: ', data); + this.Log.debug('call-', ' name: ', name, ' data: ', data, ' protocol: ', protocol); } - const encodeBuffers = buildEncodeBuffers(messages, name, data); + + if (protocol === 'V2') { + return this.callProtocolV2(path, name, data); + } + + // --- Protocol V1 path (Pro1 and earlier, 64-byte chunked 0x3F framing) --- + const { messages } = this; + const encodeBuffers = ProtocolV1.encode(messages, name, data); for (const buffer of encodeBuffers) { const newArray: Uint8Array = new Uint8Array(PACKET_SIZE); newArray[0] = 63; newArray.set(new Uint8Array(buffer), 1); - // console.log('send packet: ', newArray); await this.transferOutWithRetry(path, newArray); } @@ -375,10 +486,87 @@ export default class WebUsbTransport { if (typeof resData !== 'string') { throw ERRORS.TypedError(HardwareErrorCode.NetworkError, 'Returning data is not string.'); } - const jsonData = receiveOne(messages, resData); + const jsonData = ProtocolV1.decode(messages, resData); return check.call(jsonData); } + /** + * Send/receive a single call over Protocol V2 (0x5A framing, Pro2). + * + * Encoding: protobuf message → 2-byte LE msgType + pb bytes → Protocol V2 frame + * Decoding: Protocol V2 frame → msgType + pb bytes → protobuf message + */ + private async callProtocolV2(path: string, name: string, data: Record) { + const protocolV1Messages = this.messages; + if (!this.messagesV2) { + throw ERRORS.TypedError( + HardwareErrorCode.TransportNotConfigured, + 'Protocol V2 schema not configured' + ); + } + if (!protocolV1Messages) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); + } + + // USB endpoints reach the main MCU directly, so no proto-link routing fields + // (channel/packetSrc) are needed. BLE goes through a coprocessor UART bridge + // and must set them — see ElectronPro2BleTransport.call(). + const frame = ProtocolV2.encode( + { + protocolV1: protocolV1Messages, + protocolV2: this.messagesV2, + }, + name, + data + ); + + // Protocol V2 supports a larger single frame than Protocol V1 chunk packets. + await this.transferOutWithRetry(path, frame); + + // 4. Single transferIn — read up to 4096 bytes + const rxDataView = await this.transferInWithRetry(path, 4096); + const rxBytes = new Uint8Array( + this.toArrayBuffer( + rxDataView.buffer.slice( + rxDataView.byteOffset, + rxDataView.byteOffset + rxDataView.byteLength + ) + ) + ); + + const decoded = ProtocolV2.decode( + { + protocolV1: protocolV1Messages, + protocolV2: this.messagesV2, + }, + rxBytes + ); + + // Debug: log raw frame and decoded payload + this.Log.debug( + `[ProtocolV2] TX name=${name} | RX msgType=${decoded.msgType} pbPayload=${decoded.pbPayload.length}B` + ); + this.Log.debug( + `[ProtocolV2] RX raw frame (${rxBytes.length}B): ${Array.from( + rxBytes.slice(0, Math.min(rxBytes.length, 64)) + ) + .map(b => b.toString(16).padStart(2, '0')) + .join(' ')}${rxBytes.length > 64 ? '...' : ''}` + ); + this.Log.debug( + `[ProtocolV2] RX pb hex (${decoded.pbPayload.length}B): ${Array.from(decoded.pbPayload) + .map((b: number) => b.toString(16).padStart(2, '0')) + .join(' ')}` + ); + + this.Log.debug( + `[ProtocolV2] Decoded ${decoded.messageName}:`, + JSON.stringify(decoded.message, null, 2) + ); + + return check.call(decoded); + } + /** * Receive data from device */ @@ -415,7 +603,19 @@ export default class WebUsbTransport { */ async release(path: string) { const device: USBDevice = await this.findDevice(path); - await device.releaseInterface(this.interfaceId); + const endpoints = this.deviceEndpoints.get(path); + const ifaceNum = endpoints?.interfaceNumber ?? this.interfaceId; + await device.releaseInterface(ifaceNum); await device.close(); + this.deviceProtocol.delete(path); + this.deviceEndpoints.delete(path); + } + + /** + * Expose the detected protocol type for a given device path. + * Used by upper layers (e.g. TransportManager) to select the correct schema. + */ + getProtocolType(path: string): ProtocolType { + return this.deviceProtocol.get(path) ?? 'V1'; } } diff --git a/packages/hd-transport/src/constants.ts b/packages/hd-transport/src/constants.ts index a4bbe01aa..30aff43d5 100644 --- a/packages/hd-transport/src/constants.ts +++ b/packages/hd-transport/src/constants.ts @@ -1,3 +1,5 @@ +// ---- Protocol V1 (Pro1 / Touch / Mini / Classic) ---- + export const MESSAGE_TOP_CHAR = 0x003f; export const MESSAGE_HEADER_BYTE = 0x23; export const HEADER_SIZE = 1 + 1 + 4 + 2; @@ -6,3 +8,36 @@ export const BUFFER_SIZE = 63; * exclude ?## */ export const COMMON_HEADER_SIZE = 6; + +// ---- Protocol V2 (Pro2) ---- + +/** + * USB Product ID for Pro2 — used by WebUSB transport to detect Protocol V2 devices. + * + * TODO(pro2-pid): Pro2 currently shares 0x53c1 with Classic / Mini / Pro / Touch + * firmware (see ONEKEY_WEBUSB_FILTER comments in packages/shared/src/constants.ts). + * That means PID-only detection mis-identifies V1 devices as V2 when Pro2 firmware + * leaves this PID. Production fix: assign a Pro2-specific PID and update this + * constant. Until then this detection is only safe in environments where only + * Pro2 devices connect. + */ +export const PROTOCOL_V2_USB_PID = 0x53c1; + +/** Maximum size of a Protocol V2 frame including header + payload + CRC */ +export const PROTOCOL_V2_FRAME_MAX_BYTES = 2200; + +/** Safe data chunk for FileWrite payload (frame max minus FileWrite overhead, ~50B) */ +export const PROTOCOL_V2_FILE_CHUNK_SIZE = 2048; + +/** + * Protocol V2 routing channel IDs. + * The firmware multiplexes the V2 frame across transports. + * USB endpoints talk directly to the main MCU (no proto-link routing needed), + * while BLE goes through the BLE coprocessor's UART bridge and must specify CHANNEL=1. + */ +export const PROTOCOL_V2_CHANNEL_USB = 0; +export const PROTOCOL_V2_CHANNEL_BLE_UART = 1; +export const PROTOCOL_V2_CHANNEL_SOCKET = 2; + +/** Protocol V2 packet_src for protobuf command/response traffic */ +export const PROTOCOL_V2_PACKET_SRC_COMMAND = 1; diff --git a/packages/hd-transport/src/index.ts b/packages/hd-transport/src/index.ts index 2653f634b..28082d259 100644 --- a/packages/hd-transport/src/index.ts +++ b/packages/hd-transport/src/index.ts @@ -5,8 +5,16 @@ import { buildBuffers, buildEncodeBuffers, buildOne, + createMessageFromName, + createMessageFromType, + decodeProtobuf, decodeProtocol, + encodeProtobuf, parseConfigure, + ProtocolV1, + ProtocolV2, + PROTOCOL_V2_SYS_MESSAGE_THRESHOLD, + protoV2, receiveOne, } from './serialization'; import * as check from './utils/highlevel-checks'; @@ -25,6 +33,7 @@ export type { LowLevelDevice, OneKeyDeviceInfoBase, OneKeyDeviceCommType, + ProtocolType, } from './types'; export { Messages } from './types'; @@ -41,4 +50,12 @@ export default { receiveOne, parseConfigure, decodeProtocol, + protoV2, + ProtocolV1, + ProtocolV2, + PROTOCOL_V2_SYS_MESSAGE_THRESHOLD, + createMessageFromName, + createMessageFromType, + encodeProtobuf, + decodeProtobuf, }; diff --git a/packages/hd-transport/src/serialization/index.ts b/packages/hd-transport/src/serialization/index.ts index e7f6ecea2..a2c76e37e 100644 --- a/packages/hd-transport/src/serialization/index.ts +++ b/packages/hd-transport/src/serialization/index.ts @@ -3,6 +3,11 @@ import { parseConfigure } from './protobuf'; export * from './send'; export * from './receive'; -export * as decodeProtocol from './protocol/decode'; +export * as decodeProtocol from './protocol-v1/decode'; +export * as protoV2 from './protocol-v2'; export { parseConfigure }; +export { PROTOCOL_V2_SYS_MESSAGE_THRESHOLD, ProtocolV1, ProtocolV2 } from './protocols'; +export { createMessageFromName, createMessageFromType } from './protobuf/messages'; +export { encode as encodeProtobuf } from './protobuf/encode'; +export { decode as decodeProtobuf } from './protobuf/decode'; diff --git a/packages/hd-transport/src/serialization/protocol/decode.ts b/packages/hd-transport/src/serialization/protocol-v1/decode.ts similarity index 100% rename from packages/hd-transport/src/serialization/protocol/decode.ts rename to packages/hd-transport/src/serialization/protocol-v1/decode.ts diff --git a/packages/hd-transport/src/serialization/protocol/encode.ts b/packages/hd-transport/src/serialization/protocol-v1/encode.ts similarity index 100% rename from packages/hd-transport/src/serialization/protocol/encode.ts rename to packages/hd-transport/src/serialization/protocol-v1/encode.ts diff --git a/packages/hd-transport/src/serialization/protocol/index.ts b/packages/hd-transport/src/serialization/protocol-v1/index.ts similarity index 100% rename from packages/hd-transport/src/serialization/protocol/index.ts rename to packages/hd-transport/src/serialization/protocol-v1/index.ts diff --git a/packages/hd-transport/src/serialization/protocol-v2/constants.ts b/packages/hd-transport/src/serialization/protocol-v2/constants.ts new file mode 100644 index 000000000..10511bc9c --- /dev/null +++ b/packages/hd-transport/src/serialization/protocol-v2/constants.ts @@ -0,0 +1,6 @@ +export const PROTO_HEAD_SOF = 0x5a; +export const PROTO_PRE_HEAD_SIZE = 4; +export const PROTO_HEAD_CRC_SIZE = 8; +export const CRC8_INIT = 0x30; +export const PACKET_SIZE = 2048; +export const PROTO_DATA_TYPE_PACKET = 0; diff --git a/packages/hd-transport/src/serialization/protocol-v2/crc8.ts b/packages/hd-transport/src/serialization/protocol-v2/crc8.ts new file mode 100644 index 000000000..91b9b2005 --- /dev/null +++ b/packages/hd-transport/src/serialization/protocol-v2/crc8.ts @@ -0,0 +1,35 @@ +import { CRC8_INIT } from './constants'; + +// CRC-8 lookup table (same as firmware crc8.c, polynomial init=0x30) +// Extracted from OneKey Pro2 webusb test reference implementation +export const CRC8_TABLE = new Uint8Array([ + 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, + 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, + 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, + 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, + 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, + 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, + 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, + 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, + 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, + 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, + 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, + 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, + 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, + 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, + 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, + 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35, +]); + +/** + * Compute CRC-8 over `len` bytes of `data`. + * Uses the lookup table with init=0x30 (same as OneKey Pro2 firmware). + */ +export function crc8(data: Uint8Array, len: number): number { + let crc = CRC8_INIT; + for (let i = 0; i < len; i++) { + // eslint-disable-next-line no-bitwise + crc = CRC8_TABLE[crc ^ data[i]]; + } + return crc; +} diff --git a/packages/hd-transport/src/serialization/protocol-v2/decode.ts b/packages/hd-transport/src/serialization/protocol-v2/decode.ts new file mode 100644 index 000000000..ee01ccae2 --- /dev/null +++ b/packages/hd-transport/src/serialization/protocol-v2/decode.ts @@ -0,0 +1,72 @@ +import { PROTO_HEAD_CRC_SIZE, PROTO_HEAD_SOF } from './constants'; +import { crc8 } from './crc8'; + +export interface ProtoV2Frame { + /** Little-endian message type ID */ + msgType: number; + /** Raw protobuf-encoded payload (bytes after the 2-byte msgType) */ + pbPayload: Uint8Array; + /** Sequence number from the frame header */ + seq: number; +} + +/** + * Parse and validate a Protocol V2 response frame. + * + * Validates: + * - SOF byte (0x5A) + * - Header CRC (bytes 0-2) + * - Frame CRC (full frame except last byte) + * + * Returns the decoded msgType, raw protobuf payload, and sequence number. + */ +export function parseProtoV2Frame(data: Uint8Array): ProtoV2Frame { + if (data.length < PROTO_HEAD_CRC_SIZE) { + throw new Error(`Protocol V2 frame too short: ${data.length} bytes`); + } + + if (data[0] !== PROTO_HEAD_SOF) { + throw new Error( + `Invalid SOF byte: expected 0x5A, got 0x${data[0].toString(16).padStart(2, '0')}` + ); + } + + const frameLen = data[1] + data[2] * 256; + + if (data.length < frameLen) { + throw new Error(`Frame truncated: expected ${frameLen} bytes, got ${data.length}`); + } + + // Verify pre-header CRC (bytes 0-2) + const expectedHeaderCrc = crc8(data, 3); + if (data[3] !== expectedHeaderCrc) { + throw new Error( + `Header CRC mismatch: expected 0x${expectedHeaderCrc + .toString(16) + .padStart(2, '0')}, got 0x${data[3].toString(16).padStart(2, '0')}` + ); + } + + // Verify frame CRC (all bytes except last) + const expectedFrameCrc = crc8(data, frameLen - 1); + if (data[frameLen - 1] !== expectedFrameCrc) { + throw new Error( + `Frame CRC mismatch: expected 0x${expectedFrameCrc + .toString(16) + .padStart(2, '0')}, got 0x${data[frameLen - 1].toString(16).padStart(2, '0')}` + ); + } + + const seq = data[6]; + // Payload spans bytes 7 to frameLen-2 (inclusive), excluding final CRC byte + const payloadData = data.slice(7, frameLen - 1); + + if (payloadData.length < 2) { + throw new Error(`Protocol V2 payload too short (need ≥2 bytes for msgType)`); + } + + const msgType = payloadData[0] + payloadData[1] * 256; + const pbPayload = payloadData.slice(2); + + return { msgType, pbPayload, seq }; +} diff --git a/packages/hd-transport/src/serialization/protocol-v2/encode.ts b/packages/hd-transport/src/serialization/protocol-v2/encode.ts new file mode 100644 index 000000000..a5beb8b79 --- /dev/null +++ b/packages/hd-transport/src/serialization/protocol-v2/encode.ts @@ -0,0 +1,72 @@ +import { PROTO_DATA_TYPE_PACKET, PROTO_HEAD_CRC_SIZE, PROTO_HEAD_SOF } from './constants'; +import { crc8 } from './crc8'; + +// Per-session sequence counter; increments on each frame, never 0 +let protoSeq = 0; + +/** + * Build a raw Protocol V2 frame (0x5A framing). + * + * Frame layout (PROTO_HEAD_CRC_SIZE = 8 overhead bytes): + * [0] SOF = 0x5A + * [1] frameLen low byte + * [2] frameLen high byte + * [3] CRC8 of bytes 0-2 (pre-header CRC) + * [4] router + * [5] attr = ((packetSrc & 0x0F) << 2) | dataType + * [6] seq (1-255, wraps skipping 0) + * [7..N-2] payload + * [N-1] CRC8 of bytes 0 to N-2 (frame CRC) + */ +export function buildProtoV2Frame( + payload: Uint8Array | null, + packetSrc = 0, + router = 0 +): Uint8Array { + const payloadLen = payload ? payload.length : 0; + const frameLen = payloadLen + PROTO_HEAD_CRC_SIZE; + const frame = new Uint8Array(frameLen); + + // Advance sequence counter (skip 0) + protoSeq = protoSeq >= 255 ? 1 : protoSeq + 1; + + frame[0] = PROTO_HEAD_SOF; + frame[1] = frameLen % 256; + frame[2] = Math.floor(frameLen / 256) % 256; + frame[3] = 0; // placeholder — filled in below + frame[4] = router % 256; + frame[5] = (packetSrc % 16) * 4 + (PROTO_DATA_TYPE_PACKET % 4); + frame[6] = protoSeq; + + // CRC8 over first 3 bytes (SOF + length) + frame[3] = crc8(frame, 3); + + if (payload && payloadLen > 0) { + frame.set(payload, 7); + } + + // CRC8 over entire frame except last byte + frame[frameLen - 1] = crc8(frame, frameLen - 1); + + return frame; +} + +/** + * Build a Protocol V2 frame carrying a protobuf message. + * + * Payload layout: + * [0-1] msgType as little-endian uint16 + * [2..] protobuf-encoded message bytes + */ +export function buildPbFrame( + msgType: number, + pbPayload: Uint8Array, + packetSrc = 0, + router = 0 +): Uint8Array { + const payload = new Uint8Array(2 + pbPayload.length); + payload[0] = msgType % 256; + payload[1] = Math.floor(msgType / 256) % 256; + payload.set(pbPayload, 2); + return buildProtoV2Frame(payload, packetSrc, router); +} diff --git a/packages/hd-transport/src/serialization/protocol-v2/index.ts b/packages/hd-transport/src/serialization/protocol-v2/index.ts new file mode 100644 index 000000000..aa35d2f23 --- /dev/null +++ b/packages/hd-transport/src/serialization/protocol-v2/index.ts @@ -0,0 +1,4 @@ +export * from './constants'; +export * from './crc8'; +export * from './encode'; +export * from './decode'; diff --git a/packages/hd-transport/src/serialization/protocols.ts b/packages/hd-transport/src/serialization/protocols.ts new file mode 100644 index 000000000..ef7547139 --- /dev/null +++ b/packages/hd-transport/src/serialization/protocols.ts @@ -0,0 +1,82 @@ +import ByteBuffer from 'bytebuffer'; + +import { buildEncodeBuffers } from './send'; +import { receiveOne } from './receive'; +import { createMessageFromName, createMessageFromType } from './protobuf/messages'; +import { encode as encodeProtobuf } from './protobuf/encode'; +import { decode as decodeProtobuf } from './protobuf/decode'; +import { buildPbFrame, parseProtoV2Frame } from './protocol-v2'; + +import type { Root } from 'protobufjs/light'; + +export const PROTOCOL_V2_SYS_MESSAGE_THRESHOLD = 60000; + +type ProtocolV2Schemas = { + protocolV1: Root; + protocolV2: Root; +}; + +type ProtocolV2FrameOptions = { + packetSrc?: number; + router?: number; +}; + +const resolveProtocolV2EncodeSchema = (name: string, schemas: ProtocolV2Schemas) => { + try { + schemas.protocolV2.lookupType(name); + return schemas.protocolV2; + } catch { + return schemas.protocolV1; + } +}; + +const resolveProtocolV2DecodeSchema = (msgType: number, schemas: ProtocolV2Schemas) => { + if (msgType >= PROTOCOL_V2_SYS_MESSAGE_THRESHOLD) { + return schemas.protocolV2; + } + return schemas.protocolV1; +}; + +export const ProtocolV1 = { + encode(messages: Root, name: string, data: Record) { + return buildEncodeBuffers(messages, name, data); + }, + + decode(messages: Root, data: string) { + return receiveOne(messages, data); + }, +}; + +export const ProtocolV2 = { + encode( + schemas: ProtocolV2Schemas, + name: string, + data: Record, + options: ProtocolV2FrameOptions = {} + ) { + const encodeMessages = resolveProtocolV2EncodeSchema(name, schemas); + const { Message, messageType } = createMessageFromName(encodeMessages, name); + const pbBuffer = encodeProtobuf(Message, data); + pbBuffer.reset(); + const rawPbBuffer = pbBuffer.toBuffer() as unknown as ArrayBuffer; + const pbBytes = new Uint8Array(rawPbBuffer); + + return buildPbFrame(messageType, pbBytes, options.packetSrc, options.router); + }, + + decode(schemas: ProtocolV2Schemas, frame: Uint8Array) { + const { msgType, pbPayload } = parseProtoV2Frame(frame); + const decodeMessages = resolveProtocolV2DecodeSchema(msgType, schemas); + const { Message, messageName } = createMessageFromType(decodeMessages, msgType); + const rxByteBuffer = ByteBuffer.wrap(Buffer.from(pbPayload) as unknown as ArrayBuffer); + const message = decodeProtobuf(Message, rxByteBuffer); + + return { + message, + messageName, + msgType, + pbPayload, + type: messageName, + }; + }, +}; diff --git a/packages/hd-transport/src/serialization/receive.ts b/packages/hd-transport/src/serialization/receive.ts index 253fa0424..a15abd6f5 100644 --- a/packages/hd-transport/src/serialization/receive.ts +++ b/packages/hd-transport/src/serialization/receive.ts @@ -1,7 +1,7 @@ import ByteBuffer from 'bytebuffer'; import * as decodeProtobuf from './protobuf/decode'; -import * as decodeProtocol from './protocol/decode'; +import * as decodeProtocol from './protocol-v1/decode'; import { createMessageFromType } from './protobuf/messages'; import type { Root } from 'protobufjs/light'; diff --git a/packages/hd-transport/src/serialization/send.ts b/packages/hd-transport/src/serialization/send.ts index f271e9be8..78ebf07fb 100644 --- a/packages/hd-transport/src/serialization/send.ts +++ b/packages/hd-transport/src/serialization/send.ts @@ -4,7 +4,7 @@ import ByteBuffer from 'bytebuffer'; import { encode as encodeProtobuf } from './protobuf'; -import { encode as encodeProtocol } from './protocol'; +import { encode as encodeProtocol } from './protocol-v1'; import { createMessageFromName } from './protobuf/messages'; import { BUFFER_SIZE, MESSAGE_TOP_CHAR } from '../constants'; diff --git a/packages/hd-transport/src/types/transport.ts b/packages/hd-transport/src/types/transport.ts index 653f09274..3f402a929 100644 --- a/packages/hd-transport/src/types/transport.ts +++ b/packages/hd-transport/src/types/transport.ts @@ -1,5 +1,7 @@ import type EventEmitter from 'events'; +export type ProtocolType = 'V1' | 'V2'; + export type OneKeyDeviceCommType = | 'usb' | 'webusb' @@ -31,7 +33,9 @@ export type OneKeyDeviceInfoBase = { // TODO: sorting type by communication type export type OneKeyDeviceInfo = OneKeyDeviceInfoBase & OneKeyDeviceInfoWithSession & - OneKeyMobileDeviceInfo; + OneKeyMobileDeviceInfo & { + protocolType?: ProtocolType; + }; export type AcquireInput = { path?: string; @@ -54,6 +58,7 @@ export type Transport = { acquire(input: AcquireInput): Promise; release(session: string, onclose: boolean): Promise; configure(signedData: JSON | string): Promise; + configureProtocolV2?: (signedData: JSON | string) => Promise | void; call(session: string, name: string, data: Record): Promise; post(session: string, name: string, data: Record): Promise; read(session: string): Promise; @@ -63,6 +68,12 @@ export type Transport = { // used to reset the session of the transport when the session is not valid disconnect?: (session: string) => Promise; + // Returns the protocol type for a given device path. + // Single-protocol transports (HTTP, emulator, RN-BLE, etc.) always return 'V1'. + // The Pro2 USB transport detects per-device by USB PID; the Pro2 BLE transport + // is V2-only and returns 'V2'. + getProtocolType: (path: string) => ProtocolType; + // web-usb, web-bluetooth request device promptDeviceAccess?: () => Promise; diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts index ebe540509..1f47940f2 100644 --- a/packages/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -94,9 +94,9 @@ export const isOnekeyDevice = (name: string | null, id?: string): boolean => { return true; } - // 过滤 BixinKeyxxx 和 Kxxxx 和 Txxxx + // 过滤 BixinKeyxxx 和 Kxxxx 和 Txxxx 和 Pro2 // i 忽略大小写模式 - const re = /(BixinKey\d{10})|(K\d{4})|(T\d{4})|(Touch\s\w{4})|(Pro\s\w{4})/i; + const re = /(BixinKey\d{10})|(K\d{4})|(T\d{4})|(Touch\s\w{4})|(Pro\s\w{4})|(Pro\s*2)/i; if (name && re.exec(name)) { return true; } From 57a464af3d491c51dc496c094542db5938d8b9fd Mon Sep 17 00:00:00 2001 From: wabicai Date: Mon, 27 Apr 2026 15:20:43 +0800 Subject: [PATCH 04/73] feat(core): Pro2 device type + Protocol V2 firmware update + filesystem API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wires Pro2 (Protocol V2) into the core SDK as a first-class device type and adds the SDK-level entry points for Pro2's filesystem and firmware-update messages. Device type: - `EDeviceType.Pro2` added in `@onekeyfe/hd-shared` and recognized by `getDeviceType()`. New `desktop-web-ble-pro2` settings env routes to `ElectronPro2BleTransport`. - `Device.initialize()` early-branches into `_initializePro2()` when `descriptor.protocolType === 'V2'`. Pro2 doesn't support the legacy `Initialize` handshake, so the SDK sends `Ping` to verify connectivity and synthesizes the minimum `Features` shape downstream code reads (vendor / onekey_device_type / device_id / unlocked / initialized). `device_id` derives from the descriptor (path or BLE UUID) so `getDeviceUUID(features)` stays defined for Pro2. TransportManager: - `reconfigure()` keeps only its features-based messageVersion swap (the legitimate V1 use case for Touch classic vs latest schema). The previous WIP carried a `protocolType` parameter that was being used for cosmetic schema swaps the transport already handles per-call; that's removed. - Initial `configure()` loads V1 default schema and immediately calls `configureProtocolV2Messages()` so the transport holds both schemas; per-device routing happens at `call()` time via `getProtocolType(path)`. Pro2 reboot: - `DeviceRebootToBootloader` and `DeviceRebootToBoardloader` branch on Pro2 to send `Reboot { reboot_type: BootLoader (2) }` / `{ Boardloader (1) }` instead of the V1 `RebootToBootloader` / `RebootToBoardloader` messages. Firmware update (`FirmwareUpdateV3`): - V1 path (Pro1 / Touch / Mini / Classic) is unchanged. Same `validateDeviceAndVersion` gates, same `enterBootloaderMode()` + `executeUpdate()` flow that was on `onekey`. - New `runProtocolV2()` is reached via early-return in `run()` when `descriptor.protocolType === 'V2'`. It: 1. Reuses the common binary-prep helpers (`prepareResourceBinary`, `prepareFirmwareAndBleBinary`, `prepareBootloaderBinary`). 2. Calls `pro2EnterBootloader()` — sends `Reboot { reboot_type: BootLoader }` via the SDK's existing `this.reboot()` helper (typedCall under the hood; the helper already tolerates the device dropping USB during reboot). 1.5s settle wait is the placeholder for a reconnect/Ping handshake that needs to land once Pro2 bootloader-mode is finalized firmware-side. 3. Runs `executeUpdateProtocolV2()` — writes resources to `vol1:res/`, bootloader to `vol1:bootloader.bin`, firmware binaries to `vol1:${name}` (matches the pro2-debug script's `vol1:` convention), then triggers `FirmwareUpdate { targets[], reboot_on_success: true }`. 4. No GetFeatures completion polling — Pro2's V2 schema doesn't expose it. The `FirmwareUpdate` Success response is itself the install-complete signal (matches pro2-debug's synchronous request/response usage with a long timeout). Pro2 filesystem API (`packages/core/src/api/{DirList,DirMake,DirRemove, FileDelete,FileRead,FileWrite,PathInfo}.ts` + `types/api/pro2.ts`): - One BaseMethod-derived class per Pro2 system message. Exposed via `inject.ts` so consumers call `HardwareSDK.dirList(connectId, ...)` / `fileWrite(...)` etc. - Uses `typedCall('FileWrite' | 'DirList' | ..., 'File' | 'Dir' | 'Success' | ...)` — the message names are now in the V1 MessageType union (the protobuf build merges Pro2 system messages into the same protobuf root). Misc: - AlephiumSignTransaction.ts: typing tweak on the `bytecodeRequest` branch — unrelated cleanup that drifted in. This commit collapses the per-iteration core SDK changes (Pro2 device type integration, multiple Initialize/Ping init iterations, firmware update target_id and chunk-size fixes, DeviceReboot* Pro2 branches, file-op API additions) into one coherent change. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/core/src/api/DirList.ts | 18 ++ packages/core/src/api/DirMake.ts | 18 ++ packages/core/src/api/DirRemove.ts | 18 ++ packages/core/src/api/FileDelete.ts | 18 ++ packages/core/src/api/FileRead.ts | 30 +++ packages/core/src/api/FileWrite.ts | 39 ++++ packages/core/src/api/FirmwareUpdateV3.ts | 217 +++++++++++++++++- packages/core/src/api/PathInfo.ts | 20 ++ .../api/alephium/AlephiumSignTransaction.ts | 11 +- .../api/device/DeviceRebootToBoardloader.ts | 10 +- .../api/device/DeviceRebootToBootloader.ts | 10 +- .../api/firmware/FirmwareUpdateBaseMethod.ts | 171 ++++++++++++++ packages/core/src/api/index.ts | 9 + packages/core/src/data-manager/DataManager.ts | 13 +- .../core/src/data-manager/TransportManager.ts | 29 ++- packages/core/src/device/Device.ts | 58 +++++ packages/core/src/inject.ts | 9 + packages/core/src/types/api/index.ts | 20 ++ packages/core/src/types/api/pro2.ts | 77 +++++++ packages/core/src/types/device.ts | 4 +- packages/core/src/types/settings.ts | 3 +- packages/core/src/utils/deviceInfoUtils.ts | 4 + packages/shared/src/deviceType.ts | 1 + 23 files changed, 788 insertions(+), 19 deletions(-) create mode 100644 packages/core/src/api/DirList.ts create mode 100644 packages/core/src/api/DirMake.ts create mode 100644 packages/core/src/api/DirRemove.ts create mode 100644 packages/core/src/api/FileDelete.ts create mode 100644 packages/core/src/api/FileRead.ts create mode 100644 packages/core/src/api/FileWrite.ts create mode 100644 packages/core/src/api/PathInfo.ts create mode 100644 packages/core/src/types/api/pro2.ts diff --git a/packages/core/src/api/DirList.ts b/packages/core/src/api/DirList.ts new file mode 100644 index 000000000..e38411af3 --- /dev/null +++ b/packages/core/src/api/DirList.ts @@ -0,0 +1,18 @@ +import { BaseMethod } from './BaseMethod'; + +export type DirListParams = { + path: string; +}; + +export default class DirList extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { path: this.payload.path }; + } + + async run() { + const res = await (this.device.commands as any).call('DirList', { path: this.params.path }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/DirMake.ts b/packages/core/src/api/DirMake.ts new file mode 100644 index 000000000..37e9915ef --- /dev/null +++ b/packages/core/src/api/DirMake.ts @@ -0,0 +1,18 @@ +import { BaseMethod } from './BaseMethod'; + +export type DirMakeParams = { + path: string; +}; + +export default class DirMake extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { path: this.payload.path }; + } + + async run() { + const res = await (this.device.commands as any).call('DirMake', { path: this.params.path }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/DirRemove.ts b/packages/core/src/api/DirRemove.ts new file mode 100644 index 000000000..c23893461 --- /dev/null +++ b/packages/core/src/api/DirRemove.ts @@ -0,0 +1,18 @@ +import { BaseMethod } from './BaseMethod'; + +export type DirRemoveParams = { + path: string; +}; + +export default class DirRemove extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { path: this.payload.path }; + } + + async run() { + const res = await (this.device.commands as any).call('DirRemove', { path: this.params.path }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/FileDelete.ts b/packages/core/src/api/FileDelete.ts new file mode 100644 index 000000000..f8b162b8e --- /dev/null +++ b/packages/core/src/api/FileDelete.ts @@ -0,0 +1,18 @@ +import { BaseMethod } from './BaseMethod'; + +export type FileDeleteParams = { + path: string; +}; + +export default class FileDelete extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { path: this.payload.path }; + } + + async run() { + const res = await (this.device.commands as any).call('FileDelete', { path: this.params.path }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/FileRead.ts b/packages/core/src/api/FileRead.ts new file mode 100644 index 000000000..537380088 --- /dev/null +++ b/packages/core/src/api/FileRead.ts @@ -0,0 +1,30 @@ +import { BaseMethod } from './BaseMethod'; + +export type FileReadParams = { + path: string; + offset: number; + totalSize: number; +}; + +export default class FileRead extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + path: this.payload.path, + offset: this.payload.offset ?? 0, + totalSize: this.payload.totalSize ?? 0, + }; + } + + async run() { + const res = await (this.device.commands as any).call('FileRead', { + file: { + path: this.params.path, + offset: this.params.offset, + total_size: this.params.totalSize, + }, + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/FileWrite.ts b/packages/core/src/api/FileWrite.ts new file mode 100644 index 000000000..dc4be26aa --- /dev/null +++ b/packages/core/src/api/FileWrite.ts @@ -0,0 +1,39 @@ +import { BaseMethod } from './BaseMethod'; + +export type FileWriteParams = { + path: string; + offset: number; + totalSize: number; + data: Uint8Array | string; + overwrite?: boolean; + append?: boolean; +}; + +export default class FileWrite extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + path: this.payload.path, + offset: this.payload.offset ?? 0, + totalSize: this.payload.totalSize ?? 0, + data: this.payload.data, + overwrite: this.payload.overwrite ?? true, + append: this.payload.append ?? false, + }; + } + + async run() { + const res = await (this.device.commands as any).call('FileWrite', { + file: { + path: this.params.path, + offset: this.params.offset, + total_size: this.params.totalSize, + data: this.params.data, + }, + overwrite: this.params.overwrite, + append: this.params.append, + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/FirmwareUpdateV3.ts b/packages/core/src/api/FirmwareUpdateV3.ts index 6297afb6c..8af7db7b2 100644 --- a/packages/core/src/api/FirmwareUpdateV3.ts +++ b/packages/core/src/api/FirmwareUpdateV3.ts @@ -1,6 +1,7 @@ import { EDeviceType, ERRORS, HardwareError, HardwareErrorCode, wait } from '@onekeyfe/hd-shared'; import semver from 'semver'; import JSZip from 'jszip'; +import { RebootType } from '@onekeyfe/hd-transport'; import { FirmwareUpdateTipMessage, UI_REQUEST } from '../events/ui-request'; import { validateParams } from './helpers/paramsValidator'; @@ -23,6 +24,33 @@ import type { FirmwareUpdateV3Params } from '../types/api/firmwareUpdate'; import type { Deferred, EFirmwareType } from '@onekeyfe/hd-shared'; import type { TypedResponseMessage } from '../device/DeviceCommands'; +/** + * Pro2 FirmwareTargetType enum (from messages-pro2.json) + */ +const Pro2FirmwareTargetType = { + TARGET_MAIN_APP: 0, + TARGET_MAIN_BOOT: 1, + TARGET_BLE: 2, + TARGET_SE1: 3, + TARGET_SE2: 4, + TARGET_SE3: 5, + TARGET_SE4: 6, + TARGET_RESOURCE: 10, +} as const; + +/** + * Map firmware file name to Pro2 target_id + */ +function pro2FileNameToTargetId(fileName: string): number { + if (fileName.includes('ble')) return Pro2FirmwareTargetType.TARGET_BLE; + if (fileName.includes('bootloader')) return Pro2FirmwareTargetType.TARGET_MAIN_BOOT; + if (fileName.includes('se1')) return Pro2FirmwareTargetType.TARGET_SE1; + if (fileName.includes('se2')) return Pro2FirmwareTargetType.TARGET_SE2; + if (fileName.includes('se3')) return Pro2FirmwareTargetType.TARGET_SE3; + if (fileName.includes('se4')) return Pro2FirmwareTargetType.TARGET_SE4; + return Pro2FirmwareTargetType.TARGET_MAIN_APP; +} + const Log = getLogger(LoggerNames.Method); export const MIN_UPDATE_V3_BOOTLOADER_VERSION = '2.8.0'; @@ -80,6 +108,14 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod ({ + target_id: pro2FileNameToTargetId(fw.fileName), + path: `vol1:${fw.fileName}`, + })); + // FirmwareUpdate is treated as synchronous: device responds Success only + // after install finishes (then auto-reboots if reboot_on_success=true). + // No Ping polling needed. + await this.pro2StartFirmwareUpdate({ targets, rebootOnSuccess: true }); + } + private validateDeviceAndVersion(deviceType: EDeviceType, bootloaderVersion: string) { if (deviceType === EDeviceType.Unknown) { throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'unknown device type'); @@ -251,6 +461,7 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { path: this.payload.path }; + } + + async run() { + const res = await (this.device.commands as any).call('PathInfoQuery', { + path: this.params.path, + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/alephium/AlephiumSignTransaction.ts b/packages/core/src/api/alephium/AlephiumSignTransaction.ts index 53a9fe2d8..839422baf 100644 --- a/packages/core/src/api/alephium/AlephiumSignTransaction.ts +++ b/packages/core/src/api/alephium/AlephiumSignTransaction.ts @@ -1,8 +1,3 @@ -import { - type AlephiumSignedTx, - type AlephiumSignTx as HardwareAlephiumSignTx, - TypedCall, -} from '@onekeyfe/hd-transport'; import { bytesToHex } from '@noble/hashes/utils'; import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; @@ -10,6 +5,12 @@ import { UI_REQUEST } from '../../constants/ui-request'; import { validatePath } from '../helpers/pathUtils'; import { BaseMethod } from '../BaseMethod'; import { validateParams } from '../helpers/paramsValidator'; + +import type { + AlephiumSignedTx, + AlephiumSignTx as HardwareAlephiumSignTx, + TypedCall, +} from '@onekeyfe/hd-transport'; import type { AlephiumSignTransactionParams } from '../../types'; import type { TypedResponseMessage } from '../../device/DeviceCommands'; diff --git a/packages/core/src/api/device/DeviceRebootToBoardloader.ts b/packages/core/src/api/device/DeviceRebootToBoardloader.ts index d5dcc9c7a..7854a5ec4 100644 --- a/packages/core/src/api/device/DeviceRebootToBoardloader.ts +++ b/packages/core/src/api/device/DeviceRebootToBoardloader.ts @@ -1,4 +1,7 @@ +import { EDeviceType } from '@onekeyfe/hd-shared'; + import { BaseMethod } from '../BaseMethod'; +import { getDeviceType } from '../../utils/deviceInfoUtils'; import type { RebootToBoardloaderParams } from '../../types/api/deviceRebootToBoardloader'; @@ -21,10 +24,15 @@ export default class DeviceRebootToBoardloader extends BaseMethod extends BaseMethod { } } + // ---- Pro2 (Protocol V2) firmware update helpers ---- + // + // These methods speak Pro2's V2 protobuf schema (DirMake / FileWrite / + // FirmwareUpdate) and are only safe to call from a runProtocolV2() flow, + // i.e. when device.originalDescriptor.protocolType === 'V2'. They do not + // appear on the V1 firmware-update path. + + /** + * Protocol V2: Create directory using DirMake message + */ + async pro2CreateFolder(path: string) { + const typedCall = this.device.getCommands().typedCall.bind(this.device.getCommands()); + await typedCall('DirMake', 'Success', { path }); + } + + /** + * Protocol V2: Write file chunks using FileWrite message. + * Equivalent to emmcCommonUpdateProcess but using Protocol V2 protobuf messages. + */ + async pro2CommonUpdateProcess({ + payload, + filePath, + processedSize, + totalSize, + }: PROTO.FirmwareUpload & { + filePath: string; + processedSize?: number; + totalSize?: number; + }) { + // PROTOCOL_V2_FILE_CHUNK_SIZE = 2048: derived from frame max (2200) minus FileWrite + // overhead (~50). Same value for USB and BLE — BLE Noble handles ATT-level + // fragmentation transparently. + const chunkSize = PROTOCOL_V2_FILE_CHUNK_SIZE; + const totalChunks = Math.ceil(payload.byteLength / chunkSize); + let offset = 0; + let currentFileProcessed = 0; + + for (let i = 0; i < totalChunks; i++) { + const chunkStart = i * chunkSize; + const chunkEnd = Math.min(chunkStart + chunkSize, payload.byteLength); + const chunkLength = chunkEnd - chunkStart; + const chunk = payload.slice(chunkStart, chunkEnd); + const overwrite = i === 0; + + let progress: number; + if (totalSize !== undefined && processedSize !== undefined) { + currentFileProcessed = processedSize + chunkEnd; + progress = Math.min(Math.ceil((currentFileProcessed / totalSize) * 100), 99); + } else { + progress = Math.min(Math.ceil(((i + 1) / totalChunks) * 100), 99); + } + + const writeRes = await this.fileWriteWithRetry( + filePath, + chunkLength, + payload.byteLength, + offset, + chunk, + overwrite, + progress + ); + // @ts-expect-error + offset += writeRes.message.processed_byte ?? chunkLength; + this.postProgressMessage(progress, 'transferData'); + } + + return totalSize !== undefined ? (processedSize ?? 0) + payload.byteLength : 0; + } + + /** + * Protocol V2: Write file chunk with retry using FileWrite message. + */ + async fileWriteWithRetry( + filePath: string, + chunkLength: number, + totalFileSize: number, + offset: number, + chunk: ArrayBuffer | Buffer, + overwrite: boolean, + progress: number | null + ) { + const writeFunc = async () => { + const typedCall = this.device.getCommands().typedCall.bind(this.device.getCommands()); + // @ts-expect-error + const writeRes = await typedCall('FileWrite', 'File', { + file: { + path: filePath, + offset, + total_size: totalFileSize, + data: chunk, + }, + overwrite, + append: offset !== 0, + }); + if (writeRes.type !== 'File') { + // @ts-expect-error + if (writeRes.type === 'CallMethodError') { + if (((writeRes as any).message.error ?? '').indexOf(SESSION_ERROR) > -1) { + throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, SESSION_ERROR); + } + } + throw ERRORS.TypedError( + HardwareErrorCode.EmmcFileWriteFirmwareError, + 'transfer data error' + ); + } + return writeRes; + }; + + let retryCount = 10; + while (retryCount > 0) { + try { + const result = await writeFunc(); + return result; + } catch (error) { + Log.error(`fileWrite error: `, error); + retryCount--; + if (retryCount === 0) { + throw ERRORS.TypedError( + HardwareErrorCode.EmmcFileWriteFirmwareError, + 'transfer data error' + ); + } + const env = DataManager.getSettings('env'); + if (DataManager.isBleConnect(env)) { + await wait(3000); + await this.device.deviceConnector?.acquire(this.device.originalDescriptor.id, null, true); + await this.device.initialize(); + } + await wait(2000); + } + } + } + + /** + * Protocol V2: Trigger firmware update using FirmwareUpdate message. + * Uses targets[] to specify which chip + file path to install + */ + async pro2StartFirmwareUpdate({ + targets, + rebootOnSuccess = true, + }: { + targets: Array<{ target_id: number; path: string }>; + rebootOnSuccess?: boolean; + }) { + const typedCall = this.device.getCommands().typedCall.bind(this.device.getCommands()); + let updateResponse: TypedResponseMessage<'Success'>; + try { + updateResponse = await typedCall('FirmwareUpdate', 'Success', { + targets, + reboot_on_success: rebootOnSuccess, + }); + } catch (error) { + if (isDeviceDisconnectedError(error)) { + Log.log('Rebooting device'); + updateResponse = { + type: 'Success', + message: { message: FIRMWARE_UPDATE_CONFIRM }, + }; + } else { + throw error; + } + } + if (updateResponse.type !== 'Success') { + throw ERRORS.TypedError(HardwareErrorCode.FirmwareError, 'firmware update error'); + } + this.postTipMessage(FirmwareUpdateTipMessage.FirmwareUpdating); + } + /** * @description Device reboot (available in bootloader mode) * @param rebootType Reboot type, see the RebootType enum diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 333287f0d..34d499d6f 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -39,6 +39,15 @@ export { default as firmwareUpdateV2 } from './FirmwareUpdateV2'; export { default as firmwareUpdateV3 } from './FirmwareUpdateV3'; export { default as promptWebDeviceAccess } from './PromptWebDeviceAccess'; +// File system & device control API (Pro2-only, uses Proto V0 protocol) +export { default as fileRead } from './FileRead'; +export { default as fileWrite } from './FileWrite'; +export { default as fileDelete } from './FileDelete'; +export { default as dirList } from './DirList'; +export { default as dirMake } from './DirMake'; +export { default as dirRemove } from './DirRemove'; +export { default as pathInfo } from './PathInfo'; + export { default as cipherKeyValue } from './CipherKeyValue'; export { default as allNetworkGetAddress } from './allnetwork/AllNetworkGetAddress'; diff --git a/packages/core/src/data-manager/DataManager.ts b/packages/core/src/data-manager/DataManager.ts index 534cf1c2c..e7a1444a5 100644 --- a/packages/core/src/data-manager/DataManager.ts +++ b/packages/core/src/data-manager/DataManager.ts @@ -4,6 +4,7 @@ import { EDeviceType, EFirmwareType } from '@onekeyfe/hd-shared'; import MessagesJSON from '../data/messages/messages.json'; import MessagesLegacyV1JSON from '../data/messages/messages_legacy_v1.json'; +import MessagesPro2JSON from '../data/messages/messages-pro2.json'; import { LoggerNames, getDeviceBLEFirmwareVersion, @@ -40,7 +41,7 @@ export const FIRMWARE_FIELDS = [ export type IFirmwareField = (typeof FIRMWARE_FIELDS)[number]; -export type MessageVersion = 'latest' | 'v1'; +export type MessageVersion = 'latest' | 'v1' | 'pro2'; const FIRMWARE_FIELD_TYPE_MAP: Readonly> = { firmware: EFirmwareType.Universal, @@ -62,7 +63,9 @@ function getFirmwareTypeFromField(firmwareField: IFirmwareField): EFirmwareType } export default class DataManager { - static deviceMap: DeviceTypeMap = { + static deviceMap: DeviceTypeMap & { + [k: string]: DeviceTypeMap[keyof DeviceTypeMap] | undefined; + } = { [EDeviceType.Classic]: { firmware: [], ble: [], @@ -96,6 +99,7 @@ export default class DataManager { static messages: { [version in MessageVersion]: JSON } = { latest: MessagesJSON as unknown as JSON, v1: MessagesLegacyV1JSON as unknown as JSON, + pro2: MessagesPro2JSON as unknown as JSON, }; static lastCheckTimestamp = 0; @@ -489,7 +493,10 @@ export default class DataManager { } static isBleConnect = (env: ConnectSettings['env']) => - env === 'react-native' || env === 'lowlevel' || env === 'desktop-web-ble'; + env === 'react-native' || + env === 'lowlevel' || + env === 'desktop-web-ble' || + env === 'desktop-web-ble-pro2'; /** Desktop WebUSB doesn't need browser permission prompt */ static isDesktopWebUsb = (env: ConnectSettings['env']) => env === 'desktop-webusb'; diff --git a/packages/core/src/data-manager/TransportManager.ts b/packages/core/src/data-manager/TransportManager.ts index 7514fa66a..c57cdf12d 100644 --- a/packages/core/src/data-manager/TransportManager.ts +++ b/packages/core/src/data-manager/TransportManager.ts @@ -65,7 +65,7 @@ export default class TransportManager { ); } await this.transport.init(LowLevelLogger, DevicePool.emitter, this.plugin); - } else if (env === 'desktop-web-ble') { + } else if (env === 'desktop-web-ble' || env === 'desktop-web-ble-pro2') { await this.transport.init(WebBleLogger, DevicePool.emitter); } else if (env === 'webusb' || env === 'desktop-webusb') { await this.transport.init(WebUsbLogger); @@ -74,6 +74,9 @@ export default class TransportManager { } Log.debug('Configuring transports'); await this.transport.configure(JSON.stringify(this.defaultMessages)); + this.currentMessages = this.defaultMessages; + this.messageVersion = 'latest'; + await this.configureProtocolV2Messages(); Log.debug('Configuring transports done'); } catch (error) { Log.debug('Initializing transports error: ', error); @@ -83,8 +86,19 @@ export default class TransportManager { } } - static async reconfigure(features?: Features | undefined) { - Log.debug(`Begin reconfiguring transports`); + /** + * Re-load the transport's main protobuf schema based on a device's reported features. + * + * This handles message-version compatibility within Protocol V1 (e.g. Touch's classic + * vs latest schema). It is NOT used to switch between Protocol V1 and Protocol V2 — + * the transport already holds both schemas after initial configure(), and routes per + * device by `getProtocolType()`. + */ + static async reconfigure(features?: Features) { + if (!features) { + return; + } + const { messageVersion, messages } = getSupportMessageVersion(features); if (this.currentMessages === messages || !messages) { @@ -130,6 +144,15 @@ export default class TransportManager { return this.transport; } + private static async configureProtocolV2Messages() { + const pro2Messages = DataManager.getProtobufMessages('pro2'); + const { configureProtocolV2 } = this.transport; + if (pro2Messages && typeof configureProtocolV2 === 'function') { + await configureProtocolV2.call(this.transport, JSON.stringify(pro2Messages)); + Log.debug('Protocol V2 messages configured'); + } + } + static getDefaultMessages() { return this.defaultMessages; } diff --git a/packages/core/src/device/Device.ts b/packages/core/src/device/Device.ts index 44cddeee8..098685039 100644 --- a/packages/core/src/device/Device.ts +++ b/packages/core/src/device/Device.ts @@ -300,6 +300,15 @@ export class Device extends EventEmitter { } this.deviceAcquired = true; this.updateDescriptor({ [mainIdKey]: this.mainId } as unknown as DeviceDescriptor); + + // Propagate protocol version detected during acquire. + const detectedProtocol = TransportManager.transport?.getProtocolType?.( + this.originalDescriptor.path + ); + if (detectedProtocol) { + this.originalDescriptor.protocolType = detectedProtocol; + } + if (this.commands) { await this.commands.dispose(false); } @@ -462,6 +471,12 @@ export class Device extends EventEmitter { } async initialize(options?: InitOptions) { + // Protocol V2 (Pro2) 不支持传统 Initialize,直接使用专用初始化流程。 + if (this.originalDescriptor.protocolType === 'V2') { + await this._initializePro2(); + return; + } + // Log.debug('initialize param:', options); this.passphraseState = options?.passphraseState; @@ -510,6 +525,49 @@ export class Device extends EventEmitter { } } + /** + * Pro2 device initialization (Protocol V2). + * + * Pro2 does NOT support legacy Initialize/GetFeatures messages. + * Its protobuf schema only has: Ping, file ops, FirmwareUpdate, Reboot. + * + * The transport already holds both V1 and V2 schemas after initial configure(), + * and routes per-device by `getProtocolType()`. No schema reconfigure is needed + * here — we just verify communication via Ping and synthesize the minimum + * `Features` shape downstream code reads. + */ + private async _initializePro2() { + Log.debug('Initialize Pro2 device via Ping'); + + try { + // 使用 Ping 验证通信链路。 + const { message } = await Promise.race([ + this.commands.typedCall('Ping', 'Success', { message: 'init' }), + new Promise((_, reject) => { + setTimeout(() => { + reject(ERRORS.TypedError(HardwareErrorCode.DeviceInitializeFailed)); + }, 10 * 1000); + }), + ]); + Log.debug('Pro2 Ping response:', message); + } catch (error) { + Log.error('Pro2 Ping failed:', error); + throw error; + } + + // Pro2 没有 GetFeatures。设备基础信息来自 USB/BLE descriptor,没有的字段(firmware_version、 + // bootloader_version、passphrase_protection 等)下游必须显式按 protocolType=='V2' 分支处理。 + const descriptorId = this.originalDescriptor.path || this.originalDescriptor.id || ''; + const syntheticFeatures = { + vendor: 'onekey.so', + onekey_device_type: EDeviceType.Pro2, + device_id: descriptorId, + unlocked: true, + initialized: true, + } as unknown as Features; + this._updateFeatures(syntheticFeatures); + } + async getFeatures() { const { message } = await this.commands.typedCall('GetFeatures', 'Features', {}); this._updateFeatures(message); diff --git a/packages/core/src/inject.ts b/packages/core/src/inject.ts index 7ddbd013e..d1e7274b6 100644 --- a/packages/core/src/inject.ts +++ b/packages/core/src/inject.ts @@ -148,6 +148,15 @@ export const createCoreApi = ( deviceFlags: (connectId, params) => call({ ...params, connectId, method: 'deviceFlags' }), deviceRebootToBoardloader: connectId => call({ connectId, method: 'deviceRebootToBoardloader' }), deviceRebootToBootloader: connectId => call({ connectId, method: 'deviceRebootToBootloader' }), + + // File system & device control API (Pro2-only, Proto V0) + fileRead: (connectId, params) => call({ ...params, connectId, method: 'fileRead' }), + fileWrite: (connectId, params) => call({ ...params, connectId, method: 'fileWrite' }), + fileDelete: (connectId, params) => call({ ...params, connectId, method: 'fileDelete' }), + dirList: (connectId, params) => call({ ...params, connectId, method: 'dirList' }), + dirMake: (connectId, params) => call({ ...params, connectId, method: 'dirMake' }), + dirRemove: (connectId, params) => call({ ...params, connectId, method: 'dirRemove' }), + pathInfo: (connectId, params) => call({ ...params, connectId, method: 'pathInfo' }), deviceRecovery: (connectId, params) => call({ ...params, connectId, method: 'deviceRecovery' }), deviceReset: (connectId, params) => call({ ...params, connectId, method: 'deviceReset' }), deviceSettings: (connectId, params) => call({ ...params, connectId, method: 'deviceSettings' }), diff --git a/packages/core/src/types/api/index.ts b/packages/core/src/types/api/index.ts index d30b81608..35ee03f92 100644 --- a/packages/core/src/types/api/index.ts +++ b/packages/core/src/types/api/index.ts @@ -1,3 +1,12 @@ +import type { + dirList, + dirMake, + dirRemove, + fileDelete, + fileRead, + fileWrite, + pathInfo, +} from './pro2'; import type { off, on, removeAllListeners } from './event'; import type { uiResponse } from './uiResponse'; import type { init, updateSettings } from './init'; @@ -196,6 +205,17 @@ export type CoreApi = { firmwareUpdateV3: typeof firmwareUpdateV3; cipherKeyValue: typeof cipherKeyValue; + /** + * File system & device control API (Pro2-only, Proto V0) + */ + fileRead: typeof fileRead; + fileWrite: typeof fileWrite; + fileDelete: typeof fileDelete; + dirList: typeof dirList; + dirMake: typeof dirMake; + dirRemove: typeof dirRemove; + pathInfo: typeof pathInfo; + /** * All network function */ diff --git a/packages/core/src/types/api/pro2.ts b/packages/core/src/types/api/pro2.ts new file mode 100644 index 000000000..4aed6230e --- /dev/null +++ b/packages/core/src/types/api/pro2.ts @@ -0,0 +1,77 @@ +import type { Response } from '../params'; + +// ── Shared response shapes (Pro2 file system, Proto V0) ───────────────── + +export type FileOpSuccess = { message?: string }; + +export type FileInfo = { + path: string; + offset: number; + total_size: number; + data?: Uint8Array; + data_hash?: number; + processed_byte?: number; +}; + +export type DirInfo = { + path: string; + child_dirs?: string; + child_files?: string; +}; + +export type PathInfoResult = { + exist: boolean; + size: number; + year: number; + month: number; + day: number; + hour: number; + minute: number; + second: number; + readonly?: boolean; + hidden?: boolean; + system?: boolean; + archive?: boolean; + directory?: boolean; +}; + +// ── Method signatures ───────────────────────────────────────────────────── + +export declare function fileRead( + connectId: string, + params: { path: string; offset: number; totalSize: number } +): Response; + +export declare function fileWrite( + connectId: string, + params: { + path: string; + offset: number; + totalSize: number; + data: Uint8Array | string; + overwrite?: boolean; + append?: boolean; + } +): Response; + +export declare function fileDelete( + connectId: string, + params: { path: string } +): Response; + +export declare function dirList(connectId: string, params: { path: string }): Response; + +export declare function dirMake( + connectId: string, + params: { path: string } +): Response; + +export declare function dirRemove( + connectId: string, + params: { path: string } +): Response; + +export declare function pathInfo( + connectId: string, + params: { path: string } +): Response; diff --git a/packages/core/src/types/device.ts b/packages/core/src/types/device.ts index 0d44f0da8..f93f5b423 100644 --- a/packages/core/src/types/device.ts +++ b/packages/core/src/types/device.ts @@ -96,7 +96,8 @@ export type IDeviceType = | EDeviceType.ClassicPure | EDeviceType.Mini | EDeviceType.Touch - | EDeviceType.Pro; + | EDeviceType.Pro + | EDeviceType.Pro2; /** * model_classic: 'classic' | 'classic1s' | 'classicpure' @@ -124,6 +125,7 @@ export const DeviceTypeToModels: { [deviceType in IDeviceType]: IDeviceModel[] } [EDeviceType.Mini]: ['model_mini'], [EDeviceType.Touch]: ['model_touch'], [EDeviceType.Pro]: ['model_touch'], + [EDeviceType.Pro2]: [], [EDeviceType.Unknown]: [], }; diff --git a/packages/core/src/types/settings.ts b/packages/core/src/types/settings.ts index fd8cf3065..5fb0e73df 100644 --- a/packages/core/src/types/settings.ts +++ b/packages/core/src/types/settings.ts @@ -10,6 +10,7 @@ export type transportEnv = | 'webusb' | 'desktop-webusb' | 'desktop-web-ble' + | 'desktop-web-ble-pro2' | 'emulator' | 'lowlevel' | 'node-usb'; @@ -83,7 +84,7 @@ export type IBLEFirmwareReleaseInfo = { }; }; -type IKnownDevice = Exclude; +type IKnownDevice = Exclude; /** * Device firmware configuration map diff --git a/packages/core/src/utils/deviceInfoUtils.ts b/packages/core/src/utils/deviceInfoUtils.ts index 9463224a7..00bc73e4d 100644 --- a/packages/core/src/utils/deviceInfoUtils.ts +++ b/packages/core/src/utils/deviceInfoUtils.ts @@ -27,6 +27,9 @@ export const getDeviceType = (features?: Features): IDeviceType => { return EDeviceType.Touch; case 'PRO': return EDeviceType.Pro; + case 'PRO2': + case 'pro2': + return EDeviceType.Pro2; case 'PURE': return EDeviceType.ClassicPure; default: @@ -74,6 +77,7 @@ export const getDeviceTypeByBleName = (name?: string): IDeviceType => { if (name.startsWith('T')) return EDeviceType.Touch; if (name.startsWith('Touch')) return EDeviceType.Touch; + if (name.startsWith('Pro2')) return EDeviceType.Pro2; if (name.startsWith('Pro')) return EDeviceType.Pro; return EDeviceType.Unknown; diff --git a/packages/shared/src/deviceType.ts b/packages/shared/src/deviceType.ts index 9c5167035..133ae3a10 100644 --- a/packages/shared/src/deviceType.ts +++ b/packages/shared/src/deviceType.ts @@ -6,4 +6,5 @@ export enum EDeviceType { Mini = 'mini', Touch = 'touch', Pro = 'pro', + Pro2 = 'pro2', } From 245c54a085de397ce4cb3d9521ecc23a112439f2 Mon Sep 17 00:00:00 2001 From: wabicai Date: Mon, 27 Apr 2026 15:21:02 +0800 Subject: [PATCH 05/73] feat(playground): Pro2 debug page + Vercel deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pro2 debug page (`expo-playground/app/routes/pro2-debug.tsx`): - Wire-level testing tool that talks to Pro2 over WebUSB directly, bypassing the SDK transport stack. Used to isolate protocol-frame / CRC / message-encoding bugs from the SDK plumbing. - Four tabs: * Ping — connection sanity check * File System — DirList, PathInfoQuery, FileRead, FileWrite, FileDelete, DirMake, DirRemove, FixPermission * Firmware — single-target FirmwareUpdate with manual target_id / path / reboot_on_success controls * Reboot — sends Reboot { reboot_type: Normal/Boardloader/BootLoader } - Carries its own minimal protobuf encoder/decoder for the Pro2 message subset; deliberately does not depend on the SDK so it remains usable as a fault-isolation tool when the SDK is broken. Static WebUSB test page (`expo-playground/public/webusb_test.html`): - Single-file HTML harness for the same Pro2 protocol (predates the React debug page). Kept under `public/` so Vercel serves it without a route. Useful for cross-browser / cross-machine debugging where setting up the playground app is overkill. Vercel deployment: - `vercel.json` at repo root; root `package.json` carries the build glue. Lets us deploy the playground (including pro2-debug and webusb_test.html) under a stable preview URL for the firmware team to test against without local toolchain setup. Sidebar + entry client tweaks add the pro2-debug route to the playground navigation. Co-Authored-By: Claude Opus 4.7 (1M context) --- package.json | 4 +- .../app/components/sidebar.tsx | 6 + .../expo-playground/app/entry.client.tsx | 6 + .../expo-playground/app/routes/pro2-debug.tsx | 1372 ++++++++ .../expo-playground/package.json | 1 + .../expo-playground/public/webusb_test.html | 2998 +++++++++++++++++ vercel.json | 10 + 7 files changed, 4395 insertions(+), 2 deletions(-) create mode 100644 packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx create mode 100644 packages/connect-examples/expo-playground/public/webusb_test.html create mode 100644 vercel.json diff --git a/package.json b/package.json index 7d3f4d077..72cc9bc87 100644 --- a/package.json +++ b/package.json @@ -26,13 +26,13 @@ "build": "lerna run build", "clean": "lerna clean --yes", "clean-workspace": "yarn clean && lerna run clean", - "lint": "eslint .", + "lint": "cross-env NODE_OPTIONS=--max-old-space-size=8192 eslint .", "lint:staged": "lint-staged", "test": "lerna run test", "setup": "yarn && yarn bootstrap && yarn build", "check-versions": "node scripts/check-versions.js", "publish-packages": "yarn check-versions && lerna publish from-package", - "update-protobuf": "lerna run update:protobuf --scope=@onekeyfe/hd-transport", + "update-protobuf": "lerna run update-protobuf --scope=@onekeyfe/hd-transport", "update-version": "lerna version --no-git-tag-version", "example": "cd ./packages/connect-examples/expo-example && yarn start", "example:web": "cd ./packages/connect-examples/expo-example && cross-env CONNECT_SRC=https://localhost:8087 yarn start", diff --git a/packages/connect-examples/expo-playground/app/components/sidebar.tsx b/packages/connect-examples/expo-playground/app/components/sidebar.tsx index 1fd22c442..eeded634e 100644 --- a/packages/connect-examples/expo-playground/app/components/sidebar.tsx +++ b/packages/connect-examples/expo-playground/app/components/sidebar.tsx @@ -26,6 +26,7 @@ import { XCircle, Server, Info, + Usb, } from 'lucide-react'; import { getDeviceLabel } from '@onekeyfe/hd-core'; import packageJson from '../../package.json'; @@ -63,6 +64,11 @@ const navigationItems = [ url: '/logs', icon: FileText, }, + { + title: 'Pro2 Debug', + url: '/pro2-debug', + icon: Usb, + }, ]; export function AppSidebar() { diff --git a/packages/connect-examples/expo-playground/app/entry.client.tsx b/packages/connect-examples/expo-playground/app/entry.client.tsx index b41360bf9..f67260ba6 100644 --- a/packages/connect-examples/expo-playground/app/entry.client.tsx +++ b/packages/connect-examples/expo-playground/app/entry.client.tsx @@ -33,6 +33,7 @@ import ChainMethodsIndexPage from './routes/chains.$chainId._index'; import ChainMethodExecutePage from './routes/chains.$chainId.$methodName'; import DeviceMethodsIndexPage from './routes/device-methods._index'; import DeviceMethodExecutePage from './routes/device-methods.$methodName'; +import Pro2DebugPage from './routes/pro2-debug'; // Import styles import './tailwind.css'; @@ -141,6 +142,11 @@ const router = createHashRouter( path: 'chains/:chainId/:methodName', element: , }, + + { + path: 'pro2-debug', + element: , + }, ], }, ] diff --git a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx new file mode 100644 index 000000000..20b747f29 --- /dev/null +++ b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx @@ -0,0 +1,1372 @@ +/** + * Pro2 Debug Page + * + * Direct WebUSB communication with OneKey Pro2 device using Proto V0 framing. + * Independent of the main SDK flow — mirrors webusb_test.html but in React. + */ +import { useState, useRef, useCallback, useEffect } from 'react'; +import { PageLayout } from '../components/common/PageLayout'; +import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/Card'; +import { Button } from '../components/ui/Button'; +import { + Usb, + Wifi, + Terminal, + FolderOpen, + RefreshCw, + Send, + Download, + Upload, + Trash2, + ChevronRight, + FolderPlus, + FolderMinus, + FileMinus, + Zap, +} from 'lucide-react'; + +// --------------------------------------------------------------------------- +// CRC8 (init=0x30) and Proto V0 frame building (mirrors hd-transport) +// --------------------------------------------------------------------------- +// CRC-8 lookup table (polynomial=0x5e, init=0x30) — extracted from OneKey Pro2 firmware +const CRC8_TABLE = new Uint8Array([ + 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, + 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, + 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, + 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, + 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, + 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, + 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, + 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, + 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, + 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, + 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, + 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, + 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, + 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, + 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, + 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35, +]); + +function crc8(data: Uint8Array, len: number): number { + let crc = 0x30; + for (let i = 0; i < len; i++) crc = CRC8_TABLE[crc ^ data[i]]; + return crc; +} + +let protoSeq = 0; +function buildProtoV0Frame(payload: Uint8Array | null, packetSrc = 0, router = 0): Uint8Array { + const payloadLen = payload ? payload.length : 0; + const frameLen = payloadLen + 8; + const frame = new Uint8Array(frameLen); + protoSeq = (protoSeq + 1) & 0xff; + if (protoSeq === 0) protoSeq = 1; + frame[0] = 0x5a; + frame[1] = frameLen & 0xff; + frame[2] = (frameLen >> 8) & 0xff; + frame[4] = router & 0xff; + frame[5] = ((packetSrc & 0x0f) << 2); + frame[6] = protoSeq; + frame[3] = crc8(frame, 3); + if (payload && payloadLen > 0) frame.set(payload, 7); + frame[frameLen - 1] = crc8(frame, frameLen - 1); + return frame; +} + +function buildPbFrame(msgType: number, pbPayload: Uint8Array): Uint8Array { + const payload = new Uint8Array(2 + pbPayload.length); + payload[0] = msgType & 0xff; + payload[1] = (msgType >> 8) & 0xff; + payload.set(pbPayload, 2); + return buildProtoV0Frame(payload); +} + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- +const PID_PRO2 = 0x53c1; +const VENDOR_ID = 0x1209; + +const PB_MSG_TYPE = { + Ping: 60206, + Success: 60207, + Failure: 60208, + Reboot: 60400, + FixPermission: 60800, + PathInfo: 60801, + PathInfoQuery: 60802, + File: 60803, + FileRead: 60804, + FileWrite: 60805, + FileDelete: 60806, + Dir: 60807, + DirList: 60808, + DirMake: 60809, + DirRemove: 60810, + FirmwareUpdate: 61000, + FirmwareInstallProgress: 61001, +} as const; + +const PB_MSG_NAME: Record = Object.fromEntries( + Object.entries(PB_MSG_TYPE).map(([k, v]) => [v, k]) +); + +const REBOOT_TYPE = { 0: 'Normal', 1: 'Boardloader', 2: 'BootLoader' } as const; + +// --------------------------------------------------------------------------- +// Minimal protobuf encoder/decoder (mirrors webusb_test.html) +// --------------------------------------------------------------------------- +function encodeVarint(value: number): number[] { + const bytes: number[] = []; + while (value > 0x7f) { + bytes.push((value & 0x7f) | 0x80); + value >>>= 7; + } + bytes.push(value & 0x7f); + return bytes; +} + +function encodeString(fieldNum: number, str: string): number[] { + if (!str || str.length === 0) return []; + const strBytes = new TextEncoder().encode(str); + const tag = (fieldNum << 3) | 2; + return [...encodeVarint(tag), ...encodeVarint(strBytes.length), ...strBytes]; +} + +function encodeUint32(fieldNum: number, value: number, required = false): number[] { + if (value === 0 && !required) return []; + const tag = (fieldNum << 3) | 0; + return [...encodeVarint(tag), ...encodeVarint(value)]; +} + +function encodeBool(fieldNum: number, value: boolean): number[] { + const tag = (fieldNum << 3) | 0; + return [...encodeVarint(tag), value ? 1 : 0]; +} + +function encodeBytes(fieldNum: number, bytes: Uint8Array): number[] { + if (!bytes || bytes.length === 0) return []; + const tag = (fieldNum << 3) | 2; + return [...encodeVarint(tag), ...encodeVarint(bytes.length), ...bytes]; +} + +function encodePing(message: string): Uint8Array { + return new Uint8Array(encodeString(1, message)); +} + +function encodePathInfoQuery(path: string): Uint8Array { + return new Uint8Array(encodeString(1, path)); +} + +function encodeDirList(path: string): Uint8Array { + return new Uint8Array(encodeString(1, path)); +} + +function encodeDirMake(path: string): Uint8Array { + return new Uint8Array(encodeString(1, path)); +} + +function encodeDirRemove(path: string): Uint8Array { + return new Uint8Array(encodeString(1, path)); +} + +function encodeFileDelete(path: string): Uint8Array { + return new Uint8Array(encodeString(1, path)); +} + +function encodeFileMsg(path: string, offset: number, totalSize: number, data?: Uint8Array, dataHash?: number): number[] { + const result: number[] = []; + result.push(...encodeString(1, path)); + result.push(...encodeUint32(2, offset, true)); + result.push(...encodeUint32(3, totalSize, true)); + if (data && data.length > 0) result.push(...encodeBytes(4, data)); + if (dataHash !== undefined) result.push(...encodeUint32(5, dataHash)); + return result; +} + +function encodeFileRead(path: string, offset: number, totalSize: number, chunkLen?: number): Uint8Array { + const fileBytes = encodeFileMsg(path, offset, totalSize); + const result: number[] = []; + const tag1 = (1 << 3) | 2; + result.push(...encodeVarint(tag1), ...encodeVarint(fileBytes.length), ...fileBytes); + if (chunkLen != null) result.push(...encodeUint32(2, chunkLen)); + return new Uint8Array(result); +} + +function encodeFileWrite(path: string, offset: number, totalSize: number, data: Uint8Array, overwrite: boolean, append: boolean): Uint8Array { + const fileBytes = encodeFileMsg(path, offset, totalSize, data); + const result: number[] = []; + const tag1 = (1 << 3) | 2; + result.push(...encodeVarint(tag1), ...encodeVarint(fileBytes.length), ...fileBytes); + result.push(...encodeBool(2, overwrite)); + result.push(...encodeBool(3, append)); + return new Uint8Array(result); +} + +function encodeFixPermission(): Uint8Array { + return new Uint8Array([]); +} + +// FirmwareTargetType enum +const FirmwareTargetType = { + TARGET_MAIN_APP: 0, + TARGET_MAIN_BOOT: 1, + TARGET_BLE: 2, + TARGET_SE1: 3, + TARGET_SE2: 4, + TARGET_SE3: 5, + TARGET_SE4: 6, + TARGET_RESOURCE: 10, +} as const; + +const FW_TARGET_LABELS: Record = { + 0: 'Main App', + 1: 'Main Boot', + 2: 'BLE', + 3: 'SE1', + 4: 'SE2', + 5: 'SE3', + 6: 'SE4', + 10: 'Resource', +}; + +// FirmwareTarget { required FirmwareTargetType target_id=1; required string path=2; } +function encodeFirmwareTarget(targetId: number, path: string): number[] { + const result: number[] = []; + result.push(...encodeUint32(1, targetId, true)); + result.push(...encodeString(2, path)); + return result; +} + +// FirmwareUpdate { repeated FirmwareTarget targets=1; optional bool reboot_on_success=2; } +function encodeFirmwareUpdate(targets: Array<{ targetId: number; path: string }>, rebootOnSuccess: boolean | null = null): Uint8Array { + const result: number[] = []; + for (const target of targets) { + const targetBytes = encodeFirmwareTarget(target.targetId, target.path); + const tag1 = (1 << 3) | 2; + result.push(...encodeVarint(tag1), ...encodeVarint(targetBytes.length), ...targetBytes); + } + if (rebootOnSuccess !== null) { + result.push(...encodeBool(2, rebootOnSuccess)); + } + return new Uint8Array(result); +} + +function encodeReboot(rebootType: number): Uint8Array { + return new Uint8Array(encodeUint32(1, rebootType, true)); +} + +// Decoder helpers +function decodeVarintAt(data: Uint8Array, offset: number): { value: number; offset: number } { + let value = 0, shift = 0; + while (offset < data.length) { + const byte = data[offset++]; + value |= (byte & 0x7f) << shift; + if ((byte & 0x80) === 0) break; + shift += 7; + } + return { value, offset }; +} + +function decodeStringSlice(data: Uint8Array, offset: number, len: number): string { + return new TextDecoder().decode(data.slice(offset, offset + len)); +} + +interface DecodedSuccess { message: string } +interface DecodedFailure { code: number; message: string } +interface DecodedFile { path: string; offset: number; totalSize: number; data: Uint8Array | null; dataHash: number | null; processedByte: number | null } +interface DecodedPathInfo { exist: boolean; size: number; year: number; month: number; day: number; hour: number; minute: number; second: number; readonly: boolean; hidden: boolean; system: boolean; archive: boolean; directory: boolean } +interface DecodedDir { path: string; childDirs: string; childFiles: string } + +function decodeSuccess(data: Uint8Array): DecodedSuccess { + let offset = 0, message = ''; + while (offset < data.length) { + const { value: tag, offset: off1 } = decodeVarintAt(data, offset); + offset = off1; + const fieldNum = tag >> 3, wireType = tag & 0x7; + if (fieldNum === 1 && wireType === 2) { + const { value: len, offset: off2 } = decodeVarintAt(data, offset); + message = decodeStringSlice(data, off2, len); + offset = off2 + len; + } else break; + } + return { message }; +} + +function decodeFailure(data: Uint8Array): DecodedFailure { + let offset = 0, code = 0, message = ''; + while (offset < data.length) { + const { value: tag, offset: off1 } = decodeVarintAt(data, offset); + offset = off1; + const fieldNum = tag >> 3, wireType = tag & 0x7; + if (fieldNum === 1 && wireType === 0) { + const { value: val, offset: off2 } = decodeVarintAt(data, offset); + code = val; offset = off2; + } else if (fieldNum === 2 && wireType === 2) { + const { value: len, offset: off2 } = decodeVarintAt(data, offset); + message = decodeStringSlice(data, off2, len); + offset = off2 + len; + } else break; + } + return { code, message }; +} + +function decodeFile(data: Uint8Array): DecodedFile { + let offset = 0; + const result: DecodedFile = { path: '', offset: 0, totalSize: 0, data: null, dataHash: null, processedByte: null }; + while (offset < data.length) { + const { value: tag, offset: off1 } = decodeVarintAt(data, offset); + offset = off1; + const fieldNum = tag >> 3, wireType = tag & 0x7; + if (wireType === 0) { + const { value: val, offset: off2 } = decodeVarintAt(data, offset); + offset = off2; + if (fieldNum === 2) result.offset = val; + else if (fieldNum === 3) result.totalSize = val; + else if (fieldNum === 5) result.dataHash = val; + else if (fieldNum === 6) result.processedByte = val; + } else if (wireType === 2) { + const { value: len, offset: off2 } = decodeVarintAt(data, offset); + if (fieldNum === 1) result.path = decodeStringSlice(data, off2, len); + else if (fieldNum === 4) result.data = data.slice(off2, off2 + len); + offset = off2 + len; + } else break; + } + return result; +} + +function decodePathInfo(data: Uint8Array): DecodedPathInfo { + let offset = 0; + const r: DecodedPathInfo = { exist: false, size: 0, year: 0, month: 0, day: 0, hour: 0, minute: 0, second: 0, readonly: false, hidden: false, system: false, archive: false, directory: false }; + while (offset < data.length) { + const { value: tag, offset: off1 } = decodeVarintAt(data, offset); + offset = off1; + const fieldNum = tag >> 3, wireType = tag & 0x7; + if (wireType === 0) { + const { value: val, offset: off2 } = decodeVarintAt(data, offset); + offset = off2; + if (fieldNum === 1) r.exist = val !== 0; + else if (fieldNum === 2) r.size = val; + else if (fieldNum === 3) r.year = val; + else if (fieldNum === 4) r.month = val; + else if (fieldNum === 5) r.day = val; + else if (fieldNum === 6) r.hour = val; + else if (fieldNum === 7) r.minute = val; + else if (fieldNum === 8) r.second = val; + else if (fieldNum === 9) r.readonly = val !== 0; + else if (fieldNum === 10) r.hidden = val !== 0; + else if (fieldNum === 11) r.system = val !== 0; + else if (fieldNum === 12) r.archive = val !== 0; + else if (fieldNum === 13) r.directory = val !== 0; + } else break; + } + return r; +} + +function decodeDir(data: Uint8Array): DecodedDir { + let offset = 0; + const r: DecodedDir = { path: '', childDirs: '', childFiles: '' }; + while (offset < data.length) { + const { value: tag, offset: off1 } = decodeVarintAt(data, offset); + offset = off1; + const fieldNum = tag >> 3, wireType = tag & 0x7; + if (wireType === 2) { + const { value: len, offset: off2 } = decodeVarintAt(data, offset); + const str = decodeStringSlice(data, off2, len); + if (fieldNum === 1) r.path = str; + else if (fieldNum === 2) r.childDirs = str; + else if (fieldNum === 3) r.childFiles = str; + offset = off2 + len; + } else break; + } + return r; +} + +function parseProtoV0Response(data: Uint8Array): { msgType: number; pbPayload: Uint8Array } | null { + if (data.length < 8 || data[0] !== 0x5a) return null; + const frameLen = data[1] | (data[2] << 8); + if (data.length < frameLen) return null; + // payload starts at byte 7, ends at frameLen-1 (last byte is CRC) + const payload = data.slice(7, frameLen - 1); + if (payload.length < 2) return null; + const msgType = payload[0] | (payload[1] << 8); + return { msgType, pbPayload: payload.slice(2) }; +} + +// --------------------------------------------------------------------------- +// USB helpers +// --------------------------------------------------------------------------- +interface DeviceEndpoints { + interfaceNumber: number; + endpointIn: number; + endpointOut: number; +} + +function discoverEndpoints(device: USBDevice): DeviceEndpoints { + for (const config of device.configurations) { + for (const iface of config.interfaces) { + for (const alt of iface.alternates) { + if (alt.interfaceClass === 0xff) { + let endpointIn = 1, endpointOut = 1; + for (const ep of alt.endpoints) { + if (ep.direction === 'in') endpointIn = ep.endpointNumber; + else endpointOut = ep.endpointNumber; + } + return { interfaceNumber: iface.interfaceNumber, endpointIn, endpointOut }; + } + } + } + } + return { interfaceNumber: 0, endpointIn: 1, endpointOut: 1 }; +} + +// --------------------------------------------------------------------------- +// Log entry type +// --------------------------------------------------------------------------- +interface LogEntry { + id: number; + time: string; + type: 'info' | 'success' | 'error' | 'tx' | 'rx'; + message: string; +} + +// --------------------------------------------------------------------------- +// Component +// --------------------------------------------------------------------------- +export default function Pro2DebugPage() { + const [device, setDevice] = useState(null); + const [endpoints, setEndpoints] = useState(null); + const [connected, setConnected] = useState(false); + const [connecting, setConnecting] = useState(false); + const [logs, setLogs] = useState([]); + const [activeTab, setActiveTab] = useState<'ping' | 'fs' | 'firmware' | 'reboot'>('ping'); + + // Ping + const [pingMessage, setPingMessage] = useState('Hello from Playground!'); + const [pingSending, setPingSending] = useState(false); + + // File System + const [fsPath, setFsPath] = useState('/'); + const [fsResult, setFsResult] = useState(''); + const [fsBusy, setFsBusy] = useState(false); + + // File Read + const [fileReadPath, setFileReadPath] = useState(''); + const [fileReadData, setFileReadData] = useState(null); + const [fileReadBusy, setFileReadBusy] = useState(false); + + // File Write (upload) + const [fileWriteTargetPath, setFileWriteTargetPath] = useState('vol1:test.bin'); + const [fileWriteChunkSize, setFileWriteChunkSize] = useState(512); + const [fileWriteProgress, setFileWriteProgress] = useState<{ done: number; total: number } | null>(null); + const [fileWriteBusy, setFileWriteBusy] = useState(false); + const [fileWriteSelectedName, setFileWriteSelectedName] = useState(''); + const fileWriteAbortRef = useRef(false); + const fileWriteInputRef = useRef(null); + + // Firmware Update + const [fwPath, setFwPath] = useState('vol1:firmware.bin'); + const [fwTargetId, setFwTargetId] = useState(FirmwareTargetType.TARGET_MAIN_APP); + const [fwRebootOnSuccess, setFwRebootOnSuccess] = useState(true); + const [fwBusy, setFwBusy] = useState(false); + + // Dir / File manage + const [dirMakePath, setDirMakePath] = useState(''); + const [fileDeletePath, setFileDeletePath] = useState(''); + + const logIdRef = useRef(0); + const logsContainerRef = useRef(null); + + const log = useCallback((message: string, type: LogEntry['type'] = 'info') => { + const now = new Date(); + const time = now.toLocaleTimeString('en-US', { hour12: false }) + '.' + String(now.getMilliseconds()).padStart(3, '0'); + setLogs(prev => [...prev.slice(-199), { id: logIdRef.current++, time, type, message }]); + }, []); + + useEffect(() => { + // Scroll only the console container, not the whole page + const el = logsContainerRef.current; + if (el) el.scrollTop = el.scrollHeight; + }, [logs]); + + // ------------------------------------------------------------------ + // Connect / Disconnect + // ------------------------------------------------------------------ + const connect = async () => { + if (!navigator.usb) { + log('WebUSB not supported in this browser', 'error'); + return; + } + setConnecting(true); + try { + const dev = await navigator.usb.requestDevice({ + filters: [{ vendorId: VENDOR_ID, productId: PID_PRO2 }], + }); + await dev.open(); + if (dev.configuration == null) { + await dev.selectConfiguration(1); + } + const eps = discoverEndpoints(dev); + await dev.claimInterface(eps.interfaceNumber); + setDevice(dev); + setEndpoints(eps); + setConnected(true); + log(`Connected: ${dev.productName} (${dev.vendorId.toString(16)}:${dev.productId.toString(16)})`, 'success'); + log(`Endpoints: in=${eps.endpointIn} out=${eps.endpointOut} iface=${eps.interfaceNumber}`, 'info'); + } catch (e: unknown) { + log(`Connect failed: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setConnecting(false); + } + }; + + const disconnect = async () => { + if (!device || !endpoints) return; + try { + await device.releaseInterface(endpoints.interfaceNumber); + await device.close(); + } catch { + // ignore + } + setDevice(null); + setEndpoints(null); + setConnected(false); + log('Disconnected', 'info'); + }; + + // ------------------------------------------------------------------ + // Core send/receive + // ------------------------------------------------------------------ + const sendPbMessage = useCallback(async (msgType: number, pbPayload: Uint8Array, timeoutMs = 5000): Promise<{ msgType: number; pbPayload: Uint8Array }> => { + if (!device || !endpoints) throw new Error('Not connected'); + + const frame = buildPbFrame(msgType, pbPayload); + log(`TX [${PB_MSG_NAME[msgType] ?? msgType}] ${frame.length}B payload=${Array.from(pbPayload.slice(0, 16)).map(b => b.toString(16).padStart(2, '0')).join(' ')}`, 'tx'); + + await device.transferOut(endpoints.endpointOut, frame); + + // Wait for response with timeout + const start = Date.now(); + while (Date.now() - start < timeoutMs) { + const result = await device.transferIn(endpoints.endpointIn, 4096); + if (result.status === 'ok' && result.data && result.data.byteLength > 0) { + const data = new Uint8Array(result.data.buffer, result.data.byteOffset, result.data.byteLength); + const parsed = parseProtoV0Response(data); + if (!parsed) throw new Error('Invalid proto frame'); + log(`RX [${PB_MSG_NAME[parsed.msgType] ?? parsed.msgType}] ${data.length}B`, 'rx'); + return parsed; + } + } + throw new Error('Timeout waiting for response'); + }, [device, endpoints, log]); + + // ------------------------------------------------------------------ + // Ping + // ------------------------------------------------------------------ + const sendPing = async () => { + if (!connected) return; + setPingSending(true); + try { + const payload = encodePing(pingMessage); + const resp = await sendPbMessage(PB_MSG_TYPE.Ping, payload); + if (resp.msgType === PB_MSG_TYPE.Success) { + const decoded = decodeSuccess(resp.pbPayload); + log(`Ping OK: "${decoded.message}"`, 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const decoded = decodeFailure(resp.pbPayload); + log(`Ping Failure [${decoded.code}]: ${decoded.message}`, 'error'); + } else { + log(`Ping unexpected response: msgType=${resp.msgType}`, 'error'); + } + } catch (e: unknown) { + log(`Ping error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setPingSending(false); + } + }; + + // ------------------------------------------------------------------ + // Directory List + // ------------------------------------------------------------------ + const sendDirList = async () => { + if (!connected) return; + setFsBusy(true); + setFsResult(''); + try { + const payload = encodeDirList(fsPath); + const resp = await sendPbMessage(PB_MSG_TYPE.DirList, payload); + if (resp.msgType === PB_MSG_TYPE.Dir) { + const decoded = decodeDir(resp.pbPayload); + const lines = [`Path: ${decoded.path || fsPath}`]; + if (decoded.childDirs) lines.push(`Dirs: ${decoded.childDirs}`); + if (decoded.childFiles) lines.push(`Files: ${decoded.childFiles}`); + setFsResult(lines.join('\n')); + log(`DirList OK: ${decoded.childDirs.split(',').filter(Boolean).length} dirs, ${decoded.childFiles.split(',').filter(Boolean).length} files`, 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const decoded = decodeFailure(resp.pbPayload); + log(`DirList Failure [${decoded.code}]: ${decoded.message}`, 'error'); + setFsResult(`Error [${decoded.code}]: ${decoded.message}`); + } + } catch (e: unknown) { + log(`DirList error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFsBusy(false); + } + }; + + // ------------------------------------------------------------------ + // Path Info + // ------------------------------------------------------------------ + const sendPathInfo = async () => { + if (!connected) return; + setFsBusy(true); + setFsResult(''); + try { + const payload = encodePathInfoQuery(fsPath); + const resp = await sendPbMessage(PB_MSG_TYPE.PathInfoQuery, payload); + if (resp.msgType === PB_MSG_TYPE.PathInfo) { + const d = decodePathInfo(resp.pbPayload); + const lines = [ + `Exists: ${d.exist}`, + `Size: ${d.size} bytes`, + `Type: ${d.directory ? 'Directory' : 'File'}`, + `Date: ${d.year}-${String(d.month).padStart(2,'0')}-${String(d.day).padStart(2,'0')} ${String(d.hour).padStart(2,'0')}:${String(d.minute).padStart(2,'0')}:${String(d.second).padStart(2,'0')}`, + `Flags: readonly=${d.readonly} hidden=${d.hidden} system=${d.system} archive=${d.archive}`, + ]; + setFsResult(lines.join('\n')); + log(`PathInfo OK: ${d.exist ? (d.directory ? 'dir' : `file ${d.size}B`) : 'not found'}`, d.exist ? 'success' : 'error'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const decoded = decodeFailure(resp.pbPayload); + log(`PathInfo Failure [${decoded.code}]: ${decoded.message}`, 'error'); + setFsResult(`Error [${decoded.code}]: ${decoded.message}`); + } + } catch (e: unknown) { + log(`PathInfo error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFsBusy(false); + } + }; + + // ------------------------------------------------------------------ + // Fix Permission + // ------------------------------------------------------------------ + const sendFixPermission = async () => { + if (!connected) return; + setFsBusy(true); + try { + const payload = encodeFixPermission(); + const resp = await sendPbMessage(PB_MSG_TYPE.FixPermission, payload); + if (resp.msgType === PB_MSG_TYPE.Success) { + log('FixPermission OK', 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const decoded = decodeFailure(resp.pbPayload); + log(`FixPermission Failure [${decoded.code}]: ${decoded.message}`, 'error'); + } + } catch (e: unknown) { + log(`FixPermission error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFsBusy(false); + } + }; + + // ------------------------------------------------------------------ + // File Read (simple single-chunk) + // ------------------------------------------------------------------ + const sendFileRead = async () => { + if (!connected || !fileReadPath) return; + setFileReadBusy(true); + setFileReadData(null); + try { + // First get file size via PathInfoQuery + const infoResp = await sendPbMessage(PB_MSG_TYPE.PathInfoQuery, encodePathInfoQuery(fileReadPath)); + if (infoResp.msgType !== PB_MSG_TYPE.PathInfo) { + throw new Error('PathInfo failed'); + } + const info = decodePathInfo(infoResp.pbPayload); + if (!info.exist) throw new Error('File not found'); + const totalSize = info.size; + log(`Reading file: ${fileReadPath} (${totalSize} bytes)`, 'info'); + + // Read in chunks + const CHUNK = 1400; + const allData: number[] = []; + let offset = 0; + while (offset < totalSize) { + const readLen = Math.min(CHUNK, totalSize - offset); + const payload = encodeFileRead(fileReadPath, offset, totalSize, readLen); + const resp = await sendPbMessage(PB_MSG_TYPE.FileRead, payload, 10000); + if (resp.msgType === PB_MSG_TYPE.File) { + const f = decodeFile(resp.pbPayload); + if (f.data) { + allData.push(...f.data); + offset += f.data.length; + log(`Read ${offset}/${totalSize} bytes`, 'info'); + } else { + throw new Error('No data in File response'); + } + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const d = decodeFailure(resp.pbPayload); + throw new Error(`FileRead Failure [${d.code}]: ${d.message}`); + } else { + throw new Error(`Unexpected response: ${resp.msgType}`); + } + } + const result = new Uint8Array(allData); + setFileReadData(result); + log(`FileRead complete: ${result.length} bytes`, 'success'); + } catch (e: unknown) { + log(`FileRead error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFileReadBusy(false); + } + }; + + const downloadFileReadData = () => { + if (!fileReadData) return; + const blob = new Blob([fileReadData]); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = fileReadPath.split('/').pop() || 'file.bin'; + a.click(); + URL.revokeObjectURL(url); + }; + + // ------------------------------------------------------------------ + // File Write (upload) + // ------------------------------------------------------------------ + const startFileWrite = async (file: File) => { + if (!connected) return; + const targetPath = fileWriteTargetPath.trim(); + if (!targetPath) { log('Enter target path', 'error'); return; } + const chunkSize = Math.max(64, Math.min(2048, fileWriteChunkSize)); + + let fileData: Uint8Array; + try { + fileData = new Uint8Array(await file.arrayBuffer()); + } catch (e: unknown) { + log(`Failed to read file: ${e instanceof Error ? e.message : String(e)}`, 'error'); + return; + } + + const totalLen = fileData.length; + fileWriteAbortRef.current = false; + setFileWriteBusy(true); + setFileWriteProgress({ done: 0, total: totalLen }); + log(`Upload start: ${file.name} (${totalLen} B) → ${targetPath}`, 'info'); + + const t0 = performance.now(); + let offset = 0; + let isFirst = true; + try { + while (offset < totalLen && !fileWriteAbortRef.current) { + const chunk = fileData.slice(offset, offset + chunkSize); + const pbPayload = encodeFileWrite(targetPath, offset, totalLen, chunk, isFirst, false); + const resp = await sendPbMessage(PB_MSG_TYPE.FileWrite, pbPayload, 10000); + isFirst = false; + + if (resp.msgType === PB_MSG_TYPE.Failure) { + const d = decodeFailure(resp.pbPayload); + throw new Error(`FileWrite Failure [${d.code}]: ${d.message}`); + } + if (resp.msgType !== PB_MSG_TYPE.File) { + throw new Error(`Unexpected response: ${resp.msgType}`); + } + const f = decodeFile(resp.pbPayload); + offset = f.processedByte !== null ? f.processedByte : (offset + chunk.length); + setFileWriteProgress({ done: offset, total: totalLen }); + } + + if (fileWriteAbortRef.current) { + log('Upload aborted', 'info'); + } else { + const elapsed = (performance.now() - t0) / 1000; + const speed = totalLen / elapsed; + log(`Upload complete: ${totalLen} B in ${elapsed.toFixed(2)}s (${Math.round(speed / 1024)} KB/s)`, 'success'); + } + } catch (e: unknown) { + log(`FileWrite error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFileWriteBusy(false); + setFileWriteProgress(null); + setFileWriteSelectedName(''); + if (fileWriteInputRef.current) fileWriteInputRef.current.value = ''; + } + }; + + const stopFileWrite = () => { + fileWriteAbortRef.current = true; + }; + + // ------------------------------------------------------------------ + // Dir / File manage + // ------------------------------------------------------------------ + const sendDirMake = async () => { + if (!connected || !dirMakePath) return; + setFsBusy(true); + try { + const resp = await sendPbMessage(PB_MSG_TYPE.DirMake, encodeDirMake(dirMakePath)); + if (resp.msgType === PB_MSG_TYPE.Success) { + log(`DirMake OK: ${dirMakePath}`, 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const d = decodeFailure(resp.pbPayload); + log(`DirMake Failure [${d.code}]: ${d.message}`, 'error'); + } + } catch (e: unknown) { + log(`DirMake error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFsBusy(false); + } + }; + + const sendDirRemove = async (path?: string) => { + const targetPath = path ?? dirMakePath; + if (!connected || !targetPath) return; + setFsBusy(true); + try { + const resp = await sendPbMessage(PB_MSG_TYPE.DirRemove, encodeDirRemove(targetPath)); + if (resp.msgType === PB_MSG_TYPE.Success) { + log(`DirRemove OK: ${targetPath}`, 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const d = decodeFailure(resp.pbPayload); + log(`DirRemove Failure [${d.code}]: ${d.message}`, 'error'); + } + } catch (e: unknown) { + log(`DirRemove error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFsBusy(false); + } + }; + + const sendFileDelete = async () => { + if (!connected || !fileDeletePath) return; + setFsBusy(true); + try { + const resp = await sendPbMessage(PB_MSG_TYPE.FileDelete, encodeFileDelete(fileDeletePath)); + if (resp.msgType === PB_MSG_TYPE.Success) { + log(`FileDelete OK: ${fileDeletePath}`, 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const d = decodeFailure(resp.pbPayload); + log(`FileDelete Failure [${d.code}]: ${d.message}`, 'error'); + } + } catch (e: unknown) { + log(`FileDelete error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFsBusy(false); + } + }; + + // ------------------------------------------------------------------ + // Firmware Update + // ------------------------------------------------------------------ + const sendFirmwareUpdate = async () => { + if (!connected || !fwPath) return; + setFwBusy(true); + try { + const targets = [{ targetId: fwTargetId, path: fwPath }]; + const payload = encodeFirmwareUpdate(targets, fwRebootOnSuccess); + log(`FirmwareUpdate: target=${FW_TARGET_LABELS[fwTargetId]} path=${fwPath} reboot=${fwRebootOnSuccess}`, 'info'); + const resp = await sendPbMessage(PB_MSG_TYPE.FirmwareUpdate, payload, 60000); + if (resp.msgType === PB_MSG_TYPE.Success) { + const decoded = decodeSuccess(resp.pbPayload); + log(`FirmwareUpdate OK: "${decoded.message || 'Firmware updated'}"`, 'success'); + } else if (resp.msgType === PB_MSG_TYPE.Failure) { + const decoded = decodeFailure(resp.pbPayload); + log(`FirmwareUpdate Failure [${decoded.code}]: ${decoded.message}`, 'error'); + } else { + log(`FirmwareUpdate unexpected response: msgType=${resp.msgType}`, 'error'); + } + } catch (e: unknown) { + log(`FirmwareUpdate error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } finally { + setFwBusy(false); + } + }; + + // ------------------------------------------------------------------ + // Reboot + // ------------------------------------------------------------------ + const sendReboot = async (rebootType: number) => { + if (!connected) return; + try { + const payload = encodeReboot(rebootType); + log(`Rebooting: ${REBOOT_TYPE[rebootType as keyof typeof REBOOT_TYPE] ?? rebootType}`, 'info'); + await sendPbMessage(PB_MSG_TYPE.Reboot, payload); + log('Reboot command sent', 'success'); + await disconnect(); + } catch (e: unknown) { + log(`Reboot error: ${e instanceof Error ? e.message : String(e)}`, 'error'); + } + }; + + // ------------------------------------------------------------------ + // Render + // ------------------------------------------------------------------ + const logTypeClass = { + info: 'text-muted-foreground', + success: 'text-green-500', + error: 'text-red-500', + tx: 'text-blue-400', + rx: 'text-purple-400', + } as const; + + return ( + +
+ {/* Header */} +
+
+

Pro2 Debug

+

+ Direct WebUSB communication with OneKey Pro2 (Proto V0 / 0x5A framing) +

+
+
+
+
+ {connected ? `${device?.productName ?? 'Pro2'} connected` : 'Disconnected'} +
+ {connected ? ( + + ) : ( + + )} +
+
+ +
+ {/* Left: Operations */} +
+ {/* Tabs */} +
+ {(['ping', 'fs', 'firmware', 'reboot'] as const).map(tab => ( + + ))} +
+ + {/* Ping Tab */} + {activeTab === 'ping' && ( + + + + + Ping (msgType=60206) + + + +
+ + setPingMessage(e.target.value)} + placeholder="Ping message..." + /> +
+ +
+
+ )} + + {/* File System Tab */} + {activeTab === 'fs' && ( +
+ + + + + Directory & Path Operations + + + +
+ + setFsPath(e.target.value)} + placeholder="/" + /> +
+
+
+ +

列出目录下的文件和子目录

+
+
+ +

查询路径的大小、日期、类型

+
+
+
+ +

修复 eMMC 文件系统权限问题

+
+ {/* DirMake */} +
+ +
+ setDirMakePath(e.target.value)} + placeholder="/path/to/dir" + /> + + +
+
+ {/* FileDelete */} +
+ +
+ setFileDeletePath(e.target.value)} + placeholder="/path/to/file" + /> + +
+
+ {fsResult && ( +
+                        {fsResult}
+                      
+ )} +
+
+ + + + + + File Read + + + +
+ + setFileReadPath(e.target.value)} + placeholder="/path/to/file" + /> +
+
+ + {fileReadData && ( + + )} +
+ {fileReadData && ( +
+ {fileReadData.length} bytes read •{' '} + + {Array.from(fileReadData.slice(0, 8)).map(b => b.toString(16).padStart(2, '0')).join(' ')} + {fileReadData.length > 8 ? '...' : ''} + +
+ )} +
+
+ + {/* File Write (Upload) */} + + + + + File Write (Upload) + + + +
+ + setFileWriteSelectedName(e.target.files?.[0]?.name ?? '')} + /> + +
+
+
+ + setFileWriteTargetPath(e.target.value)} + placeholder="vol1:filename.bin" + disabled={fileWriteBusy} + /> +
+
+ + setFileWriteChunkSize(Number(e.target.value))} + min={64} + max={2048} + disabled={fileWriteBusy} + /> +
+
+
+ + {fileWriteBusy && ( + + )} +
+ {fileWriteProgress && ( +
+
+
+
+
+ {fileWriteProgress.done} / {fileWriteProgress.total} bytes ({Math.round((fileWriteProgress.done / fileWriteProgress.total) * 100)}%) +
+
+ )} + + +
+ )} + + {/* Firmware Tab */} + {activeTab === 'firmware' && ( +
+ + + + + Firmware Update (msgType=61000) + + + +

+ 告诉设备从已上传到 eMMC 的固件文件安装固件。需先通过 File System → File Write 将固件上传到设备。 +

+
+ + setFwPath(e.target.value)} + placeholder="vol1:firmware.bin" + disabled={fwBusy} + /> +
+
+ + +
+ + +
+
升级流程:
+
1. File System → File Write → 将 .bin 上传到设备(如 vol1:firmware.bin)
+
2. 此处填写设备上的路径,点击 Update Firmware
+
3. 设备校验并安装固件,安装完成后可自动重启
+
+
+
+
+ )} + + {/* Reboot Tab */} + {activeTab === 'reboot' && ( + + + + + Reboot (msgType=60400) + + + +

+ Reboot the device. Connection will be lost after sending. +

+
+ + + +
+
+
+ )} +
+ + {/* Right: Log console — sticky so it stays visible while scrolling the left panel */} +
+ + + + + Console + + + + +
+ {logs.length === 0 && ( +
Connect a Pro2 device to start debugging...
+ )} + {logs.map(entry => ( +
+ {entry.time} + {entry.message} +
+ ))} +
+
+
+
+
+ + {/* Info card */} + + +
+
Proto V0 Frame Format
+
+ [0x5A][lenL][lenH][headerCRC][router][attr][seq][msgTypeL][msgTypeH][...pb][frameCRC] +
+
+ Pro2 PID: 0x53C1  •  + VendorID: 0x1209  •  + Max frame: 2048 bytes  •  + CRC8 init: 0x30 +
+
+
+
+
+ + ); +} diff --git a/packages/connect-examples/expo-playground/package.json b/packages/connect-examples/expo-playground/package.json index 442461f2f..aed350d10 100644 --- a/packages/connect-examples/expo-playground/package.json +++ b/packages/connect-examples/expo-playground/package.json @@ -20,6 +20,7 @@ "@onekeyfe/hd-common-connect-sdk": "1.1.26-alpha.8", "@onekeyfe/hd-core": "1.1.26-alpha.8", "@onekeyfe/hd-shared": "1.1.26-alpha.8", + "@onekeyfe/hd-transport-web-device": "1.1.26-alpha.8", "@radix-ui/react-checkbox": "^1.3.2", "@radix-ui/react-dialog": "^1.1.14", "@radix-ui/react-dropdown-menu": "^2.1.15", diff --git a/packages/connect-examples/expo-playground/public/webusb_test.html b/packages/connect-examples/expo-playground/public/webusb_test.html new file mode 100644 index 000000000..e6c288015 --- /dev/null +++ b/packages/connect-examples/expo-playground/public/webusb_test.html @@ -0,0 +1,2998 @@ + + + + + + OneKey Pro 2 WebUSB eMMC + + + +
+

🔐 OneKey Pro 2 WebUSB eMMC

+

eMMC file management via WebUSB

+ +
+
+
+

Connection

+
+ Disconnected +
+ + +
+ +
+

Protobuf Messages

+
+ + + + + + + + + + + +
+ +
+ + +
+ +
+ +
+ +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+ + +
+
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+
+ +
+

EMMC 闭环测试

+
+ + +
+
+ + +
+
+ + +
+ + + + +
+ +
+

📊 Command Status

+
+
+ +
+

Log

+
+ +
+
+ + + + + diff --git a/vercel.json b/vercel.json new file mode 100644 index 000000000..7708bb8b0 --- /dev/null +++ b/vercel.json @@ -0,0 +1,10 @@ +{ + "version": 2, + "name": "onekey-hardware-playground", + "installCommand": "yarn install", + "buildCommand": "yarn build", + "outputDirectory": "packages/connect-examples/expo-playground/dist", + "rewrites": [ + { "source": "/(.*)", "destination": "/index.html" } + ] +} From f9ea4951e67ae85eccd12a1f568f92fb6ddde925 Mon Sep 17 00:00:00 2001 From: wabicai Date: Mon, 27 Apr 2026 15:21:17 +0800 Subject: [PATCH 06/73] feat(expo-example): connection-type picker + Pro2 firmware update UI Adds Pro2 connection paths and firmware-update entry to the example app, so end-to-end Pro2 SDK flows can be exercised from a real UI (not just the wire-level pro2-debug page). - `deviceConnectAtoms.ts` / `hardwareInstance.ts`: track and route the new `desktop-web-ble-pro2` env alongside the existing webusb / desktop-web-ble options. Default to `desktop-web-ble-pro2` when running inside Electron so Pro2 BLE is the path most users land on. - `DeviceList.tsx` / `FirmwareScreen/index.tsx`: connection-type picker on both home and firmware-update screens; the picker triggers a transport switch that requires an app restart in some envs (the underlying transport instance is a singleton). Firmware-update screen shows the V3 entry for both Pro and Pro2; Pro2 path renders as "Firmware Update V3 (Pro2 Protocol V2)". - Minor cleanups in `passphraseTest/TestSessionCountView.tsx` and `views/SLIP39TestScreen.tsx` that drifted in alongside the Pro2 work. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/atoms/deviceConnectAtoms.ts | 7 +++++- .../src/components/DeviceList.tsx | 23 ++++++++++++++++--- .../passphraseTest/TestSessionCountView.tsx | 1 + .../src/utils/hardwareInstance.ts | 14 ++++++++--- .../src/views/FirmwareScreen/index.tsx | 11 ++++++--- .../src/views/SLIP39TestScreen.tsx | 1 - 6 files changed, 46 insertions(+), 11 deletions(-) diff --git a/packages/connect-examples/expo-example/src/atoms/deviceConnectAtoms.ts b/packages/connect-examples/expo-example/src/atoms/deviceConnectAtoms.ts index 97ba1d52f..1e9c3fdb3 100644 --- a/packages/connect-examples/expo-example/src/atoms/deviceConnectAtoms.ts +++ b/packages/connect-examples/expo-example/src/atoms/deviceConnectAtoms.ts @@ -1,6 +1,11 @@ import { atom } from 'jotai'; -export type ConnectionType = 'bridge' | 'webusb' | 'emulator' | 'desktop-web-ble'; +export type ConnectionType = + | 'bridge' + | 'webusb' + | 'emulator' + | 'desktop-web-ble' + | 'desktop-web-ble-pro2'; // Use plain atom - persistence will be handled manually export const connectionTypeAtom = atom('bridge'); diff --git a/packages/connect-examples/expo-example/src/components/DeviceList.tsx b/packages/connect-examples/expo-example/src/components/DeviceList.tsx index a270fbb26..181b8b5b2 100644 --- a/packages/connect-examples/expo-example/src/components/DeviceList.tsx +++ b/packages/connect-examples/expo-example/src/components/DeviceList.tsx @@ -33,15 +33,27 @@ const CONNECTION_TYPE_STORE_KEY = '@onekey/connectionType'; * Determine if the connection type should use hd-common-connect-sdk */ const shouldUseCommonSdk = (connectionType: ConnectionType | null): boolean => - connectionType === 'desktop-web-ble' || connectionType === 'webusb'; + connectionType === 'desktop-web-ble' || + connectionType === 'desktop-web-ble-pro2' || + connectionType === 'webusb'; /** - * Check if switching between connection types requires app restart + * Check if switching between connection types requires app restart. + * Restart is needed when: + * - Switching between different SDK types (common sdk vs iframe sdk) + * - Switching between different transport classes within the same SDK + * (e.g., ElectronBleTransport vs ElectronPro2BleTransport) */ const needsRestartForSwitch = (from: ConnectionType | null, to: ConnectionType | null): boolean => { + if (from === to) return false; const fromUsesCommonSdk = shouldUseCommonSdk(from); const toUsesCommonSdk = shouldUseCommonSdk(to); - return fromUsesCommonSdk !== toUsesCommonSdk; + // Different SDK type -> restart + if (fromUsesCommonSdk !== toUsesCommonSdk) return true; + // Same SDK but different transport class -> also restart + // (switchTransport is a no-op in hd-common-connect-sdk) + if (fromUsesCommonSdk && toUsesCommonSdk && from !== to) return true; + return false; }; const storeConnectionType = async (value: ConnectionType) => { @@ -112,6 +124,10 @@ function DeviceListFC( getStoredConnectionType().then(storedType => { if (storedType) { setConnectionType(storedType); + } else if (Platform.OS === 'web' && (window as any).desktopApi) { + // In Electron, default to Desktop BLE Pro2 instead of Bridge + // to avoid axios compatibility issues in the renderer process + setConnectionType('desktop-web-ble-pro2'); } }); }, [setConnectionType]); @@ -248,6 +264,7 @@ function DeviceListFC( + + +
+ +
+

Protobuf Messages

+
+ + + + + + + + + + + +
+ +
+ + +
+ +
+ +
+ +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+ + +
+
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ +
+
+ +
+

EMMC 闭环测试

+
+ + +
+
+ + +
+
+ + +
+ + + + +
+ +
+

📊 Command Status

+
+
+ +
+

Log

+
+ +
+
+ + + + + From 7eded0e6cd384f7c73d5fe820586d62d4a99f109 Mon Sep 17 00:00:00 2001 From: wabicai Date: Wed, 6 May 2026 15:12:00 +0800 Subject: [PATCH 12/73] fix: stabilize protocol v2 firmware update flow --- .../src/views/FirmwareScreen/index.tsx | 150 +++++++++++------- .../common/DeviceInteractionArea.tsx | 43 +++++ .../app/components/common/MethodExecutor.tsx | 47 +++++- .../app/hooks/useHardwareMethodExecution.ts | 99 +++++++++++- .../expo-playground/app/i18n/locales/en.ts | 1 + .../expo-playground/app/i18n/locales/zh.ts | 1 + .../hd-transport-web-device/src/webusb.ts | 55 ++++++- .../__tests__/protocol-v2.test.js | 16 +- packages/hd-transport/src/protocol-session.ts | 10 +- 9 files changed, 354 insertions(+), 68 deletions(-) diff --git a/packages/connect-examples/expo-example/src/views/FirmwareScreen/index.tsx b/packages/connect-examples/expo-example/src/views/FirmwareScreen/index.tsx index 473aead5b..13f8e8b47 100644 --- a/packages/connect-examples/expo-example/src/views/FirmwareScreen/index.tsx +++ b/packages/connect-examples/expo-example/src/views/FirmwareScreen/index.tsx @@ -28,11 +28,60 @@ import { selectDeviceAtom } from '../../atoms/deviceAtoms'; import type { IDeviceListInstance } from '../../components/DeviceList'; type UpdateType = 'ble' | 'firmware' | 'source' | 'bootloader'; +type UpdateVersions = { + bootloaderVersion?: string; + firmwareVersion?: string; + bleVersion?: string; +}; type UpdateState = { success: boolean; payload?: string; + versions?: UpdateVersions; }; +function FirmwareUpdateResult({ updateState }: { updateState?: UpdateState }) { + const intl = useIntl(); + + if (!updateState) return null; + + const versionRows = updateState.versions + ? [ + { + label: intl.formatMessage({ id: 'label__device_bootloader_version' }), + value: updateState.versions.bootloaderVersion, + }, + { + label: intl.formatMessage({ id: 'label__device_firmware_version' }), + value: updateState.versions.firmwareVersion, + }, + { + label: intl.formatMessage({ id: 'label__device_bluetooth_version' }), + value: updateState.versions.bleVersion, + }, + ].filter(row => row.value) + : []; + + return ( + + + {updateState.success ? intl.formatMessage({ id: 'tip__update_success' }) : updateState.payload} + + {updateState.success && versionRows.length > 0 && ( + + {versionRows.map(row => ( + + {row.label} + + {row.value} + + + ))} + + )} + + ); +} + interface FirmwareActionButtonProps { title: string; deviceType: string; @@ -68,13 +117,7 @@ function FirmwareActionButton({ title, onUpdate, deviceType }: FirmwareActionBut > {intl.formatMessage({ id: 'label__reboot_device_board_model' })} - {updateState && ( - - {updateState?.success - ? intl.formatMessage({ id: 'tip__update_success' }) - : updateState?.payload} - - )} + ); } @@ -173,13 +216,7 @@ function FirmwareLocalFile({ title, type, onUpdate, deviceType }: FirmwareLocalF > {intl.formatMessage({ id: 'action__update' })} - {updateState && ( - - {updateState?.success - ? intl.formatMessage({ id: 'tip__update_success' }) - : updateState?.payload} - - )} + ); } @@ -373,13 +410,7 @@ function FirmwareMultipleFiles({ title, onUpdate, deviceType }: FirmwareMultiple {loading && {intl.formatMessage({ id: 'tip__updating' })}...} - {updateState && ( - - {updateState?.success - ? intl.formatMessage({ id: 'tip__update_success' }) - : updateState?.payload} - - )} + ); } @@ -427,47 +458,53 @@ function FirmwareUpdate({ onDisconnectDevice, onReconnectDevice }: FirmwareUpdat } }, [sdk, selectDevice?.connectId]); - useEffect(() => { - if (!sdk) return; + const loadDeviceFeatures = useCallback(async () => { if (selectDevice?.connectId == null) { setFeatures(undefined); setOnekeyFeatures(undefined); - return; + return undefined; } - const loadDeviceFeatures = async () => { - setConnecting(true); - setFeatures(undefined); - setOnekeyFeatures(undefined); - setError(undefined); + if (!sdk) { + return undefined; + } - try { - console.log('Loading device features for:', selectDevice.connectId); + setConnecting(true); + setFeatures(undefined); + setOnekeyFeatures(undefined); + setError(undefined); - const featuresRes = await sdk.getFeatures(selectDevice.connectId); - console.log('getFeatures result:', featuresRes); + try { + console.log('Loading device features for:', selectDevice.connectId); - if (featuresRes.success) { - const fetchedFeatures = featuresRes.payload; - console.log('Features loaded successfully, now loading OneKey features...'); - const fetchedOnekeyFeatures = await loadOnekeyFeatures(); + const featuresRes = await sdk.getFeatures(selectDevice.connectId); + console.log('getFeatures result:', featuresRes); - setFeatures(fetchedFeatures); - setOnekeyFeatures(fetchedOnekeyFeatures); - } else { - console.error('Failed to get features:', featuresRes.payload.error); - setError(featuresRes.payload.error); - } - } catch (error) { - console.error('Exception in loadDeviceFeatures:', error); - setError(error instanceof Error ? error.message : String(error)); - } finally { - setConnecting(false); + if (featuresRes.success) { + const fetchedFeatures = featuresRes.payload; + console.log('Features loaded successfully, now loading OneKey features...'); + const fetchedOnekeyFeatures = await loadOnekeyFeatures(); + + setFeatures(fetchedFeatures); + setOnekeyFeatures(fetchedOnekeyFeatures); + return fetchedFeatures; } - }; - loadDeviceFeatures(); - }, [sdk, selectDevice?.connectId, loadOnekeyFeatures]); + console.error('Failed to get features:', featuresRes.payload.error); + setError(featuresRes.payload.error); + return undefined; + } catch (error) { + console.error('Exception in loadDeviceFeatures:', error); + setError(error instanceof Error ? error.message : String(error)); + return undefined; + } finally { + setConnecting(false); + } + }, [loadOnekeyFeatures, sdk, selectDevice?.connectId]); + + useEffect(() => { + void loadDeviceFeatures(); + }, [loadDeviceFeatures]); const disconnectDevice = useCallback(() => { setFeatures(undefined); @@ -500,16 +537,20 @@ function FirmwareUpdate({ onDisconnectDevice, onReconnectDevice }: FirmwareUpdat platform: 'web', }); setShowUpdateDialog(false); + if (res.success) { + await loadDeviceFeatures(); + } return { success: res.success, payload: res.success ? undefined : res.payload?.error, + versions: res.success ? res.payload : undefined, }; } catch (error: any) { setShowUpdateDialog(false); return { payload: error.message || 'Unknown error occurred', success: false }; } }, - [features, intl, sdk, selectDevice, setShowUpdateDialog] + [features, intl, loadDeviceFeatures, sdk, selectDevice, setShowUpdateDialog] ); const updateFirmware = useCallback( @@ -560,6 +601,7 @@ function FirmwareUpdate({ onDisconnectDevice, onReconnectDevice }: FirmwareUpdat payload: res.payload.error, }; } + await loadDeviceFeatures(); return { success: true, }; @@ -589,6 +631,7 @@ function FirmwareUpdate({ onDisconnectDevice, onReconnectDevice }: FirmwareUpdat payload: res.payload.error, }; } + await loadDeviceFeatures(); return { success: true, }; @@ -606,6 +649,7 @@ function FirmwareUpdate({ onDisconnectDevice, onReconnectDevice }: FirmwareUpdat payload: res.payload.error, }; } + await loadDeviceFeatures(); return { success: true, }; @@ -628,7 +672,7 @@ function FirmwareUpdate({ onDisconnectDevice, onReconnectDevice }: FirmwareUpdat }; } }, - [deviceTypeLowerCase, features, intl, sdk, selectDevice] + [deviceTypeLowerCase, features, intl, loadDeviceFeatures, sdk, selectDevice] ); const rebootBoardModel = useCallback(async () => { diff --git a/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx b/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx index 377fe59d7..1382a0214 100644 --- a/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx @@ -26,6 +26,12 @@ interface FirmwareProgressData { progressType: 'transferData' | 'installingFirmware'; } +interface FirmwareVersionInfo { + bootloaderVersion?: string; + firmwareVersion?: string; + bleVersion?: string; +} + interface DeviceInteractionAreaProps { status: ExecutionStatus; deviceAction?: { @@ -39,6 +45,7 @@ interface DeviceInteractionAreaProps { isCancelling?: boolean; // 添加固件进度相关属性 firmwareProgress?: FirmwareProgressData | null; + firmwareVersions?: FirmwareVersionInfo | null; // 添加当前设备信息 currentDevice?: DeviceInfo | null; } @@ -52,6 +59,7 @@ const DeviceInteractionArea: React.FC = ({ onReset, isCancelling = false, firmwareProgress, + firmwareVersions, currentDevice, }) => { const { t } = useTranslation(); @@ -133,6 +141,22 @@ const DeviceInteractionArea: React.FC = ({ const statusConfig = getStatusConfig(); const progressConfig = getFirmwareProgressConfig(); + const firmwareVersionRows = firmwareVersions + ? [ + { + label: t('common.bootVersion'), + value: firmwareVersions.bootloaderVersion, + }, + { + label: t('common.firmwareVersion'), + value: firmwareVersions.firmwareVersion, + }, + { + label: t('common.bluetoothVersion'), + value: firmwareVersions.bleVersion, + }, + ].filter(row => row.value) + : []; return ( @@ -234,6 +258,25 @@ const DeviceInteractionArea: React.FC = ({ )} + {status === 'success' && firmwareVersionRows.length > 0 && ( +
+
+ + + {t('components.deviceInteractionArea.updatedVersions')} + +
+
+ {firmwareVersionRows.map(row => ( +
+ {row.label} + {row.value} +
+ ))} +
+
+ )} + {/* 执行控制按钮 - 并排布局,恢复文字 */}
diff --git a/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts b/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts index f7ab808fa..50ca040be 100644 --- a/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts +++ b/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts @@ -1,16 +1,96 @@ import { useCallback } from 'react'; +import { + getDeviceBLEFirmwareVersion, + getDeviceBootloaderVersion, + getDeviceFirmwareVersion, +} from '@onekeyfe/hd-core'; import { useDeviceStore } from '../store/deviceStore'; import { callHardwareAPI } from '../services/hardwareService'; +import { SDKUtils } from '../utils/hardwareInstance'; import type { UnifiedMethodConfig } from '~/data/types'; +import type { DeviceInfo } from '../types/hardware'; +import type { Features } from '@onekeyfe/hd-core'; interface UseHardwareMethodExecutionOptions { requireDevice?: boolean; } +interface FirmwareVersionInfo { + bootloaderVersion?: string; + firmwareVersion?: string; + bleVersion?: string; +} + +const FIRMWARE_UPDATE_METHODS = new Set([ + 'firmwareUpdateV2', + 'firmwareUpdateV3', + 'deviceUpdateBootloader', +]); + +function hasFirmwareVersionInfo(versions: FirmwareVersionInfo): boolean { + return Boolean(versions.bootloaderVersion || versions.firmwareVersion || versions.bleVersion); +} + +function getFirmwareVersionsFromPayload(payload: unknown): FirmwareVersionInfo | undefined { + if (!payload || typeof payload !== 'object') return undefined; + const data = payload as Record; + const versions = { + bootloaderVersion: + typeof data.bootloaderVersion === 'string' ? data.bootloaderVersion : undefined, + firmwareVersion: typeof data.firmwareVersion === 'string' ? data.firmwareVersion : undefined, + bleVersion: typeof data.bleVersion === 'string' ? data.bleVersion : undefined, + }; + + return hasFirmwareVersionInfo(versions) ? versions : undefined; +} + +function getFirmwareVersionsFromFeatures(features?: Features): FirmwareVersionInfo | undefined { + if (!features) return undefined; + + const versions = { + bootloaderVersion: getDeviceBootloaderVersion(features)?.join('.'), + firmwareVersion: getDeviceFirmwareVersion(features)?.join('.'), + bleVersion: getDeviceBLEFirmwareVersion(features)?.join('.'), + }; + + return hasFirmwareVersionInfo(versions) ? versions : undefined; +} + export function useHardwareMethodExecution({ requireDevice = true, }: UseHardwareMethodExecutionOptions = {}) { - const { currentDevice } = useDeviceStore(); + const { currentDevice, setCurrentDevice, setDeviceFeatures } = useDeviceStore(); + + const refreshCurrentDeviceInfo = useCallback(async (): Promise => { + if (!currentDevice?.connectId) return currentDevice; + + const sdk = await SDKUtils.getInstance(); + const featuresResult = await sdk.getFeatures(currentDevice.connectId); + if (!featuresResult.success || !featuresResult.payload) { + return currentDevice; + } + + let onekeyFeatures = currentDevice.onekeyFeatures; + try { + const onekeyFeaturesResult = await sdk.getOnekeyFeatures(currentDevice.connectId); + if (onekeyFeaturesResult.success && onekeyFeaturesResult.payload) { + onekeyFeatures = onekeyFeaturesResult.payload; + } + } catch (error) { + console.warn('刷新 OneKey features 失败:', error); + } + + const updatedDevice = { + ...currentDevice, + features: featuresResult.payload, + onekeyFeatures, + }; + + setDeviceFeatures(featuresResult.payload); + setCurrentDevice(updatedDevice); + + return updatedDevice; + }, [currentDevice, setCurrentDevice, setDeviceFeatures]); const executeMethod = useCallback( async ( @@ -40,15 +120,30 @@ export function useHardwareMethodExecution({ const result = await callHardwareAPI(methodConfig.method, executionParams); if (result.success) { + let firmwareVersions = FIRMWARE_UPDATE_METHODS.has(methodConfig.method) + ? getFirmwareVersionsFromPayload(result.payload) + : undefined; + + if (FIRMWARE_UPDATE_METHODS.has(methodConfig.method)) { + try { + const refreshedDevice = await refreshCurrentDeviceInfo(); + firmwareVersions = + firmwareVersions ?? getFirmwareVersionsFromFeatures(refreshedDevice?.features); + } catch (error) { + console.warn('固件更新完成后刷新设备信息失败:', error); + } + } + return { success: true, data: result.payload, + ...(firmwareVersions ? { firmwareVersions } : {}), }; } else { throw new Error(result.payload?.error || '执行失败'); } }, - [currentDevice, requireDevice] + [currentDevice, refreshCurrentDeviceInfo, requireDevice] ); return { diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts index f3a1a5a10..1e4d66f91 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts @@ -931,6 +931,7 @@ export const en = { transferringDataDesc: 'Transferring firmware data to device...', installingFirmware: 'Installing Firmware', installingFirmwareDesc: 'Installing firmware, please do not disconnect device...', + updatedVersions: 'Updated Versions', }, webusb: { authorize: { diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts index 6a441a1a3..660f64ef0 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts @@ -894,6 +894,7 @@ export const zh = { transferringDataDesc: '正在将固件数据传输到设备...', installingFirmware: '安装固件', installingFirmwareDesc: '正在安装固件,请勿断开设备...', + updatedVersions: '更新后的版本', }, webusb: { authorize: { diff --git a/packages/hd-transport-web-device/src/webusb.ts b/packages/hd-transport-web-device/src/webusb.ts index 681aae69c..0ff81827d 100644 --- a/packages/hd-transport-web-device/src/webusb.ts +++ b/packages/hd-transport-web-device/src/webusb.ts @@ -27,6 +27,8 @@ const HEADER_LENGTH = 6; const PACKET_IO_MAX_RETRIES = 3; const PACKET_IO_RETRY_DELAY = 300; const PROTOCOL_PROBE_TIMEOUT = 1500; +const PROTOCOL_V2_PRODUCT_NAME_RE = /\bpro\s*2\b|pro2/i; +const LEGACY_PROTOCOL_PRODUCT_NAME_RE = /\bonekey\s+(classic|mini|pro|touch)\b/i; /** * Device information with path and WebUSB device instance @@ -49,9 +51,12 @@ export default class WebUsbTransport { /** Protobuf schema for Protocol V2 transports. */ messagesV2: ReturnType | undefined; - /** Per-path protocol type detected by active wire-level probe after connect. */ + /** Per-path protocol type detected by descriptor heuristic or active wire-level probe. */ private deviceProtocol: Map = new Map(); + /** Marks whether a cached protocol came from a USB descriptor heuristic or active probe. */ + private deviceProtocolSource: Map = new Map(); + /** Per-path USB endpoint / interface numbers (discovered from USB descriptors) */ private deviceEndpoints: Map = new Map(); @@ -187,16 +192,52 @@ export default class WebUsbTransport { } /** - * Determine protocol type by probing the wire protocol after connect. - * Protocol V2 must answer GetProtoVersion; otherwise we keep the legacy V1 path. + * Determine protocol type after connect. + * Known legacy descriptors can skip probing; otherwise Protocol V2 must answer + * GetProtoVersion or bootloader status before we select the V2 path. */ private async detectProtocol(path: string): Promise { + const cachedProtocol = this.deviceProtocol.get(path); + if (cachedProtocol) { + this.Log.debug( + `[WebUsbTransport] detectProtocol: path=${path} -> ${cachedProtocol} (cached)` + ); + return cachedProtocol; + } + + const heuristicProtocol = this.detectProtocolFromUsbDescriptor(path); + if (heuristicProtocol) { + this.deviceProtocol.set(path, heuristicProtocol); + this.deviceProtocolSource.set(path, 'heuristic'); + this.Log.debug( + `[WebUsbTransport] detectProtocol: path=${path} -> ${heuristicProtocol} (descriptor)` + ); + return heuristicProtocol; + } + const protocol: ProtocolType = (await this.probeProtocolV2(path)) ? 'V2' : 'V1'; this.deviceProtocol.set(path, protocol); + this.deviceProtocolSource.set(path, 'probe'); this.Log.debug(`[WebUsbTransport] detectProtocol: path=${path} -> ${protocol}`); return protocol; } + private detectProtocolFromUsbDescriptor(path: string): ProtocolType | undefined { + const deviceInfo = this.deviceList.find(d => d.path === path); + const productName = deviceInfo?.device.productName?.trim(); + if (!productName) return undefined; + + if (PROTOCOL_V2_PRODUCT_NAME_RE.test(productName)) { + return undefined; + } + + if (LEGACY_PROTOCOL_PRODUCT_NAME_RE.test(productName)) { + return 'V1'; + } + + return undefined; + } + /** * Find device by path */ @@ -660,7 +701,13 @@ export default class WebUsbTransport { const ifaceNum = endpoints?.interfaceNumber ?? this.interfaceId; await device.releaseInterface(ifaceNum); await device.close(); - this.deviceProtocol.delete(path); + if ( + this.deviceProtocol.get(path) !== 'V2' && + this.deviceProtocolSource.get(path) !== 'heuristic' + ) { + this.deviceProtocol.delete(path); + this.deviceProtocolSource.delete(path); + } this.deviceEndpoints.delete(path); } diff --git a/packages/hd-transport/__tests__/protocol-v2.test.js b/packages/hd-transport/__tests__/protocol-v2.test.js index d03a19a4a..cc7e3b8fc 100644 --- a/packages/hd-transport/__tests__/protocol-v2.test.js +++ b/packages/hd-transport/__tests__/protocol-v2.test.js @@ -199,20 +199,32 @@ describe('Protocol V2 framing and session', () => { }); }); - test('session rejects response frames with a mismatched seq', async () => { + test('session accepts response frames with a device-owned seq', async () => { const response = ProtocolV2.encode(schemas, 'ProtoVersion', { major_version: 2, minor_version: 0, patch_version: 1, }); + const logger = { + debug: jest.fn(), + }; const session = new ProtocolV2Session({ schemas, router: 1, writeFrame: () => Promise.resolve(), readFrame: () => Promise.resolve(response), + logger, }); - await expect(session.call('GetProtoVersion', {})).rejects.toThrow('Protocol V2 seq mismatch'); + await expect(session.call('GetProtoVersion', {})).resolves.toEqual({ + type: 'ProtoVersion', + message: { + major_version: 2, + minor_version: 0, + patch_version: 1, + }, + }); + expect(logger.debug).toHaveBeenCalledWith(expect.stringContaining('seq differs')); }); test('session consumes intermediate response frames before returning the final response', async () => { diff --git a/packages/hd-transport/src/protocol-session.ts b/packages/hd-transport/src/protocol-session.ts index 93593251c..1b9661f0d 100644 --- a/packages/hd-transport/src/protocol-session.ts +++ b/packages/hd-transport/src/protocol-session.ts @@ -88,7 +88,7 @@ export class ProtocolV2Session { this.options = options; } - async call( + call( name: string, data: Record, callOptions: ProtocolV2CallOptions = {} @@ -121,8 +121,8 @@ export class ProtocolV2Session { const rxFrame = await readFrame(); const decoded = ProtocolV2.decode(schemas, rxFrame); if (decoded.seq !== expectedSeq) { - throw new Error( - `Protocol V2 seq mismatch for ${name}: expected ${expectedSeq}, got ${decoded.seq}` + logger?.debug?.( + `[${logPrefix}] seq differs for ${name}: tx=${expectedSeq}, rx=${decoded.seq}` ); } logger?.debug?.( @@ -132,9 +132,9 @@ export class ProtocolV2Session { const response = check.call(decoded); if (callOptions.intermediateTypes?.includes(response.type)) { callOptions.onIntermediateResponse?.(response); - continue; + } else { + return response; } - return response; } }; From db4593432f758b496cbbcd63586ce275a0434008 Mon Sep 17 00:00:00 2001 From: wabicai Date: Wed, 6 May 2026 17:06:32 +0800 Subject: [PATCH 13/73] feat: add pro2 firmware playground deployment --- .gitmodules | 1 + .../app/components/common/ParameterInput.tsx | 18 +- .../app/data/methods/firmware.ts | 202 +++++++++++++++++- .../app/hooks/useHardwareMethodExecution.ts | 29 ++- .../expo-playground/app/i18n/locales/en.ts | 9 +- .../expo-playground/app/i18n/locales/zh.ts | 9 +- .../app/routes/device-methods._index.tsx | 13 +- packages/core/src/api/FileRead.ts | 3 + packages/core/src/api/FileWrite.ts | 2 +- packages/core/src/types/api/protocolV2.ts | 4 +- .../hd-transport/scripts/protobuf-build.sh | 40 ++-- submodules/firmware-pro2 | 2 +- vercel.json | 8 + 13 files changed, 313 insertions(+), 27 deletions(-) create mode 100644 vercel.json diff --git a/.gitmodules b/.gitmodules index ff839cf2b..d62ab4a36 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,4 @@ [submodule "submodules/firmware-pro2"] path = submodules/firmware-pro2 url = https://github.com/OneKeyHQ/firmware-pro2.git + branch = dev diff --git a/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx b/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx index eed64e098..b27917ecf 100644 --- a/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx @@ -219,7 +219,8 @@ const ParameterInput: React.FC = ({ }; // 获取文件参数配置 - const getFileParameterConfig = (paramName: string) => { + const getFileParameterConfig = (field: ParameterField) => { + const paramName = field.name; // 根据参数名称智能推断文件类型配置 const getConfigByPattern = () => { if (/firmware/i.test(paramName)) { @@ -250,11 +251,18 @@ const ParameterInput: React.FC = ({ description: t('components.firmwareFileUpload.resourceDesc'), }; } + if (/data/i.test(paramName)) { + return { + accept: field.accept || '.bin', + title: field.label || paramName, + description: field.description || '', + }; + } // 默认配置 return { - accept: '.bin', - title: t('components.firmwareFileUpload.firmwareFile'), - description: t('components.firmwareFileUpload.firmwareDesc'), + accept: field.accept || '.bin', + title: field.label || t('components.firmwareFileUpload.firmwareFile'), + description: field.description || t('components.firmwareFileUpload.firmwareDesc'), }; }; @@ -271,7 +279,7 @@ const ParameterInput: React.FC = ({ // 渲染文件选择器 const renderFilePicker = (field: ParameterField) => { - const config = getFileParameterConfig(field.name); + const config = getFileParameterConfig(field); const currentValue = getParameterValue(field) as File | null; // 优先使用字段配置的accept,否则使用默认配置 diff --git a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts index 5f416be43..b59610e48 100644 --- a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts +++ b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts @@ -110,7 +110,7 @@ const api: UnifiedMethodConfig[] = [ noDeviceIdReq: true, presets: [ { - title: 'Update multiple firmware', + title: 'Protocol V2 one-stop update', parameters: [ { name: 'platform', @@ -175,6 +175,206 @@ const api: UnifiedMethodConfig[] = [ }, ], }, + { + method: 'pathInfo', + description: 'methodDescriptions.pathInfo', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 path info', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:firmware.bin', + value: 'vol1:firmware.bin', + }, + ], + }, + ], + }, + { + method: 'dirList', + description: 'methodDescriptions.dirList', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 list directory', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:', + value: 'vol1:', + }, + ], + }, + ], + }, + { + method: 'dirMake', + description: 'methodDescriptions.dirMake', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 make directory', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:updates', + value: 'vol1:updates', + }, + ], + }, + ], + }, + { + method: 'dirRemove', + description: 'methodDescriptions.dirRemove', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 remove directory', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:updates', + value: 'vol1:updates', + }, + ], + }, + ], + }, + { + method: 'fileRead', + description: 'methodDescriptions.fileRead', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 read file chunk', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:firmware.bin', + value: 'vol1:firmware.bin', + }, + { + name: 'offset', + type: 'number', + required: true, + label: 'Offset', + value: 0, + }, + { + name: 'totalSize', + type: 'number', + required: true, + label: 'Total Size', + value: 0, + }, + { + name: 'chunkLen', + type: 'number', + required: false, + label: 'Chunk Length', + value: 1400, + }, + ], + }, + ], + }, + { + method: 'fileWrite', + description: 'methodDescriptions.fileWrite', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 write file chunk', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:test.bin', + value: 'vol1:test.bin', + }, + { + name: 'offset', + type: 'number', + required: true, + label: 'Offset', + value: 0, + }, + { + name: 'totalSize', + type: 'number', + required: false, + label: 'Total Size', + description: 'Leave 0 to use the selected file size for a single chunk write.', + value: 0, + }, + { + name: 'data', + type: 'file', + required: true, + label: 'File Data', + description: 'One Protocol V2 chunk. Keep it at 2048 bytes or smaller.', + accept: '.bin,.txt,.json', + visible: true, + editable: true, + }, + { + name: 'overwrite', + type: 'boolean', + required: false, + label: 'Overwrite', + value: true, + }, + { + name: 'append', + type: 'boolean', + required: false, + label: 'Append', + value: false, + }, + ], + }, + ], + }, + { + method: 'fileDelete', + description: 'methodDescriptions.fileDelete', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 delete file', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol1:test.bin', + value: 'vol1:test.bin', + }, + ], + }, + ], + }, // === 固件信息检查 === { method: 'checkFirmwareRelease', diff --git a/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts b/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts index 50ca040be..c2d2db6a2 100644 --- a/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts +++ b/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts @@ -27,6 +27,31 @@ const FIRMWARE_UPDATE_METHODS = new Set([ 'deviceUpdateBootloader', ]); +function getProtocolV2FileWriteDataSize(data: unknown): number | undefined { + if (data instanceof ArrayBuffer) return data.byteLength; + if (ArrayBuffer.isView(data)) return data.byteLength; + if (typeof data === 'string') return new TextEncoder().encode(data).byteLength; + return undefined; +} + +function normalizeProtocolV2FileParams( + method: string, + params: Record +): Record { + if (method !== 'fileWrite') return params; + + const dataSize = getProtocolV2FileWriteDataSize(params.data); + if (!dataSize) return params; + + const totalSize = Number(params.totalSize); + if (Number.isFinite(totalSize) && totalSize > 0) return params; + + return { + ...params, + totalSize: dataSize, + }; +} + function hasFirmwareVersionInfo(versions: FirmwareVersionInfo): boolean { return Boolean(versions.bootloaderVersion || versions.firmwareVersion || versions.bleVersion); } @@ -116,8 +141,10 @@ export function useHardwareMethodExecution({ } : params; + const normalizedParams = normalizeProtocolV2FileParams(methodConfig.method, executionParams); + // 调用硬件 API - const result = await callHardwareAPI(methodConfig.method, executionParams); + const result = await callHardwareAPI(methodConfig.method, normalizedParams); if (result.success) { let firmwareVersions = FIRMWARE_UPDATE_METHODS.has(methodConfig.method) diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts index 1e4d66f91..b19a40fa6 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts @@ -312,7 +312,14 @@ export const en = { filecoinGetAddress: 'Get address for your account.', filecoinSignTransaction: 'Sign a transaction with your private key.', firmwareUpdateV2: 'compatible with all devices', - firmwareUpdateV3: 'pro deivce & bootloader > 4.12.0 only', + firmwareUpdateV3: 'Protocol V2/Pro one-stop firmware update with progress and final version refresh', + pathInfo: 'Protocol V2 filesystem path information', + dirList: 'Protocol V2 filesystem directory listing', + dirMake: 'Protocol V2 filesystem directory creation', + dirRemove: 'Protocol V2 filesystem directory removal', + fileRead: 'Protocol V2 filesystem file chunk read', + fileWrite: 'Protocol V2 filesystem file chunk write', + fileDelete: 'Protocol V2 filesystem file deletion', getFeatures: 'Get features of a device', getLogs: 'Get device logs', getNextU2FCounter: 'Get next U2F counter value', diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts index 660f64ef0..ce1e79739 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts @@ -303,7 +303,14 @@ export const zh = { filecoinGetAddress: '获取 Filecoin 地址', filecoinSignTransaction: '使用 Filecoin 私钥签名交易', firmwareUpdateV2: '兼容所有设备', - firmwareUpdateV3: '仅适用于 Pro 设备且引导程序版本 > 4.12.0', + firmwareUpdateV3: 'Protocol V2/Pro 固件升级一条龙,包含进度和完成后的版本刷新', + pathInfo: 'Protocol V2 文件系统路径信息', + dirList: 'Protocol V2 文件系统目录列表', + dirMake: 'Protocol V2 文件系统创建目录', + dirRemove: 'Protocol V2 文件系统删除目录', + fileRead: 'Protocol V2 文件系统读取文件分片', + fileWrite: 'Protocol V2 文件系统写入文件分片', + fileDelete: 'Protocol V2 文件系统删除文件', getFeatures: '获取设备功能信息', getLogs: '获取设备日志', getNextU2FCounter: '获取下一个 U2F 计数器值', diff --git a/packages/connect-examples/expo-playground/app/routes/device-methods._index.tsx b/packages/connect-examples/expo-playground/app/routes/device-methods._index.tsx index fd1653ecb..e2e8da543 100644 --- a/packages/connect-examples/expo-playground/app/routes/device-methods._index.tsx +++ b/packages/connect-examples/expo-playground/app/routes/device-methods._index.tsx @@ -36,6 +36,16 @@ interface MethodCategory { methods: UnifiedMethodConfig[]; } +const PROTOCOL_V2_FILE_SYSTEM_METHODS = new Set([ + 'pathinfo', + 'dirlist', + 'dirmake', + 'dirremove', + 'fileread', + 'filewrite', + 'filedelete', +]); + const DeviceMethodsIndexPage: React.FC = () => { const navigate = useNavigate(); const { t } = useTranslation(); @@ -116,7 +126,8 @@ const DeviceMethodsIndexPage: React.FC = () => { methodName.includes('bootloader') || methodName.includes('check') || methodName.includes('bridge') || - methodName.includes('reboot') + methodName.includes('reboot') || + PROTOCOL_V2_FILE_SYSTEM_METHODS.has(methodName) ) { firmwareMethods.push(method); } diff --git a/packages/core/src/api/FileRead.ts b/packages/core/src/api/FileRead.ts index c6ff0a016..1e5bda3ce 100644 --- a/packages/core/src/api/FileRead.ts +++ b/packages/core/src/api/FileRead.ts @@ -4,6 +4,7 @@ export type FileReadParams = { path: string; offset: number; totalSize: number; + chunkLen?: number; }; export default class FileRead extends BaseMethod { @@ -14,6 +15,7 @@ export default class FileRead extends BaseMethod { path: this.payload.path, offset: this.payload.offset ?? 0, totalSize: this.payload.totalSize ?? 0, + chunkLen: this.payload.chunkLen, }; } @@ -24,6 +26,7 @@ export default class FileRead extends BaseMethod { offset: this.params.offset, total_size: this.params.totalSize, }, + chunk_len: this.params.chunkLen, }); return Promise.resolve(res.message); } diff --git a/packages/core/src/api/FileWrite.ts b/packages/core/src/api/FileWrite.ts index 6abf2532a..51b4fbbac 100644 --- a/packages/core/src/api/FileWrite.ts +++ b/packages/core/src/api/FileWrite.ts @@ -7,7 +7,7 @@ export type FileWriteParams = { path: string; offset: number; totalSize: number; - data: Uint8Array | string; + data: ArrayBuffer | Uint8Array | string; overwrite?: boolean; append?: boolean; }; diff --git a/packages/core/src/types/api/protocolV2.ts b/packages/core/src/types/api/protocolV2.ts index 2698b215a..7ecc14123 100644 --- a/packages/core/src/types/api/protocolV2.ts +++ b/packages/core/src/types/api/protocolV2.ts @@ -39,7 +39,7 @@ export type PathInfoResult = { export declare function fileRead( connectId: string, - params: { path: string; offset: number; totalSize: number } + params: { path: string; offset: number; totalSize: number; chunkLen?: number } ): Response; export declare function fileWrite( @@ -48,7 +48,7 @@ export declare function fileWrite( path: string; offset: number; totalSize: number; - data: Uint8Array | string; + data: ArrayBuffer | Uint8Array | string; overwrite?: boolean; append?: boolean; } diff --git a/packages/hd-transport/scripts/protobuf-build.sh b/packages/hd-transport/scripts/protobuf-build.sh index 67b27f62d..1e1983954 100755 --- a/packages/hd-transport/scripts/protobuf-build.sh +++ b/packages/hd-transport/scripts/protobuf-build.sh @@ -5,6 +5,7 @@ set -euxo pipefail echo $# PARENT_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) +PACKAGE_ROOT="$PARENT_PATH/.." SRC="../../submodules/firmware/common/protob" DIST="." @@ -32,30 +33,43 @@ if [[ "$LANG" != "typescript" && "$LANG" != "flow" ]]; exit 1 fi +if [[ "$SRC" = /* ]]; then + SRC_PATH="$SRC" +else + SRC_PATH="$PACKAGE_ROOT/$SRC" +fi + +if [[ "$DIST" = /* ]]; then + DIST_PATH="$DIST" +else + DIST_PATH="$PACKAGE_ROOT/$DIST" +fi + # ============================================================ # BUILD Pro1 messages.json (requires firmware submodule) # ============================================================ # Combines all messages*.proto files from firmware submodule into # messages.json, then copies to core package. -if [ -d "$SRC" ] && ls "$SRC"/messages*.proto 1>/dev/null 2>&1; then +if [ -d "$SRC_PATH" ] && ls "$SRC_PATH"/messages*.proto 1>/dev/null 2>&1; then echo "=== Building Pro1 (legacy) protobuf messages ===" - echo 'syntax = "proto2";' > $DIST/messages.proto - echo 'import "google/protobuf/descriptor.proto";' >> $DIST/messages.proto - echo "Build proto file from $SRC" - grep -hv -e '^import ' -e '^syntax' -e '^package' -e 'option java_' $SRC/messages*.proto \ + TMP_PROTO="$DIST_PATH/messages-tmp.proto" + echo 'syntax = "proto2";' > "$TMP_PROTO" + echo 'import "google/protobuf/descriptor.proto";' >> "$TMP_PROTO" + echo "Build proto file from $SRC_PATH" + grep -hv -e '^import ' -e '^syntax' -e '^package' -e 'option java_' "$SRC_PATH"/messages*.proto \ | sed 's/ hw\.trezor\.messages\.common\./ /' \ | sed 's/ common\./ /' \ | sed 's/ ethereum_definitions\./ /' \ | sed 's/ management\./ /' \ | sed 's/^option /\/\/ option /' \ - | grep -v ' reserved '>> $DIST/messages.proto + | grep -v ' reserved '>> "$TMP_PROTO" - npx pbjs -t json -p $DIST -o $DIST/messages.json --keep-case messages.proto - rm $DIST/messages.proto + npx pbjs -t json -p "$DIST_PATH" -o "$DIST_PATH/messages.json" --keep-case "$TMP_PROTO" + rm "$TMP_PROTO" # Copy to core package - cp $DIST/messages.json "$CORE_MESSAGES_DIR/messages.json" + cp "$DIST_PATH/messages.json" "$CORE_MESSAGES_DIR/messages.json" echo "Pro1 messages.json copied to core" echo "generating type definitions for: $LANG" @@ -64,11 +78,11 @@ if [ -d "$SRC" ] && ls "$SRC"/messages*.proto 1>/dev/null 2>&1; then node ./protobuf-types.js $LANG - yarn prettier --write ../messages.json - yarn prettier --write "$CORE_MESSAGES_DIR/messages.json" - yarn prettier --write **/messages.ts + yarn --cwd "$PACKAGE_ROOT" prettier --write "$DIST_PATH/messages.json" + yarn --cwd "$PACKAGE_ROOT" prettier --write "$CORE_MESSAGES_DIR/messages.json" + yarn --cwd "$PACKAGE_ROOT" prettier --write "$PACKAGE_ROOT/src/types/messages.ts" else - echo "⚠️ firmware submodule not found at $SRC" + echo "⚠️ firmware submodule not found at $SRC_PATH" echo " Skipping Pro1 protobuf build. To enable:" echo " git submodule update --init submodules/firmware" fi diff --git a/submodules/firmware-pro2 b/submodules/firmware-pro2 index 504b8752b..dd7f8004d 160000 --- a/submodules/firmware-pro2 +++ b/submodules/firmware-pro2 @@ -1 +1 @@ -Subproject commit 504b8752bba68c289769c320cf27d1a7bfcbfed4 +Subproject commit dd7f8004d33cc30fab0145777cb6d84286ae3464 diff --git a/vercel.json b/vercel.json new file mode 100644 index 000000000..8c1f79a27 --- /dev/null +++ b/vercel.json @@ -0,0 +1,8 @@ +{ + "version": 2, + "name": "onekey-hardware-playground", + "installCommand": "yarn install", + "buildCommand": "yarn build", + "outputDirectory": "packages/connect-examples/expo-playground/dist", + "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] +} From 02a676cd93408f7b553333e743f54a1c97d4a6ef Mon Sep 17 00:00:00 2001 From: wabicai Date: Thu, 7 May 2026 20:59:36 +0800 Subject: [PATCH 14/73] feat: align pro2 protocol v2 playground --- .../expo-example/src/data/pro2.ts | 358 ++++ .../src/views/ApiPayloadScreen.tsx | 89 +- .../common/DeviceInteractionArea.tsx | 62 +- .../app/components/common/ExecutionPanel.tsx | 153 +- .../app/components/common/MethodExecutor.tsx | 639 +++++- .../app/components/common/ParameterInput.tsx | 18 +- .../app/components/common/UnifiedLogger.tsx | 43 +- .../app/components/providers/SDKProvider.tsx | 24 +- .../app/components/sidebar.tsx | 4 +- .../app/data/methods/device.ts | 254 +++ .../app/data/methods/firmware.ts | 416 +++- .../app/hooks/useHardwareMethodExecution.ts | 62 +- .../expo-playground/app/i18n/locales/en.ts | 23 +- .../expo-playground/app/i18n/locales/zh.ts | 18 + .../expo-playground/app/routes/pro2-debug.tsx | 1804 +++++------------ .../app/utils/parameterUtils.ts | 2 + .../expo-playground/public/webusb_test.html | 40 +- packages/core/__tests__/protocol-v2.test.ts | 122 +- packages/core/src/api/DirList.ts | 7 +- packages/core/src/api/FileRead.ts | 124 +- packages/core/src/api/FileWrite.ts | 131 +- packages/core/src/api/FirmwareUpdateV3.ts | 10 +- packages/core/src/api/index.ts | 17 + .../src/api/protocol-v2/DevFirmwareUpdate.ts | 29 + .../src/api/protocol-v2/DevGetDeviceInfo.ts | 35 + .../protocol-v2/DevGetFirmwareUpdateStatus.ts | 18 + .../core/src/api/protocol-v2/DevReboot.ts | 22 + .../protocol-v2/FactoryDeviceInfoSettings.ts | 27 + .../api/protocol-v2/FactoryGetDeviceInfo.ts | 18 + .../protocol-v2/FilesystemFixPermission.ts | 14 + .../src/api/protocol-v2/FilesystemFormat.ts | 14 + .../src/api/protocol-v2/GetProtoVersion.ts | 14 + packages/core/src/api/protocol-v2/Ping.ts | 16 + packages/core/src/api/protocol-v2/helpers.ts | 135 ++ packages/core/src/core/index.ts | 3 +- packages/core/src/device/Device.ts | 18 +- packages/core/src/device/DeviceConnector.ts | 32 +- packages/core/src/inject.ts | 28 + packages/core/src/types/api/index.ts | 34 + packages/core/src/types/api/protocolV2.ts | 138 +- packages/core/src/types/params.ts | 7 + .../hd-transport-react-native/src/index.ts | 130 +- .../hd-transport-react-native/src/types.ts | 3 + .../src/electron-auto-ble-transport.ts | 127 +- .../hd-transport-web-device/src/webusb.ts | 234 ++- .../__tests__/protocol-v2.test.js | 15 +- packages/hd-transport/src/constants.ts | 4 +- packages/hd-transport/src/index.ts | 2 +- packages/hd-transport/src/protocol-session.ts | 25 + .../src/serialization/protocols.ts | 12 +- packages/hd-transport/src/types/transport.ts | 1 + packages/shared/src/constants.ts | 8 + 52 files changed, 3833 insertions(+), 1750 deletions(-) create mode 100644 packages/connect-examples/expo-example/src/data/pro2.ts create mode 100644 packages/core/src/api/protocol-v2/DevFirmwareUpdate.ts create mode 100644 packages/core/src/api/protocol-v2/DevGetDeviceInfo.ts create mode 100644 packages/core/src/api/protocol-v2/DevGetFirmwareUpdateStatus.ts create mode 100644 packages/core/src/api/protocol-v2/DevReboot.ts create mode 100644 packages/core/src/api/protocol-v2/FactoryDeviceInfoSettings.ts create mode 100644 packages/core/src/api/protocol-v2/FactoryGetDeviceInfo.ts create mode 100644 packages/core/src/api/protocol-v2/FilesystemFixPermission.ts create mode 100644 packages/core/src/api/protocol-v2/FilesystemFormat.ts create mode 100644 packages/core/src/api/protocol-v2/GetProtoVersion.ts create mode 100644 packages/core/src/api/protocol-v2/Ping.ts create mode 100644 packages/core/src/api/protocol-v2/helpers.ts diff --git a/packages/connect-examples/expo-example/src/data/pro2.ts b/packages/connect-examples/expo-example/src/data/pro2.ts new file mode 100644 index 000000000..361607171 --- /dev/null +++ b/packages/connect-examples/expo-example/src/data/pro2.ts @@ -0,0 +1,358 @@ +import { type PlaygroundProps } from '../components/Playground'; + +const api: PlaygroundProps[] = [ + { + method: 'getProtoVersion', + description: 'Get Protocol V2 protobuf version.', + noDeviceIdReq: true, + }, + { + method: 'ping', + description: 'Send Protocol V2 Ping.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Ping', + value: { + message: 'Hello from expo-example!', + }, + }, + ], + }, + { + method: 'devGetDeviceInfo', + description: 'Get Protocol V2 device information.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'All info', + value: { + targetHw: true, + targetFw: true, + targetBt: true, + targetSe1: true, + targetSe2: true, + targetSe3: true, + targetSe4: true, + targetStatus: true, + includeVersion: true, + includeBuildId: true, + includeHash: false, + includeSpecific: true, + }, + }, + { + title: 'Custom targets', + value: { + targets: { + hw: true, + fw: true, + bt: true, + se1: true, + se2: true, + se3: true, + se4: true, + status: true, + }, + types: { + version: true, + build_id: true, + hash: false, + specific: true, + }, + }, + }, + ], + }, + { + method: 'devReboot', + description: 'Reboot Protocol V2 device.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Normal', + value: { + rebootType: 0, + }, + }, + { + title: 'Boardloader', + value: { + rebootType: 1, + }, + }, + { + title: 'Bootloader', + value: { + rebootType: 2, + }, + }, + ], + }, + { + method: 'factoryGetDeviceInfo', + description: 'Get factory device information.', + noDeviceIdReq: true, + }, + { + method: 'factoryDeviceInfoSettings', + description: 'Set factory device information.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Factory settings', + value: { + serial_no: '', + cpu_info: '', + pre_firmware: '', + }, + }, + ], + }, + { + method: 'devFirmwareUpdate', + description: 'Install Protocol V2 firmware target from device filesystem path.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Main app', + value: { + targetId: 0, + path: 'vol0:firmware.bin', + }, + }, + { + title: 'Multiple targets', + value: { + targets: [ + { + target_id: 0, + path: 'vol0:firmware.bin', + }, + ], + }, + }, + ], + }, + { + method: 'devGetFirmwareUpdateStatus', + description: 'Get Protocol V2 firmware update status.', + noDeviceIdReq: true, + }, + { + method: 'filesystemFixPermission', + description: 'Fix Protocol V2 filesystem permission.', + noDeviceIdReq: true, + }, + { + method: 'filesystemFormat', + description: 'Format Protocol V2 filesystem.', + noDeviceIdReq: true, + }, + { + method: 'filesystemPathInfoQuery', + description: 'Query Protocol V2 filesystem path info.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Path info', + value: { + path: 'vol0:firmware.bin', + }, + }, + ], + }, + { + method: 'filesystemDirList', + description: 'List Protocol V2 filesystem directory.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Root', + value: { + path: 'vol0:', + depth: 0, + }, + }, + ], + }, + { + method: 'filesystemDirMake', + description: 'Create Protocol V2 filesystem directory.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Make dir', + value: { + path: 'vol0:test_dir', + }, + }, + ], + }, + { + method: 'filesystemDirRemove', + description: 'Remove Protocol V2 filesystem directory.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Remove dir', + value: { + path: 'vol0:test_dir', + }, + }, + ], + }, + { + method: 'filesystemFileRead', + description: 'Read a Protocol V2 filesystem file chunk.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Read chunk', + value: { + path: 'vol0:test.bin', + offset: 0, + totalSize: 0, + chunkLen: 1400, + uiPercentage: 0, + }, + }, + ], + }, + { + method: 'filesystemFileWrite', + description: 'Write a Protocol V2 filesystem file chunk.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Write text', + value: { + path: 'vol0:test.txt', + offset: 0, + totalSize: 23, + data: 'Hello from expo-example', + overwrite: true, + append: false, + uiPercentage: 0, + }, + }, + ], + }, + { + method: 'filesystemFileDelete', + description: 'Delete a Protocol V2 filesystem file.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Delete file', + value: { + path: 'vol0:test.txt', + }, + }, + ], + }, + { + method: 'pathInfo', + description: 'Query Protocol V2 filesystem path info by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Path info', + value: { + path: 'vol0:firmware.bin', + }, + }, + ], + }, + { + method: 'dirList', + description: 'List Protocol V2 filesystem directory by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Root', + value: { + path: 'vol0:', + depth: 0, + }, + }, + ], + }, + { + method: 'dirMake', + description: 'Create Protocol V2 filesystem directory by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Make dir', + value: { + path: 'vol0:test_dir', + }, + }, + ], + }, + { + method: 'dirRemove', + description: 'Remove Protocol V2 filesystem directory by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Remove dir', + value: { + path: 'vol0:test_dir', + }, + }, + ], + }, + { + method: 'fileRead', + description: 'Read a Protocol V2 filesystem file chunk by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Read chunk', + value: { + path: 'vol0:test.bin', + offset: 0, + totalSize: 0, + chunkLen: 1400, + uiPercentage: 0, + }, + }, + ], + }, + { + method: 'fileWrite', + description: 'Write a Protocol V2 filesystem file chunk by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Write text', + value: { + path: 'vol0:test.txt', + offset: 0, + totalSize: 23, + data: 'Hello from expo-example', + overwrite: true, + append: false, + uiPercentage: 0, + }, + }, + ], + }, + { + method: 'fileDelete', + description: 'Delete a Protocol V2 filesystem file by short alias.', + noDeviceIdReq: true, + presupposes: [ + { + title: 'Delete file', + value: { + path: 'vol0:test.txt', + }, + }, + ], + }, +]; + +export default api; diff --git a/packages/connect-examples/expo-example/src/views/ApiPayloadScreen.tsx b/packages/connect-examples/expo-example/src/views/ApiPayloadScreen.tsx index 77607ba7c..5517066c8 100644 --- a/packages/connect-examples/expo-example/src/views/ApiPayloadScreen.tsx +++ b/packages/connect-examples/expo-example/src/views/ApiPayloadScreen.tsx @@ -1,7 +1,6 @@ -import React, { memo, useEffect, useMemo, useState } from 'react'; +import React, { memo, useCallback, useMemo, useState } from 'react'; import { FlatList, Platform } from 'react-native'; -import { Stack, YStack } from 'tamagui'; -import { useIntl } from 'react-intl'; +import { Stack, Text, XStack, YStack } from 'tamagui'; import PageView from '../components/ui/Page'; import HandleSDKEvents from '../components/HandleSDKEvents'; @@ -15,6 +14,7 @@ import { CollapsibleSection } from '../components/CollapsibleSection'; import Playground from '../components/Playground'; import PanelView from '../components/ui/Panel'; import { useMedia } from '../provider/MediaProvider'; +import { Button } from '../components/ui/Button'; import type { PlaygroundProps as ApiPayloadProps } from '../components/Playground'; @@ -150,6 +150,15 @@ const playgroundConfig = [ }, ]; +const pro2PlaygroundConfig = [ + { + title: 'Pro2 Protocol V2 API', + data: require('../data/pro2').default, + }, +]; + +type PayloadTab = 'all' | 'pro2'; + interface ApiPayloadItem { title: string; data: Array; @@ -195,29 +204,57 @@ const PayloadStack = memo(({ data }: { data: React.JSX.IntrinsicAttributes & Api }); PayloadStack.displayName = 'PayloadStack'; -const ApiPayload = () => ( - - - - - - - - } - keyExtractor={item => item.title} - initialNumToRender={5} - maxToRenderPerBatch={3} - /> - - - - - - - -); +const ApiPayload = () => { + const [activeTab, setActiveTab] = useState('all'); + const payloadConfig = activeTab === 'pro2' ? pro2PlaygroundConfig : playgroundConfig; + + const renderPayloadTabs = useCallback( + () => ( + + {( + [ + { key: 'all', label: 'All API' }, + { key: 'pro2', label: 'Pro2' }, + ] as Array<{ key: PayloadTab; label: string }> + ).map(tab => ( + + ))} + + ), + [activeTab] + ); + + return ( + + + + + + + + } + keyExtractor={item => item.title} + initialNumToRender={5} + maxToRenderPerBatch={3} + /> + + + + + + + + ); +}; export default function ApiPayloadScreen() { return ( diff --git a/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx b/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx index 1382a0214..59a082194 100644 --- a/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/DeviceInteractionArea.tsx @@ -48,6 +48,8 @@ interface DeviceInteractionAreaProps { firmwareVersions?: FirmwareVersionInfo | null; // 添加当前设备信息 currentDevice?: DeviceInfo | null; + title?: string | null; + compact?: boolean; } const DeviceInteractionArea: React.FC = ({ @@ -61,8 +63,12 @@ const DeviceInteractionArea: React.FC = ({ firmwareProgress, firmwareVersions, currentDevice, + title, + compact = false, }) => { const { t } = useTranslation(); + const panelTitle = + title === undefined ? t('components.methodExecutor.expectedUserExperience') : title; // 获取状态配置 const getStatusConfig = () => { @@ -160,15 +166,23 @@ const DeviceInteractionArea: React.FC = ({ return ( - - - {t('components.methodExecutor.expectedUserExperience')} - - - + {panelTitle && ( + + + {panelTitle} + + + )} +
{/* 设备展示区域 - 占用更多空间 */} -
+
{status === 'success' ? (
= ({ />
) : deviceAction ? ( -
+
= ({ ) : (
{/* 设备图片或默认图标 */} -
+
{currentDevice ? ( /* 显示真实设备图片 */ -
+
{`OneKey = ({
) : ( /* 默认设备图标 */ -
+
{/* 屏幕区域 */}
@@ -225,11 +247,11 @@ const DeviceInteractionArea: React.FC = ({
{/* 设备信息 */} -
-

+
+

{currentDevice ? `OneKey ${currentDevice.deviceType || 'Device'}` : ''}

-

+

{status === 'idle' ? currentDevice ? t('components.methodExecutor.deviceConnected') @@ -278,11 +300,13 @@ const DeviceInteractionArea: React.FC = ({ )} {/* 执行控制按钮 - 并排布局,恢复文字 */} -

+
- - - {!isEditing ? null : ( + {showRequestParameters && ( + + +
+ + + {t('components.executionPanel.requestParameters')} + +
+ - )} + + {!isEditing ? null : ( + + )} +
-
- - {!isParamsCollapsed && ( - - - - )} - + + {!isParamsCollapsed && ( + + + + )} + + )} {/* 下部:执行日志区域 - 占据剩余空间 */} -
- -
+ {showLogs && ( +
+ +
+ )}
); }; diff --git a/packages/connect-examples/expo-playground/app/components/common/MethodExecutor.tsx b/packages/connect-examples/expo-playground/app/components/common/MethodExecutor.tsx index b4a453179..3e033522f 100644 --- a/packages/connect-examples/expo-playground/app/components/common/MethodExecutor.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/MethodExecutor.tsx @@ -1,5 +1,6 @@ import React, { useEffect, useCallback, useState, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; +import { BarChart3, Clock, Play, RotateCcw, Terminal } from 'lucide-react'; import { useToast } from '../../hooks/use-toast'; import { useMethodParameters } from '../../hooks/useMethodParameters'; import { useMethodExecution } from '../../hooks/useMethodExecution'; @@ -14,6 +15,10 @@ import type { CommonParametersState } from '../../store/hardwareStore'; import ParameterInput from './ParameterInput'; import DeviceInteractionArea from './DeviceInteractionArea'; import ExecutionPanel from './ExecutionPanel'; +import { Badge } from '../ui/Badge'; +import { Button } from '../ui/Button'; +import { Card, CardContent } from '../ui/Card'; +import type { UnifiedLogEntry } from './UnifiedLogger'; interface MethodExecutorProps { methodConfig: UnifiedMethodConfig; @@ -22,6 +27,9 @@ interface MethodExecutorProps { onError?: (error: string) => void; className?: string; type?: 'standard' | 'firmware'; + devicePanelTitle?: string | null; + layout?: 'default' | 'debug-first'; + debugPanel?: React.ReactNode; } interface FirmwareVersionInfo { @@ -30,6 +38,472 @@ interface FirmwareVersionInfo { bleVersion?: string; } +type DebugLogRecord = Record; + +function getLogRecord(log: UnifiedLogEntry): DebugLogRecord { + const data = log.data || log.content; + return data && typeof data === 'object' && !Array.isArray(data) + ? (data as DebugLogRecord) + : {}; +} + +function getLogTimestamp(log: UnifiedLogEntry): Date { + return typeof log.timestamp === 'string' ? new Date(log.timestamp) : log.timestamp; +} + +function formatLogTime(log: UnifiedLogEntry): string { + return getLogTimestamp(log).toLocaleTimeString(); +} + +function formatBytes(value: unknown): string { + const bytes = Number(value); + if (!Number.isFinite(bytes)) return '-'; + if (bytes < 1024) return `${bytes} B`; + if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`; + return `${(bytes / (1024 * 1024)).toFixed(2)} MB`; +} + +function formatDuration(ms: number): string { + if (!Number.isFinite(ms) || ms < 0) return '-'; + if (ms < 1000) return `${Math.round(ms)} ms`; + return `${(ms / 1000).toFixed(2)} s`; +} + +function formatRate(bytes: number, ms: number): string { + if (!Number.isFinite(bytes) || bytes <= 0 || !Number.isFinite(ms) || ms <= 0) return '-'; + return `${formatBytes((bytes / ms) * 1000)}/s`; +} + +const LOG_HEX_PREVIEW_BYTES = 24; +const LOG_HEX_PREVIEW_CHARS = LOG_HEX_PREVIEW_BYTES * 2; +const COMPACT_HEX_RE = /\b[0-9a-fA-F]{64,}\b/g; +const SPACED_HEX_RE = /(?:\b[0-9a-fA-F]{2}\b(?:\s+|$)){25,}/g; + +function truncateCompactHex(value: string): string { + return value.replace(COMPACT_HEX_RE, match => { + const totalBytes = Math.floor(match.length / 2); + return `${match.slice(0, LOG_HEX_PREVIEW_CHARS)}...(${totalBytes} bytes)`; + }); +} + +function truncateSpacedHex(value: string): string { + return value.replace(SPACED_HEX_RE, match => { + const bytes = match.trim().split(/\s+/); + return `${bytes.slice(0, LOG_HEX_PREVIEW_BYTES).join(' ')}...(${bytes.length} bytes)`; + }); +} + +function formatRawLogValue(value: unknown): string { + return truncateSpacedHex(truncateCompactHex(formatInlineValue(value, 2))); +} + +function formatRawLogText(value: string): string { + return truncateSpacedHex(truncateCompactHex(value)); +} + +function getLogTimeMs(log: UnifiedLogEntry): number { + return getLogTimestamp(log).getTime(); +} + +function getByteSize(value: unknown): number | undefined { + if (value instanceof ArrayBuffer) return value.byteLength; + if (ArrayBuffer.isView(value)) return value.byteLength; + if (typeof Blob !== 'undefined' && value instanceof Blob) return value.size; + if (typeof value === 'string') return new TextEncoder().encode(value).byteLength; + return undefined; +} + +function getNumberField(source: unknown, field: string): number | undefined { + if (!source || typeof source !== 'object') return undefined; + const value = (source as Record)[field]; + const numeric = Number(value); + return Number.isFinite(numeric) && numeric > 0 ? numeric : undefined; +} + +function getUploadBytesFromResult(result: unknown): number | undefined { + if (!result || typeof result !== 'object') return undefined; + const record = result as Record; + const data = record.data && typeof record.data === 'object' ? record.data : record; + return getNumberField(data, 'total_size') ?? getNumberField(data, 'processed_byte'); +} + +function isUploadMethod(method: string): boolean { + return method === 'fileWrite' || method === 'filesystemFileWrite'; +} + +function getUploadBytesFromRequestParameters(params: Record): number | undefined { + return ( + getByteSize(params.data) ?? + getNumberField(params, 'data_size') ?? + getNumberField(params, 'totalSize') ?? + getNumberField(params, 'total_size') + ); +} + +function summarizeLogValue(value: unknown, depth = 0, maxDepth = 5): unknown { + if (typeof value === 'bigint') return value.toString(); + if (value === undefined || value === null || typeof value !== 'object') return value; + + if (value instanceof ArrayBuffer) return `<${formatBytes(value.byteLength)}>`; + if (ArrayBuffer.isView(value)) return `<${formatBytes(value.byteLength)}>`; + if (typeof Blob !== 'undefined' && value instanceof Blob) { + const fileName = 'name' in value && typeof value.name === 'string' ? value.name : 'Blob'; + return `${fileName} (${formatBytes(value.size)})`; + } + if (Array.isArray(value)) { + return depth >= maxDepth + ? `[${value.length} items]` + : value.map(item => summarizeLogValue(item, depth + 1, maxDepth)); + } + if (value instanceof Date) return value.toISOString(); + if (depth >= maxDepth) return '[Object]'; + + return Object.fromEntries( + Object.entries(value as Record).map(([key, item]) => [ + key, + summarizeLogValue(item, depth + 1, maxDepth), + ]) + ); +} + +function formatInlineValue(value: unknown, maxDepth = 3): string { + if (value === undefined || value === null || value === '') return '-'; + if (typeof value === 'string') return value; + if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') { + return String(value); + } + + try { + if (value && typeof value === 'object' && !Array.isArray(value)) { + const summary = summarizeLogValue(value, 0, maxDepth); + return typeof summary === 'string' ? summary : JSON.stringify(summary); + } + return JSON.stringify(summarizeLogValue(value, 0, maxDepth)); + } catch { + return String(value); + } +} + +function formatBlockValue(value: unknown): string { + if (value === undefined || value === null || value === '') return '-'; + if (typeof value === 'string') return value; + if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') { + return String(value); + } + + try { + const summary = summarizeLogValue(value, 0, 8); + return typeof summary === 'string' ? summary : JSON.stringify(summary, null, 2); + } catch { + return formatInlineValue(value, 5); + } +} + +function getMethodFromLog(log: UnifiedLogEntry, record: DebugLogRecord): string { + if (typeof record.method === 'string') return record.method; + + const title = log.title || log.message || ''; + const match = title.match(/(?:method:|successful:|failed:|exception:)\s*([A-Za-z0-9_]+)/); + return match?.[1] || title || 'Command'; +} + +type CommandStatusEntry = { + id: string; + method: string; + params: Array<{ key: string; value: unknown; tone?: 'success' | 'error' | 'accent' }>; + result?: { value: unknown; tone: 'success' | 'error' | 'accent' }; + startedAt: number; + time: string; + uploadBytes?: number; +}; + +function buildCommandStatusEntries(logs: UnifiedLogEntry[]) { + const entries: CommandStatusEntry[] = []; + + logs.forEach(log => { + const title = log.title || log.message || ''; + const record = getLogRecord(log); + const method = getMethodFromLog(log, record); + + if (title.includes('Pro2 demo protocol trace')) { + const requestRecord = + record.request_parameters && + typeof record.request_parameters === 'object' && + !Array.isArray(record.request_parameters) + ? (record.request_parameters as Record) + : undefined; + const requestParameters = + requestRecord !== undefined + ? Object.entries(requestRecord) + .filter(([key]) => !(isUploadMethod(method) && key === 'data')) + .map(([key, value]) => ({ key, value })) + : []; + const uploadBytes = + isUploadMethod(method) && requestRecord + ? getUploadBytesFromRequestParameters(requestRecord) + : undefined; + + entries.push({ + id: log.id, + method, + params: [ + ...requestParameters, + { key: 'TX msg_type', value: record.tx_msg_type, tone: 'accent' }, + { key: 'TX payload', value: record.tx_payload }, + ], + result: { value: 'Sending...', tone: 'accent' }, + startedAt: getLogTimeMs(log), + time: formatLogTime(log), + uploadBytes, + }); + return; + } + + if (title.includes('Pro2 decoded response')) { + const target = [...entries] + .reverse() + .find(entry => entry.method === method && entry.result?.value === 'Sending...'); + const resultValue = + record.decoded_result !== undefined + ? record.decoded_result + : record.decoded ?? 'Decoded response'; + const finishedAt = getLogTimeMs(log); + + if (target) { + target.params.push( + { key: 'RX msg_type', value: record.rx_msg_type, tone: 'success' }, + { key: 'RX payload', value: record.rx_payload, tone: 'success' } + ); + if (isUploadMethod(method)) { + const uploadBytes = target.uploadBytes ?? getUploadBytesFromResult(resultValue); + const durationMs = finishedAt - target.startedAt; + target.params.push( + { key: 'Duration', value: formatDuration(durationMs), tone: 'success' }, + { key: 'Uploaded', value: formatBytes(uploadBytes), tone: 'success' }, + { + key: 'Rate', + value: uploadBytes ? formatRate(uploadBytes, durationMs) : '-', + tone: 'success', + } + ); + } + target.result = { value: resultValue, tone: 'success' }; + target.time = formatLogTime(log); + return; + } + + entries.push({ + id: log.id, + method, + params: [ + { key: 'RX msg_type', value: record.rx_msg_type, tone: 'success' }, + { key: 'RX payload', value: record.rx_payload, tone: 'success' }, + ], + result: { value: resultValue, tone: 'success' }, + startedAt: finishedAt, + time: formatLogTime(log), + }); + return; + } + + if ( + title.includes('Hardware API call failed') || + title.includes('Hardware API call exception') || + log.type === 'error' + ) { + entries.push({ + id: log.id, + method, + params: [{ key: 'error', value: record.error || record.originalError || title }], + result: { value: formatInlineValue(record.error || title), tone: 'error' }, + startedAt: getLogTimeMs(log), + time: formatLogTime(log), + }); + return; + } + + // 成功态由 Pro2 decoded response 合并到同一条命令状态里,避免状态区重复刷屏。 + }); + + return entries.reverse().slice(0, 20); +} + +function buildRawLogLines(logs: UnifiedLogEntry[]) { + return [...logs].reverse().flatMap(log => { + const title = log.title || log.message || ''; + const record = getLogRecord(log); + const time = formatLogTime(log); + + if (title.includes('Pro2 demo protocol trace')) { + return [ + { + id: `${log.id}-tx`, + tone: 'tx' as const, + text: `[${time}] TX msg_type: ${record.tx_msg_type}`, + }, + { + id: `${log.id}-tx-payload`, + tone: 'tx' as const, + text: `[${time}] TX payload: ${formatRawLogValue(record.tx_payload)}`, + }, + ]; + } + + if (title.includes('Pro2 decoded response')) { + return [ + { + id: `${log.id}-rx`, + tone: 'rx' as const, + text: `[${time}] RX msg_type: ${record.rx_msg_type}`, + }, + { + id: `${log.id}-rx-payload`, + tone: 'rx' as const, + text: `[${time}] RX payload: ${formatRawLogValue(record.rx_payload)}`, + }, + { + id: `${log.id}-decoded`, + tone: 'success' as const, + text: `[${time}] Decoded:\n${formatRawLogText( + formatBlockValue(record.decoded_result ?? record.decoded) + )}`, + }, + ]; + } + + if (title.includes('SDK debug log') && typeof record.message === 'string') { + return [ + { + id: log.id, + tone: 'info' as const, + text: `[${time}] ${formatRawLogText(record.message)}`, + }, + ]; + } + + const tone = log.type === 'error' ? 'error' : log.type === 'response' ? 'success' : 'info'; + return [{ id: log.id, tone, text: `[${time}] ${title}` }]; + }); +} + +function toneClassName(tone?: 'success' | 'error' | 'accent' | 'tx' | 'rx' | 'info') { + switch (tone) { + case 'success': + return 'text-emerald-400'; + case 'error': + return 'text-red-400'; + case 'accent': + case 'tx': + return 'text-cyan-300'; + case 'rx': + return 'text-sky-400'; + case 'info': + default: + return 'text-amber-300'; + } +} + +function Pro2DemoConsole({ + logs, + onClearLogs, +}: { + logs: UnifiedLogEntry[]; + onClearLogs: () => void; +}) { + const commandEntries = buildCommandStatusEntries(logs); + const rawLines = buildRawLogLines(logs); + + return ( +
+ + +
+ +

Command Status

+
+
+ {commandEntries.length === 0 ? ( +
No command status yet.
+ ) : ( +
+ {commandEntries.map(entry => ( +
+
+ {entry.method} +
+
+ {entry.params.map(param => ( + + {param.key}: + + {formatInlineValue(param.value)} + + + ))} +
+ {entry.result ? ( +
+ Result: +
+                          {formatBlockValue(entry.result.value)}
+                        
+
+ ) : null} +
{entry.time}
+
+ ))} +
+ )} +
+
+
+ + + +
+
+ +

Log

+
+ +
+
+ {rawLines.length === 0 ? ( +
No logs yet.
+ ) : ( +
+ {rawLines.map(line => ( +
+ {line.text} +
+ ))} +
+ )} +
+
+
+
+ ); +} + function getFirmwareVersionsFromResult(result: unknown): FirmwareVersionInfo | null { if (!result || typeof result !== 'object') return null; const data = (result as { firmwareVersions?: unknown }).firmwareVersions; @@ -58,6 +532,9 @@ const MethodExecutor: React.FC = ({ onError, className = '', type = 'standard', + devicePanelTitle, + layout = 'default', + debugPanel, }) => { const { toast } = useToast(); const { t } = useTranslation(); @@ -249,6 +726,146 @@ const MethodExecutor: React.FC = ({ [setParameter, setMethodParameters] ); + const isExecutionDisabled = status === 'loading' || status === 'device-interaction'; + + const renderDeviceArea = (compact = false) => ( + + ); + + const renderExecutionPanel = ({ + showRequestParameters = true, + showLogs = true, + defaultParamsCollapsed = false, + compactLogs = false, + className: panelClassName = 'h-full', + }: { + showRequestParameters?: boolean; + showLogs?: boolean; + defaultParamsCollapsed?: boolean; + compactLogs?: boolean; + className?: string; + } = {}) => ( + + ); + + const getDebugStatusText = () => { + switch (status) { + case 'loading': + return t('components.methodExecutor.executing'); + case 'device-interaction': + return t('deviceOperations.deviceInstructions'); + case 'success': + return t('components.methodExecutor.executionSuccess'); + case 'error': + return t('components.methodExecutor.executionFailed'); + default: + return t('components.methodExecutor.waitingExecution'); + } + }; + + if (layout === 'debug-first') { + return ( +
+ + +
+
+
+ Current command + + {methodConfig.method} + +
+
+ + {getDebugStatusText()} + + + {currentDevice ? currentDevice.connectId : 'No device'} + +
+
+ +
+ + +
+
+ + +
+
+ + {debugPanel ?
{debugPanel}
: null} + + +
+ ); + } + return (
{/* 参数输入区域 - 紧凑布局 */} @@ -266,30 +883,12 @@ const MethodExecutor: React.FC = ({
{/* 左侧:设备交互动效 */}
- + {renderDeviceArea()}
{/* 右侧:执行面板 */}
- + {renderExecutionPanel()}
diff --git a/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx b/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx index b27917ecf..9f3b81dbd 100644 --- a/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/ParameterInput.tsx @@ -18,6 +18,7 @@ interface ParameterInputProps { selectedPreset: string | null; onPresetChange: (presetTitle: string) => void; onParamChange?: (paramName: string, value: unknown) => void; + embedded?: boolean; } // 需要passphrase检查的方法列表 @@ -66,6 +67,7 @@ const ParameterInput: React.FC = ({ selectedPreset, onPresetChange, onParamChange, + embedded = false, }) => { const { t } = useTranslation(); const { @@ -478,9 +480,8 @@ const ParameterInput: React.FC = ({ const commonParams = getCommonParameters(t, methodConfig.method); const hasCommonParams = commonParams.length > 0; - return ( - - + const content = ( +
{/* 优化的紧凑布局 */}
{/* 预设选择器 - 如果有多个预设则显示在顶部 */} @@ -569,6 +570,17 @@ const ParameterInput: React.FC = ({ )} +
+ ); + + if (embedded) { + return content; + } + + return ( + + + {content} ); diff --git a/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx b/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx index 852ae6ee3..10848d926 100644 --- a/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx @@ -43,6 +43,7 @@ interface UnifiedLoggerProps { showFilters?: boolean; showHeader?: boolean; className?: string; + compact?: boolean; externalSearchTerm?: string; externalFilter?: string; } @@ -52,7 +53,8 @@ const SmartContentDisplay: React.FC<{ content: string | Record | null; type: LogType; title: string; -}> = ({ content }) => { + compact?: boolean; +}> = ({ content, compact = false }) => { const [isExpanded, setIsExpanded] = useState(false); const { t } = useTranslation(); @@ -63,7 +65,11 @@ const SmartContentDisplay: React.FC<{ const lines = content.split('\n'); if (lines.length <= 3) { return ( -
+        
           {content}
         
); @@ -73,7 +79,11 @@ const SmartContentDisplay: React.FC<{ return (
-
+        
           {isExpanded ? content : previewContent}
         
-
-

+
+

{log.normalizedTitle}

{log.description && ( -

{log.description}

+

+ {log.description} +

)}
@@ -380,6 +400,7 @@ const UnifiedLogger: React.FC = ({ content={log.normalizedContent} type={log.type} title={log.normalizedTitle} + compact={compact} /> )}

diff --git a/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx b/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx index 8b8fa278b..8ec4b1d0f 100644 --- a/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx +++ b/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useRef, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; -import { CoreApi, UiEvent, UI_REQUEST, UI_RESPONSE } from '@onekeyfe/hd-core'; +import { CoreApi, LOG_EVENT, UiEvent, UI_REQUEST, UI_RESPONSE } from '@onekeyfe/hd-core'; import { useDeviceStore } from '../../store/deviceStore'; import { useHardwareStore } from '../../store/hardwareStore'; @@ -8,7 +8,7 @@ import { submitPin, submitPassphrase } from '../../services/hardwareService'; import { EDeviceType } from '@onekeyfe/hd-shared'; import GlobalDialogManager from '../global/GlobalDialogManager'; import WebUsbAuthorizeDialog from '../global/WebUsbAuthorizeDialog'; -import { logData, logInfo, logError } from '../../utils/logger'; +import { logData, logInfo, logError, logHardware } from '../../utils/logger'; import { SDKUtils } from '../../utils/hardwareInstance'; import { create } from 'zustand'; @@ -61,6 +61,26 @@ export const SDKProvider: React.FC = ({ children }) => { const setupSDKEventListeners = useCallback( (sdkInstance: CoreApi) => { + sdkInstance.on(LOG_EVENT, (message: { payload?: unknown }) => { + const payload = message.payload; + const items = Array.isArray(payload) ? payload : [payload]; + const text = items + .filter(item => item !== undefined && item !== null) + .map(item => (typeof item === 'string' ? item : JSON.stringify(item))) + .join(' '); + + if ( + !text || + !/(ProtocolV2|WebUsbTransport|hd-transport-webusb|DeviceCommands|call-)/.test(text) + ) { + return; + } + + logHardware('SDK debug log', { + message: text, + }); + }); + // 监听SDK UI事件 sdkInstance.on('UI_EVENT', (message: UiEvent) => { const latestCurrentDevice = useDeviceStore.getState().currentDevice; diff --git a/packages/connect-examples/expo-playground/app/components/sidebar.tsx b/packages/connect-examples/expo-playground/app/components/sidebar.tsx index eeded634e..9498e2bb2 100644 --- a/packages/connect-examples/expo-playground/app/components/sidebar.tsx +++ b/packages/connect-examples/expo-playground/app/components/sidebar.tsx @@ -13,7 +13,7 @@ import { } from './ui/sidebar'; import { Badge } from './ui/Badge'; import { Card, CardContent } from './ui/Card'; -import { Link, useLocation , useNavigate } from 'react-router-dom'; +import { Link, useLocation, useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useDeviceStore } from '../store/deviceStore'; import { useTransportPersistence } from '../store/persistenceStore'; @@ -65,7 +65,7 @@ const navigationItems = [ icon: FileText, }, { - title: 'Pro2 Debug', + title: 'common.pro2Debug', url: '/pro2-debug', icon: Usb, }, diff --git a/packages/connect-examples/expo-playground/app/data/methods/device.ts b/packages/connect-examples/expo-playground/app/data/methods/device.ts index 8d159ff37..859d46cea 100644 --- a/packages/connect-examples/expo-playground/app/data/methods/device.ts +++ b/packages/connect-examples/expo-playground/app/data/methods/device.ts @@ -27,6 +27,260 @@ const api: UnifiedMethodConfig[] = [ noDeviceIdReq: true, presets: [], }, + { + method: 'getProtoVersion', + description: 'methodDescriptions.getProtoVersion', + noDeviceIdReq: true, + presets: [], + }, + { + method: 'ping', + description: 'methodDescriptions.ping', + noDeviceIdReq: true, + presets: [ + { + title: 'Protocol V2 ping', + parameters: [ + { + name: 'message', + type: 'string', + required: false, + label: 'Message', + description: 'Message echoed in the Success response', + value: 'Hello from WebUSB!', + }, + ], + }, + ], + }, + { + method: 'devGetDeviceInfo', + description: 'methodDescriptions.devGetDeviceInfo', + noDeviceIdReq: true, + presets: [ + { + title: 'All device info', + parameters: [ + { + name: 'targetHw', + type: 'boolean', + required: false, + label: 'Hardware', + value: true, + }, + { + name: 'targetFw', + type: 'boolean', + required: false, + label: 'Firmware', + value: true, + }, + { + name: 'targetBt', + type: 'boolean', + required: false, + label: 'Bluetooth', + value: true, + }, + { + name: 'targetSe1', + type: 'boolean', + required: false, + label: 'SE1', + value: true, + }, + { + name: 'targetSe2', + type: 'boolean', + required: false, + label: 'SE2', + value: true, + }, + { + name: 'targetSe3', + type: 'boolean', + required: false, + label: 'SE3', + value: true, + }, + { + name: 'targetSe4', + type: 'boolean', + required: false, + label: 'SE4', + value: true, + }, + { + name: 'targetStatus', + type: 'boolean', + required: false, + label: 'Status', + value: true, + }, + { + name: 'includeVersion', + type: 'boolean', + required: false, + label: 'Version', + value: true, + }, + { + name: 'includeBuildId', + type: 'boolean', + required: false, + label: 'Build ID', + value: true, + }, + { + name: 'includeHash', + type: 'boolean', + required: false, + label: 'Hash', + value: false, + }, + { + name: 'includeSpecific', + type: 'boolean', + required: false, + label: 'Specific', + value: true, + }, + ], + }, + { + title: 'Custom targets and types', + parameters: [ + { + name: 'targets', + type: 'textarea', + required: false, + label: 'Targets', + description: 'DevInfoTargets JSON', + value: { + hw: true, + fw: true, + bt: true, + se1: true, + se2: true, + se3: true, + se4: true, + status: true, + }, + }, + { + name: 'types', + type: 'textarea', + required: false, + label: 'Types', + description: 'DevInfoTypes JSON', + value: { + version: true, + build_id: true, + hash: false, + specific: true, + }, + }, + ], + }, + ], + }, + { + method: 'devReboot', + description: 'methodDescriptions.devReboot', + noDeviceIdReq: true, + presets: [ + { + title: 'Normal reboot', + parameters: [ + { + name: 'rebootType', + type: 'select', + required: true, + label: 'Reboot Type', + options: [ + { label: 'Normal', value: '0' }, + { label: 'Boardloader', value: '1' }, + { label: 'Bootloader', value: '2' }, + ], + value: '0', + }, + ], + }, + { + title: 'Reboot to boardloader', + parameters: [ + { + name: 'rebootType', + type: 'select', + required: true, + label: 'Reboot Type', + options: [ + { label: 'Normal', value: '0' }, + { label: 'Boardloader', value: '1' }, + { label: 'Bootloader', value: '2' }, + ], + value: '1', + }, + ], + }, + { + title: 'Reboot to bootloader', + parameters: [ + { + name: 'rebootType', + type: 'select', + required: true, + label: 'Reboot Type', + options: [ + { label: 'Normal', value: '0' }, + { label: 'Boardloader', value: '1' }, + { label: 'Bootloader', value: '2' }, + ], + value: '2', + }, + ], + }, + ], + }, + { + method: 'factoryGetDeviceInfo', + description: 'methodDescriptions.factoryGetDeviceInfo', + noDeviceIdReq: true, + presets: [], + }, + { + method: 'factoryDeviceInfoSettings', + description: 'methodDescriptions.factoryDeviceInfoSettings', + noDeviceIdReq: true, + presets: [ + { + title: 'Set factory device info', + parameters: [ + { + name: 'serial_no', + type: 'string', + required: false, + label: 'Serial No', + value: '', + }, + { + name: 'cpu_info', + type: 'string', + required: false, + label: 'CPU Info', + value: '', + }, + { + name: 'pre_firmware', + type: 'string', + required: false, + label: 'Pre Firmware', + value: '', + }, + ], + }, + ], + }, // === 设备管理 === { diff --git a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts index b59610e48..1e7ed2b92 100644 --- a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts +++ b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts @@ -175,6 +175,67 @@ const api: UnifiedMethodConfig[] = [ }, ], }, + { + method: 'devFirmwareUpdate', + description: 'methodDescriptions.devFirmwareUpdate', + noDeviceIdReq: true, + presets: [ + { + title: 'Install one Protocol V2 target', + parameters: [ + { + name: 'targetId', + type: 'select', + required: true, + label: 'Target', + options: [ + { label: 'Main App', value: '0' }, + { label: 'Main Bootloader', value: '1' }, + { label: 'Bluetooth', value: '2' }, + { label: 'SE1', value: '3' }, + { label: 'SE2', value: '4' }, + { label: 'SE3', value: '5' }, + { label: 'SE4', value: '6' }, + { label: 'Resource', value: '10' }, + ], + value: '0', + }, + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:firmware.bin', + value: 'vol0:firmware.bin', + }, + ], + }, + { + title: 'Install multiple Protocol V2 targets', + parameters: [ + { + name: 'targets', + type: 'textarea', + required: true, + label: 'Targets', + description: 'DevFirmwareTarget JSON array', + value: [ + { + target_id: 0, + path: 'vol0:firmware.bin', + }, + ], + }, + ], + }, + ], + }, + { + method: 'devGetFirmwareUpdateStatus', + description: 'methodDescriptions.devGetFirmwareUpdateStatus', + noDeviceIdReq: true, + presets: [], + }, { method: 'pathInfo', description: 'methodDescriptions.pathInfo', @@ -188,8 +249,8 @@ const api: UnifiedMethodConfig[] = [ type: 'string', required: true, label: 'Path', - placeholder: 'vol1:firmware.bin', - value: 'vol1:firmware.bin', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', }, ], }, @@ -208,8 +269,16 @@ const api: UnifiedMethodConfig[] = [ type: 'string', required: true, label: 'Path', - placeholder: 'vol1:', - value: 'vol1:', + placeholder: 'vol0:', + value: 'vol0:', + }, + { + name: 'depth', + type: 'number', + required: false, + label: 'Depth', + description: 'Recursive depth. 0 means unlimited.', + value: 0, }, ], }, @@ -228,8 +297,8 @@ const api: UnifiedMethodConfig[] = [ type: 'string', required: true, label: 'Path', - placeholder: 'vol1:updates', - value: 'vol1:updates', + placeholder: 'vol0:updates', + value: 'vol0:updates', }, ], }, @@ -248,8 +317,8 @@ const api: UnifiedMethodConfig[] = [ type: 'string', required: true, label: 'Path', - placeholder: 'vol1:updates', - value: 'vol1:updates', + placeholder: 'vol0:updates', + value: 'vol0:updates', }, ], }, @@ -261,28 +330,31 @@ const api: UnifiedMethodConfig[] = [ noDeviceIdReq: true, presets: [ { - title: 'Protocol V2 read file chunk', + title: 'Protocol V2 read file', parameters: [ { name: 'path', type: 'string', required: true, label: 'Path', - placeholder: 'vol1:firmware.bin', - value: 'vol1:firmware.bin', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', }, { name: 'offset', type: 'number', - required: true, - label: 'Offset', + required: false, + label: 'Start Offset', + visible: true, value: 0, }, { name: 'totalSize', type: 'number', - required: true, - label: 'Total Size', + required: false, + label: 'Read Length', + description: '0 reads from the start offset to the end of the file.', + visible: true, value: 0, }, { @@ -290,7 +362,19 @@ const api: UnifiedMethodConfig[] = [ type: 'number', required: false, label: 'Chunk Length', - value: 1400, + validation: { + min: 64, + max: 2048, + }, + visible: true, + value: 512, + }, + { + name: 'uiPercentage', + type: 'number', + required: false, + label: 'UI Percentage', + visible: true, }, ], }, @@ -302,21 +386,22 @@ const api: UnifiedMethodConfig[] = [ noDeviceIdReq: true, presets: [ { - title: 'Protocol V2 write file chunk', + title: 'Protocol V2 upload file', parameters: [ { name: 'path', type: 'string', required: true, label: 'Path', - placeholder: 'vol1:test.bin', - value: 'vol1:test.bin', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', }, { name: 'offset', type: 'number', - required: true, + required: false, label: 'Offset', + visible: true, value: 0, }, { @@ -324,15 +409,28 @@ const api: UnifiedMethodConfig[] = [ type: 'number', required: false, label: 'Total Size', - description: 'Leave 0 to use the selected file size for a single chunk write.', + description: 'Auto-filled from selected file size.', + visible: true, value: 0, }, + { + name: 'chunkSize', + type: 'number', + required: false, + label: 'Chunk Size', + description: 'Upload chunk size. Protocol V2 maximum is 2048 bytes.', + validation: { + min: 64, + max: 2048, + }, + value: 2048, + }, { name: 'data', type: 'file', required: true, label: 'File Data', - description: 'One Protocol V2 chunk. Keep it at 2048 bytes or smaller.', + description: 'Select a full file. SDK splits it into Protocol V2 chunks automatically.', accept: '.bin,.txt,.json', visible: true, editable: true, @@ -342,6 +440,7 @@ const api: UnifiedMethodConfig[] = [ type: 'boolean', required: false, label: 'Overwrite', + visible: true, value: true, }, { @@ -349,8 +448,16 @@ const api: UnifiedMethodConfig[] = [ type: 'boolean', required: false, label: 'Append', + visible: true, value: false, }, + { + name: 'uiPercentage', + type: 'number', + required: false, + label: 'UI Percentage', + visible: true, + }, ], }, ], @@ -368,13 +475,271 @@ const api: UnifiedMethodConfig[] = [ type: 'string', required: true, label: 'Path', - placeholder: 'vol1:test.bin', - value: 'vol1:test.bin', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', }, ], }, ], }, + { + method: 'filesystemFixPermission', + description: 'methodDescriptions.filesystemFixPermission', + noDeviceIdReq: true, + presets: [], + }, + { + method: 'filesystemPathInfoQuery', + description: 'methodDescriptions.filesystemPathInfoQuery', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemPathInfoQuery', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', + }, + ], + }, + ], + }, + { + method: 'filesystemFileRead', + description: 'methodDescriptions.filesystemFileRead', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemFileRead', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', + }, + { + name: 'offset', + type: 'number', + required: false, + label: 'Start Offset', + visible: true, + value: 0, + }, + { + name: 'totalSize', + type: 'number', + required: false, + label: 'Read Length', + description: '0 reads from the start offset to the end of the file.', + visible: true, + value: 0, + }, + { + name: 'chunkLen', + type: 'number', + required: false, + label: 'Chunk Length', + validation: { + min: 64, + max: 2048, + }, + visible: true, + value: 512, + }, + { + name: 'uiPercentage', + type: 'number', + required: false, + label: 'UI Percentage', + visible: true, + }, + ], + }, + ], + }, + { + method: 'filesystemFileWrite', + description: 'methodDescriptions.filesystemFileWrite', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemFileWrite', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', + }, + { + name: 'offset', + type: 'number', + required: false, + label: 'Offset', + visible: true, + value: 0, + }, + { + name: 'totalSize', + type: 'number', + required: false, + label: 'Total Size', + description: 'Auto-filled from selected file size.', + visible: true, + value: 0, + }, + { + name: 'chunkSize', + type: 'number', + required: false, + label: 'Chunk Size', + description: 'Upload chunk size. Protocol V2 maximum is 2048 bytes.', + validation: { + min: 64, + max: 2048, + }, + value: 2048, + }, + { + name: 'data', + type: 'file', + required: true, + label: 'File Data', + description: 'Select a full file. SDK splits it into Protocol V2 chunks automatically.', + accept: '.bin,.txt,.json', + visible: true, + editable: true, + }, + { + name: 'overwrite', + type: 'boolean', + required: false, + label: 'Overwrite', + visible: true, + value: true, + }, + { + name: 'append', + type: 'boolean', + required: false, + label: 'Append', + visible: true, + value: false, + }, + { + name: 'uiPercentage', + type: 'number', + required: false, + label: 'UI Percentage', + visible: true, + }, + ], + }, + ], + }, + { + method: 'filesystemFileDelete', + description: 'methodDescriptions.filesystemFileDelete', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemFileDelete', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:test.bin', + value: 'vol0:test.bin', + }, + ], + }, + ], + }, + { + method: 'filesystemDirList', + description: 'methodDescriptions.filesystemDirList', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemDirList', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:', + value: 'vol0:', + }, + { + name: 'depth', + type: 'number', + required: false, + label: 'Depth', + description: 'Recursive depth. 0 means unlimited.', + value: 0, + }, + ], + }, + ], + }, + { + method: 'filesystemDirMake', + description: 'methodDescriptions.filesystemDirMake', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemDirMake', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:updates', + value: 'vol0:updates', + }, + ], + }, + ], + }, + { + method: 'filesystemDirRemove', + description: 'methodDescriptions.filesystemDirRemove', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemDirRemove', + parameters: [ + { + name: 'path', + type: 'string', + required: true, + label: 'Path', + placeholder: 'vol0:updates', + value: 'vol0:updates', + }, + ], + }, + ], + }, + { + method: 'filesystemFormat', + description: 'methodDescriptions.filesystemFormat', + noDeviceIdReq: true, + presets: [], + }, // === 固件信息检查 === { method: 'checkFirmwareRelease', @@ -436,7 +801,8 @@ const api: UnifiedMethodConfig[] = [ type: 'file', required: false, label: 'Bootloader Binary', - description: 'Upload bootloader binary file (.bin). If not provided, latest will be downloaded automatically.', + description: + 'Upload bootloader binary file (.bin). If not provided, latest will be downloaded automatically.', accept: '.bin', visible: true, editable: true, diff --git a/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts b/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts index c2d2db6a2..e2bd7189d 100644 --- a/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts +++ b/packages/connect-examples/expo-playground/app/hooks/useHardwareMethodExecution.ts @@ -24,12 +24,42 @@ interface FirmwareVersionInfo { const FIRMWARE_UPDATE_METHODS = new Set([ 'firmwareUpdateV2', 'firmwareUpdateV3', + 'devFirmwareUpdate', 'deviceUpdateBootloader', ]); +const PROTOCOL_V2_PATH_METHODS = new Set([ + 'devFirmwareUpdate', + 'pathInfo', + 'dirList', + 'dirMake', + 'dirRemove', + 'fileRead', + 'fileWrite', + 'fileDelete', + 'filesystemPathInfoQuery', + 'filesystemDirList', + 'filesystemDirMake', + 'filesystemDirRemove', + 'filesystemFileRead', + 'filesystemFileWrite', + 'filesystemFileDelete', +]); + +function normalizeProtocolV2Path(path: string): string { + const value = path.trim(); + if (!value || value === '/') return 'vol0:'; + if (value.startsWith('/')) return `vol0:${value.slice(1)}`; + return value; +} + function getProtocolV2FileWriteDataSize(data: unknown): number | undefined { if (data instanceof ArrayBuffer) return data.byteLength; if (ArrayBuffer.isView(data)) return data.byteLength; + if (data && typeof data === 'object' && 'size' in data) { + const size = Number((data as { size?: unknown }).size); + return Number.isFinite(size) ? size : undefined; + } if (typeof data === 'string') return new TextEncoder().encode(data).byteLength; return undefined; } @@ -38,16 +68,36 @@ function normalizeProtocolV2FileParams( method: string, params: Record ): Record { - if (method !== 'fileWrite') return params; + let normalizedParams = params; + + if (PROTOCOL_V2_PATH_METHODS.has(method)) { + normalizedParams = { ...normalizedParams }; + if (typeof normalizedParams.path === 'string') { + normalizedParams.path = normalizeProtocolV2Path(normalizedParams.path); + } + + if (Array.isArray(normalizedParams.targets)) { + normalizedParams.targets = normalizedParams.targets.map(target => { + if (!target || typeof target !== 'object') return target; + const item = target as Record; + return { + ...item, + ...(typeof item.path === 'string' ? { path: normalizeProtocolV2Path(item.path) } : {}), + }; + }); + } + } + + if (method !== 'fileWrite' && method !== 'filesystemFileWrite') return normalizedParams; - const dataSize = getProtocolV2FileWriteDataSize(params.data); - if (!dataSize) return params; + const dataSize = getProtocolV2FileWriteDataSize(normalizedParams.data); + if (!dataSize) return normalizedParams; - const totalSize = Number(params.totalSize); - if (Number.isFinite(totalSize) && totalSize > 0) return params; + const totalSize = Number(normalizedParams.totalSize); + if (Number.isFinite(totalSize) && totalSize > 0) return normalizedParams; return { - ...params, + ...normalizedParams, totalSize: dataSize, }; } diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts index b19a40fa6..ddb227957 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts @@ -28,6 +28,7 @@ export const en = { networks: 'Networks', home: 'Home', emulator: 'Emulator', + pro2Debug: 'Pro2 Debug', navigation: 'Navigation', current: 'Current', toggleTheme: 'Toggle Theme', @@ -312,7 +313,17 @@ export const en = { filecoinGetAddress: 'Get address for your account.', filecoinSignTransaction: 'Sign a transaction with your private key.', firmwareUpdateV2: 'compatible with all devices', - firmwareUpdateV3: 'Protocol V2/Pro one-stop firmware update with progress and final version refresh', + firmwareUpdateV3: + 'Protocol V2/Pro one-stop firmware update with progress and final version refresh', + getProtoVersion: 'Protocol V2 protocol version query', + ping: 'Protocol V2 device liveness test', + devReboot: 'Protocol V2 device reboot', + devGetDeviceInfo: 'Protocol V2 device information query', + devFirmwareUpdate: 'Protocol V2 firmware install trigger', + devGetFirmwareUpdateStatus: 'Protocol V2 firmware install status query', + factoryDeviceInfoSettings: 'Protocol V2 factory-mode device information write', + factoryGetDeviceInfo: 'Protocol V2 factory-mode device information query', + filesystemFixPermission: 'Protocol V2 filesystem permission repair', pathInfo: 'Protocol V2 filesystem path information', dirList: 'Protocol V2 filesystem directory listing', dirMake: 'Protocol V2 filesystem directory creation', @@ -320,6 +331,14 @@ export const en = { fileRead: 'Protocol V2 filesystem file chunk read', fileWrite: 'Protocol V2 filesystem file chunk write', fileDelete: 'Protocol V2 filesystem file deletion', + filesystemPathInfoQuery: 'Protocol V2 raw FilesystemPathInfoQuery', + filesystemFileRead: 'Protocol V2 raw FilesystemFileRead', + filesystemFileWrite: 'Protocol V2 raw FilesystemFileWrite', + filesystemFileDelete: 'Protocol V2 raw FilesystemFileDelete', + filesystemDirList: 'Protocol V2 raw FilesystemDirList', + filesystemDirMake: 'Protocol V2 raw FilesystemDirMake', + filesystemDirRemove: 'Protocol V2 raw FilesystemDirRemove', + filesystemFormat: 'Protocol V2 filesystem format', getFeatures: 'Get features of a device', getLogs: 'Get device logs', getNextU2FCounter: 'Get next U2F counter value', @@ -617,7 +636,7 @@ export const en = { title: 'Authorize WebUSB', description: 'Your device switched to bootloader mode to apply the update. Chrome treats this as a new USB device. Please authorize it to continue the firmware update.', - tip: 'Ensure your device is connected. If the chooser doesn\'t appear, try a different USB port or reconnect the cable.', + tip: "Ensure your device is connected. If the chooser doesn't appear, try a different USB port or reconnect the cable.", selectButton: 'Select Device', selecting: 'Selecting...', troubleshooting: diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts index ce1e79739..536a153bc 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts @@ -28,6 +28,7 @@ export const zh = { networks: '网络', home: '首页', emulator: '模拟器', + pro2Debug: 'Pro2 调试', navigation: '导航', current: '当前', toggleTheme: '切换主题', @@ -304,6 +305,15 @@ export const zh = { filecoinSignTransaction: '使用 Filecoin 私钥签名交易', firmwareUpdateV2: '兼容所有设备', firmwareUpdateV3: 'Protocol V2/Pro 固件升级一条龙,包含进度和完成后的版本刷新', + getProtoVersion: 'Protocol V2 查询协议版本', + ping: 'Protocol V2 设备连通性测试', + devReboot: 'Protocol V2 设备重启', + devGetDeviceInfo: 'Protocol V2 查询设备信息', + devFirmwareUpdate: 'Protocol V2 触发固件安装', + devGetFirmwareUpdateStatus: 'Protocol V2 查询固件安装状态', + factoryDeviceInfoSettings: 'Protocol V2 工厂模式写入设备信息', + factoryGetDeviceInfo: 'Protocol V2 工厂模式查询设备信息', + filesystemFixPermission: 'Protocol V2 文件系统权限修复', pathInfo: 'Protocol V2 文件系统路径信息', dirList: 'Protocol V2 文件系统目录列表', dirMake: 'Protocol V2 文件系统创建目录', @@ -311,6 +321,14 @@ export const zh = { fileRead: 'Protocol V2 文件系统读取文件分片', fileWrite: 'Protocol V2 文件系统写入文件分片', fileDelete: 'Protocol V2 文件系统删除文件', + filesystemPathInfoQuery: 'Protocol V2 原始 FilesystemPathInfoQuery', + filesystemFileRead: 'Protocol V2 原始 FilesystemFileRead', + filesystemFileWrite: 'Protocol V2 原始 FilesystemFileWrite', + filesystemFileDelete: 'Protocol V2 原始 FilesystemFileDelete', + filesystemDirList: 'Protocol V2 原始 FilesystemDirList', + filesystemDirMake: 'Protocol V2 原始 FilesystemDirMake', + filesystemDirRemove: 'Protocol V2 原始 FilesystemDirRemove', + filesystemFormat: 'Protocol V2 文件系统格式化', getFeatures: '获取设备功能信息', getLogs: '获取设备日志', getNextU2FCounter: '获取下一个 U2F 计数器值', diff --git a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx index 20b747f29..168f20627 100644 --- a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx +++ b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx @@ -1,1371 +1,513 @@ -/** - * Pro2 Debug Page - * - * Direct WebUSB communication with OneKey Pro2 device using Proto V0 framing. - * Independent of the main SDK flow — mirrors webusb_test.html but in React. - */ -import { useState, useRef, useCallback, useEffect } from 'react'; +import { useCallback, useMemo, useState } from 'react'; +import { Cpu, FileCode2, FolderOpen, Settings, Zap } from 'lucide-react'; +import { HARDWARE_CONNECT_PROTOCOL } from '@onekeyfe/hd-shared'; +import MethodExecutor from '../components/common/MethodExecutor'; +import { DeviceNotConnectedState } from '../components/common/DeviceNotConnectedState'; import { PageLayout } from '../components/common/PageLayout'; -import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/Card'; +import { Badge } from '../components/ui/Badge'; import { Button } from '../components/ui/Button'; -import { - Usb, - Wifi, - Terminal, - FolderOpen, - RefreshCw, - Send, - Download, - Upload, - Trash2, - ChevronRight, - FolderPlus, - FolderMinus, - FileMinus, - Zap, -} from 'lucide-react'; - -// --------------------------------------------------------------------------- -// CRC8 (init=0x30) and Proto V0 frame building (mirrors hd-transport) -// --------------------------------------------------------------------------- -// CRC-8 lookup table (polynomial=0x5e, init=0x30) — extracted from OneKey Pro2 firmware -const CRC8_TABLE = new Uint8Array([ - 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, - 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, - 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, - 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, - 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, - 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, - 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, - 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, - 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, - 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, - 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, - 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, - 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, - 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, - 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, - 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35, -]); - -function crc8(data: Uint8Array, len: number): number { - let crc = 0x30; - for (let i = 0; i < len; i++) crc = CRC8_TABLE[crc ^ data[i]]; - return crc; -} - -let protoSeq = 0; -function buildProtoV0Frame(payload: Uint8Array | null, packetSrc = 0, router = 0): Uint8Array { - const payloadLen = payload ? payload.length : 0; - const frameLen = payloadLen + 8; - const frame = new Uint8Array(frameLen); - protoSeq = (protoSeq + 1) & 0xff; - if (protoSeq === 0) protoSeq = 1; - frame[0] = 0x5a; - frame[1] = frameLen & 0xff; - frame[2] = (frameLen >> 8) & 0xff; - frame[4] = router & 0xff; - frame[5] = ((packetSrc & 0x0f) << 2); - frame[6] = protoSeq; - frame[3] = crc8(frame, 3); - if (payload && payloadLen > 0) frame.set(payload, 7); - frame[frameLen - 1] = crc8(frame, frameLen - 1); - return frame; -} - -function buildPbFrame(msgType: number, pbPayload: Uint8Array): Uint8Array { - const payload = new Uint8Array(2 + pbPayload.length); - payload[0] = msgType & 0xff; - payload[1] = (msgType >> 8) & 0xff; - payload.set(pbPayload, 2); - return buildProtoV0Frame(payload); -} - -// --------------------------------------------------------------------------- -// Constants -// --------------------------------------------------------------------------- -const PID_PRO2 = 0x53c1; -const VENDOR_ID = 0x1209; - -const PB_MSG_TYPE = { - Ping: 60206, - Success: 60207, - Failure: 60208, - Reboot: 60400, - FixPermission: 60800, - PathInfo: 60801, - PathInfoQuery: 60802, - File: 60803, - FileRead: 60804, - FileWrite: 60805, - FileDelete: 60806, - Dir: 60807, - DirList: 60808, - DirMake: 60809, - DirRemove: 60810, - FirmwareUpdate: 61000, - FirmwareInstallProgress: 61001, -} as const; - -const PB_MSG_NAME: Record = Object.fromEntries( - Object.entries(PB_MSG_TYPE).map(([k, v]) => [v, k]) -); - -const REBOOT_TYPE = { 0: 'Normal', 1: 'Boardloader', 2: 'BootLoader' } as const; - -// --------------------------------------------------------------------------- -// Minimal protobuf encoder/decoder (mirrors webusb_test.html) -// --------------------------------------------------------------------------- -function encodeVarint(value: number): number[] { - const bytes: number[] = []; - while (value > 0x7f) { - bytes.push((value & 0x7f) | 0x80); - value >>>= 7; - } - bytes.push(value & 0x7f); - return bytes; -} - -function encodeString(fieldNum: number, str: string): number[] { - if (!str || str.length === 0) return []; - const strBytes = new TextEncoder().encode(str); - const tag = (fieldNum << 3) | 2; - return [...encodeVarint(tag), ...encodeVarint(strBytes.length), ...strBytes]; -} - -function encodeUint32(fieldNum: number, value: number, required = false): number[] { - if (value === 0 && !required) return []; - const tag = (fieldNum << 3) | 0; - return [...encodeVarint(tag), ...encodeVarint(value)]; -} - -function encodeBool(fieldNum: number, value: boolean): number[] { - const tag = (fieldNum << 3) | 0; - return [...encodeVarint(tag), value ? 1 : 0]; -} - -function encodeBytes(fieldNum: number, bytes: Uint8Array): number[] { - if (!bytes || bytes.length === 0) return []; - const tag = (fieldNum << 3) | 2; - return [...encodeVarint(tag), ...encodeVarint(bytes.length), ...bytes]; -} - -function encodePing(message: string): Uint8Array { - return new Uint8Array(encodeString(1, message)); -} - -function encodePathInfoQuery(path: string): Uint8Array { - return new Uint8Array(encodeString(1, path)); -} - -function encodeDirList(path: string): Uint8Array { - return new Uint8Array(encodeString(1, path)); -} - -function encodeDirMake(path: string): Uint8Array { - return new Uint8Array(encodeString(1, path)); -} - -function encodeDirRemove(path: string): Uint8Array { - return new Uint8Array(encodeString(1, path)); -} - -function encodeFileDelete(path: string): Uint8Array { - return new Uint8Array(encodeString(1, path)); -} - -function encodeFileMsg(path: string, offset: number, totalSize: number, data?: Uint8Array, dataHash?: number): number[] { - const result: number[] = []; - result.push(...encodeString(1, path)); - result.push(...encodeUint32(2, offset, true)); - result.push(...encodeUint32(3, totalSize, true)); - if (data && data.length > 0) result.push(...encodeBytes(4, data)); - if (dataHash !== undefined) result.push(...encodeUint32(5, dataHash)); - return result; -} - -function encodeFileRead(path: string, offset: number, totalSize: number, chunkLen?: number): Uint8Array { - const fileBytes = encodeFileMsg(path, offset, totalSize); - const result: number[] = []; - const tag1 = (1 << 3) | 2; - result.push(...encodeVarint(tag1), ...encodeVarint(fileBytes.length), ...fileBytes); - if (chunkLen != null) result.push(...encodeUint32(2, chunkLen)); - return new Uint8Array(result); -} - -function encodeFileWrite(path: string, offset: number, totalSize: number, data: Uint8Array, overwrite: boolean, append: boolean): Uint8Array { - const fileBytes = encodeFileMsg(path, offset, totalSize, data); - const result: number[] = []; - const tag1 = (1 << 3) | 2; - result.push(...encodeVarint(tag1), ...encodeVarint(fileBytes.length), ...fileBytes); - result.push(...encodeBool(2, overwrite)); - result.push(...encodeBool(3, append)); - return new Uint8Array(result); -} - -function encodeFixPermission(): Uint8Array { - return new Uint8Array([]); -} - -// FirmwareTargetType enum -const FirmwareTargetType = { - TARGET_MAIN_APP: 0, - TARGET_MAIN_BOOT: 1, - TARGET_BLE: 2, - TARGET_SE1: 3, - TARGET_SE2: 4, - TARGET_SE3: 5, - TARGET_SE4: 6, - TARGET_RESOURCE: 10, -} as const; - -const FW_TARGET_LABELS: Record = { - 0: 'Main App', - 1: 'Main Boot', - 2: 'BLE', - 3: 'SE1', - 4: 'SE2', - 5: 'SE3', - 6: 'SE4', - 10: 'Resource', +import { Card, CardContent } from '../components/ui/Card'; +import { useHardwareMethodExecution } from '../hooks/useHardwareMethodExecution'; +import { useDeviceStore } from '../store/deviceStore'; +import { device } from '../data/methods/device'; +import { firmware } from '../data/methods/firmware'; +import { logHardware } from '../utils/logger'; +import type { UnifiedMethodConfig } from '../data/types'; + +const PRO2_METHOD_GROUPS = [ + { + id: 'device', + title: 'Device / Factory', + icon: Cpu, + methods: [ + 'getProtoVersion', + 'ping', + 'devGetDeviceInfo', + 'devReboot', + 'factoryGetDeviceInfo', + 'factoryDeviceInfoSettings', + ], + }, + { + id: 'firmware', + title: 'Firmware', + icon: Zap, + methods: ['devFirmwareUpdate', 'devGetFirmwareUpdateStatus'], + }, + { + id: 'filesystemAliases', + title: 'Filesystem Aliases', + icon: FolderOpen, + methods: ['pathInfo', 'dirList', 'dirMake', 'dirRemove', 'fileRead', 'fileWrite', 'fileDelete'], + }, + { + id: 'filesystemRaw', + title: 'Filesystem Raw Names', + icon: FileCode2, + methods: [ + 'filesystemFixPermission', + 'filesystemFormat', + 'filesystemPathInfoQuery', + 'filesystemDirList', + 'filesystemDirMake', + 'filesystemDirRemove', + 'filesystemFileRead', + 'filesystemFileWrite', + 'filesystemFileDelete', + ], + }, +] as const; + +const DEFAULT_SELECTED_METHOD = 'dirList'; + +const PRO2_METHOD_LABELS: Record = { + getProtoVersion: 'Proto Version', + ping: 'Ping', + devGetDeviceInfo: 'Device Info', + devReboot: 'Reboot', + factoryGetDeviceInfo: 'Factory Info', + factoryDeviceInfoSettings: 'Factory Settings', + devFirmwareUpdate: 'FW Update', + devGetFirmwareUpdateStatus: 'FW Status', + pathInfo: 'Path Info', + dirList: 'Dir List', + dirMake: 'Dir Make', + dirRemove: 'Dir Remove', + fileRead: 'File Read', + fileWrite: 'File Write', + fileDelete: 'File Delete', + filesystemFixPermission: 'Fix Permission', + filesystemFormat: 'Format', + filesystemPathInfoQuery: 'Raw Path Info', + filesystemDirList: 'Raw Dir List', + filesystemDirMake: 'Raw Dir Make', + filesystemDirRemove: 'Raw Dir Remove', + filesystemFileRead: 'Raw File Read', + filesystemFileWrite: 'Raw File Write', + filesystemFileDelete: 'Raw File Delete', }; -// FirmwareTarget { required FirmwareTargetType target_id=1; required string path=2; } -function encodeFirmwareTarget(targetId: number, path: string): number[] { - const result: number[] = []; - result.push(...encodeUint32(1, targetId, true)); - result.push(...encodeString(2, path)); - return result; -} - -// FirmwareUpdate { repeated FirmwareTarget targets=1; optional bool reboot_on_success=2; } -function encodeFirmwareUpdate(targets: Array<{ targetId: number; path: string }>, rebootOnSuccess: boolean | null = null): Uint8Array { - const result: number[] = []; - for (const target of targets) { - const targetBytes = encodeFirmwareTarget(target.targetId, target.path); - const tag1 = (1 << 3) | 2; - result.push(...encodeVarint(tag1), ...encodeVarint(targetBytes.length), ...targetBytes); - } - if (rebootOnSuccess !== null) { - result.push(...encodeBool(2, rebootOnSuccess)); - } - return new Uint8Array(result); -} - -function encodeReboot(rebootType: number): Uint8Array { - return new Uint8Array(encodeUint32(1, rebootType, true)); -} - -// Decoder helpers -function decodeVarintAt(data: Uint8Array, offset: number): { value: number; offset: number } { - let value = 0, shift = 0; - while (offset < data.length) { - const byte = data[offset++]; - value |= (byte & 0x7f) << shift; - if ((byte & 0x80) === 0) break; - shift += 7; - } - return { value, offset }; -} - -function decodeStringSlice(data: Uint8Array, offset: number, len: number): string { - return new TextDecoder().decode(data.slice(offset, offset + len)); -} - -interface DecodedSuccess { message: string } -interface DecodedFailure { code: number; message: string } -interface DecodedFile { path: string; offset: number; totalSize: number; data: Uint8Array | null; dataHash: number | null; processedByte: number | null } -interface DecodedPathInfo { exist: boolean; size: number; year: number; month: number; day: number; hour: number; minute: number; second: number; readonly: boolean; hidden: boolean; system: boolean; archive: boolean; directory: boolean } -interface DecodedDir { path: string; childDirs: string; childFiles: string } - -function decodeSuccess(data: Uint8Array): DecodedSuccess { - let offset = 0, message = ''; - while (offset < data.length) { - const { value: tag, offset: off1 } = decodeVarintAt(data, offset); - offset = off1; - const fieldNum = tag >> 3, wireType = tag & 0x7; - if (fieldNum === 1 && wireType === 2) { - const { value: len, offset: off2 } = decodeVarintAt(data, offset); - message = decodeStringSlice(data, off2, len); - offset = off2 + len; - } else break; - } - return { message }; -} +type MethodWireInfo = { + tx: string; + txPayload?: string; + rx: string; + rxPayload?: string; + decoded: string; +}; -function decodeFailure(data: Uint8Array): DecodedFailure { - let offset = 0, code = 0, message = ''; - while (offset < data.length) { - const { value: tag, offset: off1 } = decodeVarintAt(data, offset); - offset = off1; - const fieldNum = tag >> 3, wireType = tag & 0x7; - if (fieldNum === 1 && wireType === 0) { - const { value: val, offset: off2 } = decodeVarintAt(data, offset); - code = val; offset = off2; - } else if (fieldNum === 2 && wireType === 2) { - const { value: len, offset: off2 } = decodeVarintAt(data, offset); - message = decodeStringSlice(data, off2, len); - offset = off2 + len; - } else break; - } - return { code, message }; -} +const PRO2_DYNAMIC_PAYLOAD = 'msg_type(little-endian) + protobuf(Request Parameters)'; +const PRO2_DYNAMIC_RESPONSE = 'msg_type(little-endian) + protobuf response'; + +const PRO2_METHOD_WIRE_INFO: Record = { + getProtoVersion: { + tx: '60200 (GetProtoVersion)', + txPayload: '28 eb', + rx: '60201 (ProtoVersion)', + rxPayload: '29 eb + proto_version', + decoded: 'ProtoVersion', + }, + ping: { + tx: '60206 (Ping)', + txPayload: '2e eb 0a 12 48 65 6c 6c 6f 20 66 72 6f 6d 20 57 65 62 55 53 42 21', + rx: '60207 (Success)', + rxPayload: '2f eb 0a 12 48 65 6c 6c 6f 20 66 72 6f 6d 20 57 65 62 55 53 42 21', + decoded: 'Success: "Hello from WebUSB!"', + }, + devGetDeviceInfo: { + tx: '60600 (DevGetDeviceInfo)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60601 (DeviceInfo)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'DeviceInfo', + }, + devReboot: { + tx: '60400 (DevReboot)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + factoryGetDeviceInfo: { + tx: '60001 (FactoryGetDeviceInfo)', + txPayload: '61 ea', + rx: '60002 (FactoryDeviceInfo)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FactoryDeviceInfo', + }, + factoryDeviceInfoSettings: { + tx: '60000 (FactoryDeviceInfoSettings)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + devFirmwareUpdate: { + tx: '61000 (DevFirmwareUpdate)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '61001 (DevFirmwareInstallProgress) / 60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Progress / Success', + }, + devGetFirmwareUpdateStatus: { + tx: '61002 (DevGetFirmwareUpdateStatus)', + txPayload: '4a ee', + rx: '61003 (DevFirmwareUpdateStatus)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'DevFirmwareUpdateStatus', + }, + filesystemFixPermission: { + tx: '60800 (FilesystemFixPermission)', + txPayload: '80 ed', + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + filesystemFormat: { + tx: '60811 (FilesystemFormat)', + txPayload: '8b ed', + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + pathInfo: { + tx: '60802 (FilesystemPathInfoQuery)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60801 (FilesystemPathInfo)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemPathInfo', + }, + filesystemPathInfoQuery: { + tx: '60802 (FilesystemPathInfoQuery)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60801 (FilesystemPathInfo)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemPathInfo', + }, + dirList: { + tx: '60808 (FilesystemDirList)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60807 (FilesystemDir)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemDir', + }, + filesystemDirList: { + tx: '60808 (FilesystemDirList)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60807 (FilesystemDir)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemDir', + }, + dirMake: { + tx: '60809 (FilesystemDirMake)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + filesystemDirMake: { + tx: '60809 (FilesystemDirMake)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + dirRemove: { + tx: '60810 (FilesystemDirRemove)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + filesystemDirRemove: { + tx: '60810 (FilesystemDirRemove)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + fileRead: { + tx: '60804 (FilesystemFileRead)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60803 (FilesystemFile)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemFile', + }, + filesystemFileRead: { + tx: '60804 (FilesystemFileRead)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60803 (FilesystemFile)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemFile', + }, + fileWrite: { + tx: '60805 (FilesystemFileWrite)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60803 (FilesystemFile)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemFile', + }, + filesystemFileWrite: { + tx: '60805 (FilesystemFileWrite)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60803 (FilesystemFile)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'FilesystemFile', + }, + fileDelete: { + tx: '60806 (FilesystemFileDelete)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, + filesystemFileDelete: { + tx: '60806 (FilesystemFileDelete)', + txPayload: PRO2_DYNAMIC_PAYLOAD, + rx: '60207 (Success)', + rxPayload: PRO2_DYNAMIC_RESPONSE, + decoded: 'Success.message', + }, +}; -function decodeFile(data: Uint8Array): DecodedFile { - let offset = 0; - const result: DecodedFile = { path: '', offset: 0, totalSize: 0, data: null, dataHash: null, processedByte: null }; - while (offset < data.length) { - const { value: tag, offset: off1 } = decodeVarintAt(data, offset); - offset = off1; - const fieldNum = tag >> 3, wireType = tag & 0x7; - if (wireType === 0) { - const { value: val, offset: off2 } = decodeVarintAt(data, offset); - offset = off2; - if (fieldNum === 2) result.offset = val; - else if (fieldNum === 3) result.totalSize = val; - else if (fieldNum === 5) result.dataHash = val; - else if (fieldNum === 6) result.processedByte = val; - } else if (wireType === 2) { - const { value: len, offset: off2 } = decodeVarintAt(data, offset); - if (fieldNum === 1) result.path = decodeStringSlice(data, off2, len); - else if (fieldNum === 4) result.data = data.slice(off2, off2 + len); - offset = off2 + len; - } else break; - } - return result; +function isFileWriteMethod(method: string) { + return method === 'fileWrite' || method === 'filesystemFileWrite'; } -function decodePathInfo(data: Uint8Array): DecodedPathInfo { - let offset = 0; - const r: DecodedPathInfo = { exist: false, size: 0, year: 0, month: 0, day: 0, hour: 0, minute: 0, second: 0, readonly: false, hidden: false, system: false, archive: false, directory: false }; - while (offset < data.length) { - const { value: tag, offset: off1 } = decodeVarintAt(data, offset); - offset = off1; - const fieldNum = tag >> 3, wireType = tag & 0x7; - if (wireType === 0) { - const { value: val, offset: off2 } = decodeVarintAt(data, offset); - offset = off2; - if (fieldNum === 1) r.exist = val !== 0; - else if (fieldNum === 2) r.size = val; - else if (fieldNum === 3) r.year = val; - else if (fieldNum === 4) r.month = val; - else if (fieldNum === 5) r.day = val; - else if (fieldNum === 6) r.hour = val; - else if (fieldNum === 7) r.minute = val; - else if (fieldNum === 8) r.second = val; - else if (fieldNum === 9) r.readonly = val !== 0; - else if (fieldNum === 10) r.hidden = val !== 0; - else if (fieldNum === 11) r.system = val !== 0; - else if (fieldNum === 12) r.archive = val !== 0; - else if (fieldNum === 13) r.directory = val !== 0; - } else break; +function getDataSummary(data: unknown) { + if (typeof Blob !== 'undefined' && data instanceof Blob) { + const name = 'name' in data && typeof data.name === 'string' ? data.name : 'Blob'; + return { data_name: name, data_size: data.size }; } - return r; + if (data instanceof ArrayBuffer) return { data_size: data.byteLength }; + if (ArrayBuffer.isView(data)) return { data_size: data.byteLength }; + if (typeof data === 'string') return { data_size: new TextEncoder().encode(data).byteLength }; + return {}; +} + +function sanitizeRequestParameters(method: string, params: Record) { + if (!isFileWriteMethod(method) || !('data' in params)) return params; + const { data, ...rest } = params; + return { + ...rest, + ...getDataSummary(data), + }; } -function decodeDir(data: Uint8Array): DecodedDir { - let offset = 0; - const r: DecodedDir = { path: '', childDirs: '', childFiles: '' }; - while (offset < data.length) { - const { value: tag, offset: off1 } = decodeVarintAt(data, offset); - offset = off1; - const fieldNum = tag >> 3, wireType = tag & 0x7; - if (wireType === 2) { - const { value: len, offset: off2 } = decodeVarintAt(data, offset); - const str = decodeStringSlice(data, off2, len); - if (fieldNum === 1) r.path = str; - else if (fieldNum === 2) r.childDirs = str; - else if (fieldNum === 3) r.childFiles = str; - offset = off2 + len; - } else break; - } - return r; +function buildWireLogData( + method: UnifiedMethodConfig, + wireInfo: MethodWireInfo | null, + params?: Record, + result?: Record +) { + return { + source: 'pro2Demo/webusb_test.html', + method: method.method, + tx_msg_type: wireInfo?.tx ?? '-', + tx_payload: wireInfo?.txPayload ?? '-', + rx_msg_type: wireInfo?.rx ?? '-', + rx_payload: wireInfo?.rxPayload ?? '-', + decoded: wireInfo?.decoded ?? '-', + ...(params ? { request_parameters: sanitizeRequestParameters(method.method, params) } : {}), + ...(result ? { decoded_result: result } : {}), + }; } -function parseProtoV0Response(data: Uint8Array): { msgType: number; pbPayload: Uint8Array } | null { - if (data.length < 8 || data[0] !== 0x5a) return null; - const frameLen = data[1] | (data[2] << 8); - if (data.length < frameLen) return null; - // payload starts at byte 7, ends at frameLen-1 (last byte is CRC) - const payload = data.slice(7, frameLen - 1); - if (payload.length < 2) return null; - const msgType = payload[0] | (payload[1] << 8); - return { msgType, pbPayload: payload.slice(2) }; -} +function ProtocolDebugPanel({ + method, + wireInfo, +}: { + method: UnifiedMethodConfig; + wireInfo: MethodWireInfo | null; +}) { + if (!wireInfo) return null; -// --------------------------------------------------------------------------- -// USB helpers -// --------------------------------------------------------------------------- -interface DeviceEndpoints { - interfaceNumber: number; - endpointIn: number; - endpointOut: number; -} + return ( +
+
+
+ +

+ {PRO2_METHOD_LABELS[method.method] ?? method.method} +

+ {method.method} +
+
+ + Protocol V2 + + + vol0 defaults + +
+
-function discoverEndpoints(device: USBDevice): DeviceEndpoints { - for (const config of device.configurations) { - for (const iface of config.interfaces) { - for (const alt of iface.alternates) { - if (alt.interfaceClass === 0xff) { - let endpointIn = 1, endpointOut = 1; - for (const ep of alt.endpoints) { - if (ep.direction === 'in') endpointIn = ep.endpointNumber; - else endpointOut = ep.endpointNumber; - } - return { interfaceNumber: iface.interfaceNumber, endpointIn, endpointOut }; - } - } - } - } - return { interfaceNumber: 0, endpointIn: 1, endpointOut: 1 }; +
+
+ TX msg_type: + {wireInfo.tx} +
+
+ TX payload: + {wireInfo.txPayload || '-'} +
+
+ RX msg_type: + {wireInfo.rx} +
+
+ RX payload: + {wireInfo.rxPayload || '-'} +
+
+ Decoded: + {wireInfo.decoded} +
+
+
+ ); } -// --------------------------------------------------------------------------- -// Log entry type -// --------------------------------------------------------------------------- -interface LogEntry { - id: number; - time: string; - type: 'info' | 'success' | 'error' | 'tx' | 'rx'; - message: string; +function findMethodConfig(methodName: string, methods: UnifiedMethodConfig[]) { + return methods.find(method => method.method === methodName); } -// --------------------------------------------------------------------------- -// Component -// --------------------------------------------------------------------------- export default function Pro2DebugPage() { - const [device, setDevice] = useState(null); - const [endpoints, setEndpoints] = useState(null); - const [connected, setConnected] = useState(false); - const [connecting, setConnecting] = useState(false); - const [logs, setLogs] = useState([]); - const [activeTab, setActiveTab] = useState<'ping' | 'fs' | 'firmware' | 'reboot'>('ping'); - - // Ping - const [pingMessage, setPingMessage] = useState('Hello from Playground!'); - const [pingSending, setPingSending] = useState(false); - - // File System - const [fsPath, setFsPath] = useState('/'); - const [fsResult, setFsResult] = useState(''); - const [fsBusy, setFsBusy] = useState(false); - - // File Read - const [fileReadPath, setFileReadPath] = useState(''); - const [fileReadData, setFileReadData] = useState(null); - const [fileReadBusy, setFileReadBusy] = useState(false); - - // File Write (upload) - const [fileWriteTargetPath, setFileWriteTargetPath] = useState('vol1:test.bin'); - const [fileWriteChunkSize, setFileWriteChunkSize] = useState(512); - const [fileWriteProgress, setFileWriteProgress] = useState<{ done: number; total: number } | null>(null); - const [fileWriteBusy, setFileWriteBusy] = useState(false); - const [fileWriteSelectedName, setFileWriteSelectedName] = useState(''); - const fileWriteAbortRef = useRef(false); - const fileWriteInputRef = useRef(null); - - // Firmware Update - const [fwPath, setFwPath] = useState('vol1:firmware.bin'); - const [fwTargetId, setFwTargetId] = useState(FirmwareTargetType.TARGET_MAIN_APP); - const [fwRebootOnSuccess, setFwRebootOnSuccess] = useState(true); - const [fwBusy, setFwBusy] = useState(false); - - // Dir / File manage - const [dirMakePath, setDirMakePath] = useState(''); - const [fileDeletePath, setFileDeletePath] = useState(''); - - const logIdRef = useRef(0); - const logsContainerRef = useRef(null); - - const log = useCallback((message: string, type: LogEntry['type'] = 'info') => { - const now = new Date(); - const time = now.toLocaleTimeString('en-US', { hour12: false }) + '.' + String(now.getMilliseconds()).padStart(3, '0'); - setLogs(prev => [...prev.slice(-199), { id: logIdRef.current++, time, type, message }]); + const { currentDevice } = useDeviceStore(); + const { executeMethod } = useHardwareMethodExecution(); + const [selectedMethodName, setSelectedMethodName] = useState(DEFAULT_SELECTED_METHOD); + + const pro2Methods = useMemo(() => { + const allMethods = [...device.api, ...firmware.api]; + const orderedNames = PRO2_METHOD_GROUPS.flatMap(group => group.methods); + return orderedNames + .map(methodName => findMethodConfig(methodName, allMethods)) + .filter((method): method is UnifiedMethodConfig => Boolean(method)); }, []); - useEffect(() => { - // Scroll only the console container, not the whole page - const el = logsContainerRef.current; - if (el) el.scrollTop = el.scrollHeight; - }, [logs]); - - // ------------------------------------------------------------------ - // Connect / Disconnect - // ------------------------------------------------------------------ - const connect = async () => { - if (!navigator.usb) { - log('WebUSB not supported in this browser', 'error'); - return; - } - setConnecting(true); - try { - const dev = await navigator.usb.requestDevice({ - filters: [{ vendorId: VENDOR_ID, productId: PID_PRO2 }], - }); - await dev.open(); - if (dev.configuration == null) { - await dev.selectConfiguration(1); - } - const eps = discoverEndpoints(dev); - await dev.claimInterface(eps.interfaceNumber); - setDevice(dev); - setEndpoints(eps); - setConnected(true); - log(`Connected: ${dev.productName} (${dev.vendorId.toString(16)}:${dev.productId.toString(16)})`, 'success'); - log(`Endpoints: in=${eps.endpointIn} out=${eps.endpointOut} iface=${eps.interfaceNumber}`, 'info'); - } catch (e: unknown) { - log(`Connect failed: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setConnecting(false); - } - }; - - const disconnect = async () => { - if (!device || !endpoints) return; - try { - await device.releaseInterface(endpoints.interfaceNumber); - await device.close(); - } catch { - // ignore - } - setDevice(null); - setEndpoints(null); - setConnected(false); - log('Disconnected', 'info'); - }; - - // ------------------------------------------------------------------ - // Core send/receive - // ------------------------------------------------------------------ - const sendPbMessage = useCallback(async (msgType: number, pbPayload: Uint8Array, timeoutMs = 5000): Promise<{ msgType: number; pbPayload: Uint8Array }> => { - if (!device || !endpoints) throw new Error('Not connected'); - - const frame = buildPbFrame(msgType, pbPayload); - log(`TX [${PB_MSG_NAME[msgType] ?? msgType}] ${frame.length}B payload=${Array.from(pbPayload.slice(0, 16)).map(b => b.toString(16).padStart(2, '0')).join(' ')}`, 'tx'); - - await device.transferOut(endpoints.endpointOut, frame); - - // Wait for response with timeout - const start = Date.now(); - while (Date.now() - start < timeoutMs) { - const result = await device.transferIn(endpoints.endpointIn, 4096); - if (result.status === 'ok' && result.data && result.data.byteLength > 0) { - const data = new Uint8Array(result.data.buffer, result.data.byteOffset, result.data.byteLength); - const parsed = parseProtoV0Response(data); - if (!parsed) throw new Error('Invalid proto frame'); - log(`RX [${PB_MSG_NAME[parsed.msgType] ?? parsed.msgType}] ${data.length}B`, 'rx'); - return parsed; - } - } - throw new Error('Timeout waiting for response'); - }, [device, endpoints, log]); - - // ------------------------------------------------------------------ - // Ping - // ------------------------------------------------------------------ - const sendPing = async () => { - if (!connected) return; - setPingSending(true); - try { - const payload = encodePing(pingMessage); - const resp = await sendPbMessage(PB_MSG_TYPE.Ping, payload); - if (resp.msgType === PB_MSG_TYPE.Success) { - const decoded = decodeSuccess(resp.pbPayload); - log(`Ping OK: "${decoded.message}"`, 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const decoded = decodeFailure(resp.pbPayload); - log(`Ping Failure [${decoded.code}]: ${decoded.message}`, 'error'); - } else { - log(`Ping unexpected response: msgType=${resp.msgType}`, 'error'); - } - } catch (e: unknown) { - log(`Ping error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setPingSending(false); - } - }; - - // ------------------------------------------------------------------ - // Directory List - // ------------------------------------------------------------------ - const sendDirList = async () => { - if (!connected) return; - setFsBusy(true); - setFsResult(''); - try { - const payload = encodeDirList(fsPath); - const resp = await sendPbMessage(PB_MSG_TYPE.DirList, payload); - if (resp.msgType === PB_MSG_TYPE.Dir) { - const decoded = decodeDir(resp.pbPayload); - const lines = [`Path: ${decoded.path || fsPath}`]; - if (decoded.childDirs) lines.push(`Dirs: ${decoded.childDirs}`); - if (decoded.childFiles) lines.push(`Files: ${decoded.childFiles}`); - setFsResult(lines.join('\n')); - log(`DirList OK: ${decoded.childDirs.split(',').filter(Boolean).length} dirs, ${decoded.childFiles.split(',').filter(Boolean).length} files`, 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const decoded = decodeFailure(resp.pbPayload); - log(`DirList Failure [${decoded.code}]: ${decoded.message}`, 'error'); - setFsResult(`Error [${decoded.code}]: ${decoded.message}`); + const selectedMethod = useMemo(() => { + return ( + findMethodConfig(selectedMethodName, pro2Methods) ?? + findMethodConfig(DEFAULT_SELECTED_METHOD, pro2Methods) ?? + pro2Methods[0] + ); + }, [pro2Methods, selectedMethodName]); + const selectedWireInfo = selectedMethod ? PRO2_METHOD_WIRE_INFO[selectedMethod.method] : null; + + const handleMethodExecution = useCallback( + async (params: Record): Promise> => { + if (!selectedMethod) { + throw new Error('Method configuration not found'); } - } catch (e: unknown) { - log(`DirList error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFsBusy(false); - } - }; - - // ------------------------------------------------------------------ - // Path Info - // ------------------------------------------------------------------ - const sendPathInfo = async () => { - if (!connected) return; - setFsBusy(true); - setFsResult(''); - try { - const payload = encodePathInfoQuery(fsPath); - const resp = await sendPbMessage(PB_MSG_TYPE.PathInfoQuery, payload); - if (resp.msgType === PB_MSG_TYPE.PathInfo) { - const d = decodePathInfo(resp.pbPayload); - const lines = [ - `Exists: ${d.exist}`, - `Size: ${d.size} bytes`, - `Type: ${d.directory ? 'Directory' : 'File'}`, - `Date: ${d.year}-${String(d.month).padStart(2,'0')}-${String(d.day).padStart(2,'0')} ${String(d.hour).padStart(2,'0')}:${String(d.minute).padStart(2,'0')}:${String(d.second).padStart(2,'0')}`, - `Flags: readonly=${d.readonly} hidden=${d.hidden} system=${d.system} archive=${d.archive}`, - ]; - setFsResult(lines.join('\n')); - log(`PathInfo OK: ${d.exist ? (d.directory ? 'dir' : `file ${d.size}B`) : 'not found'}`, d.exist ? 'success' : 'error'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const decoded = decodeFailure(resp.pbPayload); - log(`PathInfo Failure [${decoded.code}]: ${decoded.message}`, 'error'); - setFsResult(`Error [${decoded.code}]: ${decoded.message}`); - } - } catch (e: unknown) { - log(`PathInfo error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFsBusy(false); - } - }; - - // ------------------------------------------------------------------ - // Fix Permission - // ------------------------------------------------------------------ - const sendFixPermission = async () => { - if (!connected) return; - setFsBusy(true); - try { - const payload = encodeFixPermission(); - const resp = await sendPbMessage(PB_MSG_TYPE.FixPermission, payload); - if (resp.msgType === PB_MSG_TYPE.Success) { - log('FixPermission OK', 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const decoded = decodeFailure(resp.pbPayload); - log(`FixPermission Failure [${decoded.code}]: ${decoded.message}`, 'error'); - } - } catch (e: unknown) { - log(`FixPermission error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFsBusy(false); - } - }; - - // ------------------------------------------------------------------ - // File Read (simple single-chunk) - // ------------------------------------------------------------------ - const sendFileRead = async () => { - if (!connected || !fileReadPath) return; - setFileReadBusy(true); - setFileReadData(null); - try { - // First get file size via PathInfoQuery - const infoResp = await sendPbMessage(PB_MSG_TYPE.PathInfoQuery, encodePathInfoQuery(fileReadPath)); - if (infoResp.msgType !== PB_MSG_TYPE.PathInfo) { - throw new Error('PathInfo failed'); - } - const info = decodePathInfo(infoResp.pbPayload); - if (!info.exist) throw new Error('File not found'); - const totalSize = info.size; - log(`Reading file: ${fileReadPath} (${totalSize} bytes)`, 'info'); - - // Read in chunks - const CHUNK = 1400; - const allData: number[] = []; - let offset = 0; - while (offset < totalSize) { - const readLen = Math.min(CHUNK, totalSize - offset); - const payload = encodeFileRead(fileReadPath, offset, totalSize, readLen); - const resp = await sendPbMessage(PB_MSG_TYPE.FileRead, payload, 10000); - if (resp.msgType === PB_MSG_TYPE.File) { - const f = decodeFile(resp.pbPayload); - if (f.data) { - allData.push(...f.data); - offset += f.data.length; - log(`Read ${offset}/${totalSize} bytes`, 'info'); - } else { - throw new Error('No data in File response'); - } - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const d = decodeFailure(resp.pbPayload); - throw new Error(`FileRead Failure [${d.code}]: ${d.message}`); - } else { - throw new Error(`Unexpected response: ${resp.msgType}`); - } - } - const result = new Uint8Array(allData); - setFileReadData(result); - log(`FileRead complete: ${result.length} bytes`, 'success'); - } catch (e: unknown) { - log(`FileRead error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFileReadBusy(false); - } - }; - - const downloadFileReadData = () => { - if (!fileReadData) return; - const blob = new Blob([fileReadData]); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = fileReadPath.split('/').pop() || 'file.bin'; - a.click(); - URL.revokeObjectURL(url); - }; - - // ------------------------------------------------------------------ - // File Write (upload) - // ------------------------------------------------------------------ - const startFileWrite = async (file: File) => { - if (!connected) return; - const targetPath = fileWriteTargetPath.trim(); - if (!targetPath) { log('Enter target path', 'error'); return; } - const chunkSize = Math.max(64, Math.min(2048, fileWriteChunkSize)); - - let fileData: Uint8Array; - try { - fileData = new Uint8Array(await file.arrayBuffer()); - } catch (e: unknown) { - log(`Failed to read file: ${e instanceof Error ? e.message : String(e)}`, 'error'); - return; - } - - const totalLen = fileData.length; - fileWriteAbortRef.current = false; - setFileWriteBusy(true); - setFileWriteProgress({ done: 0, total: totalLen }); - log(`Upload start: ${file.name} (${totalLen} B) → ${targetPath}`, 'info'); - - const t0 = performance.now(); - let offset = 0; - let isFirst = true; - try { - while (offset < totalLen && !fileWriteAbortRef.current) { - const chunk = fileData.slice(offset, offset + chunkSize); - const pbPayload = encodeFileWrite(targetPath, offset, totalLen, chunk, isFirst, false); - const resp = await sendPbMessage(PB_MSG_TYPE.FileWrite, pbPayload, 10000); - isFirst = false; - - if (resp.msgType === PB_MSG_TYPE.Failure) { - const d = decodeFailure(resp.pbPayload); - throw new Error(`FileWrite Failure [${d.code}]: ${d.message}`); - } - if (resp.msgType !== PB_MSG_TYPE.File) { - throw new Error(`Unexpected response: ${resp.msgType}`); - } - const f = decodeFile(resp.pbPayload); - offset = f.processedByte !== null ? f.processedByte : (offset + chunk.length); - setFileWriteProgress({ done: offset, total: totalLen }); - } - - if (fileWriteAbortRef.current) { - log('Upload aborted', 'info'); - } else { - const elapsed = (performance.now() - t0) / 1000; - const speed = totalLen / elapsed; - log(`Upload complete: ${totalLen} B in ${elapsed.toFixed(2)}s (${Math.round(speed / 1024)} KB/s)`, 'success'); - } - } catch (e: unknown) { - log(`FileWrite error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFileWriteBusy(false); - setFileWriteProgress(null); - setFileWriteSelectedName(''); - if (fileWriteInputRef.current) fileWriteInputRef.current.value = ''; - } - }; - - const stopFileWrite = () => { - fileWriteAbortRef.current = true; - }; - - // ------------------------------------------------------------------ - // Dir / File manage - // ------------------------------------------------------------------ - const sendDirMake = async () => { - if (!connected || !dirMakePath) return; - setFsBusy(true); - try { - const resp = await sendPbMessage(PB_MSG_TYPE.DirMake, encodeDirMake(dirMakePath)); - if (resp.msgType === PB_MSG_TYPE.Success) { - log(`DirMake OK: ${dirMakePath}`, 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const d = decodeFailure(resp.pbPayload); - log(`DirMake Failure [${d.code}]: ${d.message}`, 'error'); - } - } catch (e: unknown) { - log(`DirMake error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFsBusy(false); - } - }; - - const sendDirRemove = async (path?: string) => { - const targetPath = path ?? dirMakePath; - if (!connected || !targetPath) return; - setFsBusy(true); - try { - const resp = await sendPbMessage(PB_MSG_TYPE.DirRemove, encodeDirRemove(targetPath)); - if (resp.msgType === PB_MSG_TYPE.Success) { - log(`DirRemove OK: ${targetPath}`, 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const d = decodeFailure(resp.pbPayload); - log(`DirRemove Failure [${d.code}]: ${d.message}`, 'error'); - } - } catch (e: unknown) { - log(`DirRemove error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFsBusy(false); - } - }; - - const sendFileDelete = async () => { - if (!connected || !fileDeletePath) return; - setFsBusy(true); - try { - const resp = await sendPbMessage(PB_MSG_TYPE.FileDelete, encodeFileDelete(fileDeletePath)); - if (resp.msgType === PB_MSG_TYPE.Success) { - log(`FileDelete OK: ${fileDeletePath}`, 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const d = decodeFailure(resp.pbPayload); - log(`FileDelete Failure [${d.code}]: ${d.message}`, 'error'); - } - } catch (e: unknown) { - log(`FileDelete error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFsBusy(false); - } - }; - - // ------------------------------------------------------------------ - // Firmware Update - // ------------------------------------------------------------------ - const sendFirmwareUpdate = async () => { - if (!connected || !fwPath) return; - setFwBusy(true); - try { - const targets = [{ targetId: fwTargetId, path: fwPath }]; - const payload = encodeFirmwareUpdate(targets, fwRebootOnSuccess); - log(`FirmwareUpdate: target=${FW_TARGET_LABELS[fwTargetId]} path=${fwPath} reboot=${fwRebootOnSuccess}`, 'info'); - const resp = await sendPbMessage(PB_MSG_TYPE.FirmwareUpdate, payload, 60000); - if (resp.msgType === PB_MSG_TYPE.Success) { - const decoded = decodeSuccess(resp.pbPayload); - log(`FirmwareUpdate OK: "${decoded.message || 'Firmware updated'}"`, 'success'); - } else if (resp.msgType === PB_MSG_TYPE.Failure) { - const decoded = decodeFailure(resp.pbPayload); - log(`FirmwareUpdate Failure [${decoded.code}]: ${decoded.message}`, 'error'); - } else { - log(`FirmwareUpdate unexpected response: msgType=${resp.msgType}`, 'error'); - } - } catch (e: unknown) { - log(`FirmwareUpdate error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } finally { - setFwBusy(false); - } - }; - - // ------------------------------------------------------------------ - // Reboot - // ------------------------------------------------------------------ - const sendReboot = async (rebootType: number) => { - if (!connected) return; - try { - const payload = encodeReboot(rebootType); - log(`Rebooting: ${REBOOT_TYPE[rebootType as keyof typeof REBOOT_TYPE] ?? rebootType}`, 'info'); - await sendPbMessage(PB_MSG_TYPE.Reboot, payload); - log('Reboot command sent', 'success'); - await disconnect(); - } catch (e: unknown) { - log(`Reboot error: ${e instanceof Error ? e.message : String(e)}`, 'error'); - } - }; - - // ------------------------------------------------------------------ - // Render - // ------------------------------------------------------------------ - const logTypeClass = { - info: 'text-muted-foreground', - success: 'text-green-500', - error: 'text-red-500', - tx: 'text-blue-400', - rx: 'text-purple-400', - } as const; + const executionParams = { + ...params, + connectProtocol: HARDWARE_CONNECT_PROTOCOL.V2, + }; + logHardware( + 'Pro2 demo protocol trace', + buildWireLogData(selectedMethod, selectedWireInfo, executionParams) + ); + const result = await executeMethod(executionParams, selectedMethod); + logHardware( + 'Pro2 decoded response', + buildWireLogData(selectedMethod, selectedWireInfo, undefined, result) + ); + return result; + }, + [executeMethod, selectedMethod, selectedWireInfo] + ); return ( - -
- {/* Header */} -
-
-

Pro2 Debug

-

- Direct WebUSB communication with OneKey Pro2 (Proto V0 / 0x5A framing) -

-
-
-
-
- {connected ? `${device?.productName ?? 'Pro2'} connected` : 'Disconnected'} + +
+
+
+
+

OneKey Pro 2 Debug

+

+ Protocol V2 commands via hd-common-connect-sdk / hd-core. +

+
+
+ SDK debug: enabled + + {currentDevice ? currentDevice.connectId : 'No device'} +
- {connected ? ( - - ) : ( - - )}
-
- {/* Left: Operations */} -
- {/* Tabs */} -
- {(['ping', 'fs', 'firmware', 'reboot'] as const).map(tab => ( - - ))} -
- - {/* Ping Tab */} - {activeTab === 'ping' && ( - - - - - Ping (msgType=60206) - - - -
- - setPingMessage(e.target.value)} - placeholder="Ping message..." - /> -
- -
-
- )} - - {/* File System Tab */} - {activeTab === 'fs' && ( -
- - - - - Directory & Path Operations - - - -
- - setFsPath(e.target.value)} - placeholder="/" - /> -
-
-
- -

列出目录下的文件和子目录

-
-
- -

查询路径的大小、日期、类型

-
-
-
- -

修复 eMMC 文件系统权限问题

-
- {/* DirMake */} -
- -
- setDirMakePath(e.target.value)} - placeholder="/path/to/dir" - /> - - -
-
- {/* FileDelete */} -
- -
- setFileDeletePath(e.target.value)} - placeholder="/path/to/file" - /> - -
-
- {fsResult && ( -
-                        {fsResult}
-                      
- )} -
-
- - - - - - File Read - - - -
- - setFileReadPath(e.target.value)} - placeholder="/path/to/file" - /> -
-
- - {fileReadData && ( - - )} -
- {fileReadData && ( -
- {fileReadData.length} bytes read •{' '} - - {Array.from(fileReadData.slice(0, 8)).map(b => b.toString(16).padStart(2, '0')).join(' ')} - {fileReadData.length > 8 ? '...' : ''} - -
- )} -
-
- - {/* File Write (Upload) */} - - - - - File Write (Upload) - - - -
- - setFileWriteSelectedName(e.target.files?.[0]?.name ?? '')} - /> - -
-
-
- - setFileWriteTargetPath(e.target.value)} - placeholder="vol1:filename.bin" - disabled={fileWriteBusy} - /> -
-
- - setFileWriteChunkSize(Number(e.target.value))} - min={64} - max={2048} - disabled={fileWriteBusy} - /> -
-
-
- - {fileWriteBusy && ( - - )} -
- {fileWriteProgress && ( -
-
-
-
-
- {fileWriteProgress.done} / {fileWriteProgress.total} bytes ({Math.round((fileWriteProgress.done / fileWriteProgress.total) * 100)}%) -
+ {!currentDevice && ( +
+ +
+ )} + +
+ + +

Protobuf Messages

+
+ {PRO2_METHOD_GROUPS.map(group => { + const Icon = group.icon; + const availableMethods = group.methods + .map(methodName => findMethodConfig(methodName, pro2Methods)) + .filter((method): method is UnifiedMethodConfig => Boolean(method)); + + return ( +
+
+ + {group.title}
- )} - - -
- )} - - {/* Firmware Tab */} - {activeTab === 'firmware' && ( -
- - - - - Firmware Update (msgType=61000) - - - -

- 告诉设备从已上传到 eMMC 的固件文件安装固件。需先通过 File System → File Write 将固件上传到设备。 -

-
- - setFwPath(e.target.value)} - placeholder="vol1:firmware.bin" - disabled={fwBusy} - /> -
-
- - -
- - -
-
升级流程:
-
1. File System → File Write → 将 .bin 上传到设备(如 vol1:firmware.bin)
-
2. 此处填写设备上的路径,点击 Update Firmware
-
3. 设备校验并安装固件,安装完成后可自动重启
+
- - + ); + })}
- )} - {/* Reboot Tab */} - {activeTab === 'reboot' && ( - - - - - Reboot (msgType=60400) - - - -

- Reboot the device. Connection will be lost after sending. -

-
- - - -
-
-
- )} -
- - {/* Right: Log console — sticky so it stays visible while scrolling the left panel */} -
- - - - - Console - - - - -
- {logs.length === 0 && ( -
Connect a Pro2 device to start debugging...
- )} - {logs.map(entry => ( -
- {entry.time} - {entry.message} -
- ))} -
+ {selectedMethod ? ( + + ) : null} +
+
+ + {selectedMethod ? ( + method.method === selectedMethod.method) + ? 'firmware' + : 'standard' + } + /> + ) : ( + + + Protocol V2 method configuration not found. -
+ )}
- - {/* Info card */} - - -
-
Proto V0 Frame Format
-
- [0x5A][lenL][lenH][headerCRC][router][attr][seq][msgTypeL][msgTypeH][...pb][frameCRC] -
-
- Pro2 PID: 0x53C1  •  - VendorID: 0x1209  •  - Max frame: 2048 bytes  •  - CRC8 init: 0x30 -
-
-
-
); diff --git a/packages/connect-examples/expo-playground/app/utils/parameterUtils.ts b/packages/connect-examples/expo-playground/app/utils/parameterUtils.ts index d24e67e03..6539182cd 100644 --- a/packages/connect-examples/expo-playground/app/utils/parameterUtils.ts +++ b/packages/connect-examples/expo-playground/app/utils/parameterUtils.ts @@ -11,6 +11,8 @@ const JSON_PARAMETER_NAMES = [ 'outputs', 'refTxs', 'payload', + 'targets', + 'types', ] as const; /** diff --git a/packages/connect-examples/expo-playground/public/webusb_test.html b/packages/connect-examples/expo-playground/public/webusb_test.html index c71739cd2..a2e72458d 100644 --- a/packages/connect-examples/expo-playground/public/webusb_test.html +++ b/packages/connect-examples/expo-playground/public/webusb_test.html @@ -310,7 +310,7 @@

Protobuf Messages

- +
@@ -357,7 +357,7 @@

Protobuf Messages

- +
@@ -382,7 +382,7 @@

Protobuf Messages

- +
@@ -399,7 +399,7 @@

Protobuf Messages

- +
@@ -414,7 +414,7 @@

Protobuf Messages

- +
@@ -427,7 +427,7 @@

Protobuf Messages

- +
@@ -440,7 +440,7 @@

Protobuf Messages

- +
@@ -465,7 +465,7 @@

Protobuf Messages

- +
- +
@@ -1825,7 +1825,7 @@

Log

updateTestResult('运行中', 0, 0, null, 0, 0); const testFileSize = parseInt(document.getElementById('testFileSize').value) || 8192; - const testDir = document.getElementById('testPath').value || 'vol1:test_dir'; + const testDir = document.getElementById('testPath').value || 'vol0:test_dir'; const testCount = parseInt(document.getElementById('testCount').value) || 1; const testFile = testDir + '/test.bin'; @@ -2003,9 +2003,9 @@

Log

const stepProgress4 = ((currentRound - 1) * totalSteps + 4) / (totalRounds * totalSteps) * 100; updateTestProgress(stepProgress4, `${roundProgress}4. DirList`); if (progressCallback) progressCallback(4, passed, failed); - log('🧪 [Test] Step 4: DirList("vol1:")', 'info'); + log('🧪 [Test] Step 4: DirList("vol0:")', 'info'); try { - const pbPayload = pbEncoder.encodeDirList('vol1:'); + const pbPayload = pbEncoder.encodeDirList('vol0:'); const resp = await sendPbMessage(PB_MSG_TYPE.DirList, pbPayload); if (resp.msgType === PB_MSG_TYPE.Dir) { const dir = pbDecoder.decodeDir(resp.pbPayload); @@ -2015,7 +2015,7 @@

Log

log(`✅ [Test] Step 4: DirList → Found ${dirName}`, 'info'); addStatusEntry('Test-4.DirList', { 'msg_type': `${PB_MSG_TYPE.DirList}`, - 'path': 'vol1:', + 'path': 'vol0:', 'rx_msg_type': `${resp.msgType}`, 'found': dirName }, 'Success', 0); @@ -2024,7 +2024,7 @@

Log

log(`⚠️ [Test] Step 4: DirList → ${dirName} not found in list`, 'info'); addStatusEntry('Test-4.DirList', { 'msg_type': `${PB_MSG_TYPE.DirList}`, - 'path': 'vol1:', + 'path': 'vol0:', 'rx_msg_type': `${resp.msgType}` }, 'Warning: dir not found', 0); passed++; @@ -2036,7 +2036,7 @@

Log

log(`❌ [Test] Step 4: DirList failed: ${e.message}`, 'error'); addStatusEntry('Test-4.DirList', { 'msg_type': `${PB_MSG_TYPE.DirList}`, - 'path': 'vol1:' + 'path': 'vol0:' }, `Failed: ${e.message}`, -1); failed++; throw e; @@ -2427,9 +2427,9 @@

Log

const stepProgress14 = ((currentRound - 1) * totalSteps + 14) / (totalRounds * totalSteps) * 100; updateTestProgress(stepProgress14, `${roundProgress}14. DirList (verify removed)`); if (progressCallback) progressCallback(14, passed, failed); - log('🧪 [Test] Step 14: DirList("vol1:") - verify removed', 'info'); + log('🧪 [Test] Step 14: DirList("vol0:") - verify removed', 'info'); try { - const pbPayload = pbEncoder.encodeDirList('vol1:'); + const pbPayload = pbEncoder.encodeDirList('vol0:'); const resp = await sendPbMessage(PB_MSG_TYPE.DirList, pbPayload); if (resp.msgType === PB_MSG_TYPE.Dir) { const dir = pbDecoder.decodeDir(resp.pbPayload); @@ -2439,7 +2439,7 @@

Log

log(`✅ [Test] Step 14: DirList → ${dirName} removed`, 'info'); addStatusEntry('Test-14.DirList', { 'msg_type': `${PB_MSG_TYPE.DirList}`, - 'path': 'vol1:', + 'path': 'vol0:', 'rx_msg_type': `${resp.msgType}`, 'removed': dirName }, 'Success: Dir removed', 0); @@ -2448,7 +2448,7 @@

Log

log(`⚠️ [Test] Step 14: DirList → ${dirName} still in list`, 'info'); addStatusEntry('Test-14.DirList', { 'msg_type': `${PB_MSG_TYPE.DirList}`, - 'path': 'vol1:', + 'path': 'vol0:', 'rx_msg_type': `${resp.msgType}` }, 'Warning: dir still exists', 0); passed++; @@ -2460,7 +2460,7 @@

Log

log(`❌ [Test] Step 14: DirList failed: ${e.message}`, 'error'); addStatusEntry('Test-14.DirList', { 'msg_type': `${PB_MSG_TYPE.DirList}`, - 'path': 'vol1:' + 'path': 'vol0:' }, `Failed: ${e.message}`, -1); failed++; throw e; diff --git a/packages/core/__tests__/protocol-v2.test.ts b/packages/core/__tests__/protocol-v2.test.ts index 4c4e92f58..82f9931ef 100644 --- a/packages/core/__tests__/protocol-v2.test.ts +++ b/packages/core/__tests__/protocol-v2.test.ts @@ -1,5 +1,6 @@ import JSZip from 'jszip'; +import FileRead from '../src/api/FileRead'; import FileWrite from '../src/api/FileWrite'; import FirmwareUpdateV3 from '../src/api/FirmwareUpdateV3'; import { getProtocolV2Features, normalizeProtocolV2Features } from '../src/protocols/protocol-v2'; @@ -251,21 +252,21 @@ describe('Protocol V2 firmware update targets', () => { ], }); - expect((method as any).protocolV2CreateFolder).toHaveBeenCalledWith('vol1:res/'); + expect((method as any).protocolV2CreateFolder).toHaveBeenCalledWith('vol0:res/'); expect(writtenPaths).toEqual([ - 'vol1:res/home.png', - 'vol1:bootloader.bin', - 'vol1:ble-firmware.bin', - 'vol1:se1-firmware.bin', - 'vol1:firmware.bin', + 'vol0:res/home.png', + 'vol0:bootloader.bin', + 'vol0:ble-firmware.bin', + 'vol0:se1-firmware.bin', + 'vol0:firmware.bin', ]); expect((method as any).protocolV2StartFirmwareUpdate).toHaveBeenCalledWith({ targets: [ - { target_id: 10, path: 'vol1:res/' }, - { target_id: 1, path: 'vol1:bootloader.bin' }, - { target_id: 2, path: 'vol1:ble-firmware.bin' }, - { target_id: 3, path: 'vol1:se1-firmware.bin' }, - { target_id: 0, path: 'vol1:firmware.bin' }, + { target_id: 10, path: 'vol0:res/' }, + { target_id: 1, path: 'vol0:bootloader.bin' }, + { target_id: 2, path: 'vol0:ble-firmware.bin' }, + { target_id: 3, path: 'vol0:se1-firmware.bin' }, + { target_id: 0, path: 'vol0:firmware.bin' }, ], }); expect((method as any).waitForProtocolV2FirmwareUpdateComplete).toHaveBeenCalled(); @@ -337,7 +338,7 @@ describe('Protocol V2 firmware update targets', () => { }); describe('Protocol V2 file write method', () => { - test('uses offset-driven overwrite and append defaults', async () => { + test('uses demo-aligned overwrite and append defaults', async () => { const call = jest.fn().mockResolvedValue({ message: { processed_byte: 1 } }); const method = new FileWrite({ id: 1, @@ -362,11 +363,14 @@ describe('Protocol V2 file write method', () => { data: new Uint8Array([1]), }, overwrite: false, - append: true, + append: false, + ui_percentage: 99, }); }); - test('rejects chunks larger than the Protocol V2 file payload limit', async () => { + test('splits data larger than the Protocol V2 file payload limit', async () => { + const data = new Uint8Array(2049); + const call = jest.fn().mockResolvedValue({ message: {} }); const method = new FileWrite({ id: 1, payload: { @@ -374,13 +378,97 @@ describe('Protocol V2 file write method', () => { path: 'vol1:test.bin', offset: 0, totalSize: 2049, - data: new Uint8Array(2049), + data, }, }); - (method as any).device = { commands: { call: jest.fn() } }; + (method as any).device = { commands: { call } }; method.init(); + const result = await method.run(); - await expect(method.run()).rejects.toThrow('FilesystemFileWrite data too large'); + expect(call).toHaveBeenCalledTimes(2); + expect(call).toHaveBeenNthCalledWith(1, 'FilesystemFileWrite', { + file: { + path: 'vol1:test.bin', + offset: 0, + total_size: 2049, + data: data.slice(0, 2048), + }, + overwrite: true, + append: false, + ui_percentage: 99, + }); + expect(call).toHaveBeenNthCalledWith(2, 'FilesystemFileWrite', { + file: { + path: 'vol1:test.bin', + offset: 2048, + total_size: 2049, + data: data.slice(2048), + }, + overwrite: false, + append: false, + ui_percentage: 99, + }); + expect(result).toMatchObject({ + path: 'vol1:test.bin', + processed_byte: 2049, + chunks: 2, + }); + }); +}); + +describe('Protocol V2 file read method', () => { + test('reads full file in chunks when read length is 0', async () => { + const firstChunk = new Uint8Array(64).fill(1); + const call = jest + .fn() + .mockResolvedValueOnce({ message: { exist: true, size: 65, directory: false } }) + .mockResolvedValueOnce({ message: { data: firstChunk } }) + .mockResolvedValueOnce({ message: { data: new Uint8Array([2]) } }); + const method = new FileRead({ + id: 1, + payload: { + method: 'fileRead', + path: 'vol1:test.bin', + offset: 0, + totalSize: 0, + chunkLen: 64, + }, + }); + (method as any).device = { commands: { call } }; + + method.init(); + const result = await method.run(); + + expect(call).toHaveBeenNthCalledWith(1, 'FilesystemPathInfoQuery', { + path: 'vol1:test.bin', + }); + expect(call).toHaveBeenNthCalledWith(2, 'FilesystemFileRead', { + file: { + path: 'vol1:test.bin', + offset: 0, + total_size: 0, + }, + chunk_len: 64, + ui_percentage: 99, + }); + expect(call).toHaveBeenNthCalledWith(3, 'FilesystemFileRead', { + file: { + path: 'vol1:test.bin', + offset: 64, + total_size: 0, + }, + chunk_len: 1, + ui_percentage: 99, + }); + expect((result.data as Uint8Array).byteLength).toBe(65); + expect((result.data as Uint8Array)[0]).toBe(1); + expect((result.data as Uint8Array)[64]).toBe(2); + expect(result).toMatchObject({ + path: 'vol1:test.bin', + offset: 0, + total_size: 65, + chunks: 2, + }); }); }); diff --git a/packages/core/src/api/DirList.ts b/packages/core/src/api/DirList.ts index dfbcaec3c..dd24614d3 100644 --- a/packages/core/src/api/DirList.ts +++ b/packages/core/src/api/DirList.ts @@ -2,18 +2,23 @@ import { BaseMethod } from './BaseMethod'; export type DirListParams = { path: string; + depth?: number; }; export default class DirList extends BaseMethod { init() { this.skipForceUpdateCheck = true; this.useDevicePassphraseState = false; - this.params = { path: this.payload.path }; + this.params = { + path: this.payload.path, + depth: this.payload.depth, + }; } async run() { const res = await (this.device.commands as any).call('FilesystemDirList', { path: this.params.path, + depth: this.params.depth, }); return Promise.resolve(res.message); } diff --git a/packages/core/src/api/FileRead.ts b/packages/core/src/api/FileRead.ts index 1e5bda3ce..38f37903c 100644 --- a/packages/core/src/api/FileRead.ts +++ b/packages/core/src/api/FileRead.ts @@ -1,12 +1,53 @@ +import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; + import { BaseMethod } from './BaseMethod'; export type FileReadParams = { path: string; - offset: number; - totalSize: number; + offset?: number; + totalSize?: number; chunkLen?: number; + uiPercentage?: number; }; +const DEFAULT_FILE_READ_CHUNK_SIZE = 512; +const MIN_FILE_READ_CHUNK_SIZE = 64; +const MAX_FILE_READ_CHUNK_SIZE = 2048; + +function normalizeChunkSize(value: unknown): number { + const numeric = Number(value); + if (!Number.isFinite(numeric) || numeric <= 0) return DEFAULT_FILE_READ_CHUNK_SIZE; + return Math.min( + Math.max(Math.floor(numeric), MIN_FILE_READ_CHUNK_SIZE), + MAX_FILE_READ_CHUNK_SIZE + ); +} + +function toFiniteNumber(value: unknown): number | undefined { + if (typeof value === 'number' && Number.isFinite(value)) return value; + if (typeof value === 'string') { + const numeric = Number(value); + return Number.isFinite(numeric) ? numeric : undefined; + } + if (value && typeof value === 'object') { + const longLike = value as { toNumber?: () => number }; + if (typeof longLike.toNumber === 'function') { + const numeric = longLike.toNumber(); + return Number.isFinite(numeric) ? numeric : undefined; + } + } + return undefined; +} + +function toUint8Array(value: unknown): Uint8Array { + if (value instanceof Uint8Array) return value; + if (value instanceof ArrayBuffer) return new Uint8Array(value); + if (ArrayBuffer.isView(value)) { + return new Uint8Array(value.buffer, value.byteOffset, value.byteLength); + } + return new Uint8Array(0); +} + export default class FileRead extends BaseMethod { init() { this.skipForceUpdateCheck = true; @@ -16,18 +57,83 @@ export default class FileRead extends BaseMethod { offset: this.payload.offset ?? 0, totalSize: this.payload.totalSize ?? 0, chunkLen: this.payload.chunkLen, + uiPercentage: this.payload.uiPercentage, }; } async run() { - const res = await (this.device.commands as any).call('FilesystemFileRead', { - file: { + const startOffset = this.params.offset ?? 0; + const requestedLength = Number(this.params.totalSize); + const chunkSize = normalizeChunkSize(this.params.chunkLen); + let totalLength = Number.isFinite(requestedLength) && requestedLength > 0 ? requestedLength : 0; + + if (totalLength === 0) { + const pathInfoRes = await (this.device.commands as any).call('FilesystemPathInfoQuery', { path: this.params.path, - offset: this.params.offset, - total_size: this.params.totalSize, - }, - chunk_len: this.params.chunkLen, + }); + const fileSize = toFiniteNumber(pathInfoRes.message?.size); + if (!pathInfoRes.message?.exist || pathInfoRes.message?.directory) { + throw ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `FilesystemFileRead path is not a file: ${this.params.path}` + ); + } + if (fileSize === undefined || fileSize < startOffset) { + throw ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `FilesystemFileRead invalid offset ${startOffset} for ${this.params.path}` + ); + } + totalLength = fileSize - startOffset; + } + + const chunks: Uint8Array[] = []; + let read = 0; + let lastMessage: Record | undefined; + + while (read < totalLength) { + const readLen = Math.min(chunkSize, totalLength - read); + const offset = startOffset + read; + const progress = + this.params.uiPercentage ?? + Math.min(Math.ceil(((read + readLen) / Math.max(totalLength, 1)) * 100), 99); + const res = await (this.device.commands as any).call('FilesystemFileRead', { + file: { + path: this.params.path, + offset, + total_size: 0, + }, + chunk_len: readLen, + ui_percentage: progress, + }); + const data = toUint8Array(res.message?.data); + lastMessage = res.message; + + if (data.byteLength === 0) { + throw ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `FilesystemFileRead received empty data at offset ${offset}` + ); + } + + chunks.push(data); + read += data.byteLength; + } + + const combined = new Uint8Array(read); + let cursor = 0; + chunks.forEach(chunk => { + combined.set(chunk, cursor); + cursor += chunk.byteLength; + }); + + return Promise.resolve({ + ...lastMessage, + path: this.params.path, + offset: startOffset, + total_size: totalLength, + data: combined, + chunks: chunks.length, }); - return Promise.resolve(res.message); } } diff --git a/packages/core/src/api/FileWrite.ts b/packages/core/src/api/FileWrite.ts index 51b4fbbac..7f67b44fc 100644 --- a/packages/core/src/api/FileWrite.ts +++ b/packages/core/src/api/FileWrite.ts @@ -5,13 +5,47 @@ import { BaseMethod } from './BaseMethod'; export type FileWriteParams = { path: string; - offset: number; - totalSize: number; - data: ArrayBuffer | Uint8Array | string; + offset?: number; + totalSize?: number; + data: ArrayBuffer | Uint8Array | Blob | string; + chunkSize?: number; + chunkLen?: number; overwrite?: boolean; append?: boolean; + uiPercentage?: number; }; +const MIN_FILE_CHUNK_SIZE = 64; + +async function dataToUint8Array(data: FileWriteParams['data'] | Blob): Promise { + if (typeof data === 'string') { + return new TextEncoder().encode(data); + } + + if (data instanceof ArrayBuffer) { + return new Uint8Array(data); + } + + if (ArrayBuffer.isView(data)) { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + + if (typeof Blob !== 'undefined' && data instanceof Blob) { + return new Uint8Array(await data.arrayBuffer()); + } + + throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'Unsupported FilesystemFileWrite data'); +} + +function normalizeChunkSize(value: unknown): number { + const numeric = Number(value); + if (!Number.isFinite(numeric) || numeric <= 0) return PROTOCOL_V2_FILE_CHUNK_SIZE; + return Math.min( + Math.max(Math.floor(numeric), MIN_FILE_CHUNK_SIZE), + PROTOCOL_V2_FILE_CHUNK_SIZE + ); +} + export default class FileWrite extends BaseMethod { init() { this.skipForceUpdateCheck = true; @@ -22,41 +56,84 @@ export default class FileWrite extends BaseMethod { offset, totalSize: this.payload.totalSize ?? 0, data: this.payload.data, + chunkSize: this.payload.chunkSize, + chunkLen: this.payload.chunkLen, overwrite: this.payload.overwrite ?? offset === 0, - append: this.payload.append ?? offset !== 0, + append: this.payload.append ?? false, + uiPercentage: this.payload.uiPercentage, }; } async run() { - const dataLength = - typeof this.params.data === 'string' - ? Buffer.byteLength(this.params.data, 'utf8') - : this.params.data.byteLength; - if (dataLength > PROTOCOL_V2_FILE_CHUNK_SIZE) { + const data = await dataToUint8Array(this.params.data as FileWriteParams['data'] | Blob); + const dataLength = data.byteLength; + const offsetValue = Number(this.params.offset ?? 0); + const startOffset = Number.isFinite(offsetValue) && offsetValue > 0 ? offsetValue : 0; + const payloadTotalSize = Number(this.params.totalSize); + const totalSize = + Number.isFinite(payloadTotalSize) && payloadTotalSize > 0 + ? payloadTotalSize + : startOffset + dataLength; + + if (totalSize < startOffset + dataLength) { throw ERRORS.TypedError( HardwareErrorCode.RuntimeError, - `FilesystemFileWrite data too large: ${dataLength} bytes` + `FilesystemFileWrite totalSize ${totalSize} is smaller than offset + data length ${ + startOffset + dataLength + }` ); } - if (this.params.totalSize < this.params.offset + dataLength) { - throw ERRORS.TypedError( - HardwareErrorCode.RuntimeError, - `FilesystemFileWrite totalSize ${ - this.params.totalSize - } is smaller than offset + data length ${this.params.offset + dataLength}` - ); + + const chunkSize = normalizeChunkSize(this.params.chunkSize ?? this.params.chunkLen); + let written = 0; + let chunkIndex = 0; + let lastMessage: Record | undefined; + + while (written < dataLength) { + const chunkEnd = Math.min(written + chunkSize, dataLength); + const chunk = data.slice(written, chunkEnd); + const offset = startOffset + written; + const isFirstChunk = chunkIndex === 0; + const progress = + this.params.uiPercentage ?? + Math.min(Math.ceil(((written + chunk.byteLength) / dataLength) * 100), 99); + + const res = await (this.device.commands as any).call('FilesystemFileWrite', { + file: { + path: this.params.path, + offset, + total_size: totalSize, + data: chunk, + }, + overwrite: isFirstChunk ? this.params.overwrite : false, + append: this.params.append ?? false, + ui_percentage: progress, + }); + + lastMessage = res.message; + const processedByte = Number(res.message?.processed_byte); + if (Number.isFinite(processedByte) && processedByte > offset) { + written = processedByte - startOffset; + } else { + written += chunk.byteLength; + } + + if (written > dataLength) { + throw ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `FilesystemFileWrite invalid processed_byte ${processedByte}` + ); + } + chunkIndex += 1; } - const res = await (this.device.commands as any).call('FilesystemFileWrite', { - file: { - path: this.params.path, - offset: this.params.offset, - total_size: this.params.totalSize, - data: this.params.data, - }, - overwrite: this.params.overwrite, - append: this.params.append, + return Promise.resolve({ + ...lastMessage, + path: this.params.path, + offset: startOffset, + total_size: totalSize, + processed_byte: startOffset + written, + chunks: chunkIndex, }); - return Promise.resolve(res.message); } } diff --git a/packages/core/src/api/FirmwareUpdateV3.ts b/packages/core/src/api/FirmwareUpdateV3.ts index c009de12c..b21f13295 100644 --- a/packages/core/src/api/FirmwareUpdateV3.ts +++ b/packages/core/src/api/FirmwareUpdateV3.ts @@ -286,7 +286,7 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod = []; if (resourceBinary) { - // Resource files live under `vol1:res/`. FilesystemDirMake first so + // Resource files live under `vol0:res/`. FilesystemDirMake first so // FilesystemFileWrite doesn't fail on a missing parent directory. - const resourcePath = `vol1:res/`; + const resourcePath = `vol0:res/`; await this.protocolV2CreateFolder(resourcePath); const file = await JSZip.loadAsync(resourceBinary); const files = Object.entries(file.files); @@ -336,7 +336,7 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + targets: this.payload.targets, + targetId: this.payload.targetId, + target_id: this.payload.target_id, + path: this.payload.path, + }; + } + + async run() { + const res = await this.device.commands.typedCall( + 'DevFirmwareUpdate', + 'Success', + { + targets: normalizeFirmwareTargets(this.params), + }, + PROTOCOL_V2_FIRMWARE_UPDATE_OPTIONS + ); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/DevGetDeviceInfo.ts b/packages/core/src/api/protocol-v2/DevGetDeviceInfo.ts new file mode 100644 index 000000000..235534c8a --- /dev/null +++ b/packages/core/src/api/protocol-v2/DevGetDeviceInfo.ts @@ -0,0 +1,35 @@ +import { BaseMethod } from '../BaseMethod'; +import { buildTargets, buildTypes } from './helpers'; + +import type { DevGetDeviceInfoParams } from './helpers'; + +export default class DevGetDeviceInfo extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + targets: this.payload.targets, + types: this.payload.types, + targetHw: this.payload.targetHw, + targetFw: this.payload.targetFw, + targetBt: this.payload.targetBt, + targetSe1: this.payload.targetSe1, + targetSe2: this.payload.targetSe2, + targetSe3: this.payload.targetSe3, + targetSe4: this.payload.targetSe4, + targetStatus: this.payload.targetStatus, + includeVersion: this.payload.includeVersion, + includeBuildId: this.payload.includeBuildId, + includeHash: this.payload.includeHash, + includeSpecific: this.payload.includeSpecific, + }; + } + + async run() { + const res = await this.device.commands.typedCall('DevGetDeviceInfo', 'DeviceInfo', { + targets: buildTargets(this.params), + types: buildTypes(this.params), + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/DevGetFirmwareUpdateStatus.ts b/packages/core/src/api/protocol-v2/DevGetFirmwareUpdateStatus.ts new file mode 100644 index 000000000..3b76837a7 --- /dev/null +++ b/packages/core/src/api/protocol-v2/DevGetFirmwareUpdateStatus.ts @@ -0,0 +1,18 @@ +import { BaseMethod } from '../BaseMethod'; + +export default class DevGetFirmwareUpdateStatus extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = undefined; + } + + async run() { + const res = await this.device.commands.typedCall( + 'DevGetFirmwareUpdateStatus', + 'DevFirmwareUpdateStatus', + {} + ); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/DevReboot.ts b/packages/core/src/api/protocol-v2/DevReboot.ts new file mode 100644 index 000000000..8d010cccf --- /dev/null +++ b/packages/core/src/api/protocol-v2/DevReboot.ts @@ -0,0 +1,22 @@ +import { BaseMethod } from '../BaseMethod'; +import { normalizeRebootType } from './helpers'; + +import type { DevRebootParams } from './helpers'; + +export default class DevReboot extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + rebootType: this.payload.rebootType, + reboot_type: this.payload.reboot_type, + }; + } + + async run() { + const res = await this.device.commands.typedCall('DevReboot', 'Success', { + reboot_type: normalizeRebootType(this.params.reboot_type ?? this.params.rebootType), + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/FactoryDeviceInfoSettings.ts b/packages/core/src/api/protocol-v2/FactoryDeviceInfoSettings.ts new file mode 100644 index 000000000..21f3b9c59 --- /dev/null +++ b/packages/core/src/api/protocol-v2/FactoryDeviceInfoSettings.ts @@ -0,0 +1,27 @@ +import { BaseMethod } from '../BaseMethod'; + +import type { FactoryDeviceInfoSettingsParams } from './helpers'; + +export default class FactoryDeviceInfoSettings extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + serial_no: this.payload.serial_no, + serialNo: this.payload.serialNo, + cpu_info: this.payload.cpu_info, + cpuInfo: this.payload.cpuInfo, + pre_firmware: this.payload.pre_firmware, + preFirmware: this.payload.preFirmware, + }; + } + + async run() { + const res = await this.device.commands.typedCall('FactoryDeviceInfoSettings', 'Success', { + serial_no: this.params.serial_no ?? this.params.serialNo, + cpu_info: this.params.cpu_info ?? this.params.cpuInfo, + pre_firmware: this.params.pre_firmware ?? this.params.preFirmware, + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/FactoryGetDeviceInfo.ts b/packages/core/src/api/protocol-v2/FactoryGetDeviceInfo.ts new file mode 100644 index 000000000..38cc0fe9e --- /dev/null +++ b/packages/core/src/api/protocol-v2/FactoryGetDeviceInfo.ts @@ -0,0 +1,18 @@ +import { BaseMethod } from '../BaseMethod'; + +export default class FactoryGetDeviceInfo extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = undefined; + } + + async run() { + const res = await this.device.commands.typedCall( + 'FactoryGetDeviceInfo', + 'FactoryDeviceInfo', + {} + ); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/FilesystemFixPermission.ts b/packages/core/src/api/protocol-v2/FilesystemFixPermission.ts new file mode 100644 index 000000000..3b83fea25 --- /dev/null +++ b/packages/core/src/api/protocol-v2/FilesystemFixPermission.ts @@ -0,0 +1,14 @@ +import { BaseMethod } from '../BaseMethod'; + +export default class FilesystemFixPermission extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = undefined; + } + + async run() { + const res = await this.device.commands.typedCall('FilesystemFixPermission', 'Success', {}); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/FilesystemFormat.ts b/packages/core/src/api/protocol-v2/FilesystemFormat.ts new file mode 100644 index 000000000..71895daaa --- /dev/null +++ b/packages/core/src/api/protocol-v2/FilesystemFormat.ts @@ -0,0 +1,14 @@ +import { BaseMethod } from '../BaseMethod'; + +export default class FilesystemFormat extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = undefined; + } + + async run() { + const res = await this.device.commands.typedCall('FilesystemFormat', 'Success', {}); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/GetProtoVersion.ts b/packages/core/src/api/protocol-v2/GetProtoVersion.ts new file mode 100644 index 000000000..7717d8ecd --- /dev/null +++ b/packages/core/src/api/protocol-v2/GetProtoVersion.ts @@ -0,0 +1,14 @@ +import { BaseMethod } from '../BaseMethod'; + +export default class GetProtoVersion extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = undefined; + } + + async run() { + const res = await this.device.commands.typedCall('GetProtoVersion', 'ProtoVersion', {}); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/Ping.ts b/packages/core/src/api/protocol-v2/Ping.ts new file mode 100644 index 000000000..daa196f1c --- /dev/null +++ b/packages/core/src/api/protocol-v2/Ping.ts @@ -0,0 +1,16 @@ +import { BaseMethod } from '../BaseMethod'; + +export default class Ping extends BaseMethod<{ message?: string }> { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { message: this.payload.message }; + } + + async run() { + const res = await this.device.commands.typedCall('Ping', 'Success', { + message: this.params.message ?? '', + }); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/api/protocol-v2/helpers.ts b/packages/core/src/api/protocol-v2/helpers.ts new file mode 100644 index 000000000..aeae77efd --- /dev/null +++ b/packages/core/src/api/protocol-v2/helpers.ts @@ -0,0 +1,135 @@ +import { DevRebootType } from '@onekeyfe/hd-transport'; + +import type { + DevFirmwareTarget, + DevFirmwareTargetType, + DevInfoTargets, + DevInfoTypes, + TransportCallOptions, +} from '@onekeyfe/hd-transport'; + +export type RebootTypeInput = DevRebootType | keyof typeof DevRebootType | string | number; + +export type DevRebootParams = { + rebootType?: RebootTypeInput; + reboot_type?: RebootTypeInput; +}; + +export type DevGetDeviceInfoParams = { + targets?: DevInfoTargets; + types?: DevInfoTypes; + targetHw?: boolean; + targetFw?: boolean; + targetBt?: boolean; + targetSe1?: boolean; + targetSe2?: boolean; + targetSe3?: boolean; + targetSe4?: boolean; + targetStatus?: boolean; + includeVersion?: boolean; + includeBuildId?: boolean; + includeHash?: boolean; + includeSpecific?: boolean; +}; + +export type DevFirmwareTargetInput = + | DevFirmwareTarget + | { + targetId?: DevFirmwareTargetType | string | number; + target_id?: DevFirmwareTargetType | string | number; + path: string; + }; + +export type DevFirmwareUpdateParams = { + targets?: DevFirmwareTargetInput[]; + targetId?: DevFirmwareTargetType | string | number; + target_id?: DevFirmwareTargetType | string | number; + path?: string; +}; + +export type FactoryDeviceInfoSettingsParams = { + serial_no?: string; + serialNo?: string; + cpu_info?: string; + cpuInfo?: string; + pre_firmware?: string; + preFirmware?: string; +}; + +const DEV_REBOOT_TYPES: Record = { + Normal: DevRebootType.Normal, + normal: DevRebootType.Normal, + Boardloader: DevRebootType.Boardloader, + boardloader: DevRebootType.Boardloader, + Bootloader: DevRebootType.Bootloader, + bootloader: DevRebootType.Bootloader, +}; + +export const PROTOCOL_V2_FIRMWARE_UPDATE_OPTIONS: TransportCallOptions = { + intermediateTypes: ['DevFirmwareInstallProgress'], +}; + +export function normalizeRebootType(value: RebootTypeInput | undefined): DevRebootType { + if (typeof value === 'number') return value; + if (typeof value === 'string') { + const numeric = Number(value); + if (Number.isFinite(numeric)) return numeric; + if (value in DEV_REBOOT_TYPES) return DEV_REBOOT_TYPES[value]; + } + return DevRebootType.Normal; +} + +function normalizeTargetId( + value: DevFirmwareTargetType | string | number | undefined +): DevFirmwareTargetType { + if (typeof value === 'number') return value; + const numeric = Number(value); + if (Number.isFinite(numeric)) return numeric; + return 0; +} + +export function normalizeFirmwareTargets(params: DevFirmwareUpdateParams): DevFirmwareTarget[] { + const targets = + params.targets ?? + (params.path + ? [ + { + target_id: params.target_id ?? params.targetId ?? 0, + path: params.path, + }, + ] + : []); + + return targets.map(target => ({ + target_id: normalizeTargetId('target_id' in target ? target.target_id : target.targetId), + path: target.path, + })); +} + +export function buildTargets(params: DevGetDeviceInfoParams): DevInfoTargets | undefined { + if (params.targets) return params.targets; + + const targets: DevInfoTargets = { + hw: params.targetHw, + fw: params.targetFw, + bt: params.targetBt, + se1: params.targetSe1, + se2: params.targetSe2, + se3: params.targetSe3, + se4: params.targetSe4, + status: params.targetStatus, + }; + return Object.values(targets).some(value => value !== undefined) ? targets : undefined; +} + +export function buildTypes(params: DevGetDeviceInfoParams): DevInfoTypes | undefined { + if (params.types) return params.types; + + const types: DevInfoTypes = { + version: params.includeVersion, + build_id: params.includeBuildId, + hash: params.includeHash, + specific: params.includeSpecific, + }; + return Object.values(types).some(value => value !== undefined) ? types : undefined; +} diff --git a/packages/core/src/core/index.ts b/packages/core/src/core/index.ts index d625c30e4..3386f6236 100644 --- a/packages/core/src/core/index.ts +++ b/packages/core/src/core/index.ts @@ -95,6 +95,7 @@ const parseInitOptions = (method?: BaseMethod): InitOptions => ({ passphraseState: method?.payload.passphraseState, deviceId: method?.payload.deviceId, deriveCardano: method && hasDeriveCardano(method), + connectProtocol: method?.payload.connectProtocol, }); let _core: Core; @@ -704,7 +705,7 @@ let bleTimeoutRetry = 0; async function connectDeviceForBle(method: BaseMethod, device: Device) { try { - await device.acquire(); + await device.acquire(method.payload.connectProtocol); if (method.payload?.onlyConnectBleDevice) { return; } diff --git a/packages/core/src/device/Device.ts b/packages/core/src/device/Device.ts index 65fad07c3..1780b8634 100644 --- a/packages/core/src/device/Device.ts +++ b/packages/core/src/device/Device.ts @@ -50,7 +50,7 @@ import type { PassphraseRequestPayload, } from '../events'; import type { PassphrasePromptResponse } from './DeviceCommands'; -import type { Deferred } from '@onekeyfe/hd-shared'; +import type { Deferred, HardwareConnectProtocol } from '@onekeyfe/hd-shared'; import type { OneKeyDeviceInfo as DeviceDescriptor } from '@onekeyfe/hd-transport'; import type DeviceConnector from './DeviceConnector'; @@ -59,6 +59,7 @@ export type InitOptions = { deviceId?: string; passphraseState?: string; deriveCardano?: boolean; + connectProtocol?: HardwareConnectProtocol; }; export type RunOptions = { @@ -284,18 +285,25 @@ export class Device extends EventEmitter { }); } - async acquire() { + async acquire(connectProtocol?: HardwareConnectProtocol) { const env = DataManager.getSettings('env'); const mainIdKey = DataManager.isBleConnect(env) ? 'id' : 'session'; try { if (DataManager.isBleConnect(env)) { - const res = await this.deviceConnector?.acquire(this.originalDescriptor.id); + const res = await this.deviceConnector?.acquire( + this.originalDescriptor.id, + undefined, + undefined, + connectProtocol + ); this.mainId = (res as unknown as any).uuid ?? ''; Log.debug('Expected uuid:', this.mainId); } else { this.mainId = await this.deviceConnector?.acquire( this.originalDescriptor.path, - this.originalDescriptor.session + this.originalDescriptor.session, + undefined, + connectProtocol ); Log.debug('Expected session id:', this.mainId); } @@ -629,7 +637,7 @@ export class Device extends EventEmitter { const env = DataManager.getSettings('env'); if (env !== 'react-native') { try { - await this.acquire(); + await this.acquire(options.connectProtocol); } catch (error) { this.runPromise = null; return Promise.reject(error); diff --git a/packages/core/src/device/DeviceConnector.ts b/packages/core/src/device/DeviceConnector.ts index 1aed69f62..2467b4086 100644 --- a/packages/core/src/device/DeviceConnector.ts +++ b/packages/core/src/device/DeviceConnector.ts @@ -1,3 +1,4 @@ +import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; import { safeThrowError } from '../constants'; import { DataManager } from '../data-manager'; import TransportManager from '../data-manager/TransportManager'; @@ -6,6 +7,7 @@ import { resolveAfter } from '../utils/promiseUtils'; import { LoggerNames, getLogger } from '../utils'; import type { DeviceDescriptorDiff } from './DevicePool'; +import type { HardwareConnectProtocol } from '@onekeyfe/hd-shared'; import type { OneKeyDeviceInfo as DeviceDescriptor, Transport } from '@onekeyfe/hd-transport'; const Log = getLogger(LoggerNames.DeviceConnector); @@ -75,15 +77,37 @@ export default class DeviceConnector { this.listening = false; } - async acquire(path: string, session?: string | null, forceCleanRunPromise?: boolean) { - Log.debug('acquire', path, session); + async acquire( + path: string, + session?: string | null, + forceCleanRunPromise?: boolean, + connectProtocol?: HardwareConnectProtocol + ) { + Log.debug('acquire', path, session, connectProtocol); const env = DataManager.getSettings('env'); try { let res; if (DataManager.isBleConnect(env)) { - res = await this.transport.acquire({ uuid: path, forceCleanRunPromise }); + res = await this.transport.acquire({ + uuid: path, + forceCleanRunPromise, + expectedProtocol: connectProtocol, + }); } else { - res = await this.transport.acquire({ path, previous: session ?? null }); + res = await this.transport.acquire({ + path, + previous: session ?? null, + expectedProtocol: connectProtocol, + }); + } + if (connectProtocol) { + const detectedProtocol = this.transport.getProtocolType(path); + if (detectedProtocol !== connectProtocol) { + throw ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `Device protocol mismatch: expected ${connectProtocol}, detected ${detectedProtocol}` + ); + } } return res; } catch (error) { diff --git a/packages/core/src/inject.ts b/packages/core/src/inject.ts index b5a477827..fa94210ea 100644 --- a/packages/core/src/inject.ts +++ b/packages/core/src/inject.ts @@ -150,6 +150,19 @@ export const createCoreApi = ( deviceRebootToBootloader: connectId => call({ connectId, method: 'deviceRebootToBootloader' }), // File system & device control API (Protocol V2 only) + getProtoVersion: connectId => call({ connectId, method: 'getProtoVersion' }), + ping: (connectId, params) => call({ ...params, connectId, method: 'ping' }), + devReboot: (connectId, params) => call({ ...params, connectId, method: 'devReboot' }), + devGetDeviceInfo: (connectId, params) => + call({ ...params, connectId, method: 'devGetDeviceInfo' }), + devFirmwareUpdate: (connectId, params) => + call({ ...params, connectId, method: 'devFirmwareUpdate' }), + devGetFirmwareUpdateStatus: connectId => + call({ connectId, method: 'devGetFirmwareUpdateStatus' }), + factoryDeviceInfoSettings: (connectId, params) => + call({ ...params, connectId, method: 'factoryDeviceInfoSettings' }), + factoryGetDeviceInfo: connectId => call({ connectId, method: 'factoryGetDeviceInfo' }), + filesystemFixPermission: connectId => call({ connectId, method: 'filesystemFixPermission' }), fileRead: (connectId, params) => call({ ...params, connectId, method: 'fileRead' }), fileWrite: (connectId, params) => call({ ...params, connectId, method: 'fileWrite' }), fileDelete: (connectId, params) => call({ ...params, connectId, method: 'fileDelete' }), @@ -157,6 +170,21 @@ export const createCoreApi = ( dirMake: (connectId, params) => call({ ...params, connectId, method: 'dirMake' }), dirRemove: (connectId, params) => call({ ...params, connectId, method: 'dirRemove' }), pathInfo: (connectId, params) => call({ ...params, connectId, method: 'pathInfo' }), + filesystemFileRead: (connectId, params) => + call({ ...params, connectId, method: 'filesystemFileRead' }), + filesystemFileWrite: (connectId, params) => + call({ ...params, connectId, method: 'filesystemFileWrite' }), + filesystemFileDelete: (connectId, params) => + call({ ...params, connectId, method: 'filesystemFileDelete' }), + filesystemDirList: (connectId, params) => + call({ ...params, connectId, method: 'filesystemDirList' }), + filesystemDirMake: (connectId, params) => + call({ ...params, connectId, method: 'filesystemDirMake' }), + filesystemDirRemove: (connectId, params) => + call({ ...params, connectId, method: 'filesystemDirRemove' }), + filesystemPathInfoQuery: (connectId, params) => + call({ ...params, connectId, method: 'filesystemPathInfoQuery' }), + filesystemFormat: connectId => call({ connectId, method: 'filesystemFormat' }), deviceRecovery: (connectId, params) => call({ ...params, connectId, method: 'deviceRecovery' }), deviceReset: (connectId, params) => call({ ...params, connectId, method: 'deviceReset' }), deviceSettings: (connectId, params) => call({ ...params, connectId, method: 'deviceSettings' }), diff --git a/packages/core/src/types/api/index.ts b/packages/core/src/types/api/index.ts index 7a6e6e2fc..2114fb0f9 100644 --- a/packages/core/src/types/api/index.ts +++ b/packages/core/src/types/api/index.ts @@ -1,11 +1,28 @@ import type { + devFirmwareUpdate, + devGetDeviceInfo, + devGetFirmwareUpdateStatus, + devReboot, dirList, dirMake, dirRemove, + factoryDeviceInfoSettings, + factoryGetDeviceInfo, fileDelete, fileRead, fileWrite, + filesystemDirList, + filesystemDirMake, + filesystemDirRemove, + filesystemFileDelete, + filesystemFileRead, + filesystemFileWrite, + filesystemFixPermission, + filesystemFormat, + filesystemPathInfoQuery, + getProtoVersion, pathInfo, + ping, } from './protocolV2'; import type { off, on, removeAllListeners } from './event'; import type { uiResponse } from './uiResponse'; @@ -208,6 +225,15 @@ export type CoreApi = { /** * File system & device control API (Protocol V2 only) */ + getProtoVersion: typeof getProtoVersion; + ping: typeof ping; + devReboot: typeof devReboot; + devGetDeviceInfo: typeof devGetDeviceInfo; + devFirmwareUpdate: typeof devFirmwareUpdate; + devGetFirmwareUpdateStatus: typeof devGetFirmwareUpdateStatus; + factoryDeviceInfoSettings: typeof factoryDeviceInfoSettings; + factoryGetDeviceInfo: typeof factoryGetDeviceInfo; + filesystemFixPermission: typeof filesystemFixPermission; fileRead: typeof fileRead; fileWrite: typeof fileWrite; fileDelete: typeof fileDelete; @@ -215,6 +241,14 @@ export type CoreApi = { dirMake: typeof dirMake; dirRemove: typeof dirRemove; pathInfo: typeof pathInfo; + filesystemFileRead: typeof filesystemFileRead; + filesystemFileWrite: typeof filesystemFileWrite; + filesystemFileDelete: typeof filesystemFileDelete; + filesystemDirList: typeof filesystemDirList; + filesystemDirMake: typeof filesystemDirMake; + filesystemDirRemove: typeof filesystemDirRemove; + filesystemPathInfoQuery: typeof filesystemPathInfoQuery; + filesystemFormat: typeof filesystemFormat; /** * All network function diff --git a/packages/core/src/types/api/protocolV2.ts b/packages/core/src/types/api/protocolV2.ts index 7ecc14123..1080a58a0 100644 --- a/packages/core/src/types/api/protocolV2.ts +++ b/packages/core/src/types/api/protocolV2.ts @@ -1,4 +1,15 @@ import type { Response } from '../params'; +import type { + DevFirmwareTarget, + DevFirmwareUpdateStatus, + DevInfoTargets, + DevInfoTypes, + DevRebootType, + FactoryDeviceInfo, + ProtoVersion, + DeviceInfo as ProtocolV2DeviceInfo, + Success, +} from '@onekeyfe/hd-transport'; // ── Shared response shapes (Protocol V2 file system) ──────────────────── @@ -11,6 +22,7 @@ export type FileInfo = { data?: Uint8Array; data_hash?: number; processed_byte?: number; + chunks?: number; }; export type DirInfo = { @@ -35,22 +47,69 @@ export type PathInfoResult = { directory?: boolean; }; +export type DevRebootParams = { + rebootType?: DevRebootType | string | number; + reboot_type?: DevRebootType | string | number; +}; + +export type DevGetDeviceInfoParams = { + targets?: DevInfoTargets; + types?: DevInfoTypes; + targetHw?: boolean; + targetFw?: boolean; + targetBt?: boolean; + targetSe1?: boolean; + targetSe2?: boolean; + targetSe3?: boolean; + targetSe4?: boolean; + targetStatus?: boolean; + includeVersion?: boolean; + includeBuildId?: boolean; + includeHash?: boolean; + includeSpecific?: boolean; +}; + +export type DevFirmwareUpdateParams = { + targets?: DevFirmwareTarget[]; + targetId?: DevFirmwareTarget['target_id'] | string | number; + target_id?: DevFirmwareTarget['target_id'] | string | number; + path?: string; +}; + +export type FactoryDeviceInfoSettingsParams = { + serial_no?: string; + serialNo?: string; + cpu_info?: string; + cpuInfo?: string; + pre_firmware?: string; + preFirmware?: string; +}; + // ── Method signatures ───────────────────────────────────────────────────── export declare function fileRead( connectId: string, - params: { path: string; offset: number; totalSize: number; chunkLen?: number } + params: { + path: string; + offset?: number; + totalSize?: number; + chunkLen?: number; + uiPercentage?: number; + } ): Response; export declare function fileWrite( connectId: string, params: { path: string; - offset: number; - totalSize: number; - data: ArrayBuffer | Uint8Array | string; + offset?: number; + totalSize?: number; + chunkSize?: number; + chunkLen?: number; + data: ArrayBuffer | Uint8Array | Blob | string; overwrite?: boolean; append?: boolean; + uiPercentage?: number; } ): Response; @@ -59,7 +118,10 @@ export declare function fileDelete( params: { path: string } ): Response; -export declare function dirList(connectId: string, params: { path: string }): Response; +export declare function dirList( + connectId: string, + params: { path: string; depth?: number } +): Response; export declare function dirMake( connectId: string, @@ -75,3 +137,69 @@ export declare function pathInfo( connectId: string, params: { path: string } ): Response; + +export declare function getProtoVersion(connectId: string): Response; + +export declare function ping(connectId: string, params?: { message?: string }): Response; + +export declare function devReboot(connectId: string, params: DevRebootParams): Response; + +export declare function devGetDeviceInfo( + connectId: string, + params?: DevGetDeviceInfoParams +): Response; + +export declare function devFirmwareUpdate( + connectId: string, + params: DevFirmwareUpdateParams +): Response; + +export declare function devGetFirmwareUpdateStatus( + connectId: string +): Response; + +export declare function factoryDeviceInfoSettings( + connectId: string, + params: FactoryDeviceInfoSettingsParams +): Response; + +export declare function factoryGetDeviceInfo(connectId: string): Response; + +export declare function filesystemFixPermission(connectId: string): Response; + +export declare function filesystemFileRead( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemFileWrite( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemFileDelete( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemDirList( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemDirMake( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemDirRemove( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemPathInfoQuery( + connectId: string, + params: Parameters[1] +): ReturnType; + +export declare function filesystemFormat(connectId: string): Response; diff --git a/packages/core/src/types/params.ts b/packages/core/src/types/params.ts index 5bf43ea95..6d7ab004d 100644 --- a/packages/core/src/types/params.ts +++ b/packages/core/src/types/params.ts @@ -1,3 +1,5 @@ +import type { HardwareConnectProtocol } from '@onekeyfe/hd-shared'; + export interface CommonParams { keepSession?: boolean; /** @@ -47,6 +49,11 @@ export interface CommonParams { * Only connect device, not initialize device, only ble connect */ onlyConnectBleDevice?: boolean; + + /** + * Expected transport protocol. If omitted, SDK probes Protocol V1 then Protocol V2. + */ + connectProtocol?: HardwareConnectProtocol; } export type Params = CommonParams & T & { bundle?: undefined }; diff --git a/packages/hd-transport-react-native/src/index.ts b/packages/hd-transport-react-native/src/index.ts index 7cc9c4814..fb163bd9e 100644 --- a/packages/hd-transport-react-native/src/index.ts +++ b/packages/hd-transport-react-native/src/index.ts @@ -14,10 +14,9 @@ import transport, { type OneKeyDeviceInfoBase, PROTOCOL_V2_CHANNEL_BLE_UART, type ProtocolType, - type TransportCallOptions, ProtocolV2FrameAssembler, ProtocolV2Session, - probeProtocolV2, + type TransportCallOptions, } from '@onekeyfe/hd-transport'; import { ERRORS, HardwareErrorCode, createDeferred, isOnekeyDevice } from '@onekeyfe/hd-shared'; @@ -45,7 +44,7 @@ const Log = bleLogger; const transportCache: Record = {}; const BLE_RESPONSE_TIMEOUT_MS = 30_000; -const PROTOCOL_PROBE_TIMEOUT_MS = 1500; +const PROTOCOL_PROBE_TIMEOUT_MS = 1000; let connectOptions: Record = { requestMTU: 256, @@ -252,7 +251,7 @@ export default class ReactNativeBleTransport { } async acquire(input: BleAcquireInput) { - const { uuid, forceCleanRunPromise } = input; + const { uuid, forceCleanRunPromise, expectedProtocol } = input; if (!uuid) { throw ERRORS.TypedError(HardwareErrorCode.BleRequiredUUID); @@ -437,7 +436,7 @@ export default class ReactNativeBleTransport { this.protocolV2Assemblers.set(uuid, new ProtocolV2FrameAssembler()); - const protocolType = await this.detectProtocol(uuid); + const protocolType = await this.detectProtocol(uuid, expectedProtocol); this.emitter?.emit('device-connect', { name: device.name, @@ -638,10 +637,26 @@ export default class ReactNativeBleTransport { return this.callProtocolV2(uuid, name, data, options); } + return this.callProtocolV1(uuid, name, data, options); + } + + private async callProtocolV1( + uuid: string, + name: string, + data: Record, + options?: TransportCallOptions + ) { + if (!this._messages) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); + } + const transport = this.getCachedTransport(uuid); - this.runPromise = createDeferred(); + const runPromise = createDeferred(); + runPromise.promise.catch(() => undefined); + this.runPromise = runPromise; const messages = this._messages; const buffers = buildBuffers(messages, name, data); + let timeout: ReturnType | undefined; async function writeChunkedData( buffers: ByteBuffer[], @@ -712,7 +727,21 @@ export default class ReactNativeBleTransport { } try { - const response = await this.runPromise.promise; + const response = await Promise.race([ + runPromise.promise, + new Promise((_, reject) => { + if (options?.timeoutMs) { + timeout = setTimeout(() => { + const error = ERRORS.TypedError( + HardwareErrorCode.BleTimeoutError, + `BLE response timeout after ${options.timeoutMs}ms for ${name}` + ); + runPromise.reject(error); + reject(error); + }, options.timeoutMs); + } + }), + ]); if (typeof response !== 'string') { throw new Error('Returning data is not string.'); @@ -725,7 +754,10 @@ export default class ReactNativeBleTransport { Log?.error('call error: ', e); throw e; } finally { - this.runPromise = null; + if (timeout) clearTimeout(timeout); + if (this.runPromise === runPromise) { + this.runPromise = null; + } } } @@ -825,32 +857,80 @@ export default class ReactNativeBleTransport { return transport; } - private async detectProtocol(uuid: string): Promise { - const protocol: ProtocolType = (await this.probeProtocolV2(uuid)) ? 'V2' : 'V1'; + private createProtocolMismatchError(expected: ProtocolType) { + return ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `Device protocol mismatch: expected ${expected}, but device did not respond to expected protocol` + ); + } + + private async detectProtocol( + uuid: string, + expectedProtocol?: ProtocolType + ): Promise { + if (expectedProtocol === 'V1') { + if (await this.probeProtocolV1(uuid)) { + this.deviceProtocol.set(uuid, 'V1'); + Log?.debug(`[ReactNativeBleTransport] detectProtocol: uuid=${uuid} -> V1 (expected)`); + return 'V1'; + } + throw this.createProtocolMismatchError(expectedProtocol); + } + + if (expectedProtocol === 'V2') { + if (await this.probeProtocolV2ByPing(uuid)) { + this.deviceProtocol.set(uuid, 'V2'); + Log?.debug(`[ReactNativeBleTransport] detectProtocol: uuid=${uuid} -> V2 (expected)`); + return 'V2'; + } + throw this.createProtocolMismatchError(expectedProtocol); + } + + let protocol: ProtocolType = 'V1'; + if (!(await this.probeProtocolV1(uuid)) && (await this.probeProtocolV2ByPing(uuid))) { + protocol = 'V2'; + } this.deviceProtocol.set(uuid, protocol); Log?.debug(`[ReactNativeBleTransport] detectProtocol: uuid=${uuid} -> ${protocol}`); return protocol; } - private async probeProtocolV2(uuid: string) { + private async probeProtocolV1(uuid: string) { + if (!this._messages) { + return false; + } + + try { + this.deviceProtocol.set(uuid, 'V1'); + await this.callProtocolV1(uuid, 'Initialize', {}, { timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS }); + return true; + } catch (error) { + Log?.debug('[ReactNativeBleTransport] Protocol V1 Initialize probe failed:', error); + return false; + } + } + + private async probeProtocolV2ByPing(uuid: string) { if (!this._messages || !this._messagesV2) { return false; } - return probeProtocolV2({ - call: (name: string, data: Record, options?: { timeoutMs?: number }) => - this.callProtocolV2(uuid, name, data, options), - timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS, - logger: Log, - logPrefix: 'ReactNativeBleTransport', - onBeforeProbe: () => { - this.deviceProtocol.set(uuid, 'V2'); - this.protocolV2Assemblers.get(uuid)?.reset(); - }, - onProbeFailed: () => { - this.protocolV2Assemblers.get(uuid)?.reset(); - }, - }); + try { + this.deviceProtocol.set(uuid, 'V2'); + this.protocolV2Assemblers.get(uuid)?.reset(); + await this.callProtocolV2( + uuid, + 'Ping', + { message: 'probe' }, + { timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS } + ); + return true; + } catch (error) { + this.protocolV2Assemblers.get(uuid)?.reset(); + this.resetProtocolV2Frames(); + Log?.debug('[ReactNativeBleTransport] Protocol V2 Ping probe failed:', error); + return false; + } } private handleProtocolV2Notification(uuid: string, data: Uint8Array) { diff --git a/packages/hd-transport-react-native/src/types.ts b/packages/hd-transport-react-native/src/types.ts index b5a933b14..3f5346c36 100644 --- a/packages/hd-transport-react-native/src/types.ts +++ b/packages/hd-transport-react-native/src/types.ts @@ -1,3 +1,5 @@ +import type { ProtocolType } from '@onekeyfe/hd-transport'; + export type { BleManager as BlePlxManager } from 'react-native-ble-plx'; export type TransportOptions = { @@ -7,4 +9,5 @@ export type TransportOptions = { export type BleAcquireInput = { uuid: string; forceCleanRunPromise?: boolean; + expectedProtocol?: ProtocolType; }; diff --git a/packages/hd-transport-web-device/src/electron-auto-ble-transport.ts b/packages/hd-transport-web-device/src/electron-auto-ble-transport.ts index de8b00360..f2fce2463 100644 --- a/packages/hd-transport-web-device/src/electron-auto-ble-transport.ts +++ b/packages/hd-transport-web-device/src/electron-auto-ble-transport.ts @@ -6,7 +6,6 @@ import transport, { ProtocolV2Session, bytesToHex, hexToBytes, - probeProtocolV2, } from '@onekeyfe/hd-transport'; import { ERRORS, @@ -33,6 +32,7 @@ declare global { export type BleAcquireInput = { uuid: string; forceCleanRunPromise?: boolean; + expectedProtocol?: ProtocolType; }; interface PacketProcessResult { @@ -59,13 +59,13 @@ const BLE_WRITE_DELAY_MS = 5; const BLE_WRITE_MAX_RETRIES = 3; const BLE_WRITE_RETRY_DELAY_MS = 300; const BLE_RESPONSE_TIMEOUT_MS = 30_000; -const PROTOCOL_PROBE_TIMEOUT_MS = 1500; +const PROTOCOL_PROBE_TIMEOUT_MS = 1000; /** * Desktop Electron BLE transport with automatic Protocol V1/V2 detection. * * Protocol V1 devices continue using chunked packets. Protocol V2 is detected - * after connect by probing GetProtoVersion, then uses 0x5A frames for later calls. + * after a Protocol V1 Initialize timeout by probing Protocol V2 Ping. */ export default class ElectronAutoBleTransport { private _messages: ReturnType | undefined; @@ -194,7 +194,7 @@ export default class ElectronAutoBleTransport { } async acquire(input: BleAcquireInput) { - const { uuid, forceCleanRunPromise } = input; + const { uuid, forceCleanRunPromise, expectedProtocol } = input; if (!uuid) { throw ERRORS.TypedError(HardwareErrorCode.BleRequiredUUID); @@ -251,7 +251,7 @@ export default class ElectronAutoBleTransport { ); this.disconnectCleanups.set(uuid, disconnectCleanup); - const protocolType = await this.detectProtocol(uuid); + const protocolType = await this.detectProtocol(uuid, expectedProtocol); this.emitter?.emit('device-connect', { name: device.name, @@ -293,32 +293,80 @@ export default class ElectronAutoBleTransport { } } - private async detectProtocol(uuid: string): Promise { - const protocol: ProtocolType = (await this.probeProtocolV2(uuid)) ? 'V2' : 'V1'; + private createProtocolMismatchError(expected: ProtocolType) { + return ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `Device protocol mismatch: expected ${expected}, but device did not respond to expected protocol` + ); + } + + private async detectProtocol( + uuid: string, + expectedProtocol?: ProtocolType + ): Promise { + if (expectedProtocol === 'V1') { + if (await this.probeProtocolV1(uuid)) { + this.deviceProtocol.set(uuid, 'V1'); + this.Log?.debug(`[Auto BLE] detectProtocol: uuid=${uuid} -> V1 (expected)`); + return 'V1'; + } + throw this.createProtocolMismatchError(expectedProtocol); + } + + if (expectedProtocol === 'V2') { + if (await this.probeProtocolV2ByPing(uuid)) { + this.deviceProtocol.set(uuid, 'V2'); + this.Log?.debug(`[Auto BLE] detectProtocol: uuid=${uuid} -> V2 (expected)`); + return 'V2'; + } + throw this.createProtocolMismatchError(expectedProtocol); + } + + let protocol: ProtocolType = 'V1'; + if (!(await this.probeProtocolV1(uuid)) && (await this.probeProtocolV2ByPing(uuid))) { + protocol = 'V2'; + } this.deviceProtocol.set(uuid, protocol); this.Log?.debug(`[Auto BLE] detectProtocol: uuid=${uuid} -> ${protocol}`); return protocol; } - private async probeProtocolV2(uuid: string) { + private async probeProtocolV1(uuid: string) { + if (!this._messages) { + return false; + } + + try { + this.deviceProtocol.set(uuid, 'V1'); + await this.callProtocolV1(uuid, 'Initialize', {}, { timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS }); + return true; + } catch (error) { + this.Log?.debug('[Auto BLE] Protocol V1 Initialize probe failed:', error); + return false; + } + } + + private async probeProtocolV2ByPing(uuid: string) { if (!this._messages || !this._messagesV2) { return false; } - return probeProtocolV2({ - call: (name: string, data: Record, options?: { timeoutMs?: number }) => - this.callProtocolV2(uuid, name, data, options), - timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS, - logger: this.Log, - logPrefix: 'Auto BLE', - onBeforeProbe: () => { - this.deviceProtocol.set(uuid, 'V2'); - this.v2Assemblers.get(uuid)?.reset(); - }, - onProbeFailed: () => { - this.v2Assemblers.get(uuid)?.reset(); - }, - }); + try { + this.deviceProtocol.set(uuid, 'V2'); + this.v2Assemblers.get(uuid)?.reset(); + await this.callProtocolV2( + uuid, + 'Ping', + { message: 'probe' }, + { timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS } + ); + return true; + } catch (error) { + this.v2Assemblers.get(uuid)?.reset(); + this.resetProtocolV2Frames(); + this.Log?.debug('[Auto BLE] Protocol V2 Ping probe failed:', error); + return false; + } } private async writeWithChunking(uuid: string, hexData: string): Promise { @@ -498,10 +546,15 @@ export default class ElectronAutoBleTransport { if (protocol === 'V2') { return this.callProtocolV2(uuid, name, data, options); } - return this.callProtocolV1(uuid, name, data); + return this.callProtocolV1(uuid, name, data, options); } - private async callProtocolV1(uuid: string, name: string, data: Record) { + private async callProtocolV1( + uuid: string, + name: string, + data: Record, + options?: TransportCallOptions + ) { if (!this._messages) { throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); } @@ -511,9 +564,12 @@ export default class ElectronAutoBleTransport { throw ERRORS.TypedError(HardwareErrorCode.TransportCallInProgress); } - this.runPromise = createDeferred(); + const runPromise = createDeferred(); + runPromise.promise.catch(() => undefined); + this.runPromise = runPromise; const messages = this._messages; const buffers = buildBuffers(messages, name, data); + let timeout: ReturnType | undefined; try { if (!window.desktopApi?.nobleBle) { @@ -532,7 +588,21 @@ export default class ElectronAutoBleTransport { await window.desktopApi.nobleBle.write(uuid, hexString); } - const response = await this.runPromise.promise; + const response = await Promise.race([ + runPromise.promise, + new Promise((_, reject) => { + if (options?.timeoutMs) { + timeout = setTimeout(() => { + const error = ERRORS.TypedError( + HardwareErrorCode.BleTimeoutError, + `BLE response timeout after ${options.timeoutMs}ms for ${name}` + ); + runPromise.reject(error); + reject(error); + }, options.timeoutMs); + } + }), + ]); if (typeof response !== 'string') { throw new Error('Returning data is not string.'); } @@ -543,7 +613,10 @@ export default class ElectronAutoBleTransport { this.Log?.error('[Auto BLE] Protocol V1 call error:', e); throw e; } finally { - this.runPromise = null; + if (timeout) clearTimeout(timeout); + if (this.runPromise === runPromise) { + this.runPromise = null; + } } } diff --git a/packages/hd-transport-web-device/src/webusb.ts b/packages/hd-transport-web-device/src/webusb.ts index 0ff81827d..b484828ea 100644 --- a/packages/hd-transport-web-device/src/webusb.ts +++ b/packages/hd-transport-web-device/src/webusb.ts @@ -5,7 +5,6 @@ import transport, { PROTOCOL_V2_FRAME_MAX_BYTES, ProtocolV2FrameAssembler, ProtocolV2Session, - probeProtocolV2, } from '@onekeyfe/hd-transport'; import { ERRORS, HardwareErrorCode, ONEKEY_WEBUSB_FILTER, wait } from '@onekeyfe/hd-shared'; import ByteBuffer from 'bytebuffer'; @@ -26,9 +25,7 @@ const PACKET_SIZE = 64; const HEADER_LENGTH = 6; const PACKET_IO_MAX_RETRIES = 3; const PACKET_IO_RETRY_DELAY = 300; -const PROTOCOL_PROBE_TIMEOUT = 1500; -const PROTOCOL_V2_PRODUCT_NAME_RE = /\bpro\s*2\b|pro2/i; -const LEGACY_PROTOCOL_PRODUCT_NAME_RE = /\bonekey\s+(classic|mini|pro|touch)\b/i; +const PROTOCOL_PROBE_TIMEOUT = 1000; /** * Device information with path and WebUSB device instance @@ -45,18 +42,19 @@ interface DeviceEndpoints { endpointOut: number; } +interface TransferCancelToken { + cancelled: boolean; +} + export default class WebUsbTransport { messages: ReturnType | undefined; /** Protobuf schema for Protocol V2 transports. */ messagesV2: ReturnType | undefined; - /** Per-path protocol type detected by descriptor heuristic or active wire-level probe. */ + /** Per-path protocol type detected by active wire-level probe. */ private deviceProtocol: Map = new Map(); - /** Marks whether a cached protocol came from a USB descriptor heuristic or active probe. */ - private deviceProtocolSource: Map = new Map(); - /** Per-path USB endpoint / interface numbers (discovered from USB descriptors) */ private deviceEndpoints: Map = new Map(); @@ -183,7 +181,7 @@ export default class WebUsbTransport { if (!input.path) return; try { await this.connect(input.path ?? '', true); - await this.detectProtocol(input.path); + await this.detectProtocol(input.path, input.expectedProtocol); return await Promise.resolve(input.path); } catch (e) { this.Log.debug('acquire error: ', e instanceof Error ? `${e.name}: ${e.message}` : String(e)); @@ -193,51 +191,47 @@ export default class WebUsbTransport { /** * Determine protocol type after connect. - * Known legacy descriptors can skip probing; otherwise Protocol V2 must answer - * GetProtoVersion or bootloader status before we select the V2 path. + * Probe Protocol V1 first with Initialize. If it does not answer in time, + * fall back to a Protocol V2 Ping probe. */ - private async detectProtocol(path: string): Promise { - const cachedProtocol = this.deviceProtocol.get(path); - if (cachedProtocol) { - this.Log.debug( - `[WebUsbTransport] detectProtocol: path=${path} -> ${cachedProtocol} (cached)` - ); - return cachedProtocol; + private createProtocolMismatchError(expected: ProtocolType) { + return ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `Device protocol mismatch: expected ${expected}, but device did not respond to expected protocol` + ); + } + + private async detectProtocol( + path: string, + expectedProtocol?: ProtocolType + ): Promise { + if (expectedProtocol === 'V1') { + if (await this.probeProtocolV1(path)) { + this.deviceProtocol.set(path, 'V1'); + this.Log.debug(`[WebUsbTransport] detectProtocol: path=${path} -> V1 (expected)`); + return 'V1'; + } + throw this.createProtocolMismatchError(expectedProtocol); } - const heuristicProtocol = this.detectProtocolFromUsbDescriptor(path); - if (heuristicProtocol) { - this.deviceProtocol.set(path, heuristicProtocol); - this.deviceProtocolSource.set(path, 'heuristic'); - this.Log.debug( - `[WebUsbTransport] detectProtocol: path=${path} -> ${heuristicProtocol} (descriptor)` - ); - return heuristicProtocol; + if (expectedProtocol === 'V2') { + if (await this.probeProtocolV2ByPing(path)) { + this.deviceProtocol.set(path, 'V2'); + this.Log.debug(`[WebUsbTransport] detectProtocol: path=${path} -> V2 (expected)`); + return 'V2'; + } + throw this.createProtocolMismatchError(expectedProtocol); } - const protocol: ProtocolType = (await this.probeProtocolV2(path)) ? 'V2' : 'V1'; + let protocol: ProtocolType = 'V1'; + if (!(await this.probeProtocolV1(path)) && (await this.probeProtocolV2ByPing(path))) { + protocol = 'V2'; + } this.deviceProtocol.set(path, protocol); - this.deviceProtocolSource.set(path, 'probe'); this.Log.debug(`[WebUsbTransport] detectProtocol: path=${path} -> ${protocol}`); return protocol; } - private detectProtocolFromUsbDescriptor(path: string): ProtocolType | undefined { - const deviceInfo = this.deviceList.find(d => d.path === path); - const productName = deviceInfo?.device.productName?.trim(); - if (!productName) return undefined; - - if (PROTOCOL_V2_PRODUCT_NAME_RE.test(productName)) { - return undefined; - } - - if (LEGACY_PROTOCOL_PRODUCT_NAME_RE.test(productName)) { - return 'V1'; - } - - return undefined; - } - /** * Find device by path */ @@ -327,7 +321,11 @@ export default class WebUsbTransport { await device.open(); - if (first) { + if ( + first || + !device.configuration || + device.configuration.configurationValue !== this.configurationId + ) { await device.selectConfiguration(this.configurationId); } @@ -453,9 +451,16 @@ export default class WebUsbTransport { throw lastError; } - private async transferInWithRetry(path: string, length: number): Promise { + private async transferInWithRetry( + path: string, + length: number, + cancelToken?: TransferCancelToken + ): Promise { let lastError: unknown; for (let attempt = 1; attempt <= PACKET_IO_MAX_RETRIES; attempt += 1) { + if (cancelToken?.cancelled) { + throw new Error('transferIn cancelled'); + } try { const device = await this.findDevice(path); if (!device.opened) { @@ -467,6 +472,9 @@ export default class WebUsbTransport { return this.getTransferInData(result); } catch (error) { lastError = error; + if (cancelToken?.cancelled) { + throw error; + } const shouldRetry = attempt < PACKET_IO_MAX_RETRIES && this.isRetryablePacketIoError(error); if (!shouldRetry) { throw error; @@ -507,21 +515,42 @@ export default class WebUsbTransport { await this.connect(path, false); } - private async withProtocolV2ReadTimeout( + private async withProtocolReadTimeout( path: string, promise: Promise, - timeoutMs: number + timeoutMs: number, + protocol: ProtocolType, + onTimeout?: () => void ): Promise { let timer: ReturnType | undefined; + let timedOut = false; + const waitForeverAfterTimeout = () => new Promise(() => {}); + const guardedPromise = promise.then( + value => (timedOut ? waitForeverAfterTimeout() : value), + error => { + if (timedOut) { + return waitForeverAfterTimeout(); + } + throw error; + } + ); try { return await Promise.race([ - promise, + guardedPromise, new Promise((_, reject) => { - timer = setTimeout(() => { - this.resetConnectionAfterProbe(path).catch(error => { - this.Log.debug('[WebUsbTransport] reset after Protocol V2 timeout failed:', error); - }); - reject(new Error(`Protocol V2 read timeout after ${timeoutMs}ms`)); + timer = setTimeout(async () => { + timedOut = true; + onTimeout?.(); + try { + await this.resetConnectionAfterProbe(path); + } catch (error) { + this.Log.debug( + `[WebUsbTransport] reset after Protocol ${protocol} timeout failed:`, + error + ); + } finally { + reject(new Error(`Protocol ${protocol} read timeout after ${timeoutMs}ms`)); + } }, timeoutMs); }), ]); @@ -530,19 +559,38 @@ export default class WebUsbTransport { } } - private async probeProtocolV2(path: string) { + private async probeProtocolV1(path: string) { + if (!this.messages) { + return false; + } + + try { + await this.callProtocolV1(path, 'Initialize', {}, { timeoutMs: PROTOCOL_PROBE_TIMEOUT }); + return true; + } catch (error) { + this.Log.debug('[WebUsbTransport] Protocol V1 Initialize probe failed:', error); + return false; + } + } + + private async probeProtocolV2ByPing(path: string) { if (!this.messages || !this.messagesV2) { return false; } - return probeProtocolV2({ - call: (name: string, data: Record, options?: { timeoutMs?: number }) => - this.callProtocolV2(path, name, data, options), - timeoutMs: PROTOCOL_PROBE_TIMEOUT, - logger: this.Log, - logPrefix: 'WebUsbTransport', - onProbeFailed: async () => this.resetConnectionAfterProbe(path), - }); + try { + await this.callProtocolV2( + path, + 'Ping', + { message: 'probe' }, + { timeoutMs: PROTOCOL_PROBE_TIMEOUT } + ); + return true; + } catch (error) { + this.Log.debug('[WebUsbTransport] Protocol V2 Ping probe failed:', error); + await this.resetConnectionAfterProbe(path); + return false; + } } /** @@ -575,8 +623,20 @@ export default class WebUsbTransport { return this.callProtocolV2(path, name, data, options); } - // --- Protocol V1 path (64-byte chunked 0x3F framing) --- + return this.callProtocolV1(path, name, data, options); + } + + private async callProtocolV1( + path: string, + name: string, + data: Record, + options?: TransportCallOptions + ) { const { messages } = this; + if (!messages) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); + } + const encodeBuffers = ProtocolV1.encode(messages, name, data); for (const buffer of encodeBuffers) { @@ -586,7 +646,7 @@ export default class WebUsbTransport { await this.transferOutWithRetry(path, newArray); } - const resData = await this.receiveData(path); + const resData = await this.receiveData(path, options?.timeoutMs); if (typeof resData !== 'string') { throw ERRORS.TypedError(HardwareErrorCode.NetworkError, 'Returning data is not string.'); } @@ -640,9 +700,18 @@ export default class WebUsbTransport { const deadline = timeoutMs ? Date.now() + timeoutMs : undefined; while (!frame) { - const transferIn = this.transferInWithRetry(path, PROTOCOL_V2_FRAME_MAX_BYTES); + const cancelToken = { cancelled: false }; + const transferIn = this.transferInWithRetry(path, PROTOCOL_V2_FRAME_MAX_BYTES, cancelToken); const dataView = deadline - ? await this.withProtocolV2ReadTimeout(path, transferIn, Math.max(deadline - Date.now(), 1)) + ? await this.withProtocolReadTimeout( + path, + transferIn, + Math.max(deadline - Date.now(), 1), + 'V2', + () => { + cancelToken.cancelled = true; + } + ) : await transferIn; const bytes = new Uint8Array( this.toArrayBuffer( @@ -664,8 +733,25 @@ export default class WebUsbTransport { /** * Receive data from device */ - async receiveData(path: string) { - const firstPacketData = await this.transferInWithRetry(path, PACKET_SIZE); + async receiveData(path: string, timeoutMs?: number) { + const deadline = timeoutMs ? Date.now() + timeoutMs : undefined; + const readPacket = async () => { + const cancelToken = { cancelled: false }; + const transferIn = this.transferInWithRetry(path, PACKET_SIZE, cancelToken); + return deadline + ? this.withProtocolReadTimeout( + path, + transferIn, + Math.max(deadline - Date.now(), 1), + 'V1', + () => { + cancelToken.cancelled = true; + } + ) + : transferIn; + }; + + const firstPacketData = await readPacket(); const firstData = this.toArrayBuffer(firstPacketData.buffer.slice(1)); const { length, typeId, restBuffer } = decodeProtocol.decodeChunked(firstData); @@ -679,7 +765,7 @@ export default class WebUsbTransport { } while (decoded.offset < lengthWithHeader) { - const packetData = await this.transferInWithRetry(path, PACKET_SIZE); + const packetData = await readPacket(); const buffer = this.toArrayBuffer(packetData.buffer.slice(1)); if (lengthWithHeader - decoded.offset >= PACKET_SIZE) { decoded.append(buffer); @@ -701,13 +787,7 @@ export default class WebUsbTransport { const ifaceNum = endpoints?.interfaceNumber ?? this.interfaceId; await device.releaseInterface(ifaceNum); await device.close(); - if ( - this.deviceProtocol.get(path) !== 'V2' && - this.deviceProtocolSource.get(path) !== 'heuristic' - ) { - this.deviceProtocol.delete(path); - this.deviceProtocolSource.delete(path); - } + this.deviceProtocol.delete(path); this.deviceEndpoints.delete(path); } diff --git a/packages/hd-transport/__tests__/protocol-v2.test.js b/packages/hd-transport/__tests__/protocol-v2.test.js index cc7e3b8fc..421c891d0 100644 --- a/packages/hd-transport/__tests__/protocol-v2.test.js +++ b/packages/hd-transport/__tests__/protocol-v2.test.js @@ -54,6 +54,14 @@ const protocolV2Messages = parseConfigure({ }, }, }, + Success: { + fields: { + message: { + type: 'string', + id: 1, + }, + }, + }, DevFirmwareUpdate: { fields: {}, }, @@ -74,6 +82,7 @@ const protocolV2Messages = parseConfigure({ MessageType_GetProtoVersion: 60200, MessageType_ProtoVersion: 60201, MessageType_Ping: 60206, + MessageType_Success: 60207, MessageType_DevFirmwareUpdate: 61000, MessageType_DevFirmwareInstallProgress: 61001, }, @@ -119,13 +128,13 @@ describe('Protocol V2 framing and session', () => { }); }); - test('uses V1 schema fallback when a V2 frame carries a V1 message type', () => { + test('decodes Protocol V2 frames with the Protocol V2 catalog first', () => { const frame = ProtocolV2.encode(schemas, 'Success', { message: 'ok', }); const parsed = protoV2.parseProtoV2Frame(frame); - expect(parsed.msgType).toBe(2); + expect(parsed.msgType).toBe(60207); const decoded = ProtocolV2.decode(schemas, frame); expect(decoded.type).toBe('Success'); @@ -188,6 +197,8 @@ describe('Protocol V2 framing and session', () => { const result = await session.call('GetProtoVersion', {}); expect(written).toHaveLength(1); + expect(written[0][4]).toBe(1); + expect(written[0][5]).toBe(0); expect(protoV2.parseProtoV2Frame(written[0]).msgType).toBe(60200); expect(result).toEqual({ type: 'ProtoVersion', diff --git a/packages/hd-transport/src/constants.ts b/packages/hd-transport/src/constants.ts index 26e167942..b9f0fd995 100644 --- a/packages/hd-transport/src/constants.ts +++ b/packages/hd-transport/src/constants.ts @@ -27,5 +27,5 @@ export const PROTOCOL_V2_CHANNEL_USB = 0; export const PROTOCOL_V2_CHANNEL_BLE_UART = 1; export const PROTOCOL_V2_CHANNEL_SOCKET = 2; -/** Protocol V2 packet_src for protobuf command/response traffic */ -export const PROTOCOL_V2_PACKET_SRC_COMMAND = 1; +/** Protocol V2 packet_src for protobuf message traffic. Firmware routes 0 to the protobuf dispatcher. */ +export const PROTOCOL_V2_PACKET_SRC_COMMAND = 0; diff --git a/packages/hd-transport/src/index.ts b/packages/hd-transport/src/index.ts index 66c7abf14..466fb317d 100644 --- a/packages/hd-transport/src/index.ts +++ b/packages/hd-transport/src/index.ts @@ -1,5 +1,5 @@ import * as protobuf from 'protobufjs/light'; -import * as Long from 'long'; +import Long from 'long'; import { PROTOCOL_V2_SYS_MESSAGE_THRESHOLD, diff --git a/packages/hd-transport/src/protocol-session.ts b/packages/hd-transport/src/protocol-session.ts index 1b9661f0d..f01a5594d 100644 --- a/packages/hd-transport/src/protocol-session.ts +++ b/packages/hd-transport/src/protocol-session.ts @@ -51,6 +51,20 @@ export function bytesToHex(bytes: Uint8Array): string { .join(''); } +const PROTOCOL_V2_DEBUG_HEX_LIMIT = 256; + +function bytesToDebugHex(bytes: Uint8Array): string { + const visibleBytes = + bytes.length > PROTOCOL_V2_DEBUG_HEX_LIMIT + ? bytes.slice(0, PROTOCOL_V2_DEBUG_HEX_LIMIT) + : bytes; + const suffix = + bytes.length > PROTOCOL_V2_DEBUG_HEX_LIMIT + ? `...(+${bytes.length - PROTOCOL_V2_DEBUG_HEX_LIMIT}B)` + : ''; + return `${bytesToHex(visibleBytes)}${suffix}`; +} + export function getErrorMessage(error: unknown) { if (!error) return ''; if (typeof error === 'string') return error; @@ -111,6 +125,12 @@ export class ProtocolV2Session { }); const expectedSeq = frame[6]; + logger?.debug?.( + `[${logPrefix}] TX frame name=${name} len=${frame.length} router=${frame[4]} attr=${ + frame[5] + } seq=${expectedSeq} hex=${bytesToDebugHex(frame)}` + ); + await writeFrame(frame); // Some Protocol V2 operations emit progress notifications before the @@ -119,6 +139,11 @@ export class ProtocolV2Session { // eslint-disable-next-line no-constant-condition while (true) { const rxFrame = await readFrame(); + logger?.debug?.( + `[${logPrefix}] RX frame len=${rxFrame.length} router=${rxFrame[4]} attr=${ + rxFrame[5] + } seq=${rxFrame[6]} hex=${bytesToDebugHex(rxFrame)}` + ); const decoded = ProtocolV2.decode(schemas, rxFrame); if (decoded.seq !== expectedSeq) { logger?.debug?.( diff --git a/packages/hd-transport/src/serialization/protocols.ts b/packages/hd-transport/src/serialization/protocols.ts index 5e9decc8c..fe64e40d6 100644 --- a/packages/hd-transport/src/serialization/protocols.ts +++ b/packages/hd-transport/src/serialization/protocols.ts @@ -30,11 +30,12 @@ const resolveProtocolV2EncodeSchema = (name: string, schemas: ProtocolV2Schemas) } }; -const resolveProtocolV2DecodeSchema = (msgType: number, schemas: ProtocolV2Schemas) => { - if (msgType >= PROTOCOL_V2_SYS_MESSAGE_THRESHOLD) { - return schemas.protocolV2; +const createProtocolV2MessageFromType = (msgType: number, schemas: ProtocolV2Schemas) => { + try { + return createMessageFromType(schemas.protocolV2, msgType); + } catch { + return createMessageFromType(schemas.protocolV1, msgType); } - return schemas.protocolV1; }; export const ProtocolV1 = { @@ -66,8 +67,7 @@ export const ProtocolV2 = { decode(schemas: ProtocolV2Schemas, frame: Uint8Array) { const { msgType, pbPayload, seq } = parseProtoV2Frame(frame); - const decodeMessages = resolveProtocolV2DecodeSchema(msgType, schemas); - const { Message, messageName } = createMessageFromType(decodeMessages, msgType); + const { Message, messageName } = createProtocolV2MessageFromType(msgType, schemas); const rxByteBuffer = ByteBuffer.wrap(Buffer.from(pbPayload) as unknown as ArrayBuffer); const message = decodeProtobuf(Message, rxByteBuffer); diff --git a/packages/hd-transport/src/types/transport.ts b/packages/hd-transport/src/types/transport.ts index a130f95f9..f5df00a82 100644 --- a/packages/hd-transport/src/types/transport.ts +++ b/packages/hd-transport/src/types/transport.ts @@ -42,6 +42,7 @@ export type AcquireInput = { previous?: string | null; uuid?: string; forceCleanRunPromise?: boolean; + expectedProtocol?: ProtocolType; }; export type MessageFromOneKey = { type: string; message: Record }; diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts index 1f47940f2..c9d3a73a7 100644 --- a/packages/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -1,5 +1,13 @@ import { HardwareErrorCode } from './HardwareError'; +export const HARDWARE_CONNECT_PROTOCOL = { + V1: 'V1', + V2: 'V2', +} as const; + +export type HardwareConnectProtocol = + (typeof HARDWARE_CONNECT_PROTOCOL)[keyof typeof HARDWARE_CONNECT_PROTOCOL]; + export const ONEKEY_WEBUSB_FILTER = [ { vendorId: 0x1209, productId: 0x53c0 }, // Classic Boot、Classic1s Boot、Mini Boot { vendorId: 0x1209, productId: 0x53c1 }, // Classic Firmware、Classic1s Firmware、Mini Firmware、Pro Firmware、Touch Firmware From ab094c52a89f9e8e108fe4277897559251f08fa6 Mon Sep 17 00:00:00 2001 From: wabicai Date: Thu, 7 May 2026 21:19:02 +0800 Subject: [PATCH 15/73] fix: speed up pro2 debug device connect --- .../components/common/DeviceNotConnectedState.tsx | 12 +++++++++--- .../expo-playground/app/routes/pro2-debug.tsx | 5 ++++- .../expo-playground/app/services/hardwareService.ts | 7 +++++-- packages/core/src/api/SearchDevices.ts | 4 +++- packages/core/src/device/Device.ts | 6 +++--- packages/core/src/device/DevicePool.ts | 2 +- packages/core/src/inject.ts | 2 +- packages/core/src/types/api/searchDevices.ts | 4 ++-- 8 files changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/connect-examples/expo-playground/app/components/common/DeviceNotConnectedState.tsx b/packages/connect-examples/expo-playground/app/components/common/DeviceNotConnectedState.tsx index c9a8b0c33..078f000ad 100644 --- a/packages/connect-examples/expo-playground/app/components/common/DeviceNotConnectedState.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/DeviceNotConnectedState.tsx @@ -6,17 +6,20 @@ import { useDeviceStore } from '../../store/deviceStore'; import { searchDevices } from '../../services/hardwareService'; import { useToast } from '../../hooks/use-toast'; import { SDKUtils } from '../../utils/hardwareInstance'; +import type { HardwareConnectProtocol } from '@onekeyfe/hd-shared'; interface DeviceNotConnectedStateProps { className?: string; showFullPage?: boolean; title?: string; description?: string; + connectProtocol?: HardwareConnectProtocol; } export function DeviceNotConnectedState({ className = '', showFullPage = false, + connectProtocol, }: DeviceNotConnectedStateProps) { const { t } = useTranslation(); const { toast } = useToast(); @@ -49,7 +52,8 @@ export function DeviceNotConnectedState({ try { // 搜索设备 - const searchResult = await searchDevices(); + const protocolParams = connectProtocol ? { connectProtocol } : undefined; + const searchResult = await searchDevices(protocolParams); if (searchResult.success && searchResult.payload) { const devices = searchResult.payload; @@ -62,8 +66,10 @@ export function DeviceNotConnectedState({ // 获取设备特征信息 const sdk = await SDKUtils.getInstance(); - if (targetDevice.connectId && targetDevice.deviceId) { - const featuresResult = await sdk.getFeatures(targetDevice.connectId); + if (targetDevice.features) { + setDeviceFeatures(targetDevice.features); + } else if (targetDevice.connectId && targetDevice.deviceId) { + const featuresResult = await sdk.getFeatures(targetDevice.connectId, protocolParams); if (featuresResult.success && featuresResult.payload) { setDeviceFeatures(featuresResult.payload); } diff --git a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx index 168f20627..2e56d6c65 100644 --- a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx +++ b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx @@ -438,7 +438,10 @@ export default function Pro2DebugPage() { {!currentDevice && (
- +
)} diff --git a/packages/connect-examples/expo-playground/app/services/hardwareService.ts b/packages/connect-examples/expo-playground/app/services/hardwareService.ts index 16cd2efe9..d677cb48a 100644 --- a/packages/connect-examples/expo-playground/app/services/hardwareService.ts +++ b/packages/connect-examples/expo-playground/app/services/hardwareService.ts @@ -11,6 +11,7 @@ import { import { useHardwareStore } from '../store/hardwareStore'; import { METHODS_REQUIRING_PASSPHRASE_CHECK } from '../utils/constants'; import { previewHardwareParams } from './previewHardwareParams'; +import type { HardwareConnectProtocol } from '@onekeyfe/hd-shared'; // 使用 hd-core 的标准类型 export type ApiResponse = Success | Unsuccessful; export type HardwareApiMethod = keyof CoreApi; @@ -272,7 +273,9 @@ export async function callHardwareAPI( } } // 搜索设备 -export async function searchDevices(): Promise { +export async function searchDevices(params?: { + connectProtocol?: HardwareConnectProtocol; +}): Promise { logRequest('Searching for devices'); const currentTransport = TransportManager.getCurrentTransport(); @@ -314,7 +317,7 @@ export async function searchDevices(): Promise { } // 对于所有transport类型,使用标准的searchDevices - const response = await sdkInstance.searchDevices(); + const response = await sdkInstance.searchDevices(params); if (response.success && response.payload) { logResponse('Devices found', { diff --git a/packages/core/src/api/SearchDevices.ts b/packages/core/src/api/SearchDevices.ts index f15e917e8..74caca379 100644 --- a/packages/core/src/api/SearchDevices.ts +++ b/packages/core/src/api/SearchDevices.ts @@ -44,7 +44,9 @@ export default class SearchDevices extends BaseMethod { return devices; } - const { deviceList } = await DevicePool.getDevices(devicesDescriptor); + const { deviceList } = await DevicePool.getDevices(devicesDescriptor, undefined, { + connectProtocol: this.payload.connectProtocol, + }); return deviceList.map(device => device.toMessageObject()); } } diff --git a/packages/core/src/device/Device.ts b/packages/core/src/device/Device.ts index 1780b8634..8462f92ec 100644 --- a/packages/core/src/device/Device.ts +++ b/packages/core/src/device/Device.ts @@ -254,13 +254,13 @@ export class Device extends EventEmitter { * Device connect * @returns {Promise} */ - connect() { + connect(connectProtocol?: HardwareConnectProtocol) { const env = DataManager.getSettings('env'); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve, reject) => { if (DataManager.isBleConnect(env)) { try { - await this.acquire(); + await this.acquire(connectProtocol); resolve(true); } catch (error) { reject(error); @@ -270,7 +270,7 @@ export class Device extends EventEmitter { // 不存在 Session ID 或存在 Session ID 但设备在别处使用,都需要 acquire 获取最新 sessionID if (!this.mainId || (!this.isUsedHere() && this.originalDescriptor)) { try { - await this.acquire(); + await this.acquire(connectProtocol); resolve(true); } catch (error) { reject(error); diff --git a/packages/core/src/device/DevicePool.ts b/packages/core/src/device/DevicePool.ts index 1f027f46e..dd0d53e3b 100644 --- a/packages/core/src/device/DevicePool.ts +++ b/packages/core/src/device/DevicePool.ts @@ -150,7 +150,7 @@ export class DevicePool extends EventEmitter { if (!device) { device = Device.fromDescriptor(descriptor); device.deviceConnector = this.connector; - await device.connect(); + await device.connect(initOptions?.connectProtocol); await device.initialize(initOptions); await device.release(); } diff --git a/packages/core/src/inject.ts b/packages/core/src/inject.ts index fa94210ea..5e25cb829 100644 --- a/packages/core/src/inject.ts +++ b/packages/core/src/inject.ts @@ -103,7 +103,7 @@ export const createCoreApi = ( /** * 搜索设备 */ - searchDevices: () => call({ method: 'searchDevices' }), + searchDevices: params => call({ ...params, method: 'searchDevices' }), /** * 获取设备信息 diff --git a/packages/core/src/types/api/searchDevices.ts b/packages/core/src/types/api/searchDevices.ts index aeb127e4a..bbb7f5693 100644 --- a/packages/core/src/types/api/searchDevices.ts +++ b/packages/core/src/types/api/searchDevices.ts @@ -1,4 +1,4 @@ import type { SearchDevice } from '../device'; -import type { Response } from '../params'; +import type { CommonParams, Response } from '../params'; -export declare function searchDevices(): Response; +export declare function searchDevices(params?: CommonParams): Response; From 2efdb54eb6874d623d3460602d40d187355493eb Mon Sep 17 00:00:00 2001 From: wabicai Date: Thu, 7 May 2026 21:45:52 +0800 Subject: [PATCH 16/73] fix: filewrite log --- .gitignore | 2 ++ .../app/components/providers/SDKProvider.tsx | 12 ++++++++ packages/core/__tests__/protocol-v2.test.ts | 18 +++++++++++ packages/core/src/api/FileWrite.ts | 30 +++++++++++++++++++ .../hd-transport-web-device/src/webusb.ts | 8 ++++- 5 files changed, 69 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fa2395cd2..46085f4f4 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,5 @@ packages/connect-examples/expo-example/web-build # Expo web export **/web-build +.vercel +.env*.local diff --git a/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx b/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx index 8ec4b1d0f..89fe7f9dd 100644 --- a/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx +++ b/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx @@ -158,6 +158,18 @@ export const SDKProvider: React.FC = ({ children }) => { } break; + case UI_REQUEST.DEVICE_PROGRESS: + if (message.payload && typeof message.payload === 'object') { + const payload = message.payload as { progress?: number }; + if (typeof payload.progress === 'number') { + useFirmwareProgressStore.getState().setProgressData({ + progress: payload.progress, + progressType: 'transferData', + }); + } + } + break; + default: break; } diff --git a/packages/core/__tests__/protocol-v2.test.ts b/packages/core/__tests__/protocol-v2.test.ts index 82f9931ef..a72158d5f 100644 --- a/packages/core/__tests__/protocol-v2.test.ts +++ b/packages/core/__tests__/protocol-v2.test.ts @@ -3,6 +3,7 @@ import JSZip from 'jszip'; import FileRead from '../src/api/FileRead'; import FileWrite from '../src/api/FileWrite'; import FirmwareUpdateV3 from '../src/api/FirmwareUpdateV3'; +import { UI_REQUEST } from '../src/events/ui-request'; import { getProtocolV2Features, normalizeProtocolV2Features } from '../src/protocols/protocol-v2'; jest.mock('../src/data/config', () => ({ @@ -351,6 +352,7 @@ describe('Protocol V2 file write method', () => { }, }); (method as any).device = { commands: { call } }; + method.postMessage = jest.fn(); method.init(); await method.run(); @@ -366,6 +368,11 @@ describe('Protocol V2 file write method', () => { append: false, ui_percentage: 99, }); + expect(method.postMessage).toHaveBeenCalledWith({ + event: 'UI_EVENT', + type: UI_REQUEST.DEVICE_PROGRESS, + payload: { progress: 100 }, + }); }); test('splits data larger than the Protocol V2 file payload limit', async () => { @@ -382,6 +389,7 @@ describe('Protocol V2 file write method', () => { }, }); (method as any).device = { commands: { call } }; + method.postMessage = jest.fn(); method.init(); const result = await method.run(); @@ -414,6 +422,16 @@ describe('Protocol V2 file write method', () => { processed_byte: 2049, chunks: 2, }); + expect(method.postMessage).toHaveBeenNthCalledWith(1, { + event: 'UI_EVENT', + type: UI_REQUEST.DEVICE_PROGRESS, + payload: { progress: 99 }, + }); + expect(method.postMessage).toHaveBeenNthCalledWith(2, { + event: 'UI_EVENT', + type: UI_REQUEST.DEVICE_PROGRESS, + payload: { progress: 100 }, + }); }); }); diff --git a/packages/core/src/api/FileWrite.ts b/packages/core/src/api/FileWrite.ts index 7f67b44fc..5e98337b5 100644 --- a/packages/core/src/api/FileWrite.ts +++ b/packages/core/src/api/FileWrite.ts @@ -2,6 +2,7 @@ import { PROTOCOL_V2_FILE_CHUNK_SIZE } from '@onekeyfe/hd-transport'; import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; import { BaseMethod } from './BaseMethod'; +import { UI_REQUEST, createUiMessage } from '../events/ui-request'; export type FileWriteParams = { path: string; @@ -46,6 +47,23 @@ function normalizeChunkSize(value: unknown): number { ); } +function getConfirmedProgress( + processedByte: number, + totalSize: number, + written: number, + dataLength: number +) { + if (Number.isFinite(processedByte) && Number.isFinite(totalSize) && totalSize > 0) { + if (processedByte >= totalSize) return 100; + return Math.min(Math.max(Math.floor((processedByte / totalSize) * 100), 0), 99); + } + if (dataLength > 0) { + if (written >= dataLength) return 100; + return Math.min(Math.max(Math.floor((written / dataLength) * 100), 0), 99); + } + return 100; +} + export default class FileWrite extends BaseMethod { init() { this.skipForceUpdateCheck = true; @@ -124,6 +142,18 @@ export default class FileWrite extends BaseMethod { `FilesystemFileWrite invalid processed_byte ${processedByte}` ); } + + const confirmedProcessedByte = + Number.isFinite(processedByte) && processedByte > offset + ? processedByte + : startOffset + written; + if (typeof this.postMessage === 'function') { + this.postMessage( + createUiMessage(UI_REQUEST.DEVICE_PROGRESS, { + progress: getConfirmedProgress(confirmedProcessedByte, totalSize, written, dataLength), + }) + ); + } chunkIndex += 1; } diff --git a/packages/hd-transport-web-device/src/webusb.ts b/packages/hd-transport-web-device/src/webusb.ts index b484828ea..b7996db45 100644 --- a/packages/hd-transport-web-device/src/webusb.ts +++ b/packages/hd-transport-web-device/src/webusb.ts @@ -26,6 +26,12 @@ const HEADER_LENGTH = 6; const PACKET_IO_MAX_RETRIES = 3; const PACKET_IO_RETRY_DELAY = 300; const PROTOCOL_PROBE_TIMEOUT = 1000; +const WEBUSB_FILE_WRITE_LOG_BLOCK_PATTERN = /(?:^|[^a-z])(?:raw)?(?:filesystem|emmc)?filewrite$/i; + +function shouldBlockWebUsbCallDataLog(name: string) { + const normalized = name.replace(/[_\s-]/g, ''); + return LogBlockCommand.has(name) || WEBUSB_FILE_WRITE_LOG_BLOCK_PATTERN.test(normalized); +} /** * Device information with path and WebUSB device instance @@ -613,7 +619,7 @@ export default class WebUsbTransport { const protocol = this.deviceProtocol.get(path) ?? 'V1'; - if (LogBlockCommand.has(name)) { + if (shouldBlockWebUsbCallDataLog(name)) { this.Log.debug('call-', ' name: ', name, ' protocol: ', protocol); } else { this.Log.debug('call-', ' name: ', name, ' data: ', data, ' protocol: ', protocol); From 6ddf13b708ac963a16246b106106e96d87f5c3fb Mon Sep 17 00:00:00 2001 From: wabicai Date: Thu, 7 May 2026 22:49:57 +0800 Subject: [PATCH 17/73] fix: decode protocol v2 file read bytes --- packages/core/__tests__/protocol-v2.test.ts | 24 +++++++++++++++++++++ packages/core/src/api/FileRead.ts | 7 ++++++ 2 files changed, 31 insertions(+) diff --git a/packages/core/__tests__/protocol-v2.test.ts b/packages/core/__tests__/protocol-v2.test.ts index a72158d5f..4c3ec3c3b 100644 --- a/packages/core/__tests__/protocol-v2.test.ts +++ b/packages/core/__tests__/protocol-v2.test.ts @@ -489,4 +489,28 @@ describe('Protocol V2 file read method', () => { chunks: 2, }); }); + + test('decodes protobuf bytes hex string returned by transport', async () => { + const call = jest.fn().mockResolvedValue({ + message: { + data: '0102ff', + }, + }); + const method = new FileRead({ + id: 1, + payload: { + method: 'fileRead', + path: 'vol0:test.bin', + offset: 0, + totalSize: 3, + chunkLen: 512, + }, + }); + (method as any).device = { commands: { call } }; + + method.init(); + const result = await method.run(); + + expect(result.data).toEqual(new Uint8Array([1, 2, 255])); + }); }); diff --git a/packages/core/src/api/FileRead.ts b/packages/core/src/api/FileRead.ts index 38f37903c..24b9267db 100644 --- a/packages/core/src/api/FileRead.ts +++ b/packages/core/src/api/FileRead.ts @@ -1,6 +1,7 @@ import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; import { BaseMethod } from './BaseMethod'; +import { hexToBytes, isHexString, stripHexPrefix } from './helpers/hexUtils'; export type FileReadParams = { path: string; @@ -45,6 +46,12 @@ function toUint8Array(value: unknown): Uint8Array { if (ArrayBuffer.isView(value)) { return new Uint8Array(value.buffer, value.byteOffset, value.byteLength); } + if (typeof value === 'string') { + const hex = stripHexPrefix(value); + if (!hex) return new Uint8Array(0); + if (!isHexString(hex) || hex.length % 2 !== 0) return new Uint8Array(0); + return hexToBytes(hex); + } return new Uint8Array(0); } From 77f5cf5b8766a5d0d2d2dddcabefa90dd0b08559 Mon Sep 17 00:00:00 2001 From: wabicai Date: Fri, 8 May 2026 18:55:32 +0800 Subject: [PATCH 18/73] refactor: organize protocol transport layers --- build/rollup.config.js | 61 ++++++++- .../components/common/TransportSwitcher.tsx | 33 +++-- .../app/data/methods/firmware.ts | 20 +-- .../expo-playground/public/webusb_test.html | 20 +-- packages/core/__tests__/protocol-v2.test.ts | 126 ++++++++++++------ packages/core/src/api/DirList.ts | 2 +- packages/core/src/api/DirMake.ts | 2 +- packages/core/src/api/DirRemove.ts | 2 +- packages/core/src/api/FileDelete.ts | 2 +- packages/core/src/api/FileRead.ts | 19 +-- packages/core/src/api/FileWrite.ts | 8 +- packages/core/src/api/GetOnekeyFeatures.ts | 78 ++++++++++- packages/core/src/api/PathInfo.ts | 10 +- .../api/firmware/FirmwareUpdateBaseMethod.ts | 5 +- packages/core/src/device/Device.ts | 5 +- packages/core/src/types/api/protocolV2.ts | 2 +- packages/hd-transport-emulator/src/index.ts | 10 +- packages/hd-transport-http/src/index.ts | 10 +- packages/hd-transport-lowlevel/src/index.ts | 6 +- .../hd-transport-react-native/src/index.ts | 27 +++- .../src/utils/validateNotify.ts | 8 +- packages/hd-transport-usb/src/constants.ts | 11 -- packages/hd-transport-usb/src/index.ts | 29 ++-- .../src/electron-auto-ble-transport.ts | 34 +++-- .../src/electron-ble-transport.ts | 16 ++- .../hd-transport-web-device/src/webusb.ts | 56 ++++++-- .../__tests__/build-receive.test.js | 14 +- .../__tests__/decode-features.test.js | 4 +- .../__tests__/protocol-v2.test.js | 56 +++++--- .../scripts/protobuf-patches/index.js | 4 +- .../hd-transport/scripts/protobuf-types.js | 29 +++- packages/hd-transport/src/constants.ts | 41 +++--- packages/hd-transport/src/index.ts | 25 ++-- .../protocols.ts => protocols/index.ts} | 38 +++--- .../protocol-v1 => protocols/v1}/decode.ts | 8 +- .../protocol-v1 => protocols/v1}/encode.ts | 25 ++-- .../hd-transport/src/protocols/v1/index.ts | 4 + .../hd-transport/src/protocols/v1/packets.ts | 53 ++++++++ .../v1}/receive.ts | 10 +- .../protocol-v2 => protocols/v2}/constants.ts | 2 +- .../protocol-v2 => protocols/v2}/crc8.ts | 0 .../protocol-v2 => protocols/v2}/decode.ts | 2 +- .../protocol-v2 => protocols/v2}/encode.ts | 6 +- .../v2/frame-assembler.ts} | 2 +- .../protocol-v2 => protocols/v2}/index.ts | 1 + .../v2/session.ts} | 14 +- .../hd-transport/src/serialization/index.ts | 10 +- .../src/serialization/protocol-v1/index.ts | 2 - .../hd-transport/src/serialization/send.ts | 58 -------- packages/hd-transport/src/types/messages.ts | 17 ++- 50 files changed, 670 insertions(+), 357 deletions(-) delete mode 100644 packages/hd-transport-usb/src/constants.ts rename packages/hd-transport/src/{serialization/protocols.ts => protocols/index.ts} (61%) rename packages/hd-transport/src/{serialization/protocol-v1 => protocols/v1}/decode.ts (82%) rename packages/hd-transport/src/{serialization/protocol-v1 => protocols/v1}/encode.ts (62%) create mode 100644 packages/hd-transport/src/protocols/v1/index.ts create mode 100644 packages/hd-transport/src/protocols/v1/packets.ts rename packages/hd-transport/src/{serialization => protocols/v1}/receive.ts (51%) rename packages/hd-transport/src/{serialization/protocol-v2 => protocols/v2}/constants.ts (84%) rename packages/hd-transport/src/{serialization/protocol-v2 => protocols/v2}/crc8.ts (100%) rename packages/hd-transport/src/{serialization/protocol-v2 => protocols/v2}/decode.ts (96%) rename packages/hd-transport/src/{serialization/protocol-v2 => protocols/v2}/encode.ts (94%) rename packages/hd-transport/src/{protocol-v2-frame-assembler.ts => protocols/v2/frame-assembler.ts} (95%) rename packages/hd-transport/src/{serialization/protocol-v2 => protocols/v2}/index.ts (75%) rename packages/hd-transport/src/{protocol-session.ts => protocols/v2/session.ts} (93%) delete mode 100644 packages/hd-transport/src/serialization/protocol-v1/index.ts delete mode 100644 packages/hd-transport/src/serialization/send.ts diff --git a/build/rollup.config.js b/build/rollup.config.js index 33610a098..409b3cb55 100644 --- a/build/rollup.config.js +++ b/build/rollup.config.js @@ -1,8 +1,64 @@ -import typescript from '@rollup/plugin-typescript'; +import typescriptPlugin from '@rollup/plugin-typescript'; import json from '@rollup/plugin-json'; import dts from 'rollup-plugin-dts'; import path from 'path'; import commonjs from '@rollup/plugin-commonjs'; +import ts from 'typescript'; + +function createTypescriptPlugin() { + const watchers = new Set(); + + const trackWatcher = watcher => { + if (!watcher || typeof watcher.close !== 'function') return watcher; + watchers.add(watcher); + return { + close() { + watchers.delete(watcher); + watcher.close(); + }, + }; + }; + + const trackedSys = { + ...ts.sys, + watchFile(...args) { + return trackWatcher(ts.sys.watchFile(...args)); + }, + watchDirectory(...args) { + return trackWatcher(ts.sys.watchDirectory(...args)); + }, + }; + + const trackedTypescript = new Proxy(ts, { + get(target, property, receiver) { + if (property === 'sys') return trackedSys; + return Reflect.get(target, property, receiver); + }, + }); + + const plugin = typescriptPlugin({ typescript: trackedTypescript }); + + const closeWatchers = () => { + for (const watcher of Array.from(watchers)) { + watcher.close(); + watchers.delete(watcher); + } + }; + + return { + ...plugin, + buildEnd(...args) { + const result = plugin.buildEnd?.apply(this, args); + if (!this.meta.watchMode) closeWatchers(); + return result; + }, + closeBundle(...args) { + const result = plugin.closeBundle?.apply(this, args); + if (!this.meta.watchMode) closeWatchers(); + return result; + }, + }; +} const config = [ { @@ -13,12 +69,11 @@ const config = [ format: 'cjs', }, ], - plugins: [typescript(), commonjs(), json()], + plugins: [createTypescriptPlugin(), commonjs(), json()], }, { input: path.resolve('./src/index.ts'), output: { file: 'dist/index.d.ts', format: 'es' }, - format: 'es', plugins: [dts()], }, ]; diff --git a/packages/connect-examples/expo-playground/app/components/common/TransportSwitcher.tsx b/packages/connect-examples/expo-playground/app/components/common/TransportSwitcher.tsx index cc9b01eb9..84131d54f 100644 --- a/packages/connect-examples/expo-playground/app/components/common/TransportSwitcher.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/TransportSwitcher.tsx @@ -10,7 +10,7 @@ import type { TransportType } from '../../utils/hardwareInstance'; import { DeviceInfo } from '../../types/hardware'; import { Button } from '../ui/Button'; import { Signal, ExternalLink, Info, Usb, Server } from 'lucide-react'; -import { ONEKEY_WEBUSB_FILTER } from '@onekeyfe/hd-shared'; +import { EDeviceType, ONEKEY_WEBUSB_FILTER } from '@onekeyfe/hd-shared'; import { UI_RESPONSE } from '@onekeyfe/hd-core'; interface TransportSwitcherProps { @@ -84,23 +84,32 @@ const TransportSwitcher: React.FC = ({ className = '' }) if (featuresResult.success && featuresResult.payload) { setDeviceFeatures(featuresResult.payload); - // 获取OneKey特定的features - const onekeyFeaturesResult = await sdk.getOnekeyFeatures(targetDevice.connectId); - if (onekeyFeaturesResult.success && onekeyFeaturesResult.payload) { - // 更新设备信息,包含onekeyFeatures + // Protocol V2 的 OneKey 字段已经由 getFeatures 归一化,避免重复跑一次设备初始化。 + if (featuresResult.payload.onekey_device_type === EDeviceType.Pro2) { const updatedDevice = { ...targetDevice, features: featuresResult.payload, - onekeyFeatures: onekeyFeaturesResult.payload, + onekeyFeatures: featuresResult.payload as DeviceInfo['onekeyFeatures'], }; setCurrentDevice(updatedDevice); } else { - // 即使获取onekeyFeatures失败,也设置基本的设备信息 - const updatedDevice = { - ...targetDevice, - features: featuresResult.payload, - }; - setCurrentDevice(updatedDevice); + const onekeyFeaturesResult = await sdk.getOnekeyFeatures(targetDevice.connectId); + if (onekeyFeaturesResult.success && onekeyFeaturesResult.payload) { + // 更新设备信息,包含onekeyFeatures + const updatedDevice = { + ...targetDevice, + features: featuresResult.payload, + onekeyFeatures: onekeyFeaturesResult.payload, + }; + setCurrentDevice(updatedDevice); + } else { + // 即使获取onekeyFeatures失败,也设置基本的设备信息 + const updatedDevice = { + ...targetDevice, + features: featuresResult.payload, + }; + setCurrentDevice(updatedDevice); + } } } else { setCurrentDevice(targetDevice); diff --git a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts index 1e7ed2b92..bf714e94f 100644 --- a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts +++ b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts @@ -364,10 +364,10 @@ const api: UnifiedMethodConfig[] = [ label: 'Chunk Length', validation: { min: 64, - max: 2048, + max: 4096, }, visible: true, - value: 512, + value: 4096, }, { name: 'uiPercentage', @@ -418,12 +418,12 @@ const api: UnifiedMethodConfig[] = [ type: 'number', required: false, label: 'Chunk Size', - description: 'Upload chunk size. Protocol V2 maximum is 2048 bytes.', + description: 'Upload chunk size. WebUSB maximum is 4096 bytes.', validation: { min: 64, - max: 2048, + max: 4096, }, - value: 2048, + value: 4096, }, { name: 'data', @@ -548,10 +548,10 @@ const api: UnifiedMethodConfig[] = [ label: 'Chunk Length', validation: { min: 64, - max: 2048, + max: 4096, }, visible: true, - value: 512, + value: 4096, }, { name: 'uiPercentage', @@ -602,12 +602,12 @@ const api: UnifiedMethodConfig[] = [ type: 'number', required: false, label: 'Chunk Size', - description: 'Upload chunk size. Protocol V2 maximum is 2048 bytes.', + description: 'Upload chunk size. WebUSB maximum is 4096 bytes.', validation: { min: 64, - max: 2048, + max: 4096, }, - value: 2048, + value: 4096, }, { name: 'data', diff --git a/packages/connect-examples/expo-playground/public/webusb_test.html b/packages/connect-examples/expo-playground/public/webusb_test.html index a2e72458d..8eb787584 100644 --- a/packages/connect-examples/expo-playground/public/webusb_test.html +++ b/packages/connect-examples/expo-playground/public/webusb_test.html @@ -314,7 +314,7 @@

Protobuf Messages

- +
@@ -361,7 +361,7 @@

Protobuf Messages

- +
@@ -549,8 +549,8 @@

Log

- From 0428690bc9b02d06e64726c334621b7377be8a62 Mon Sep 17 00:00:00 2001 From: wabicai Date: Fri, 8 May 2026 23:46:16 +0800 Subject: [PATCH 20/73] fix: support protocol v2 lowlevel ble framing --- .../native-android-example/web/index.js | 72 ++++- .../native-ios-example/web/index.js | 72 ++++- packages/hd-transport-lowlevel/.eslintignore | 2 + .../__tests__/protocol-v2.test.js | 159 ++++++++++ packages/hd-transport-lowlevel/src/index.ts | 274 +++++++++++++++++- packages/hd-transport-lowlevel/src/types.ts | 3 + .../__tests__/build-receive.test.js | 13 + packages/hd-transport/src/index.ts | 15 + 8 files changed, 570 insertions(+), 40 deletions(-) create mode 100644 packages/hd-transport-lowlevel/.eslintignore create mode 100644 packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js diff --git a/packages/connect-examples/native-android-example/web/index.js b/packages/connect-examples/native-android-example/web/index.js index f3583410f..dfe104706 100644 --- a/packages/connect-examples/native-android-example/web/index.js +++ b/packages/connect-examples/native-android-example/web/index.js @@ -69,6 +69,55 @@ function getHardwareSDKInstance() { } let runPromise; +let receiveQueue = []; +let protocolV2Buffer = []; +let protocolV2ExpectedLength = 0; + +function resolveReceive(hexString) { + if (runPromise) { + const current = runPromise; + runPromise = undefined; + current.resolve(hexString); + return; + } + receiveQueue.push(hexString); +} + +function resetProtocolV2Buffer() { + protocolV2Buffer = []; + protocolV2ExpectedLength = 0; +} + +function handleProtocolV2Chunk(data) { + protocolV2Buffer = protocolV2Buffer.concat([...data]); + + if (protocolV2ExpectedLength === 0 && protocolV2Buffer.length >= 3) { + if (protocolV2Buffer[0] !== 0x5a) { + resetProtocolV2Buffer(); + return; + } + protocolV2ExpectedLength = protocolV2Buffer[1] | (protocolV2Buffer[2] << 8); + } + + while (protocolV2ExpectedLength > 0 && protocolV2Buffer.length >= protocolV2ExpectedLength) { + const frame = Buffer.from(protocolV2Buffer.slice(0, protocolV2ExpectedLength)); + protocolV2Buffer = protocolV2Buffer.slice(protocolV2ExpectedLength); + protocolV2ExpectedLength = 0; + resolveReceive(frame.toString("hex")); + + if (protocolV2Buffer.length === 0) { + return; + } + + if (protocolV2Buffer.length >= 3 && protocolV2Buffer[0] === 0x5a) { + protocolV2ExpectedLength = protocolV2Buffer[1] | (protocolV2Buffer[2] << 8); + } else { + resetProtocolV2Buffer(); + return; + } + } +} + function createLowlevelPlugin() { const plugin = { enumerate: () => { @@ -88,6 +137,10 @@ function createLowlevelPlugin() { }, receive: () => { return new Promise((resolve) => { + if (receiveQueue.length > 0) { + resolve(receiveQueue.shift()); + return; + } runPromise = createDeferred(); const response = runPromise.promise; resolve(response); @@ -192,16 +245,16 @@ function registerBridgeHandler() { } }); - // Keep the original monitorCharacteristic handler let bufferLength = 0; let buffer = []; bridge.registerHandler("monitorCharacteristic", async (hexString) => { - if (!runPromise) { - console.log("runPromise is not initialized, maybe not call receive"); - return; - } try { const data = Buffer.from(hexString, "hex"); + if (protocolV2Buffer.length > 0 || data[0] === 0x5a) { + handleProtocolV2Chunk(data); + return; + } + if (isHeaderChunk(data)) { bufferLength = data.readInt32BE(5); buffer = [...data.subarray(3)]; @@ -210,18 +263,13 @@ function registerBridgeHandler() { } if (buffer.length - COMMON_HEADER_SIZE >= bufferLength) { const value = Buffer.from(buffer); - console.log( - "[onekey-js-bridge] Received a complete packet of data, resolve Promise, ", - "buffer: ", - value - ); bufferLength = 0; buffer = []; - runPromise.resolve(value.toString("hex")); + resolveReceive(value.toString("hex")); } } catch (e) { console.log("monitor data error: ", e); - runPromise.reject(e); + runPromise?.reject(e); } }); } diff --git a/packages/connect-examples/native-ios-example/web/index.js b/packages/connect-examples/native-ios-example/web/index.js index ee49b9560..8f7b891d3 100644 --- a/packages/connect-examples/native-ios-example/web/index.js +++ b/packages/connect-examples/native-ios-example/web/index.js @@ -65,6 +65,55 @@ function getHardwareSDKInstance() { } let runPromise; +let receiveQueue = []; +let protocolV2Buffer = []; +let protocolV2ExpectedLength = 0; + +function resolveReceive(hexString) { + if (runPromise) { + const current = runPromise; + runPromise = undefined; + current.resolve(hexString); + return; + } + receiveQueue.push(hexString); +} + +function resetProtocolV2Buffer() { + protocolV2Buffer = []; + protocolV2ExpectedLength = 0; +} + +function handleProtocolV2Chunk(data) { + protocolV2Buffer = protocolV2Buffer.concat([...data]); + + if (protocolV2ExpectedLength === 0 && protocolV2Buffer.length >= 3) { + if (protocolV2Buffer[0] !== 0x5a) { + resetProtocolV2Buffer(); + return; + } + protocolV2ExpectedLength = protocolV2Buffer[1] | (protocolV2Buffer[2] << 8); + } + + while (protocolV2ExpectedLength > 0 && protocolV2Buffer.length >= protocolV2ExpectedLength) { + const frame = Buffer.from(protocolV2Buffer.slice(0, protocolV2ExpectedLength)); + protocolV2Buffer = protocolV2Buffer.slice(protocolV2ExpectedLength); + protocolV2ExpectedLength = 0; + resolveReceive(frame.toString("hex")); + + if (protocolV2Buffer.length === 0) { + return; + } + + if (protocolV2Buffer.length >= 3 && protocolV2Buffer[0] === 0x5a) { + protocolV2ExpectedLength = protocolV2Buffer[1] | (protocolV2Buffer[2] << 8); + } else { + resetProtocolV2Buffer(); + return; + } + } +} + function createLowlevelPlugin() { const plugin = { enumerate: () => { @@ -84,6 +133,10 @@ function createLowlevelPlugin() { }, receive: () => { return new Promise((resolve) => { + if (receiveQueue.length > 0) { + resolve(receiveQueue.shift()); + return; + } runPromise = createDeferred(); const response = runPromise.promise; resolve(response); @@ -200,16 +253,16 @@ function registerBridgeHandler() { } }); - // Keep the original monitorCharacteristic handler let bufferLength = 0; let buffer = []; bridge.registerHandler("monitorCharacteristic", async (hexString) => { - if (!runPromise) { - console.log("runPromise is not initialized, maybe not call receive"); - return; - } try { const data = Buffer.from(hexString, "hex"); + if (protocolV2Buffer.length > 0 || data[0] === 0x5a) { + handleProtocolV2Chunk(data); + return; + } + if (isHeaderChunk(data)) { bufferLength = data.readInt32BE(5); buffer = [...data.subarray(3)]; @@ -218,18 +271,13 @@ function registerBridgeHandler() { } if (buffer.length - COMMON_HEADER_SIZE >= bufferLength) { const value = Buffer.from(buffer); - console.log( - "[onekey-js-bridge] Received a complete packet of data, resolve Promise, ", - "buffer: ", - value - ); bufferLength = 0; buffer = []; - runPromise.resolve(value.toString("hex")); + resolveReceive(value.toString("hex")); } } catch (e) { console.log("monitor data error: ", e); - runPromise.reject(e); + runPromise?.reject(e); } }); } diff --git a/packages/hd-transport-lowlevel/.eslintignore b/packages/hd-transport-lowlevel/.eslintignore new file mode 100644 index 000000000..c732cf5e5 --- /dev/null +++ b/packages/hd-transport-lowlevel/.eslintignore @@ -0,0 +1,2 @@ +dist/ +__tests__/ diff --git a/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js b/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js new file mode 100644 index 000000000..f4194e383 --- /dev/null +++ b/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js @@ -0,0 +1,159 @@ +const LowlevelTransport = require('../src').default; +const { parseConfigure } = require('../../hd-transport/src/serialization/protobuf/messages'); +const { ProtocolV1, ProtocolV2 } = require('../../hd-transport/src/protocols'); +const { bytesToHex } = require('../../hd-transport/src/protocols/v2/session'); +const { PROTOCOL_V2_CHANNEL_BLE_UART } = require('../../hd-transport/src/constants'); + +const protocolV1Schema = { + nested: { + Initialize: { + fields: {}, + }, + Success: { + fields: { + message: { + type: 'string', + id: 1, + }, + }, + }, + MessageType: { + values: { + MessageType_Initialize: 1, + MessageType_Success: 2, + }, + }, + }, +}; + +const protocolV2Schema = { + nested: { + GetProtoVersion: { + fields: {}, + }, + ProtoVersion: { + fields: { + major_version: { + type: 'uint32', + id: 1, + }, + minor_version: { + type: 'uint32', + id: 2, + }, + patch_version: { + type: 'uint32', + id: 3, + }, + }, + }, + MessageType: { + values: { + MessageType_GetProtoVersion: 60200, + MessageType_ProtoVersion: 60201, + }, + }, + }, +}; + +const schemas = { + protocolV1: parseConfigure(protocolV1Schema), + protocolV2: parseConfigure(protocolV2Schema), +}; + +const createLogger = () => ({ + debug: jest.fn(), + error: jest.fn(), +}); + +const createPlugin = ({ devices, responses }) => ({ + enumerate: jest.fn(() => Promise.resolve(devices)), + connect: jest.fn(() => Promise.resolve()), + disconnect: jest.fn(() => Promise.resolve()), + init: jest.fn(() => Promise.resolve()), + send: jest.fn(() => Promise.resolve()), + receive: jest.fn(() => { + const next = responses.shift(); + if (!next) { + return Promise.reject(new Error('No queued response')); + } + return Promise.resolve(next); + }), + version: 'test-plugin', +}); + +const configureTransport = plugin => { + const lowlevel = new LowlevelTransport(); + lowlevel.init(createLogger(), undefined, plugin); + lowlevel.configure(protocolV1Schema); + lowlevel.configureProtocolV2(protocolV2Schema); + return lowlevel; +}; + +const splitFrame = (frame, index) => [ + bytesToHex(frame.slice(0, index)), + bytesToHex(frame.slice(index)), +]; + +describe('LowlevelTransport protocol framing', () => { + test('keeps Protocol V1 raw notification chunks compatible', async () => { + const responseChunks = ProtocolV1.encodeTransportPackets(schemas.protocolV1, 'Success', { + message: 'ok', + }).map(chunk => chunk.toString('hex')); + const plugin = createPlugin({ + devices: [{ id: 'classic-id', name: 'OneKey Classic', commType: 'ble' }], + responses: responseChunks, + }); + const lowlevel = configureTransport(plugin); + + await expect(lowlevel.call('classic-id', 'Initialize', {})).resolves.toEqual({ + type: 'Success', + message: { message: 'ok' }, + }); + }); + + test('detects Protocol V2 devices and reassembles split Protocol V2 notifications', async () => { + const probeResponse = ProtocolV2.encodeFrame( + schemas, + 'ProtoVersion', + { + major_version: 2, + minor_version: 0, + patch_version: 0, + }, + { router: PROTOCOL_V2_CHANNEL_BLE_UART } + ); + const callResponse = ProtocolV2.encodeFrame( + schemas, + 'ProtoVersion', + { + major_version: 2, + minor_version: 1, + patch_version: 3, + }, + { router: PROTOCOL_V2_CHANNEL_BLE_UART } + ); + const plugin = createPlugin({ + devices: [{ id: 'pro2-id', name: 'OneKey Pro 2', commType: 'ble' }], + responses: [...splitFrame(probeResponse, 4), ...splitFrame(callResponse, 5)], + }); + const lowlevel = configureTransport(plugin); + + await expect(lowlevel.enumerate()).resolves.toEqual([ + { id: 'pro2-id', name: 'OneKey Pro 2', commType: 'ble', protocolType: 'V2' }, + ]); + await expect(lowlevel.acquire({ uuid: 'pro2-id' })).resolves.toEqual({ + uuid: 'pro2-id', + protocolType: 'V2', + }); + await expect(lowlevel.call('pro2-id', 'GetProtoVersion', {})).resolves.toEqual({ + type: 'ProtoVersion', + message: { + major_version: 2, + minor_version: 1, + patch_version: 3, + }, + }); + expect(plugin.send).toHaveBeenCalled(); + }); +}); diff --git a/packages/hd-transport-lowlevel/src/index.ts b/packages/hd-transport-lowlevel/src/index.ts index e1a223c57..8049f7526 100644 --- a/packages/hd-transport-lowlevel/src/index.ts +++ b/packages/hd-transport-lowlevel/src/index.ts @@ -1,15 +1,49 @@ import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; -import transport, { LogBlockCommand } from '@onekeyfe/hd-transport'; +import transport, { + LogBlockCommand, + PROTOCOL_V1_MESSAGE_HEADER_SIZE, + PROTOCOL_V2_CHANNEL_BLE_UART, + ProtocolV2FrameAssembler, + ProtocolV2Session, + bytesToHex, + concatUint8Arrays, + hexToBytes, + probeProtocolV2 as probeProtocolV2Helper, + withProtocolTimeout, +} from '@onekeyfe/hd-transport'; import type EventEmitter from 'events'; -import type { LowlevelTransportSharedPlugin, ProtocolType } from '@onekeyfe/hd-transport'; +import type { + LowLevelDevice, + LowlevelTransportSharedPlugin, + ProtocolType, + TransportCallOptions, +} from '@onekeyfe/hd-transport'; import type { LowLevelAcquireInput } from './types'; const { check, ProtocolV1, parseConfigure } = transport; +const PROTOCOL_PROBE_TIMEOUT_MS = 1000; +const LOWLEVEL_PROTOCOL_TIMEOUT_MS = 30_000; +const LOWLEVEL_PROTOCOL_V2_PACKET_LENGTH = 64; + +function inferProtocolTypeFromDeviceName(name?: string | null): ProtocolType | undefined { + return /\bpro\s*2\b/i.test(name ?? '') ? 'V2' : undefined; +} + +function isProtocolV1TransportChunk(data: Uint8Array) { + return data.length >= 9 && data[0] === 0x3f && data[1] === 0x23 && data[2] === 0x23; +} + +function readProtocolV1PayloadLength(data: Uint8Array) { + return data[5] * 0x1000000 + data[6] * 0x10000 + data[7] * 0x100 + data[8]; +} + export default class LowlevelTransport { _messages: ReturnType | undefined; + _messagesV2: ReturnType | undefined; + configured = false; Log?: any; @@ -18,9 +52,12 @@ export default class LowlevelTransport { plugin: LowlevelTransportSharedPlugin = {} as LowlevelTransportSharedPlugin; - // LowlevelTransport speaks Protocol V1 only (the embedder provides byte plumbing only). - getProtocolType(_path: string): ProtocolType { - return 'V1'; + private deviceProtocol: Map = new Map(); + + private protocolV2Assemblers: Map = new Map(); + + getProtocolType(path: string): ProtocolType { + return this.deviceProtocol.get(path) ?? 'V1'; } init(logger: any, emitter: EventEmitter, plugin: LowlevelTransportSharedPlugin) { @@ -36,18 +73,31 @@ export default class LowlevelTransport { this._messages = messages; } + configureProtocolV2(signedData: any) { + this._messagesV2 = parseConfigure(signedData); + } + listen() { // empty } - enumerate() { - return this.plugin.enumerate(); + async enumerate() { + const devices = await this.plugin.enumerate(); + return devices.map((device: LowLevelDevice) => { + const protocolType = inferProtocolTypeFromDeviceName(device.name); + if (protocolType) { + this.deviceProtocol.set(device.id, protocolType); + } + return { + ...device, + ...(protocolType ? { protocolType } : {}), + }; + }); } async acquire(input: LowLevelAcquireInput) { try { await this.plugin.connect(input.uuid); - return { uuid: input.uuid }; } catch (error) { this.Log.debug('lowlelvel transport connect error: ', error); throw ERRORS.TypedError( @@ -55,11 +105,18 @@ export default class LowlevelTransport { error.message ?? error ); } + + this.protocolV2Assemblers.set(input.uuid, new ProtocolV2FrameAssembler()); + const expectedProtocol = input.expectedProtocol ?? this.deviceProtocol.get(input.uuid); + const protocolType = await this.detectProtocol(input.uuid, expectedProtocol); + return { uuid: input.uuid, protocolType }; } async release(uuid: string) { try { await this.plugin.disconnect(uuid); + this.deviceProtocol.delete(uuid); + this.protocolV2Assemblers.delete(uuid); return true; } catch (error) { this.Log.debug('lowlelvel transport disconnect error: ', error); @@ -67,18 +124,50 @@ export default class LowlevelTransport { } } - async call(uuid: string, name: string, data: Record) { + async call( + uuid: string, + name: string, + data: Record, + options?: TransportCallOptions + ) { if (this._messages === null || !this._messages) { throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); } - const messages = this._messages; + const protocol = this.getProtocolType(uuid); if (LogBlockCommand.has(name)) { - this.Log.debug('lowlevel-transport', 'call-', ' name: ', name); + this.Log.debug('lowlevel-transport', 'call-', ' name: ', name, ' protocol: ', protocol); } else { - this.Log.debug('lowlevel-transport', 'call-', ' name: ', name, ' data: ', data); + this.Log.debug( + 'lowlevel-transport', + 'call-', + ' name: ', + name, + ' data: ', + data, + ' protocol: ', + protocol + ); + } + + if (protocol === 'V2') { + return this.callProtocolV2(uuid, name, data, options); } + return this.callProtocolV1(uuid, name, data, options); + } + + private async callProtocolV1( + uuid: string, + name: string, + data: Record, + options?: TransportCallOptions + ) { + if (!this._messages) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); + } + + const messages = this._messages; const buffers = ProtocolV1.encodeTransportPackets(messages, name, data); for (const o of buffers) { const outData = o.toString('hex'); @@ -93,10 +182,7 @@ export default class LowlevelTransport { } try { - const response = await this.plugin.receive(); - if (typeof response !== 'string') { - throw new Error('Returning data is not string'); - } + const response = await this.readProtocolV1Message(options?.timeoutMs); this.Log.debug('receive data: ', response); const jsonData = ProtocolV1.decodeMessage(messages, response); return check.call(jsonData); @@ -106,6 +192,162 @@ export default class LowlevelTransport { } } + private createProtocolTimeoutError(name: string, timeout: number) { + return ERRORS.TypedError( + HardwareErrorCode.BleTimeoutError, + `Lowlevel response timeout after ${timeout}ms for ${name}` + ); + } + + private createProtocolMismatchError(expected: ProtocolType) { + return ERRORS.TypedError( + HardwareErrorCode.RuntimeError, + `Device protocol mismatch: expected ${expected}, but device did not respond to expected protocol` + ); + } + + private async detectProtocol( + uuid: string, + expectedProtocol?: ProtocolType + ): Promise { + if (expectedProtocol === 'V2') { + if (await this.probeProtocolV2(uuid)) { + this.deviceProtocol.set(uuid, 'V2'); + this.Log?.debug(`[LowlevelTransport] detectProtocol: uuid=${uuid} -> V2 (expected)`); + return 'V2'; + } + throw this.createProtocolMismatchError(expectedProtocol); + } + + if (expectedProtocol === 'V1') { + this.deviceProtocol.set(uuid, 'V1'); + return 'V1'; + } + + const cachedProtocol = this.deviceProtocol.get(uuid); + if (cachedProtocol === 'V2' && (await this.probeProtocolV2(uuid))) { + this.deviceProtocol.set(uuid, 'V2'); + this.Log?.debug(`[LowlevelTransport] detectProtocol: uuid=${uuid} -> V2 (cached)`); + return 'V2'; + } + + this.deviceProtocol.set(uuid, 'V1'); + return 'V1'; + } + + private async probeProtocolV2(uuid: string) { + if (!this._messages || !this._messagesV2) { + return false; + } + + this.deviceProtocol.set(uuid, 'V2'); + this.protocolV2Assemblers.get(uuid)?.reset(); + return probeProtocolV2Helper({ + call: (name, data, options) => this.callProtocolV2(uuid, name, data, options), + timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS, + logger: this.Log, + logPrefix: 'ProtocolV2 Lowlevel-BLE', + onProbeFailed: () => { + this.protocolV2Assemblers.get(uuid)?.reset(); + }, + }); + } + + private async receiveHex(timeoutMs: number | undefined, commandName: string) { + const response = await withProtocolTimeout(this.plugin.receive(), timeoutMs, () => + this.createProtocolTimeoutError(commandName, timeoutMs ?? 0) + ); + if (typeof response !== 'string') { + throw new Error('Returning data is not string'); + } + return response; + } + + private async readProtocolV1Message(timeoutMs?: number) { + const first = await this.receiveHex(timeoutMs, 'ProtocolV1'); + const firstData = hexToBytes(first); + if (!isProtocolV1TransportChunk(firstData)) { + return first; + } + + const payloadLength = readProtocolV1PayloadLength(firstData); + let buffer = firstData.slice(3); + const expectedLength = PROTOCOL_V1_MESSAGE_HEADER_SIZE + payloadLength; + + while (buffer.length < expectedLength) { + const next = await this.receiveHex(timeoutMs, 'ProtocolV1'); + buffer = concatUint8Arrays([buffer, hexToBytes(next)]); + } + + return bytesToHex(buffer.slice(0, expectedLength)); + } + + private async readProtocolV2Frame(uuid: string, timeoutMs?: number) { + let assembler = this.protocolV2Assemblers.get(uuid); + if (!assembler) { + assembler = new ProtocolV2FrameAssembler(); + this.protocolV2Assemblers.set(uuid, assembler); + } + + const queuedFrame = assembler.push(new Uint8Array(0)); + if (queuedFrame) return queuedFrame; + + let frame: Uint8Array | undefined; + while (!frame) { + const response = await this.receiveHex(timeoutMs, 'ProtocolV2'); + const chunk = hexToBytes(response); + if (chunk.length > 0) { + frame = assembler.push(chunk); + } + } + return frame; + } + + private async writeProtocolV2Frame(uuid: string, frame: Uint8Array) { + for (let offset = 0; offset < frame.length; offset += LOWLEVEL_PROTOCOL_V2_PACKET_LENGTH) { + const chunk = frame.slice(offset, offset + LOWLEVEL_PROTOCOL_V2_PACKET_LENGTH); + await this.plugin.send(uuid, bytesToHex(chunk)); + } + } + + private async callProtocolV2( + uuid: string, + name: string, + data: Record, + options?: TransportCallOptions + ) { + if (!this._messages || !this._messagesV2) { + throw ERRORS.TypedError(HardwareErrorCode.TransportNotConfigured); + } + + const timeoutMs = options?.timeoutMs ?? LOWLEVEL_PROTOCOL_TIMEOUT_MS; + this.protocolV2Assemblers.get(uuid)?.reset(); + const session = new ProtocolV2Session({ + schemas: { + protocolV1: this._messages, + protocolV2: this._messagesV2, + }, + router: PROTOCOL_V2_CHANNEL_BLE_UART, + writeFrame: (frame: Uint8Array) => this.writeProtocolV2Frame(uuid, frame), + readFrame: () => this.readProtocolV2Frame(uuid, timeoutMs), + logger: this.Log, + logPrefix: 'ProtocolV2 Lowlevel-BLE', + createTimeoutError: (_messageName: string, timeout: number) => + this.createProtocolTimeoutError(name, timeout), + }); + + try { + return await session.call(name, data, { + ...options, + timeoutMs, + }); + } catch (e) { + this.protocolV2Assemblers.get(uuid)?.reset(); + this.Log.error('lowlevel Protocol V2 call error: ', e); + throw e; + } + } + cancel() { this.Log.debug('lowlevel-transport', 'cancel'); } diff --git a/packages/hd-transport-lowlevel/src/types.ts b/packages/hd-transport-lowlevel/src/types.ts index 8a1e8ed00..07b6ee3e4 100644 --- a/packages/hd-transport-lowlevel/src/types.ts +++ b/packages/hd-transport-lowlevel/src/types.ts @@ -1,3 +1,6 @@ +import type { ProtocolType } from '@onekeyfe/hd-transport'; + export type LowLevelAcquireInput = { uuid: string; + expectedProtocol?: ProtocolType; }; diff --git a/packages/hd-transport/__tests__/build-receive.test.js b/packages/hd-transport/__tests__/build-receive.test.js index 0eb3c6f70..153a89115 100644 --- a/packages/hd-transport/__tests__/build-receive.test.js +++ b/packages/hd-transport/__tests__/build-receive.test.js @@ -1,5 +1,7 @@ const { parseConfigure } = require('../src/serialization/protobuf/messages'); const { ProtocolV1 } = require('../src/protocols'); +const { decodeEnvelope, decodeFirstChunk } = require('../src/protocols/v1/decode'); +const transport = require('../src').default; const messages = { StellarPaymentOp: { @@ -91,6 +93,17 @@ const parsedMessages = parseConfigure({ nested: { hw: { nested: { trezor: { nested: { messages: { nested: messages } } } } } }, }); +describe('legacy default transport exports', () => { + test('keeps Protocol V1 compatibility aliases on the default export', () => { + expect(transport.buildOne).toBe(ProtocolV1.encodeEnvelope); + expect(transport.buildEncodeBuffers).toBe(ProtocolV1.encodeMessageChunks); + expect(transport.buildBuffers).toBe(ProtocolV1.encodeTransportPackets); + expect(transport.receiveOne).toBe(ProtocolV1.decodeMessage); + expect(transport.decodeProtocol.decode).toBe(decodeEnvelope); + expect(transport.decodeProtocol.decodeChunked).toBe(decodeFirstChunk); + }); +}); + describe('encoding json -> protobuf -> json', () => { fixtures.forEach(f => { describe(f.name, () => { diff --git a/packages/hd-transport/src/index.ts b/packages/hd-transport/src/index.ts index 291e0cb7b..aa67c5a68 100644 --- a/packages/hd-transport/src/index.ts +++ b/packages/hd-transport/src/index.ts @@ -9,6 +9,7 @@ import { parseConfigure, } from './serialization'; import { PROTOCOL_V2_SYS_MESSAGE_THRESHOLD, ProtocolV1, ProtocolV2 } from './protocols'; +import { decodeEnvelope, decodeFirstChunk } from './protocols/v1/decode'; import * as protocolV2Codec from './protocols/v2'; import { ProtocolV2FrameAssembler, @@ -25,6 +26,15 @@ import * as check from './utils/highlevel-checks'; protobuf.util.Long = Long; protobuf.configure(); +export const buildOne = ProtocolV1.encodeEnvelope; +export const buildEncodeBuffers = ProtocolV1.encodeMessageChunks; +export const buildBuffers = ProtocolV1.encodeTransportPackets; +export const receiveOne = ProtocolV1.decodeMessage; +export const decodeProtocol = { + decode: decodeEnvelope, + decodeChunked: decodeFirstChunk, +}; + export type { Transport, AcquireInput, @@ -52,7 +62,12 @@ export * from './protocols/v2/session'; export default { check, + buildOne, + buildBuffers, + buildEncodeBuffers, + receiveOne, parseConfigure, + decodeProtocol, protocolV2: protocolV2Codec, ProtocolV1, ProtocolV2, From dbfb8822ae79bced88d8bdf1f874d69be5f32567 Mon Sep 17 00:00:00 2001 From: wabicai Date: Sat, 9 May 2026 00:08:41 +0800 Subject: [PATCH 21/73] fix: align native lowlevel examples with protocol v2 sdk --- .../app/src/main/assets/dist.8bfae1d7.js | 1 + .../app/src/main/assets/index.980df355.js | 8 + .../app/src/main/assets/index.cba9be96.js | 1 + .../app/src/main/assets/index.e70e0048.js | 103982 -------------- .../app/src/main/assets/index.html | 12 +- .../native-android-example/web/package.json | 2 +- .../native-android-example/web/yarn.lock | 181 +- .../native-ios-example/web/package.json | 2 +- .../web/web_dist/dist.8bfae1d7.js | 1 + .../web/web_dist/index.50d43151.js | 8 + .../web/web_dist/index.a16df669.js | 1 + .../web/web_dist/index.e70e0048.js | 104465 --------------- .../web/web_dist/index.html | 11 +- .../native-ios-example/web/yarn.lock | 181 +- packages/core/src/device/DeviceConnector.ts | 1 + .../hd-transport-react-native/src/index.ts | 2 +- .../hd-transport/src/protocols/v2/crc8.ts | 7 +- 17 files changed, 245 insertions(+), 208621 deletions(-) create mode 100644 packages/connect-examples/native-android-example/app/src/main/assets/dist.8bfae1d7.js create mode 100644 packages/connect-examples/native-android-example/app/src/main/assets/index.980df355.js create mode 100644 packages/connect-examples/native-android-example/app/src/main/assets/index.cba9be96.js delete mode 100644 packages/connect-examples/native-android-example/app/src/main/assets/index.e70e0048.js create mode 100644 packages/connect-examples/native-ios-example/web/web_dist/dist.8bfae1d7.js create mode 100644 packages/connect-examples/native-ios-example/web/web_dist/index.50d43151.js create mode 100644 packages/connect-examples/native-ios-example/web/web_dist/index.a16df669.js delete mode 100644 packages/connect-examples/native-ios-example/web/web_dist/index.e70e0048.js diff --git a/packages/connect-examples/native-android-example/app/src/main/assets/dist.8bfae1d7.js b/packages/connect-examples/native-android-example/app/src/main/assets/dist.8bfae1d7.js new file mode 100644 index 000000000..a4274a21b --- /dev/null +++ b/packages/connect-examples/native-android-example/app/src/main/assets/dist.8bfae1d7.js @@ -0,0 +1 @@ +var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function t(e,t,r,n){Object.defineProperty(e,t,{get:r,set:n,enumerable:!0,configurable:!0})}var r=e.parcelRequire2d1f;r.register("6oS5p",function(e,t){var n=r("awmEs").Buffer,o=r("9Mq5w");Object.defineProperty(e.exports,"__esModule",{value:!0});var i=r("2kkR6"),s=r("b2G2V"),c=r("5xch2"),a=r("3FhS8");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(i),f=function(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}(s),p=u(c);function d(e,t,r,n){return new(r||(r=Promise))(function(o,i){function s(e){try{a(n.next(e))}catch(e){i(e)}}function c(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):((t=e.value)instanceof r?t:new r(function(e){e(t)})).then(s,c)}a((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;let{parseConfigure:h,buildEncodeBuffers:y,decodeProtocol:v,receiveOne:g,check:b}=p.default;function m(e){return`usb:${e.busNumber}:${e.deviceAddress}`}function w(e){return 63===e[0]?e.subarray(1):e}function E(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}e.exports.PACKET_SIZE=64,e.exports.default=class{constructor(){this.name="NodeUsbTransport",this.version="",this.configured=!1,this.isOutdated=!1,this.serialToBusId=new Map,this.openDevices=new Map,this.reconnectLocks=new Map,this.cancelled=!1}init(e,t){return this.Log=e,this.emitter=t,Promise.resolve("")}configure(e){let t=h(e);return this.configured=!0,this.messages=t,Promise.resolve()}listen(){}stop(){}post(e,t,r){return d(this,void 0,void 0,function*(){if(!this.messages)throw a.ERRORS.TypedError(a.HardwareErrorCode.TransportNotConfigured);let n=y(this.messages,t,r);yield this.sendAllChunksWithRetry(e,n)})}read(e){return d(this,void 0,void 0,function*(){let t=this.getOpenDevice(e),r=yield this.receiveData(e,t);if("string"!=typeof r)throw a.ERRORS.TypedError(a.HardwareErrorCode.NetworkError,"Returning data is not string.");if(!this.messages)throw a.ERRORS.TypedError(a.HardwareErrorCode.TransportNotConfigured);return g(this.messages,r)})}enumerate(){return d(this,void 0,void 0,function*(){let e=f.getDeviceList(),t=e.filter(e=>{let{idVendor:t,idProduct:r}=e.deviceDescriptor;return a.ONEKEY_WEBUSB_FILTER.some(e=>t===e.vendorId&&r===e.productId)}),r=new Map,n=[];for(let e of t){let t=m(e),o=yield function(e,t){let{iSerialNumber:r}=e.deviceDescriptor;if(!r)return Promise.resolve(m(e));let n=m(e);if(t){for(let[r,o]of t)if(o.device===e||m(o.device)===n)return Promise.resolve(r)}return new Promise(t=>{let o=!1,i=e=>{o||(o=!0,t(e))},s=setTimeout(()=>{try{e.close()}catch(e){}i(n)},5e3);try{e.open();try{e.getStringDescriptor(r,(t,r)=>{clearTimeout(s);try{e.close()}catch(e){}i(r||n)})}catch(t){clearTimeout(s);try{e.close()}catch(e){}i(n)}}catch(e){clearTimeout(s),i(n)}})}(e,this.openDevices);r.set(o,t),n.push({path:o,id:o,name:"OneKey",commType:"usb",debug:!1})}return this.serialToBusId=r,n})}acquire(e){var t,r,n;let o=null!==(t=e.path)&&void 0!==t?t:"";if(!o)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,"No device path provided");try{return this.openDevice(o),Promise.resolve(o)}catch(e){throw null===(r=this.Log)||void 0===r||r.debug("NodeUsbTransport acquire error: ",e),a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,null!==(n=e.message)&&void 0!==n?n:String(e))}}release(e,t){return d(this,void 0,void 0,function*(){let t=this.openDevices.get(e);if(t){try{yield new Promise(e=>{t.iface.release(()=>{try{t.device.close()}catch(e){}e()})})}catch(e){try{t.device.close()}catch(e){}}this.openDevices.delete(e)}})}call(e,t,r){var n,o;return d(this,void 0,void 0,function*(){if(this.cancelled=!1,!this.messages)throw a.ERRORS.TypedError(a.HardwareErrorCode.TransportNotConfigured);if(!this.openDevices.get(e))throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`Device not acquired: ${e}`);let{messages:i}=this;c.LogBlockCommand.has(t)?null===(n=this.Log)||void 0===n||n.debug("NodeUsbTransport call-"," name: ",t):null===(o=this.Log)||void 0===o||o.debug("NodeUsbTransport call-"," name: ",t," data: ",r);let s=y(i,t,r);yield this.sendAllChunksWithRetry(e,s);let u=yield this.receiveData(e,this.getOpenDevice(e));if("string"!=typeof u)throw a.ERRORS.TypedError(a.HardwareErrorCode.NetworkError,"Returning data is not string.");let l=g(i,u);return b.call(l)})}cancel(){var e;null===(e=this.Log)||void 0===e||e.debug("NodeUsbTransport cancel"),this.cancelled=!0}getOpenDevice(e){let t=this.openDevices.get(e);if(!t)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`Device not acquired: ${e}`);return t}getErrorMessage(e){if(!e)return"";if("string"==typeof e)return e;if("object"==typeof e&&"message"in e){let{message:t}=e;return"string"==typeof t?t:String(null!=t?t:"")}return String(e)}isRetryableError(e){let t=this.getErrorMessage(e).toLowerCase();return t.includes("libusb")||t.includes("transfer")||t.includes("disconnected")||t.includes("device not found")||t.includes("busy")||t.includes("pipe")||t.includes("empty usb transfer")||t.includes("network")||t.includes("timeout")||t.includes("interrupt")}reconnectForRetry(e,t,r,n){let o=this.reconnectLocks.get(e);if(o)return o;let i=d(this,void 0,void 0,function*(){var o,i;null===(o=this.Log)||void 0===o||o.debug(`[NodeUsbTransport] transfer${t} failed, retry ${r}/3: ${this.getErrorMessage(n)}`),yield a.wait(300*r);try{yield this.release(e)}catch(e){null===(i=this.Log)||void 0===i||i.debug("[NodeUsbTransport] release before retry error:",e)}yield this.enumerate(),this.openDevice(e);let s=this.openDevices.get(e);if(!s)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`Device not found after reconnect: ${e}`);return s}).finally(()=>{this.reconnectLocks.delete(e)});return this.reconnectLocks.set(e,i),i}sendAllChunksWithRetry(e,t){var r;return d(this,void 0,void 0,function*(){let o;for(let i=1;i<=3;i++){if(this.cancelled)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceInterruptedFromOutside,"Cancelled");try{for(let r of t){let t=new Uint8Array(64);t[0]=63,t.set(new Uint8Array(r),1),yield function(e,t){return new Promise((r,n)=>{e.transfer(t,e=>{if(e)return n(e);r()})})}(this.getOpenDevice(e).epOut,n.from(t))}return}catch(n){o=n;let t=i<3&&this.isRetryableError(n);if(!t)throw n;try{yield this.reconnectForRetry(e,"out",i,n)}catch(e){o=e,null===(r=this.Log)||void 0===r||r.debug(`[NodeUsbTransport] reconnect failed on send retry ${i}/3: ${this.getErrorMessage(e)}`);break}}}throw o})}transferInWithRetry(e,t,r){var n;return d(this,void 0,void 0,function*(){let o;let i=t;for(let t=1;t<=3;t++){if(this.cancelled)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceInterruptedFromOutside,"Cancelled");try{return yield function(e,t){return new Promise((r,n)=>{e.transfer(t,(e,t)=>e?n(e):t&&0!==t.length?void r(t):n(Error("Empty USB transfer")))})}(i.epIn,r)}catch(s){o=s;let r=t<3&&this.isRetryableError(s);if(!r)throw s;try{i=yield this.reconnectForRetry(e,"in",t,s)}catch(e){o=e,null===(n=this.Log)||void 0===n||n.debug(`[NodeUsbTransport] reconnect failed on retry ${t}/3: ${this.getErrorMessage(e)}`);break}}}throw o})}openDevice(e){var t;let r=this.openDevices.get(e);if(r)return;let n=null!==(t=this.serialToBusId.get(e))&&void 0!==t?t:e,i=f.getDeviceList(),s=i.find(e=>m(e)===n);if(!s)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`USB device not found: ${e}`);s.open();try{s.timeout=3e4;let t=s.interface(0);if("linux"===o.platform)try{t.isKernelDriverActive()&&t.detachKernelDriver()}catch(e){}t.claim();let r=t.endpoints.find(e=>"in"===e.direction&&129===e.address),n=t.endpoints.find(e=>"out"===e.direction&&1===e.address);if(!r||!n)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,"USB endpoints not found (expected IN 0x81, OUT 0x01)");r.timeout=3e4,n.timeout=3e4,this.openDevices.set(e,{device:s,iface:t,epIn:r,epOut:n})}catch(e){try{s.close()}catch(e){}throw e}}receiveData(e,t){return d(this,void 0,void 0,function*(){let r=yield this.transferInWithRetry(e,t,64),o=w(r),{length:i,typeId:s,restBuffer:c}=v.decodeChunked(E(o)),a=Number(i)+6,u=new l.default(a);for(u.writeUint16(s),u.writeUint32(Number(i)),i&&u.append(c);u.offset=63?u.append(n):u.append(n.slice(0,a-u.offset))}u.reset();let f=u.toBuffer();return n.from(f).toString("hex")})}}}),r.register("b2G2V",function(e,t){var n=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=e.exports&&e.exports.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.LibUSBException=e.exports.useUsbDkBackend=e.exports.getDeviceList=e.exports.Transfer=e.exports.Device=e.exports.webusb=e.exports.findBySerialNumber=e.exports.findByIds=e.exports.usb=void 0;var i=r("gOtyk"),s=r("7rWg5");e.exports.usb=s,e.exports.findByIds=(e,t)=>{let r=s.getDeviceList();return r.find(r=>r.deviceDescriptor.idVendor===e&&r.deviceDescriptor.idProduct===t)};let c=async e=>{let t=s.getDeviceList(),r=e=>!!e.interfaces;for(let n of t)try{r(n)||n.open();let t=(0,i.promisify)(n.getStringDescriptor).bind(n),o=await t(n.deviceDescriptor.iSerialNumber);if(o&&o.toString()===e)return n}catch{}finally{try{r(n)&&n.close()}catch{}}};e.exports.findBySerialNumber=c;let a=new(r("9eAap")).WebUSB;e.exports.webusb=a;var s=r("7rWg5");Object.defineProperty(e.exports,"Device",{enumerable:!0,get:function(){return s.Device}}),Object.defineProperty(e.exports,"Transfer",{enumerable:!0,get:function(){return s.Transfer}}),Object.defineProperty(e.exports,"getDeviceList",{enumerable:!0,get:function(){return s.getDeviceList}}),Object.defineProperty(e.exports,"useUsbDkBackend",{enumerable:!0,get:function(){return s.useUsbDkBackend}}),Object.defineProperty(e.exports,"LibUSBException",{enumerable:!0,get:function(){return s.LibUSBException}}),o(r("53X0T"),e.exports),o(r("3AQYC"),e.exports),o(r("bWwoS"),e.exports),o(r("hyq5n"),e.exports),o(r("9eAap"),e.exports),o(r("eyiS7"),e.exports)}),r.register("gOtyk",function(e,t){var n=r("9Mq5w"),o=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n=o)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),c=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),y(r)?n.showHidden=r:r&&e.exports._extend(n,r),m(n.showHidden)&&(n.showHidden=!1),m(n.depth)&&(n.depth=2),m(n.colors)&&(n.colors=!1),m(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=u),f(n,t,n.depth)}function u(e,t){var r=a.styles[t];return r?"\x1b["+a.colors[r][0]+"m"+e+"\x1b["+a.colors[r][1]+"m":e}function l(e,t){return e}function f(t,r,n){if(t.customInspect&&r&&_(r.inspect)&&r.inspect!==e.exports.inspect&&!(r.constructor&&r.constructor.prototype===r)){var o,i,s,c,a,u=r.inspect(n,t);return b(u)||(u=f(t,u,n)),u}var l=function(e,t){if(m(t))return e.stylize("undefined","undefined");if(b(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return g(t)?e.stylize(""+t,"number"):y(t)?e.stylize(""+t,"boolean"):v(t)?e.stylize("null","null"):void 0}(t,r);if(l)return l;var E=Object.keys(r),O=(c={},E.forEach(function(e,t){c[e]=!0}),c);if(t.showHidden&&(E=Object.getOwnPropertyNames(r)),A(r)&&(E.indexOf("message")>=0||E.indexOf("description")>=0))return p(r);if(0===E.length){if(_(r)){var x=r.name?": "+r.name:"";return t.stylize("[Function"+x+"]","special")}if(w(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(S(r))return t.stylize(Date.prototype.toString.call(r),"date");if(A(r))return p(r)}var I="",D=!1,P=["{","}"];return(h(r)&&(D=!0,P=["[","]"]),_(r)&&(I=" [Function"+(r.name?": "+r.name:"")+"]"),w(r)&&(I=" "+RegExp.prototype.toString.call(r)),S(r)&&(I=" "+Date.prototype.toUTCString.call(r)),A(r)&&(I=" "+p(r)),0!==E.length||D&&0!=r.length)?n<0?w(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),a=D?function(e,t,r,n,o){for(var i=[],s=0,c=t.length;s=0&&s++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?i[0]+(""===o?"":o+"\n ")+" "+a.join(",\n ")+" "+i[1]:i[0]+o+" "+a.join(", ")+" "+i[1]):P[0]+I+P[1]}function p(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,r,n,o,i){var s,c,a;if((a=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?c=a.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):a.set&&(c=e.stylize("[Setter]","special")),T(n,o)||(s="["+o+"]"),!c&&(0>e.seen.indexOf(a.value)?(c=v(r)?f(e,a.value,null):f(e,a.value,r-1)).indexOf("\n")>-1&&(c=i?c.split("\n").map(function(e){return" "+e}).join("\n").slice(2):"\n"+c.split("\n").map(function(e){return" "+e}).join("\n")):c=e.stylize("[Circular]","special")),m(s)){if(i&&o.match(/^\d+$/))return c;(s=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.slice(1,-1),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+c}function h(e){return Array.isArray(e)}function y(e){return"boolean"==typeof e}function v(e){return null===e}function g(e){return"number"==typeof e}function b(e){return"string"==typeof e}function m(e){return void 0===e}function w(e){return E(e)&&"[object RegExp]"===O(e)}function E(e){return"object"==typeof e&&null!==e}function S(e){return E(e)&&"[object Date]"===O(e)}function A(e){return E(e)&&("[object Error]"===O(e)||e instanceof Error)}function _(e){return"function"==typeof e}function O(e){return Object.prototype.toString.call(e)}function x(e){return e<10?"0"+e.toString(10):e.toString(10)}e.exports.debuglog=function(t){if(!s[t=t.toUpperCase()]){if(c.test(t)){var r=n.pid;s[t]=function(){var n=e.exports.format.apply(e.exports,arguments);console.error("%s %d: %s",t,r,n)}}else s[t]=function(){}}return s[t]},e.exports.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.exports.types=r("aBLNt"),e.exports.isArray=h,e.exports.isBoolean=y,e.exports.isNull=v,e.exports.isNullOrUndefined=function(e){return null==e},e.exports.isNumber=g,e.exports.isString=b,e.exports.isSymbol=function(e){return"symbol"==typeof e},e.exports.isUndefined=m,e.exports.isRegExp=w,e.exports.types.isRegExp=w,e.exports.isObject=E,e.exports.isDate=S,e.exports.types.isDate=S,e.exports.isError=A,e.exports.types.isNativeError=A,e.exports.isFunction=_,e.exports.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},e.exports.isBuffer=r("90FXD");var I=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports.log=function(){var t,r;console.log("%s - %s",(r=[x((t=new Date).getHours()),x(t.getMinutes()),x(t.getSeconds())].join(":"),[t.getDate(),I[t.getMonth()],r].join(" ")),e.exports.format.apply(e.exports,arguments))},e.exports.inherits=r("6cuMU"),e.exports._extend=function(e,t){if(!t||!E(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var D="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(e,t){if(!e){var r=Error("Promise was rejected with a falsy value");r.reason=e,e=r}return t(e)}e.exports.promisify=function(e){if("function"!=typeof e)throw TypeError('The "original" argument must be of type Function');if(D&&e[D]){var t=e[D];if("function"!=typeof t)throw TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,D,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise(function(e,n){t=e,r=n}),o=[],i=0;i=0&&"[object Array]"!==o(e)&&"[object Function]"===o(e.callee)},c=function(){return i(arguments)}();i.isLegacyArguments=s,e.exports=c?i:s}),r.register("62xi1",function(e,t){var n=r("lrNgj");e.exports=function(){return n()&&!!Symbol.toStringTag}}),r.register("lrNgj",function(e,t){e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t||"[object Symbol]"!==Object.prototype.toString.call(t)||"[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length||"function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t||!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}}),r.register("bh6VG",function(e,t){var n=r("k0uab"),o=r("ah9HS"),i=o(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?o(r):r}}),r.register("k0uab",function(e,t){var n,o=SyntaxError,i=Function,s=TypeError,c=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},a=Object.getOwnPropertyDescriptor;if(a)try{a({},"")}catch(e){a=null}var u=function(){throw new s},l=a?function(){try{return arguments.callee,u}catch(e){try{return a(arguments,"callee").get}catch(e){return u}}}():u,f=r("1tMgc")(),p=r("eFp8J")(),d=Object.getPrototypeOf||(p?function(e){return e.__proto__}:null),h={},y="undefined"!=typeof Uint8Array&&d?d(Uint8Array):n,v={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":f&&d?d([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":h,"%AsyncGenerator%":h,"%AsyncGeneratorFunction%":h,"%AsyncIteratorPrototype%":h,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":h,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f&&d?d(d([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f&&d?d(new Map()[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f&&d?d(new Set()[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f&&d?d(""[Symbol.iterator]()):n,"%Symbol%":f?Symbol:n,"%SyntaxError%":o,"%ThrowTypeError%":l,"%TypedArray%":y,"%TypeError%":s,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(d)try{null.error}catch(e){var g=d(d(e));v["%Error.prototype%"]=g}var b=function e(t){var r;if("%AsyncFunction%"===t)r=c("async function () {}");else if("%GeneratorFunction%"===t)r=c("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=c("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&d&&(r=d(o.prototype))}return v[t]=r,r},m={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},w=r("6gIY6"),E=r("4ebPq"),S=w.call(Function.call,Array.prototype.concat),A=w.call(Function.apply,Array.prototype.splice),_=w.call(Function.call,String.prototype.replace),O=w.call(Function.call,String.prototype.slice),x=w.call(Function.call,RegExp.prototype.exec),I=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,T=/\\(\\)?/g,D=function(e){var t=O(e,0,1),r=O(e,-1);if("%"===t&&"%"!==r)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var n=[];return _(e,I,function(e,t,r,o){n[n.length]=r?_(o,T,"$1"):t||e}),n},P=function(e,t){var r,n=e;if(E(m,n)&&(n="%"+(r=m[n])[0]+"%"),E(v,n)){var i=v[n];if(i===h&&(i=b(n)),void 0===i&&!t)throw new s("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new o("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new s("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new s('"allowMissing" argument must be a boolean');if(null===x(/^%?[^%]*%?$/,e))throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=D(e),n=r.length>0?r[0]:"",i=P("%"+n+"%",t),c=i.name,u=i.value,l=!1,f=i.alias;f&&(n=f[0],A(r,S([0,1],f)));for(var p=1,d=!0;p=r.length){var b=a(u,h);u=(d=!!b)&&"get"in b&&!("originalValue"in b.get)?b.get:u[h]}else d=E(u,h),u=u[h];d&&!l&&(v[c]=u)}}return u}}),r.register("1tMgc",function(e,t){var n="undefined"!=typeof Symbol&&Symbol,o=r("lrNgj");e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&o()}}),r.register("eFp8J",function(e,t){var r={foo:{}},n=Object;e.exports=function(){return({__proto__:r}).foo===r.foo&&!(({__proto__:null})instanceof n)}}),r.register("6gIY6",function(e,t){var n=r("5q2Au");e.exports=Function.prototype.bind||n}),r.register("5q2Au",function(e,t){var r=Array.prototype.slice,n=Object.prototype.toString;e.exports=function(e){var t,o=this;if("function"!=typeof o||"[object Function]"!==n.call(o))throw TypeError("Function.prototype.bind called on incompatible "+o);for(var i=r.call(arguments,1),s=Math.max(0,o.length-i.length),c=[],a=0;a-1?t:"Object"===t&&b(e)}return a?g(e):null}}),r.register("6Y9zB",function(e,t){var n=r("fSmyv"),o=Object.prototype.toString,i=Object.prototype.hasOwnProperty,s=function(e,t,r){for(var n=0,o=e.length;n=3&&(i=r),"[object Array]"===o.call(e)?s(e,t,i):"string"==typeof e?c(e,t,i):a(e,t,i)}}),r.register("fSmyv",function(e,t){var r,n,o=Function.prototype.toString,i="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof i&&"function"==typeof Object.defineProperty)try{r=Object.defineProperty({},"length",{get:function(){throw n}}),n={},i(function(){throw 42},null,r)}catch(e){e!==n&&(i=null)}else i=null;var s=/^\s*class\b/,c=function(e){try{var t=o.call(e);return s.test(t)}catch(e){return!1}},a=function(e){try{if(c(e))return!1;return o.call(e),!0}catch(e){return!1}},u=Object.prototype.toString,l="function"==typeof Symbol&&!!Symbol.toStringTag,f=!(0 in[,]),p=function(){return!1};if("object"==typeof document){var d=document.all;u.call(d)===u.call(document.all)&&(p=function(e){if((f||!e)&&(void 0===e||"object"==typeof e))try{var t=u.call(e);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==e("")}catch(e){}return!1})}e.exports=i?function(e){if(p(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;try{i(e,null,r)}catch(e){if(e!==n)return!1}return!c(e)&&a(e)}:function(e){if(p(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;if(l)return a(e);if(c(e))return!1;var t=u.call(e);return!!("[object Function]"===t||"[object GeneratorFunction]"===t||/^\[object HTML/.test(t))&&a(e)}}),r.register("bfDOD",function(t,r){var n=["BigInt64Array","BigUint64Array","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray"],o="undefined"==typeof globalThis?e:globalThis;t.exports=function(){for(var e=[],t=0;tnavigator&&navigator.usb?navigator.usb:new c;class s extends Error{constructor(e,t){super(e),this.name=t}}class c{constructor(e={}){this.options=e,this.emitter=new o.EventEmitter,this.knownDevices=new Map,this.authorisedDevices=new Set;let t=async e=>{let t=await this.getWebDevice(e);t&&this.isAuthorisedDevice(t)&&this.emitter.emit("connect",{type:"connect",device:t})},r=async e=>{if(this.knownDevices.has(e)){let t=this.knownDevices.get(e);t&&this.isAuthorisedDevice(t)&&this.emitter.emit("disconnect",{type:"disconnect",device:t})}};this.emitter.on("newListener",e=>{let o=this.emitter.listenerCount(e);0===o&&("connect"===e?n.addListener("attach",t):"disconnect"===e&&n.addListener("detach",r))}),this.emitter.on("removeListener",e=>{let o=this.emitter.listenerCount(e);0===o&&("connect"===e?n.removeListener("attach",t):"disconnect"===e&&n.removeListener("detach",r))})}set onconnect(e){this._onconnect&&(this.removeEventListener("connect",this._onconnect),this._onconnect=void 0),e&&(this._onconnect=e,this.addEventListener("connect",this._onconnect))}set ondisconnect(e){this._ondisconnect&&(this.removeEventListener("disconnect",this._ondisconnect),this._ondisconnect=void 0),e&&(this._ondisconnect=e,this.addEventListener("disconnect",this._ondisconnect))}addEventListener(e,t){this.emitter.addListener(e,t)}removeEventListener(e,t){this.emitter.removeListener(e,t)}dispatchEvent(e){return!1}async requestDevice(e){if(!e)throw TypeError("requestDevice error: 1 argument required, but only 0 present");if(e.constructor!==({}).constructor)throw TypeError("requestDevice error: parameter 1 (options) is not an object");if(!e.filters)throw TypeError("requestDevice error: required member filters is undefined");if(e.filters.constructor!==[].constructor)throw TypeError("requestDevice error: the provided value cannot be converted to a sequence");e.filters.forEach(e=>{if(e.protocolCode&&!e.subclassCode)throw TypeError("requestDevice error: subclass code is required");if(e.subclassCode&&!e.classCode)throw TypeError("requestDevice error: class code is required")});let t=await this.loadDevices(e.filters);if(0===(t=t.filter(t=>this.filterDevice(t,e.filters))).length)throw new s("Failed to execute 'requestDevice' on 'USB': No device selected.","NotFoundError");try{let e=this.options.devicesFound?await this.options.devicesFound(t):t[0];if(!e)throw new s("Failed to execute 'requestDevice' on 'USB': No device selected.","NotFoundError");return this.authorisedDevices.add({vendorId:e.vendorId,productId:e.productId,classCode:e.deviceClass,subclassCode:e.deviceSubclass,protocolCode:e.deviceProtocol,serialNumber:e.serialNumber||void 0}),e}catch(e){throw new s("Failed to execute 'requestDevice' on 'USB': No device selected.","NotFoundError")}}async getDevices(){let e=this.options.allowAllDevices?void 0:this.options.allowedDevices,t=await this.loadDevices(e);return t.filter(e=>this.isAuthorisedDevice(e))}async loadDevices(e){let t=n.getDeviceList();t=this.quickFilter(t,e);let r=new Map;for(let e of t){let t=await this.getWebDevice(e);t&&r.set(e,t)}return this.knownDevices=r,[...this.knownDevices.values()]}async getWebDevice(e){if(!this.knownDevices.has(e)){this.options.deviceTimeout&&(e.timeout=this.options.deviceTimeout);try{let t=await i.WebUSBDevice.createInstance(e,this.options.autoDetachKernelDriver);this.knownDevices.set(e,t)}catch{}}return this.knownDevices.get(e)}quickFilter(e,t){return t&&t.length?e.filter(e=>t.some(t=>(!t.vendorId||t.vendorId===e.deviceDescriptor.idVendor)&&(!t.productId||t.productId===e.deviceDescriptor.idProduct))):e}filterDevice(e,t){return!t||!t.length||t.some(t=>{if(t.vendorId&&t.vendorId!==e.vendorId||t.productId&&t.productId!==e.productId)return!1;if(t.classCode){if(!e.configuration)return!1;let r=e.configuration.interfaces.some(e=>(!t.classCode||t.classCode===e.alternate.interfaceClass)&&(!t.subclassCode||t.subclassCode===e.alternate.interfaceSubclass)&&(!t.protocolCode||t.protocolCode===e.alternate.interfaceProtocol));if(r)return!0}return(!t.classCode||t.classCode===e.deviceClass)&&(!t.subclassCode||t.subclassCode===e.deviceSubclass)&&(!t.protocolCode||t.protocolCode===e.deviceProtocol)&&(!t.serialNumber||t.serialNumber===e.serialNumber)})}isAuthorisedDevice(e){return!!(this.options.allowAllDevices||this.options.allowedDevices&&this.filterDevice(e,this.options.allowedDevices))||[...this.authorisedDevices.values()].some(t=>t.vendorId===e.vendorId&&t.productId===e.productId&&t.classCode===e.deviceClass&&t.subclassCode===e.deviceSubclass&&t.protocolCode===e.deviceProtocol&&t.serialNumber===e.serialNumber)}}e.exports.WebUSB=c}),r.register("7rWg5",function(e,t){var n=r("k4yOc"),o=r("4WTH4"),i=r("hPn48");i.INIT_ERROR&&console.warn("Failed to initialize libusb."),Object.setPrototypeOf(i,n.EventEmitter.prototype),Object.defineProperty(i,"pollHotplug",{value:!1,writable:!0}),Object.defineProperty(i,"pollHotplugDelay",{value:500,writable:!0}),i.Device&&Object.getOwnPropertyNames(o.ExtendedDevice.prototype).forEach(e=>{Object.defineProperty(i.Device.prototype,e,Object.getOwnPropertyDescriptor(o.ExtendedDevice.prototype,e)||Object.create(null))});let s=new Set,c=()=>{let e=new Set(i.getDeviceList());for(let t of e)s.has(t)||i.emit("attach",t);for(let t of s)e.has(t)||i.emit("detach",t);s=e},a=!1,u=(e=!1)=>{if(e)a=!0;else{if(!a)return;c()}setTimeout(()=>u(),i.pollHotplugDelay)},l=()=>setTimeout(()=>c(),i.pollHotplugDelay),f=0,p=()=>{1!==(f=i.pollHotplug?0:i._supportedHotplugEvents())&&(s=new Set(i.getDeviceList())),f?(i._enableHotplugEvents(),2===f&&(i.on("attachIds",l),i.on("detachIds",l))):u(!0)},d=()=>{f?(i._disableHotplugEvents(),2===f&&(i.off("attachIds",l),i.off("detachIds",l))):a=!1};i.on("newListener",e=>{if("attach"!==e&&"detach"!==e)return;let t=i.listenerCount("attach")+i.listenerCount("detach");0===t&&p()}),i.on("removeListener",e=>{if("attach"!==e&&"detach"!==e)return;let t=i.listenerCount("attach")+i.listenerCount("detach");0===t&&d()}),e.exports=i}),r.register("k4yOc",function(e,t){var r,n="object"==typeof Reflect?Reflect:null,o=n&&"function"==typeof n.apply?n.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};r=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise(function(r,n){function o(r){e.removeListener(t,i),n(r)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),r([].slice.call(arguments))}v(e,t,i,{once:!0}),"error"!==t&&"function"==typeof e.on&&v(e,"error",o,{once:!0})})},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var c=10;function a(e){if("function"!=typeof e)throw TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function u(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function l(e,t,r,n){if(a(r),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),s=i[t]),void 0===s)s=i[t]=r,++e._eventsCount;else if("function"==typeof s?s=i[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(o=u(e))>0&&s.length>o&&!s.warned){s.warned=!0;var o,i,s,c=Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,console&&console.warn&&console.warn(c)}return e}function f(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=f.bind(n);return o.listener=r,n.wrapFn=o,o}function d(e,t,r){var n=e._events;if(void 0===n)return[];var o=n[t];return void 0===o?[]:"function"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=Array(e.length),r=0;r0&&(s=t[0]),s instanceof Error)throw s;var s,c=Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)o(a,this,t);else for(var u=a.length,l=y(a,u),r=0;r=0;i--)if(r[i]===t||r[i].listener===t){s=r[i].listener,o=i;break}if(o<0)return this;0===o?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},s.prototype.listenerCount=h,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}}),r.register("4WTH4",function(e,t){var n=r("awmEs").Buffer,o=r("9Mq5w");Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.ExtendedDevice=void 0;var i=r("hPn48"),s=r("hyq5n"),c=r("53X0T");let a=e=>!!e&&e instanceof Uint8Array;e.exports.ExtendedDevice=class{constructor(){this._timeout=1e3}get timeout(){return this._timeout||1e3}set timeout(e){this._timeout=e}get configDescriptor(){try{return this.__getConfigDescriptor()}catch(t){let e=t.errno;if(e===i.LIBUSB_ERROR_NOT_FOUND||e===i.LIBUSB_ERROR_NO_DEVICE)return;throw t}}get allConfigDescriptors(){try{return this.__getAllConfigDescriptors()}catch(t){let e=t.errno;if(e===i.LIBUSB_ERROR_NOT_FOUND||e===i.LIBUSB_ERROR_NO_DEVICE)return[];throw t}}get parent(){return this.__getParent()}open(e=!0){if(this.__open(),this.interfaces=[],!1===e)return;let t=this.configDescriptor?this.configDescriptor.interfaces.length:0;for(let e=0;e{if(!e){this.interfaces=[];let e=this.configDescriptor?this.configDescriptor.interfaces.length:0;for(let t=0;t{u&&(l?u.call(this,e,t.slice(i.LIBUSB_CONTROL_SETUP_SIZE,i.LIBUSB_CONTROL_SETUP_SIZE+r)):u.call(this,e,r))});try{d.submit(p)}catch(e){u&&o.nextTick(()=>u.call(this,e,void 0))}return this}interface(e){if(!this.interfaces)throw Error("Device must be open before searching for interfaces");e=e||0;for(let t=0;t{if(e)return t(e);t(void 0,a(r)?r.toString("utf16le",2):void 0)})}getBosDescriptor(e){return this._bosDescriptor?e(void 0,this._bosDescriptor):this.deviceDescriptor.bcdUSB<513?e(void 0,void 0):void this.controlTransfer(i.LIBUSB_ENDPOINT_IN,i.LIBUSB_REQUEST_GET_DESCRIPTOR,i.LIBUSB_DT_BOS<<8,0,i.LIBUSB_DT_BOS_SIZE,(t,r)=>{if(t)return t.errno===i.LIBUSB_TRANSFER_STALL?e(void 0,void 0):e(t,void 0);if(!a(r))return e(void 0,void 0);let n=r.readUInt16LE(2);this.controlTransfer(i.LIBUSB_ENDPOINT_IN,i.LIBUSB_REQUEST_GET_DESCRIPTOR,i.LIBUSB_DT_BOS<<8,0,n,(t,r)=>{if(t)return t.errno===i.LIBUSB_TRANSFER_STALL?e(void 0,void 0):e(t,void 0);if(!a(r))return e(void 0,void 0);let n={bLength:r.readUInt8(0),bDescriptorType:r.readUInt8(1),wTotalLength:r.readUInt16LE(2),bNumDeviceCaps:r.readUInt8(4),capabilities:[]},o=i.LIBUSB_DT_BOS_SIZE;for(;o{if(r)return e(r,void 0);let o=n?n.capabilities.length:0;for(let e=0;e2){var a=n.lastIndexOf("/");if(a!==n.length-1){-1===a?(n="",o=0):o=(n=n.slice(0,a)).length-1-n.lastIndexOf("/"),i=c,s=0;continue}}else if(2===n.length||1===n.length){n="",o=0,i=c,s=0;continue}}t&&(n.length>0?n+="/..":n="..",o=2)}else n.length>0?n+="/"+e.slice(i+1,c):n=e.slice(i+1,c),o=c-i-1;i=c,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var s={resolve:function(){for(var e,t,r="",s=!1,c=arguments.length-1;c>=-1&&!s;c--)c>=0?t=arguments[c]:(void 0===e&&(e=n.cwd()),t=e),o(t),0!==t.length&&(r=t+"/"+r,s=47===t.charCodeAt(0));return(r=i(r,!s),s)?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(e){if(o(e),0===e.length)return".";var t=47===e.charCodeAt(0),r=47===e.charCodeAt(e.length-1);return(0!==(e=i(e,!t)).length||t||(e="."),e.length>0&&r&&(e+="/"),t)?"/"+e:e},isAbsolute:function(e){return o(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0==arguments.length)return".";for(var e,t=0;t0&&(void 0===e?e=r:e+="/"+r)}return void 0===e?".":s.normalize(e)},relative:function(e,t){if(o(e),o(t),e===t||(e=s.resolve(e))===(t=s.resolve(t)))return"";for(var r=1;ru){if(47===t.charCodeAt(c+f))return t.slice(c+f+1);if(0===f)return t.slice(c+f)}else i>u&&(47===e.charCodeAt(r+f)?l=f:0===f&&(l=0));break}var p=e.charCodeAt(r+f);if(p!==t.charCodeAt(c+f))break;47===p&&(l=f)}var d="";for(f=r+l+1;f<=n;++f)(f===n||47===e.charCodeAt(f))&&(0===d.length?d+="..":d+="/..");return d.length>0?d+t.slice(c+l):(c+=l,47===t.charCodeAt(c)&&++c,t.slice(c))},_makeLong:function(e){return e},dirname:function(e){if(o(e),0===e.length)return".";for(var t=e.charCodeAt(0),r=47===t,n=-1,i=!0,s=e.length-1;s>=1;--s)if(47===(t=e.charCodeAt(s))){if(!i){n=s;break}}else i=!1;return -1===n?r?"/":".":r&&1===n?"//":e.slice(0,n)},basename:function(e,t){if(void 0!==t&&"string"!=typeof t)throw TypeError('"ext" argument must be a string');o(e);var r,n=0,i=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";var c=t.length-1,a=-1;for(r=e.length-1;r>=0;--r){var u=e.charCodeAt(r);if(47===u){if(!s){n=r+1;break}}else -1===a&&(s=!1,a=r+1),c>=0&&(u===t.charCodeAt(c)?-1==--c&&(i=r):(c=-1,i=a))}return n===i?i=a:-1===i&&(i=e.length),e.slice(n,i)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!s){n=r+1;break}}else -1===i&&(s=!1,i=r+1);return -1===i?"":e.slice(n,i)},extname:function(e){o(e);for(var t=-1,r=0,n=-1,i=!0,s=0,c=e.length-1;c>=0;--c){var a=e.charCodeAt(c);if(47===a){if(!i){r=c+1;break}continue}-1===n&&(i=!1,n=c+1),46===a?-1===t?t=c:1!==s&&(s=1):-1!==t&&(s=-1)}return -1===t||-1===n||0===s||1===s&&t===n-1&&t===r+1?"":e.slice(t,n)},format:function(e){var t,r;if(null===e||"object"!=typeof e)throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return t=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||""),t?t===e.root?t+r:t+"/"+r:r},parse:function(e){o(e);var t,r={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return r;var n=e.charCodeAt(0),i=47===n;i?(r.root="/",t=1):t=0;for(var s=-1,c=0,a=-1,u=!0,l=e.length-1,f=0;l>=t;--l){if(47===(n=e.charCodeAt(l))){if(!u){c=l+1;break}continue}-1===a&&(u=!1,a=l+1),46===n?-1===s?s=l:1!==f&&(f=1):-1!==s&&(f=-1)}return -1===s||-1===a||0===f||1===f&&s===a-1&&s===c+1?-1!==a&&(0===c&&i?r.base=r.name=e.slice(1,a):r.base=r.name=e.slice(c,a)):(0===c&&i?(r.name=e.slice(1,s),r.base=e.slice(1,a)):(r.name=e.slice(c,s),r.base=e.slice(c,a)),r.ext=e.slice(s,a)),c>0?r.dir=e.slice(0,c-1):i&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,e.exports=s}),r.register("2pNh5",function(e,t){var r,n,o,i=e.exports={};function s(){throw Error("setTimeout has not been defined")}function c(){throw Error("clearTimeout has not been defined")}function a(e){if(r===setTimeout)return setTimeout(e,0);if((r===s||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:s}catch(e){r=s}try{n="function"==typeof clearTimeout?clearTimeout:c}catch(e){n=c}}();var u=[],l=!1,f=-1;function p(){l&&o&&(l=!1,o.length?u=o.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=a(p);l=!0;for(var t=u.length;t;){for(o=u,u=[];++f1)for(var r=1;rr.specificity?-1:1:0}}e.exports=v,v.resolve=v.path=function(e){e=i.resolve(e||".");try{var t=c(i.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");n.env[t+"_PREBUILD"]&&(e=n.env[t+"_PREBUILD"])}catch(e){}var r=b(i.join(e,"build/Release"),m);if(r)return r;var o=b(i.join(e,"build/Debug"),m);if(o)return o;var s=v(e);if(s)return s;var a=v(i.dirname(n.execPath));if(a)return a;throw Error("No native build was found for "+["platform="+p,"arch="+f,"runtime="+l,"abi="+u,"uv="+y,h?"armv="+h:"","libc="+d,"node="+n.versions.node,n.versions.electron?"electron="+n.versions.electron:"","function"==typeof __webpack_require__?"webpack=true":""].filter(Boolean).join(" ")+"\n loaded from: "+e+"\n");function v(e){var t=g(i.join(e,"prebuilds")).map(w).filter(E(p,f)).sort(S)[0];if(t){var r=i.join(e,"prebuilds",t.name),n=g(r).map(A).filter(_(l,u)).sort(O(l))[0];if(n)return i.join(r,n.file)}}},v.parseTags=A,v.matchTags=_,v.compareTags=O,v.parseTuple=w,v.matchTuple=E,v.compareTuples=S}),r.register("4AFFV",function(e,t){}),r.register("ikaqy",function(e,r){var n,o;t(e.exports,"arch",()=>n,e=>n=e),t(e.exports,"platform",()=>o,e=>o=e),n=function(){return"javascript"},o=function(){return"browser"}}),r.register("hyq5n",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Interface=void 0;var n=r("hPn48"),o=r("bWwoS"),i=r("gOtyk");e.exports.Interface=class{constructor(e,t){this.device=e,this.id=t,this.altSetting=0,this.refresh(),this.releaseAsync=(0,i.promisify)(this.release).bind(this),this.setAltSettingAsync=(0,i.promisify)(this.setAltSetting).bind(this)}refresh(){if(!this.device.configDescriptor)return;this.descriptor=this.device.configDescriptor.interfaces[this.id][this.altSetting],this.interfaceNumber=this.descriptor.bInterfaceNumber,this.endpoints=[];let e=this.descriptor.endpoints.length;for(let t=0;t{this.device.__releaseInterface(this.id,e=>{e||(this.altSetting=0,this.refresh()),t&&t.call(this,e)})};if(r&&0!==this.endpoints.length){let e=this.endpoints.length;this.endpoints.forEach(t=>{"in"===t.direction&&t.pollActive?(t.once("end",()=>{0==--e&&n()}),t.stopPoll()):0==--e&&n()})}else n()}isKernelDriverActive(){return this.device.__isKernelDriverActive(this.id)}detachKernelDriver(){return this.device.__detachKernelDriver(this.id)}attachKernelDriver(){return this.device.__attachKernelDriver(this.id)}setAltSetting(e,t){this.device.__setInterface(this.id,e,r=>{r||(this.altSetting=e,this.refresh()),t&&t.call(this,r)})}endpoint(e){return this.endpoints.find(t=>t.address===e)}}}),r.register("bWwoS",function(e,t){var n=r("awmEs").Buffer,o=r("9Mq5w");Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.OutEndpoint=e.exports.InEndpoint=e.exports.Endpoint=void 0;var i=r("k4yOc"),s=r("hPn48"),c=r("gOtyk");let a=e=>e&&e instanceof n;class u extends i.EventEmitter{constructor(e,t){super(),this.device=e,this.timeout=0,this.descriptor=t,this.address=t.bEndpointAddress,this.transferType=3&t.bmAttributes}clearHalt(e){return this.device.__clearHalt(this.address,e)}makeTransfer(e,t){return new s.Transfer(this.device,this.address,this.transferType,e,t)}}e.exports.Endpoint=u,e.exports.InEndpoint=class extends u{constructor(e,t){super(e,t),this.direction="in",this.pollTransfers=[],this.pollTransferSize=0,this.pollPending=0,this.pollActive=!1,this.transferAsync=(0,c.promisify)(this.transfer).bind(this)}transfer(e,t){let r=n.alloc(e);try{this.makeTransfer(this.timeout,(e,n,o)=>{t.call(this,e,r.slice(0,o))}).submit(r)}catch(e){o.nextTick(()=>t.call(this,e))}return this}startPoll(e,t,r){let o=(e,t,n,o)=>{if(e?e.errno!==s.LIBUSB_TRANSFER_CANCELLED&&this.pollActive&&(this.emit("error",e),this.stopPoll()):this.emit("data",n.slice(0,o)),this.pollActive)i(t);else if(this.pollPending--,0===this.pollPending&&(this.pollTransfers=[],this.pollActive=!1,this.emit("end"),r)){let t=(null==e?void 0:e.errno)===s.LIBUSB_TRANSFER_CANCELLED;r(t?void 0:e,n,o,t)}},i=e=>{try{e.submit(n.alloc(this.pollTransferSize),(t,r,n)=>{o(t,e,r,n)})}catch(e){this.emit("error",e),this.stopPoll()}};return this.pollTransfers=this.startPollTransfers(e,t,function(e,t,r){o(e,this,t,r)}),this.pollTransfers.forEach(i),this.pollPending=this.pollTransfers.length,this.pollTransfers}startPollTransfers(e=3,t=this.descriptor.wMaxPacketSize,r){if(this.pollActive)throw Error("Polling already active");this.pollTransferSize=t,this.pollActive=!0,this.pollPending=0;let n=[];for(let t=0;t{t&&t.call(this,e,n||0)};try{this.makeTransfer(this.timeout,r).submit(e)}catch(e){o.nextTick(()=>r(e))}return this}transferWithZLP(e,t){e.length%this.descriptor.wMaxPacketSize==0?(this.transfer(e),this.transfer(n.alloc(0),t)):this.transfer(e,t)}}}),r.register("53X0T",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Capability=void 0,e.exports.Capability=class{constructor(e,t){if(this.device=e,this.id=t,!e._bosDescriptor)throw Error("bosDescriptor not found");this.descriptor=e._bosDescriptor.capabilities[this.id],this.type=this.descriptor.bDevCapabilityType,this.data=this.descriptor.dev_capability_data}}}),r.register("eyiS7",function(e,t){var n=r("awmEs").Buffer;Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.WebUSBDevice=void 0;var o=r("7rWg5"),i=r("gOtyk"),s=r("ikaqy");class c{static async createInstance(e,t=!0){let r=new c(e,t);return await r.initialize(),r}constructor(e,t){this.device=e,this.autoDetachKernelDriver=t,this.manufacturerName=null,this.productName=null,this.serialNumber=null,this.configurations=[];let r=this.decodeVersion(e.deviceDescriptor.bcdUSB);this.usbVersionMajor=r.major,this.usbVersionMinor=r.minor,this.usbVersionSubminor=r.sub,this.deviceClass=e.deviceDescriptor.bDeviceClass,this.deviceSubclass=e.deviceDescriptor.bDeviceSubClass,this.deviceProtocol=e.deviceDescriptor.bDeviceProtocol,this.vendorId=e.deviceDescriptor.idVendor,this.productId=e.deviceDescriptor.idProduct;let n=this.decodeVersion(e.deviceDescriptor.bcdDevice);this.deviceVersionMajor=n.major,this.deviceVersionMinor=n.minor,this.deviceVersionSubminor=n.sub,this.controlTransferAsync=(0,i.promisify)(this.device.controlTransfer).bind(this.device),this.setConfigurationAsync=(0,i.promisify)(this.device.setConfiguration).bind(this.device),this.resetAsync=(0,i.promisify)(this.device.reset).bind(this.device),this.getStringDescriptorAsync=(0,i.promisify)(this.device.getStringDescriptor).bind(this.device)}get configuration(){if(!this.device.configDescriptor)return null;let e=this.device.configDescriptor.bConfigurationValue;return this.configurations.find(t=>t.configurationValue===e)||null}get opened(){return!!this.device.interfaces}async open(){try{if(this.opened)return;this.device.open(),"win32"!==(0,s.platform)()&&this.device.setAutoDetachKernelDriver(this.autoDetachKernelDriver)}catch(e){throw Error(`open error: ${e}`)}}async close(){try{if(!this.opened)return;try{if(this.configuration)for(let e of this.configuration.interfaces)await this._releaseInterface(e.interfaceNumber),this.configuration.interfaces[this.configuration.interfaces.indexOf(e)]={interfaceNumber:e.interfaceNumber,alternate:e.alternate,alternates:e.alternates,claimed:!1}}catch(e){}this.device.close()}catch(e){throw Error(`close error: ${e}`)}}async selectConfiguration(e){if(!this.opened||!this.device.configDescriptor)throw Error("selectConfiguration error: invalid state");if(this.device.configDescriptor.bConfigurationValue===e)return;let t=this.configurations.find(t=>t.configurationValue===e);if(!t)throw Error("selectConfiguration error: configuration not found");try{await this.setConfigurationAsync(e)}catch(e){throw Error(`selectConfiguration error: ${e}`)}}async claimInterface(e){if(!this.opened)throw Error("claimInterface error: invalid state");if(!this.configuration)throw Error("claimInterface error: interface not found");let t=this.configuration.interfaces.find(t=>t.interfaceNumber===e);if(!t)throw Error("claimInterface error: interface not found");if(!t.claimed)try{this.device.interface(e).claim(),this.configuration.interfaces[this.configuration.interfaces.indexOf(t)]={interfaceNumber:e,alternate:t.alternate,alternates:t.alternates,claimed:!0}}catch(e){throw Error(`claimInterface error: ${e}`)}}async releaseInterface(e){if(await this._releaseInterface(e),this.configuration){let t=this.configuration.interfaces.find(t=>t.interfaceNumber===e);t&&(this.configuration.interfaces[this.configuration.interfaces.indexOf(t)]={interfaceNumber:e,alternate:t.alternate,alternates:t.alternates,claimed:!1})}}async selectAlternateInterface(e,t){if(!this.opened)throw Error("selectAlternateInterface error: invalid state");if(!this.configuration)throw Error("selectAlternateInterface error: interface not found");let r=this.configuration.interfaces.find(t=>t.interfaceNumber===e);if(!r)throw Error("selectAlternateInterface error: interface not found");if(!r.claimed)throw Error("selectAlternateInterface error: invalid state");try{let r=this.device.interface(e);await r.setAltSettingAsync(t)}catch(e){throw Error(`selectAlternateInterface error: ${e}`)}}async controlTransferIn(e,t){try{this.checkDeviceOpen();let r=this.controlTransferParamsToType(e,o.LIBUSB_ENDPOINT_IN),n=await this.controlTransferAsync(r,e.request,e.value,e.index,t);return{data:n?new DataView(new Uint8Array(n).buffer):void 0,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{status:"stall"};if(e.errno===o.LIBUSB_TRANSFER_OVERFLOW)return{status:"babble"};throw Error(`controlTransferIn error: ${e}`)}}async controlTransferOut(e,t){try{this.checkDeviceOpen();let r=this.controlTransferParamsToType(e,o.LIBUSB_ENDPOINT_OUT),i=t?n.from(t):n.alloc(0),s=await this.controlTransferAsync(r,e.request,e.value,e.index,i);return{bytesWritten:s,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{bytesWritten:0,status:"stall"};throw Error(`controlTransferOut error: ${e}`)}}async clearHalt(e,t){try{let r=t|("in"===e?o.LIBUSB_ENDPOINT_IN:o.LIBUSB_ENDPOINT_OUT);await this.controlTransferAsync(o.LIBUSB_RECIPIENT_ENDPOINT,1,0,r,n.from(new Uint8Array))}catch(e){throw Error(`clearHalt error: ${e}`)}}async transferIn(e,t){try{this.checkDeviceOpen();let r=this.getEndpoint(e|o.LIBUSB_ENDPOINT_IN),n=await r.transferAsync(t);return{data:n?new DataView(new Uint8Array(n).buffer):void 0,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{status:"stall"};if(e.errno===o.LIBUSB_TRANSFER_OVERFLOW)return{status:"babble"};throw Error(`transferIn error: ${e}`)}}async transferOut(e,t){try{this.checkDeviceOpen();let r=this.getEndpoint(e|o.LIBUSB_ENDPOINT_OUT),i=n.from(t),s=await r.transferAsync(i);return{bytesWritten:s,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{bytesWritten:0,status:"stall"};throw Error(`transferOut error: ${e}`)}}async reset(){try{await this.resetAsync()}catch(e){throw Error(`reset error: ${e}`)}}async isochronousTransferIn(e,t){throw Error("isochronousTransferIn error: method not implemented")}async isochronousTransferOut(e,t,r){throw Error("isochronousTransferOut error: method not implemented")}async forget(){throw Error("forget error: method not implemented")}async initialize(){try{this.opened||(this.device.open(),255===this.deviceClass&&"darwin"===(0,s.platform)()&&await this.setConfigurationAsync(1)),this.manufacturerName=await this.getStringDescriptor(this.device.deviceDescriptor.iManufacturer),this.productName=await this.getStringDescriptor(this.device.deviceDescriptor.iProduct),this.serialNumber=await this.getStringDescriptor(this.device.deviceDescriptor.iSerialNumber),this.configurations=await this.getConfigurations()}catch(e){throw Error(`initialize error: ${e}`)}finally{this.opened&&this.device.close()}}decodeVersion(e){let t=`0000${e.toString(16)}`.slice(-4);return{major:parseInt(t.substr(0,2),void 0),minor:parseInt(t.substr(2,1),void 0),sub:parseInt(t.substr(3,1),void 0)}}async getStringDescriptor(e){try{let t=await this.getStringDescriptorAsync(e);return t?t.toString():""}catch(e){return""}}async getConfigurations(){let e=[];for(let t of this.device.allConfigDescriptors){let r=[];for(let e of t.interfaces){let t=[];for(let r of e){let e=[];for(let t of r.endpoints)e.push({endpointNumber:127&t.bEndpointAddress,direction:t.bEndpointAddress&o.LIBUSB_ENDPOINT_IN?"in":"out",type:(3&t.bmAttributes)===o.LIBUSB_TRANSFER_TYPE_BULK?"bulk":(3&t.bmAttributes)===o.LIBUSB_TRANSFER_TYPE_INTERRUPT?"interrupt":"isochronous",packetSize:t.wMaxPacketSize});t.push({alternateSetting:r.bAlternateSetting,interfaceClass:r.bInterfaceClass,interfaceSubclass:r.bInterfaceSubClass,interfaceProtocol:r.bInterfaceProtocol,interfaceName:await this.getStringDescriptor(r.iInterface),endpoints:e})}let n=e[0].bInterfaceNumber,i=t.find(e=>e.alternateSetting===this.device.interface(n).altSetting);i&&r.push({interfaceNumber:n,alternate:i,alternates:t,claimed:!1})}e.push({configurationValue:t.bConfigurationValue,configurationName:await this.getStringDescriptor(t.iConfiguration),interfaces:r})}return e}getEndpoint(e){if(this.device.interfaces)for(let t of this.device.interfaces){let r=t.endpoint(e);if(r)return r}}controlTransferParamsToType(e,t){let r="device"===e.recipient?o.LIBUSB_RECIPIENT_DEVICE:"interface"===e.recipient?o.LIBUSB_RECIPIENT_INTERFACE:"endpoint"===e.recipient?o.LIBUSB_RECIPIENT_ENDPOINT:o.LIBUSB_RECIPIENT_OTHER,n="standard"===e.requestType?o.LIBUSB_REQUEST_TYPE_STANDARD:"class"===e.requestType?o.LIBUSB_REQUEST_TYPE_CLASS:o.LIBUSB_REQUEST_TYPE_VENDOR;return r|n|t}async _releaseInterface(e){if(!this.opened)throw Error("releaseInterface error: invalid state");if(!this.configuration)throw Error("releaseInterface error: interface not found");let t=this.configuration.interfaces.find(t=>t.interfaceNumber===e);if(!t)throw Error("releaseInterface error: interface not found");if(t.claimed)try{let t=this.device.interface(e);await t.releaseAsync()}catch(e){throw Error(`releaseInterface error: ${e}`)}}checkDeviceOpen(){if(!this.opened)throw Error("The device must be opened first")}}e.exports.WebUSBDevice=c}),r.register("3AQYC",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/packages/connect-examples/native-android-example/app/src/main/assets/index.980df355.js b/packages/connect-examples/native-android-example/app/src/main/assets/index.980df355.js new file mode 100644 index 000000000..49dfddd5b --- /dev/null +++ b/packages/connect-examples/native-android-example/app/src/main/assets/index.980df355.js @@ -0,0 +1,8 @@ +let $ce1f303d0aa8ec51$var$postMessage$1,$ce1f303d0aa8ec51$var$_core,$ce1f303d0aa8ec51$var$_deviceList,$ce1f303d0aa8ec51$var$_connector,$d70b7d984fd77812$var$bridge,$d70b7d984fd77812$var$runPromise;function $parcel$export(r,i,n,s){Object.defineProperty(r,i,{get:n,set:s,enumerable:!0,configurable:!0})}var r,i,n,s,$ce1f303d0aa8ec51$var$ReflectOwnKeys,$ce1f303d0aa8ec51$var$_a$1,$ce1f303d0aa8ec51$var$_a,$ce1f303d0aa8ec51$var$Networks,$ce1f303d0aa8ec51$var$SignatureType,$37578c5600331006$var$ReflectOwnKeys,$37578c5600331006$var$_core,$parcel$global="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function $parcel$interopDefault(r){return r&&r.__esModule?r.default:r}function $parcel$defineInteropFlag(r){Object.defineProperty(r,"__esModule",{value:!0,configurable:!0})}var $parcel$modules={},$parcel$inits={},parcelRequire=$parcel$global.parcelRequire2d1f;null==parcelRequire&&((parcelRequire=function(r){if(r in $parcel$modules)return $parcel$modules[r].exports;if(r in $parcel$inits){var i=$parcel$inits[r];delete $parcel$inits[r];var n={id:r,exports:{}};return $parcel$modules[r]=n,i.call(n.exports,n,n.exports),n.exports}var s=Error("Cannot find module '"+r+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(r,i){$parcel$inits[r]=i},$parcel$global.parcelRequire2d1f=parcelRequire),parcelRequire.register("awmEs",function(r,i){$parcel$export(r.exports,"Buffer",()=>n,r=>n=r),$parcel$export(r.exports,"INSPECT_MAX_BYTES",()=>s,r=>s=r);var n,s,a=parcelRequire("cK8LV"),o=parcelRequire("7y6mg");let d="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;n=c,s=50;let f=2147483647;function l(){try{let r=new Uint8Array(1),i={foo:function(){return 42}};return Object.setPrototypeOf(i,Uint8Array.prototype),Object.setPrototypeOf(r,i),42===r.foo()}catch(r){return!1}}function u(r){if(r>f)throw RangeError('The value "'+r+'" is invalid for option "size"');let i=new Uint8Array(r);return Object.setPrototypeOf(i,c.prototype),i}function c(r,i,n){if("number"==typeof r){if("string"==typeof i)throw TypeError('The "string" argument must be of type string. Received type number');return m(r)}return p(r,i,n)}function p(r,i,n){if("string"==typeof r)return v(r,i);if(ArrayBuffer.isView(r))return b(r);if(null==r)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);if(ep(r,ArrayBuffer)||r&&ep(r.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(ep(r,SharedArrayBuffer)||r&&ep(r.buffer,SharedArrayBuffer)))return T(r,i,n);if("number"==typeof r)throw TypeError('The "value" argument must not be of type number. Received type number');let s=r.valueOf&&r.valueOf();if(null!=s&&s!==r)return c.from(s,i,n);let a=E(r);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof r[Symbol.toPrimitive])return c.from(r[Symbol.toPrimitive]("string"),i,n);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r)}function h(r){if("number"!=typeof r)throw TypeError('"size" argument must be of type number');if(r<0)throw RangeError('The value "'+r+'" is invalid for option "size"')}function g(r,i,n){return(h(r),r<=0)?u(r):void 0!==i?"string"==typeof n?u(r).fill(i,n):u(r).fill(i):u(r)}function m(r){return h(r),u(r<0?0:0|w(r))}function v(r,i){if(("string"!=typeof i||""===i)&&(i="utf8"),!c.isEncoding(i))throw TypeError("Unknown encoding: "+i);let n=0|S(r,i),s=u(n),a=s.write(r,i);return a!==n&&(s=s.slice(0,a)),s}function _(r){let i=r.length<0?0:0|w(r.length),n=u(i);for(let s=0;s=f)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+f.toString(16)+" bytes");return 0|r}function S(r,i){if(c.isBuffer(r))return r.length;if(ArrayBuffer.isView(r)||ep(r,ArrayBuffer))return r.byteLength;if("string"!=typeof r)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof r);let n=r.length,s=arguments.length>2&&!0===arguments[2];if(!s&&0===n)return 0;let a=!1;for(;;)switch(i){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return ed(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return eu(r).length;default:if(a)return s?-1:ed(r).length;i=(""+i).toLowerCase(),a=!0}}function I(r,i,n){let s=!1;if((void 0===i||i<0)&&(i=0),i>this.length||((void 0===n||n>this.length)&&(n=this.length),n<=0||(n>>>=0)<=(i>>>=0)))return"";for(r||(r="utf8");;)switch(r){case"hex":return z(this,i,n);case"utf8":case"utf-8":return B(this,i,n);case"ascii":return U(this,i,n);case"latin1":case"binary":return H(this,i,n);case"base64":return q(this,i,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return G(this,i,n);default:if(s)throw TypeError("Unknown encoding: "+r);r=(r+"").toLowerCase(),s=!0}}function O(r,i,n){let s=r[i];r[i]=r[n],r[n]=s}function C(r,i,n,s,a){if(0===r.length)return -1;if("string"==typeof n?(s=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),eh(n=+n)&&(n=a?0:r.length-1),n<0&&(n=r.length+n),n>=r.length){if(a)return -1;n=r.length-1}else if(n<0){if(!a)return -1;n=0}if("string"==typeof i&&(i=c.from(i,s)),c.isBuffer(i))return 0===i.length?-1:A(r,i,n,s,a);if("number"==typeof i)return(i&=255,"function"==typeof Uint8Array.prototype.indexOf)?a?Uint8Array.prototype.indexOf.call(r,i,n):Uint8Array.prototype.lastIndexOf.call(r,i,n):A(r,[i],n,s,a);throw TypeError("val must be string, number or Buffer")}function A(r,i,n,s,a){let o,d=1,f=r.length,l=i.length;if(void 0!==s&&("ucs2"===(s=String(s).toLowerCase())||"ucs-2"===s||"utf16le"===s||"utf-16le"===s)){if(r.length<2||i.length<2)return -1;d=2,f/=2,l/=2,n/=2}function u(r,i){return 1===d?r[i]:r.readUInt16BE(i*d)}if(a){let s=-1;for(o=n;of&&(n=f-l),o=n;o>=0;o--){let n=!0;for(let s=0;so&&(s=o):s=o;let d=i.length;for(s>d/2&&(s=d/2),a=0;a239?4:i>223?3:i>191?2:1;if(a+d<=n){let n,s,f,l;switch(d){case 1:i<128&&(o=i);break;case 2:(192&(n=r[a+1]))==128&&(l=(31&i)<<6|63&n)>127&&(o=l);break;case 3:n=r[a+1],s=r[a+2],(192&n)==128&&(192&s)==128&&(l=(15&i)<<12|(63&n)<<6|63&s)>2047&&(l<55296||l>57343)&&(o=l);break;case 4:n=r[a+1],s=r[a+2],f=r[a+3],(192&n)==128&&(192&s)==128&&(192&f)==128&&(l=(15&i)<<18|(63&n)<<12|(63&s)<<6|63&f)>65535&&l<1114112&&(o=l)}}null===o?(o=65533,d=1):o>65535&&(o-=65536,s.push(o>>>10&1023|55296),o=56320|1023&o),s.push(o),a+=d}return F(s)}c.TYPED_ARRAY_SUPPORT=l(),c.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}}),c.poolSize=8192,c.from=function(r,i,n){return p(r,i,n)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array),c.alloc=function(r,i,n){return g(r,i,n)},c.allocUnsafe=function(r){return m(r)},c.allocUnsafeSlow=function(r){return m(r)},c.isBuffer=function(r){return null!=r&&!0===r._isBuffer&&r!==c.prototype},c.compare=function(r,i){if(ep(r,Uint8Array)&&(r=c.from(r,r.offset,r.byteLength)),ep(i,Uint8Array)&&(i=c.from(i,i.offset,i.byteLength)),!c.isBuffer(r)||!c.isBuffer(i))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(r===i)return 0;let n=r.length,s=i.length;for(let a=0,o=Math.min(n,s);as.length?(c.isBuffer(i)||(i=c.from(i)),i.copy(s,a)):Uint8Array.prototype.set.call(s,i,a);else if(c.isBuffer(i))i.copy(s,a);else throw TypeError('"list" argument must be an Array of Buffers');a+=i.length}return s},c.byteLength=S,c.prototype._isBuffer=!0,c.prototype.swap16=function(){let r=this.length;if(r%2!=0)throw RangeError("Buffer size must be a multiple of 16-bits");for(let i=0;ii&&(r+=" ... "),""},d&&(c.prototype[d]=c.prototype.inspect),c.prototype.compare=function(r,i,n,s,a){if(ep(r,Uint8Array)&&(r=c.from(r,r.offset,r.byteLength)),!c.isBuffer(r))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof r);if(void 0===i&&(i=0),void 0===n&&(n=r?r.length:0),void 0===s&&(s=0),void 0===a&&(a=this.length),i<0||n>r.length||s<0||a>this.length)throw RangeError("out of range index");if(s>=a&&i>=n)return 0;if(s>=a)return -1;if(i>=n)return 1;if(i>>>=0,n>>>=0,s>>>=0,a>>>=0,this===r)return 0;let o=a-s,d=n-i,f=Math.min(o,d),l=this.slice(s,a),u=r.slice(i,n);for(let r=0;r>>=0,isFinite(n)?(n>>>=0,void 0===s&&(s="utf8")):(s=n,n=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let a=this.length-i;if((void 0===n||n>a)&&(n=a),r.length>0&&(n<0||i<0)||i>this.length)throw RangeError("Attempt to write outside buffer bounds");s||(s="utf8");let o=!1;for(;;)switch(s){case"hex":return k(this,r,i,n);case"utf8":case"utf-8":return M(this,r,i,n);case"ascii":case"latin1":case"binary":return D(this,r,i,n);case"base64":return P(this,r,i,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,r,i,n);default:if(o)throw TypeError("Unknown encoding: "+s);s=(""+s).toLowerCase(),o=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};let L=4096;function F(r){let i=r.length;if(i<=L)return String.fromCharCode.apply(String,r);let n="",s=0;for(;ss)&&(n=s);let a="";for(let s=i;sn)throw RangeError("Trying to access beyond buffer length")}function K(r,i,n,s,a,o){if(!c.isBuffer(r))throw TypeError('"buffer" argument must be a Buffer instance');if(i>a||ir.length)throw RangeError("Index out of range")}function W(r,i,n,s,a){ei(i,s,a,r,n,7);let o=Number(i&BigInt(4294967295));r[n++]=o,o>>=8,r[n++]=o,o>>=8,r[n++]=o,o>>=8,r[n++]=o;let d=Number(i>>BigInt(32)&BigInt(4294967295));return r[n++]=d,d>>=8,r[n++]=d,d>>=8,r[n++]=d,d>>=8,r[n++]=d,n}function $(r,i,n,s,a){ei(i,s,a,r,n,7);let o=Number(i&BigInt(4294967295));r[n+7]=o,o>>=8,r[n+6]=o,o>>=8,r[n+5]=o,o>>=8,r[n+4]=o;let d=Number(i>>BigInt(32)&BigInt(4294967295));return r[n+3]=d,d>>=8,r[n+2]=d,d>>=8,r[n+1]=d,d>>=8,r[n]=d,n+8}function Y(r,i,n,s,a,o){if(n+s>r.length||n<0)throw RangeError("Index out of range")}function Z(r,i,n,s,a){return i=+i,n>>>=0,a||Y(r,i,n,4,34028234663852886e22,-34028234663852886e22),o.write(r,i,n,s,23,4),n+4}function X(r,i,n,s,a){return i=+i,n>>>=0,a||Y(r,i,n,8,17976931348623157e292,-17976931348623157e292),o.write(r,i,n,s,52,8),n+8}c.prototype.slice=function(r,i){let n=this.length;r=~~r,i=void 0===i?n:~~i,r<0?(r+=n)<0&&(r=0):r>n&&(r=n),i<0?(i+=n)<0&&(i=0):i>n&&(i=n),i>>=0,i>>>=0,n||V(r,i,this.length);let s=this[r],a=1,o=0;for(;++o>>=0,i>>>=0,n||V(r,i,this.length);let s=this[r+--i],a=1;for(;i>0&&(a*=256);)s+=this[r+--i]*a;return s},c.prototype.readUint8=c.prototype.readUInt8=function(r,i){return r>>>=0,i||V(r,1,this.length),this[r]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(r,i){return r>>>=0,i||V(r,2,this.length),this[r]|this[r+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(r,i){return r>>>=0,i||V(r,2,this.length),this[r]<<8|this[r+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(r,i){return r>>>=0,i||V(r,4,this.length),(this[r]|this[r+1]<<8|this[r+2]<<16)+16777216*this[r+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(r,i){return r>>>=0,i||V(r,4,this.length),16777216*this[r]+(this[r+1]<<16|this[r+2]<<8|this[r+3])},c.prototype.readBigUInt64LE=eg(function(r){en(r>>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=i+256*this[++r]+65536*this[++r]+16777216*this[++r],a=this[++r]+256*this[++r]+65536*this[++r]+16777216*n;return BigInt(s)+(BigInt(a)<>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=16777216*i+65536*this[++r]+256*this[++r]+this[++r],a=16777216*this[++r]+65536*this[++r]+256*this[++r]+n;return(BigInt(s)<>>=0,i>>>=0,n||V(r,i,this.length);let s=this[r],a=1,o=0;for(;++o=(a*=128)&&(s-=Math.pow(2,8*i)),s},c.prototype.readIntBE=function(r,i,n){r>>>=0,i>>>=0,n||V(r,i,this.length);let s=i,a=1,o=this[r+--s];for(;s>0&&(a*=256);)o+=this[r+--s]*a;return o>=(a*=128)&&(o-=Math.pow(2,8*i)),o},c.prototype.readInt8=function(r,i){return(r>>>=0,i||V(r,1,this.length),128&this[r])?-((255-this[r]+1)*1):this[r]},c.prototype.readInt16LE=function(r,i){r>>>=0,i||V(r,2,this.length);let n=this[r]|this[r+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(r,i){r>>>=0,i||V(r,2,this.length);let n=this[r+1]|this[r]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(r,i){return r>>>=0,i||V(r,4,this.length),this[r]|this[r+1]<<8|this[r+2]<<16|this[r+3]<<24},c.prototype.readInt32BE=function(r,i){return r>>>=0,i||V(r,4,this.length),this[r]<<24|this[r+1]<<16|this[r+2]<<8|this[r+3]},c.prototype.readBigInt64LE=eg(function(r){en(r>>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=this[r+4]+256*this[r+5]+65536*this[r+6]+(n<<24);return(BigInt(s)<>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=(i<<24)+65536*this[++r]+256*this[++r]+this[++r];return(BigInt(s)<>>=0,i||V(r,4,this.length),o.read(this,r,!0,23,4)},c.prototype.readFloatBE=function(r,i){return r>>>=0,i||V(r,4,this.length),o.read(this,r,!1,23,4)},c.prototype.readDoubleLE=function(r,i){return r>>>=0,i||V(r,8,this.length),o.read(this,r,!0,52,8)},c.prototype.readDoubleBE=function(r,i){return r>>>=0,i||V(r,8,this.length),o.read(this,r,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(r,i,n,s){if(r=+r,i>>>=0,n>>>=0,!s){let s=Math.pow(2,8*n)-1;K(this,r,i,n,s,0)}let a=1,o=0;for(this[i]=255&r;++o>>=0,n>>>=0,!s){let s=Math.pow(2,8*n)-1;K(this,r,i,n,s,0)}let a=n-1,o=1;for(this[i+a]=255&r;--a>=0&&(o*=256);)this[i+a]=r/o&255;return i+n},c.prototype.writeUint8=c.prototype.writeUInt8=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,1,255,0),this[i]=255&r,i+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,2,65535,0),this[i]=255&r,this[i+1]=r>>>8,i+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,2,65535,0),this[i]=r>>>8,this[i+1]=255&r,i+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,4,4294967295,0),this[i+3]=r>>>24,this[i+2]=r>>>16,this[i+1]=r>>>8,this[i]=255&r,i+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,4,4294967295,0),this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r,i+4},c.prototype.writeBigUInt64LE=eg(function(r,i=0){return W(this,r,i,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeBigUInt64BE=eg(function(r,i=0){return $(this,r,i,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeIntLE=function(r,i,n,s){if(r=+r,i>>>=0,!s){let s=Math.pow(2,8*n-1);K(this,r,i,n,s-1,-s)}let a=0,o=1,d=0;for(this[i]=255&r;++a>0)-d&255;return i+n},c.prototype.writeIntBE=function(r,i,n,s){if(r=+r,i>>>=0,!s){let s=Math.pow(2,8*n-1);K(this,r,i,n,s-1,-s)}let a=n-1,o=1,d=0;for(this[i+a]=255&r;--a>=0&&(o*=256);)r<0&&0===d&&0!==this[i+a+1]&&(d=1),this[i+a]=(r/o>>0)-d&255;return i+n},c.prototype.writeInt8=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,1,127,-128),r<0&&(r=255+r+1),this[i]=255&r,i+1},c.prototype.writeInt16LE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,2,32767,-32768),this[i]=255&r,this[i+1]=r>>>8,i+2},c.prototype.writeInt16BE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,2,32767,-32768),this[i]=r>>>8,this[i+1]=255&r,i+2},c.prototype.writeInt32LE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,4,2147483647,-2147483648),this[i]=255&r,this[i+1]=r>>>8,this[i+2]=r>>>16,this[i+3]=r>>>24,i+4},c.prototype.writeInt32BE=function(r,i,n){return r=+r,i>>>=0,n||K(this,r,i,4,2147483647,-2147483648),r<0&&(r=4294967295+r+1),this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r,i+4},c.prototype.writeBigInt64LE=eg(function(r,i=0){return W(this,r,i,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),c.prototype.writeBigInt64BE=eg(function(r,i=0){return $(this,r,i,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),c.prototype.writeFloatLE=function(r,i,n){return Z(this,r,i,!0,n)},c.prototype.writeFloatBE=function(r,i,n){return Z(this,r,i,!1,n)},c.prototype.writeDoubleLE=function(r,i,n){return X(this,r,i,!0,n)},c.prototype.writeDoubleBE=function(r,i,n){return X(this,r,i,!1,n)},c.prototype.copy=function(r,i,n,s){if(!c.isBuffer(r))throw TypeError("argument should be a Buffer");if(n||(n=0),s||0===s||(s=this.length),i>=r.length&&(i=r.length),i||(i=0),s>0&&s=this.length)throw RangeError("Index out of range");if(s<0)throw RangeError("sourceEnd out of bounds");s>this.length&&(s=this.length),r.length-i>>=0,n=void 0===n?this.length:n>>>0,r||(r=0),"number"==typeof r)for(a=i;a=s+4;n-=3)i=`_${r.slice(n-3,n)}${i}`;return`${r.slice(0,n)}${i}`}function et(r,i,n){en(i,"offset"),(void 0===r[i]||void 0===r[i+n])&&es(i,r.length-(n+1))}function ei(r,i,n,s,a,o){if(r>n||r3?0===i||i===BigInt(0)?`>= 0${a} and < 2${a} ** ${(o+1)*8}${a}`:`>= -(2${a} ** ${(o+1)*8-1}${a}) and < 2 ** ${(o+1)*8-1}${a}`:`>= ${i}${a} and <= ${n}${a}`,new J.ERR_OUT_OF_RANGE("value",s,r)}et(s,a,o)}function en(r,i){if("number"!=typeof r)throw new J.ERR_INVALID_ARG_TYPE(i,"number",r)}function es(r,i,n){if(Math.floor(r)!==r)throw en(r,n),new J.ERR_OUT_OF_RANGE(n||"offset","an integer",r);if(i<0)throw new J.ERR_BUFFER_OUT_OF_BOUNDS;throw new J.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${i}`,r)}Q("ERR_BUFFER_OUT_OF_BOUNDS",function(r){return r?`${r} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Q("ERR_INVALID_ARG_TYPE",function(r,i){return`The "${r}" argument must be of type number. Received type ${typeof i}`},TypeError),Q("ERR_OUT_OF_RANGE",function(r,i,n){let s=`The value of "${r}" is out of range.`,a=n;return Number.isInteger(n)&&Math.abs(n)>4294967296?a=ee(String(n)):"bigint"==typeof n&&(a=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(a=ee(a)),a+="n"),s+=` It must be ${i}. Received ${a}`},RangeError);let ea=/[^+/0-9A-Za-z-_]/g;function eo(r){if((r=(r=r.split("=")[0]).trim().replace(ea,"")).length<2)return"";for(;r.length%4!=0;)r+="=";return r}function ed(r,i){let n;i=i||1/0;let s=r.length,a=null,o=[];for(let d=0;d55295&&n<57344){if(!a){if(n>56319||d+1===s){(i-=3)>-1&&o.push(239,191,189);continue}a=n;continue}if(n<56320){(i-=3)>-1&&o.push(239,191,189),a=n;continue}n=(a-55296<<10|n-56320)+65536}else a&&(i-=3)>-1&&o.push(239,191,189);if(a=null,n<128){if((i-=1)<0)break;o.push(n)}else if(n<2048){if((i-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((i-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else if(n<1114112){if((i-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}else throw Error("Invalid code point")}return o}function ef(r){let i=[];for(let n=0;n>8,a.push(n%256),a.push(s);return a}function eu(r){return a.toByteArray(eo(r))}function ec(r,i,n,s){let a;for(a=0;a=i.length)&&!(a>=r.length);++a)i[a+n]=r[a];return a}function ep(r,i){return r instanceof i||null!=r&&null!=r.constructor&&null!=r.constructor.name&&r.constructor.name===i.name}function eh(r){return r!=r}let ey=function(){let r="0123456789abcdef",i=Array(256);for(let n=0;n<16;++n){let s=16*n;for(let a=0;a<16;++a)i[s+a]=r[n]+r[a]}return i}();function eg(r){return"undefined"==typeof BigInt?em:r}function em(){throw Error("BigInt not supported")}}),parcelRequire.register("cK8LV",function(r,i){$parcel$export(r.exports,"toByteArray",()=>n,r=>n=r),$parcel$export(r.exports,"fromByteArray",()=>s,r=>s=r),n=h,s=v;for(var n,s,a=[],o=[],d="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=0,u=f.length;l0)throw Error("Invalid string. Length must be a multiple of 4");var n=r.indexOf("=");-1===n&&(n=i);var s=n===i?0:4-n%4;return[n,s]}function p(r,i,n){return(i+n)*3/4-n}function h(r){var i,n,s=c(r),a=s[0],f=s[1],l=new d(p(r,a,f)),u=0,h=f>0?a-4:a;for(n=0;n>16&255,l[u++]=i>>8&255,l[u++]=255&i;return 2===f&&(i=o[r.charCodeAt(n)]<<2|o[r.charCodeAt(n+1)]>>4,l[u++]=255&i),1===f&&(i=o[r.charCodeAt(n)]<<10|o[r.charCodeAt(n+1)]<<4|o[r.charCodeAt(n+2)]>>2,l[u++]=i>>8&255,l[u++]=255&i),l}function g(r){return a[r>>18&63]+a[r>>12&63]+a[r>>6&63]+a[63&r]}function m(r,i,n){for(var s=[],a=i;al?l:f+d));return 1===s?o.push(a[(i=r[n-1])>>2]+a[i<<4&63]+"=="):2===s&&o.push(a[(i=(r[n-2]<<8)+r[n-1])>>10]+a[i>>4&63]+a[i<<2&63]+"="),o.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63}),parcelRequire.register("7y6mg",function(r,i){var n,s;$parcel$export(r.exports,"read",()=>n,r=>n=r),$parcel$export(r.exports,"write",()=>s,r=>s=r),n=function(r,i,n,s,a){var o,d,f=8*a-s-1,l=(1<>1,c=-7,p=n?a-1:0,h=n?-1:1,g=r[i+p];for(p+=h,o=g&(1<<-c)-1,g>>=-c,c+=f;c>0;o=256*o+r[i+p],p+=h,c-=8);for(d=o&(1<<-c)-1,o>>=-c,c+=s;c>0;d=256*d+r[i+p],p+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return d?NaN:(g?-1:1)*(1/0);d+=Math.pow(2,s),o-=u}return(g?-1:1)*d*Math.pow(2,o-s)},s=function(r,i,n,s,a,o){var d,f,l,u=8*o-a-1,c=(1<>1,h=23===a?5960464477539062e-23:0,g=s?0:o-1,m=s?1:-1,v=i<0||0===i&&1/i<0?1:0;for(isNaN(i=Math.abs(i))||i===1/0?(f=isNaN(i)?1:0,d=c):(d=Math.floor(Math.log(i)/Math.LN2),i*(l=Math.pow(2,-d))<1&&(d--,l*=2),d+p>=1?i+=h/l:i+=h*Math.pow(2,1-p),i*l>=2&&(d++,l/=2),d+p>=c?(f=0,d=c):d+p>=1?(f=(i*l-1)*Math.pow(2,a),d+=p):(f=i*Math.pow(2,p-1)*Math.pow(2,a),d=0));a>=8;r[n+g]=255&f,g+=m,f/=256,a-=8);for(d=d<0;r[n+g]=255&d,g+=m,d/=256,u-=8);r[n+g-m]|=128*v}}),parcelRequire.register("9kaCP",function(r,i){var n=parcelRequire("85PoE"),s=n.MAX_SAFE_COMPONENT_LENGTH,a=n.MAX_SAFE_BUILD_LENGTH,o=n.MAX_LENGTH,d=parcelRequire("aW7Y5");i=r.exports={};let f=i.re=[],l=i.safeRe=[],u=i.src=[],c=i.t={},p=0,h="[a-zA-Z0-9-]",g=[["\\s",1],["\\d",o],[h,a]],m=r=>{for(let[i,n]of g)r=r.split(`${i}*`).join(`${i}{0,${n}}`).split(`${i}+`).join(`${i}{1,${n}}`);return r},v=(r,i,n)=>{let s=m(i),a=p++;d(r,a,i),c[r]=a,u[a]=i,f[a]=new RegExp(i,n?"g":void 0),l[a]=new RegExp(s,n?"g":void 0)};v("NUMERICIDENTIFIER","0|[1-9]\\d*"),v("NUMERICIDENTIFIERLOOSE","\\d+"),v("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${h}*`),v("MAINVERSION",`(${u[c.NUMERICIDENTIFIER]})\\.(${u[c.NUMERICIDENTIFIER]})\\.(${u[c.NUMERICIDENTIFIER]})`),v("MAINVERSIONLOOSE",`(${u[c.NUMERICIDENTIFIERLOOSE]})\\.(${u[c.NUMERICIDENTIFIERLOOSE]})\\.(${u[c.NUMERICIDENTIFIERLOOSE]})`),v("PRERELEASEIDENTIFIER",`(?:${u[c.NUMERICIDENTIFIER]}|${u[c.NONNUMERICIDENTIFIER]})`),v("PRERELEASEIDENTIFIERLOOSE",`(?:${u[c.NUMERICIDENTIFIERLOOSE]}|${u[c.NONNUMERICIDENTIFIER]})`),v("PRERELEASE",`(?:-(${u[c.PRERELEASEIDENTIFIER]}(?:\\.${u[c.PRERELEASEIDENTIFIER]})*))`),v("PRERELEASELOOSE",`(?:-?(${u[c.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${u[c.PRERELEASEIDENTIFIERLOOSE]})*))`),v("BUILDIDENTIFIER",`${h}+`),v("BUILD",`(?:\\+(${u[c.BUILDIDENTIFIER]}(?:\\.${u[c.BUILDIDENTIFIER]})*))`),v("FULLPLAIN",`v?${u[c.MAINVERSION]}${u[c.PRERELEASE]}?${u[c.BUILD]}?`),v("FULL",`^${u[c.FULLPLAIN]}$`),v("LOOSEPLAIN",`[v=\\s]*${u[c.MAINVERSIONLOOSE]}${u[c.PRERELEASELOOSE]}?${u[c.BUILD]}?`),v("LOOSE",`^${u[c.LOOSEPLAIN]}$`),v("GTLT","((?:<|>)?=?)"),v("XRANGEIDENTIFIERLOOSE",`${u[c.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),v("XRANGEIDENTIFIER",`${u[c.NUMERICIDENTIFIER]}|x|X|\\*`),v("XRANGEPLAIN",`[v=\\s]*(${u[c.XRANGEIDENTIFIER]})(?:\\.(${u[c.XRANGEIDENTIFIER]})(?:\\.(${u[c.XRANGEIDENTIFIER]})(?:${u[c.PRERELEASE]})?${u[c.BUILD]}?)?)?`),v("XRANGEPLAINLOOSE",`[v=\\s]*(${u[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[c.XRANGEIDENTIFIERLOOSE]})(?:${u[c.PRERELEASELOOSE]})?${u[c.BUILD]}?)?)?`),v("XRANGE",`^${u[c.GTLT]}\\s*${u[c.XRANGEPLAIN]}$`),v("XRANGELOOSE",`^${u[c.GTLT]}\\s*${u[c.XRANGEPLAINLOOSE]}$`),v("COERCE",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?(?:$|[^\\d])`),v("COERCERTL",u[c.COERCE],!0),v("LONETILDE","(?:~>?)"),v("TILDETRIM",`(\\s*)${u[c.LONETILDE]}\\s+`,!0),i.tildeTrimReplace="$1~",v("TILDE",`^${u[c.LONETILDE]}${u[c.XRANGEPLAIN]}$`),v("TILDELOOSE",`^${u[c.LONETILDE]}${u[c.XRANGEPLAINLOOSE]}$`),v("LONECARET","(?:\\^)"),v("CARETTRIM",`(\\s*)${u[c.LONECARET]}\\s+`,!0),i.caretTrimReplace="$1^",v("CARET",`^${u[c.LONECARET]}${u[c.XRANGEPLAIN]}$`),v("CARETLOOSE",`^${u[c.LONECARET]}${u[c.XRANGEPLAINLOOSE]}$`),v("COMPARATORLOOSE",`^${u[c.GTLT]}\\s*(${u[c.LOOSEPLAIN]})$|^$`),v("COMPARATOR",`^${u[c.GTLT]}\\s*(${u[c.FULLPLAIN]})$|^$`),v("COMPARATORTRIM",`(\\s*)${u[c.GTLT]}\\s*(${u[c.LOOSEPLAIN]}|${u[c.XRANGEPLAIN]})`,!0),i.comparatorTrimReplace="$1$2$3",v("HYPHENRANGE",`^\\s*(${u[c.XRANGEPLAIN]})\\s+-\\s+(${u[c.XRANGEPLAIN]})\\s*$`),v("HYPHENRANGELOOSE",`^\\s*(${u[c.XRANGEPLAINLOOSE]})\\s+-\\s+(${u[c.XRANGEPLAINLOOSE]})\\s*$`),v("STAR","(<|>)?=?\\s*\\*"),v("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),v("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}),parcelRequire.register("85PoE",function(r,i){let n="2.0.0",s=256,a=Number.MAX_SAFE_INTEGER||9007199254740991,o=16,d=s-6,f=["major","premajor","minor","preminor","patch","prepatch","prerelease"];r.exports={MAX_LENGTH:s,MAX_SAFE_COMPONENT_LENGTH:o,MAX_SAFE_BUILD_LENGTH:d,MAX_SAFE_INTEGER:a,RELEASE_TYPES:f,SEMVER_SPEC_VERSION:n,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}),parcelRequire.register("aW7Y5",function(r,i){var n=parcelRequire("9Mq5w");let s=("object"==typeof n&&n.env,()=>{});r.exports=s}),parcelRequire.register("9Mq5w",function(r,i){var n,s,a,o=r.exports={};function d(){throw Error("setTimeout has not been defined")}function f(){throw Error("clearTimeout has not been defined")}function l(r){if(n===setTimeout)return setTimeout(r,0);if((n===d||!n)&&setTimeout)return n=setTimeout,setTimeout(r,0);try{return n(r,0)}catch(i){try{return n.call(null,r,0)}catch(i){return n.call(this,r,0)}}}function u(r){if(s===clearTimeout)return clearTimeout(r);if((s===f||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(r);try{return s(r)}catch(i){try{return s.call(null,r)}catch(i){return s.call(this,r)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:d}catch(r){n=d}try{s="function"==typeof clearTimeout?clearTimeout:f}catch(r){s=f}}();var c=[],p=!1,h=-1;function g(){p&&a&&(p=!1,a.length?c=a.concat(c):h=-1,c.length&&m())}function m(){if(!p){var r=l(g);p=!0;for(var i=c.length;i;){for(a=c,c=[];++h1)for(var n=1;nnew s("string"==typeof r?r:{errorCode:r,message:null!=i?i:"",params:n}),f=r=>r&&r.error instanceof s?{error:r.error.message,code:r.error.errorCode,params:r.error.params}:r&&r.error&&"AxiosError"===r.error.name?{error:r.error.message,code:a.BridgeNetworkError}:r&&r.error instanceof Error?{error:r.error.message,code:r.error.code}:r,l=r=>{for(let i of Object.values(a))if(o[i]===r)return d(i);return new s(r)},u=r=>{let i=String(r||"");return i.includes("LIBUSB_ERROR_ACCESS")?d(a.BridgeNeedsPermission,"LIBUSB_ERROR_ACCESS"):d(a.BridgeNetworkError,i)},c=({currentVersion:i,requireVersion:n,methodName:s,firmwareType:o})=>{if((null==s?void 0:s.startsWith("btc"))===!1&&o===r.exports.EFirmwareType.BitcoinOnly)return v(null!=s?s:"",o);let f=s?` for method '${s}'`:"";return d(a.NewFirmwareUnRelease,`Device firmware version is too low${f}, please update to the latest version`,{current:i,require:n,method:s})},p=({currentVersion:i,requireVersion:n,methodName:s,firmwareType:o})=>{if((null==s?void 0:s.startsWith("btc"))===!1&&o===r.exports.EFirmwareType.BitcoinOnly)return v(null!=s?s:"",o);let f=s?` for method '${s}'`:"";return d(a.CallMethodNeedUpgradeFirmware,`Device firmware version is too low${f}, please update to ${n}`,{current:i,require:n,method:s})},h=(r,i,n,s)=>{let o=n||[],f={firmware:"firmware",ble:"BLE firmware"},l=o.filter(r=>r in f),u=()=>{let r=[];return(null==s?void 0:s.firmware)&&r.push(`firmware version: ${s.firmware}`),(null==s?void 0:s.ble)&&r.push(`BLE version: ${s.ble}`),r.length>0?` (${r.join(", ")})`:""},c=()=>l.map(r=>f[r]).join(" and "),p=`Device ${c()} version is too low. ${u()}`;return d(a.NewFirmwareForceUpdate,p,{connectId:r,deviceId:i,versionTypes:n,currentVersions:s})},g=(r,i,n)=>{let s=n?` Method '${n}'`:"This method";return d(a.CallMethodDeprecated,`Device firmware version is too high. ${s} has been deprecated in ${i}`,{current:r,deprecated:i,method:n})},m=(r,i,n,s,o)=>{let f=`Defective firmware detected (Serial: ${r}, SE: ${i}). Please update immediately.`;return d(a.DefectiveFirmware,f,{serialNo:r,seVersion:i,deviceType:n,connectId:s,deviceId:o})},v=(r,i)=>d(a.DeviceNotSupportMethod,"Device not support this method",{firmwareType:i.toString(),method:r});var _=Object.freeze({__proto__:null,HardwareError:s,HardwareErrorCode:a,HardwareErrorCodeMessage:o,TypedError:d,serializeError:f,CreateErrorByMessage:l,CreateHardwareErrorByBridgeError:u,createNewFirmwareUnReleaseHardwareError:c,createNeedUpgradeFirmwareHardwareError:p,createNewFirmwareForceUpdateHardwareError:h,createDeprecatedHardwareError:g,createDefectiveFirmwareError:m,createDeviceNotSupportMethodError:v});let b=[{vendorId:4617,productId:21440},{vendorId:4617,productId:21441},{vendorId:4617,productId:20298},{vendorId:4617,productId:20299}],T=[a.DeviceInitializeFailed,a.DeviceInterruptedFromOutside,a.DeviceInterruptedFromUser,a.DeviceCheckPassphraseStateError,a.ResponseUnexpectTypeError,a.PinInvalid,a.PinCancelled,a.UnexpectPassphrase],E=[a.DeviceInitializeFailed,a.ResponseUnexpectTypeError];r.exports.EOneKeyBleMessageKeys=void 0,function(r){r.BLE_SELECT="$onekey-ble-select",r.BLE_SELECT_RESULT="$onekey-ble-select-result",r.BLE_STOP_SCAN="$onekey-ble-stop-scan",r.BLE_CANCEL_REQUEST="$onekey-ble-cancel-request",r.BLE_PRE_SELECT="$onekey-ble-pre-select",r.BLE_CLEAR_PRE_SELECT="$onekey-ble-clear-pre-select",r.BLE_PAIRING_REQUEST="$onekey-ble-pairing-request",r.BLE_PAIRING_RESPONSE="$onekey-ble-pairing-response",r.BLE_ENUMERATE="$onekey-ble-enumerate",r.BLE_ENUMERATE_RESULT="$onekey-ble-enumerate-result",r.BLE_DEVICE_DISCONNECTED="$onekey-ble-device-disconnected",r.BLE_AVAILABILITY_CHECK="$onekey-ble-availability-check",r.NOBLE_BLE_ENUMERATE="$onekey-noble-ble-enumerate",r.NOBLE_BLE_STOP_SCAN="$onekey-noble-ble-stop-scan",r.NOBLE_BLE_GET_DEVICE="$onekey-noble-ble-get-device",r.NOBLE_BLE_CONNECT="$onekey-noble-ble-connect",r.NOBLE_BLE_DISCONNECT="$onekey-noble-ble-disconnect",r.NOBLE_BLE_WRITE="$onekey-noble-ble-write",r.NOBLE_BLE_SUBSCRIBE="$onekey-noble-ble-subscribe",r.NOBLE_BLE_UNSUBSCRIBE="$onekey-noble-ble-unsubscribe",r.NOBLE_BLE_NOTIFICATION="$onekey-noble-ble-notification",r.NOBLE_BLE_CANCEL_PAIRING="$onekey-noble-ble-cancel-pairing"}(r.exports.EOneKeyBleMessageKeys||(r.exports.EOneKeyBleMessageKeys={}));let w="00000001-0000-1000-8000-00805f9b34fb",S="00000002-0000-1000-8000-00805f9b34fb",I="00000003-0000-1000-8000-00805f9b34fb",O=63,C=35,A=r=>{if(r.length<9)return!1;let[i,n,s]=r;return String.fromCharCode(i)===String.fromCharCode(O)&&String.fromCharCode(n)===String.fromCharCode(C)&&String.fromCharCode(s)===String.fromCharCode(C)},k=(r,i)=>{var n;if(null===(n=null==i?void 0:i.startsWith)||void 0===n?void 0:n.call(i,"MI"))return!0;let s=/(BixinKey\d{10})|(K\d{4})|(T\d{4})|(Touch\s\w{4})|(Pro\s\w{4})/i;return!!(r&&s.exec(r))};function M(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function D(r,i){let n,s=r=>{},a=r=>{},o=new Promise((i,o)=>M(this,void 0,void 0,function*(){if(s=i,a=o,"function"==typeof r)try{yield r()}catch(r){o(r)}"string"==typeof r&&(n=r)}));return{id:n,data:i,resolve:s,reject:a,promise:o}}"function"==typeof SuppressedError&&SuppressedError;let P=r=>new Promise(i=>{setTimeout(i,r)});r.exports.EDeviceType=void 0,function(r){r.Unknown="unknown",r.Classic="classic",r.Classic1s="classic1s",r.ClassicPure="classicpure",r.Mini="mini",r.Touch="touch",r.Pro="pro"}(r.exports.EDeviceType||(r.exports.EDeviceType={})),r.exports.CreateErrorByMessage=l,r.exports.CreateHardwareErrorByBridgeError=u,r.exports.ERRORS=_,r.exports.ERROR_CODES_REQUIRE_DISCONNECT=E,r.exports.ERROR_CODES_REQUIRE_RELEASE=T,r.exports.HardwareError=s,r.exports.HardwareErrorCode=a,r.exports.HardwareErrorCodeMessage=o,r.exports.ONEKEY_NOTIFY_CHARACTERISTIC_UUID=I,r.exports.ONEKEY_SERVICE_UUID=w,r.exports.ONEKEY_WEBUSB_FILTER=b,r.exports.ONEKEY_WRITE_CHARACTERISTIC_UUID=S,r.exports.TypedError=d,r.exports.createDefectiveFirmwareError=m,r.exports.createDeferred=D,r.exports.createDeprecatedHardwareError=g,r.exports.createDeviceNotSupportMethodError=v,r.exports.createNeedUpgradeFirmwareHardwareError=p,r.exports.createNewFirmwareForceUpdateHardwareError=h,r.exports.createNewFirmwareUnReleaseHardwareError=c,r.exports.isHeaderChunk=A,r.exports.isOnekeyDevice=k,r.exports.serializeError=f,r.exports.wait=P}),parcelRequire.register("7U5sq",function(r,i){(function(){var n,s="4.17.21",a=200,o="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",d="Expected a function",f="Invalid `variable` option passed into `_.template`",l="__lodash_hash_undefined__",u=500,c="__lodash_placeholder__",p=1,h=2,g=4,m=1,v=2,_=1,b=2,T=4,E=8,w=16,S=32,I=64,O=128,C=256,A=512,k=30,M="...",D=800,P=16,N=1,q=2,B=3,L=1/0,F=9007199254740991,U=17976931348623157e292,H=0/0,z=4294967295,G=4294967294,V=2147483647,K=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],W="[object Arguments]",$="[object Array]",Y="[object AsyncFunction]",Z="[object Boolean]",X="[object Date]",J="[object DOMException]",Q="[object Error]",ee="[object Function]",et="[object GeneratorFunction]",ei="[object Map]",en="[object Number]",es="[object Null]",ea="[object Object]",eo="[object Promise]",ed="[object Proxy]",ef="[object RegExp]",el="[object Set]",eu="[object String]",ec="[object Symbol]",ep="[object Undefined]",eh="[object WeakMap]",ey="[object WeakSet]",eg="[object ArrayBuffer]",em="[object DataView]",ev="[object Float32Array]",e_="[object Float64Array]",eb="[object Int8Array]",eT="[object Int16Array]",eE="[object Int32Array]",ew="[object Uint8Array]",eS="[object Uint8ClampedArray]",eR="[object Uint16Array]",eI="[object Uint32Array]",ex=/\b__p \+= '';/g,eO=/\b(__p \+=) '' \+/g,eC=/(__e\(.*?\)|\b__t\)) \+\n'';/g,eA=/&(?:amp|lt|gt|quot|#39);/g,ek=/[&<>"']/g,eM=RegExp(eA.source),eD=RegExp(ek.source),eP=/<%-([\s\S]+?)%>/g,eN=/<%([\s\S]+?)%>/g,eq=/<%=([\s\S]+?)%>/g,eB=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,eL=/^\w*$/,eF=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,eU=/[\\^$.*+?()[\]{}|]/g,ej=RegExp(eU.source),eH=/^\s+/,ez=/\s/,eG=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,eV=/\{\n\/\* \[wrapped with (.+)\] \*/,eK=/,? & /,eW=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,e$=/[()=,{}\[\]\/\s]/,eY=/\\(\\)?/g,eZ=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,eX=/\w*$/,eJ=/^[-+]0x[0-9a-f]+$/i,eQ=/^0b[01]+$/i,e0=/^\[object .+?Constructor\]$/,e3=/^0o[0-7]+$/i,e2=/^(?:0|[1-9]\d*)$/,e8=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,e4=/($^)/,e7=/['\n\r\u2028\u2029\\]/g,e6="\ud800-\udfff",e5="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",e9="\\u2700-\\u27bf",te="a-z\\xdf-\\xf6\\xf8-\\xff",tt="A-Z\\xc0-\\xd6\\xd8-\\xde",tr="\\ufe0e\\ufe0f",ti="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",tn="['’]",ts="["+e6+"]",ta="["+ti+"]",to="["+e5+"]",td="\\d+",tf="["+e9+"]",tl="["+te+"]",tu="[^"+e6+ti+td+e9+te+tt+"]",tc="\ud83c[\udffb-\udfff]",tp="[^"+e6+"]",th="(?:\ud83c[\udde6-\uddff]){2}",ty="[\ud800-\udbff][\udc00-\udfff]",tg="["+tt+"]",tm="\\u200d",tv="(?:"+tl+"|"+tu+")",t_="(?:"+tg+"|"+tu+")",tb="(?:"+tn+"(?:d|ll|m|re|s|t|ve))?",tT="(?:"+tn+"(?:D|LL|M|RE|S|T|VE))?",tE="(?:"+to+"|"+tc+")?",tw="["+tr+"]?",tS="(?:"+tm+"(?:"+[tp,th,ty].join("|")+")"+tw+tE+")*",tR="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",tI="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",tx=tw+tE+tS,tO="(?:"+[tf,th,ty].join("|")+")"+tx,tC="(?:"+[tp+to+"?",to,th,ty,ts].join("|")+")",tA=RegExp(tn,"g"),tk=RegExp(to,"g"),tM=RegExp(tc+"(?="+tc+")|"+tC+tx,"g"),tD=RegExp([tg+"?"+tl+"+"+tb+"(?="+[ta,tg,"$"].join("|")+")",t_+"+"+tT+"(?="+[ta,tg+tv,"$"].join("|")+")",tg+"?"+tv+"+"+tb,tg+"+"+tT,tI,tR,td,tO].join("|"),"g"),tP=RegExp("["+tm+e6+e5+tr+"]"),tN=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tq=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],tB=-1,tL={};tL[ev]=tL[e_]=tL[eb]=tL[eT]=tL[eE]=tL[ew]=tL[eS]=tL[eR]=tL[eI]=!0,tL[W]=tL[$]=tL[eg]=tL[Z]=tL[em]=tL[X]=tL[Q]=tL[ee]=tL[ei]=tL[en]=tL[ea]=tL[ef]=tL[el]=tL[eu]=tL[eh]=!1;var tF={};tF[W]=tF[$]=tF[eg]=tF[em]=tF[Z]=tF[X]=tF[ev]=tF[e_]=tF[eb]=tF[eT]=tF[eE]=tF[ei]=tF[en]=tF[ea]=tF[ef]=tF[el]=tF[eu]=tF[ec]=tF[ew]=tF[eS]=tF[eR]=tF[eI]=!0,tF[Q]=tF[ee]=tF[eh]=!1;var tU={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},tj={"&":"&","<":"<",">":">",'"':""","'":"'"},tH={"&":"&","<":"<",">":">",""":'"',"'":"'"},tz={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},tG=parseFloat,tV=parseInt,tK="object"==typeof $parcel$global&&$parcel$global&&$parcel$global.Object===Object&&$parcel$global,tW="object"==typeof self&&self&&self.Object===Object&&self,t$=tK||tW||Function("return this")(),tY=i&&!i.nodeType&&i,tZ=tY&&r&&!r.nodeType&&r,tX=tZ&&tZ.exports===tY,tJ=tX&&tK.process,tQ=function(){try{var r=tZ&&tZ.require&&tZ.require("util").types;if(r)return r;return tJ&&tJ.binding&&tJ.binding("util")}catch(r){}}(),t0=tQ&&tQ.isArrayBuffer,t1=tQ&&tQ.isDate,t2=tQ&&tQ.isMap,t8=tQ&&tQ.isRegExp,t4=tQ&&tQ.isSet,t7=tQ&&tQ.isTypedArray;function t6(r,i,n){switch(n.length){case 0:return r.call(i);case 1:return r.call(i,n[0]);case 2:return r.call(i,n[0],n[1]);case 3:return r.call(i,n[0],n[1],n[2])}return r.apply(i,n)}function t5(r,i,n,s){for(var a=-1,o=null==r?0:r.length;++a-1}function rn(r,i,n){for(var s=-1,a=null==r?0:r.length;++s-1;);return n}function rk(r,i){for(var n=r.length;n--&&ry(i,r[n],0)>-1;);return n}function rM(r,i){for(var n=r.length,s=0;n--;)r[n]===i&&++s;return s}var rD=rb(tU),rP=rb(tj);function rN(r){return"\\"+tz[r]}function rq(r,i){return null==r?n:r[i]}function rB(r){return tP.test(r)}function rL(r){return tN.test(r)}function rF(r){for(var i,n=[];!(i=r.next()).done;)n.push(i.value);return n}function rU(r){var i=-1,n=Array(r.size);return r.forEach(function(r,s){n[++i]=[s,r]}),n}function rj(r,i){return function(n){return r(i(n))}}function rH(r,i){for(var n=-1,s=r.length,a=0,o=[];++n-1}function iw(r,i){var n=this.__data__,s=iV(n,r);return s<0?(++this.size,n.push([r,i])):n[s][1]=i,this}function iS(r){var i=-1,n=null==r?0:r.length;for(this.clear();++i=i?r:i)),r}function iJ(r,i,s,a,o,d){var f,l=i&p,u=i&h,c=i&g;if(s&&(f=o?s(r,a,o,d):s(r)),f!==n)return f;if(!fs(r))return r;var m=dJ(r);if(m){if(f=ad(r),!l)return sb(r,f)}else{var v=an(r),_=v==ee||v==et;if(d8(r))return sl(r,l);if(v==ea||v==W||_&&!o){if(f=u||_?{}:af(r),!l)return u?sw(r,i$(f,r)):sE(r,iW(f,r))}else{if(!tF[v])return o?r:{};f=al(r,v,l)}}d||(d=new iD);var b=d.get(r);if(b)return b;d.set(r,f),fv(r)?r.forEach(function(n){f.add(iJ(n,i,s,n,r,d))}):fo(r)&&r.forEach(function(n,a){f.set(a,iJ(n,i,s,a,r,d))});var T=c?u?s3:s1:u?f4:f8,E=m?n:T(r);return t9(E||r,function(n,a){E&&(n=r[a=n]),iG(f,a,iJ(n,i,s,a,r,d))}),f}function iQ(r){var i=f8(r);return function(n){return i0(n,r,i)}}function i0(r,i,s){var a=s.length;if(null==r)return!a;for(r=te(r);a--;){var o=s[a],d=i[o],f=r[o];if(f===n&&!(o in r)||!d(f))return!1}return!0}function i3(r,i,s){if("function"!=typeof r)throw new ti(d);return aM(function(){r.apply(n,s)},i)}function i2(r,i,n,s){var o=-1,d=ri,f=!0,l=r.length,u=[],c=i.length;if(!l)return u;n&&(i=rs(i,rx(n))),s?(d=rn,f=!1):i.length>=a&&(d=rC,f=!1,i=new iA(i));e:for(;++oo?0:o+s),(a=a===n||a>o?o:fC(a))<0&&(a+=o),a=s>a?0:fA(a);s0&&n(f)?i>1?ne(f,i-1,n,s,a):ra(a,f):s||(a[a.length]=f)}return a}var nt=sx(),nr=sx(!0);function ni(r,i){return r&&nt(r,i,f8)}function nn(r,i){return r&&nr(r,i,f8)}function ns(r,i){return rr(i,function(i){return fr(r[i])})}function na(r,i){i=sa(i,r);for(var s=0,a=i.length;null!=r&&si}function nl(r,i){return null!=r&&tf.call(r,i)}function nu(r,i){return null!=r&&i in te(r)}function nc(r,i,n){return r>=tW(i,n)&&r=120&&p.length>=120)?new iA(f&&p):n}p=r[0];var h=-1,g=l[0];e:for(;++h-1;)f!==r&&tw.call(f,l,1),tw.call(r,l,1);return r}function nH(r,i){for(var n=r?i.length:0,s=n-1;n--;){var a=i[n];if(n==s||a!==o){var o=a;ap(a)?tw.call(r,a,1):n5(r,a)}}return r}function nz(r,i){return r+tP(tJ()*(i-r+1))}function nG(r,i,n,s){for(var a=-1,o=tK(tD((i-r)/(n||1)),0),d=ez(o);o--;)d[s?o:++a]=r,r+=n;return d}function nV(r,i){var n="";if(!r||i<1||i>F)return n;do i%2&&(n+=r),(i=tP(i/2))&&(r+=r);while(i)return n}function nK(r,i){return aD(ax(r,i,l2),r+"")}function nW(r){return iU(lp(r))}function n$(r,i){var n=lp(r);return aq(n,iX(i,0,n.length))}function nY(r,i,s,a){if(!fs(r))return r;i=sa(i,r);for(var o=-1,d=i.length,f=d-1,l=r;null!=l&&++oa?0:a+i),(n=n>a?a:n)<0&&(n+=a),a=i>n?0:n-i>>>0,i>>>=0;for(var o=ez(a);++s>>1,d=r[o];null!==d&&!fb(d)&&(n?d<=i:d=a){var c=i?null:sV(r);if(c)return rz(c);f=!1,o=rC,u=new iA}else u=i?[]:l;e:for(;++s=a?r:nQ(r,i,s)}var sf=tO||function(r){return t$.clearTimeout(r)};function sl(r,i){if(i)return r.slice();var n=r.length,s=t_?t_(n):new r.constructor(n);return r.copy(s),s}function su(r){var i=new r.constructor(r.byteLength);return new tv(i).set(new tv(r)),i}function sc(r,i){var n=i?su(r.buffer):r.buffer;return new r.constructor(n,r.byteOffset,r.byteLength)}function sp(r){var i=new r.constructor(r.source,eX.exec(r));return i.lastIndex=r.lastIndex,i}function sh(r){return ie?te(ie.call(r)):{}}function sy(r,i){var n=i?su(r.buffer):r.buffer;return new r.constructor(n,r.byteOffset,r.length)}function sg(r,i){if(r!==i){var s=r!==n,a=null===r,o=r==r,d=fb(r),f=i!==n,l=null===i,u=i==i,c=fb(i);if(!l&&!c&&!d&&r>i||d&&f&&u&&!l&&!c||a&&f&&u||!s&&u||!o)return 1;if(!a&&!d&&!c&&r=f)return l;return l*("desc"==n[s]?-1:1)}}return r.index-i.index}function sv(r,i,n,s){for(var a=-1,o=r.length,d=n.length,f=-1,l=i.length,u=tK(o-d,0),c=ez(l+u),p=!s;++f1?s[o-1]:n,f=o>2?s[2]:n;for(d=r.length>3&&"function"==typeof d?(o--,d):n,f&&ah(s[0],s[1],f)&&(d=o<3?n:d,o=1),i=te(i);++a-1?o[d?i[f]:f]:n}}function sP(r){return s0(function(i){var s=i.length,a=s,o=ia.prototype.thru;for(r&&i.reverse();a--;){var f=i[a];if("function"!=typeof f)throw new ti(d);if(o&&!l&&"wrapper"==s4(f))var l=new ia([],!0)}for(a=l?a:s;++a1&&_.reverse(),p&&ul))return!1;var c=d.get(r),p=d.get(i);if(c&&p)return c==i&&p==r;var h=-1,g=!0,_=s&v?new iA:n;for(d.set(r,i),d.set(i,r);++h1?"& ":"")+i[s],i=i.join(n>2?", ":" "),r.replace(eG,"{\n/* [wrapped with "+i+"] */\n")}function ac(r){return dJ(r)||dX(r)||!!(tS&&r&&r[tS])}function ap(r,i){var n=typeof r;return!!(i=null==i?F:i)&&("number"==n||"symbol"!=n&&e2.test(r))&&r>-1&&r%1==0&&r0){if(++i>=D)return arguments[0]}else i=0;return r.apply(n,arguments)}}function aq(r,i){var s=-1,a=r.length,o=a-1;for(i=i===n?a:i;++s1?r[i-1]:n;return s="function"==typeof s?(r.pop(),s):n,oP(r,s)});function oz(r){var i=ir(r);return i.__chain__=!0,i}function oG(r,i){return i(r),r}function oV(r,i){return i(r)}var oK=s0(function(r){var i=r.length,s=i?r[0]:0,a=this.__wrapped__,o=function(i){return iZ(i,r)};return!(i>1)&&!this.__actions__.length&&a instanceof io&&ap(s)?((a=a.slice(s,+s+(i?1:0))).__actions__.push({func:oV,args:[o],thisArg:n}),new ia(a,this.__chain__).thru(function(r){return i&&!r.length&&r.push(n),r})):this.thru(o)});function oW(){return oz(this)}function o$(){return new ia(this.value(),this.__chain__)}function oY(){this.__values__===n&&(this.__values__=fx(this.value()));var r=this.__index__>=this.__values__.length,i=r?n:this.__values__[this.__index__++];return{done:r,value:i}}function oZ(){return this}function oX(r){for(var i,s=this;s instanceof is;){var a=aj(s);a.__index__=0,a.__values__=n,i?o.__wrapped__=a:i=a;var o=a;s=s.__wrapped__}return o.__wrapped__=r,i}function oJ(){var r=this.__wrapped__;if(r instanceof io){var i=r;return this.__actions__.length&&(i=new io(this)),(i=i.reverse()).__actions__.push({func:oV,args:[oc],thisArg:n}),new ia(i,this.__chain__)}return this.thru(oc)}function oQ(){return st(this.__wrapped__,this.__actions__)}var o0=sS(function(r,i,n){tf.call(r,n)?++r[n]:iY(r,n,1)});function o3(r,i,s){var a=dJ(r)?rt:i7;return s&&ah(r,i,s)&&(i=n),a(r,s6(i,3))}function o2(r,i){return(dJ(r)?rr:i9)(r,s6(i,3))}var o8=sD(aQ),o4=sD(a0);function o7(r,i){return ne(ds(r,i),1)}function o6(r,i){return ne(ds(r,i),L)}function o5(r,i,s){return s=s===n?1:fC(s),ne(ds(r,i),s)}function o9(r,i){return(dJ(r)?t9:i8)(r,s6(i,3))}function de(r,i){return(dJ(r)?re:i4)(r,s6(i,3))}var dt=sS(function(r,i,n){tf.call(r,n)?r[n].push(i):iY(r,n,[i])});function dr(r,i,n,s){r=d0(r)?r:lp(r),n=n&&!s?fC(n):0;var a=r.length;return n<0&&(n=tK(a+n,0)),f_(r)?n<=a&&r.indexOf(i,n)>-1:!!a&&ry(r,i,n)>-1}var di=nK(function(r,i,n){var s=-1,a="function"==typeof i,o=d0(r)?ez(r.length):[];return i8(r,function(r){o[++s]=a?t6(i,r,n):ny(r,i,n)}),o}),dn=sS(function(r,i,n){iY(r,n,i)});function ds(r,i){return(dJ(r)?rs:nk)(r,s6(i,3))}function da(r,i,s,a){return null==r?[]:(dJ(i)||(i=null==i?[]:[i]),dJ(s=a?n:s)||(s=null==s?[]:[s]),nB(r,i,s))}var dd=sS(function(r,i,n){r[n?0:1].push(i)},function(){return[[],[]]});function df(r,i,n){var s=dJ(r)?ro:rT,a=arguments.length<3;return s(r,s6(i,4),n,a,i8)}function dl(r,i,n){var s=dJ(r)?rd:rT,a=arguments.length<3;return s(r,s6(i,4),n,a,i4)}function du(r,i){return(dJ(r)?rr:i9)(r,dk(s6(i,3)))}function dc(r){return(dJ(r)?iU:nW)(r)}function dp(r,i,s){return i=(s?ah(r,i,s):i===n)?1:fC(i),(dJ(r)?ij:n$)(r,i)}function dh(r){return(dJ(r)?iH:nJ)(r)}function dy(r){if(null==r)return 0;if(d0(r))return f_(r)?rW(r):r.length;var i=an(r);return i==ei||i==el?r.size:nO(r).length}function dg(r,i,s){var a=dJ(r)?rf:n0;return s&&ah(r,i,s)&&(i=n),a(r,s6(i,3))}var dm=nK(function(r,i){if(null==r)return[];var n=i.length;return n>1&&ah(r,i[0],i[1])?i=[]:n>2&&ah(i[0],i[1],i[2])&&(i=[i[0]]),nB(r,ne(i,1),[])}),dv=tC||function(){return t$.Date.now()};function d_(r,i){if("function"!=typeof i)throw new ti(d);return r=fC(r),function(){if(--r<1)return i.apply(this,arguments)}}function db(r,i,s){return i=s?n:i,i=r&&null==i?r.length:i,sW(r,O,n,n,n,n,i)}function dT(r,i){var s;if("function"!=typeof i)throw new ti(d);return r=fC(r),function(){return--r>0&&(s=i.apply(this,arguments)),r<=1&&(i=n),s}}var dE=nK(function(r,i,n){var s=_;if(n.length){var a=rH(n,s7(dE));s|=S}return sW(r,s,i,n,a)}),dw=nK(function(r,i,n){var s=_|b;if(n.length){var a=rH(n,s7(dw));s|=S}return sW(i,s,r,n,a)});function dS(r,i,s){i=s?n:i;var a=sW(r,E,n,n,n,n,n,i);return a.placeholder=dS.placeholder,a}function dR(r,i,s){i=s?n:i;var a=sW(r,w,n,n,n,n,n,i);return a.placeholder=dR.placeholder,a}function dI(r,i,s){var a,o,f,l,u,c,p=0,h=!1,g=!1,m=!0;if("function"!=typeof r)throw new ti(d);function v(i){var s=a,d=o;return a=o=n,p=i,l=r.apply(d,s)}function _(r){return p=r,u=aM(E,i),h?v(r):l}function b(r){var n=r-c,s=r-p,a=i-n;return g?tW(a,f-s):a}function T(r){var s=r-c,a=r-p;return c===n||s>=i||s<0||g&&a>=f}function E(){var r=dv();if(T(r))return w(r);u=aM(E,b(r))}function w(r){return(u=n,m&&a)?v(r):(a=o=n,l)}function S(){u!==n&&sf(u),p=0,a=c=o=u=n}function I(){return u===n?l:w(dv())}function O(){var r=dv(),s=T(r);if(a=arguments,o=this,c=r,s){if(u===n)return _(c);if(g)return sf(u),u=aM(E,i),v(c)}return u===n&&(u=aM(E,i)),l}return i=fk(i)||0,fs(s)&&(h=!!s.leading,f=(g="maxWait"in s)?tK(fk(s.maxWait)||0,i):f,m="trailing"in s?!!s.trailing:m),O.cancel=S,O.flush=I,O}var dx=nK(function(r,i){return i3(r,1,i)}),dO=nK(function(r,i,n){return i3(r,fk(i)||0,n)});function dC(r){return sW(r,A)}function dA(r,i){if("function"!=typeof r||null!=i&&"function"!=typeof i)throw new ti(d);var n=function(){var s=arguments,a=i?i.apply(this,s):s[0],o=n.cache;if(o.has(a))return o.get(a);var d=r.apply(this,s);return n.cache=o.set(a,d)||o,d};return n.cache=new(dA.Cache||iS),n}function dk(r){if("function"!=typeof r)throw new ti(d);return function(){var i=arguments;switch(i.length){case 0:return!r.call(this);case 1:return!r.call(this,i[0]);case 2:return!r.call(this,i[0],i[1]);case 3:return!r.call(this,i[0],i[1],i[2])}return!r.apply(this,i)}}function dM(r){return dT(2,r)}dA.Cache=iS;var dD=so(function(r,i){var n=(i=1==i.length&&dJ(i[0])?rs(i[0],rx(s6())):rs(ne(i,1),rx(s6()))).length;return nK(function(s){for(var a=-1,o=tW(s.length,n);++a=i}),dX=ng(function(){return arguments}())?ng:function(r){return fa(r)&&tf.call(r,"callee")&&!tE.call(r,"callee")},dJ=ez.isArray,dQ=t0?rx(t0):nm;function d0(r){return null!=r&&fn(r.length)&&!fr(r)}function d1(r){return fa(r)&&d0(r)}function d2(r){return!0===r||!1===r||fa(r)&&nd(r)==Z}var d8=tU||uu,d4=t1?rx(t1):nv;function d7(r){return fa(r)&&1===r.nodeType&&!fy(r)}function d6(r){if(null==r)return!0;if(d0(r)&&(dJ(r)||"string"==typeof r||"function"==typeof r.splice||d8(r)||fT(r)||dX(r)))return!r.length;var i=an(r);if(i==ei||i==el)return!r.size;if(ab(r))return!nO(r).length;for(var n in r)if(tf.call(r,n))return!1;return!0}function d5(r,i){return n_(r,i)}function d9(r,i,s){var a=(s="function"==typeof s?s:n)?s(r,i):n;return a===n?n_(r,i,n,s):!!a}function fe(r){if(!fa(r))return!1;var i=nd(r);return i==Q||i==J||"string"==typeof r.message&&"string"==typeof r.name&&!fy(r)}function ft(r){return"number"==typeof r&&tj(r)}function fr(r){if(!fs(r))return!1;var i=nd(r);return i==ee||i==et||i==Y||i==ed}function fi(r){return"number"==typeof r&&r==fC(r)}function fn(r){return"number"==typeof r&&r>-1&&r%1==0&&r<=F}function fs(r){var i=typeof r;return null!=r&&("object"==i||"function"==i)}function fa(r){return null!=r&&"object"==typeof r}var fo=t2?rx(t2):nT;function fd(r,i){return r===i||nE(r,i,s9(i))}function ff(r,i,s){return s="function"==typeof s?s:n,nE(r,i,s9(i),s)}function fl(r){return fh(r)&&r!=+r}function fu(r){if(a_(r))throw new e6(o);return nw(r)}function fc(r){return null===r}function fp(r){return null==r}function fh(r){return"number"==typeof r||fa(r)&&nd(r)==en}function fy(r){if(!fa(r)||nd(r)!=ea)return!1;var i=tb(r);if(null===i)return!0;var n=tf.call(i,"constructor")&&i.constructor;return"function"==typeof n&&n instanceof n&&td.call(n)==tp}var fg=t8?rx(t8):nS;function fm(r){return fi(r)&&r>=-F&&r<=F}var fv=t4?rx(t4):nR;function f_(r){return"string"==typeof r||!dJ(r)&&fa(r)&&nd(r)==eu}function fb(r){return"symbol"==typeof r||fa(r)&&nd(r)==ec}var fT=t7?rx(t7):nI;function fE(r){return r===n}function fw(r){return fa(r)&&an(r)==eh}function fS(r){return fa(r)&&nd(r)==ey}var fR=sH(nA),fI=sH(function(r,i){return r<=i});function fx(r){if(!r)return[];if(d0(r))return f_(r)?r$(r):sb(r);if(tR&&r[tR])return rF(r[tR]());var i=an(r);return(i==ei?rU:i==el?rz:lp)(r)}function fO(r){return r?(r=fk(r))===L||r===-L?(r<0?-1:1)*U:r==r?r:0:0===r?r:0}function fC(r){var i=fO(r),n=i%1;return i==i?n?i-n:i:0}function fA(r){return r?iX(fC(r),0,z):0}function fk(r){if("number"==typeof r)return r;if(fb(r))return H;if(fs(r)){var i="function"==typeof r.valueOf?r.valueOf():r;r=fs(i)?i+"":i}if("string"!=typeof r)return 0===r?r:+r;r=rI(r);var n=eQ.test(r);return n||e3.test(r)?tV(r.slice(2),n?2:8):eJ.test(r)?H:+r}function fM(r){return sT(r,f4(r))}function fD(r){return r?iX(fC(r),-F,F):0===r?r:0}function fP(r){return null==r?"":n7(r)}var fN=sR(function(r,i){if(ab(i)||d0(i)){sT(i,f8(i),r);return}for(var n in i)tf.call(i,n)&&iG(r,n,i[n])}),fq=sR(function(r,i){sT(i,f4(i),r)}),fB=sR(function(r,i,n,s){sT(i,f4(i),r,s)}),fL=sR(function(r,i,n,s){sT(i,f8(i),r,s)}),fF=s0(iZ);function fU(r,i){var n=ii(r);return null==i?n:iW(n,i)}var fj=nK(function(r,i){r=te(r);var s=-1,a=i.length,o=a>2?i[2]:n;for(o&&ah(i[0],i[1],o)&&(a=1);++s1),i}),sT(r,s3(r),n),s&&(n=iJ(n,p|h|g,sZ));for(var a=i.length;a--;)n5(n,i[a]);return n});function lt(r,i){return li(r,dk(s6(i)))}var lr=s0(function(r,i){return null==r?{}:nL(r,i)});function li(r,i){if(null==r)return{};var n=rs(s3(r),function(r){return[r]});return i=s6(i),nF(r,n,function(r,n){return i(r,n[0])})}function ln(r,i,s){i=sa(i,r);var a=-1,o=i.length;for(o||(o=1,r=n);++ai){var a=r;r=i,i=a}if(s||r%1||i%1){var o=tJ();return tW(r+o*(i-r+tG("1e-"+((o+"").length-1))),i)}return nz(r,i)}var lv=sA(function(r,i,n){return i=i.toLowerCase(),r+(n?l_(i):i)});function l_(r){return lK(fP(r).toLowerCase())}function lb(r){return(r=fP(r))&&r.replace(e8,rD).replace(tk,"")}function lT(r,i,s){r=fP(r),i=n7(i);var a=r.length,o=s=s===n?a:iX(fC(s),0,a);return(s-=i.length)>=0&&r.slice(s,o)==i}function lE(r){return(r=fP(r))&&eD.test(r)?r.replace(ek,rP):r}function lw(r){return(r=fP(r))&&ej.test(r)?r.replace(eU,"\\$&"):r}var lS=sA(function(r,i,n){return r+(n?"-":"")+i.toLowerCase()}),lR=sA(function(r,i,n){return r+(n?" ":"")+i.toLowerCase()}),lI=sC("toLowerCase");function lx(r,i,n){r=fP(r);var s=(i=fC(i))?rW(r):0;if(!i||s>=i)return r;var a=(i-s)/2;return sF(tP(a),n)+r+sF(tD(a),n)}function lO(r,i,n){r=fP(r);var s=(i=fC(i))?rW(r):0;return i&&s>>0)?(r=fP(r))&&("string"==typeof i||null!=i&&!fg(i))&&!(i=n7(i))&&rB(r)?sd(r$(r),0,s):r.split(i,s):[]}var lN=sA(function(r,i,n){return r+(n?" ":"")+lK(i)});function lq(r,i,n){return r=fP(r),n=null==n?0:iX(fC(n),0,r.length),i=n7(i),r.slice(n,n+i.length)==i}function lB(r,i,s){var a=ir.templateSettings;s&&ah(r,i,s)&&(i=n),r=fP(r),i=fB({},i,a,s$);var o,d,l=fB({},i.imports,a.imports,s$),u=f8(l),c=rO(l,u),p=0,h=i.interpolate||e4,g="__p += '",m=tt((i.escape||e4).source+"|"+h.source+"|"+(h===eq?eZ:e4).source+"|"+(i.evaluate||e4).source+"|$","g"),v="//# sourceURL="+(tf.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++tB+"]")+"\n";r.replace(m,function(i,n,s,a,f,l){return s||(s=a),g+=r.slice(p,l).replace(e7,rN),n&&(o=!0,g+="' +\n__e("+n+") +\n'"),f&&(d=!0,g+="';\n"+f+";\n__p += '"),s&&(g+="' +\n((__t = ("+s+")) == null ? '' : __t) +\n'"),p=l+i.length,i}),g+="';\n";var _=tf.call(i,"variable")&&i.variable;if(_){if(e$.test(_))throw new e6(f)}else g="with (obj) {\n"+g+"\n}\n";g=(d?g.replace(ex,""):g).replace(eO,"$1").replace(eC,"$1;"),g="function("+(_||"obj")+") {\n"+(_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(d?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+g+"return __p\n}";var b=l$(function(){return e5(u,v+"return "+g).apply(n,c)});if(b.source=g,fe(b))throw b;return b}function lL(r){return fP(r).toLowerCase()}function lF(r){return fP(r).toUpperCase()}function lU(r,i,s){if((r=fP(r))&&(s||i===n))return rI(r);if(!r||!(i=n7(i)))return r;var a=r$(r),o=r$(i),d=rA(a,o),f=rk(a,o)+1;return sd(a,d,f).join("")}function lj(r,i,s){if((r=fP(r))&&(s||i===n))return r.slice(0,rY(r)+1);if(!r||!(i=n7(i)))return r;var a=r$(r),o=rk(a,r$(i))+1;return sd(a,0,o).join("")}function lH(r,i,s){if((r=fP(r))&&(s||i===n))return r.replace(eH,"");if(!r||!(i=n7(i)))return r;var a=r$(r),o=rA(a,r$(i));return sd(a,o).join("")}function lz(r,i){var s=k,a=M;if(fs(i)){var o="separator"in i?i.separator:o;s="length"in i?fC(i.length):s,a="omission"in i?n7(i.omission):a}var d=(r=fP(r)).length;if(rB(r)){var f=r$(r);d=f.length}if(s>=d)return r;var l=s-rW(a);if(l<1)return a;var u=f?sd(f,0,l).join(""):r.slice(0,l);if(o===n)return u+a;if(f&&(l+=u.length-l),fg(o)){if(r.slice(l).search(o)){var c,p=u;for(o.global||(o=tt(o.source,fP(eX.exec(o))+"g")),o.lastIndex=0;c=o.exec(p);)var h=c.index;u=u.slice(0,h===n?l:h)}}else if(r.indexOf(n7(o),l)!=l){var g=u.lastIndexOf(o);g>-1&&(u=u.slice(0,g))}return u+a}function lG(r){return(r=fP(r))&&eM.test(r)?r.replace(eA,rZ):r}var lV=sA(function(r,i,n){return r+(n?" ":"")+i.toUpperCase()}),lK=sC("toUpperCase");function lW(r,i,s){return(r=fP(r),(i=s?n:i)===n)?rL(r)?rQ(r):rc(r):r.match(i)||[]}var l$=nK(function(r,i){try{return t6(r,n,i)}catch(r){return fe(r)?r:new e6(r)}}),lY=s0(function(r,i){return t9(i,function(i){iY(r,i=aL(i),dE(r[i],r))}),r});function lZ(r){var i=null==r?0:r.length,n=s6();return r=i?rs(r,function(r){if("function"!=typeof r[1])throw new ti(d);return[n(r[0]),r[1]]}):[],nK(function(n){for(var s=-1;++sF)return[];var n=z,s=tW(r,z);i=s6(i),r-=z;for(var a=rS(s,i);++n0||i<0)?new io(s):(r<0?s=s.takeRight(-r):r&&(s=s.drop(r)),i!==n&&(s=(i=fC(i))<0?s.dropRight(-i):s.take(i-r)),s)},io.prototype.takeRightWhile=function(r){return this.reverse().takeWhile(r).reverse()},io.prototype.toArray=function(){return this.take(z)},ni(io.prototype,function(r,i){var s=/^(?:filter|find|map|reject)|While$/.test(i),a=/^(?:head|last)$/.test(i),o=ir[a?"take"+("last"==i?"Right":""):i],d=a||/^find/.test(i);o&&(ir.prototype[i]=function(){var i=this.__wrapped__,f=a?[1]:arguments,l=i instanceof io,u=f[0],c=l||dJ(i),p=function(r){var i=o.apply(ir,ra([r],f));return a&&h?i[0]:i};c&&s&&"function"==typeof u&&1!=u.length&&(l=c=!1);var h=this.__chain__,g=!!this.__actions__.length,m=d&&!h,v=l&&!g;if(!d&&c){i=v?i:new io(this);var _=r.apply(i,f);return _.__actions__.push({func:oV,args:[p],thisArg:n}),new ia(_,h)}return m&&v?r.apply(this,f):(_=this.thru(p),m?a?_.value()[0]:_.value():_)})}),t9(["pop","push","shift","sort","splice","unshift"],function(r){var i=tn[r],n=/^(?:push|sort|unshift)$/.test(r)?"tap":"thru",s=/^(?:pop|shift)$/.test(r);ir.prototype[r]=function(){var r=arguments;if(s&&!this.__chain__){var a=this.value();return i.apply(dJ(a)?a:[],r)}return this[n](function(n){return i.apply(dJ(n)?n:[],r)})}}),ni(io.prototype,function(r,i){var n=ir[i];if(n){var s=n.name+"";tf.call(r2,s)||(r2[s]=[]),r2[s].push({name:i,func:n})}}),r2[sN(n,b).name]=[{name:"wrapper",func:n}],io.prototype.clone=id,io.prototype.reverse=il,io.prototype.value=iu,ir.prototype.at=oK,ir.prototype.chain=oW,ir.prototype.commit=o$,ir.prototype.next=oY,ir.prototype.plant=oX,ir.prototype.reverse=oJ,ir.prototype.toJSON=ir.prototype.valueOf=ir.prototype.value=oQ,ir.prototype.first=ir.prototype.head,tR&&(ir.prototype[tR]=oZ),ir}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(t$._=r0,define(function(){return r0})):tZ?((tZ.exports=r0)._=r0,tY._=r0):t$._=r0}).call(this)}),parcelRequire.register("5xch2",function(r,i){Object.defineProperty(r.exports,"__esModule",{value:!0});var n=parcelRequire("b3D3y"),s=parcelRequire("98zPP"),a=parcelRequire("2kkR6"),o=parcelRequire("awmEs");function d(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}function f(r){if(r&&r.__esModule)return r;var i=Object.create(null);return r&&Object.keys(r).forEach(function(n){if("default"!==n){var s=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(i,n,s.get?s:{enumerable:!0,get:function(){return r[n]}})}}),i.default=r,Object.freeze(i)}var l=f(n),u=f(s),c=d(a);function p(r,i){var n={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&0>i.indexOf(s)&&(n[s]=r[s]);if(null!=r&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,s=Object.getOwnPropertySymbols(r);ai.indexOf(s[a])&&Object.prototype.propertyIsEnumerable.call(r,s[a])&&(n[s[a]]=r[s[a]]);return n}"function"==typeof SuppressedError&&SuppressedError;let h=["bool","string","bytes","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","double","float"],g=r=>h.includes(r),m=(r,i)=>(null==r?void 0:r.optional)&&void 0===i?null:(null==r?void 0:r.type)==="bytes"?c.default.wrap(i).toString("hex"):(null==r?void 0:r.long)?Number.isSafeInteger(i.toNumber())?i.toNumber():i.toString():i;function v(r,i){let n=p(r,[]),s={};return Object.keys(i).forEach(r=>{let a=i[r],o=n[r];if(a.repeated){if(g(a.type))s[r]=o.map(r=>m(a,r));else if("valuesById"in a.resolvedType)s[r]=o;else if("fields"in a.resolvedType)s[r]=o.map(r=>v(r,a.resolvedType.fields));else throw Error(`case not handled for repeated key: ${r}`)}else if(g(a.type))s[r]=m(a,o);else if("valuesById"in a.resolvedType)s[r]=a.resolvedType.valuesById[o];else if(a.resolvedType.fields)s[r]=v(o,a.resolvedType.fields);else throw Error(`case not handled: ${r}`)}),s}let _=(r,i)=>{let n;let s=i.toBuffer(),a=new Uint8Array(s);try{n=r.decode(a)}catch(i){if(a.length>1&&255===a[a.length-1])a[a.length-1]=4,n=r.decode(a);else throw i}return v(n,n.$type.fields)},b=(r,i)=>{if("bytes"===r)return"string"!=typeof i||i?o.Buffer.from(i,"hex"):i;if("number"==typeof i&&!Number.isSafeInteger(i))throw RangeError("field value is not within safe integer range");return i};function T(r,i){let n={};return r.fields&&Object.keys(r.fields).forEach(s=>{let a=r.fields[s],o=i[s];if(void 0!==o){if(a&&g(a.type)){a.repeated?n[s]=o.map(r=>b(a.type,r)):n[s]=b(a.type,o);return}if(a.repeated){let i=r.lookupTypeOrEnum(a.type);n[s]=o.map(r=>T(i,r))}else if("object"==typeof o&&null!==o){let i=r.lookupType(a.type);n[s]=T(i,o)}else if("number"==typeof o){let i=r.lookupEnum(a.type);n[s]=i.values[o]}else n[s]=o}}),n}let E=(r,i)=>{let n=T(r,i),s=r.fromObject(n),a=r.encode(s).finish(),o=new c.default(a.byteLength);return o.append(a),o.reset(),o};function w(r){return"string"==typeof r?l.Root.fromJSON(JSON.parse(r)):l.Root.fromJSON(r)}let S=(r,i)=>{let n=r.lookupType(i),s=r.lookupEnum("MessageType"),a=s.values[`MessageType_${i}`];return!a&&n.options&&(a=n.options["(wire_type)"]),{Message:n,messageType:a}},I=(r,i)=>{let n=r.lookupEnum("MessageType"),s=n.valuesById[i].replace("MessageType_",""),a=r.lookupType(s);return{Message:a,messageName:s}},O=63,C=35,A=8,k=63,M=6,D=r=>{let i=r.readUint16(),n=r.readUint32();return{typeId:i,length:n}},P=r=>{let i=r.readByte(),n=r.readByte(),s=r.readUint16(),a=r.readUint32();return{sharp1:i,sharp2:n,typeId:s,length:a}},N=r=>{let{typeId:i}=D(r);return{typeId:i,buffer:r}},q=r=>{let i=c.default.wrap(r,void 0,void 0,!0),{sharp1:n,sharp2:s,typeId:a,length:o}=P(i);if(n!==C||s!==C)throw Error("Didn't receive expected header signature.");return{length:o,typeId:a,restBuffer:i}};var B=Object.freeze({__proto__:null,decode:N,decodeChunked:q});function L(r,i){let{addTrezorHeaders:n,chunked:s,messageType:a}=i,o=(n?A:A-2)+r.limit,d=new c.default(o);if(n&&(d.writeByte(C),d.writeByte(C)),d.writeUint16(a),d.writeUint32(r.limit),d.append(r.buffer),d.reset(),!1===s)return d;let f=[],l=k,u=Math.floor((d.limit-1)/l)+1||1;for(let r=0;r{let{Message:s,messageType:a}=S(r,i),o=E(s,n);return L(o,{addTrezorHeaders:!0,chunked:!0,messageType:a})},H=(r,i,n)=>{let s=U(r,i,n),a=[];for(let r of s){let i=new c.default(k+1);i.writeByte(O),i.append(r),i.reset(),a.push(i)}return a};function z(r,i){let n=c.default.wrap(i,"hex"),{typeId:s,buffer:a}=N(n),{Message:o,messageName:d}=I(r,s),f=_(o,a);return{message:f,type:d}}let G="Wrong result type.";function V(r){if(null==r)return null;if("string"!=typeof r)throw Error(G);return r}var K=Object.freeze({__proto__:null,info:function(r){if("object"!=typeof r||null==r)throw Error("Wrong result type.");let{version:i}=r;if("string"!=typeof i)throw Error(G);let n=!!r.configured;return{version:i,configured:n}},version:function(r){if("string"!=typeof r)throw Error(G);return r.trim()},devices:function(r){if("object"!=typeof r||!(r instanceof Array))throw Error(G);return r.map(r=>{if("object"!=typeof r||null==r)throw Error(G);let{path:i}=r;if("string"!=typeof i)throw Error(G);let n=i.toString();return{path:n,session:V(r.session),debugSession:V(r.debugSession),product:r.product,vendor:r.vendor,debug:!!r.debug}})},acquire:function(r){if("object"!=typeof r||null==r)throw Error(G);let{session:i}=r;if("string"!=typeof i&&"number"!=typeof i)throw Error(G);return i.toString()},call:function(r){if("object"!=typeof r||null==r)throw Error(G);let{type:i}=r;if("string"!=typeof i)throw Error(G);let{message:n}=r;if("object"!=typeof n||null==n)throw Error(G);return{type:i,message:n}}});r.exports.AptosTransactionType=void 0,function(r){r[r.STANDARD=0]="STANDARD",r[r.WITH_DATA=1]="WITH_DATA"}(r.exports.AptosTransactionType||(r.exports.AptosTransactionType={})),r.exports.BinanceOrderType=void 0,function(r){r[r.OT_UNKNOWN=0]="OT_UNKNOWN",r[r.MARKET=1]="MARKET",r[r.LIMIT=2]="LIMIT",r[r.OT_RESERVED=3]="OT_RESERVED"}(r.exports.BinanceOrderType||(r.exports.BinanceOrderType={})),r.exports.BinanceOrderSide=void 0,function(r){r[r.SIDE_UNKNOWN=0]="SIDE_UNKNOWN",r[r.BUY=1]="BUY",r[r.SELL=2]="SELL"}(r.exports.BinanceOrderSide||(r.exports.BinanceOrderSide={})),r.exports.BinanceTimeInForce=void 0,function(r){r[r.TIF_UNKNOWN=0]="TIF_UNKNOWN",r[r.GTE=1]="GTE",r[r.TIF_RESERVED=2]="TIF_RESERVED",r[r.IOC=3]="IOC"}(r.exports.BinanceTimeInForce||(r.exports.BinanceTimeInForce={})),r.exports.Enum_InputScriptType=void 0,function(r){r[r.SPENDADDRESS=0]="SPENDADDRESS",r[r.SPENDMULTISIG=1]="SPENDMULTISIG",r[r.EXTERNAL=2]="EXTERNAL",r[r.SPENDWITNESS=3]="SPENDWITNESS",r[r.SPENDP2SHWITNESS=4]="SPENDP2SHWITNESS",r[r.SPENDTAPROOT=5]="SPENDTAPROOT"}(r.exports.Enum_InputScriptType||(r.exports.Enum_InputScriptType={})),r.exports.Enum_OutputScriptType=void 0,function(r){r[r.PAYTOADDRESS=0]="PAYTOADDRESS",r[r.PAYTOSCRIPTHASH=1]="PAYTOSCRIPTHASH",r[r.PAYTOMULTISIG=2]="PAYTOMULTISIG",r[r.PAYTOOPRETURN=3]="PAYTOOPRETURN",r[r.PAYTOWITNESS=4]="PAYTOWITNESS",r[r.PAYTOP2SHWITNESS=5]="PAYTOP2SHWITNESS",r[r.PAYTOTAPROOT=6]="PAYTOTAPROOT"}(r.exports.Enum_OutputScriptType||(r.exports.Enum_OutputScriptType={})),r.exports.DecredStakingSpendType=void 0,function(r){r[r.SSGen=0]="SSGen",r[r.SSRTX=1]="SSRTX"}(r.exports.DecredStakingSpendType||(r.exports.DecredStakingSpendType={})),r.exports.AmountUnit=void 0,function(r){r[r.BITCOIN=0]="BITCOIN",r[r.MILLIBITCOIN=1]="MILLIBITCOIN",r[r.MICROBITCOIN=2]="MICROBITCOIN",r[r.SATOSHI=3]="SATOSHI"}(r.exports.AmountUnit||(r.exports.AmountUnit={})),r.exports.Enum_RequestType=void 0,function(r){r[r.TXINPUT=0]="TXINPUT",r[r.TXOUTPUT=1]="TXOUTPUT",r[r.TXMETA=2]="TXMETA",r[r.TXFINISHED=3]="TXFINISHED",r[r.TXEXTRADATA=4]="TXEXTRADATA",r[r.TXORIGINPUT=5]="TXORIGINPUT",r[r.TXORIGOUTPUT=6]="TXORIGOUTPUT"}(r.exports.Enum_RequestType||(r.exports.Enum_RequestType={})),r.exports.RebootType=void 0,function(r){r[r.Normal=0]="Normal",r[r.Boardloader=1]="Boardloader",r[r.BootLoader=2]="BootLoader"}(r.exports.RebootType||(r.exports.RebootType={})),r.exports.CardanoDerivationType=void 0,function(r){r[r.LEDGER=0]="LEDGER",r[r.ICARUS=1]="ICARUS",r[r.ICARUS_TREZOR=2]="ICARUS_TREZOR"}(r.exports.CardanoDerivationType||(r.exports.CardanoDerivationType={})),r.exports.CardanoAddressType=void 0,function(r){r[r.BASE=0]="BASE",r[r.BASE_SCRIPT_KEY=1]="BASE_SCRIPT_KEY",r[r.BASE_KEY_SCRIPT=2]="BASE_KEY_SCRIPT",r[r.BASE_SCRIPT_SCRIPT=3]="BASE_SCRIPT_SCRIPT",r[r.POINTER=4]="POINTER",r[r.POINTER_SCRIPT=5]="POINTER_SCRIPT",r[r.ENTERPRISE=6]="ENTERPRISE",r[r.ENTERPRISE_SCRIPT=7]="ENTERPRISE_SCRIPT",r[r.BYRON=8]="BYRON",r[r.REWARD=14]="REWARD",r[r.REWARD_SCRIPT=15]="REWARD_SCRIPT"}(r.exports.CardanoAddressType||(r.exports.CardanoAddressType={})),r.exports.CardanoNativeScriptType=void 0,function(r){r[r.PUB_KEY=0]="PUB_KEY",r[r.ALL=1]="ALL",r[r.ANY=2]="ANY",r[r.N_OF_K=3]="N_OF_K",r[r.INVALID_BEFORE=4]="INVALID_BEFORE",r[r.INVALID_HEREAFTER=5]="INVALID_HEREAFTER"}(r.exports.CardanoNativeScriptType||(r.exports.CardanoNativeScriptType={})),r.exports.CardanoNativeScriptHashDisplayFormat=void 0,function(r){r[r.HIDE=0]="HIDE",r[r.BECH32=1]="BECH32",r[r.POLICY_ID=2]="POLICY_ID"}(r.exports.CardanoNativeScriptHashDisplayFormat||(r.exports.CardanoNativeScriptHashDisplayFormat={})),r.exports.CardanoTxOutputSerializationFormat=void 0,function(r){r[r.ARRAY_LEGACY=0]="ARRAY_LEGACY",r[r.MAP_BABBAGE=1]="MAP_BABBAGE"}(r.exports.CardanoTxOutputSerializationFormat||(r.exports.CardanoTxOutputSerializationFormat={})),r.exports.CardanoCertificateType=void 0,function(r){r[r.STAKE_REGISTRATION=0]="STAKE_REGISTRATION",r[r.STAKE_DEREGISTRATION=1]="STAKE_DEREGISTRATION",r[r.STAKE_DELEGATION=2]="STAKE_DELEGATION",r[r.STAKE_POOL_REGISTRATION=3]="STAKE_POOL_REGISTRATION",r[r.STAKE_REGISTRATION_CONWAY=7]="STAKE_REGISTRATION_CONWAY",r[r.STAKE_DEREGISTRATION_CONWAY=8]="STAKE_DEREGISTRATION_CONWAY",r[r.VOTE_DELEGATION=9]="VOTE_DELEGATION"}(r.exports.CardanoCertificateType||(r.exports.CardanoCertificateType={})),r.exports.CardanoDRepType=void 0,function(r){r[r.KEY_HASH=0]="KEY_HASH",r[r.SCRIPT_HASH=1]="SCRIPT_HASH",r[r.ABSTAIN=2]="ABSTAIN",r[r.NO_CONFIDENCE=3]="NO_CONFIDENCE"}(r.exports.CardanoDRepType||(r.exports.CardanoDRepType={})),r.exports.CardanoPoolRelayType=void 0,function(r){r[r.SINGLE_HOST_IP=0]="SINGLE_HOST_IP",r[r.SINGLE_HOST_NAME=1]="SINGLE_HOST_NAME",r[r.MULTIPLE_HOST_NAME=2]="MULTIPLE_HOST_NAME"}(r.exports.CardanoPoolRelayType||(r.exports.CardanoPoolRelayType={})),r.exports.CardanoTxAuxiliaryDataSupplementType=void 0,function(r){r[r.NONE=0]="NONE",r[r.CVOTE_REGISTRATION_SIGNATURE=1]="CVOTE_REGISTRATION_SIGNATURE"}(r.exports.CardanoTxAuxiliaryDataSupplementType||(r.exports.CardanoTxAuxiliaryDataSupplementType={})),r.exports.CardanoCVoteRegistrationFormat=void 0,function(r){r[r.CIP15=0]="CIP15",r[r.CIP36=1]="CIP36"}(r.exports.CardanoCVoteRegistrationFormat||(r.exports.CardanoCVoteRegistrationFormat={})),r.exports.CardanoTxSigningMode=void 0,function(r){r[r.ORDINARY_TRANSACTION=0]="ORDINARY_TRANSACTION",r[r.POOL_REGISTRATION_AS_OWNER=1]="POOL_REGISTRATION_AS_OWNER",r[r.MULTISIG_TRANSACTION=2]="MULTISIG_TRANSACTION",r[r.PLUTUS_TRANSACTION=3]="PLUTUS_TRANSACTION"}(r.exports.CardanoTxSigningMode||(r.exports.CardanoTxSigningMode={})),r.exports.CardanoTxWitnessType=void 0,function(r){r[r.BYRON_WITNESS=0]="BYRON_WITNESS",r[r.SHELLEY_WITNESS=1]="SHELLEY_WITNESS"}(r.exports.CardanoTxWitnessType||(r.exports.CardanoTxWitnessType={})),r.exports.FailureType=void 0,function(r){r[r.Failure_UnexpectedMessage=1]="Failure_UnexpectedMessage",r[r.Failure_ButtonExpected=2]="Failure_ButtonExpected",r[r.Failure_DataError=3]="Failure_DataError",r[r.Failure_ActionCancelled=4]="Failure_ActionCancelled",r[r.Failure_PinExpected=5]="Failure_PinExpected",r[r.Failure_PinCancelled=6]="Failure_PinCancelled",r[r.Failure_PinInvalid=7]="Failure_PinInvalid",r[r.Failure_InvalidSignature=8]="Failure_InvalidSignature",r[r.Failure_ProcessError=9]="Failure_ProcessError",r[r.Failure_NotEnoughFunds=10]="Failure_NotEnoughFunds",r[r.Failure_NotInitialized=11]="Failure_NotInitialized",r[r.Failure_PinMismatch=12]="Failure_PinMismatch",r[r.Failure_WipeCodeMismatch=13]="Failure_WipeCodeMismatch",r[r.Failure_InvalidSession=14]="Failure_InvalidSession",r[r.Failure_FirmwareError=99]="Failure_FirmwareError"}(r.exports.FailureType||(r.exports.FailureType={})),r.exports.Enum_ButtonRequestType=void 0,function(r){r[r.ButtonRequest_Other=1]="ButtonRequest_Other",r[r.ButtonRequest_FeeOverThreshold=2]="ButtonRequest_FeeOverThreshold",r[r.ButtonRequest_ConfirmOutput=3]="ButtonRequest_ConfirmOutput",r[r.ButtonRequest_ResetDevice=4]="ButtonRequest_ResetDevice",r[r.ButtonRequest_ConfirmWord=5]="ButtonRequest_ConfirmWord",r[r.ButtonRequest_WipeDevice=6]="ButtonRequest_WipeDevice",r[r.ButtonRequest_ProtectCall=7]="ButtonRequest_ProtectCall",r[r.ButtonRequest_SignTx=8]="ButtonRequest_SignTx",r[r.ButtonRequest_FirmwareCheck=9]="ButtonRequest_FirmwareCheck",r[r.ButtonRequest_Address=10]="ButtonRequest_Address",r[r.ButtonRequest_PublicKey=11]="ButtonRequest_PublicKey",r[r.ButtonRequest_MnemonicWordCount=12]="ButtonRequest_MnemonicWordCount",r[r.ButtonRequest_MnemonicInput=13]="ButtonRequest_MnemonicInput",r[r._Deprecated_ButtonRequest_PassphraseType=14]="_Deprecated_ButtonRequest_PassphraseType",r[r.ButtonRequest_UnknownDerivationPath=15]="ButtonRequest_UnknownDerivationPath",r[r.ButtonRequest_RecoveryHomepage=16]="ButtonRequest_RecoveryHomepage",r[r.ButtonRequest_Success=17]="ButtonRequest_Success",r[r.ButtonRequest_Warning=18]="ButtonRequest_Warning",r[r.ButtonRequest_PassphraseEntry=19]="ButtonRequest_PassphraseEntry",r[r.ButtonRequest_PinEntry=20]="ButtonRequest_PinEntry",r[r.ButtonRequest_AttachPin=8e3]="ButtonRequest_AttachPin"}(r.exports.Enum_ButtonRequestType||(r.exports.Enum_ButtonRequestType={})),r.exports.Enum_PinMatrixRequestType=void 0,function(r){r[r.PinMatrixRequestType_Current=1]="PinMatrixRequestType_Current",r[r.PinMatrixRequestType_NewFirst=2]="PinMatrixRequestType_NewFirst",r[r.PinMatrixRequestType_NewSecond=3]="PinMatrixRequestType_NewSecond",r[r.PinMatrixRequestType_WipeCodeFirst=4]="PinMatrixRequestType_WipeCodeFirst",r[r.PinMatrixRequestType_WipeCodeSecond=5]="PinMatrixRequestType_WipeCodeSecond",r[r.PinMatrixRequestType_BackupFirst=6]="PinMatrixRequestType_BackupFirst",r[r.PinMatrixRequestType_BackupSecond=7]="PinMatrixRequestType_BackupSecond",r[r.PinMatrixRequestType_AttachToPin=8e3]="PinMatrixRequestType_AttachToPin"}(r.exports.Enum_PinMatrixRequestType||(r.exports.Enum_PinMatrixRequestType={})),r.exports.EthereumDefinitionType=void 0,function(r){r[r.NETWORK=0]="NETWORK",r[r.TOKEN=1]="TOKEN"}(r.exports.EthereumDefinitionType||(r.exports.EthereumDefinitionType={})),r.exports.EthereumGnosisSafeTxOperation=void 0,function(r){r[r.CALL=0]="CALL",r[r.DELEGATE_CALL=1]="DELEGATE_CALL"}(r.exports.EthereumGnosisSafeTxOperation||(r.exports.EthereumGnosisSafeTxOperation={})),r.exports.EthereumDataTypeOneKey=void 0,function(r){r[r.UINT=1]="UINT",r[r.INT=2]="INT",r[r.BYTES=3]="BYTES",r[r.STRING=4]="STRING",r[r.BOOL=5]="BOOL",r[r.ADDRESS=6]="ADDRESS",r[r.ARRAY=7]="ARRAY",r[r.STRUCT=8]="STRUCT"}(r.exports.EthereumDataTypeOneKey||(r.exports.EthereumDataTypeOneKey={})),r.exports.EthereumDataType=void 0,function(r){r[r.UINT=1]="UINT",r[r.INT=2]="INT",r[r.BYTES=3]="BYTES",r[r.STRING=4]="STRING",r[r.BOOL=5]="BOOL",r[r.ADDRESS=6]="ADDRESS",r[r.ARRAY=7]="ARRAY",r[r.STRUCT=8]="STRUCT"}(r.exports.EthereumDataType||(r.exports.EthereumDataType={})),r.exports.Enum_BackupType=void 0,function(r){r[r.Bip39=0]="Bip39",r[r.Slip39_Basic=1]="Slip39_Basic",r[r.Slip39_Advanced=2]="Slip39_Advanced"}(r.exports.Enum_BackupType||(r.exports.Enum_BackupType={})),r.exports.Enum_SafetyCheckLevel=void 0,function(r){r[r.Strict=0]="Strict",r[r.PromptAlways=1]="PromptAlways",r[r.PromptTemporarily=2]="PromptTemporarily"}(r.exports.Enum_SafetyCheckLevel||(r.exports.Enum_SafetyCheckLevel={})),r.exports.OneKeyDeviceType=void 0,function(r){r[r.CLASSIC=0]="CLASSIC",r[r.CLASSIC1S=1]="CLASSIC1S",r[r.MINI=2]="MINI",r[r.TOUCH=3]="TOUCH",r[r.PRO=5]="PRO",r[r.PURE=6]="PURE"}(r.exports.OneKeyDeviceType||(r.exports.OneKeyDeviceType={})),r.exports.OneKeySeType=void 0,function(r){r[r.THD89=0]="THD89",r[r.SE608A=1]="SE608A"}(r.exports.OneKeySeType||(r.exports.OneKeySeType={})),r.exports.OneKeySEState=void 0,function(r){r[r.BOOT=0]="BOOT",r[r.APP=1]="APP"}(r.exports.OneKeySEState||(r.exports.OneKeySEState={})),r.exports.Enum_Capability=void 0,function(r){r[r.Capability_Bitcoin=1]="Capability_Bitcoin",r[r.Capability_Bitcoin_like=2]="Capability_Bitcoin_like",r[r.Capability_Binance=3]="Capability_Binance",r[r.Capability_Cardano=4]="Capability_Cardano",r[r.Capability_Crypto=5]="Capability_Crypto",r[r.Capability_EOS=6]="Capability_EOS",r[r.Capability_Ethereum=7]="Capability_Ethereum",r[r.Capability_Lisk=8]="Capability_Lisk",r[r.Capability_Monero=9]="Capability_Monero",r[r.Capability_NEM=10]="Capability_NEM",r[r.Capability_Ripple=11]="Capability_Ripple",r[r.Capability_Stellar=12]="Capability_Stellar",r[r.Capability_Tezos=13]="Capability_Tezos",r[r.Capability_U2F=14]="Capability_U2F",r[r.Capability_Shamir=15]="Capability_Shamir",r[r.Capability_ShamirGroups=16]="Capability_ShamirGroups",r[r.Capability_PassphraseEntry=17]="Capability_PassphraseEntry",r[r.Capability_EthereumTypedData=1e3]="Capability_EthereumTypedData",r[r.Capability_AttachToPin=8e3]="Capability_AttachToPin"}(r.exports.Enum_Capability||(r.exports.Enum_Capability={})),r.exports.ExportType=void 0,function(r){r[r.SeedEncExportType_NO=0]="SeedEncExportType_NO",r[r.SeedEncExportType_YES=1]="SeedEncExportType_YES",r[r.MnemonicPlainExportType_YES=2]="MnemonicPlainExportType_YES"}(r.exports.ExportType||(r.exports.ExportType={})),r.exports.SdProtectOperationType=void 0,function(r){r[r.DISABLE=0]="DISABLE",r[r.ENABLE=1]="ENABLE",r[r.REFRESH=2]="REFRESH"}(r.exports.SdProtectOperationType||(r.exports.SdProtectOperationType={})),r.exports.RecoveryDeviceType=void 0,function(r){r[r.RecoveryDeviceType_ScrambledWords=0]="RecoveryDeviceType_ScrambledWords",r[r.RecoveryDeviceType_Matrix=1]="RecoveryDeviceType_Matrix"}(r.exports.RecoveryDeviceType||(r.exports.RecoveryDeviceType={})),r.exports.Enum_WordRequestType=void 0,function(r){r[r.WordRequestType_Plain=0]="WordRequestType_Plain",r[r.WordRequestType_Matrix9=1]="WordRequestType_Matrix9",r[r.WordRequestType_Matrix6=2]="WordRequestType_Matrix6"}(r.exports.Enum_WordRequestType||(r.exports.Enum_WordRequestType={})),r.exports.SeedRequestType=void 0,function(r){r[r.SeedRequestType_Gen=0]="SeedRequestType_Gen",r[r.SeedRequestType_EncExport=1]="SeedRequestType_EncExport",r[r.SeedRequestType_EncImport=2]="SeedRequestType_EncImport"}(r.exports.SeedRequestType||(r.exports.SeedRequestType={})),r.exports.WL_OperationType=void 0,function(r){r[r.WL_OperationType_Add=0]="WL_OperationType_Add",r[r.WL_OperationType_Delete=1]="WL_OperationType_Delete",r[r.WL_OperationType_Inquire=2]="WL_OperationType_Inquire"}(r.exports.WL_OperationType||(r.exports.WL_OperationType={})),r.exports.ResourceType=void 0,function(r){r[r.WallPaper=0]="WallPaper",r[r.Nft=1]="Nft"}(r.exports.ResourceType||(r.exports.ResourceType={})),r.exports.NEMMosaicLevy=void 0,function(r){r[r.MosaicLevy_Absolute=1]="MosaicLevy_Absolute",r[r.MosaicLevy_Percentile=2]="MosaicLevy_Percentile"}(r.exports.NEMMosaicLevy||(r.exports.NEMMosaicLevy={})),r.exports.NEMSupplyChangeType=void 0,function(r){r[r.SupplyChange_Increase=1]="SupplyChange_Increase",r[r.SupplyChange_Decrease=2]="SupplyChange_Decrease"}(r.exports.NEMSupplyChangeType||(r.exports.NEMSupplyChangeType={})),r.exports.NEMModificationType=void 0,function(r){r[r.CosignatoryModification_Add=1]="CosignatoryModification_Add",r[r.CosignatoryModification_Delete=2]="CosignatoryModification_Delete"}(r.exports.NEMModificationType||(r.exports.NEMModificationType={})),r.exports.NEMImportanceTransferMode=void 0,function(r){r[r.ImportanceTransfer_Activate=1]="ImportanceTransfer_Activate",r[r.ImportanceTransfer_Deactivate=2]="ImportanceTransfer_Deactivate"}(r.exports.NEMImportanceTransferMode||(r.exports.NEMImportanceTransferMode={})),r.exports.SolanaOffChainMessageVersion=void 0,function(r){r[r.MESSAGE_VERSION_0=0]="MESSAGE_VERSION_0"}(r.exports.SolanaOffChainMessageVersion||(r.exports.SolanaOffChainMessageVersion={})),r.exports.SolanaOffChainMessageFormat=void 0,function(r){r[r.V0_RESTRICTED_ASCII=0]="V0_RESTRICTED_ASCII",r[r.V0_LIMITED_UTF8=1]="V0_LIMITED_UTF8"}(r.exports.SolanaOffChainMessageFormat||(r.exports.SolanaOffChainMessageFormat={})),r.exports.StellarAssetType=void 0,function(r){r[r.NATIVE=0]="NATIVE",r[r.ALPHANUM4=1]="ALPHANUM4",r[r.ALPHANUM12=2]="ALPHANUM12"}(r.exports.StellarAssetType||(r.exports.StellarAssetType={})),r.exports.StellarMemoType=void 0,function(r){r[r.NONE=0]="NONE",r[r.TEXT=1]="TEXT",r[r.ID=2]="ID",r[r.HASH=3]="HASH",r[r.RETURN=4]="RETURN"}(r.exports.StellarMemoType||(r.exports.StellarMemoType={})),r.exports.StellarSignerType=void 0,function(r){r[r.ACCOUNT=0]="ACCOUNT",r[r.PRE_AUTH=1]="PRE_AUTH",r[r.HASH=2]="HASH"}(r.exports.StellarSignerType||(r.exports.StellarSignerType={})),r.exports.StellarRequestType=void 0,function(r){r[r.CALL=0]="CALL",r[r.AUTH=1]="AUTH",r[r.EXT=2]="EXT"}(r.exports.StellarRequestType||(r.exports.StellarRequestType={})),r.exports.TezosContractType=void 0,function(r){r[r.Implicit=0]="Implicit",r[r.Originated=1]="Originated"}(r.exports.TezosContractType||(r.exports.TezosContractType={})),r.exports.TezosBallotType=void 0,function(r){r[r.Yay=0]="Yay",r[r.Nay=1]="Nay",r[r.Pass=2]="Pass"}(r.exports.TezosBallotType||(r.exports.TezosBallotType={})),r.exports.TonWalletVersion=void 0,function(r){r[r.V4R2=3]="V4R2"}(r.exports.TonWalletVersion||(r.exports.TonWalletVersion={})),r.exports.TonWorkChain=void 0,function(r){r[r.BASECHAIN=0]="BASECHAIN",r[r.MASTERCHAIN=1]="MASTERCHAIN"}(r.exports.TonWorkChain||(r.exports.TonWorkChain={})),r.exports.TronResourceCode=void 0,function(r){r[r.BANDWIDTH=0]="BANDWIDTH",r[r.ENERGY=1]="ENERGY",r[r.TRON_POWER=2]="TRON_POWER"}(r.exports.TronResourceCode||(r.exports.TronResourceCode={})),r.exports.TronMessageType=void 0,function(r){r[r.V1=1]="V1",r[r.V2=2]="V2"}(r.exports.TronMessageType||(r.exports.TronMessageType={})),r.exports.CommandFlags=void 0,function(r){r[r.Default=0]="Default",r[r.Factory_Only=1]="Factory_Only"}(r.exports.CommandFlags||(r.exports.CommandFlags={}));var W=Object.freeze({__proto__:null,get AptosTransactionType(){return r.exports.AptosTransactionType},get BinanceOrderType(){return r.exports.BinanceOrderType},get BinanceOrderSide(){return r.exports.BinanceOrderSide},get BinanceTimeInForce(){return r.exports.BinanceTimeInForce},get Enum_InputScriptType(){return r.exports.Enum_InputScriptType},get Enum_OutputScriptType(){return r.exports.Enum_OutputScriptType},get DecredStakingSpendType(){return r.exports.DecredStakingSpendType},get AmountUnit(){return r.exports.AmountUnit},get Enum_RequestType(){return r.exports.Enum_RequestType},get RebootType(){return r.exports.RebootType},get CardanoDerivationType(){return r.exports.CardanoDerivationType},get CardanoAddressType(){return r.exports.CardanoAddressType},get CardanoNativeScriptType(){return r.exports.CardanoNativeScriptType},get CardanoNativeScriptHashDisplayFormat(){return r.exports.CardanoNativeScriptHashDisplayFormat},get CardanoTxOutputSerializationFormat(){return r.exports.CardanoTxOutputSerializationFormat},get CardanoCertificateType(){return r.exports.CardanoCertificateType},get CardanoDRepType(){return r.exports.CardanoDRepType},get CardanoPoolRelayType(){return r.exports.CardanoPoolRelayType},get CardanoTxAuxiliaryDataSupplementType(){return r.exports.CardanoTxAuxiliaryDataSupplementType},get CardanoCVoteRegistrationFormat(){return r.exports.CardanoCVoteRegistrationFormat},get CardanoTxSigningMode(){return r.exports.CardanoTxSigningMode},get CardanoTxWitnessType(){return r.exports.CardanoTxWitnessType},get FailureType(){return r.exports.FailureType},get Enum_ButtonRequestType(){return r.exports.Enum_ButtonRequestType},get Enum_PinMatrixRequestType(){return r.exports.Enum_PinMatrixRequestType},get EthereumDefinitionType(){return r.exports.EthereumDefinitionType},get EthereumGnosisSafeTxOperation(){return r.exports.EthereumGnosisSafeTxOperation},get EthereumDataTypeOneKey(){return r.exports.EthereumDataTypeOneKey},get EthereumDataType(){return r.exports.EthereumDataType},get Enum_BackupType(){return r.exports.Enum_BackupType},get Enum_SafetyCheckLevel(){return r.exports.Enum_SafetyCheckLevel},get OneKeyDeviceType(){return r.exports.OneKeyDeviceType},get OneKeySeType(){return r.exports.OneKeySeType},get OneKeySEState(){return r.exports.OneKeySEState},get Enum_Capability(){return r.exports.Enum_Capability},get ExportType(){return r.exports.ExportType},get SdProtectOperationType(){return r.exports.SdProtectOperationType},get RecoveryDeviceType(){return r.exports.RecoveryDeviceType},get Enum_WordRequestType(){return r.exports.Enum_WordRequestType},get SeedRequestType(){return r.exports.SeedRequestType},get WL_OperationType(){return r.exports.WL_OperationType},get ResourceType(){return r.exports.ResourceType},get NEMMosaicLevy(){return r.exports.NEMMosaicLevy},get NEMSupplyChangeType(){return r.exports.NEMSupplyChangeType},get NEMModificationType(){return r.exports.NEMModificationType},get NEMImportanceTransferMode(){return r.exports.NEMImportanceTransferMode},get SolanaOffChainMessageVersion(){return r.exports.SolanaOffChainMessageVersion},get SolanaOffChainMessageFormat(){return r.exports.SolanaOffChainMessageFormat},get StellarAssetType(){return r.exports.StellarAssetType},get StellarMemoType(){return r.exports.StellarMemoType},get StellarSignerType(){return r.exports.StellarSignerType},get StellarRequestType(){return r.exports.StellarRequestType},get TezosContractType(){return r.exports.TezosContractType},get TezosBallotType(){return r.exports.TezosBallotType},get TonWalletVersion(){return r.exports.TonWalletVersion},get TonWorkChain(){return r.exports.TonWorkChain},get TronResourceCode(){return r.exports.TronResourceCode},get TronMessageType(){return r.exports.TronMessageType},get CommandFlags(){return r.exports.CommandFlags}});let $=new Set(["PassphraseAck","PinMatrixAck"]);l.util.Long=u,l.configure();var Y={check:K,buildOne:F,buildBuffers:H,buildEncodeBuffers:U,receiveOne:z,parseConfigure:w,decodeProtocol:B};r.exports.BUFFER_SIZE=k,r.exports.COMMON_HEADER_SIZE=M,r.exports.HEADER_SIZE=A,r.exports.LogBlockCommand=$,r.exports.MESSAGE_HEADER_BYTE=C,r.exports.MESSAGE_TOP_CHAR=O,r.exports.Messages=W,r.exports.default=Y}),parcelRequire.register("b3D3y",function(r,i){r.exports=parcelRequire("aZgSt")}),parcelRequire.register("aZgSt",function(r,i){var n=r.exports=parcelRequire("eBz1e");function s(r,i,s){return"function"==typeof i?(s=i,i=new n.Root):i||(i=new n.Root),i.load(r,s)}function a(r,i){return i||(i=new n.Root),i.loadSync(r)}n.build="light",n.load=s,n.loadSync=a,n.encoder=parcelRequire("lPaTT"),n.decoder=parcelRequire("gMZPL"),n.verifier=parcelRequire("fy57h"),n.converter=parcelRequire("lTYyc"),n.ReflectionObject=parcelRequire("hH6YY"),n.Namespace=parcelRequire("gMk2L"),n.Root=parcelRequire("8FZEM"),n.Enum=parcelRequire("h7nED"),n.Type=parcelRequire("gexVP"),n.Field=parcelRequire("5jxQS"),n.OneOf=parcelRequire("3XqRZ"),n.MapField=parcelRequire("0UDCv"),n.Service=parcelRequire("fPJWC"),n.Method=parcelRequire("5K2t0"),n.Message=parcelRequire("hJamA"),n.wrappers=parcelRequire("3fcYL"),n.types=parcelRequire("a2ADZ"),n.util=parcelRequire("8rMOR"),n.ReflectionObject._configure(n.Root),n.Namespace._configure(n.Type,n.Service,n.Enum),n.Root._configure(n.Type),n.Field._configure(n.Type)}),parcelRequire.register("eBz1e",function(r,i){var n=r.exports;function s(){n.util._configure(),n.Writer._configure(n.BufferWriter),n.Reader._configure(n.BufferReader)}n.build="minimal",n.Writer=parcelRequire("iczXS"),n.BufferWriter=parcelRequire("2mNXF"),n.Reader=parcelRequire("4ynb4"),n.BufferReader=parcelRequire("20Q1T"),n.util=parcelRequire("4o0TN"),n.rpc=parcelRequire("4jAjr"),n.roots=parcelRequire("aOCzj"),n.configure=s,s()}),parcelRequire.register("iczXS",function(r,i){r.exports=c;var n,s=parcelRequire("4o0TN"),a=s.LongBits,o=s.base64,d=s.utf8;function f(r,i,n){this.fn=r,this.len=i,this.next=void 0,this.val=n}function l(){}function u(r){this.head=r.head,this.tail=r.tail,this.len=r.len,this.next=r.states}function c(){this.len=0,this.head=new f(l,0,0),this.tail=this.head,this.states=null}var p=function(){return s.Buffer?function(){return(c.create=function(){return new n})()}:function(){return new c}};function h(r,i,n){i[n]=255&r}function g(r,i,n){for(;r>127;)i[n++]=127&r|128,r>>>=7;i[n]=r}function m(r,i){this.len=r,this.next=void 0,this.val=i}function v(r,i,n){for(;r.hi;)i[n++]=127&r.lo|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)i[n++]=127&r.lo|128,r.lo=r.lo>>>7;i[n++]=r.lo}function _(r,i,n){i[n]=255&r,i[n+1]=r>>>8&255,i[n+2]=r>>>16&255,i[n+3]=r>>>24}c.create=p(),c.alloc=function(r){return new s.Array(r)},s.Array!==Array&&(c.alloc=s.pool(c.alloc,s.Array.prototype.subarray)),c.prototype._push=function(r,i,n){return this.tail=this.tail.next=new f(r,i,n),this.len+=i,this},m.prototype=Object.create(f.prototype),m.prototype.fn=g,c.prototype.uint32=function(r){return this.len+=(this.tail=this.tail.next=new m((r>>>=0)<128?1:r<16384?2:r<2097152?3:r<268435456?4:5,r)).len,this},c.prototype.int32=function(r){return r<0?this._push(v,10,a.fromNumber(r)):this.uint32(r)},c.prototype.sint32=function(r){return this.uint32((r<<1^r>>31)>>>0)},c.prototype.uint64=function(r){var i=a.from(r);return this._push(v,i.length(),i)},c.prototype.int64=c.prototype.uint64,c.prototype.sint64=function(r){var i=a.from(r).zzEncode();return this._push(v,i.length(),i)},c.prototype.bool=function(r){return this._push(h,1,r?1:0)},c.prototype.fixed32=function(r){return this._push(_,4,r>>>0)},c.prototype.sfixed32=c.prototype.fixed32,c.prototype.fixed64=function(r){var i=a.from(r);return this._push(_,4,i.lo)._push(_,4,i.hi)},c.prototype.sfixed64=c.prototype.fixed64,c.prototype.float=function(r){return this._push(s.float.writeFloatLE,4,r)},c.prototype.double=function(r){return this._push(s.float.writeDoubleLE,8,r)};var b=s.Array.prototype.set?function(r,i,n){i.set(r,n)}:function(r,i,n){for(var s=0;s>>0;if(!i)return this._push(h,1,0);if(s.isString(r)){var n=c.alloc(i=o.length(r));o.decode(r,n,0),r=n}return this.uint32(i)._push(b,i,r)},c.prototype.string=function(r){var i=d.length(r);return i?this.uint32(i)._push(d.write,i,r):this._push(h,1,0)},c.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new f(l,0,0),this.len=0,this},c.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new f(l,0,0),this.len=0),this},c.prototype.ldelim=function(){var r=this.head,i=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=r.next,this.tail=i,this.len+=n),this},c.prototype.finish=function(){for(var r=this.head.next,i=this.constructor.alloc(this.len),n=0;r;)r.fn(r.val,i,n),n+=r.len,r=r.next;return i},c._configure=function(r){n=r,c.create=p(),n._configure()}}),parcelRequire.register("4o0TN",function(r,i){var n=r.exports;function s(r,i,n){for(var s=Object.keys(i),a=0;a0)},n.Buffer=function(){try{var r=n.inquire("buffer").Buffer;return r.prototype.utf8Write?r:null}catch(r){return null}}(),n._Buffer_from=null,n._Buffer_allocUnsafe=null,n.newBuffer=function(r){return"number"==typeof r?n.Buffer?n._Buffer_allocUnsafe(r):new n.Array(r):n.Buffer?n._Buffer_from(r):"undefined"==typeof Uint8Array?r:new Uint8Array(r)},n.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,n.Long=n.global.dcodeIO&&n.global.dcodeIO.Long||n.global.Long||n.inquire("long"),n.key2Re=/^true|false|0|1$/,n.key32Re=/^-?(?:0|[1-9][0-9]*)$/,n.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,n.longToHash=function(r){return r?n.LongBits.from(r).toHash():n.LongBits.zeroHash},n.longFromHash=function(r,i){var s=n.LongBits.fromHash(r);return n.Long?n.Long.fromBits(s.lo,s.hi,i):s.toNumber(!!i)},n.merge=s,n.lcFirst=function(r){return r.charAt(0).toLowerCase()+r.substring(1)},n.newError=a,n.ProtocolError=a("ProtocolError"),n.oneOfGetter=function(r){for(var i={},n=0;n-1;--n)if(1===i[r[n]]&&void 0!==this[r[n]]&&null!==this[r[n]])return r[n]}},n.oneOfSetter=function(r){return function(i){for(var n=0;n1&&"="===r.charAt(i);)++n;return Math.ceil(3*r.length)/4-n};for(var s=Array(64),a=Array(123),o=0;o<64;)a[s[o]=o<26?o+65:o<52?o+71:o<62?o-4:o-59|43]=o++;n.encode=function(r,i,n){for(var a,o=null,d=[],f=0,l=0;i>2],a=(3&u)<<4,l=1;break;case 1:d[f++]=s[a|u>>4],a=(15&u)<<2,l=2;break;case 2:d[f++]=s[a|u>>6],d[f++]=s[63&u],l=0}f>8191&&((o||(o=[])).push(String.fromCharCode.apply(String,d)),f=0)}return(l&&(d[f++]=s[a],d[f++]=61,1===l&&(d[f++]=61)),o)?(f&&o.push(String.fromCharCode.apply(String,d.slice(0,f))),o.join("")):String.fromCharCode.apply(String,d.slice(0,f))};var d="invalid encoding";n.decode=function(r,i,n){for(var s,o=n,f=0,l=0;l1)break;if(void 0===(u=a[u]))throw Error(d);switch(f){case 0:s=u,f=1;break;case 1:i[n++]=s<<2|(48&u)>>4,s=u,f=2;break;case 2:i[n++]=(15&s)<<4|(60&u)>>2,s=u,f=3;break;case 3:i[n++]=(3&s)<<6|u,f=0}}if(1===f)throw Error(d);return n-o},n.test=function(r){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(r)}}),parcelRequire.register("6PPVb",function(r,i){function n(){this._listeners={}}r.exports=n,n.prototype.on=function(r,i,n){return(this._listeners[r]||(this._listeners[r]=[])).push({fn:i,ctx:n||this}),this},n.prototype.off=function(r,i){if(void 0===r)this._listeners={};else if(void 0===i)this._listeners[r]=[];else for(var n=this._listeners[r],s=0;s0?0:2147483648,n,s);else if(isNaN(i))r(2143289344,n,s);else if(i>34028234663852886e22)r((a<<31|2139095040)>>>0,n,s);else if(i<11754943508222875e-54)r((a<<31|Math.round(i/1401298464324817e-60))>>>0,n,s);else{var o=Math.floor(Math.log(i)/Math.LN2),d=8388607&Math.round(i*Math.pow(2,-o)*8388608);r((a<<31|o+127<<23|d)>>>0,n,s)}}function n(r,i,n){var s=r(i,n),a=(s>>31)*2+1,o=s>>>23&255,d=8388607&s;return 255===o?d?NaN:a*(1/0):0===o?1401298464324817e-60*a*d:a*Math.pow(2,o-150)*(d+8388608)}r.writeFloatLE=i.bind(null,s),r.writeFloatBE=i.bind(null,a),r.readFloatLE=n.bind(null,o),r.readFloatBE=n.bind(null,d)}(),"undefined"!=typeof Float64Array?function(){var i=new Float64Array([-0]),n=new Uint8Array(i.buffer),s=128===n[7];function a(r,s,a){i[0]=r,s[a]=n[0],s[a+1]=n[1],s[a+2]=n[2],s[a+3]=n[3],s[a+4]=n[4],s[a+5]=n[5],s[a+6]=n[6],s[a+7]=n[7]}function o(r,s,a){i[0]=r,s[a]=n[7],s[a+1]=n[6],s[a+2]=n[5],s[a+3]=n[4],s[a+4]=n[3],s[a+5]=n[2],s[a+6]=n[1],s[a+7]=n[0]}function d(r,s){return n[0]=r[s],n[1]=r[s+1],n[2]=r[s+2],n[3]=r[s+3],n[4]=r[s+4],n[5]=r[s+5],n[6]=r[s+6],n[7]=r[s+7],i[0]}function f(r,s){return n[7]=r[s],n[6]=r[s+1],n[5]=r[s+2],n[4]=r[s+3],n[3]=r[s+4],n[2]=r[s+5],n[1]=r[s+6],n[0]=r[s+7],i[0]}r.writeDoubleLE=s?a:o,r.writeDoubleBE=s?o:a,r.readDoubleLE=s?d:f,r.readDoubleBE=s?f:d}():function(){function i(r,i,n,s,a,o){var d,f=s<0?1:0;if(f&&(s=-s),0===s)r(0,a,o+i),r(1/s>0?0:2147483648,a,o+n);else if(isNaN(s))r(0,a,o+i),r(2146959360,a,o+n);else if(s>17976931348623157e292)r(0,a,o+i),r((f<<31|2146435072)>>>0,a,o+n);else if(s<22250738585072014e-324)r((d=s/5e-324)>>>0,a,o+i),r((f<<31|d/4294967296)>>>0,a,o+n);else{var l=Math.floor(Math.log(s)/Math.LN2);1024===l&&(l=1023),r(4503599627370496*(d=s*Math.pow(2,-l))>>>0,a,o+i),r((f<<31|l+1023<<20|1048576*d&1048575)>>>0,a,o+n)}}function n(r,i,n,s,a){var o=r(s,a+i),d=r(s,a+n),f=(d>>31)*2+1,l=d>>>20&2047,u=4294967296*(1048575&d)+o;return 2047===l?u?NaN:f*(1/0):0===l?5e-324*f*u:f*Math.pow(2,l-1075)*(u+4503599627370496)}r.writeDoubleLE=i.bind(null,s,0,4),r.writeDoubleBE=i.bind(null,a,4,0),r.readDoubleLE=n.bind(null,o,0,4),r.readDoubleBE=n.bind(null,d,4,0)}(),r}function s(r,i,n){i[n]=255&r,i[n+1]=r>>>8&255,i[n+2]=r>>>16&255,i[n+3]=r>>>24}function a(r,i,n){i[n]=r>>>24,i[n+1]=r>>>16&255,i[n+2]=r>>>8&255,i[n+3]=255&r}function o(r,i){return(r[i]|r[i+1]<<8|r[i+2]<<16|r[i+3]<<24)>>>0}function d(r,i){return(r[i]<<24|r[i+1]<<16|r[i+2]<<8|r[i+3])>>>0}r.exports=n(n)}),parcelRequire.register("h5eRL",function(module,exports){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire}),parcelRequire.register("2QO2m",function(r,i){var n=r.exports;n.length=function(r){for(var i=0,n=0,s=0;s191&&s<224?o[d++]=(31&s)<<6|63&r[i++]:s>239&&s<365?(s=((7&s)<<18|(63&r[i++])<<12|(63&r[i++])<<6|63&r[i++])-65536,o[d++]=55296+(s>>10),o[d++]=56320+(1023&s)):o[d++]=(15&s)<<12|(63&r[i++])<<6|63&r[i++],d>8191&&((a||(a=[])).push(String.fromCharCode.apply(String,o)),d=0);return a?(d&&a.push(String.fromCharCode.apply(String,o.slice(0,d))),a.join("")):String.fromCharCode.apply(String,o.slice(0,d))},n.write=function(r,i,n){for(var s,a,o=n,d=0;d>6|192:((64512&s)==55296&&(64512&(a=r.charCodeAt(d+1)))==56320?(s=65536+((1023&s)<<10)+(1023&a),++d,i[n++]=s>>18|240,i[n++]=s>>12&63|128):i[n++]=s>>12|224,i[n++]=s>>6&63|128),i[n++]=63&s|128);return n-o}}),parcelRequire.register("9Kq4z",function(r,i){function n(r,i,n){var s=n||8192,a=s>>>1,o=null,d=s;return function(n){if(n<1||n>a)return r(n);d+n>s&&(o=r(s),d=0);var f=i.call(o,d,d+=n);return 7&d&&(d=(7|d)+1),f}}r.exports=n}),parcelRequire.register("bf71D",function(r,i){r.exports=s;var n=parcelRequire("4o0TN");function s(r,i){this.lo=r>>>0,this.hi=i>>>0}var a=s.zero=new s(0,0);a.toNumber=function(){return 0},a.zzEncode=a.zzDecode=function(){return this},a.length=function(){return 1};var o=s.zeroHash="\x00\x00\x00\x00\x00\x00\x00\x00";s.fromNumber=function(r){if(0===r)return a;var i=r<0;i&&(r=-r);var n=r>>>0,o=(r-n)/4294967296>>>0;return i&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new s(n,o)},s.from=function(r){if("number"==typeof r)return s.fromNumber(r);if(n.isString(r)){if(!n.Long)return s.fromNumber(parseInt(r,10));r=n.Long.fromString(r)}return r.low||r.high?new s(r.low>>>0,r.high>>>0):a},s.prototype.toNumber=function(r){if(!r&&this.hi>>>31){var i=~this.lo+1>>>0,n=~this.hi>>>0;return i||(n=n+1>>>0),-(i+4294967296*n)}return this.lo+4294967296*this.hi},s.prototype.toLong=function(r){return n.Long?new n.Long(0|this.lo,0|this.hi,!!r):{low:0|this.lo,high:0|this.hi,unsigned:!!r}};var d=String.prototype.charCodeAt;s.fromHash=function(r){return r===o?a:new s((d.call(r,0)|d.call(r,1)<<8|d.call(r,2)<<16|d.call(r,3)<<24)>>>0,(d.call(r,4)|d.call(r,5)<<8|d.call(r,6)<<16|d.call(r,7)<<24)>>>0)},s.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},s.prototype.zzEncode=function(){var r=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^r)>>>0,this.lo=(this.lo<<1^r)>>>0,this},s.prototype.zzDecode=function(){var r=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^r)>>>0,this.hi=(this.hi>>>1^r)>>>0,this},s.prototype.length=function(){var r=this.lo,i=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===i?r<16384?r<128?1:2:r<2097152?3:4:i<16384?i<128?5:6:i<2097152?7:8:n<128?9:10}}),parcelRequire.register("2mNXF",function(r,i){r.exports=a;var n=parcelRequire("iczXS");(a.prototype=Object.create(n.prototype)).constructor=a;var s=parcelRequire("4o0TN");function a(){n.call(this)}function o(r,i,n){r.length<40?s.utf8.write(r,i,n):i.utf8Write?i.utf8Write(r,n):i.write(r,n)}a._configure=function(){a.alloc=s._Buffer_allocUnsafe,a.writeBytesBuffer=s.Buffer&&s.Buffer.prototype instanceof Uint8Array&&"set"===s.Buffer.prototype.set.name?function(r,i,n){i.set(r,n)}:function(r,i,n){if(r.copy)r.copy(i,n,0,r.length);else for(var s=0;s>>0;return this.uint32(i),i&&this._push(a.writeBytesBuffer,i,r),this},a.prototype.string=function(r){var i=s.Buffer.byteLength(r);return this.uint32(i),i&&this._push(o,i,r),this},a._configure()}),parcelRequire.register("4ynb4",function(r,i){r.exports=f;var n,s=parcelRequire("4o0TN"),a=s.LongBits,o=s.utf8;function d(r,i){return RangeError("index out of range: "+r.pos+" + "+(i||1)+" > "+r.len)}function f(r){this.buf=r,this.pos=0,this.len=r.length}var l="undefined"!=typeof Uint8Array?function(r){if(r instanceof Uint8Array||Array.isArray(r))return new f(r);throw Error("illegal buffer")}:function(r){if(Array.isArray(r))return new f(r);throw Error("illegal buffer")},u=function(){return s.Buffer?function(r){return(f.create=function(r){return s.Buffer.isBuffer(r)?new n(r):l(r)})(r)}:l};function c(){var r=new a(0,0),i=0;if(this.len-this.pos>4){for(;i<4;++i)if(r.lo=(r.lo|(127&this.buf[this.pos])<<7*i)>>>0,this.buf[this.pos++]<128)return r;if(r.lo=(r.lo|(127&this.buf[this.pos])<<28)>>>0,r.hi=(r.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return r;i=0}else{for(;i<3;++i){if(this.pos>=this.len)throw d(this);if(r.lo=(r.lo|(127&this.buf[this.pos])<<7*i)>>>0,this.buf[this.pos++]<128)return r}return r.lo=(r.lo|(127&this.buf[this.pos++])<<7*i)>>>0,r}if(this.len-this.pos>4){for(;i<5;++i)if(r.hi=(r.hi|(127&this.buf[this.pos])<<7*i+3)>>>0,this.buf[this.pos++]<128)return r}else for(;i<5;++i){if(this.pos>=this.len)throw d(this);if(r.hi=(r.hi|(127&this.buf[this.pos])<<7*i+3)>>>0,this.buf[this.pos++]<128)return r}throw Error("invalid varint encoding")}function p(r,i){return(r[i-4]|r[i-3]<<8|r[i-2]<<16|r[i-1]<<24)>>>0}function h(){if(this.pos+8>this.len)throw d(this,8);return new a(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}f.create=u(),f.prototype._slice=s.Array.prototype.subarray||s.Array.prototype.slice,f.prototype.uint32=function(){var r=4294967295;return function(){if(r=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128||(r=(r|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)||(r=(r|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)||(r=(r|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)||(r=(r|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128))return r;if((this.pos+=5)>this.len)throw this.pos=this.len,d(this,10);return r}}(),f.prototype.int32=function(){return 0|this.uint32()},f.prototype.sint32=function(){var r=this.uint32();return r>>>1^-(1&r)|0},f.prototype.bool=function(){return 0!==this.uint32()},f.prototype.fixed32=function(){if(this.pos+4>this.len)throw d(this,4);return p(this.buf,this.pos+=4)},f.prototype.sfixed32=function(){if(this.pos+4>this.len)throw d(this,4);return 0|p(this.buf,this.pos+=4)},f.prototype.float=function(){if(this.pos+4>this.len)throw d(this,4);var r=s.float.readFloatLE(this.buf,this.pos);return this.pos+=4,r},f.prototype.double=function(){if(this.pos+8>this.len)throw d(this,4);var r=s.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,r},f.prototype.bytes=function(){var r=this.uint32(),i=this.pos,n=this.pos+r;if(n>this.len)throw d(this,r);return(this.pos+=r,Array.isArray(this.buf))?this.buf.slice(i,n):i===n?new this.buf.constructor(0):this._slice.call(this.buf,i,n)},f.prototype.string=function(){var r=this.bytes();return o.read(r,0,r.length)},f.prototype.skip=function(r){if("number"==typeof r){if(this.pos+r>this.len)throw d(this,r);this.pos+=r}else do if(this.pos>=this.len)throw d(this);while(128&this.buf[this.pos++])return this},f.prototype.skipType=function(r){switch(r){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(r=7&this.uint32());)this.skipType(r);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+r+" at offset "+this.pos)}return this},f._configure=function(r){n=r,f.create=u(),n._configure();var i=s.Long?"toLong":"toNumber";s.merge(f.prototype,{int64:function(){return c.call(this)[i](!1)},uint64:function(){return c.call(this)[i](!0)},sint64:function(){return c.call(this).zzDecode()[i](!1)},fixed64:function(){return h.call(this)[i](!0)},sfixed64:function(){return h.call(this)[i](!1)}})}}),parcelRequire.register("20Q1T",function(r,i){r.exports=a;var n=parcelRequire("4ynb4");(a.prototype=Object.create(n.prototype)).constructor=a;var s=parcelRequire("4o0TN");function a(r){n.call(this,r)}a._configure=function(){s.Buffer&&(a.prototype._slice=s.Buffer.prototype.slice)},a.prototype.string=function(){var r=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+r,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+r,this.len))},a._configure()}),parcelRequire.register("4jAjr",function(r,i){r.exports.Service=parcelRequire("iswUz")}),parcelRequire.register("iswUz",function(r,i){r.exports=s;var n=parcelRequire("4o0TN");function s(r,i,s){if("function"!=typeof r)throw TypeError("rpcImpl must be a function");n.EventEmitter.call(this),this.rpcImpl=r,this.requestDelimited=!!i,this.responseDelimited=!!s}(s.prototype=Object.create(n.EventEmitter.prototype)).constructor=s,s.prototype.rpcCall=function r(i,s,a,o,d){if(!o)throw TypeError("request must be specified");var f=this;if(!d)return n.asPromise(r,f,i,s,a,o);if(!f.rpcImpl){setTimeout(function(){d(Error("already ended"))},0);return}try{return f.rpcImpl(i,s[f.requestDelimited?"encodeDelimited":"encode"](o).finish(),function(r,n){if(r)return f.emit("error",r,i),d(r);if(null===n){f.end(!0);return}if(!(n instanceof a))try{n=a[f.responseDelimited?"decodeDelimited":"decode"](n)}catch(r){return f.emit("error",r,i),d(r)}return f.emit("data",n,i),d(null,n)})}catch(r){f.emit("error",r,i),setTimeout(function(){d(r)},0);return}},s.prototype.end=function(r){return this.rpcImpl&&(r||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}}),parcelRequire.register("aOCzj",function(r,i){r.exports={}}),parcelRequire.register("lPaTT",function(r,i){r.exports=d;var n=parcelRequire("h7nED"),s=parcelRequire("a2ADZ"),a=parcelRequire("8rMOR");function o(r,i,n,s){return i.resolvedType.group?r("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",n,s,(i.id<<3|3)>>>0,(i.id<<3|4)>>>0):r("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",n,s,(i.id<<3|2)>>>0)}function d(r){for(var i,d,f=a.codegen(["m","w"],r.name+"$encode")("if(!w)")("w=Writer.create()"),l=r.fieldsArray.slice().sort(a.compareFieldsById),i=0;i>>0,8|s.mapKey[u.keyType],u.keyType),void 0===h?f("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",c,d):f(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|h,p,d),f("}")("}")):u.repeated?(f("if(%s!=null&&%s.length){",d,d),u.packed&&void 0!==s.packed[p]?f("w.uint32(%i).fork()",(u.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",d)("w.%s(%s[i])",p,d)("w.ldelim()"):(f("for(var i=0;i<%s.length;++i)",d),void 0===h?o(f,u,c,d+"[i]"):f("w.uint32(%i).%s(%s[i])",(u.id<<3|h)>>>0,p,d)),f("}")):(u.optional&&f("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",d,u.name),void 0===h?o(f,u,c,d):f("w.uint32(%i).%s(%s)",(u.id<<3|h)>>>0,p,d))}return f("return w")}}),parcelRequire.register("h7nED",function(r,i){r.exports=o;var n=parcelRequire("hH6YY");((o.prototype=Object.create(n.prototype)).constructor=o).className="Enum";var s=parcelRequire("gMk2L"),a=parcelRequire("8rMOR");function o(r,i,s,a,o){if(n.call(this,r,s),i&&"object"!=typeof i)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=a,this.comments=o||{},this.reserved=void 0,i)for(var d=Object.keys(i),f=0;f0)r[a]=s(r[a]||{},i,n);else{var o=r[a];o&&(n=[].concat(o).concat(n)),r[a]=n}return r}if("object"!=typeof r)throw TypeError("dst must be an object");if(!i)throw TypeError("path must be specified");return s(r,i=i.split("."),n)},Object.defineProperty(a,"decorateRoot",{get:function(){return o.decorated||(o.decorated=new(parcelRequire("8FZEM")))}})}),parcelRequire.register("6OhfU",function(r,i){function n(r,i){"string"==typeof r&&(i=r,r=void 0);var s=[];function a(r){if("string"!=typeof r){var i=o();if(n.verbose&&console.log("codegen: "+i),i="return "+i,r){for(var d=Object.keys(r),f=Array(d.length+1),l=Array(d.length),u=0;u0&&".."!==i[o-1]?i.splice(--o,2):n?i.splice(o,1):++o:"."===i[o]?i.splice(o,1):++o;return a+i.join("/")};n.resolve=function(r,i,n){return(n||(i=a(i)),s(i))?i:(n||(r=a(r)),(r=r.replace(/(?:\/|^)[^/]+$/,"")).length?a(r+"/"+i):i)}}),parcelRequire.register("gexVP",function(r,i){r.exports=b;var n=parcelRequire("gMk2L");((b.prototype=Object.create(n.prototype)).constructor=b).className="Type";var s=parcelRequire("h7nED"),a=parcelRequire("3XqRZ"),o=parcelRequire("5jxQS"),d=parcelRequire("0UDCv"),f=parcelRequire("fPJWC"),l=parcelRequire("hJamA"),u=parcelRequire("4ynb4"),c=parcelRequire("iczXS"),p=parcelRequire("8rMOR"),h=parcelRequire("lPaTT"),g=parcelRequire("gMZPL"),m=parcelRequire("fy57h"),v=parcelRequire("lTYyc"),_=parcelRequire("3fcYL");function b(r,i){n.call(this,r,i),this.fields={},this.oneofs=void 0,this.extensions=void 0,this.reserved=void 0,this.group=void 0,this._fieldsById=null,this._fieldsArray=null,this._oneofsArray=null,this._ctor=null}function T(r){return r._fieldsById=r._fieldsArray=r._oneofsArray=null,delete r.encode,delete r.decode,delete r.verify,r}Object.defineProperties(b.prototype,{fieldsById:{get:function(){if(this._fieldsById)return this._fieldsById;this._fieldsById={};for(var r=Object.keys(this.fields),i=0;ii)return!0}return!1},c.isReservedName=function(r,i){if(r){for(var n=0;n0;){var s=r.shift();if(n.nested&&n.nested[s]){if(!((n=n.nested[s])instanceof c))throw Error("path conflicts with non-namespace objects")}else n.add(n=new c(s))}return i&&n.addJSON(i),n},c.prototype.resolveAll=function(){for(var r=this.nestedArray,i=0;i-1)return s}else if(s instanceof c&&(s=s.lookup(r.slice(1),i,!0)))return s}else for(var a=0;a-1&&this.oneof.splice(i,1),r.partOf=null,this},o.prototype.onAdd=function(r){n.prototype.onAdd.call(this,r);for(var i=this,s=0;s>>3){");for(var d=0;d>>3){")("case 1: k=r.%s(); break",f.keyType)("case 2:"),void 0===s.basic[l]?i("value=types[%i].decode(r,r.uint32())",d):i("value=r.%s()",l),i("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),i(void 0!==s.long[f.keyType]?'%s[typeof k==="object"?util.longToHash(k):k]=value':"%s[k]=value",u)):f.repeated?(i("if(!(%s&&%s.length))",u,u)("%s=[]",u),void 0!==s.packed[l]&&i("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0",a,a);break;case"int32":case"sint32":case"sfixed32":r("m%s=d%s|0",a,a);break;case"uint64":l=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":r("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",a,a,l)('else if(typeof d%s==="string")',a)("m%s=parseInt(d%s,10)",a,a)('else if(typeof d%s==="number")',a)("m%s=d%s",a,a)('else if(typeof d%s==="object")',a)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",a,a,a,l?"true":"");break;case"bytes":r('if(typeof d%s==="string")',a)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",a,a,a)("else if(d%s.length)",a)("m%s=d%s",a,a);break;case"string":r("m%s=String(d%s)",a,a);break;case"bool":r("m%s=Boolean(d%s)",a,a)}}return r}function d(r,i,n,a){if(i.resolvedType)i.resolvedType instanceof s?r("d%s=o.enums===String?types[%i].values[m%s]:m%s",a,n,a,a):r("d%s=types[%i].toObject(m%s,o)",a,n,a);else{var o=!1;switch(i.type){case"double":case"float":r("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",a,a,a,a);break;case"uint64":o=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":r('if(typeof m%s==="number")',a)("d%s=o.longs===String?String(m%s):m%s",a,a,a)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",a,a,a,a,o?"true":"",a);break;case"bytes":r("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",a,a,a,a,a);break;default:r("d%s=m%s",a,a)}}return r}n.fromObject=function(r){var i=r.fieldsArray,n=a.codegen(["d"],r.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!i.length)return n("return new this.ctor");n("var m=new this.ctor");for(var d=0;d-1){var n=r.substring(i);if(n in a)return n}return null}function h(r,i){try{if(u.isString(i)&&"{"===i.charAt(0)&&(i=JSON.parse(i)),u.isString(i)){s.filename=r;var a,o=s(i,d,n),p=0;if(o.imports)for(;p-1)){if(d.files.push(r),r in a){f?h(r,a[r]):(++m,setTimeout(function(){--m,h(r,a[r])}));return}if(f){var n;try{n=u.fs.readFileSync(r).toString("utf8")}catch(r){i||l(r);return}h(r,n)}else++m,d.fetch(r,function(n,s){if(--m,o){if(n){i?m||l(null,d):l(n);return}h(r,s)}})}}var m=0;u.isString(i)&&(i=[i]);for(var v,_=0;_-1&&this.deferred.splice(i,1)}}}else if(r instanceof f)h.test(r.name)&&delete r.parent[r.name];else if(r instanceof o){for(var n=0;n>>=0,(a=0<=r&&r<256)&&(s=d[r]))?s:(n=u(r,(0|r)<0?-1:0,!0),a&&(d[r]=n),n):(r|=0,(a=-128<=r&&r<128)&&(s=o[r]))?s:(n=u(r,r<0?-1:0,!1),a&&(o[r]=n),n)}function l(r,i){if(isNaN(r))return i?T:b;if(i){if(r<0)return T;if(r>=m)return O}else{if(r<=-v)return C;if(r+1>=v)return I}return r<0?l(-r,i).neg():u(r%g|0,r/g|0,i)}function u(r,i,n){return new s(r,i,n)}s.fromInt=f,s.fromNumber=l,s.fromBits=u;var c=Math.pow;function p(r,i,n){if(0===r.length)throw Error("empty string");if("NaN"===r||"Infinity"===r||"+Infinity"===r||"-Infinity"===r)return b;if("number"==typeof i?(n=i,i=!1):i=!!i,(n=n||10)<2||360)throw Error("interior hyphen");if(0===s)return p(r.substring(1),i,n).neg();for(var s,a=l(c(n,8)),o=b,d=0;d>>0:this.low},A.toNumber=function(){return this.unsigned?(this.high>>>0)*g+(this.low>>>0):this.high*g+(this.low>>>0)},A.toString=function(r){if((r=r||10)<2||36>>0).toString(r);if((o=f).isZero())return u+d;for(;u.length<6;)u="0"+u;d=""+u+d}},A.getHighBits=function(){return this.high},A.getHighBitsUnsigned=function(){return this.high>>>0},A.getLowBits=function(){return this.low},A.getLowBitsUnsigned=function(){return this.low>>>0},A.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var r=0!=this.high?this.high:this.low,i=31;i>0&&(r&1<=0},A.isOdd=function(){return(1&this.low)==1},A.isEven=function(){return(1&this.low)==0},A.equals=function(r){return a(r)||(r=h(r)),(this.unsigned===r.unsigned||this.high>>>31!=1||r.high>>>31!=1)&&this.high===r.high&&this.low===r.low},A.eq=A.equals,A.notEquals=function(r){return!this.eq(r)},A.neq=A.notEquals,A.ne=A.notEquals,A.lessThan=function(r){return 0>this.comp(r)},A.lt=A.lessThan,A.lessThanOrEqual=function(r){return 0>=this.comp(r)},A.lte=A.lessThanOrEqual,A.le=A.lessThanOrEqual,A.greaterThan=function(r){return this.comp(r)>0},A.gt=A.greaterThan,A.greaterThanOrEqual=function(r){return this.comp(r)>=0},A.gte=A.greaterThanOrEqual,A.ge=A.greaterThanOrEqual,A.compare=function(r){if(a(r)||(r=h(r)),this.eq(r))return 0;var i=this.isNegative(),n=r.isNegative();return i&&!n?-1:!i&&n?1:this.unsigned?r.high>>>0>this.high>>>0||r.high===this.high&&r.low>>>0>this.low>>>0?-1:1:this.sub(r).isNegative()?-1:1},A.comp=A.compare,A.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(E)},A.neg=A.negate,A.add=function(r){a(r)||(r=h(r));var i,n,s=this.high>>>16,o=65535&this.high,d=this.low>>>16,f=65535&this.low,l=r.high>>>16,c=65535&r.high,p=r.low>>>16,g=65535&r.low,m=0,v=0;return i=0+((n=0+(f+g))>>>16),n&=65535,i+=d+p,v+=i>>>16,i&=65535,v+=o+c,m+=v>>>16,v&=65535,m+=s+l,u(i<<16|n,(m&=65535)<<16|v,this.unsigned)},A.subtract=function(r){return a(r)||(r=h(r)),this.add(r.neg())},A.sub=A.subtract,A.multiply=function(r){if(this.isZero())return b;if(a(r)||(r=h(r)),n)return u(n.mul(this.low,this.high,r.low,r.high),n.get_high(),this.unsigned);if(r.isZero())return b;if(this.eq(C))return r.isOdd()?C:b;if(r.eq(C))return this.isOdd()?C:b;if(this.isNegative())return r.isNegative()?this.neg().mul(r.neg()):this.neg().mul(r).neg();if(r.isNegative())return this.mul(r.neg()).neg();if(this.lt(_)&&r.lt(_))return l(this.toNumber()*r.toNumber(),this.unsigned);var i,s,o=this.high>>>16,d=65535&this.high,f=this.low>>>16,c=65535&this.low,p=r.high>>>16,g=65535&r.high,m=r.low>>>16,v=65535&r.low,T=0,E=0;return i=0+((s=0+c*v)>>>16),s&=65535,i+=f*v,E+=i>>>16,i&=65535,i+=c*m,E+=i>>>16,i&=65535,E+=d*v,T+=E>>>16,E&=65535,E+=f*m,T+=E>>>16,E&=65535,E+=c*g,T+=E>>>16,E&=65535,T+=o*v+d*m+f*g+c*p,u(i<<16|s,(T&=65535)<<16|E,this.unsigned)},A.mul=A.multiply,A.divide=function(r){if(a(r)||(r=h(r)),r.isZero())throw Error("division by zero");if(n){var i,s,o;return this.unsigned||-2147483648!==this.high||-1!==r.low||-1!==r.high?u((this.unsigned?n.div_u:n.div_s)(this.low,this.high,r.low,r.high),n.get_high(),this.unsigned):this}if(this.isZero())return this.unsigned?T:b;if(this.unsigned){if(r.unsigned||(r=r.toUnsigned()),r.gt(this))return T;if(r.gt(this.shru(1)))return w;o=T}else{if(this.eq(C))return r.eq(E)||r.eq(S)?C:r.eq(C)?E:(i=this.shr(1).div(r).shl(1)).eq(b)?r.isNegative()?E:S:(s=this.sub(r.mul(i)),o=i.add(s.div(r)));if(r.eq(C))return this.unsigned?T:b;if(this.isNegative())return r.isNegative()?this.neg().div(r.neg()):this.neg().div(r).neg();if(r.isNegative())return this.div(r.neg()).neg();o=b}for(s=this;s.gte(r);){for(var d=Math.ceil(Math.log(i=Math.max(1,Math.floor(s.toNumber()/r.toNumber())))/Math.LN2),f=d<=48?1:c(2,d-48),p=l(i),g=p.mul(r);g.isNegative()||g.gt(s);)i-=f,g=(p=l(i,this.unsigned)).mul(r);p.isZero()&&(p=E),o=o.add(p),s=s.sub(g)}return o},A.div=A.divide,A.modulo=function(r){return(a(r)||(r=h(r)),n)?u((this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,r.low,r.high),n.get_high(),this.unsigned):this.sub(this.div(r).mul(r))},A.mod=A.modulo,A.rem=A.modulo,A.not=function(){return u(~this.low,~this.high,this.unsigned)},A.and=function(r){return a(r)||(r=h(r)),u(this.low&r.low,this.high&r.high,this.unsigned)},A.or=function(r){return a(r)||(r=h(r)),u(this.low|r.low,this.high|r.high,this.unsigned)},A.xor=function(r){return a(r)||(r=h(r)),u(this.low^r.low,this.high^r.high,this.unsigned)},A.shiftLeft=function(r){return(a(r)&&(r=r.toInt()),0==(r&=63))?this:r<32?u(this.low<>>32-r,this.unsigned):u(0,this.low<>>r|this.high<<32-r,this.high>>r,this.unsigned):u(this.high>>r-32,this.high>=0?0:-1,this.unsigned)},A.shr=A.shiftRight,A.shiftRightUnsigned=function(r){if(a(r)&&(r=r.toInt()),0==(r&=63))return this;var i=this.high;return r<32?u(this.low>>>r|i<<32-r,i>>>r,this.unsigned):32===r?u(i,0,this.unsigned):u(i>>>r-32,0,this.unsigned)},A.shru=A.shiftRightUnsigned,A.shr_u=A.shiftRightUnsigned,A.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},A.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},A.toBytes=function(r){return r?this.toBytesLE():this.toBytesBE()},A.toBytesLE=function(){var r=this.high,i=this.low;return[255&i,i>>>8&255,i>>>16&255,i>>>24,255&r,r>>>8&255,r>>>16&255,r>>>24]},A.toBytesBE=function(){var r=this.high,i=this.low;return[r>>>24,r>>>16&255,r>>>8&255,255&r,i>>>24,i>>>16&255,i>>>8&255,255&i]},s.fromBytes=function(r,i,n){return n?s.fromBytesLE(r,i):s.fromBytesBE(r,i)},s.fromBytesLE=function(r,i){return new s(r[0]|r[1]<<8|r[2]<<16|r[3]<<24,r[4]|r[5]<<8|r[6]<<16|r[7]<<24,i)},s.fromBytesBE=function(r,i){return new s(r[4]<<24|r[5]<<16|r[6]<<8|r[7],r[0]<<24|r[1]<<16|r[2]<<8|r[3],i)}}),parcelRequire.register("2kkR6",function(r,i){!function(i,n){"function"==typeof define&&define.amd?define(["long"],n):r&&r.exports?r.exports=function(){var r;try{r=parcelRequire("kjZyY")}catch(r){}return n(r)}():(i.dcodeIO=i.dcodeIO||{}).ByteBuffer=n(i.dcodeIO.Long)}(this,function(r){var i=function(r,n,a){if(void 0===r&&(r=i.DEFAULT_CAPACITY),void 0===n&&(n=i.DEFAULT_ENDIAN),void 0===a&&(a=i.DEFAULT_NOASSERT),!a){if((r|=0)<0)throw RangeError("Illegal capacity");n=!!n,a=!!a}this.buffer=0===r?s:new ArrayBuffer(r),this.view=0===r?null:new Uint8Array(this.buffer),this.offset=0,this.markedOffset=-1,this.limit=r,this.littleEndian=n,this.noAssert=a};i.VERSION="5.0.1",i.LITTLE_ENDIAN=!0,i.BIG_ENDIAN=!1,i.DEFAULT_CAPACITY=16,i.DEFAULT_ENDIAN=i.BIG_ENDIAN,i.DEFAULT_NOASSERT=!1,i.Long=r||null;var n=i.prototype;n.__isByteBuffer__,Object.defineProperty(n,"__isByteBuffer__",{value:!0,enumerable:!1,configurable:!1});var s=new ArrayBuffer(0),a=String.fromCharCode;function o(r){var i=0;return function(){return i1024&&(i.push(a.apply(String,r)),r.length=0),Array.prototype.push.apply(r,arguments)}}function f(r,i,n,s,a){var o,d,f=8*a-s-1,l=(1<>1,c=-7,p=n?a-1:0,h=n?-1:1,g=r[i+p];for(p+=h,o=g&(1<<-c)-1,g>>=-c,c+=f;c>0;o=256*o+r[i+p],p+=h,c-=8);for(d=o&(1<<-c)-1,o>>=-c,c+=s;c>0;d=256*d+r[i+p],p+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return d?NaN:(g?-1:1)*(1/0);d+=Math.pow(2,s),o-=u}return(g?-1:1)*d*Math.pow(2,o-s)}function l(r,i,n,s,a,o){var d,f,l,u=8*o-a-1,c=(1<>1,h=23===a?5960464477539062e-23:0,g=s?0:o-1,m=s?1:-1,v=i<0||0===i&&1/i<0?1:0;for(isNaN(i=Math.abs(i))||i===1/0?(f=isNaN(i)?1:0,d=c):(d=Math.floor(Math.log(i)/Math.LN2),i*(l=Math.pow(2,-d))<1&&(d--,l*=2),d+p>=1?i+=h/l:i+=h*Math.pow(2,1-p),i*l>=2&&(d++,l/=2),d+p>=c?(f=0,d=c):d+p>=1?(f=(i*l-1)*Math.pow(2,a),d+=p):(f=i*Math.pow(2,p-1)*Math.pow(2,a),d=0));a>=8;r[n+g]=255&f,g+=m,f/=256,a-=8);for(d=d<0;r[n+g]=255&d,g+=m,d/=256,u-=8);r[n+g-m]|=128*v}i.accessor=function(){return Uint8Array},i.allocate=function(r,n,s){return new i(r,n,s)},i.concat=function(r,n,s,a){("boolean"==typeof n||"string"!=typeof n)&&(a=s,s=n,n=void 0);for(var o,d=0,f=0,l=r.length;f0&&(d+=o);if(0===d)return new i(0,s,a);var u,c=new i(d,s,a);for(f=0;f0&&(d.buffer=r.buffer,d.offset=r.byteOffset,d.limit=r.byteOffset+r.byteLength,d.view=new Uint8Array(r.buffer));else if(r instanceof ArrayBuffer)d=new i(0,a,o),r.byteLength>0&&(d.buffer=r,d.offset=0,d.limit=r.byteLength,d.view=r.byteLength>0?new Uint8Array(r):null);else if("[object Array]"===Object.prototype.toString.call(r)){(d=new i(r.length,a,o)).limit=r.length;for(var d,f=0;f>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var s,a=i,o=r.length,d=o>>3,f=0;for(i+=this.writeVarint32(o,i);d--;)s=1&!!r[f++]|(1&!!r[f++])<<1|(1&!!r[f++])<<2|(1&!!r[f++])<<3|(1&!!r[f++])<<4|(1&!!r[f++])<<5|(1&!!r[f++])<<6|(1&!!r[f++])<<7,this.writeByte(s,i++);if(f>3,d=0,f=[];for(r+=s.length;o--;)n=this.readByte(r++),f[d++]=!!(1&n),f[d++]=!!(2&n),f[d++]=!!(4&n),f[d++]=!!(8&n),f[d++]=!!(16&n),f[d++]=!!(32&n),f[d++]=!!(64&n),f[d++]=!!(128&n);if(d>l++&1)}return i&&(this.offset=r),f},n.readBytes=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+r>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+"+r+") <= "+this.buffer.byteLength)}var s=this.slice(i,i+r);return n&&(this.offset+=r),s},n.writeBytes=n.append,n.writeInt8=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=1;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=1,this.view[i]=r,n&&(this.offset+=1),this},n.writeByte=n.writeInt8,n.readInt8=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n=this.view[r];return(128&n)==128&&(n=-(255-n+1)),i&&(this.offset+=1),n},n.readByte=n.readInt8,n.writeUint8=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=1;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=1,this.view[i]=r,n&&(this.offset+=1),this},n.writeUInt8=n.writeUint8,n.readUint8=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n=this.view[r];return i&&(this.offset+=1),n},n.readUInt8=n.readUint8,n.writeInt16=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=2;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=2,this.littleEndian?(this.view[i+1]=(65280&r)>>>8,this.view[i]=255&r):(this.view[i]=(65280&r)>>>8,this.view[i+1]=255&r),n&&(this.offset+=2),this},n.writeShort=n.writeInt16,n.readInt16=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+2) <= "+this.buffer.byteLength)}var n=0;return(32768&(n=this.littleEndian?this.view[r]|this.view[r+1]<<8:this.view[r]<<8|this.view[r+1]))==32768&&(n=-(65535-n+1)),i&&(this.offset+=2),n},n.readShort=n.readInt16,n.writeUint16=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=2;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=2,this.littleEndian?(this.view[i+1]=(65280&r)>>>8,this.view[i]=255&r):(this.view[i]=(65280&r)>>>8,this.view[i+1]=255&r),n&&(this.offset+=2),this},n.writeUInt16=n.writeUint16,n.readUint16=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+2) <= "+this.buffer.byteLength)}var n=0;return n=this.littleEndian?this.view[r]|this.view[r+1]<<8:this.view[r]<<8|this.view[r+1],i&&(this.offset+=2),n},n.readUInt16=n.readUint16,n.writeInt32=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=4;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=4,this.littleEndian?(this.view[i+3]=r>>>24&255,this.view[i+2]=r>>>16&255,this.view[i+1]=r>>>8&255,this.view[i]=255&r):(this.view[i]=r>>>24&255,this.view[i+1]=r>>>16&255,this.view[i+2]=r>>>8&255,this.view[i+3]=255&r),n&&(this.offset+=4),this},n.writeInt=n.writeInt32,n.readInt32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var n=0;return n=(this.littleEndian?(this.view[r+2]<<16|this.view[r+1]<<8|this.view[r])+(this.view[r+3]<<24>>>0):(this.view[r+1]<<16|this.view[r+2]<<8|this.view[r+3])+(this.view[r]<<24>>>0))|0,i&&(this.offset+=4),n},n.readInt=n.readInt32,n.writeUint32=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=4;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=4,this.littleEndian?(this.view[i+3]=r>>>24&255,this.view[i+2]=r>>>16&255,this.view[i+1]=r>>>8&255,this.view[i]=255&r):(this.view[i]=r>>>24&255,this.view[i+1]=r>>>16&255,this.view[i+2]=r>>>8&255,this.view[i+3]=255&r),n&&(this.offset+=4),this},n.writeUInt32=n.writeUint32,n.readUint32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var n=0;return n=this.littleEndian?(this.view[r+2]<<16|this.view[r+1]<<8|this.view[r])+(this.view[r+3]<<24>>>0):(this.view[r+1]<<16|this.view[r+2]<<8|this.view[r+3])+(this.view[r]<<24>>>0),i&&(this.offset+=4),n},n.readUInt32=n.readUint32,r&&(n.writeInt64=function(i,n){var s=void 0===n;if(s&&(n=this.offset),!this.noAssert){if("number"==typeof i)i=r.fromNumber(i);else if("string"==typeof i)i=r.fromString(i);else if(!(i&&i instanceof r))throw TypeError("Illegal value: "+i+" (not an integer or Long)");if("number"!=typeof n||n%1!=0)throw TypeError("Illegal offset: "+n+" (not an integer)");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}"number"==typeof i?i=r.fromNumber(i):"string"==typeof i&&(i=r.fromString(i)),n+=8;var a=this.buffer.byteLength;n>a&&this.resize((a*=2)>n?a:n),n-=8;var o=i.low,d=i.high;return this.littleEndian?(this.view[n+3]=o>>>24&255,this.view[n+2]=o>>>16&255,this.view[n+1]=o>>>8&255,this.view[n]=255&o,n+=4,this.view[n+3]=d>>>24&255,this.view[n+2]=d>>>16&255,this.view[n+1]=d>>>8&255,this.view[n]=255&d):(this.view[n]=d>>>24&255,this.view[n+1]=d>>>16&255,this.view[n+2]=d>>>8&255,this.view[n+3]=255&d,n+=4,this.view[n]=o>>>24&255,this.view[n+1]=o>>>16&255,this.view[n+2]=o>>>8&255,this.view[n+3]=255&o),s&&(this.offset+=8),this},n.writeLong=n.writeInt64,n.readInt64=function(i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+8) <= "+this.buffer.byteLength)}var s=0,a=0;this.littleEndian?(s=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0),i+=4,a=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0)):(a=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0),i+=4,s=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0));var o=new r(s,a,!1);return n&&(this.offset+=8),o},n.readLong=n.readInt64,n.writeUint64=function(i,n){var s=void 0===n;if(s&&(n=this.offset),!this.noAssert){if("number"==typeof i)i=r.fromNumber(i);else if("string"==typeof i)i=r.fromString(i);else if(!(i&&i instanceof r))throw TypeError("Illegal value: "+i+" (not an integer or Long)");if("number"!=typeof n||n%1!=0)throw TypeError("Illegal offset: "+n+" (not an integer)");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}"number"==typeof i?i=r.fromNumber(i):"string"==typeof i&&(i=r.fromString(i)),n+=8;var a=this.buffer.byteLength;n>a&&this.resize((a*=2)>n?a:n),n-=8;var o=i.low,d=i.high;return this.littleEndian?(this.view[n+3]=o>>>24&255,this.view[n+2]=o>>>16&255,this.view[n+1]=o>>>8&255,this.view[n]=255&o,n+=4,this.view[n+3]=d>>>24&255,this.view[n+2]=d>>>16&255,this.view[n+1]=d>>>8&255,this.view[n]=255&d):(this.view[n]=d>>>24&255,this.view[n+1]=d>>>16&255,this.view[n+2]=d>>>8&255,this.view[n+3]=255&d,n+=4,this.view[n]=o>>>24&255,this.view[n+1]=o>>>16&255,this.view[n+2]=o>>>8&255,this.view[n+3]=255&o),s&&(this.offset+=8),this},n.writeUInt64=n.writeUint64,n.readUint64=function(i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+8) <= "+this.buffer.byteLength)}var s=0,a=0;this.littleEndian?(s=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0),i+=4,a=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0)):(a=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0),i+=4,s=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0));var o=new r(s,a,!0);return n&&(this.offset+=8),o},n.readUInt64=n.readUint64),n.writeFloat32=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r)throw TypeError("Illegal value: "+r+" (not a number)");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=4;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=4,l(this.view,r,i,this.littleEndian,23,4),n&&(this.offset+=4),this},n.writeFloat=n.writeFloat32,n.readFloat32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var n=f(this.view,r,this.littleEndian,23,4);return i&&(this.offset+=4),n},n.readFloat=n.readFloat32,n.writeFloat64=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r)throw TypeError("Illegal value: "+r+" (not a number)");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=8;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=8,l(this.view,r,i,this.littleEndian,52,8),n&&(this.offset+=8),this},n.writeDouble=n.writeFloat64,n.readFloat64=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+8) <= "+this.buffer.byteLength)}var n=f(this.view,r,this.littleEndian,52,8);return i&&(this.offset+=8),n},n.readDouble=n.readFloat64,i.MAX_VARINT32_BYTES=5,i.calculateVarint32=function(r){return(r>>>=0)<128?1:r<16384?2:r<2097152?3:r<268435456?4:5},i.zigZagEncode32=function(r){return((r|=0)<<1^r>>31)>>>0},i.zigZagDecode32=function(r){return r>>>1^-(1&r)|0},n.writeVarint32=function(r,n){var s=void 0===n;if(s&&(n=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal offset: "+n+" (not an integer)");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}var a,o=i.calculateVarint32(r);n+=o;var d=this.buffer.byteLength;for(n>d&&this.resize((d*=2)>n?d:n),n-=o,r>>>=0;r>=128;)a=127&r|128,this.view[n++]=a,r>>>=7;return(this.view[n++]=r,s)?(this.offset=n,this):o},n.writeVarint32ZigZag=function(r,n){return this.writeVarint32(i.zigZagEncode32(r),n)},n.readVarint32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n,s=0,a=0;do{if(!this.noAssert&&r>this.limit){var o=Error("Truncated");throw o.truncated=!0,o}n=this.view[r++],s<5&&(a|=(127&n)<<7*s),++s}while((128&n)!=0)return(a|=0,i)?(this.offset=r,a):{value:a,length:s}},n.readVarint32ZigZag=function(r){var n=this.readVarint32(r);return"object"==typeof n?n.value=i.zigZagDecode32(n.value):n=i.zigZagDecode32(n),n},r&&(i.MAX_VARINT64_BYTES=10,i.calculateVarint64=function(i){"number"==typeof i?i=r.fromNumber(i):"string"==typeof i&&(i=r.fromString(i));var n=i.toInt()>>>0,s=i.shiftRightUnsigned(28).toInt()>>>0,a=i.shiftRightUnsigned(56).toInt()>>>0;return 0!=a?a<128?9:10:0==s?n<16384?n<128?1:2:n<2097152?3:4:s<16384?s<128?5:6:s<2097152?7:8},i.zigZagEncode64=function(i){return"number"==typeof i?i=r.fromNumber(i,!1):"string"==typeof i?i=r.fromString(i,!1):!1!==i.unsigned&&(i=i.toSigned()),i.shiftLeft(1).xor(i.shiftRight(63)).toUnsigned()},i.zigZagDecode64=function(i){return"number"==typeof i?i=r.fromNumber(i,!1):"string"==typeof i?i=r.fromString(i,!1):!1!==i.unsigned&&(i=i.toSigned()),i.shiftRightUnsigned(1).xor(i.and(r.ONE).toSigned().negate()).toSigned()},n.writeVarint64=function(n,s){var a=void 0===s;if(a&&(s=this.offset),!this.noAssert){if("number"==typeof n)n=r.fromNumber(n);else if("string"==typeof n)n=r.fromString(n);else if(!(n&&n instanceof r))throw TypeError("Illegal value: "+n+" (not an integer or Long)");if("number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}"number"==typeof n?n=r.fromNumber(n,!1):"string"==typeof n?n=r.fromString(n,!1):!1!==n.unsigned&&(n=n.toSigned());var o=i.calculateVarint64(n),d=n.toInt()>>>0,f=n.shiftRightUnsigned(28).toInt()>>>0,l=n.shiftRightUnsigned(56).toInt()>>>0;s+=o;var u=this.buffer.byteLength;switch(s>u&&this.resize((u*=2)>s?u:s),s-=o,o){case 10:this.view[s+9]=l>>>7&1;case 9:this.view[s+8]=9!==o?128|l:127&l;case 8:this.view[s+7]=8!==o?f>>>21|128:f>>>21&127;case 7:this.view[s+6]=7!==o?f>>>14|128:f>>>14&127;case 6:this.view[s+5]=6!==o?f>>>7|128:f>>>7&127;case 5:this.view[s+4]=5!==o?128|f:127&f;case 4:this.view[s+3]=4!==o?d>>>21|128:d>>>21&127;case 3:this.view[s+2]=3!==o?d>>>14|128:d>>>14&127;case 2:this.view[s+1]=2!==o?d>>>7|128:d>>>7&127;case 1:this.view[s]=1!==o?128|d:127&d}return a?(this.offset+=o,this):o},n.writeVarint64ZigZag=function(r,n){return this.writeVarint64(i.zigZagEncode64(r),n)},n.readVarint64=function(i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+1) <= "+this.buffer.byteLength)}var s=i,a=0,o=0,d=0,f=0;if(a=127&(f=this.view[i++]),128&f&&(a|=(127&(f=this.view[i++]))<<7,(128&f||this.noAssert&&void 0===f)&&(a|=(127&(f=this.view[i++]))<<14,(128&f||this.noAssert&&void 0===f)&&(a|=(127&(f=this.view[i++]))<<21,(128&f||this.noAssert&&void 0===f)&&(o=127&(f=this.view[i++]),(128&f||this.noAssert&&void 0===f)&&(o|=(127&(f=this.view[i++]))<<7,(128&f||this.noAssert&&void 0===f)&&(o|=(127&(f=this.view[i++]))<<14,(128&f||this.noAssert&&void 0===f)&&(o|=(127&(f=this.view[i++]))<<21,(128&f||this.noAssert&&void 0===f)&&(d=127&(f=this.view[i++]),(128&f||this.noAssert&&void 0===f)&&(d|=(127&(f=this.view[i++]))<<7,128&f||this.noAssert&&void 0===f))))))))))throw Error("Buffer overrun");var l=r.fromBits(a|o<<28,o>>>4|d<<24,!1);return n?(this.offset=i,l):{value:l,length:i-s}},n.readVarint64ZigZag=function(n){var s=this.readVarint64(n);return s&&s.value instanceof r?s.value=i.zigZagDecode64(s.value):s=i.zigZagDecode64(s),s}),n.writeCString=function(r,i){var n=void 0===i;n&&(i=this.offset);var s,a=r.length;if(!this.noAssert){if("string"!=typeof r)throw TypeError("Illegal str: Not a string");for(s=0;s>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=(a=c.calculateUTF16asUTF8(o(r))[1])+1;var d=this.buffer.byteLength;return(i>d&&this.resize((d*=2)>i?d:i),i-=a+1,c.encodeUTF16toUTF8(o(r),(function(r){this.view[i++]=r}).bind(this)),this.view[i++]=0,n)?(this.offset=i,this):a},n.readCString=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n,s=r,a=-1;return(c.decodeUTF8toUTF16((function(){if(0===a)return null;if(r>=this.limit)throw RangeError("Illegal range: Truncated data, "+r+" < "+this.limit);return 0===(a=this.view[r++])?null:a}).bind(this),n=d(),!0),i)?(this.offset=r,n()):{string:n(),length:r-s}},n.writeIString=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("string"!=typeof r)throw TypeError("Illegal str: Not a string");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var s,a=i;i+=4+(s=c.calculateUTF16asUTF8(o(r),this.noAssert)[1]);var d=this.buffer.byteLength;if(i>d&&this.resize((d*=2)>i?d:i),i-=4+s,this.littleEndian?(this.view[i+3]=s>>>24&255,this.view[i+2]=s>>>16&255,this.view[i+1]=s>>>8&255,this.view[i]=255&s):(this.view[i]=s>>>24&255,this.view[i+1]=s>>>16&255,this.view[i+2]=s>>>8&255,this.view[i+3]=255&s),i+=4,c.encodeUTF16toUTF8(o(r),(function(r){this.view[i++]=r}).bind(this)),i!==a+4+s)throw RangeError("Illegal range: Truncated data, "+i+" == "+(i+4+s));return n?(this.offset=i,this):i-a},n.readIString=function(r){var n=void 0===r;if(n&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var s=r,a=this.readUint32(r),o=this.readUTF8String(a,i.METRICS_BYTES,r+=4);return(r+=o.length,n)?(this.offset=r,o.string):{string:o.string,length:r-s}},i.METRICS_CHARS="c",i.METRICS_BYTES="b",n.writeUTF8String=function(r,i){var n,s=void 0===i;if(s&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var a=i;i+=n=c.calculateUTF16asUTF8(o(r))[1];var d=this.buffer.byteLength;return(i>d&&this.resize((d*=2)>i?d:i),i-=n,c.encodeUTF16toUTF8(o(r),(function(r){this.view[i++]=r}).bind(this)),s)?(this.offset=i,this):i-a},n.writeString=n.writeUTF8String,i.calculateUTF8Chars=function(r){return c.calculateUTF16asUTF8(o(r))[0]},i.calculateUTF8Bytes=function(r){return c.calculateUTF16asUTF8(o(r))[1]},i.calculateString=i.calculateUTF8Bytes,n.readUTF8String=function(r,n,s){"number"==typeof n&&(s=n,n=void 0);var a=void 0===s;if(a&&(s=this.offset),void 0===n&&(n=i.METRICS_CHARS),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal length: "+r+" (not an integer)");if(r|=0,"number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}var o,f=0,l=s;if(n===i.METRICS_CHARS){if(o=d(),c.decodeUTF8((function(){return f>>=0)<0||s+r>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+"+r+") <= "+this.buffer.byteLength)}var u=s+r;if(c.decodeUTF8toUTF16((function(){return s>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}var a,d,f=n;a=c.calculateUTF16asUTF8(o(r),this.noAssert)[1],n+=(d=i.calculateVarint32(a))+a;var l=this.buffer.byteLength;if(n>l&&this.resize((l*=2)>n?l:n),n-=d+a,n+=this.writeVarint32(a,n),c.encodeUTF16toUTF8(o(r),(function(r){this.view[n++]=r}).bind(this)),n!==f+a+d)throw RangeError("Illegal range: Truncated data, "+n+" == "+(n+a+d));return s?(this.offset=n,this):n-f},n.readVString=function(r){var n=void 0===r;if(n&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var s=r,a=this.readVarint32(r),o=this.readUTF8String(a.value,i.METRICS_BYTES,r+=a.length);return(r+=o.length,n)?(this.offset=r,o.string):{string:o.string,length:r-s}},n.append=function(r,n,s){("number"==typeof n||"string"!=typeof n)&&(s=n,n=void 0);var a=void 0===s;if(a&&(s=this.offset),!this.noAssert){if("number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}r instanceof i||(r=i.wrap(r,n));var o=r.limit-r.offset;if(o<=0)return this;s+=o;var d=this.buffer.byteLength;return s>d&&this.resize((d*=2)>s?d:s),s-=o,this.view.set(r.view.subarray(r.offset,r.limit),s),r.offset+=o,a&&(this.offset+=o),this},n.appendTo=function(r,i){return r.append(this,i),this},n.assert=function(r){return this.noAssert=!r,this},n.capacity=function(){return this.buffer.byteLength},n.clear=function(){return this.offset=0,this.limit=this.buffer.byteLength,this.markedOffset=-1,this},n.clone=function(r){var n=new i(0,this.littleEndian,this.noAssert);return r?(n.buffer=new ArrayBuffer(this.buffer.byteLength),n.view=new Uint8Array(n.buffer)):(n.buffer=this.buffer,n.view=this.view),n.offset=this.offset,n.markedOffset=this.markedOffset,n.limit=this.limit,n},n.compact=function(r,i){if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}if(0===r&&i===this.buffer.byteLength)return this;var n=i-r;if(0===n)return this.buffer=s,this.view=null,this.markedOffset>=0&&(this.markedOffset-=r),this.offset=0,this.limit=0,this;var a=new ArrayBuffer(n),o=new Uint8Array(a);return o.set(this.view.subarray(r,i)),this.buffer=a,this.view=o,this.markedOffset>=0&&(this.markedOffset-=r),this.offset=0,this.limit=n,this},n.copy=function(r,n){if(void 0===r&&(r=this.offset),void 0===n&&(n=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal end: Not an integer");if(n>>>=0,r<0||r>n||n>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+n+" <= "+this.buffer.byteLength)}if(r===n)return new i(0,this.littleEndian,this.noAssert);var s=n-r,a=new i(s,this.littleEndian,this.noAssert);return a.offset=0,a.limit=s,a.markedOffset>=0&&(a.markedOffset-=r),this.copyTo(a,0,r,n),a},n.copyTo=function(r,n,s,a){if(!this.noAssert&&!i.isByteBuffer(r))throw TypeError("Illegal target: Not a ByteBuffer");if(n=(d=void 0===n)?r.offset:0|n,s=(o=void 0===s)?this.offset:0|s,a=void 0===a?this.limit:0|a,n<0||n>r.buffer.byteLength)throw RangeError("Illegal target range: 0 <= "+n+" <= "+r.buffer.byteLength);if(s<0||a>this.buffer.byteLength)throw RangeError("Illegal source range: 0 <= "+s+" <= "+this.buffer.byteLength);var o,d,f=a-s;return 0===f?r:(r.ensureCapacity(n+f),r.view.set(this.view.subarray(s,a),n),o&&(this.offset+=f),d&&(r.offset+=f),this)},n.ensureCapacity=function(r){var i=this.buffer.byteLength;return ir?i:r):this},n.fill=function(r,i,n){var s=void 0===i;if(s&&(i=this.offset),"string"==typeof r&&r.length>0&&(r=r.charCodeAt(0)),void 0===i&&(i=this.offset),void 0===n&&(n=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal begin: Not an integer");if(i>>>=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal end: Not an integer");if(n>>>=0,i<0||i>n||n>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+i+" <= "+n+" <= "+this.buffer.byteLength)}if(i>=n)return this;for(;i>>=0)<0||r+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+0) <= "+this.buffer.byteLength)}return this.markedOffset=r,this},n.order=function(r){if(!this.noAssert&&"boolean"!=typeof r)throw TypeError("Illegal littleEndian: Not a boolean");return this.littleEndian=!!r,this},n.LE=function(r){return this.littleEndian=void 0===r||!!r,this},n.BE=function(r){return this.littleEndian=void 0!==r&&!r,this},n.prepend=function(r,n,s){("number"==typeof n||"string"!=typeof n)&&(s=n,n=void 0);var a=void 0===s;if(a&&(s=this.offset),!this.noAssert){if("number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}r instanceof i||(r=i.wrap(r,n));var o=r.limit-r.offset;if(o<=0)return this;var d=o-s;if(d>0){var f=new ArrayBuffer(this.buffer.byteLength+d),l=new Uint8Array(f);l.set(this.view.subarray(s,this.buffer.byteLength),o),this.buffer=f,this.view=l,this.offset+=d,this.markedOffset>=0&&(this.markedOffset+=d),this.limit+=d,s+=d}else new Uint8Array(this.buffer);return this.view.set(r.view.subarray(r.offset,r.limit),s-o),r.offset=r.limit,a&&(this.offset-=o),this},n.prependTo=function(r,i){return r.prepend(this,i),this},n.printDebug=function(r){"function"!=typeof r&&(r=console.log.bind(console)),r(this.toString()+"\n-------------------------------------------------------------------\n"+this.toDebug(!0))},n.remaining=function(){return this.limit-this.offset},n.reset=function(){return this.markedOffset>=0?(this.offset=this.markedOffset,this.markedOffset=-1):this.offset=0,this},n.resize=function(r){if(!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal capacity: "+r+" (not an integer)");if((r|=0)<0)throw RangeError("Illegal capacity: 0 <= "+r)}if(this.buffer.byteLength>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}return r===i||Array.prototype.reverse.call(this.view.subarray(r,i)),this},n.skip=function(r){if(!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal length: "+r+" (not an integer)");r|=0}var i=this.offset+r;if(!this.noAssert&&(i<0||i>this.buffer.byteLength))throw RangeError("Illegal length: 0 <= "+this.offset+" + "+r+" <= "+this.buffer.byteLength);return this.offset=i,this},n.slice=function(r,i){if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}var n=this.clone();return n.offset=r,n.limit=i,n},n.toBuffer=function(r){var i=this.offset,n=this.limit;if(!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: Not an integer");if(i>>>=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal limit: Not an integer");if(n>>>=0,i<0||i>n||n>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+i+" <= "+n+" <= "+this.buffer.byteLength)}if(!r&&0===i&&n===this.buffer.byteLength)return this.buffer;if(i===n)return s;var a=new ArrayBuffer(n-i);return new Uint8Array(a).set(new Uint8Array(this.buffer).subarray(i,n),0),a},n.toArrayBuffer=n.toBuffer,n.toString=function(r,i,n){if(void 0===r)return"ByteBufferAB(offset="+this.offset+",markedOffset="+this.markedOffset+",limit="+this.limit+",capacity="+this.capacity()+")";switch("number"==typeof r&&(n=i=r="utf8"),r){case"utf8":return this.toUTF8(i,n);case"base64":return this.toBase64(i,n);case"hex":return this.toHex(i,n);case"binary":return this.toBinary(i,n);case"debug":return this.toDebug();case"columns":return this.toColumns();default:throw Error("Unsupported encoding: "+r)}};var u=function(){for(var r={},i=[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47],n=[],s=0,a=i.length;s>2&63]),a=(3&s)<<4,null!==(s=r())?(n(i[((a|=s>>4&15)|s>>4&15)&63]),a=(15&s)<<2,null!==(s=r())?(n(i[(a|s>>6&3)&63]),n(i[63&s])):(n(i[63&a]),n(61))):(n(i[63&a]),n(61),n(61))},r.decode=function(r,i){var s,a,o;function d(r){throw Error("Illegal character code: "+r)}for(;null!==(s=r());)if(void 0===(a=n[s])&&d(s),null!==(s=r())&&(void 0===(o=n[s])&&d(s),i(a<<2>>>0|(48&o)>>4),null!==(s=r()))){if(void 0===(a=n[s])){if(61===s)break;d(s)}if(i((15&o)<<4>>>0|(60&a)>>2),null!==(s=r())){if(void 0===(o=n[s])){if(61===s)break;d(s)}i((3&a)<<6>>>0|o)}}},r.test=function(r){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(r)},r}();n.toBase64=function(r,i){var n;if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),i|=0,(r|=0)<0||i>this.capacity||r>i)throw RangeError("begin, end");return u.encode((function(){return rthis.capacity()||r>i)throw RangeError("begin, end");if(r===i)return"";for(var n=[],s=[];r=1024&&(s.push(String.fromCharCode.apply(String,n)),n=[]);return s.join("")+String.fromCharCode.apply(String,n)},i.fromBinary=function(r,n){if("string"!=typeof r)throw TypeError("str");for(var s,a=0,o=r.length,d=new i(o,n);a255)throw RangeError("illegal char code: "+s);d.view[a++]=s}return d.limit=o,d},n.toDebug=function(r){for(var i,n=-1,s=this.buffer.byteLength,a="",o="",d="";n32&&i<127?String.fromCharCode(i):".")),++n,r&&n>0&&n%16==0&&n!==s){for(;a.length<51;)a+=" ";d+=a+o+"\n",a=o=""}n===this.offset&&n===this.limit?a+=n===this.markedOffset?"!":"|":n===this.offset?a+=n===this.markedOffset?"[":"<":n===this.limit?a+=n===this.markedOffset?"]":">":a+=n===this.markedOffset?"'":r||0!==n&&n!==s?" ":""}if(r&&" "!==a){for(;a.length<51;)a+=" ";d+=a+o+"\n"}return r?d:a},i.fromDebug=function(r,n,s){for(var a,o,d=r.length,f=new i((d+1)/3|0,n,s),l=0,u=0,c=!1,p=!1,h=!1,g=!1,m=!1;l":if(!s){if(g){m=!0;break}g=!0}f.limit=u,c=!1;break;case"'":if(!s){if(h){m=!0;break}h=!0}f.markedOffset=u,c=!1;break;case" ":c=!1;break;default:if(!s&&c){m=!0;break}if(o=parseInt(a+r.charAt(l++),16),!s&&(isNaN(o)||o<0||o>255))throw TypeError("Illegal str: Not a debug encoded string");f.view[u++]=o,c=!0}if(m)throw TypeError("Illegal str: Invalid symbol at "+l)}if(!s){if(!p||!g)throw TypeError("Illegal str: Missing offset or limit");if(u>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}for(var n,s=Array(i-r);r255))throw TypeError("Illegal str: Contains non-hex characters");d.view[l++]=a}return d.limit=l,d};var c=function(){var r={};return r.MAX_CODEPOINT=1114111,r.encodeUTF8=function(r,i){var n=null;for("number"==typeof r&&(n=r,r=function(){return null});null!==n||null!==(n=r());)n<128?i(127&n):(n<2048?i(n>>6&31|192):(n<65536?i(n>>12&15|224):(i(n>>18&7|240),i(n>>12&63|128)),i(n>>6&63|128)),i(63&n|128)),n=null},r.decodeUTF8=function(r,i){for(var n,s,a,o,d=function(r){var i=Error((r=r.slice(0,r.indexOf(null))).toString());throw i.name="TruncatedError",i.bytes=r,i};null!==(n=r());)if((128&n)==0)i(n);else if((224&n)==192)null===(s=r())&&d([n,s]),i((31&n)<<6|63&s);else if((240&n)==224)(null===(s=r())||null===(a=r()))&&d([n,s,a]),i((15&n)<<12|(63&s)<<6|63&a);else if((248&n)==240)(null===(s=r())||null===(a=r())||null===(o=r()))&&d([n,s,a,o]),i((7&n)<<18|(63&s)<<12|(63&a)<<6|63&o);else throw RangeError("Illegal starting byte: "+n)},r.UTF16toUTF8=function(r,i){for(var n,s=null;null!==(n=null!==s?s:r());){if(n>=55296&&n<=57343&&null!==(s=r())&&s>=56320&&s<=57343){i((n-55296)*1024+s-56320+65536),s=null;continue}i(n)}null!==s&&i(s)},r.UTF8toUTF16=function(r,i){var n=null;for("number"==typeof r&&(n=r,r=function(){return null});null!==n||null!==(n=r());)n<=65535?i(n):(i(((n-=65536)>>10)+55296),i(n%1024+56320)),n=null},r.encodeUTF16toUTF8=function(i,n){r.UTF16toUTF8(i,function(i){r.encodeUTF8(i,n)})},r.decodeUTF8toUTF16=function(i,n){r.decodeUTF8(i,function(i){r.UTF8toUTF16(i,n)})},r.calculateCodePoint=function(r){return r<128?1:r<2048?2:r<65536?3:4},r.calculateUTF8=function(r){for(var i,n=0;null!==(i=r());)n+=i<128?1:i<2048?2:i<65536?3:4;return n},r.calculateUTF16asUTF8=function(i){var n=0,s=0;return r.UTF16toUTF8(i,function(r){++n,s+=r<128?1:r<2048?2:r<65536?3:4}),[n,s]},r}();return n.toUTF8=function(r,i){var n;if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}try{c.decodeUTF8toUTF16((function(){return r>>=0,(f=0<=r&&r<256)&&(o=s[r]))?o:(a=d(r,(0|r)<0?-1:0,!0),f&&(s[r]=a),a):(r|=0,(f=-128<=r&&r<128)&&(o=n[r]))?o:(a=d(r,r<0?-1:0,!1),f&&(n[r]=a),a)}function o(r,i){if(isNaN(r)||!isFinite(r))return i?v:m;if(i){if(r<0)return v;if(r>=p)return w}else{if(r<=-h)return S;if(r+1>=h)return E}return r<0?o(-r,i).neg():d(r%c|0,r/c|0,i)}function d(i,n,s){return new r(i,n,s)}r.fromInt=a,r.fromNumber=o,r.fromBits=d;var f=Math.pow;function l(r,i,n){if(0===r.length)throw Error("empty string");if("NaN"===r||"Infinity"===r||"+Infinity"===r||"-Infinity"===r)return m;if("number"==typeof i?(n=i,i=!1):i=!!i,(n=n||10)<2||360)throw Error("interior hyphen");if(0===s)return l(r.substring(1),i,n).neg();for(var s,a=o(f(n,8)),d=m,u=0;u>>0:this.low},I.toNumber=function(){return this.unsigned?(this.high>>>0)*c+(this.low>>>0):this.high*c+(this.low>>>0)},I.toString=function(r){if((r=r||10)<2||36>>0).toString(r);if((d=u).isZero())return c+l;for(;c.length<6;)c="0"+c;l=""+c+l}},I.getHighBits=function(){return this.high},I.getHighBitsUnsigned=function(){return this.high>>>0},I.getLowBits=function(){return this.low},I.getLowBitsUnsigned=function(){return this.low>>>0},I.getNumBitsAbs=function(){if(this.isNegative())return this.eq(S)?64:this.neg().getNumBitsAbs();for(var r=0!=this.high?this.high:this.low,i=31;i>0&&(r&1<=0},I.isOdd=function(){return(1&this.low)==1},I.isEven=function(){return(1&this.low)==0},I.equals=function(r){return i(r)||(r=u(r)),(this.unsigned===r.unsigned||this.high>>>31!=1||r.high>>>31!=1)&&this.high===r.high&&this.low===r.low},I.eq=I.equals,I.notEquals=function(r){return!this.eq(r)},I.neq=I.notEquals,I.lessThan=function(r){return 0>this.comp(r)},I.lt=I.lessThan,I.lessThanOrEqual=function(r){return 0>=this.comp(r)},I.lte=I.lessThanOrEqual,I.greaterThan=function(r){return this.comp(r)>0},I.gt=I.greaterThan,I.greaterThanOrEqual=function(r){return this.comp(r)>=0},I.gte=I.greaterThanOrEqual,I.compare=function(r){if(i(r)||(r=u(r)),this.eq(r))return 0;var n=this.isNegative(),s=r.isNegative();return n&&!s?-1:!n&&s?1:this.unsigned?r.high>>>0>this.high>>>0||r.high===this.high&&r.low>>>0>this.low>>>0?-1:1:this.sub(r).isNegative()?-1:1},I.comp=I.compare,I.negate=function(){return!this.unsigned&&this.eq(S)?S:this.not().add(_)},I.neg=I.negate,I.add=function(r){i(r)||(r=u(r));var n,s,a=this.high>>>16,o=65535&this.high,f=this.low>>>16,l=65535&this.low,c=r.high>>>16,p=65535&r.high,h=r.low>>>16,g=65535&r.low,m=0,v=0;return n=0+((s=0+(l+g))>>>16),s&=65535,n+=f+h,v+=n>>>16,n&=65535,v+=o+p,m+=v>>>16,v&=65535,m+=a+c,d(n<<16|s,(m&=65535)<<16|v,this.unsigned)},I.subtract=function(r){return i(r)||(r=u(r)),this.add(r.neg())},I.sub=I.subtract,I.multiply=function(r){if(this.isZero()||(i(r)||(r=u(r)),r.isZero()))return m;if(this.eq(S))return r.isOdd()?S:m;if(r.eq(S))return this.isOdd()?S:m;if(this.isNegative())return r.isNegative()?this.neg().mul(r.neg()):this.neg().mul(r).neg();if(r.isNegative())return this.mul(r.neg()).neg();if(this.lt(g)&&r.lt(g))return o(this.toNumber()*r.toNumber(),this.unsigned);var n,s,a=this.high>>>16,f=65535&this.high,l=this.low>>>16,c=65535&this.low,p=r.high>>>16,h=65535&r.high,v=r.low>>>16,_=65535&r.low,b=0,T=0;return n=0+((s=0+c*_)>>>16),s&=65535,n+=l*_,T+=n>>>16,n&=65535,n+=c*v,T+=n>>>16,n&=65535,T+=f*_,b+=T>>>16,T&=65535,T+=l*v,b+=T>>>16,T&=65535,T+=c*h,b+=T>>>16,T&=65535,b+=a*_+f*v+l*h+c*p,d(n<<16|s,(b&=65535)<<16|T,this.unsigned)},I.mul=I.multiply,I.divide=function(r){if(i(r)||(r=u(r)),r.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?v:m;if(this.unsigned){if(r.unsigned||(r=r.toUnsigned()),r.gt(this))return v;if(r.gt(this.shru(1)))return b;a=v}else{if(this.eq(S)){var n,s,a;return r.eq(_)||r.eq(T)?S:r.eq(S)?_:(n=this.shr(1).div(r).shl(1)).eq(m)?r.isNegative()?_:T:(s=this.sub(r.mul(n)),a=n.add(s.div(r)))}if(r.eq(S))return this.unsigned?v:m;if(this.isNegative())return r.isNegative()?this.neg().div(r.neg()):this.neg().div(r).neg();if(r.isNegative())return this.div(r.neg()).neg();a=m}for(s=this;s.gte(r);){for(var d=Math.ceil(Math.log(n=Math.max(1,Math.floor(s.toNumber()/r.toNumber())))/Math.LN2),l=d<=48?1:f(2,d-48),c=o(n),p=c.mul(r);p.isNegative()||p.gt(s);)n-=l,p=(c=o(n,this.unsigned)).mul(r);c.isZero()&&(c=_),a=a.add(c),s=s.sub(p)}return a},I.div=I.divide,I.modulo=function(r){return i(r)||(r=u(r)),this.sub(this.div(r).mul(r))},I.mod=I.modulo,I.not=function(){return d(~this.low,~this.high,this.unsigned)},I.and=function(r){return i(r)||(r=u(r)),d(this.low&r.low,this.high&r.high,this.unsigned)},I.or=function(r){return i(r)||(r=u(r)),d(this.low|r.low,this.high|r.high,this.unsigned)},I.xor=function(r){return i(r)||(r=u(r)),d(this.low^r.low,this.high^r.high,this.unsigned)},I.shiftLeft=function(r){return(i(r)&&(r=r.toInt()),0==(r&=63))?this:r<32?d(this.low<>>32-r,this.unsigned):d(0,this.low<>>r|this.high<<32-r,this.high>>r,this.unsigned):d(this.high>>r-32,this.high>=0?0:-1,this.unsigned)},I.shr=I.shiftRight,I.shiftRightUnsigned=function(r){if(i(r)&&(r=r.toInt()),0==(r&=63))return this;var n=this.high;return r<32?d(this.low>>>r|n<<32-r,n>>>r,this.unsigned):32===r?d(n,0,this.unsigned):d(n>>>r-32,0,this.unsigned)},I.shru=I.shiftRightUnsigned,I.toSigned=function(){return this.unsigned?d(this.low,this.high,!1):this},I.toUnsigned=function(){return this.unsigned?this:d(this.low,this.high,!0)},I.toBytes=function(r){return r?this.toBytesLE():this.toBytesBE()},I.toBytesLE=function(){var r=this.high,i=this.low;return[255&i,i>>>8&255,i>>>16&255,i>>>24&255,255&r,r>>>8&255,r>>>16&255,r>>>24&255]},I.toBytesBE=function(){var r=this.high,i=this.low;return[r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i]},r})}),parcelRequire.register("7j6a5",function(r,i){r.exports=import("./"+parcelRequire("dRo73").resolve("fn7yv")).then(()=>parcelRequire("6oS5p"))});var $37578c5600331006$exports={};Object.defineProperty($37578c5600331006$exports,"__esModule",{value:!0});var $ce1f303d0aa8ec51$exports={},$awmEs=parcelRequire("awmEs"),$ce1f303d0aa8ec51$require$Buffer=$awmEs.Buffer;Object.defineProperty($ce1f303d0aa8ec51$exports,"__esModule",{value:!0});var $f3bb2747c7b09053$exports={},$9kaCP=parcelRequire("9kaCP"),$85PoE=parcelRequire("85PoE"),$5d67c366f11253ea$exports={},$aW7Y5=parcelRequire("aW7Y5"),$85PoE=parcelRequire("85PoE"),$5d67c366f11253ea$require$MAX_LENGTH=$85PoE.MAX_LENGTH,$5d67c366f11253ea$require$MAX_SAFE_INTEGER=$85PoE.MAX_SAFE_INTEGER,$9kaCP=parcelRequire("9kaCP"),$5d67c366f11253ea$require$re=$9kaCP.safeRe,$5d67c366f11253ea$require$t=$9kaCP.t,$2404c71d37817e19$exports={};const $2404c71d37817e19$var$looseOption=Object.freeze({loose:!0}),$2404c71d37817e19$var$emptyOpts=Object.freeze({}),$2404c71d37817e19$var$parseOptions=r=>r?"object"!=typeof r?$2404c71d37817e19$var$looseOption:r:$2404c71d37817e19$var$emptyOpts;$2404c71d37817e19$exports=$2404c71d37817e19$var$parseOptions;var $2dfbf56026e52c8c$exports={};const $2dfbf56026e52c8c$var$numeric=/^[0-9]+$/,$2dfbf56026e52c8c$var$compareIdentifiers=(r,i)=>{let n=$2dfbf56026e52c8c$var$numeric.test(r),s=$2dfbf56026e52c8c$var$numeric.test(i);return n&&s&&(r=+r,i=+i),r===i?0:n&&!s?-1:s&&!n?1:r$2dfbf56026e52c8c$var$compareIdentifiers(i,r);$2dfbf56026e52c8c$exports={compareIdentifiers:$2dfbf56026e52c8c$var$compareIdentifiers,rcompareIdentifiers:$2dfbf56026e52c8c$var$rcompareIdentifiers};var $5d67c366f11253ea$require$compareIdentifiers=$2dfbf56026e52c8c$exports.compareIdentifiers;class $5d67c366f11253ea$var$SemVer{constructor(r,i){if(i=$2404c71d37817e19$exports(i),r instanceof $5d67c366f11253ea$var$SemVer){if(!!i.loose===r.loose&&!!i.includePrerelease===r.includePrerelease)return r;r=r.version}else if("string"!=typeof r)throw TypeError(`Invalid version. Must be a string. Got type "${typeof r}".`);if(r.length>$5d67c366f11253ea$require$MAX_LENGTH)throw TypeError(`version is longer than ${$5d67c366f11253ea$require$MAX_LENGTH} characters`);$aW7Y5("SemVer",r,i),this.options=i,this.loose=!!i.loose,this.includePrerelease=!!i.includePrerelease;let n=r.trim().match(i.loose?$5d67c366f11253ea$require$re[$5d67c366f11253ea$require$t.LOOSE]:$5d67c366f11253ea$require$re[$5d67c366f11253ea$require$t.FULL]);if(!n)throw TypeError(`Invalid Version: ${r}`);if(this.raw=r,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>$5d67c366f11253ea$require$MAX_SAFE_INTEGER||this.major<0)throw TypeError("Invalid major version");if(this.minor>$5d67c366f11253ea$require$MAX_SAFE_INTEGER||this.minor<0)throw TypeError("Invalid minor version");if(this.patch>$5d67c366f11253ea$require$MAX_SAFE_INTEGER||this.patch<0)throw TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(r=>{if(/^[0-9]+$/.test(r)){let i=+r;if(i>=0&&i<$5d67c366f11253ea$require$MAX_SAFE_INTEGER)return i}return r}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(r){if($aW7Y5("SemVer.compare",this.version,this.options,r),!(r instanceof $5d67c366f11253ea$var$SemVer)){if("string"==typeof r&&r===this.version)return 0;r=new $5d67c366f11253ea$var$SemVer(r,this.options)}return r.version===this.version?0:this.compareMain(r)||this.comparePre(r)}compareMain(r){return r instanceof $5d67c366f11253ea$var$SemVer||(r=new $5d67c366f11253ea$var$SemVer(r,this.options)),$5d67c366f11253ea$require$compareIdentifiers(this.major,r.major)||$5d67c366f11253ea$require$compareIdentifiers(this.minor,r.minor)||$5d67c366f11253ea$require$compareIdentifiers(this.patch,r.patch)}comparePre(r){if(r instanceof $5d67c366f11253ea$var$SemVer||(r=new $5d67c366f11253ea$var$SemVer(r,this.options)),this.prerelease.length&&!r.prerelease.length)return -1;if(!this.prerelease.length&&r.prerelease.length)return 1;if(!this.prerelease.length&&!r.prerelease.length)return 0;let i=0;do{let n=this.prerelease[i],s=r.prerelease[i];if($aW7Y5("prerelease compare",i,n,s),void 0===n&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===n)return -1;if(n===s)continue;else return $5d67c366f11253ea$require$compareIdentifiers(n,s)}while(++i)}compareBuild(r){r instanceof $5d67c366f11253ea$var$SemVer||(r=new $5d67c366f11253ea$var$SemVer(r,this.options));let i=0;do{let n=this.build[i],s=r.build[i];if($aW7Y5("prerelease compare",i,n,s),void 0===n&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===n)return -1;if(n===s)continue;else return $5d67c366f11253ea$require$compareIdentifiers(n,s)}while(++i)}inc(r,i,n){switch(r){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",i,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",i,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",i,n),this.inc("pre",i,n);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",i,n),this.inc("pre",i,n);break;case"major":(0!==this.minor||0!==this.patch||0===this.prerelease.length)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(0!==this.patch||0===this.prerelease.length)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{let r=Number(n)?1:0;if(!i&&!1===n)throw Error("invalid increment argument: identifier is empty");if(0===this.prerelease.length)this.prerelease=[r];else{let s=this.prerelease.length;for(;--s>=0;)"number"==typeof this.prerelease[s]&&(this.prerelease[s]++,s=-2);if(-1===s){if(i===this.prerelease.join(".")&&!1===n)throw Error("invalid increment argument: identifier already exists");this.prerelease.push(r)}}if(i){let s=[i,r];!1===n&&(s=[i]),0===$5d67c366f11253ea$require$compareIdentifiers(this.prerelease[0],i)?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw Error(`invalid increment argument: ${r}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}$5d67c366f11253ea$exports=$5d67c366f11253ea$var$SemVer;var $2365cabe1405e41d$exports={};const $2365cabe1405e41d$var$parse=(r,i,n=!1)=>{if(r instanceof $5d67c366f11253ea$exports)return r;try{return new $5d67c366f11253ea$exports(r,i)}catch(r){if(!n)return null;throw r}};$2365cabe1405e41d$exports=$2365cabe1405e41d$var$parse;var $db1a24152bcbff38$exports={};const $db1a24152bcbff38$var$valid=(r,i)=>{let n=$2365cabe1405e41d$exports(r,i);return n?n.version:null};$db1a24152bcbff38$exports=$db1a24152bcbff38$var$valid;var $5ab1ebf1c7653375$exports={};const $5ab1ebf1c7653375$var$clean=(r,i)=>{let n=$2365cabe1405e41d$exports(r.trim().replace(/^[=v]+/,""),i);return n?n.version:null};$5ab1ebf1c7653375$exports=$5ab1ebf1c7653375$var$clean;var $410676b06cd48254$exports={};const $410676b06cd48254$var$inc=(r,i,n,s,a)=>{"string"==typeof n&&(a=s,s=n,n=void 0);try{return new $5d67c366f11253ea$exports(r instanceof $5d67c366f11253ea$exports?r.version:r,n).inc(i,s,a).version}catch(r){return null}};$410676b06cd48254$exports=$410676b06cd48254$var$inc;var $1fa0b4a78a9c3100$exports={};const $1fa0b4a78a9c3100$var$diff=(r,i)=>{let n=$2365cabe1405e41d$exports(r,null,!0),s=$2365cabe1405e41d$exports(i,null,!0),a=n.compare(s);if(0===a)return null;let o=a>0,d=o?n:s,f=o?s:n,l=!!d.prerelease.length,u=!!f.prerelease.length;if(u&&!l)return f.patch||f.minor?d.patch?"patch":d.minor?"minor":"major":"major";let c=l?"pre":"";return n.major!==s.major?c+"major":n.minor!==s.minor?c+"minor":n.patch!==s.patch?c+"patch":"prerelease"};$1fa0b4a78a9c3100$exports=$1fa0b4a78a9c3100$var$diff;var $d9e91b148724d7ba$exports={};const $d9e91b148724d7ba$var$major=(r,i)=>new $5d67c366f11253ea$exports(r,i).major;$d9e91b148724d7ba$exports=$d9e91b148724d7ba$var$major;var $88beef4f36bb99dc$exports={};const $88beef4f36bb99dc$var$minor=(r,i)=>new $5d67c366f11253ea$exports(r,i).minor;$88beef4f36bb99dc$exports=$88beef4f36bb99dc$var$minor;var $fbc38baee3ec52af$exports={};const $fbc38baee3ec52af$var$patch=(r,i)=>new $5d67c366f11253ea$exports(r,i).patch;$fbc38baee3ec52af$exports=$fbc38baee3ec52af$var$patch;var $ec64f7ad8d61d626$exports={};const $ec64f7ad8d61d626$var$prerelease=(r,i)=>{let n=$2365cabe1405e41d$exports(r,i);return n&&n.prerelease.length?n.prerelease:null};$ec64f7ad8d61d626$exports=$ec64f7ad8d61d626$var$prerelease;var $be8c6448e7d4b283$exports={};const $be8c6448e7d4b283$var$compare=(r,i,n)=>new $5d67c366f11253ea$exports(r,n).compare(new $5d67c366f11253ea$exports(i,n));$be8c6448e7d4b283$exports=$be8c6448e7d4b283$var$compare;var $d53fa55eda60e3c4$exports={};const $d53fa55eda60e3c4$var$rcompare=(r,i,n)=>$be8c6448e7d4b283$exports(i,r,n);$d53fa55eda60e3c4$exports=$d53fa55eda60e3c4$var$rcompare;var $8c9639966becf13f$exports={};const $8c9639966becf13f$var$compareLoose=(r,i)=>$be8c6448e7d4b283$exports(r,i,!0);$8c9639966becf13f$exports=$8c9639966becf13f$var$compareLoose;var $9c3f14a67e2b7b05$exports={};const $9c3f14a67e2b7b05$var$compareBuild=(r,i,n)=>{let s=new $5d67c366f11253ea$exports(r,n),a=new $5d67c366f11253ea$exports(i,n);return s.compare(a)||s.compareBuild(a)};$9c3f14a67e2b7b05$exports=$9c3f14a67e2b7b05$var$compareBuild;var $10e9ef24aa7dc37d$exports={};const $10e9ef24aa7dc37d$var$sort=(r,i)=>r.sort((r,n)=>$9c3f14a67e2b7b05$exports(r,n,i));$10e9ef24aa7dc37d$exports=$10e9ef24aa7dc37d$var$sort;var $c310560cb4f36b70$exports={};const $c310560cb4f36b70$var$rsort=(r,i)=>r.sort((r,n)=>$9c3f14a67e2b7b05$exports(n,r,i));$c310560cb4f36b70$exports=$c310560cb4f36b70$var$rsort;var $0716672aeeeb00b7$exports={};const $0716672aeeeb00b7$var$gt=(r,i,n)=>$be8c6448e7d4b283$exports(r,i,n)>0;$0716672aeeeb00b7$exports=$0716672aeeeb00b7$var$gt;var $6bef60a1f9ea49cc$exports={};const $6bef60a1f9ea49cc$var$lt=(r,i,n)=>0>$be8c6448e7d4b283$exports(r,i,n);$6bef60a1f9ea49cc$exports=$6bef60a1f9ea49cc$var$lt;var $9a774071cdb8a22b$exports={};const $9a774071cdb8a22b$var$eq=(r,i,n)=>0===$be8c6448e7d4b283$exports(r,i,n);$9a774071cdb8a22b$exports=$9a774071cdb8a22b$var$eq;var $d1d9bbe2c9634018$exports={};const $d1d9bbe2c9634018$var$neq=(r,i,n)=>0!==$be8c6448e7d4b283$exports(r,i,n);$d1d9bbe2c9634018$exports=$d1d9bbe2c9634018$var$neq;var $2b877d0256c5541e$exports={};const $2b877d0256c5541e$var$gte=(r,i,n)=>$be8c6448e7d4b283$exports(r,i,n)>=0;$2b877d0256c5541e$exports=$2b877d0256c5541e$var$gte;var $278c58909ad7ced2$exports={};const $278c58909ad7ced2$var$lte=(r,i,n)=>0>=$be8c6448e7d4b283$exports(r,i,n);$278c58909ad7ced2$exports=$278c58909ad7ced2$var$lte;var $e52ecc8579498688$exports={};const $e52ecc8579498688$var$cmp=(r,i,n,s)=>{switch(i){case"===":return"object"==typeof r&&(r=r.version),"object"==typeof n&&(n=n.version),r===n;case"!==":return"object"==typeof r&&(r=r.version),"object"==typeof n&&(n=n.version),r!==n;case"":case"=":case"==":return $9a774071cdb8a22b$exports(r,n,s);case"!=":return $d1d9bbe2c9634018$exports(r,n,s);case">":return $0716672aeeeb00b7$exports(r,n,s);case">=":return $2b877d0256c5541e$exports(r,n,s);case"<":return $6bef60a1f9ea49cc$exports(r,n,s);case"<=":return $278c58909ad7ced2$exports(r,n,s);default:throw TypeError(`Invalid operator: ${i}`)}};$e52ecc8579498688$exports=$e52ecc8579498688$var$cmp;var $5d8cdd4724630ca5$exports={},$9kaCP=parcelRequire("9kaCP"),$5d8cdd4724630ca5$require$re=$9kaCP.safeRe,$5d8cdd4724630ca5$require$t=$9kaCP.t;const $5d8cdd4724630ca5$var$coerce=(r,i)=>{if(r instanceof $5d67c366f11253ea$exports)return r;if("number"==typeof r&&(r=String(r)),"string"!=typeof r)return null;let n=null;if((i=i||{}).rtl){let i;for(;(i=$5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCERTL].exec(r))&&(!n||n.index+n[0].length!==r.length);)n&&i.index+i[0].length===n.index+n[0].length||(n=i),$5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;$5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCERTL].lastIndex=-1}else n=r.match($5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCE]);return null===n?null:$2365cabe1405e41d$exports(`${n[2]}.${n[3]||"0"}.${n[4]||"0"}`,i)};$5d8cdd4724630ca5$exports=$5d8cdd4724630ca5$var$coerce;var $811acfa69967f2ec$exports={};const $811acfa69967f2ec$var$ANY=Symbol("SemVer ANY");class $811acfa69967f2ec$var$Comparator{static get ANY(){return $811acfa69967f2ec$var$ANY}constructor(r,i){if(i=$2404c71d37817e19$exports(i),r instanceof $811acfa69967f2ec$var$Comparator){if(!!i.loose===r.loose)return r;r=r.value}$aW7Y5("comparator",r=r.trim().split(/\s+/).join(" "),i),this.options=i,this.loose=!!i.loose,this.parse(r),this.semver===$811acfa69967f2ec$var$ANY?this.value="":this.value=this.operator+this.semver.version,$aW7Y5("comp",this)}parse(r){let i=this.options.loose?$811acfa69967f2ec$require$re[$811acfa69967f2ec$require$t.COMPARATORLOOSE]:$811acfa69967f2ec$require$re[$811acfa69967f2ec$require$t.COMPARATOR],n=r.match(i);if(!n)throw TypeError(`Invalid comparator: ${r}`);this.operator=void 0!==n[1]?n[1]:"","="===this.operator&&(this.operator=""),n[2]?this.semver=new $5d67c366f11253ea$exports(n[2],this.options.loose):this.semver=$811acfa69967f2ec$var$ANY}toString(){return this.value}test(r){if($aW7Y5("Comparator.test",r,this.options.loose),this.semver===$811acfa69967f2ec$var$ANY||r===$811acfa69967f2ec$var$ANY)return!0;if("string"==typeof r)try{r=new $5d67c366f11253ea$exports(r,this.options)}catch(r){return!1}return $e52ecc8579498688$exports(r,this.operator,this.semver,this.options)}intersects(r,i){if(!(r instanceof $811acfa69967f2ec$var$Comparator))throw TypeError("a Comparator is required");return""===this.operator?""===this.value||new $4577f00308fa375e$exports(r.value,i).test(this.value):""===r.operator?""===r.value||new $4577f00308fa375e$exports(this.value,i).test(r.semver):!((i=$2404c71d37817e19$exports(i)).includePrerelease&&("<0.0.0-0"===this.value||"<0.0.0-0"===r.value)||!i.includePrerelease&&(this.value.startsWith("<0.0.0")||r.value.startsWith("<0.0.0")))&&!!(this.operator.startsWith(">")&&r.operator.startsWith(">")||this.operator.startsWith("<")&&r.operator.startsWith("<")||this.semver.version===r.semver.version&&this.operator.includes("=")&&r.operator.includes("=")||$e52ecc8579498688$exports(this.semver,"<",r.semver,i)&&this.operator.startsWith(">")&&r.operator.startsWith("<")||$e52ecc8579498688$exports(this.semver,">",r.semver,i)&&this.operator.startsWith("<")&&r.operator.startsWith(">"))}}$811acfa69967f2ec$exports=$811acfa69967f2ec$var$Comparator;var $9kaCP=parcelRequire("9kaCP"),$811acfa69967f2ec$require$re=$9kaCP.safeRe,$811acfa69967f2ec$require$t=$9kaCP.t,$aW7Y5=parcelRequire("aW7Y5"),$4577f00308fa375e$exports={};class $4577f00308fa375e$var$Range{constructor(r,i){if(i=$2404c71d37817e19$exports(i),r instanceof $4577f00308fa375e$var$Range){if(!!i.loose===r.loose&&!!i.includePrerelease===r.includePrerelease)return r;return new $4577f00308fa375e$var$Range(r.raw,i)}if(r instanceof $811acfa69967f2ec$exports)return this.raw=r.value,this.set=[[r]],this.format(),this;if(this.options=i,this.loose=!!i.loose,this.includePrerelease=!!i.includePrerelease,this.raw=r.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(r=>this.parseRange(r.trim())).filter(r=>r.length),!this.set.length)throw TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let r=this.set[0];if(this.set=this.set.filter(r=>!$4577f00308fa375e$var$isNullSet(r[0])),0===this.set.length)this.set=[r];else if(this.set.length>1){for(let r of this.set)if(1===r.length&&$4577f00308fa375e$var$isAny(r[0])){this.set=[r];break}}}this.format()}format(){return this.range=this.set.map(r=>r.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(r){let i=(this.options.includePrerelease&&$4577f00308fa375e$require$FLAG_INCLUDE_PRERELEASE)|(this.options.loose&&$4577f00308fa375e$require$FLAG_LOOSE),n=i+":"+r,s=$4577f00308fa375e$var$cache.get(n);if(s)return s;let a=this.options.loose,o=a?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.HYPHENRANGELOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.HYPHENRANGE];$aW7Y5("hyphen replace",r=r.replace(o,$4577f00308fa375e$var$hyphenReplace(this.options.includePrerelease))),$aW7Y5("comparator trim",r=r.replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.COMPARATORTRIM],$4577f00308fa375e$require$comparatorTrimReplace)),$aW7Y5("tilde trim",r=r.replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.TILDETRIM],$4577f00308fa375e$require$tildeTrimReplace)),$aW7Y5("caret trim",r=r.replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.CARETTRIM],$4577f00308fa375e$require$caretTrimReplace));let d=r.split(" ").map(r=>$4577f00308fa375e$var$parseComparator(r,this.options)).join(" ").split(/\s+/).map(r=>$4577f00308fa375e$var$replaceGTE0(r,this.options));a&&(d=d.filter(r=>($aW7Y5("loose invalid filter",r,this.options),!!r.match($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.COMPARATORLOOSE])))),$aW7Y5("range list",d);let f=new Map,l=d.map(r=>new $811acfa69967f2ec$exports(r,this.options));for(let r of l){if($4577f00308fa375e$var$isNullSet(r))return[r];f.set(r.value,r)}f.size>1&&f.has("")&&f.delete("");let u=[...f.values()];return $4577f00308fa375e$var$cache.set(n,u),u}intersects(r,i){if(!(r instanceof $4577f00308fa375e$var$Range))throw TypeError("a Range is required");return this.set.some(n=>$4577f00308fa375e$var$isSatisfiable(n,i)&&r.set.some(r=>$4577f00308fa375e$var$isSatisfiable(r,i)&&n.every(n=>r.every(r=>n.intersects(r,i)))))}test(r){if(!r)return!1;if("string"==typeof r)try{r=new $5d67c366f11253ea$exports(r,this.options)}catch(r){return!1}for(let i=0;i0)for(var n=0,s=arguments.length;n1)n=i;else if(this.head)s=this.head.next,n=this.head.value;else throw TypeError("Reduce of empty list with no initial value");for(var a=0;null!==s;a++)n=r(n,s.value,a),s=s.next;return n},$cccfe4fb1cd75a09$var$Yallist.prototype.reduceReverse=function(r,i){var n,s=this.tail;if(arguments.length>1)n=i;else if(this.tail)s=this.tail.prev,n=this.tail.value;else throw TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;null!==s;a--)n=r(n,s.value,a),s=s.prev;return n},$cccfe4fb1cd75a09$var$Yallist.prototype.toArray=function(){for(var r=Array(this.length),i=0,n=this.head;null!==n;i++)r[i]=n.value,n=n.next;return r},$cccfe4fb1cd75a09$var$Yallist.prototype.toArrayReverse=function(){for(var r=Array(this.length),i=0,n=this.tail;null!==n;i++)r[i]=n.value,n=n.prev;return r},$cccfe4fb1cd75a09$var$Yallist.prototype.slice=function(r,i){(i=i||this.length)<0&&(i+=this.length),(r=r||0)<0&&(r+=this.length);var n=new $cccfe4fb1cd75a09$var$Yallist;if(ithis.length&&(i=this.length);for(var s=0,a=this.head;null!==a&&sthis.length&&(i=this.length);for(var s=this.length,a=this.tail;null!==a&&s>i;s--)a=a.prev;for(;null!==a&&s>r;s--,a=a.prev)n.push(a.value);return n},$cccfe4fb1cd75a09$var$Yallist.prototype.splice=function(r,i,...n){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var s=0,a=this.head;null!==a&&s1;class $563379c921497b8a$var$LRUCache{constructor(r){if("number"==typeof r&&(r={max:r}),r||(r={}),r.max&&("number"!=typeof r.max||r.max<0))throw TypeError("max must be a non-negative number");this[$563379c921497b8a$var$MAX]=r.max||1/0;let i=r.length||$563379c921497b8a$var$naiveLength;if(this[$563379c921497b8a$var$LENGTH_CALCULATOR]="function"!=typeof i?$563379c921497b8a$var$naiveLength:i,this[$563379c921497b8a$var$ALLOW_STALE]=r.stale||!1,r.maxAge&&"number"!=typeof r.maxAge)throw TypeError("maxAge must be a number");this[$563379c921497b8a$var$MAX_AGE]=r.maxAge||0,this[$563379c921497b8a$var$DISPOSE]=r.dispose,this[$563379c921497b8a$var$NO_DISPOSE_ON_SET]=r.noDisposeOnSet||!1,this[$563379c921497b8a$var$UPDATE_AGE_ON_GET]=r.updateAgeOnGet||!1,this.reset()}set max(r){if("number"!=typeof r||r<0)throw TypeError("max must be a non-negative number");this[$563379c921497b8a$var$MAX]=r||1/0,$563379c921497b8a$var$trim(this)}get max(){return this[$563379c921497b8a$var$MAX]}set allowStale(r){this[$563379c921497b8a$var$ALLOW_STALE]=!!r}get allowStale(){return this[$563379c921497b8a$var$ALLOW_STALE]}set maxAge(r){if("number"!=typeof r)throw TypeError("maxAge must be a non-negative number");this[$563379c921497b8a$var$MAX_AGE]=r,$563379c921497b8a$var$trim(this)}get maxAge(){return this[$563379c921497b8a$var$MAX_AGE]}set lengthCalculator(r){"function"!=typeof r&&(r=$563379c921497b8a$var$naiveLength),r!==this[$563379c921497b8a$var$LENGTH_CALCULATOR]&&(this[$563379c921497b8a$var$LENGTH_CALCULATOR]=r,this[$563379c921497b8a$var$LENGTH]=0,this[$563379c921497b8a$var$LRU_LIST].forEach(r=>{r.length=this[$563379c921497b8a$var$LENGTH_CALCULATOR](r.value,r.key),this[$563379c921497b8a$var$LENGTH]+=r.length})),$563379c921497b8a$var$trim(this)}get lengthCalculator(){return this[$563379c921497b8a$var$LENGTH_CALCULATOR]}get length(){return this[$563379c921497b8a$var$LENGTH]}get itemCount(){return this[$563379c921497b8a$var$LRU_LIST].length}rforEach(r,i){i=i||this;for(let n=this[$563379c921497b8a$var$LRU_LIST].tail;null!==n;){let s=n.prev;$563379c921497b8a$var$forEachStep(this,r,n,i),n=s}}forEach(r,i){i=i||this;for(let n=this[$563379c921497b8a$var$LRU_LIST].head;null!==n;){let s=n.next;$563379c921497b8a$var$forEachStep(this,r,n,i),n=s}}keys(){return this[$563379c921497b8a$var$LRU_LIST].toArray().map(r=>r.key)}values(){return this[$563379c921497b8a$var$LRU_LIST].toArray().map(r=>r.value)}reset(){this[$563379c921497b8a$var$DISPOSE]&&this[$563379c921497b8a$var$LRU_LIST]&&this[$563379c921497b8a$var$LRU_LIST].length&&this[$563379c921497b8a$var$LRU_LIST].forEach(r=>this[$563379c921497b8a$var$DISPOSE](r.key,r.value)),this[$563379c921497b8a$var$CACHE]=new Map,this[$563379c921497b8a$var$LRU_LIST]=new $cccfe4fb1cd75a09$exports,this[$563379c921497b8a$var$LENGTH]=0}dump(){return this[$563379c921497b8a$var$LRU_LIST].map(r=>!$563379c921497b8a$var$isStale(this,r)&&{k:r.key,v:r.value,e:r.now+(r.maxAge||0)}).toArray().filter(r=>r)}dumpLru(){return this[$563379c921497b8a$var$LRU_LIST]}set(r,i,n){if((n=n||this[$563379c921497b8a$var$MAX_AGE])&&"number"!=typeof n)throw TypeError("maxAge must be a number");let s=n?Date.now():0,a=this[$563379c921497b8a$var$LENGTH_CALCULATOR](i,r);if(this[$563379c921497b8a$var$CACHE].has(r)){if(a>this[$563379c921497b8a$var$MAX])return $563379c921497b8a$var$del(this,this[$563379c921497b8a$var$CACHE].get(r)),!1;let o=this[$563379c921497b8a$var$CACHE].get(r),d=o.value;return this[$563379c921497b8a$var$DISPOSE]&&!this[$563379c921497b8a$var$NO_DISPOSE_ON_SET]&&this[$563379c921497b8a$var$DISPOSE](r,d.value),d.now=s,d.maxAge=n,d.value=i,this[$563379c921497b8a$var$LENGTH]+=a-d.length,d.length=a,this.get(r),$563379c921497b8a$var$trim(this),!0}let o=new $563379c921497b8a$var$Entry(r,i,a,s,n);return o.length>this[$563379c921497b8a$var$MAX]?(this[$563379c921497b8a$var$DISPOSE]&&this[$563379c921497b8a$var$DISPOSE](r,i),!1):(this[$563379c921497b8a$var$LENGTH]+=o.length,this[$563379c921497b8a$var$LRU_LIST].unshift(o),this[$563379c921497b8a$var$CACHE].set(r,this[$563379c921497b8a$var$LRU_LIST].head),$563379c921497b8a$var$trim(this),!0)}has(r){if(!this[$563379c921497b8a$var$CACHE].has(r))return!1;let i=this[$563379c921497b8a$var$CACHE].get(r).value;return!$563379c921497b8a$var$isStale(this,i)}get(r){return $563379c921497b8a$var$get(this,r,!0)}peek(r){return $563379c921497b8a$var$get(this,r,!1)}pop(){let r=this[$563379c921497b8a$var$LRU_LIST].tail;return r?($563379c921497b8a$var$del(this,r),r.value):null}del(r){$563379c921497b8a$var$del(this,this[$563379c921497b8a$var$CACHE].get(r))}load(r){this.reset();let i=Date.now();for(let n=r.length-1;n>=0;n--){let s=r[n],a=s.e||0;if(0===a)this.set(s.k,s.v);else{let r=a-i;r>0&&this.set(s.k,s.v,r)}}}prune(){this[$563379c921497b8a$var$CACHE].forEach((r,i)=>$563379c921497b8a$var$get(this,i,!1))}}const $563379c921497b8a$var$get=(r,i,n)=>{let s=r[$563379c921497b8a$var$CACHE].get(i);if(s){let i=s.value;if($563379c921497b8a$var$isStale(r,i)){if($563379c921497b8a$var$del(r,s),!r[$563379c921497b8a$var$ALLOW_STALE])return}else n&&(r[$563379c921497b8a$var$UPDATE_AGE_ON_GET]&&(s.value.now=Date.now()),r[$563379c921497b8a$var$LRU_LIST].unshiftNode(s));return i.value}},$563379c921497b8a$var$isStale=(r,i)=>{if(!i||!i.maxAge&&!r[$563379c921497b8a$var$MAX_AGE])return!1;let n=Date.now()-i.now;return i.maxAge?n>i.maxAge:r[$563379c921497b8a$var$MAX_AGE]&&n>r[$563379c921497b8a$var$MAX_AGE]},$563379c921497b8a$var$trim=r=>{if(r[$563379c921497b8a$var$LENGTH]>r[$563379c921497b8a$var$MAX])for(let i=r[$563379c921497b8a$var$LRU_LIST].tail;r[$563379c921497b8a$var$LENGTH]>r[$563379c921497b8a$var$MAX]&&null!==i;){let n=i.prev;$563379c921497b8a$var$del(r,i),i=n}},$563379c921497b8a$var$del=(r,i)=>{if(i){let n=i.value;r[$563379c921497b8a$var$DISPOSE]&&r[$563379c921497b8a$var$DISPOSE](n.key,n.value),r[$563379c921497b8a$var$LENGTH]-=n.length,r[$563379c921497b8a$var$CACHE].delete(n.key),r[$563379c921497b8a$var$LRU_LIST].removeNode(i)}};class $563379c921497b8a$var$Entry{constructor(r,i,n,s,a){this.key=r,this.value=i,this.length=n,this.now=s,this.maxAge=a||0}}const $563379c921497b8a$var$forEachStep=(r,i,n,s)=>{let a=n.value;$563379c921497b8a$var$isStale(r,a)&&($563379c921497b8a$var$del(r,n),r[$563379c921497b8a$var$ALLOW_STALE]||(a=void 0)),a&&i.call(s,a.value,a.key,r)};$563379c921497b8a$exports=$563379c921497b8a$var$LRUCache;const $4577f00308fa375e$var$cache=new $563379c921497b8a$exports({max:1e3});var $aW7Y5=parcelRequire("aW7Y5"),$9kaCP=parcelRequire("9kaCP"),$4577f00308fa375e$require$re=$9kaCP.safeRe,$4577f00308fa375e$require$t=$9kaCP.t,$4577f00308fa375e$require$comparatorTrimReplace=$9kaCP.comparatorTrimReplace,$4577f00308fa375e$require$tildeTrimReplace=$9kaCP.tildeTrimReplace,$4577f00308fa375e$require$caretTrimReplace=$9kaCP.caretTrimReplace,$85PoE=parcelRequire("85PoE"),$4577f00308fa375e$require$FLAG_INCLUDE_PRERELEASE=$85PoE.FLAG_INCLUDE_PRERELEASE,$4577f00308fa375e$require$FLAG_LOOSE=$85PoE.FLAG_LOOSE;const $4577f00308fa375e$var$isNullSet=r=>"<0.0.0-0"===r.value,$4577f00308fa375e$var$isAny=r=>""===r.value,$4577f00308fa375e$var$isSatisfiable=(r,i)=>{let n=!0,s=r.slice(),a=s.pop();for(;n&&s.length;)n=s.every(r=>a.intersects(r,i)),a=s.pop();return n},$4577f00308fa375e$var$parseComparator=(r,i)=>($aW7Y5("comp",r,i),r=$4577f00308fa375e$var$replaceCarets(r,i),$aW7Y5("caret",r),r=$4577f00308fa375e$var$replaceTildes(r,i),$aW7Y5("tildes",r),r=$4577f00308fa375e$var$replaceXRanges(r,i),$aW7Y5("xrange",r),r=$4577f00308fa375e$var$replaceStars(r,i),$aW7Y5("stars",r),r),$4577f00308fa375e$var$isX=r=>!r||"x"===r.toLowerCase()||"*"===r,$4577f00308fa375e$var$replaceTildes=(r,i)=>r.trim().split(/\s+/).map(r=>$4577f00308fa375e$var$replaceTilde(r,i)).join(" "),$4577f00308fa375e$var$replaceTilde=(r,i)=>{let n=i.loose?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.TILDELOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.TILDE];return r.replace(n,(i,n,s,a,o)=>{let d;return $aW7Y5("tilde",r,i,n,s,a,o),$4577f00308fa375e$var$isX(n)?d="":$4577f00308fa375e$var$isX(s)?d=`>=${n}.0.0 <${+n+1}.0.0-0`:$4577f00308fa375e$var$isX(a)?d=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:o?($aW7Y5("replaceTilde pr",o),d=`>=${n}.${s}.${a}-${o} <${n}.${+s+1}.0-0`):d=`>=${n}.${s}.${a} <${n}.${+s+1}.0-0`,$aW7Y5("tilde return",d),d})},$4577f00308fa375e$var$replaceCarets=(r,i)=>r.trim().split(/\s+/).map(r=>$4577f00308fa375e$var$replaceCaret(r,i)).join(" "),$4577f00308fa375e$var$replaceCaret=(r,i)=>{$aW7Y5("caret",r,i);let n=i.loose?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.CARETLOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.CARET],s=i.includePrerelease?"-0":"";return r.replace(n,(i,n,a,o,d)=>{let f;return $aW7Y5("caret",r,i,n,a,o,d),$4577f00308fa375e$var$isX(n)?f="":$4577f00308fa375e$var$isX(a)?f=`>=${n}.0.0${s} <${+n+1}.0.0-0`:$4577f00308fa375e$var$isX(o)?f="0"===n?`>=${n}.${a}.0${s} <${n}.${+a+1}.0-0`:`>=${n}.${a}.0${s} <${+n+1}.0.0-0`:d?($aW7Y5("replaceCaret pr",d),f="0"===n?"0"===a?`>=${n}.${a}.${o}-${d} <${n}.${a}.${+o+1}-0`:`>=${n}.${a}.${o}-${d} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${o}-${d} <${+n+1}.0.0-0`):($aW7Y5("no pr"),f="0"===n?"0"===a?`>=${n}.${a}.${o}${s} <${n}.${a}.${+o+1}-0`:`>=${n}.${a}.${o}${s} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${o} <${+n+1}.0.0-0`),$aW7Y5("caret return",f),f})},$4577f00308fa375e$var$replaceXRanges=(r,i)=>($aW7Y5("replaceXRanges",r,i),r.split(/\s+/).map(r=>$4577f00308fa375e$var$replaceXRange(r,i)).join(" ")),$4577f00308fa375e$var$replaceXRange=(r,i)=>{r=r.trim();let n=i.loose?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.XRANGELOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.XRANGE];return r.replace(n,(n,s,a,o,d,f)=>{$aW7Y5("xRange",r,n,s,a,o,d,f);let l=$4577f00308fa375e$var$isX(a),u=l||$4577f00308fa375e$var$isX(o),c=u||$4577f00308fa375e$var$isX(d),p=c;return"="===s&&p&&(s=""),f=i.includePrerelease?"-0":"",l?n=">"===s||"<"===s?"<0.0.0-0":"*":s&&p?(u&&(o=0),d=0,">"===s?(s=">=",u?(a=+a+1,o=0):o=+o+1,d=0):"<="===s&&(s="<",u?a=+a+1:o=+o+1),"<"===s&&(f="-0"),n=`${s+a}.${o}.${d}${f}`):u?n=`>=${a}.0.0${f} <${+a+1}.0.0-0`:c&&(n=`>=${a}.${o}.0${f} <${a}.${+o+1}.0-0`),$aW7Y5("xRange return",n),n})},$4577f00308fa375e$var$replaceStars=(r,i)=>($aW7Y5("replaceStars",r,i),r.trim().replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.STAR],"")),$4577f00308fa375e$var$replaceGTE0=(r,i)=>($aW7Y5("replaceGTE0",r,i),r.trim().replace($4577f00308fa375e$require$re[i.includePrerelease?$4577f00308fa375e$require$t.GTE0PRE:$4577f00308fa375e$require$t.GTE0],"")),$4577f00308fa375e$var$hyphenReplace=r=>(i,n,s,a,o,d,f,l,u,c,p,h,g)=>(n=$4577f00308fa375e$var$isX(s)?"":$4577f00308fa375e$var$isX(a)?`>=${s}.0.0${r?"-0":""}`:$4577f00308fa375e$var$isX(o)?`>=${s}.${a}.0${r?"-0":""}`:d?`>=${n}`:`>=${n}${r?"-0":""}`,`${n} ${l=$4577f00308fa375e$var$isX(u)?"":$4577f00308fa375e$var$isX(c)?`<${+u+1}.0.0-0`:$4577f00308fa375e$var$isX(p)?`<${u}.${+c+1}.0-0`:h?`<=${u}.${c}.${p}-${h}`:r?`<${u}.${c}.${+p+1}-0`:`<=${l}`}`.trim()),$4577f00308fa375e$var$testSet=(r,i,n)=>{for(let n=0;n0){let s=r[n].semver;if(s.major===i.major&&s.minor===i.minor&&s.patch===i.patch)return!0}return!1}return!0};var $cb90bdc22f10fcf7$exports={};const $cb90bdc22f10fcf7$var$satisfies=(r,i,n)=>{try{i=new $4577f00308fa375e$exports(i,n)}catch(r){return!1}return i.test(r)};$cb90bdc22f10fcf7$exports=$cb90bdc22f10fcf7$var$satisfies;var $14d64aa0eb5c855b$exports={};const $14d64aa0eb5c855b$var$toComparators=(r,i)=>new $4577f00308fa375e$exports(r,i).set.map(r=>r.map(r=>r.value).join(" ").trim().split(" "));$14d64aa0eb5c855b$exports=$14d64aa0eb5c855b$var$toComparators;var $4c69ba97938a7bf5$exports={};const $4c69ba97938a7bf5$var$maxSatisfying=(r,i,n)=>{let s=null,a=null,o=null;try{o=new $4577f00308fa375e$exports(i,n)}catch(r){return null}return r.forEach(r=>{o.test(r)&&(!s||-1===a.compare(r))&&(s=r,a=new $5d67c366f11253ea$exports(s,n))}),s};$4c69ba97938a7bf5$exports=$4c69ba97938a7bf5$var$maxSatisfying;var $cffd1991a3ccb43c$exports={};const $cffd1991a3ccb43c$var$minSatisfying=(r,i,n)=>{let s=null,a=null,o=null;try{o=new $4577f00308fa375e$exports(i,n)}catch(r){return null}return r.forEach(r=>{o.test(r)&&(!s||1===a.compare(r))&&(s=r,a=new $5d67c366f11253ea$exports(s,n))}),s};$cffd1991a3ccb43c$exports=$cffd1991a3ccb43c$var$minSatisfying;var $764705632cd4f711$exports={};const $764705632cd4f711$var$minVersion=(r,i)=>{r=new $4577f00308fa375e$exports(r,i);let n=new $5d67c366f11253ea$exports("0.0.0");if(r.test(n)||(n=new $5d67c366f11253ea$exports("0.0.0-0"),r.test(n)))return n;n=null;for(let i=0;i{let i=new $5d67c366f11253ea$exports(r.semver.version);switch(r.operator){case">":0===i.prerelease.length?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!a||$0716672aeeeb00b7$exports(i,a))&&(a=i);break;case"<":case"<=":break;default:throw Error(`Unexpected operation: ${r.operator}`)}}),a&&(!n||$0716672aeeeb00b7$exports(n,a))&&(n=a)}return n&&r.test(n)?n:null};$764705632cd4f711$exports=$764705632cd4f711$var$minVersion;var $c0f0cafd6c67ed17$exports={};const $c0f0cafd6c67ed17$var$validRange=(r,i)=>{try{return new $4577f00308fa375e$exports(r,i).range||"*"}catch(r){return null}};$c0f0cafd6c67ed17$exports=$c0f0cafd6c67ed17$var$validRange;var $0aacc91285ca0f4e$exports={};const{ANY:$0aacc91285ca0f4e$var$ANY}=$811acfa69967f2ec$exports,$0aacc91285ca0f4e$var$outside=(r,i,n,s)=>{let a,o,d,f,l;switch(r=new $5d67c366f11253ea$exports(r,s),i=new $4577f00308fa375e$exports(i,s),n){case">":a=$0716672aeeeb00b7$exports,o=$278c58909ad7ced2$exports,d=$6bef60a1f9ea49cc$exports,f=">",l=">=";break;case"<":a=$6bef60a1f9ea49cc$exports,o=$2b877d0256c5541e$exports,d=$0716672aeeeb00b7$exports,f="<",l="<=";break;default:throw TypeError('Must provide a hilo val of "<" or ">"')}if($cb90bdc22f10fcf7$exports(r,i,s))return!1;for(let n=0;n{r.semver===$0aacc91285ca0f4e$var$ANY&&(r=new $811acfa69967f2ec$exports(">=0.0.0")),c=c||r,p=p||r,a(r.semver,c.semver,s)?c=r:d(r.semver,p.semver,s)&&(p=r)}),c.operator===f||c.operator===l||(!p.operator||p.operator===f)&&o(r,p.semver)||p.operator===l&&d(r,p.semver))return!1}return!0};$0aacc91285ca0f4e$exports=$0aacc91285ca0f4e$var$outside;var $b648a67118de5a94$exports={};const $b648a67118de5a94$var$gtr=(r,i,n)=>$0aacc91285ca0f4e$exports(r,i,">",n);$b648a67118de5a94$exports=$b648a67118de5a94$var$gtr;var $076a97b4fe0d43db$exports={};const $076a97b4fe0d43db$var$ltr=(r,i,n)=>$0aacc91285ca0f4e$exports(r,i,"<",n);$076a97b4fe0d43db$exports=$076a97b4fe0d43db$var$ltr;var $c7c26e7fe125b318$exports={};const $c7c26e7fe125b318$var$intersects=(r,i,n)=>(r=new $4577f00308fa375e$exports(r,n),i=new $4577f00308fa375e$exports(i,n),r.intersects(i,n));$c7c26e7fe125b318$exports=$c7c26e7fe125b318$var$intersects;var $4ae56996e8e4ebeb$exports={};$4ae56996e8e4ebeb$exports=(r,i,n)=>{let s=[],a=null,o=null,d=r.sort((r,i)=>$be8c6448e7d4b283$exports(r,i,n));for(let r of d){let d=$cb90bdc22f10fcf7$exports(r,i,n);d?(o=r,a||(a=r)):(o&&s.push([a,o]),o=null,a=null)}a&&s.push([a,null]);let f=[];for(let[r,i]of s)r===i?f.push(r):i||r!==d[0]?i?r===d[0]?f.push(`<=${i}`):f.push(`${r} - ${i}`):f.push(`>=${r}`):f.push("*");let l=f.join(" || "),u="string"==typeof i.raw?i.raw:String(i);return l.length{if(r===i)return!0;r=new $4577f00308fa375e$exports(r,n),i=new $4577f00308fa375e$exports(i,n);let s=!1;t:for(let a of r.set){for(let r of i.set){let i=$87ec2da5a4aa08b0$var$simpleSubset(a,r,n);if(s=s||null!==i,i)continue t}if(s)return!1}return!0},$87ec2da5a4aa08b0$var$minimumVersionWithPreRelease=[new $811acfa69967f2ec$exports(">=0.0.0-0")],$87ec2da5a4aa08b0$var$minimumVersion=[new $811acfa69967f2ec$exports(">=0.0.0")],$87ec2da5a4aa08b0$var$simpleSubset=(r,i,n)=>{let s,a,o,d,f,l,u;if(r===i)return!0;if(1===r.length&&r[0].semver===$87ec2da5a4aa08b0$var$ANY){if(1===i.length&&i[0].semver===$87ec2da5a4aa08b0$var$ANY)return!0;r=n.includePrerelease?$87ec2da5a4aa08b0$var$minimumVersionWithPreRelease:$87ec2da5a4aa08b0$var$minimumVersion}if(1===i.length&&i[0].semver===$87ec2da5a4aa08b0$var$ANY){if(n.includePrerelease)return!0;i=$87ec2da5a4aa08b0$var$minimumVersion}let c=new Set;for(let i of r)">"===i.operator||">="===i.operator?s=$87ec2da5a4aa08b0$var$higherGT(s,i,n):"<"===i.operator||"<="===i.operator?a=$87ec2da5a4aa08b0$var$lowerLT(a,i,n):c.add(i.semver);if(c.size>1||s&&a&&((o=$be8c6448e7d4b283$exports(s.semver,a.semver,n))>0||0===o&&(">="!==s.operator||"<="!==a.operator)))return null;for(let r of c){if(s&&!$cb90bdc22f10fcf7$exports(r,String(s),n)||a&&!$cb90bdc22f10fcf7$exports(r,String(a),n))return null;for(let s of i)if(!$cb90bdc22f10fcf7$exports(r,String(s),n))return!1;return!0}let p=!!a&&!n.includePrerelease&&!!a.semver.prerelease.length&&a.semver,h=!!s&&!n.includePrerelease&&!!s.semver.prerelease.length&&s.semver;for(let r of(p&&1===p.prerelease.length&&"<"===a.operator&&0===p.prerelease[0]&&(p=!1),i)){if(u=u||">"===r.operator||">="===r.operator,l=l||"<"===r.operator||"<="===r.operator,s){if(h&&r.semver.prerelease&&r.semver.prerelease.length&&r.semver.major===h.major&&r.semver.minor===h.minor&&r.semver.patch===h.patch&&(h=!1),">"===r.operator||">="===r.operator){if((d=$87ec2da5a4aa08b0$var$higherGT(s,r,n))===r&&d!==s)return!1}else if(">="===s.operator&&!$cb90bdc22f10fcf7$exports(s.semver,String(r),n))return!1}if(a){if(p&&r.semver.prerelease&&r.semver.prerelease.length&&r.semver.major===p.major&&r.semver.minor===p.minor&&r.semver.patch===p.patch&&(p=!1),"<"===r.operator||"<="===r.operator){if((f=$87ec2da5a4aa08b0$var$lowerLT(a,r,n))===r&&f!==a)return!1}else if("<="===a.operator&&!$cb90bdc22f10fcf7$exports(a.semver,String(r),n))return!1}if(!r.operator&&(a||s)&&0!==o)return!1}return(!s||!l||!!a||0===o)&&(!a||!u||!!s||0===o)&&!h&&!p},$87ec2da5a4aa08b0$var$higherGT=(r,i,n)=>{if(!r)return i;let s=$be8c6448e7d4b283$exports(r.semver,i.semver,n);return s>0?r:s<0?i:">"===i.operator&&">="===r.operator?i:r},$87ec2da5a4aa08b0$var$lowerLT=(r,i,n)=>{if(!r)return i;let s=$be8c6448e7d4b283$exports(r.semver,i.semver,n);return s<0?r:s>0?i:"<"===i.operator&&"<="===r.operator?i:r};$87ec2da5a4aa08b0$exports=$87ec2da5a4aa08b0$var$subset,$f3bb2747c7b09053$exports={parse:$2365cabe1405e41d$exports,valid:$db1a24152bcbff38$exports,clean:$5ab1ebf1c7653375$exports,inc:$410676b06cd48254$exports,diff:$1fa0b4a78a9c3100$exports,major:$d9e91b148724d7ba$exports,minor:$88beef4f36bb99dc$exports,patch:$fbc38baee3ec52af$exports,prerelease:$ec64f7ad8d61d626$exports,compare:$be8c6448e7d4b283$exports,rcompare:$d53fa55eda60e3c4$exports,compareLoose:$8c9639966becf13f$exports,compareBuild:$9c3f14a67e2b7b05$exports,sort:$10e9ef24aa7dc37d$exports,rsort:$c310560cb4f36b70$exports,gt:$0716672aeeeb00b7$exports,lt:$6bef60a1f9ea49cc$exports,eq:$9a774071cdb8a22b$exports,neq:$d1d9bbe2c9634018$exports,gte:$2b877d0256c5541e$exports,lte:$278c58909ad7ced2$exports,cmp:$e52ecc8579498688$exports,coerce:$5d8cdd4724630ca5$exports,Comparator:$811acfa69967f2ec$exports,Range:$4577f00308fa375e$exports,satisfies:$cb90bdc22f10fcf7$exports,toComparators:$14d64aa0eb5c855b$exports,maxSatisfying:$4c69ba97938a7bf5$exports,minSatisfying:$cffd1991a3ccb43c$exports,minVersion:$764705632cd4f711$exports,validRange:$c0f0cafd6c67ed17$exports,outside:$0aacc91285ca0f4e$exports,gtr:$b648a67118de5a94$exports,ltr:$076a97b4fe0d43db$exports,intersects:$c7c26e7fe125b318$exports,simplifyRange:$4ae56996e8e4ebeb$exports,subset:$87ec2da5a4aa08b0$exports,SemVer:$5d67c366f11253ea$exports,re:$9kaCP.re,src:$9kaCP.src,tokens:$9kaCP.t,SEMVER_SPEC_VERSION:$85PoE.SEMVER_SPEC_VERSION,RELEASE_TYPES:$85PoE.RELEASE_TYPES,compareIdentifiers:$2dfbf56026e52c8c$exports.compareIdentifiers,rcompareIdentifiers:$2dfbf56026e52c8c$exports.rcompareIdentifiers};var $3FhS8=parcelRequire("3FhS8"),$4ce02f68f14348c9$exports={};function $7da4ba9e886ae2f3$export$2e2bcd8739ae039(r,i){return function(){return r.apply(i,arguments)}}$parcel$defineInteropFlag($4ce02f68f14348c9$exports),$parcel$export($4ce02f68f14348c9$exports,"Axios",()=>$4ce02f68f14348c9$export$1c00760e9e5a4e95),$parcel$export($4ce02f68f14348c9$exports,"AxiosError",()=>$4ce02f68f14348c9$export$c1fbed17c2f6a328),$parcel$export($4ce02f68f14348c9$exports,"CanceledError",()=>$4ce02f68f14348c9$export$1ab0c6b20d94fa14),$parcel$export($4ce02f68f14348c9$exports,"isCancel",()=>$4ce02f68f14348c9$export$3b22524397b493c6),$parcel$export($4ce02f68f14348c9$exports,"CancelToken",()=>$4ce02f68f14348c9$export$fd08e3cb425f0d61),$parcel$export($4ce02f68f14348c9$exports,"VERSION",()=>$4ce02f68f14348c9$export$a4ad2735b021c132),$parcel$export($4ce02f68f14348c9$exports,"all",()=>$4ce02f68f14348c9$export$84bf76cd7afc7469),$parcel$export($4ce02f68f14348c9$exports,"Cancel",()=>$4ce02f68f14348c9$export$848c9b7ead0df967),$parcel$export($4ce02f68f14348c9$exports,"isAxiosError",()=>$4ce02f68f14348c9$export$fbafdbe06a5b5a9a),$parcel$export($4ce02f68f14348c9$exports,"spread",()=>$4ce02f68f14348c9$export$3ae0fd4797ed47c8),$parcel$export($4ce02f68f14348c9$exports,"toFormData",()=>$4ce02f68f14348c9$export$10ae0d317ea97f8b),$parcel$export($4ce02f68f14348c9$exports,"AxiosHeaders",()=>$4ce02f68f14348c9$export$4e7d6ff0f3e6520),$parcel$export($4ce02f68f14348c9$exports,"HttpStatusCode",()=>$4ce02f68f14348c9$export$a972f69c851492b3),$parcel$export($4ce02f68f14348c9$exports,"formToJSON",()=>$4ce02f68f14348c9$export$86d7c59254d6a2c9),$parcel$export($4ce02f68f14348c9$exports,"getAdapter",()=>$4ce02f68f14348c9$export$17ddc20a97d669e2),$parcel$export($4ce02f68f14348c9$exports,"mergeConfig",()=>$4ce02f68f14348c9$export$7ec1ebcfa9d8bd6a),$parcel$export($4ce02f68f14348c9$exports,"default",()=>$34471abae050a418$export$2e2bcd8739ae039);var $9Mq5w=parcelRequire("9Mq5w");const{toString:$fb599b4a944ac204$var$toString}=Object.prototype,{getPrototypeOf:$fb599b4a944ac204$var$getPrototypeOf}=Object,{iterator:$fb599b4a944ac204$var$iterator,toStringTag:$fb599b4a944ac204$var$toStringTag}=Symbol,$fb599b4a944ac204$var$kindOf=(r=Object.create(null),r=>{let i=$fb599b4a944ac204$var$toString.call(r);return r[i]||(r[i]=i.slice(8,-1).toLowerCase())}),$fb599b4a944ac204$var$kindOfTest=r=>(r=r.toLowerCase(),i=>$fb599b4a944ac204$var$kindOf(i)===r),$fb599b4a944ac204$var$typeOfTest=r=>i=>typeof i===r,{isArray:$fb599b4a944ac204$var$isArray}=Array,$fb599b4a944ac204$var$isUndefined=$fb599b4a944ac204$var$typeOfTest("undefined");function $fb599b4a944ac204$var$isBuffer(r){return null!==r&&!$fb599b4a944ac204$var$isUndefined(r)&&null!==r.constructor&&!$fb599b4a944ac204$var$isUndefined(r.constructor)&&$fb599b4a944ac204$var$isFunction(r.constructor.isBuffer)&&r.constructor.isBuffer(r)}const $fb599b4a944ac204$var$isArrayBuffer=$fb599b4a944ac204$var$kindOfTest("ArrayBuffer");function $fb599b4a944ac204$var$isArrayBufferView(r){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(r):r&&r.buffer&&$fb599b4a944ac204$var$isArrayBuffer(r.buffer)}const $fb599b4a944ac204$var$isString=$fb599b4a944ac204$var$typeOfTest("string"),$fb599b4a944ac204$var$isFunction=$fb599b4a944ac204$var$typeOfTest("function"),$fb599b4a944ac204$var$isNumber=$fb599b4a944ac204$var$typeOfTest("number"),$fb599b4a944ac204$var$isObject=r=>null!==r&&"object"==typeof r,$fb599b4a944ac204$var$isBoolean=r=>!0===r||!1===r,$fb599b4a944ac204$var$isPlainObject=r=>{if("object"!==$fb599b4a944ac204$var$kindOf(r))return!1;let i=$fb599b4a944ac204$var$getPrototypeOf(r);return(null===i||i===Object.prototype||null===Object.getPrototypeOf(i))&&!($fb599b4a944ac204$var$toStringTag in r)&&!($fb599b4a944ac204$var$iterator in r)},$fb599b4a944ac204$var$isEmptyObject=r=>{if(!$fb599b4a944ac204$var$isObject(r)||$fb599b4a944ac204$var$isBuffer(r))return!1;try{return 0===Object.keys(r).length&&Object.getPrototypeOf(r)===Object.prototype}catch(r){return!1}},$fb599b4a944ac204$var$isDate=$fb599b4a944ac204$var$kindOfTest("Date"),$fb599b4a944ac204$var$isFile=$fb599b4a944ac204$var$kindOfTest("File"),$fb599b4a944ac204$var$isReactNativeBlob=r=>!!(r&&void 0!==r.uri),$fb599b4a944ac204$var$isReactNative=r=>r&&void 0!==r.getParts,$fb599b4a944ac204$var$isBlob=$fb599b4a944ac204$var$kindOfTest("Blob"),$fb599b4a944ac204$var$isFileList=$fb599b4a944ac204$var$kindOfTest("FileList"),$fb599b4a944ac204$var$isStream=r=>$fb599b4a944ac204$var$isObject(r)&&$fb599b4a944ac204$var$isFunction(r.pipe);function $fb599b4a944ac204$var$getGlobal(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==$parcel$global?$parcel$global:{}}const $fb599b4a944ac204$var$G=$fb599b4a944ac204$var$getGlobal(),$fb599b4a944ac204$var$FormDataCtor=void 0!==$fb599b4a944ac204$var$G.FormData?$fb599b4a944ac204$var$G.FormData:void 0,$fb599b4a944ac204$var$isFormData=r=>{let i;return r&&($fb599b4a944ac204$var$FormDataCtor&&r instanceof $fb599b4a944ac204$var$FormDataCtor||$fb599b4a944ac204$var$isFunction(r.append)&&("formdata"===(i=$fb599b4a944ac204$var$kindOf(r))||"object"===i&&$fb599b4a944ac204$var$isFunction(r.toString)&&"[object FormData]"===r.toString()))},$fb599b4a944ac204$var$isURLSearchParams=$fb599b4a944ac204$var$kindOfTest("URLSearchParams"),[$fb599b4a944ac204$var$isReadableStream,$fb599b4a944ac204$var$isRequest,$fb599b4a944ac204$var$isResponse,$fb599b4a944ac204$var$isHeaders]=["ReadableStream","Request","Response","Headers"].map($fb599b4a944ac204$var$kindOfTest),$fb599b4a944ac204$var$trim=r=>r.trim?r.trim():r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function $fb599b4a944ac204$var$forEach(r,i,{allOwnKeys:n=!1}={}){let s,a;if(null!=r){if("object"!=typeof r&&(r=[r]),$fb599b4a944ac204$var$isArray(r))for(s=0,a=r.length;s0;)if(i===(n=s[a]).toLowerCase())return n;return null}const $fb599b4a944ac204$var$_global="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:$parcel$global,$fb599b4a944ac204$var$isContextDefined=r=>!$fb599b4a944ac204$var$isUndefined(r)&&r!==$fb599b4a944ac204$var$_global;function $fb599b4a944ac204$var$merge(){let{caseless:r,skipUndefined:i}=$fb599b4a944ac204$var$isContextDefined(this)&&this||{},n={},s=(s,a)=>{if("__proto__"===a||"constructor"===a||"prototype"===a)return;let o=r&&$fb599b4a944ac204$var$findKey(n,a)||a;$fb599b4a944ac204$var$isPlainObject(n[o])&&$fb599b4a944ac204$var$isPlainObject(s)?n[o]=$fb599b4a944ac204$var$merge(n[o],s):$fb599b4a944ac204$var$isPlainObject(s)?n[o]=$fb599b4a944ac204$var$merge({},s):$fb599b4a944ac204$var$isArray(s)?n[o]=s.slice():i&&$fb599b4a944ac204$var$isUndefined(s)||(n[o]=s)};for(let r=0,i=arguments.length;r($fb599b4a944ac204$var$forEach(i,(i,s)=>{n&&$fb599b4a944ac204$var$isFunction(i)?Object.defineProperty(r,s,{value:$7da4ba9e886ae2f3$export$2e2bcd8739ae039(i,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(r,s,{value:i,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),r),$fb599b4a944ac204$var$stripBOM=r=>(65279===r.charCodeAt(0)&&(r=r.slice(1)),r),$fb599b4a944ac204$var$inherits=(r,i,n,s)=>{r.prototype=Object.create(i.prototype,s),Object.defineProperty(r.prototype,"constructor",{value:r,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(r,"super",{value:i.prototype}),n&&Object.assign(r.prototype,n)},$fb599b4a944ac204$var$toFlatObject=(r,i,n,s)=>{let a,o,d;let f={};if(i=i||{},null==r)return i;do{for(o=(a=Object.getOwnPropertyNames(r)).length;o-- >0;)d=a[o],(!s||s(d,r,i))&&!f[d]&&(i[d]=r[d],f[d]=!0);r=!1!==n&&$fb599b4a944ac204$var$getPrototypeOf(r)}while(r&&(!n||n(r,i))&&r!==Object.prototype)return i},$fb599b4a944ac204$var$endsWith=(r,i,n)=>{r=String(r),(void 0===n||n>r.length)&&(n=r.length),n-=i.length;let s=r.indexOf(i,n);return -1!==s&&s===n},$fb599b4a944ac204$var$toArray=r=>{if(!r)return null;if($fb599b4a944ac204$var$isArray(r))return r;let i=r.length;if(!$fb599b4a944ac204$var$isNumber(i))return null;let n=Array(i);for(;i-- >0;)n[i]=r[i];return n},$fb599b4a944ac204$var$isTypedArray=(i="undefined"!=typeof Uint8Array&&$fb599b4a944ac204$var$getPrototypeOf(Uint8Array),r=>i&&r instanceof i),$fb599b4a944ac204$var$forEachEntry=(r,i)=>{let n;let s=r&&r[$fb599b4a944ac204$var$iterator],a=s.call(r);for(;(n=a.next())&&!n.done;){let s=n.value;i.call(r,s[0],s[1])}},$fb599b4a944ac204$var$matchAll=(r,i)=>{let n;let s=[];for(;null!==(n=r.exec(i));)s.push(n);return s},$fb599b4a944ac204$var$isHTMLForm=$fb599b4a944ac204$var$kindOfTest("HTMLFormElement"),$fb599b4a944ac204$var$toCamelCase=r=>r.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,i,n){return i.toUpperCase()+n}),$fb599b4a944ac204$var$hasOwnProperty=(({hasOwnProperty:r})=>(i,n)=>r.call(i,n))(Object.prototype),$fb599b4a944ac204$var$isRegExp=$fb599b4a944ac204$var$kindOfTest("RegExp"),$fb599b4a944ac204$var$reduceDescriptors=(r,i)=>{let n=Object.getOwnPropertyDescriptors(r),s={};$fb599b4a944ac204$var$forEach(n,(n,a)=>{let o;!1!==(o=i(n,a,r))&&(s[a]=o||n)}),Object.defineProperties(r,s)},$fb599b4a944ac204$var$freezeMethods=r=>{$fb599b4a944ac204$var$reduceDescriptors(r,(i,n)=>{if($fb599b4a944ac204$var$isFunction(r)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;let s=r[n];if($fb599b4a944ac204$var$isFunction(s)){if(i.enumerable=!1,"writable"in i){i.writable=!1;return}i.set||(i.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},$fb599b4a944ac204$var$toObjectSet=(r,i)=>{let n={},s=r=>{r.forEach(r=>{n[r]=!0})};return s($fb599b4a944ac204$var$isArray(r)?r:String(r).split(i)),n},$fb599b4a944ac204$var$noop=()=>{},$fb599b4a944ac204$var$toFiniteNumber=(r,i)=>null!=r&&Number.isFinite(r=+r)?r:i;function $fb599b4a944ac204$var$isSpecCompliantForm(r){return!!(r&&$fb599b4a944ac204$var$isFunction(r.append)&&"FormData"===r[$fb599b4a944ac204$var$toStringTag]&&r[$fb599b4a944ac204$var$iterator])}const $fb599b4a944ac204$var$toJSONObject=r=>{let i=Array(10),n=(r,s)=>{if($fb599b4a944ac204$var$isObject(r)){if(i.indexOf(r)>=0)return;if($fb599b4a944ac204$var$isBuffer(r))return r;if(!("toJSON"in r)){i[s]=r;let a=$fb599b4a944ac204$var$isArray(r)?[]:{};return $fb599b4a944ac204$var$forEach(r,(r,i)=>{let o=n(r,s+1);$fb599b4a944ac204$var$isUndefined(o)||(a[i]=o)}),i[s]=void 0,a}}return r};return n(r,0)},$fb599b4a944ac204$var$isAsyncFn=$fb599b4a944ac204$var$kindOfTest("AsyncFunction"),$fb599b4a944ac204$var$isThenable=r=>r&&($fb599b4a944ac204$var$isObject(r)||$fb599b4a944ac204$var$isFunction(r))&&$fb599b4a944ac204$var$isFunction(r.then)&&$fb599b4a944ac204$var$isFunction(r.catch),$fb599b4a944ac204$var$_setImmediate=((r,i)=>{var n,s;return r?setImmediate:i?(n=`axios@${Math.random()}`,s=[],$fb599b4a944ac204$var$_global.addEventListener("message",({source:r,data:i})=>{r===$fb599b4a944ac204$var$_global&&i===n&&s.length&&s.shift()()},!1),r=>{s.push(r),$fb599b4a944ac204$var$_global.postMessage(n,"*")}):r=>setTimeout(r)})("function"==typeof setImmediate,$fb599b4a944ac204$var$isFunction($fb599b4a944ac204$var$_global.postMessage)),$fb599b4a944ac204$var$asap="undefined"!=typeof queueMicrotask?queueMicrotask.bind($fb599b4a944ac204$var$_global):void 0!==$9Mq5w&&$9Mq5w.nextTick||$fb599b4a944ac204$var$_setImmediate,$fb599b4a944ac204$var$isIterable=r=>null!=r&&$fb599b4a944ac204$var$isFunction(r[$fb599b4a944ac204$var$iterator]);var $fb599b4a944ac204$export$2e2bcd8739ae039={isArray:$fb599b4a944ac204$var$isArray,isArrayBuffer:$fb599b4a944ac204$var$isArrayBuffer,isBuffer:$fb599b4a944ac204$var$isBuffer,isFormData:$fb599b4a944ac204$var$isFormData,isArrayBufferView:$fb599b4a944ac204$var$isArrayBufferView,isString:$fb599b4a944ac204$var$isString,isNumber:$fb599b4a944ac204$var$isNumber,isBoolean:$fb599b4a944ac204$var$isBoolean,isObject:$fb599b4a944ac204$var$isObject,isPlainObject:$fb599b4a944ac204$var$isPlainObject,isEmptyObject:$fb599b4a944ac204$var$isEmptyObject,isReadableStream:$fb599b4a944ac204$var$isReadableStream,isRequest:$fb599b4a944ac204$var$isRequest,isResponse:$fb599b4a944ac204$var$isResponse,isHeaders:$fb599b4a944ac204$var$isHeaders,isUndefined:$fb599b4a944ac204$var$isUndefined,isDate:$fb599b4a944ac204$var$isDate,isFile:$fb599b4a944ac204$var$isFile,isReactNativeBlob:$fb599b4a944ac204$var$isReactNativeBlob,isReactNative:$fb599b4a944ac204$var$isReactNative,isBlob:$fb599b4a944ac204$var$isBlob,isRegExp:$fb599b4a944ac204$var$isRegExp,isFunction:$fb599b4a944ac204$var$isFunction,isStream:$fb599b4a944ac204$var$isStream,isURLSearchParams:$fb599b4a944ac204$var$isURLSearchParams,isTypedArray:$fb599b4a944ac204$var$isTypedArray,isFileList:$fb599b4a944ac204$var$isFileList,forEach:$fb599b4a944ac204$var$forEach,merge:$fb599b4a944ac204$var$merge,extend:$fb599b4a944ac204$var$extend,trim:$fb599b4a944ac204$var$trim,stripBOM:$fb599b4a944ac204$var$stripBOM,inherits:$fb599b4a944ac204$var$inherits,toFlatObject:$fb599b4a944ac204$var$toFlatObject,kindOf:$fb599b4a944ac204$var$kindOf,kindOfTest:$fb599b4a944ac204$var$kindOfTest,endsWith:$fb599b4a944ac204$var$endsWith,toArray:$fb599b4a944ac204$var$toArray,forEachEntry:$fb599b4a944ac204$var$forEachEntry,matchAll:$fb599b4a944ac204$var$matchAll,isHTMLForm:$fb599b4a944ac204$var$isHTMLForm,hasOwnProperty:$fb599b4a944ac204$var$hasOwnProperty,hasOwnProp:$fb599b4a944ac204$var$hasOwnProperty,reduceDescriptors:$fb599b4a944ac204$var$reduceDescriptors,freezeMethods:$fb599b4a944ac204$var$freezeMethods,toObjectSet:$fb599b4a944ac204$var$toObjectSet,toCamelCase:$fb599b4a944ac204$var$toCamelCase,noop:$fb599b4a944ac204$var$noop,toFiniteNumber:$fb599b4a944ac204$var$toFiniteNumber,findKey:$fb599b4a944ac204$var$findKey,global:$fb599b4a944ac204$var$_global,isContextDefined:$fb599b4a944ac204$var$isContextDefined,isSpecCompliantForm:$fb599b4a944ac204$var$isSpecCompliantForm,toJSONObject:$fb599b4a944ac204$var$toJSONObject,isAsyncFn:$fb599b4a944ac204$var$isAsyncFn,isThenable:$fb599b4a944ac204$var$isThenable,setImmediate:$fb599b4a944ac204$var$_setImmediate,asap:$fb599b4a944ac204$var$asap,isIterable:$fb599b4a944ac204$var$isIterable};class $76f2b00474519cdb$var$AxiosError extends Error{static from(r,i,n,s,a,o){let d=new $76f2b00474519cdb$var$AxiosError(r.message,i||r.code,n,s,a);return d.cause=r,d.name=r.name,null!=r.status&&null==d.status&&(d.status=r.status),o&&Object.assign(d,o),d}constructor(r,i,n,s,a){super(r),Object.defineProperty(this,"message",{value:r,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,i&&(this.code=i),n&&(this.config=n),s&&(this.request=s),a&&(this.response=a,this.status=a.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:$fb599b4a944ac204$export$2e2bcd8739ae039.toJSONObject(this.config),code:this.code,status:this.status}}}$76f2b00474519cdb$var$AxiosError.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",$76f2b00474519cdb$var$AxiosError.ERR_BAD_OPTION="ERR_BAD_OPTION",$76f2b00474519cdb$var$AxiosError.ECONNABORTED="ECONNABORTED",$76f2b00474519cdb$var$AxiosError.ETIMEDOUT="ETIMEDOUT",$76f2b00474519cdb$var$AxiosError.ERR_NETWORK="ERR_NETWORK",$76f2b00474519cdb$var$AxiosError.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",$76f2b00474519cdb$var$AxiosError.ERR_DEPRECATED="ERR_DEPRECATED",$76f2b00474519cdb$var$AxiosError.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",$76f2b00474519cdb$var$AxiosError.ERR_BAD_REQUEST="ERR_BAD_REQUEST",$76f2b00474519cdb$var$AxiosError.ERR_CANCELED="ERR_CANCELED",$76f2b00474519cdb$var$AxiosError.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",$76f2b00474519cdb$var$AxiosError.ERR_INVALID_URL="ERR_INVALID_URL";var $76f2b00474519cdb$export$2e2bcd8739ae039=$76f2b00474519cdb$var$AxiosError,$ddd5bc0d8b7abeaf$export$2e2bcd8739ae039=null,$awmEs=parcelRequire("awmEs"),$2252ac2b38ec6071$require$Buffer=$awmEs.Buffer;function $2252ac2b38ec6071$var$isVisitable(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)}function $2252ac2b38ec6071$var$removeBrackets(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.endsWith(r,"[]")?r.slice(0,-2):r}function $2252ac2b38ec6071$var$renderKey(r,i,n){return r?r.concat(i).map(function(r,i){return r=$2252ac2b38ec6071$var$removeBrackets(r),!n&&i?"["+r+"]":r}).join(n?".":""):i}function $2252ac2b38ec6071$var$isFlatArray(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)&&!r.some($2252ac2b38ec6071$var$isVisitable)}const $2252ac2b38ec6071$var$predicates=$fb599b4a944ac204$export$2e2bcd8739ae039.toFlatObject($fb599b4a944ac204$export$2e2bcd8739ae039,{},null,function(r){return/^is[A-Z]/.test(r)});function $2252ac2b38ec6071$var$toFormData(r,i,n){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r))throw TypeError("target must be an object");i=i||new($ddd5bc0d8b7abeaf$export$2e2bcd8739ae039||FormData),n=$fb599b4a944ac204$export$2e2bcd8739ae039.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(r,i){return!$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i[r])});let s=n.metaTokens,a=n.visitor||c,o=n.dots,d=n.indexes,f=n.Blob||"undefined"!=typeof Blob&&Blob,l=f&&$fb599b4a944ac204$export$2e2bcd8739ae039.isSpecCompliantForm(i);if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(a))throw TypeError("visitor must be a function");function u(r){if(null===r)return"";if($fb599b4a944ac204$export$2e2bcd8739ae039.isDate(r))return r.toISOString();if($fb599b4a944ac204$export$2e2bcd8739ae039.isBoolean(r))return r.toString();if(!l&&$fb599b4a944ac204$export$2e2bcd8739ae039.isBlob(r))throw new $76f2b00474519cdb$export$2e2bcd8739ae039("Blob is not supported. Use a Buffer instead.");return $fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBuffer(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isTypedArray(r)?l&&"function"==typeof Blob?new Blob([r]):$2252ac2b38ec6071$require$Buffer.from(r):r}function c(r,n,a){let f=r;if($fb599b4a944ac204$export$2e2bcd8739ae039.isReactNative(i)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isReactNativeBlob(r))return i.append($2252ac2b38ec6071$var$renderKey(a,n,o),u(r)),!1;if(r&&!a&&"object"==typeof r){if($fb599b4a944ac204$export$2e2bcd8739ae039.endsWith(n,"{}"))n=s?n:n.slice(0,-2),r=JSON.stringify(r);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)&&$2252ac2b38ec6071$var$isFlatArray(r)||($fb599b4a944ac204$export$2e2bcd8739ae039.isFileList(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.endsWith(n,"[]"))&&(f=$fb599b4a944ac204$export$2e2bcd8739ae039.toArray(r)))return n=$2252ac2b38ec6071$var$removeBrackets(n),f.forEach(function(r,s){$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)||null===r||i.append(!0===d?$2252ac2b38ec6071$var$renderKey([n],s,o):null===d?n:n+"[]",u(r))}),!1}return!!$2252ac2b38ec6071$var$isVisitable(r)||(i.append($2252ac2b38ec6071$var$renderKey(a,n,o),u(r)),!1)}let p=[],h=Object.assign($2252ac2b38ec6071$var$predicates,{defaultVisitor:c,convertValue:u,isVisitable:$2252ac2b38ec6071$var$isVisitable});function g(r,n){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)){if(-1!==p.indexOf(r))throw Error("Circular reference detected in "+n.join("."));p.push(r),$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(r,function(r,s){let o=!($fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)||null===r)&&a.call(i,r,$fb599b4a944ac204$export$2e2bcd8739ae039.isString(s)?s.trim():s,n,h);!0===o&&g(r,n?n.concat(s):[s])}),p.pop()}}if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r))throw TypeError("data must be an object");return g(r),i}var $2252ac2b38ec6071$export$2e2bcd8739ae039=$2252ac2b38ec6071$var$toFormData;function $95e4c2c63cfa77bd$var$encode(r){let i={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\x00"};return encodeURIComponent(r).replace(/[!'()~]|%20|%00/g,function(r){return i[r]})}function $95e4c2c63cfa77bd$var$AxiosURLSearchParams(r,i){this._pairs=[],r&&$2252ac2b38ec6071$export$2e2bcd8739ae039(r,this,i)}const $95e4c2c63cfa77bd$var$prototype=$95e4c2c63cfa77bd$var$AxiosURLSearchParams.prototype;$95e4c2c63cfa77bd$var$prototype.append=function(r,i){this._pairs.push([r,i])},$95e4c2c63cfa77bd$var$prototype.toString=function(r){let i=r?function(i){return r.call(this,i,$95e4c2c63cfa77bd$var$encode)}:$95e4c2c63cfa77bd$var$encode;return this._pairs.map(function(r){return i(r[0])+"="+i(r[1])},"").join("&")};var $95e4c2c63cfa77bd$export$2e2bcd8739ae039=$95e4c2c63cfa77bd$var$AxiosURLSearchParams;function $0e0708b3cec051bf$var$encode(r){return encodeURIComponent(r).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function $0e0708b3cec051bf$export$2e2bcd8739ae039(r,i,n){let s;if(!i)return r;let a=n&&n.encode||$0e0708b3cec051bf$var$encode,o=$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(n)?{serialize:n}:n,d=o&&o.serialize;if(s=d?d(i,o):$fb599b4a944ac204$export$2e2bcd8739ae039.isURLSearchParams(i)?i.toString():new $95e4c2c63cfa77bd$export$2e2bcd8739ae039(i,o).toString(a)){let i=r.indexOf("#");-1!==i&&(r=r.slice(0,i)),r+=(-1===r.indexOf("?")?"?":"&")+s}return r}class $c58847d54497e792$var$InterceptorManager{constructor(){this.handlers=[]}use(r,i,n){return this.handlers.push({fulfilled:r,rejected:i,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(r){this.handlers[r]&&(this.handlers[r]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(r){$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(this.handlers,function(i){null!==i&&r(i)})}}var $c58847d54497e792$export$2e2bcd8739ae039=$c58847d54497e792$var$InterceptorManager,$8d926c432395d4f2$export$2e2bcd8739ae039={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},$502cc6ac337e531c$export$2e2bcd8739ae039="undefined"!=typeof URLSearchParams?URLSearchParams:$95e4c2c63cfa77bd$export$2e2bcd8739ae039,$575bed01da1a662f$export$2e2bcd8739ae039="undefined"!=typeof FormData?FormData:null,$d399f9494934204f$export$2e2bcd8739ae039="undefined"!=typeof Blob?Blob:null,$ca76dbabf240ea5a$export$2e2bcd8739ae039={isBrowser:!0,classes:{URLSearchParams:$502cc6ac337e531c$export$2e2bcd8739ae039,FormData:$575bed01da1a662f$export$2e2bcd8739ae039,Blob:$d399f9494934204f$export$2e2bcd8739ae039},protocols:["http","https","file","blob","url","data"]},$0741e44c7cc90f6e$exports={};$parcel$export($0741e44c7cc90f6e$exports,"hasBrowserEnv",()=>$0741e44c7cc90f6e$export$c4996c4b7b93b0bf),$parcel$export($0741e44c7cc90f6e$exports,"navigator",()=>$0741e44c7cc90f6e$export$ec7c8efa7f5790ae),$parcel$export($0741e44c7cc90f6e$exports,"hasStandardBrowserEnv",()=>$0741e44c7cc90f6e$export$c0bcc9250309d66),$parcel$export($0741e44c7cc90f6e$exports,"hasStandardBrowserWebWorkerEnv",()=>$0741e44c7cc90f6e$export$c81692cf5af97dac),$parcel$export($0741e44c7cc90f6e$exports,"origin",()=>$0741e44c7cc90f6e$export$f710a83a91838a36);const $0741e44c7cc90f6e$export$c4996c4b7b93b0bf="undefined"!=typeof window&&"undefined"!=typeof document,$0741e44c7cc90f6e$export$ec7c8efa7f5790ae="object"==typeof navigator&&navigator||void 0,$0741e44c7cc90f6e$export$c0bcc9250309d66=$0741e44c7cc90f6e$export$c4996c4b7b93b0bf&&(!$0741e44c7cc90f6e$export$ec7c8efa7f5790ae||0>["ReactNative","NativeScript","NS"].indexOf($0741e44c7cc90f6e$export$ec7c8efa7f5790ae.product)),$0741e44c7cc90f6e$export$c81692cf5af97dac="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,$0741e44c7cc90f6e$export$f710a83a91838a36=$0741e44c7cc90f6e$export$c4996c4b7b93b0bf&&window.location.href||"http://localhost";var $e50a782fe1bbe96e$export$2e2bcd8739ae039={...$0741e44c7cc90f6e$exports,...$ca76dbabf240ea5a$export$2e2bcd8739ae039};function $351e06f00328b44e$export$2e2bcd8739ae039(r,i){return $2252ac2b38ec6071$export$2e2bcd8739ae039(r,new $e50a782fe1bbe96e$export$2e2bcd8739ae039.classes.URLSearchParams,{visitor:function(r,i,n,s){return $e50a782fe1bbe96e$export$2e2bcd8739ae039.isNode&&$fb599b4a944ac204$export$2e2bcd8739ae039.isBuffer(r)?(this.append(i,r.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)},...i})}function $46103cbe9839965f$var$parsePropPath(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.matchAll(/\w+|\[(\w*)]/g,r).map(r=>"[]"===r[0]?"":r[1]||r[0])}function $46103cbe9839965f$var$arrayToObject(r){let i,n;let s={},a=Object.keys(r),o=a.length;for(i=0;i=r.length;if(o=!o&&$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(s)?s.length:o,f)return $fb599b4a944ac204$export$2e2bcd8739ae039.hasOwnProp(s,o)?s[o]=[s[o],n]:s[o]=n,!d;s[o]&&$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(s[o])||(s[o]=[]);let l=i(r,n,s[o],a);return l&&$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(s[o])&&(s[o]=$46103cbe9839965f$var$arrayToObject(s[o])),!d}if($fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(r)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(r.entries)){let n={};return $fb599b4a944ac204$export$2e2bcd8739ae039.forEachEntry(r,(r,s)=>{i($46103cbe9839965f$var$parsePropPath(r),s,n,0)}),n}return null}var $46103cbe9839965f$export$2e2bcd8739ae039=$46103cbe9839965f$var$formDataToJSON;function $7463d8cabcd159e8$var$stringifySafely(r,i,n){if($fb599b4a944ac204$export$2e2bcd8739ae039.isString(r))try{return(i||JSON.parse)(r),$fb599b4a944ac204$export$2e2bcd8739ae039.trim(r)}catch(r){if("SyntaxError"!==r.name)throw r}return(n||JSON.stringify)(r)}const $7463d8cabcd159e8$var$defaults={transitional:$8d926c432395d4f2$export$2e2bcd8739ae039,adapter:["xhr","http","fetch"],transformRequest:[function(r,i){let n;let s=i.getContentType()||"",a=s.indexOf("application/json")>-1,o=$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r);o&&$fb599b4a944ac204$export$2e2bcd8739ae039.isHTMLForm(r)&&(r=new FormData(r));let d=$fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(r);if(d)return a?JSON.stringify($46103cbe9839965f$export$2e2bcd8739ae039(r)):r;if($fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBuffer(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isBuffer(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isStream(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isFile(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isBlob(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isReadableStream(r))return r;if($fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBufferView(r))return r.buffer;if($fb599b4a944ac204$export$2e2bcd8739ae039.isURLSearchParams(r))return i.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),r.toString();if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return $351e06f00328b44e$export$2e2bcd8739ae039(r,this.formSerializer).toString();if((n=$fb599b4a944ac204$export$2e2bcd8739ae039.isFileList(r))||s.indexOf("multipart/form-data")>-1){let i=this.env&&this.env.FormData;return $2252ac2b38ec6071$export$2e2bcd8739ae039(n?{"files[]":r}:r,i&&new i,this.formSerializer)}}return o||a?(i.setContentType("application/json",!1),$7463d8cabcd159e8$var$stringifySafely(r)):r}],transformResponse:[function(r){let i=this.transitional||$7463d8cabcd159e8$var$defaults.transitional,n=i&&i.forcedJSONParsing,s="json"===this.responseType;if($fb599b4a944ac204$export$2e2bcd8739ae039.isResponse(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isReadableStream(r))return r;if(r&&$fb599b4a944ac204$export$2e2bcd8739ae039.isString(r)&&(n&&!this.responseType||s)){let n=i&&i.silentJSONParsing,a=!n&&s;try{return JSON.parse(r,this.parseReviver)}catch(r){if(a){if("SyntaxError"===r.name)throw $76f2b00474519cdb$export$2e2bcd8739ae039.from(r,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_RESPONSE,this,null,this.response);throw r}}}return r}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:$e50a782fe1bbe96e$export$2e2bcd8739ae039.classes.FormData,Blob:$e50a782fe1bbe96e$export$2e2bcd8739ae039.classes.Blob},validateStatus:function(r){return r>=200&&r<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(["delete","get","head","post","put","patch"],r=>{$7463d8cabcd159e8$var$defaults.headers[r]={}});var $7463d8cabcd159e8$export$2e2bcd8739ae039=$7463d8cabcd159e8$var$defaults;const $60e0d03be99adf09$var$ignoreDuplicateOf=$fb599b4a944ac204$export$2e2bcd8739ae039.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);var $60e0d03be99adf09$export$2e2bcd8739ae039=r=>{let i,n,s;let a={};return r&&r.split("\n").forEach(function(r){s=r.indexOf(":"),i=r.substring(0,s).trim().toLowerCase(),n=r.substring(s+1).trim(),!i||a[i]&&$60e0d03be99adf09$var$ignoreDuplicateOf[i]||("set-cookie"===i?a[i]?a[i].push(n):a[i]=[n]:a[i]=a[i]?a[i]+", "+n:n)}),a};const $0b0f695da095f026$var$$internals=Symbol("internals"),$0b0f695da095f026$var$isValidHeaderValue=r=>!/[\r\n]/.test(r);function $0b0f695da095f026$var$assertValidHeaderValue(r,i){if(!1!==r&&null!=r){if($fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)){r.forEach(r=>$0b0f695da095f026$var$assertValidHeaderValue(r,i));return}if(!$0b0f695da095f026$var$isValidHeaderValue(String(r)))throw Error(`Invalid character in header content ["${i}"]`)}}function $0b0f695da095f026$var$normalizeHeader(r){return r&&String(r).trim().toLowerCase()}function $0b0f695da095f026$var$stripTrailingCRLF(r){let i=r.length;for(;i>0;){let n=r.charCodeAt(i-1);if(10!==n&&13!==n)break;i-=1}return i===r.length?r:r.slice(0,i)}function $0b0f695da095f026$var$normalizeValue(r){return!1===r||null==r?r:$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r.map($0b0f695da095f026$var$normalizeValue):$0b0f695da095f026$var$stripTrailingCRLF(String(r))}function $0b0f695da095f026$var$parseTokens(r){let i;let n=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;for(;i=s.exec(r);)n[i[1]]=i[2];return n}const $0b0f695da095f026$var$isValidHeaderName=r=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(r.trim());function $0b0f695da095f026$var$matchHeaderValue(r,i,n,s,a){if($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(s))return s.call(this,i,n);if(a&&(i=n),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(i)){if($fb599b4a944ac204$export$2e2bcd8739ae039.isString(s))return -1!==i.indexOf(s);if($fb599b4a944ac204$export$2e2bcd8739ae039.isRegExp(s))return s.test(i)}}function $0b0f695da095f026$var$formatHeader(r){return r.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(r,i,n)=>i.toUpperCase()+n)}function $0b0f695da095f026$var$buildAccessors(r,i){let n=$fb599b4a944ac204$export$2e2bcd8739ae039.toCamelCase(" "+i);["get","set","has"].forEach(s=>{Object.defineProperty(r,s+n,{value:function(r,n,a){return this[s].call(this,i,r,n,a)},configurable:!0})})}class $0b0f695da095f026$var$AxiosHeaders{constructor(r){r&&this.set(r)}set(r,i,n){let s=this;function a(r,i,n){let a=$0b0f695da095f026$var$normalizeHeader(i);if(!a)throw Error("header name must be a non-empty string");let o=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(s,a);o&&void 0!==s[o]&&!0!==n&&(void 0!==n||!1===s[o])||($0b0f695da095f026$var$assertValidHeaderValue(r,i),s[o||i]=$0b0f695da095f026$var$normalizeValue(r))}let o=(r,i)=>$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(r,(r,n)=>a(r,n,i));if($fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(r)||r instanceof this.constructor)o(r,i);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isString(r)&&(r=r.trim())&&!$0b0f695da095f026$var$isValidHeaderName(r))o($60e0d03be99adf09$export$2e2bcd8739ae039(r),i);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isIterable(r)){let n={},s,a;for(let i of r){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(i))throw TypeError("Object iterator must return a key-value pair");n[a=i[0]]=(s=n[a])?$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(s)?[...s,i[1]]:[s,i[1]]:i[1]}o(n,i)}else null!=r&&a(i,r,n);return this}get(r,i){if(r=$0b0f695da095f026$var$normalizeHeader(r)){let n=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(this,r);if(n){let r=this[n];if(!i)return r;if(!0===i)return $0b0f695da095f026$var$parseTokens(r);if($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(i))return i.call(this,r,n);if($fb599b4a944ac204$export$2e2bcd8739ae039.isRegExp(i))return i.exec(r);throw TypeError("parser must be boolean|regexp|function")}}}has(r,i){if(r=$0b0f695da095f026$var$normalizeHeader(r)){let n=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(this,r);return!!(n&&void 0!==this[n]&&(!i||$0b0f695da095f026$var$matchHeaderValue(this,this[n],n,i)))}return!1}delete(r,i){let n=this,s=!1;function a(r){if(r=$0b0f695da095f026$var$normalizeHeader(r)){let a=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(n,r);a&&(!i||$0b0f695da095f026$var$matchHeaderValue(n,n[a],a,i))&&(delete n[a],s=!0)}}return $fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r.forEach(a):a(r),s}clear(r){let i=Object.keys(this),n=i.length,s=!1;for(;n--;){let a=i[n];(!r||$0b0f695da095f026$var$matchHeaderValue(this,this[a],a,r,!0))&&(delete this[a],s=!0)}return s}normalize(r){let i=this,n={};return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(this,(s,a)=>{let o=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(n,a);if(o){i[o]=$0b0f695da095f026$var$normalizeValue(s),delete i[a];return}let d=r?$0b0f695da095f026$var$formatHeader(a):String(a).trim();d!==a&&delete i[a],i[d]=$0b0f695da095f026$var$normalizeValue(s),n[d]=!0}),this}concat(...r){return this.constructor.concat(this,...r)}toJSON(r){let i=Object.create(null);return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(this,(n,s)=>{null!=n&&!1!==n&&(i[s]=r&&$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(n)?n.join(", "):n)}),i}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([r,i])=>r+": "+i).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(r){return r instanceof this?r:new this(r)}static concat(r,...i){let n=new this(r);return i.forEach(r=>n.set(r)),n}static accessor(r){let i=this[$0b0f695da095f026$var$$internals]=this[$0b0f695da095f026$var$$internals]={accessors:{}},n=i.accessors,s=this.prototype;function a(r){let i=$0b0f695da095f026$var$normalizeHeader(r);n[i]||($0b0f695da095f026$var$buildAccessors(s,r),n[i]=!0)}return $fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r.forEach(a):a(r),this}}$0b0f695da095f026$var$AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),$fb599b4a944ac204$export$2e2bcd8739ae039.reduceDescriptors($0b0f695da095f026$var$AxiosHeaders.prototype,({value:r},i)=>{let n=i[0].toUpperCase()+i.slice(1);return{get:()=>r,set(r){this[n]=r}}}),$fb599b4a944ac204$export$2e2bcd8739ae039.freezeMethods($0b0f695da095f026$var$AxiosHeaders);var $0b0f695da095f026$export$2e2bcd8739ae039=$0b0f695da095f026$var$AxiosHeaders;function $7393d1b654eed49e$export$2e2bcd8739ae039(r,i){let n=this||$7463d8cabcd159e8$export$2e2bcd8739ae039,s=i||n,a=$0b0f695da095f026$export$2e2bcd8739ae039.from(s.headers),o=s.data;return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(r,function(r){o=r.call(n,o,a.normalize(),i?i.status:void 0)}),a.normalize(),o}function $3ce83a3b4ea5cd0b$export$2e2bcd8739ae039(r){return!!(r&&r.__CANCEL__)}class $c0eaa8e11eba5040$var$CanceledError extends $76f2b00474519cdb$export$2e2bcd8739ae039{constructor(r,i,n){super(null==r?"canceled":r,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_CANCELED,i,n),this.name="CanceledError",this.__CANCEL__=!0}}var $c0eaa8e11eba5040$export$2e2bcd8739ae039=$c0eaa8e11eba5040$var$CanceledError;function $5b3c479423bad418$export$2e2bcd8739ae039(r,i,n){let s=n.config.validateStatus;!n.status||!s||s(n.status)?r(n):i(new $76f2b00474519cdb$export$2e2bcd8739ae039("Request failed with status code "+n.status,[$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_REQUEST,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function $c2e1cb1ec72c8735$export$2e2bcd8739ae039(r){let i=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return i&&i[1]||""}function $262858656c789692$var$speedometer(r,i){let n;r=r||10;let s=Array(r),a=Array(r),o=0,d=0;return i=void 0!==i?i:1e3,function(f){let l=Date.now(),u=a[d];n||(n=l),s[o]=f,a[o]=l;let c=d,p=0;for(;c!==o;)p+=s[c++],c%=r;if((o=(o+1)%r)===d&&(d=(d+1)%r),l-n{a=o,n=null,s&&(clearTimeout(s),s=null),r(...i)},f=(...r)=>{let i=Date.now(),f=i-a;f>=o?d(r,i):(n=r,s||(s=setTimeout(()=>{s=null,d(n)},o-f)))},l=()=>n&&d(n);return[f,l]}var $1aacf4884c5a00ea$export$2e2bcd8739ae039=$1aacf4884c5a00ea$var$throttle;const $7e4925c7fdfe1077$export$c1b28109d46c3592=(r,i,n=3)=>{let s=0,a=$262858656c789692$export$2e2bcd8739ae039(50,250);return $1aacf4884c5a00ea$export$2e2bcd8739ae039(n=>{let o=n.loaded,d=n.lengthComputable?n.total:void 0,f=o-s,l=a(f),u=o<=d;s=o;let c={loaded:o,total:d,progress:d?o/d:void 0,bytes:f,rate:l||void 0,estimated:l&&d&&u?(d-o)/l:void 0,event:n,lengthComputable:null!=d,[i?"download":"upload"]:!0};r(c)},n)},$7e4925c7fdfe1077$export$d9fadd12586c18d6=(r,i)=>{let n=null!=r;return[s=>i[0]({lengthComputable:n,total:r,loaded:s}),i[1]]},$7e4925c7fdfe1077$export$5d35863c355a22a9=r=>(...i)=>$fb599b4a944ac204$export$2e2bcd8739ae039.asap(()=>r(...i));var $68654f2da10185e1$export$2e2bcd8739ae039=$e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv?(n=new URL($e50a782fe1bbe96e$export$2e2bcd8739ae039.origin),s=$e50a782fe1bbe96e$export$2e2bcd8739ae039.navigator&&/(msie|trident)/i.test($e50a782fe1bbe96e$export$2e2bcd8739ae039.navigator.userAgent),r=>(r=new URL(r,$e50a782fe1bbe96e$export$2e2bcd8739ae039.origin),n.protocol===r.protocol&&n.host===r.host&&(s||n.port===r.port))):()=>!0,$dc5154632f7b7df2$export$2e2bcd8739ae039=$e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv?{write(r,i,n,s,a,o,d){if("undefined"==typeof document)return;let f=[`${r}=${encodeURIComponent(i)}`];$fb599b4a944ac204$export$2e2bcd8739ae039.isNumber(n)&&f.push(`expires=${new Date(n).toUTCString()}`),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(s)&&f.push(`path=${s}`),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(a)&&f.push(`domain=${a}`),!0===o&&f.push("secure"),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(d)&&f.push(`SameSite=${d}`),document.cookie=f.join("; ")},read(r){if("undefined"==typeof document)return null;let i=document.cookie.match(RegExp("(?:^|; )"+r+"=([^;]*)"));return i?decodeURIComponent(i[1]):null},remove(r){this.write(r,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function $0be41eb6f9312247$export$2e2bcd8739ae039(r){return"string"==typeof r&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function $fad511fc1878cf7e$export$2e2bcd8739ae039(r,i){return i?r.replace(/\/?\/$/,"")+"/"+i.replace(/^\/+/,""):r}function $c95ec4256bc8e455$export$2e2bcd8739ae039(r,i,n){let s=!$0be41eb6f9312247$export$2e2bcd8739ae039(i);return r&&(s||!1==n)?$fad511fc1878cf7e$export$2e2bcd8739ae039(r,i):i}const $bef108e337cae1ac$var$headersToObject=r=>r instanceof $0b0f695da095f026$export$2e2bcd8739ae039?{...r}:r;function $bef108e337cae1ac$export$2e2bcd8739ae039(r,i){i=i||{};let n={};function s(r,i,n,s){return $fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(r)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.merge.call({caseless:s},r,i):$fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.merge({},i):$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(i)?i.slice():i}function a(r,i,n,a){return $fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)?void 0:s(void 0,r,n,a):s(r,i,n,a)}function o(r,i){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i))return s(void 0,i)}function d(r,i){return $fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)?void 0:s(void 0,r):s(void 0,i)}function f(n,a,o){return o in i?s(n,a):o in r?s(void 0,n):void 0}let l={url:o,method:o,data:o,baseURL:d,transformRequest:d,transformResponse:d,paramsSerializer:d,timeout:d,timeoutMessage:d,withCredentials:d,withXSRFToken:d,adapter:d,responseType:d,xsrfCookieName:d,xsrfHeaderName:d,onUploadProgress:d,onDownloadProgress:d,decompress:d,maxContentLength:d,maxBodyLength:d,beforeRedirect:d,transport:d,httpAgent:d,httpsAgent:d,cancelToken:d,socketPath:d,responseEncoding:d,validateStatus:f,headers:(r,i,n)=>a($bef108e337cae1ac$var$headersToObject(r),$bef108e337cae1ac$var$headersToObject(i),n,!0)};return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(Object.keys({...r,...i}),function(s){if("__proto__"===s||"constructor"===s||"prototype"===s)return;let o=$fb599b4a944ac204$export$2e2bcd8739ae039.hasOwnProp(l,s)?l[s]:a,d=o(r[s],i[s],s);$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(d)&&o!==f||(n[s]=d)}),n}var $d3e897c397a73e07$export$2e2bcd8739ae039=r=>{let i=$bef108e337cae1ac$export$2e2bcd8739ae039({},r),{data:n,withXSRFToken:s,xsrfHeaderName:a,xsrfCookieName:o,headers:d,auth:f}=i;if(i.headers=d=$0b0f695da095f026$export$2e2bcd8739ae039.from(d),i.url=$0e0708b3cec051bf$export$2e2bcd8739ae039($c95ec4256bc8e455$export$2e2bcd8739ae039(i.baseURL,i.url,i.allowAbsoluteUrls),r.params,r.paramsSerializer),f&&d.set("Authorization","Basic "+btoa((f.username||"")+":"+(f.password?unescape(encodeURIComponent(f.password)):""))),$fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(n)){if($e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv||$e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserWebWorkerEnv)d.setContentType(void 0);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(n.getHeaders)){let r=n.getHeaders(),i=["content-type","content-length"];Object.entries(r).forEach(([r,n])=>{i.includes(r.toLowerCase())&&d.set(r,n)})}}if($e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv&&(s&&$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(s)&&(s=s(i)),s||!1!==s&&$68654f2da10185e1$export$2e2bcd8739ae039(i.url))){let r=a&&o&&$dc5154632f7b7df2$export$2e2bcd8739ae039.read(o);r&&d.set(a,r)}return i};const $a3c2bb216d98e61a$var$isXHRAdapterSupported="undefined"!=typeof XMLHttpRequest;var $a3c2bb216d98e61a$export$2e2bcd8739ae039=$a3c2bb216d98e61a$var$isXHRAdapterSupported&&function(r){return new Promise(function(i,n){let s,a,o,d,f;let l=$d3e897c397a73e07$export$2e2bcd8739ae039(r),u=l.data,c=$0b0f695da095f026$export$2e2bcd8739ae039.from(l.headers).normalize(),{responseType:p,onUploadProgress:h,onDownloadProgress:g}=l;function m(){d&&d(),f&&f(),l.cancelToken&&l.cancelToken.unsubscribe(s),l.signal&&l.signal.removeEventListener("abort",s)}let v=new XMLHttpRequest;function _(){if(!v)return;let s=$0b0f695da095f026$export$2e2bcd8739ae039.from("getAllResponseHeaders"in v&&v.getAllResponseHeaders()),a=p&&"text"!==p&&"json"!==p?v.response:v.responseText,o={data:a,status:v.status,statusText:v.statusText,headers:s,config:r,request:v};$5b3c479423bad418$export$2e2bcd8739ae039(function(r){i(r),m()},function(r){n(r),m()},o),v=null}v.open(l.method.toUpperCase(),l.url,!0),v.timeout=l.timeout,"onloadend"in v?v.onloadend=_:v.onreadystatechange=function(){v&&4===v.readyState&&(0!==v.status||v.responseURL&&0===v.responseURL.indexOf("file:"))&&setTimeout(_)},v.onabort=function(){v&&(n(new $76f2b00474519cdb$export$2e2bcd8739ae039("Request aborted",$76f2b00474519cdb$export$2e2bcd8739ae039.ECONNABORTED,r,v)),v=null)},v.onerror=function(i){let s=i&&i.message?i.message:"Network Error",a=new $76f2b00474519cdb$export$2e2bcd8739ae039(s,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_NETWORK,r,v);a.event=i||null,n(a),v=null},v.ontimeout=function(){let i=l.timeout?"timeout of "+l.timeout+"ms exceeded":"timeout exceeded",s=l.transitional||$8d926c432395d4f2$export$2e2bcd8739ae039;l.timeoutErrorMessage&&(i=l.timeoutErrorMessage),n(new $76f2b00474519cdb$export$2e2bcd8739ae039(i,s.clarifyTimeoutError?$76f2b00474519cdb$export$2e2bcd8739ae039.ETIMEDOUT:$76f2b00474519cdb$export$2e2bcd8739ae039.ECONNABORTED,r,v)),v=null},void 0===u&&c.setContentType(null),"setRequestHeader"in v&&$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(c.toJSON(),function(r,i){v.setRequestHeader(i,r)}),$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(l.withCredentials)||(v.withCredentials=!!l.withCredentials),p&&"json"!==p&&(v.responseType=l.responseType),g&&([o,f]=$7e4925c7fdfe1077$export$c1b28109d46c3592(g,!0),v.addEventListener("progress",o)),h&&v.upload&&([a,d]=$7e4925c7fdfe1077$export$c1b28109d46c3592(h),v.upload.addEventListener("progress",a),v.upload.addEventListener("loadend",d)),(l.cancelToken||l.signal)&&(s=i=>{v&&(n(!i||i.type?new $c0eaa8e11eba5040$export$2e2bcd8739ae039(null,r,v):i),v.abort(),v=null)},l.cancelToken&&l.cancelToken.subscribe(s),l.signal&&(l.signal.aborted?s():l.signal.addEventListener("abort",s)));let b=$c2e1cb1ec72c8735$export$2e2bcd8739ae039(l.url);if(b&&-1===$e50a782fe1bbe96e$export$2e2bcd8739ae039.protocols.indexOf(b)){n(new $76f2b00474519cdb$export$2e2bcd8739ae039("Unsupported protocol "+b+":",$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_REQUEST,r));return}v.send(u||null)})};const $8c5d20687d884370$var$composeSignals=(r,i)=>{let{length:n}=r=r?r.filter(Boolean):[];if(i||n){let n,s=new AbortController,a=function(r){if(!n){n=!0,d();let i=r instanceof Error?r:this.reason;s.abort(i instanceof $76f2b00474519cdb$export$2e2bcd8739ae039?i:new $c0eaa8e11eba5040$export$2e2bcd8739ae039(i instanceof Error?i.message:i))}},o=i&&setTimeout(()=>{o=null,a(new $76f2b00474519cdb$export$2e2bcd8739ae039(`timeout of ${i}ms exceeded`,$76f2b00474519cdb$export$2e2bcd8739ae039.ETIMEDOUT))},i),d=()=>{r&&(o&&clearTimeout(o),o=null,r.forEach(r=>{r.unsubscribe?r.unsubscribe(a):r.removeEventListener("abort",a)}),r=null)};r.forEach(r=>r.addEventListener("abort",a));let{signal:f}=s;return f.unsubscribe=()=>$fb599b4a944ac204$export$2e2bcd8739ae039.asap(d),f}};var $8c5d20687d884370$export$2e2bcd8739ae039=$8c5d20687d884370$var$composeSignals;const $1a4710d75d892f0d$export$71b051935044bd5d=function*(r,i){let n,s=r.byteLength;if(!i||s{let a;let o=$1a4710d75d892f0d$export$f9f241124ee3198e(r,i),d=0,f=r=>{!a&&(a=!0,s&&s(r))};return new ReadableStream({async pull(r){try{let{done:i,value:s}=await o.next();if(i){f(),r.close();return}let a=s.byteLength;if(n){let r=d+=a;n(r)}r.enqueue(new Uint8Array(s))}catch(r){throw f(r),r}},cancel:r=>(f(r),o.return())},{highWaterMark:2})},$d4c762493e739428$var$DEFAULT_CHUNK_SIZE=65536,{isFunction:$d4c762493e739428$var$isFunction}=$fb599b4a944ac204$export$2e2bcd8739ae039,$d4c762493e739428$var$globalFetchAPI=(({Request:r,Response:i})=>({Request:r,Response:i}))($fb599b4a944ac204$export$2e2bcd8739ae039.global),{ReadableStream:$d4c762493e739428$var$ReadableStream,TextEncoder:$d4c762493e739428$var$TextEncoder}=$fb599b4a944ac204$export$2e2bcd8739ae039.global,$d4c762493e739428$var$test=(r,...i)=>{try{return!!r(...i)}catch(r){return!1}},$d4c762493e739428$var$factory=r=>{var i;r=$fb599b4a944ac204$export$2e2bcd8739ae039.merge.call({skipUndefined:!0},$d4c762493e739428$var$globalFetchAPI,r);let{fetch:n,Request:s,Response:a}=r,o=n?$d4c762493e739428$var$isFunction(n):"function"==typeof fetch,d=$d4c762493e739428$var$isFunction(s),f=$d4c762493e739428$var$isFunction(a);if(!o)return!1;let l=o&&$d4c762493e739428$var$isFunction($d4c762493e739428$var$ReadableStream),u=o&&("function"==typeof $d4c762493e739428$var$TextEncoder?(i=new $d4c762493e739428$var$TextEncoder,r=>i.encode(r)):async r=>new Uint8Array(await new s(r).arrayBuffer())),c=d&&l&&$d4c762493e739428$var$test(()=>{let r=!1,i=new $d4c762493e739428$var$ReadableStream,n=new s($e50a782fe1bbe96e$export$2e2bcd8739ae039.origin,{body:i,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type");return i.cancel(),r&&!n}),p=f&&l&&$d4c762493e739428$var$test(()=>$fb599b4a944ac204$export$2e2bcd8739ae039.isReadableStream(new a("").body)),h={stream:p&&(r=>r.body)};o&&(()=>{["text","arrayBuffer","blob","formData","stream"].forEach(r=>{h[r]||(h[r]=(i,n)=>{let s=i&&i[r];if(s)return s.call(i);throw new $76f2b00474519cdb$export$2e2bcd8739ae039(`Response type '${r}' is not supported`,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_NOT_SUPPORT,n)})})})();let g=async r=>{if(null==r)return 0;if($fb599b4a944ac204$export$2e2bcd8739ae039.isBlob(r))return r.size;if($fb599b4a944ac204$export$2e2bcd8739ae039.isSpecCompliantForm(r)){let i=new s($e50a782fe1bbe96e$export$2e2bcd8739ae039.origin,{method:"POST",body:r});return(await i.arrayBuffer()).byteLength}return $fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBufferView(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBuffer(r)?r.byteLength:($fb599b4a944ac204$export$2e2bcd8739ae039.isURLSearchParams(r)&&(r+=""),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(r))?(await u(r)).byteLength:void 0},m=async(r,i)=>{let n=$fb599b4a944ac204$export$2e2bcd8739ae039.toFiniteNumber(r.getContentLength());return null==n?g(i):n};return async r=>{let i,{url:o,method:f,data:l,signal:u,cancelToken:g,timeout:v,onDownloadProgress:_,onUploadProgress:b,responseType:T,headers:E,withCredentials:w="same-origin",fetchOptions:S}=$d3e897c397a73e07$export$2e2bcd8739ae039(r),I=n||fetch;T=T?(T+"").toLowerCase():"text";let O=$8c5d20687d884370$export$2e2bcd8739ae039([u,g&&g.toAbortSignal()],v),C=null,A=O&&O.unsubscribe&&(()=>{O.unsubscribe()});try{if(b&&c&&"get"!==f&&"head"!==f&&0!==(i=await m(E,l))){let r,n=new s(o,{method:"POST",body:l,duplex:"half"});if($fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(l)&&(r=n.headers.get("content-type"))&&E.setContentType(r),n.body){let[r,s]=$7e4925c7fdfe1077$export$d9fadd12586c18d6(i,$7e4925c7fdfe1077$export$c1b28109d46c3592($7e4925c7fdfe1077$export$5d35863c355a22a9(b)));l=$1a4710d75d892f0d$export$b0119225647bd83(n.body,$d4c762493e739428$var$DEFAULT_CHUNK_SIZE,r,s)}}$fb599b4a944ac204$export$2e2bcd8739ae039.isString(w)||(w=w?"include":"omit");let n=d&&"credentials"in s.prototype,u={...S,signal:O,method:f.toUpperCase(),headers:E.normalize().toJSON(),body:l,duplex:"half",credentials:n?w:void 0};C=d&&new s(o,u);let g=await (d?I(C,S):I(o,u)),v=p&&("stream"===T||"response"===T);if(p&&(_||v&&A)){let r={};["status","statusText","headers"].forEach(i=>{r[i]=g[i]});let i=$fb599b4a944ac204$export$2e2bcd8739ae039.toFiniteNumber(g.headers.get("content-length")),[n,s]=_&&$7e4925c7fdfe1077$export$d9fadd12586c18d6(i,$7e4925c7fdfe1077$export$c1b28109d46c3592($7e4925c7fdfe1077$export$5d35863c355a22a9(_),!0))||[];g=new a($1a4710d75d892f0d$export$b0119225647bd83(g.body,$d4c762493e739428$var$DEFAULT_CHUNK_SIZE,n,()=>{s&&s(),A&&A()}),r)}T=T||"text";let k=await h[$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(h,T)||"text"](g,r);return!v&&A&&A(),await new Promise((i,n)=>{$5b3c479423bad418$export$2e2bcd8739ae039(i,n,{data:k,headers:$0b0f695da095f026$export$2e2bcd8739ae039.from(g.headers),status:g.status,statusText:g.statusText,config:r,request:C})})}catch(i){if(A&&A(),i&&"TypeError"===i.name&&/Load failed|fetch/i.test(i.message))throw Object.assign(new $76f2b00474519cdb$export$2e2bcd8739ae039("Network Error",$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_NETWORK,r,C,i&&i.response),{cause:i.cause||i});throw $76f2b00474519cdb$export$2e2bcd8739ae039.from(i,i&&i.code,r,C,i&&i.response)}}},$d4c762493e739428$var$seedCache=new Map,$d4c762493e739428$export$3105c6651375d4fa=r=>{let i=r&&r.env||{},{fetch:n,Request:s,Response:a}=i,o=[s,a,n],d=o.length,f,l,u=$d4c762493e739428$var$seedCache;for(;d--;)f=o[d],void 0===(l=u.get(f))&&u.set(f,l=d?new Map:$d4c762493e739428$var$factory(i)),u=l;return l};$d4c762493e739428$export$3105c6651375d4fa();const $50c55ec2566e79cc$var$knownAdapters={http:$ddd5bc0d8b7abeaf$export$2e2bcd8739ae039,xhr:$a3c2bb216d98e61a$export$2e2bcd8739ae039,fetch:{get:$d4c762493e739428$export$3105c6651375d4fa}};$fb599b4a944ac204$export$2e2bcd8739ae039.forEach($50c55ec2566e79cc$var$knownAdapters,(r,i)=>{if(r){try{Object.defineProperty(r,"name",{value:i})}catch(r){}Object.defineProperty(r,"adapterName",{value:i})}});const $50c55ec2566e79cc$var$renderReason=r=>`- ${r}`,$50c55ec2566e79cc$var$isResolvedHandle=r=>$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(r)||null===r||!1===r;function $50c55ec2566e79cc$var$getAdapter(r,i){let n,s;r=$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r:[r];let{length:a}=r,o={};for(let d=0;d`adapter ${r} `+(!1===i?"is not supported by the environment":"is not available in the build")),i=a?r.length>1?"since :\n"+r.map($50c55ec2566e79cc$var$renderReason).join("\n"):" "+$50c55ec2566e79cc$var$renderReason(r[0]):"as no adapter specified";throw new $76f2b00474519cdb$export$2e2bcd8739ae039("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return s}var $50c55ec2566e79cc$export$2e2bcd8739ae039={getAdapter:$50c55ec2566e79cc$var$getAdapter,adapters:$50c55ec2566e79cc$var$knownAdapters};function $39518e4eed54dac4$var$throwIfCancellationRequested(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new $c0eaa8e11eba5040$export$2e2bcd8739ae039(null,r)}function $39518e4eed54dac4$export$2e2bcd8739ae039(r){$39518e4eed54dac4$var$throwIfCancellationRequested(r),r.headers=$0b0f695da095f026$export$2e2bcd8739ae039.from(r.headers),r.data=$7393d1b654eed49e$export$2e2bcd8739ae039.call(r,r.transformRequest),-1!==["post","put","patch"].indexOf(r.method)&&r.headers.setContentType("application/x-www-form-urlencoded",!1);let i=$50c55ec2566e79cc$export$2e2bcd8739ae039.getAdapter(r.adapter||$7463d8cabcd159e8$export$2e2bcd8739ae039.adapter,r);return i(r).then(function(i){return $39518e4eed54dac4$var$throwIfCancellationRequested(r),i.data=$7393d1b654eed49e$export$2e2bcd8739ae039.call(r,r.transformResponse,i),i.headers=$0b0f695da095f026$export$2e2bcd8739ae039.from(i.headers),i},function(i){return!$3ce83a3b4ea5cd0b$export$2e2bcd8739ae039(i)&&($39518e4eed54dac4$var$throwIfCancellationRequested(r),i&&i.response&&(i.response.data=$7393d1b654eed49e$export$2e2bcd8739ae039.call(r,r.transformResponse,i.response),i.response.headers=$0b0f695da095f026$export$2e2bcd8739ae039.from(i.response.headers))),Promise.reject(i)})}const $6c7f63a22949b466$export$a4ad2735b021c132="1.15.0",$1ec0f94678dc2418$var$validators={};["object","boolean","number","function","string","symbol"].forEach((r,i)=>{$1ec0f94678dc2418$var$validators[r]=function(n){return typeof n===r||"a"+(i<1?"n ":" ")+r}});const $1ec0f94678dc2418$var$deprecatedWarnings={};function $1ec0f94678dc2418$var$assertOptions(r,i,n){if("object"!=typeof r)throw new $76f2b00474519cdb$export$2e2bcd8739ae039("options must be an object",$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_OPTION_VALUE);let s=Object.keys(r),a=s.length;for(;a-- >0;){let o=s[a],d=i[o];if(d){let i=r[o],n=void 0===i||d(i,o,r);if(!0!==n)throw new $76f2b00474519cdb$export$2e2bcd8739ae039("option "+o+" must be "+n,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new $76f2b00474519cdb$export$2e2bcd8739ae039("Unknown option "+o,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_OPTION)}}$1ec0f94678dc2418$var$validators.transitional=function(r,i,n){function s(r,i){return"[Axios v"+$6c7f63a22949b466$export$a4ad2735b021c132+"] Transitional option '"+r+"'"+i+(n?". "+n:"")}return(n,a,o)=>{if(!1===r)throw new $76f2b00474519cdb$export$2e2bcd8739ae039(s(a," has been removed"+(i?" in "+i:"")),$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_DEPRECATED);return i&&!$1ec0f94678dc2418$var$deprecatedWarnings[a]&&($1ec0f94678dc2418$var$deprecatedWarnings[a]=!0,console.warn(s(a," has been deprecated since v"+i+" and will be removed in the near future"))),!r||r(n,a,o)}},$1ec0f94678dc2418$var$validators.spelling=function(r){return(i,n)=>(console.warn(`${n} is likely a misspelling of ${r}`),!0)};var $1ec0f94678dc2418$export$2e2bcd8739ae039={assertOptions:$1ec0f94678dc2418$var$assertOptions,validators:$1ec0f94678dc2418$var$validators};const $12a85eb9e10282e4$var$validators=$1ec0f94678dc2418$export$2e2bcd8739ae039.validators;class $12a85eb9e10282e4$var$Axios{constructor(r){this.defaults=r||{},this.interceptors={request:new $c58847d54497e792$export$2e2bcd8739ae039,response:new $c58847d54497e792$export$2e2bcd8739ae039}}async request(r,i){try{return await this._request(r,i)}catch(r){if(r instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=Error();let n=(()=>{if(!i.stack)return"";let r=i.stack.indexOf("\n");return -1===r?"":i.stack.slice(r+1)})();try{if(r.stack){if(n){let i=n.indexOf("\n"),s=-1===i?-1:n.indexOf("\n",i+1),a=-1===s?"":n.slice(s+1);String(r.stack).endsWith(a)||(r.stack+="\n"+n)}}else r.stack=n}catch(r){}}throw r}}_request(r,i){let n,s;"string"==typeof r?(i=i||{}).url=r:i=r||{},i=$bef108e337cae1ac$export$2e2bcd8739ae039(this.defaults,i);let{transitional:a,paramsSerializer:o,headers:d}=i;void 0!==a&&$1ec0f94678dc2418$export$2e2bcd8739ae039.assertOptions(a,{silentJSONParsing:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean),forcedJSONParsing:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean),clarifyTimeoutError:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean),legacyInterceptorReqResOrdering:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean)},!1),null!=o&&($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(o)?i.paramsSerializer={serialize:o}:$1ec0f94678dc2418$export$2e2bcd8739ae039.assertOptions(o,{encode:$12a85eb9e10282e4$var$validators.function,serialize:$12a85eb9e10282e4$var$validators.function},!0)),void 0!==i.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?i.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:i.allowAbsoluteUrls=!0),$1ec0f94678dc2418$export$2e2bcd8739ae039.assertOptions(i,{baseUrl:$12a85eb9e10282e4$var$validators.spelling("baseURL"),withXsrfToken:$12a85eb9e10282e4$var$validators.spelling("withXSRFToken")},!0),i.method=(i.method||this.defaults.method||"get").toLowerCase();let f=d&&$fb599b4a944ac204$export$2e2bcd8739ae039.merge(d.common,d[i.method]);d&&$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(["delete","get","head","post","put","patch","common"],r=>{delete d[r]}),i.headers=$0b0f695da095f026$export$2e2bcd8739ae039.concat(f,d);let l=[],u=!0;this.interceptors.request.forEach(function(r){if("function"==typeof r.runWhen&&!1===r.runWhen(i))return;u=u&&r.synchronous;let n=i.transitional||$8d926c432395d4f2$export$2e2bcd8739ae039,s=n&&n.legacyInterceptorReqResOrdering;s?l.unshift(r.fulfilled,r.rejected):l.push(r.fulfilled,r.rejected)});let c=[];this.interceptors.response.forEach(function(r){c.push(r.fulfilled,r.rejected)});let p=0;if(!u){let r=[$39518e4eed54dac4$export$2e2bcd8739ae039.bind(this),void 0];for(r.unshift(...l),r.push(...c),s=r.length,n=Promise.resolve(i);p{if(!n._listeners)return;let i=n._listeners.length;for(;i-- >0;)n._listeners[i](r);n._listeners=null}),this.promise.then=r=>{let i;let s=new Promise(r=>{n.subscribe(r),i=r}).then(r);return s.cancel=function(){n.unsubscribe(i)},s},r(function(r,s,a){n.reason||(n.reason=new $c0eaa8e11eba5040$export$2e2bcd8739ae039(r,s,a),i(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(r){if(this.reason){r(this.reason);return}this._listeners?this._listeners.push(r):this._listeners=[r]}unsubscribe(r){if(!this._listeners)return;let i=this._listeners.indexOf(r);-1!==i&&this._listeners.splice(i,1)}toAbortSignal(){let r=new AbortController,i=i=>{r.abort(i)};return this.subscribe(i),r.signal.unsubscribe=()=>this.unsubscribe(i),r.signal}static source(){let r;let i=new $ddf58ab6eba80d2f$var$CancelToken(function(i){r=i});return{token:i,cancel:r}}}var $ddf58ab6eba80d2f$export$2e2bcd8739ae039=$ddf58ab6eba80d2f$var$CancelToken;function $69015d689f130999$export$2e2bcd8739ae039(r){return function(i){return r.apply(null,i)}}function $286e7366ba6a9033$export$2e2bcd8739ae039(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r)&&!0===r.isAxiosError}const $92baf5657ceb9e03$var$HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries($92baf5657ceb9e03$var$HttpStatusCode).forEach(([r,i])=>{$92baf5657ceb9e03$var$HttpStatusCode[i]=r});var $92baf5657ceb9e03$export$2e2bcd8739ae039=$92baf5657ceb9e03$var$HttpStatusCode;function $34471abae050a418$var$createInstance(r){let i=new $12a85eb9e10282e4$export$2e2bcd8739ae039(r),n=$7da4ba9e886ae2f3$export$2e2bcd8739ae039($12a85eb9e10282e4$export$2e2bcd8739ae039.prototype.request,i);return $fb599b4a944ac204$export$2e2bcd8739ae039.extend(n,$12a85eb9e10282e4$export$2e2bcd8739ae039.prototype,i,{allOwnKeys:!0}),$fb599b4a944ac204$export$2e2bcd8739ae039.extend(n,i,null,{allOwnKeys:!0}),n.create=function(i){return $34471abae050a418$var$createInstance($bef108e337cae1ac$export$2e2bcd8739ae039(r,i))},n}const $34471abae050a418$var$axios=$34471abae050a418$var$createInstance($7463d8cabcd159e8$export$2e2bcd8739ae039);$34471abae050a418$var$axios.Axios=$12a85eb9e10282e4$export$2e2bcd8739ae039,$34471abae050a418$var$axios.CanceledError=$c0eaa8e11eba5040$export$2e2bcd8739ae039,$34471abae050a418$var$axios.CancelToken=$ddf58ab6eba80d2f$export$2e2bcd8739ae039,$34471abae050a418$var$axios.isCancel=$3ce83a3b4ea5cd0b$export$2e2bcd8739ae039,$34471abae050a418$var$axios.VERSION=$6c7f63a22949b466$export$a4ad2735b021c132,$34471abae050a418$var$axios.toFormData=$2252ac2b38ec6071$export$2e2bcd8739ae039,$34471abae050a418$var$axios.AxiosError=$76f2b00474519cdb$export$2e2bcd8739ae039,$34471abae050a418$var$axios.Cancel=$34471abae050a418$var$axios.CanceledError,$34471abae050a418$var$axios.all=function(r){return Promise.all(r)},$34471abae050a418$var$axios.spread=$69015d689f130999$export$2e2bcd8739ae039,$34471abae050a418$var$axios.isAxiosError=$286e7366ba6a9033$export$2e2bcd8739ae039,$34471abae050a418$var$axios.mergeConfig=$bef108e337cae1ac$export$2e2bcd8739ae039,$34471abae050a418$var$axios.AxiosHeaders=$0b0f695da095f026$export$2e2bcd8739ae039,$34471abae050a418$var$axios.formToJSON=r=>$46103cbe9839965f$export$2e2bcd8739ae039($fb599b4a944ac204$export$2e2bcd8739ae039.isHTMLForm(r)?new FormData(r):r),$34471abae050a418$var$axios.getAdapter=$50c55ec2566e79cc$export$2e2bcd8739ae039.getAdapter,$34471abae050a418$var$axios.HttpStatusCode=$92baf5657ceb9e03$export$2e2bcd8739ae039,$34471abae050a418$var$axios.default=$34471abae050a418$var$axios;var $34471abae050a418$export$2e2bcd8739ae039=$34471abae050a418$var$axios;const{Axios:$4ce02f68f14348c9$export$1c00760e9e5a4e95,AxiosError:$4ce02f68f14348c9$export$c1fbed17c2f6a328,CanceledError:$4ce02f68f14348c9$export$1ab0c6b20d94fa14,isCancel:$4ce02f68f14348c9$export$3b22524397b493c6,CancelToken:$4ce02f68f14348c9$export$fd08e3cb425f0d61,VERSION:$4ce02f68f14348c9$export$a4ad2735b021c132,all:$4ce02f68f14348c9$export$84bf76cd7afc7469,Cancel:$4ce02f68f14348c9$export$848c9b7ead0df967,isAxiosError:$4ce02f68f14348c9$export$fbafdbe06a5b5a9a,spread:$4ce02f68f14348c9$export$3ae0fd4797ed47c8,toFormData:$4ce02f68f14348c9$export$10ae0d317ea97f8b,AxiosHeaders:$4ce02f68f14348c9$export$4e7d6ff0f3e6520,HttpStatusCode:$4ce02f68f14348c9$export$a972f69c851492b3,formToJSON:$4ce02f68f14348c9$export$86d7c59254d6a2c9,getAdapter:$4ce02f68f14348c9$export$17ddc20a97d669e2,mergeConfig:$4ce02f68f14348c9$export$7ec1ebcfa9d8bd6a}=$34471abae050a418$export$2e2bcd8739ae039;var $7U5sq=parcelRequire("7U5sq"),$5xch2=parcelRequire("5xch2"),$2kkR6=parcelRequire("2kkR6"),$eb25ad002e4befa3$exports={};!function(r){var i,n=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,s=Math.ceil,a=Math.floor,o="[BigNumber Error] ",d=o+"Number primitive has more than 15 significant digits: ",f=1e14,l=14,u=9007199254740991,c=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],p=1e7,h=1e9;function g(r){var i,S,I,O=z.prototype={constructor:z,toString:null,valueOf:null},C=new z(1),A=20,k=4,M=-7,D=21,P=-1e7,N=1e7,q=!1,B=1,L=0,F={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xa0",suffix:""},U="0123456789abcdefghijklmnopqrstuvwxyz",H=!0;function z(r,i){var s,o,f,c,p,h,g,m,v=this;if(!(v instanceof z))return new z(r,i);if(null==i){if(r&&!0===r._isBigNumber){v.s=r.s,!r.c||r.e>N?v.c=v.e=null:r.e=10;p/=10,c++);c>N?v.c=v.e=null:(v.e=c,v.c=[r]);return}m=String(r)}else{if(!n.test(m=String(r)))return I(v,m,h);v.s=45==m.charCodeAt(0)?(m=m.slice(1),-1):1}(c=m.indexOf("."))>-1&&(m=m.replace(".","")),(p=m.search(/e/i))>0?(c<0&&(c=p),c+=+m.slice(p+1),m=m.substring(0,p)):c<0&&(c=m.length)}else{if(b(i,2,U.length,"Base"),10==i&&H)return W(v=new z(r),A+v.e+1,k);if(m=String(r),h="number"==typeof r){if(0*r!=0)return I(v,m,h,i);if(v.s=1/r<0?(m=m.slice(1),-1):1,z.DEBUG&&m.replace(/^0\.0*|\./,"").length>15)throw Error(d+r)}else v.s=45===m.charCodeAt(0)?(m=m.slice(1),-1):1;for(s=U.slice(0,i),c=p=0,g=m.length;ps.indexOf(o=m.charAt(p))){if("."==o){if(p>c){c=g;continue}}else if(!f&&(m==m.toUpperCase()&&(m=m.toLowerCase())||m==m.toLowerCase()&&(m=m.toUpperCase()))){f=!0,p=-1,c=0;continue}return I(v,String(r),h,i)}h=!1,(c=(m=S(m,i,10,v.s)).indexOf("."))>-1?m=m.replace(".",""):c=m.length}for(p=0;48===m.charCodeAt(p);p++);for(g=m.length;48===m.charCodeAt(--g););if(m=m.slice(p,++g)){if(g-=p,h&&z.DEBUG&&g>15&&(r>u||r!==a(r)))throw Error(d+v.s*r);if((c=c-p-1)>N)v.c=v.e=null;else if(c=D)?E(l,d):w(l,d,"0");else if(o=(r=W(new z(r),i,n)).e,f=(l=v(r.c)).length,1==s||2==s&&(i<=o||o<=M)){for(;ff){if(--i>0)for(l+=".";i--;l+="0");}else if((i+=o-f)>0)for(o+1==f&&(l+=".");i--;l+="0");return r.s<0&&a?"-"+l:l}function V(r,i){for(var n,s=1,a=new z(r[0]);s=10;a/=10,s++);return(n=s+n*l-1)>N?r.c=r.e=null:n=10;h/=10,d++);if((u=i-d)<0)u+=l,p=i,v=(g=_[m=0])/b[d-p-1]%10|0;else if((m=s((u+1)/l))>=_.length){if(o){for(;_.length<=m;_.push(0));g=v=0,d=1,u%=l,p=u-l+1}else break r}else{for(d=1,g=h=_[m];h>=10;h/=10,d++);u%=l,v=(p=u-l+d)<0?0:g/b[d-p-1]%10|0}if(o=o||i<0||null!=_[m+1]||(p<0?g:g%b[d-p-1]),o=n<4?(v||o)&&(0==n||n==(r.s<0?3:2)):v>5||5==v&&(4==n||o||6==n&&(u>0?p>0?g/b[d-p]:0:_[m-1])%10&1||n==(r.s<0?8:7)),i<1||!_[0])return _.length=0,o?(i-=r.e+1,_[0]=b[(l-i%l)%l],r.e=-i||0):_[0]=r.e=0,r;if(0==u?(_.length=m,h=1,m--):(_.length=m+1,h=b[l-u],_[m]=p>0?a(g/b[d-p]%b[p])*h:0),o)for(;;)if(0==m){for(u=1,p=_[0];p>=10;p/=10,u++);for(p=_[0]+=h,h=1;p>=10;p/=10,h++);u!=h&&(r.e++,_[0]==f&&(_[0]=1));break}else{if(_[m]+=h,_[m]!=f)break;_[m--]=0,h=1}for(u=_.length;0===_[--u];_.pop());}r.e>N?r.c=r.e=null:r.e=D?E(i,n):w(i,n,"0"),r.s<0?"-"+i:i)}return z.clone=g,z.ROUND_UP=0,z.ROUND_DOWN=1,z.ROUND_CEIL=2,z.ROUND_FLOOR=3,z.ROUND_HALF_UP=4,z.ROUND_HALF_DOWN=5,z.ROUND_HALF_EVEN=6,z.ROUND_HALF_CEIL=7,z.ROUND_HALF_FLOOR=8,z.EUCLID=9,z.config=z.set=function(r){var i,n;if(null!=r){if("object"==typeof r){if(r.hasOwnProperty(i="DECIMAL_PLACES")&&(b(n=r[i],0,h,i),A=n),r.hasOwnProperty(i="ROUNDING_MODE")&&(b(n=r[i],0,8,i),k=n),r.hasOwnProperty(i="EXPONENTIAL_AT")&&((n=r[i])&&n.pop?(b(n[0],-h,0,i),b(n[1],0,h,i),M=n[0],D=n[1]):(b(n,-h,h,i),M=-(D=n<0?-n:n))),r.hasOwnProperty(i="RANGE")){if((n=r[i])&&n.pop)b(n[0],-h,-1,i),b(n[1],1,h,i),P=n[0],N=n[1];else if(b(n,-h,h,i),n)P=-(N=n<0?-n:n);else throw Error(o+i+" cannot be zero: "+n)}if(r.hasOwnProperty(i="CRYPTO")){if(!!(n=r[i])===n){if(n){if("undefined"!=typeof crypto&&crypto&&(crypto.getRandomValues||crypto.randomBytes))q=n;else throw q=!n,Error(o+"crypto unavailable")}else q=n}else throw Error(o+i+" not true or false: "+n)}if(r.hasOwnProperty(i="MODULO_MODE")&&(b(n=r[i],0,9,i),B=n),r.hasOwnProperty(i="POW_PRECISION")&&(b(n=r[i],0,h,i),L=n),r.hasOwnProperty(i="FORMAT")){if("object"==typeof(n=r[i]))F=n;else throw Error(o+i+" not an object: "+n)}if(r.hasOwnProperty(i="ALPHABET")){if("string"!=typeof(n=r[i])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(o+i+" invalid: "+n);H="0123456789"==n.slice(0,10),U=n}}else throw Error(o+"Object expected: "+r)}return{DECIMAL_PLACES:A,ROUNDING_MODE:k,EXPONENTIAL_AT:[M,D],RANGE:[P,N],CRYPTO:q,MODULO_MODE:B,POW_PRECISION:L,FORMAT:F,ALPHABET:U}},z.isBigNumber=function(r){if(!r||!0!==r._isBigNumber)return!1;if(!z.DEBUG)return!0;var i,n,s=r.c,d=r.e,u=r.s;r:if("[object Array]"==({}).toString.call(s)){if((1===u||-1===u)&&d>=-h&&d<=h&&d===a(d)){if(0===s[0]){if(0===d&&1===s.length)return!0;break r}if((i=(d+1)%l)<1&&(i+=l),String(s[0]).length==i){for(i=0;i=f||n!==a(n))break r;if(0!==n)return!0}}}else if(null===s&&null===d&&(null===u||1===u||-1===u))return!0;throw Error(o+"Invalid BigNumber: "+r)},z.maximum=z.max=function(){return V(arguments,O.lt)},z.minimum=z.min=function(){return V(arguments,O.gt)},z.random=function(){var r=9007199254740992,i=9007199254740992*Math.random()&2097151?function(){return a(Math.random()*r)}:function(){return(1073741824*Math.random()|0)*8388608+(8388608*Math.random()|0)};return function(r){var n,d,f,u,p,g=0,m=[],v=new z(C);if(null==r?r=A:b(r,0,h),u=s(r/l),q){if(crypto.getRandomValues){for(n=crypto.getRandomValues(new Uint32Array(u*=2));g>>11))>=9e15?(d=crypto.getRandomValues(new Uint32Array(2)),n[g]=d[0],n[g+1]=d[1]):(m.push(p%1e14),g+=2);g=u/2}else if(crypto.randomBytes){for(n=crypto.randomBytes(u*=7);g=9e15?crypto.randomBytes(7).copy(n,g):(m.push(p%1e14),g+=7);g=u/7}else throw q=!1,Error(o+"crypto unavailable")}if(!q)for(;g=10;p/=10,g++);gn-1&&(null==d[a+1]&&(d[a+1]=0),d[a+1]+=d[a]/n|0,d[a]%=n)}return d.reverse()}return function(s,a,o,d,f){var l,u,c,p,h,g,m,_,b=s.indexOf("."),T=A,E=k;for(b>=0&&(p=L,L=0,s=s.replace(".",""),g=(_=new z(a)).pow(s.length-b),L=p,_.c=n(w(v(g.c),g.e,"0"),10,o,r),_.e=_.c.length),c=p=(m=n(s,a,o,f?(l=U,r):(l=r,U))).length;0==m[--p];m.pop());if(!m[0])return l.charAt(0);if(b<0?--c:(g.c=m,g.e=c,g.s=d,m=(g=i(g,_,T,E,o)).c,h=g.r,c=g.e),b=m[u=c+T+1],p=o/2,h=h||u<0||null!=m[u+1],h=E<4?(null!=b||h)&&(0==E||E==(g.s<0?3:2)):b>p||b==p&&(4==E||h||6==E&&1&m[u-1]||E==(g.s<0?8:7)),u<1||!m[0])s=h?w(l.charAt(1),-T,l.charAt(0)):l.charAt(0);else{if(m.length=u,h)for(--o;++m[--u]>o;)m[u]=0,u||(++c,m=[1].concat(m));for(p=m.length;!m[--p];);for(b=0,s="";b<=p;s+=l.charAt(m[b++]));s=w(s,c,l.charAt(0))}return s}}(),i=function(){function r(r,i,n){var s,a,o,d,f=0,l=r.length,u=i%p,c=i/p|0;for(r=r.slice();l--;)s=c*(o=r[l]%p)+(d=r[l]/p|0)*u,f=((a=u*o+s%p*p+f)/n|0)+(s/p|0)+c*d,r[l]=a%n;return f&&(r=[f].concat(r)),r}function i(r,i,n,s){var a,o;if(n!=s)o=n>s?1:-1;else for(a=o=0;ai[a]?1:-1;break}return o}function n(r,i,n,s){for(var a=0;n--;)r[n]-=a,a=r[n]1;r.splice(0,1));}return function(s,o,d,u,c){var p,h,g,v,_,b,T,E,w,S,I,O,C,A,k,M,D,P=s.s==o.s?1:-1,N=s.c,q=o.c;if(!N||!N[0]||!q||!q[0])return new z(s.s&&o.s&&(N?!q||N[0]!=q[0]:q)?N&&0==N[0]||!q?0*P:P/0:NaN);for(w=(E=new z(P)).c=[],P=d+(h=s.e-o.e)+1,c||(c=f,h=m(s.e/l)-m(o.e/l),P=P/l|0),g=0;q[g]==(N[g]||0);g++);if(q[g]>(N[g]||0)&&h--,P<0)w.push(1),v=!0;else{for(A=N.length,M=q.length,g=0,P+=2,(_=a(c/(q[0]+1)))>1&&(q=r(q,_,c),N=r(N,_,c),M=q.length,A=N.length),C=M,I=(S=N.slice(0,M)).length;I=c/2&&k++;do{if(_=0,(p=i(q,S,M,I))<0){if(O=S[0],M!=I&&(O=O*c+(S[1]||0)),(_=a(O/k))>1)for(_>=c&&(_=c-1),T=(b=r(q,_,c)).length,I=S.length;1==i(b,S,T,I);)_--,n(b,Mi(q,S,M,I);)_++,n(S,M=10;P/=10,g++);W(E,d+(E.e=g+h*l-1)+1,u,v)}else E.e=h,E.r=+v;return E}}(),I=function(){var r=/^(-?)0([xbo])(?=\w[\w.]*$)/i,i=/^([^.]+)\.$/,n=/^\.([^.]+)$/,s=/^-?(Infinity|NaN)$/,a=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(d,f,l,u){var c,p=l?f:f.replace(a,"");if(s.test(p))d.s=isNaN(p)?null:p<0?-1:1;else{if(!l&&(p=p.replace(r,function(r,i,n){return c="x"==(n=n.toLowerCase())?16:"b"==n?2:8,u&&u!=c?r:i}),u&&(c=u,p=p.replace(i,"$1").replace(n,"0.$1")),f!=p))return new z(p,c);if(z.DEBUG)throw Error(o+"Not a"+(u?" base "+u:"")+" number: "+f);d.s=null}d.c=d.e=null}}(),O.absoluteValue=O.abs=function(){var r=new z(this);return r.s<0&&(r.s=1),r},O.comparedTo=function(r,i){return _(this,new z(r,i))},O.decimalPlaces=O.dp=function(r,i){var n,s,a,o=this;if(null!=r)return b(r,0,h),null==i?i=k:b(i,0,8),W(new z(o),r+o.e+1,i);if(!(n=o.c))return null;if(s=((a=n.length-1)-m(this.e/l))*l,a=n[a])for(;a%10==0;a/=10,s--);return s<0&&(s=0),s},O.dividedBy=O.div=function(r,n){return i(this,new z(r,n),A,k)},O.dividedToIntegerBy=O.idiv=function(r,n){return i(this,new z(r,n),0,1)},O.exponentiatedBy=O.pow=function(r,i){var n,d,f,u,c,p,h,g,m,v=this;if((r=new z(r)).c&&!r.isInteger())throw Error(o+"Exponent not an integer: "+$(r));if(null!=i&&(i=new z(i)),p=r.e>14,!v.c||!v.c[0]||1==v.c[0]&&!v.e&&1==v.c.length||!r.c||!r.c[0])return m=new z(Math.pow(+$(v),p?r.s*(2-T(r)):+$(r))),i?m.mod(i):m;if(h=r.s<0,i){if(i.c?!i.c[0]:!i.s)return new z(NaN);(d=!h&&v.isInteger()&&i.isInteger())&&(v=v.mod(i))}else{if(r.e>9&&(v.e>0||v.e<-1||(0==v.e?v.c[0]>1||p&&v.c[1]>=24e7:v.c[0]<8e13||p&&v.c[0]<=9999975e7)))return u=v.s<0&&T(r)?-0:0,v.e>-1&&(u=1/u),new z(h?1/u:u);L&&(u=s(L/l+2))}for(p?(n=new z(.5),h&&(r.s=1),g=T(r)):g=(f=Math.abs(+$(r)))%2,m=new z(C);;){if(g){if(!(m=m.times(v)).c)break;u?m.c.length>u&&(m.c.length=u):d&&(m=m.mod(i))}if(f){if(0===(f=a(f/2)))break;g=f%2}else if(W(r=r.times(n),r.e+1,1),r.e>14)g=T(r);else{if(0==(f=+$(r)))break;g=f%2}v=v.times(v),u?v.c&&v.c.length>u&&(v.c.length=u):d&&(v=v.mod(i))}return d?m:(h&&(m=C.div(m)),i?m.mod(i):u?W(m,L,k,c):m)},O.integerValue=function(r){var i=new z(this);return null==r?r=k:b(r,0,8),W(i,i.e+1,r)},O.isEqualTo=O.eq=function(r,i){return 0===_(this,new z(r,i))},O.isFinite=function(){return!!this.c},O.isGreaterThan=O.gt=function(r,i){return _(this,new z(r,i))>0},O.isGreaterThanOrEqualTo=O.gte=function(r,i){return 1===(i=_(this,new z(r,i)))||0===i},O.isInteger=function(){return!!this.c&&m(this.e/l)>this.c.length-2},O.isLessThan=O.lt=function(r,i){return 0>_(this,new z(r,i))},O.isLessThanOrEqualTo=O.lte=function(r,i){return -1===(i=_(this,new z(r,i)))||0===i},O.isNaN=function(){return!this.s},O.isNegative=function(){return this.s<0},O.isPositive=function(){return this.s>0},O.isZero=function(){return!!this.c&&0==this.c[0]},O.minus=function(r,i){var n,s,a,o,d=this,u=d.s;if(i=(r=new z(r,i)).s,!u||!i)return new z(NaN);if(u!=i)return r.s=-i,d.plus(r);var c=d.e/l,p=r.e/l,h=d.c,g=r.c;if(!c||!p){if(!h||!g)return h?(r.s=-i,r):new z(g?d:NaN);if(!h[0]||!g[0])return g[0]?(r.s=-i,r):new z(h[0]?d:3==k?-0:0)}if(c=m(c),p=m(p),h=h.slice(),u=c-p){for((o=u<0)?(u=-u,a=h):(p=c,a=g),a.reverse(),i=u;i--;a.push(0));a.reverse()}else for(s=(o=(u=h.length)<(i=g.length))?u:i,u=i=0;i0)for(;i--;h[n++]=0);for(i=f-1;s>u;){if(h[--s]=0;){for(n=0,_=O[a]%w,b=O[a]/w|0,d=c,o=a+d;o>a;)u=b*(h=I[--d]%w)+(g=I[d]/w|0)*_,n=((h=_*h+u%w*w+T[o]+n)/E|0)+(u/w|0)+b*g,T[o--]=h%E;T[o]=n}return n?++s:T.splice(0,1),K(r,T,s)},O.negated=function(){var r=new z(this);return r.s=-r.s||null,r},O.plus=function(r,i){var n,s=this,a=s.s;if(i=(r=new z(r,i)).s,!a||!i)return new z(NaN);if(a!=i)return r.s=-i,s.minus(r);var o=s.e/l,d=r.e/l,u=s.c,c=r.c;if(!o||!d){if(!u||!c)return new z(a/0);if(!u[0]||!c[0])return c[0]?r:new z(u[0]?s:0*a)}if(o=m(o),d=m(d),u=u.slice(),a=o-d){for(a>0?(d=o,n=c):(a=-a,n=u),n.reverse();a--;n.push(0));n.reverse()}for((a=u.length)-(i=c.length)<0&&(n=c,c=u,u=n,i=a),a=0;i;)a=(u[--i]=u[i]+c[i]+a)/f|0,u[i]=f===u[i]?0:u[i]%f;return a&&(u=[a].concat(u),++d),K(r,u,d)},O.precision=O.sd=function(r,i){var n,s,a,o=this;if(null!=r&&!!r!==r)return b(r,1,h),null==i?i=k:b(i,0,8),W(new z(o),r,i);if(!(n=o.c))return null;if(s=(a=n.length-1)*l+1,a=n[a]){for(;a%10==0;a/=10,s--);for(a=n[0];a>=10;a/=10,s++);}return r&&o.e+1>s&&(s=o.e+1),s},O.shiftedBy=function(r){return b(r,-u,u),this.times("1e"+r)},O.squareRoot=O.sqrt=function(){var r,n,s,a,o,d=this,f=d.c,l=d.s,u=d.e,c=A+4,p=new z("0.5");if(1!==l||!f||!f[0])return new z(!l||l<0&&(!f||f[0])?NaN:f?d:1/0);if(0==(l=Math.sqrt(+$(d)))||l==1/0?(((n=v(f)).length+u)%2==0&&(n+="0"),l=Math.sqrt(+n),u=m((u+1)/2)-(u<0||u%2),n=l==1/0?"5e"+u:(n=l.toExponential()).slice(0,n.indexOf("e")+1)+u,s=new z(n)):s=new z(l+""),s.c[0]){for((l=(u=s.e)+c)<3&&(l=0);;)if(o=s,s=p.times(o.plus(i(d,o,c,1))),v(o.c).slice(0,l)===(n=v(s.c)).slice(0,l)){if(s.e0&&v>0){for(d=v%l||l,p=m.substr(0,d);d0&&(p+=c+m.slice(d)),g&&(p="-"+p)}s=h?p+(n.decimalSeparator||"")+((u=+n.fractionGroupSize)?h.replace(RegExp("\\d{"+u+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):h):p}return(n.prefix||"")+s+(n.suffix||"")},O.toFraction=function(r){var n,s,a,d,f,u,p,h,g,m,_,b,T=this,E=T.c;if(null!=r&&(!(p=new z(r)).isInteger()&&(p.c||1!==p.s)||p.lt(C)))throw Error(o+"Argument "+(p.isInteger()?"out of range: ":"not an integer: ")+$(p));if(!E)return new z(T);for(n=new z(C),g=s=new z(C),a=h=new z(C),b=v(E),f=n.e=b.length-T.e-1,n.c[0]=c[(u=f%l)<0?l+u:u],r=!r||p.comparedTo(n)>0?f>0?n:g:p,u=N,N=1/0,p=new z(b),h.c[0]=0;m=i(p,n,0,1),1!=(d=s.plus(m.times(a))).comparedTo(r);)s=a,a=d,g=h.plus(m.times(d=g)),h=d,n=p.minus(m.times(d=n)),p=d;return d=i(r.minus(s),a,0,1),h=h.plus(d.times(g)),s=s.plus(d.times(a)),h.s=g.s=T.s,f*=2,_=1>i(g,a,f,k).minus(T).abs().comparedTo(i(h,s,f,k).minus(T).abs())?[g,a]:[h,s],N=u,_},O.toNumber=function(){return+$(this)},O.toPrecision=function(r,i){return null!=r&&b(r,1,h),G(this,r,i,2)},O.toString=function(r){var i,n=this,s=n.s,a=n.e;return null===a?s?(i="Infinity",s<0&&(i="-"+i)):i="NaN":(null==r?i=a<=M||a>=D?E(v(n.c),a):w(v(n.c),a,"0"):10===r&&H?i=w(v((n=W(new z(n),A+a+1,k)).c),n.e,"0"):(b(r,2,U.length,"Base"),i=S(w(v(n.c),a,"0"),10,r,s,!0)),s<0&&n.c[0]&&(i="-"+i)),i},O.valueOf=O.toJSON=function(){return $(this)},O._isBigNumber=!0,null!=r&&z.set(r),z}function m(r){var i=0|r;return r>0||r===i?i:i-1}function v(r){for(var i,n,s=1,a=r.length,o=r[0]+"";su^n?1:-1;for(d=0,f=(l=a.length)<(u=o.length)?l:u;do[d]^n?1:-1;return l==u?0:l>u^n?1:-1}function b(r,i,n,s){if(rn||r!==a(r))throw Error(o+(s||"Argument")+("number"==typeof r?rn?" out of range: ":" not an integer: ":" not a primitive number: ")+String(r))}function T(r){var i=r.c.length-1;return m(r.e/l)==i&&r.c[i]%2!=0}function E(r,i){return(r.length>1?r.charAt(0)+"."+r.slice(1):r)+(i<0?"e":"e+")+i}function w(r,i,n){var s,a;if(i<0){for(a=n+".";++i;a+=n);r=a+r}else if(s=r.length,++i>s){for(a=n,i-=s;--i;a+=n);r+=a}else ir instanceof Uint8Array,$bb5e1fcd97588e49$var$u8=r=>new Uint8Array(r.buffer,r.byteOffset,r.byteLength);$bb5e1fcd97588e49$exports.u8=$bb5e1fcd97588e49$var$u8;const $bb5e1fcd97588e49$var$u32=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4));$bb5e1fcd97588e49$exports.u32=$bb5e1fcd97588e49$var$u32;const $bb5e1fcd97588e49$var$createView=r=>new DataView(r.buffer,r.byteOffset,r.byteLength);$bb5e1fcd97588e49$exports.createView=$bb5e1fcd97588e49$var$createView;const $bb5e1fcd97588e49$var$rotr=(r,i)=>r<<32-i|r>>>i;if($bb5e1fcd97588e49$exports.rotr=$bb5e1fcd97588e49$var$rotr,$bb5e1fcd97588e49$exports.isLE=68===new Uint8Array(new Uint32Array([287454020]).buffer)[0],!$bb5e1fcd97588e49$exports.isLE)throw Error("Non little-endian hardware is not supported");const $bb5e1fcd97588e49$var$hexes=Array.from({length:256},(r,i)=>i.toString(16).padStart(2,"0"));function $bb5e1fcd97588e49$var$bytesToHex(r){if(!$bb5e1fcd97588e49$var$u8a(r))throw Error("Uint8Array expected");let i="";for(let n=0;n{};async function $bb5e1fcd97588e49$var$asyncLoop(r,i,n){let s=Date.now();for(let a=0;a=0&&rr+i.length,0)),n=0;return r.forEach(r=>{if(!$bb5e1fcd97588e49$var$u8a(r))throw Error("Uint8Array expected");i.set(r,n),n+=r.length}),i}$bb5e1fcd97588e49$exports.nextTick=$bb5e1fcd97588e49$var$nextTick,$bb5e1fcd97588e49$exports.asyncLoop=$bb5e1fcd97588e49$var$asyncLoop,$bb5e1fcd97588e49$exports.utf8ToBytes=$bb5e1fcd97588e49$var$utf8ToBytes,$bb5e1fcd97588e49$exports.toBytes=$bb5e1fcd97588e49$var$toBytes,$bb5e1fcd97588e49$exports.concatBytes=$bb5e1fcd97588e49$var$concatBytes;class $bb5e1fcd97588e49$var$Hash{clone(){return this._cloneInto()}}$bb5e1fcd97588e49$exports.Hash=$bb5e1fcd97588e49$var$Hash;const $bb5e1fcd97588e49$var$isPlainObject=r=>"[object Object]"===Object.prototype.toString.call(r)&&r.constructor===Object;function $bb5e1fcd97588e49$var$checkOpts(r,i){if(void 0!==i&&("object"!=typeof i||!$bb5e1fcd97588e49$var$isPlainObject(i)))throw Error("Options should be object or undefined");let n=Object.assign(r,i);return n}function $bb5e1fcd97588e49$var$wrapConstructor(r){let i=i=>r().update($bb5e1fcd97588e49$var$toBytes(i)).digest(),n=r();return i.outputLen=n.outputLen,i.blockLen=n.blockLen,i.create=()=>r(),i}function $bb5e1fcd97588e49$var$wrapConstructorWithOpts(r){let i=(i,n)=>r(n).update($bb5e1fcd97588e49$var$toBytes(i)).digest(),n=r({});return i.outputLen=n.outputLen,i.blockLen=n.blockLen,i.create=i=>r(i),i}function $bb5e1fcd97588e49$var$wrapXOFConstructorWithOpts(r){let i=(i,n)=>r(n).update($bb5e1fcd97588e49$var$toBytes(i)).digest(),n=r({});return i.outputLen=n.outputLen,i.blockLen=n.blockLen,i.create=i=>r(i),i}function $bb5e1fcd97588e49$var$randomBytes(r=32){if($3f20760d98ab1126$exports.crypto&&"function"==typeof $3f20760d98ab1126$exports.crypto.getRandomValues)return $3f20760d98ab1126$exports.crypto.getRandomValues(new Uint8Array(r));throw Error("crypto.getRandomValues must be defined")}$bb5e1fcd97588e49$exports.checkOpts=$bb5e1fcd97588e49$var$checkOpts,$bb5e1fcd97588e49$exports.wrapConstructor=$bb5e1fcd97588e49$var$wrapConstructor,$bb5e1fcd97588e49$exports.wrapConstructorWithOpts=$bb5e1fcd97588e49$var$wrapConstructorWithOpts,$bb5e1fcd97588e49$exports.wrapXOFConstructorWithOpts=$bb5e1fcd97588e49$var$wrapXOFConstructorWithOpts,$bb5e1fcd97588e49$exports.randomBytes=$bb5e1fcd97588e49$var$randomBytes;var $1304429e902731e7$exports={};Object.defineProperty($1304429e902731e7$exports,"__esModule",{value:!0}),$1304429e902731e7$exports.blake2s=$1304429e902731e7$exports.compress=$1304429e902731e7$exports.IV=void 0;var $9a4b3b889de6afac$exports={};Object.defineProperty($9a4b3b889de6afac$exports,"__esModule",{value:!0}),$9a4b3b889de6afac$exports.BLAKE2=$9a4b3b889de6afac$exports.SIGMA=void 0;var $a240473818576109$exports={};function $a240473818576109$var$number(r){if(!Number.isSafeInteger(r)||r<0)throw Error(`Wrong positive integer: ${r}`)}function $a240473818576109$var$bool(r){if("boolean"!=typeof r)throw Error(`Expected boolean, not ${r}`)}function $a240473818576109$var$bytes(r,...i){if(!(r instanceof Uint8Array))throw Error("Expected Uint8Array");if(i.length>0&&!i.includes(r.length))throw Error(`Expected Uint8Array of length ${i}, not of length=${r.length}`)}function $a240473818576109$var$hash(r){if("function"!=typeof r||"function"!=typeof r.create)throw Error("Hash should be wrapped by utils.wrapConstructor");$a240473818576109$var$number(r.outputLen),$a240473818576109$var$number(r.blockLen)}function $a240473818576109$var$exists(r,i=!0){if(r.destroyed)throw Error("Hash instance has been destroyed");if(i&&r.finished)throw Error("Hash#digest() has already been called")}function $a240473818576109$var$output(r,i){$a240473818576109$var$bytes(r);let n=i.outputLen;if(r.lengths)throw Error("outputLen bigger than keyLen");if(void 0!==n.key&&(n.key.length<1||n.key.length>s))throw Error(`key must be up 1..${s} byte long or undefined`);if(void 0!==n.salt&&n.salt.length!==a)throw Error(`salt must be ${a} byte long or undefined`);if(void 0!==n.personalization&&n.personalization.length!==o)throw Error(`personalization must be ${o} byte long or undefined`);this.buffer32=(0,$bb5e1fcd97588e49$exports.u32)(this.buffer=new Uint8Array(r))}update(r){$a240473818576109$exports.default.exists(this);let{blockLen:i,buffer:n,buffer32:s}=this;r=(0,$bb5e1fcd97588e49$exports.toBytes)(r);let a=r.length,o=r.byteOffset,d=r.buffer;for(let f=0;fs[i]=r)}digest(){let{buffer:r,outputLen:i}=this;this.digestInto(r);let n=r.slice(0,i);return this.destroy(),n}_cloneInto(r){let{buffer:i,length:n,finished:s,destroyed:a,outputLen:o,pos:d}=this;return r||(r=new this.constructor({dkLen:o})),r.set(...this.get()),r.length=n,r.finished=s,r.destroyed=a,r.outputLen=o,r.buffer.set(i),r.pos=d,r}}$9a4b3b889de6afac$exports.BLAKE2=$9a4b3b889de6afac$var$BLAKE2;var $c886d2710269b158$exports={};Object.defineProperty($c886d2710269b158$exports,"__esModule",{value:!0}),$c886d2710269b158$exports.add=$c886d2710269b158$exports.toBig=$c886d2710269b158$exports.split=$c886d2710269b158$exports.fromBig=void 0;const $c886d2710269b158$var$U32_MASK64=BigInt(4294967296-1),$c886d2710269b158$var$_32n=BigInt(32);function $c886d2710269b158$var$fromBig(r,i=!1){return i?{h:Number(r&$c886d2710269b158$var$U32_MASK64),l:Number(r>>$c886d2710269b158$var$_32n&$c886d2710269b158$var$U32_MASK64)}:{h:0|Number(r>>$c886d2710269b158$var$_32n&$c886d2710269b158$var$U32_MASK64),l:0|Number(r&$c886d2710269b158$var$U32_MASK64)}}function $c886d2710269b158$var$split(r,i=!1){let n=new Uint32Array(r.length),s=new Uint32Array(r.length);for(let a=0;aBigInt(r>>>0)<<$c886d2710269b158$var$_32n|BigInt(i>>>0);$c886d2710269b158$exports.toBig=$c886d2710269b158$var$toBig;const $c886d2710269b158$var$shrSH=(r,i,n)=>r>>>n,$c886d2710269b158$var$shrSL=(r,i,n)=>r<<32-n|i>>>n,$c886d2710269b158$var$rotrSH=(r,i,n)=>r>>>n|i<<32-n,$c886d2710269b158$var$rotrSL=(r,i,n)=>r<<32-n|i>>>n,$c886d2710269b158$var$rotrBH=(r,i,n)=>r<<64-n|i>>>n-32,$c886d2710269b158$var$rotrBL=(r,i,n)=>r>>>n-32|i<<64-n,$c886d2710269b158$var$rotr32H=(r,i)=>i,$c886d2710269b158$var$rotr32L=(r,i)=>r,$c886d2710269b158$var$rotlSH=(r,i,n)=>r<>>32-n,$c886d2710269b158$var$rotlSL=(r,i,n)=>i<>>32-n,$c886d2710269b158$var$rotlBH=(r,i,n)=>i<>>64-n,$c886d2710269b158$var$rotlBL=(r,i,n)=>r<>>64-n;function $c886d2710269b158$var$add(r,i,n,s){let a=(i>>>0)+(s>>>0);return{h:r+n+(a/4294967296|0)|0,l:0|a}}$c886d2710269b158$exports.add=$c886d2710269b158$var$add;const $c886d2710269b158$var$add3L=(r,i,n)=>(r>>>0)+(i>>>0)+(n>>>0),$c886d2710269b158$var$add3H=(r,i,n,s)=>i+n+s+(r/4294967296|0)|0,$c886d2710269b158$var$add4L=(r,i,n,s)=>(r>>>0)+(i>>>0)+(n>>>0)+(s>>>0),$c886d2710269b158$var$add4H=(r,i,n,s,a)=>i+n+s+a+(r/4294967296|0)|0,$c886d2710269b158$var$add5L=(r,i,n,s,a)=>(r>>>0)+(i>>>0)+(n>>>0)+(s>>>0)+(a>>>0),$c886d2710269b158$var$add5H=(r,i,n,s,a,o)=>i+n+s+a+o+(r/4294967296|0)|0,$c886d2710269b158$var$u64={fromBig:$c886d2710269b158$var$fromBig,split:$c886d2710269b158$var$split,toBig:$c886d2710269b158$exports.toBig,shrSH:$c886d2710269b158$var$shrSH,shrSL:$c886d2710269b158$var$shrSL,rotrSH:$c886d2710269b158$var$rotrSH,rotrSL:$c886d2710269b158$var$rotrSL,rotrBH:$c886d2710269b158$var$rotrBH,rotrBL:$c886d2710269b158$var$rotrBL,rotr32H:$c886d2710269b158$var$rotr32H,rotr32L:$c886d2710269b158$var$rotr32L,rotlSH:$c886d2710269b158$var$rotlSH,rotlSL:$c886d2710269b158$var$rotlSL,rotlBH:$c886d2710269b158$var$rotlBH,rotlBL:$c886d2710269b158$var$rotlBL,add:$c886d2710269b158$var$add,add3L:$c886d2710269b158$var$add3L,add3H:$c886d2710269b158$var$add3H,add4L:$c886d2710269b158$var$add4L,add4H:$c886d2710269b158$var$add4H,add5H:$c886d2710269b158$var$add5H,add5L:$c886d2710269b158$var$add5L};function $1304429e902731e7$var$G1(r,i,n,s,a){return r=r+i+a|0,n=n+(s=(0,$bb5e1fcd97588e49$exports.rotr)(s^r,16))|0,{a:r,b:i=(0,$bb5e1fcd97588e49$exports.rotr)(i^n,12),c:n,d:s}}function $1304429e902731e7$var$G2(r,i,n,s,a){return r=r+i+a|0,n=n+(s=(0,$bb5e1fcd97588e49$exports.rotr)(s^r,8))|0,{a:r,b:i=(0,$bb5e1fcd97588e49$exports.rotr)(i^n,7),c:n,d:s}}function $1304429e902731e7$var$compress(r,i,n,s,a,o,d,f,l,u,c,p,h,g,m,v,_,b,T,E){let w=0;for(let S=0;Snew $1304429e902731e7$var$BLAKE2s(r));var $91294e775a6684d7$exports={};Object.defineProperty($91294e775a6684d7$exports,"__esModule",{value:!0}),$91294e775a6684d7$exports.sha224=$91294e775a6684d7$exports.sha256=void 0;var $3dfc5518afabab7c$exports={};function $3dfc5518afabab7c$var$setBigUint64(r,i,n,s){if("function"==typeof r.setBigUint64)return r.setBigUint64(i,n,s);let a=BigInt(32),o=BigInt(4294967295),d=Number(n>>a&o),f=Number(n&o),l=s?4:0,u=s?0:4;r.setUint32(i+l,d,s),r.setUint32(i+u,f,s)}Object.defineProperty($3dfc5518afabab7c$exports,"__esModule",{value:!0}),$3dfc5518afabab7c$exports.SHA2=void 0;class $3dfc5518afabab7c$var$SHA2 extends $bb5e1fcd97588e49$exports.Hash{constructor(r,i,n,s){super(),this.blockLen=r,this.outputLen=i,this.padOffset=n,this.isLE=s,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(r),this.view=(0,$bb5e1fcd97588e49$exports.createView)(this.buffer)}update(r){$a240473818576109$exports.default.exists(this);let{view:i,buffer:n,blockLen:s}=this;r=(0,$bb5e1fcd97588e49$exports.toBytes)(r);let a=r.length;for(let o=0;os-o&&(this.process(n,0),o=0);for(let r=o;ru.length)throw Error("_sha2: outputLen bigger than state");for(let r=0;rr&i^~r&n,$91294e775a6684d7$var$Maj=(r,i,n)=>r&i^r&n^i&n,$91294e775a6684d7$var$SHA256_K=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),$91294e775a6684d7$var$IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),$91294e775a6684d7$var$SHA256_W=new Uint32Array(64);class $91294e775a6684d7$var$SHA256 extends $3dfc5518afabab7c$exports.SHA2{constructor(){super(64,32,8,!1),this.A=0|$91294e775a6684d7$var$IV[0],this.B=0|$91294e775a6684d7$var$IV[1],this.C=0|$91294e775a6684d7$var$IV[2],this.D=0|$91294e775a6684d7$var$IV[3],this.E=0|$91294e775a6684d7$var$IV[4],this.F=0|$91294e775a6684d7$var$IV[5],this.G=0|$91294e775a6684d7$var$IV[6],this.H=0|$91294e775a6684d7$var$IV[7]}get(){let{A:r,B:i,C:n,D:s,E:a,F:o,G:d,H:f}=this;return[r,i,n,s,a,o,d,f]}set(r,i,n,s,a,o,d,f){this.A=0|r,this.B=0|i,this.C=0|n,this.D=0|s,this.E=0|a,this.F=0|o,this.G=0|d,this.H=0|f}process(r,i){for(let n=0;n<16;n++,i+=4)$91294e775a6684d7$var$SHA256_W[n]=r.getUint32(i,!1);for(let r=16;r<64;r++){let i=$91294e775a6684d7$var$SHA256_W[r-15],n=$91294e775a6684d7$var$SHA256_W[r-2],s=(0,$bb5e1fcd97588e49$exports.rotr)(i,7)^(0,$bb5e1fcd97588e49$exports.rotr)(i,18)^i>>>3,a=(0,$bb5e1fcd97588e49$exports.rotr)(n,17)^(0,$bb5e1fcd97588e49$exports.rotr)(n,19)^n>>>10;$91294e775a6684d7$var$SHA256_W[r]=a+$91294e775a6684d7$var$SHA256_W[r-7]+s+$91294e775a6684d7$var$SHA256_W[r-16]|0}let{A:n,B:s,C:a,D:o,E:d,F:f,G:l,H:u}=this;for(let r=0;r<64;r++){let i=(0,$bb5e1fcd97588e49$exports.rotr)(d,6)^(0,$bb5e1fcd97588e49$exports.rotr)(d,11)^(0,$bb5e1fcd97588e49$exports.rotr)(d,25),c=u+i+$91294e775a6684d7$var$Chi(d,f,l)+$91294e775a6684d7$var$SHA256_K[r]+$91294e775a6684d7$var$SHA256_W[r]|0,p=(0,$bb5e1fcd97588e49$exports.rotr)(n,2)^(0,$bb5e1fcd97588e49$exports.rotr)(n,13)^(0,$bb5e1fcd97588e49$exports.rotr)(n,22),h=p+$91294e775a6684d7$var$Maj(n,s,a)|0;u=l,l=f,f=d,d=o+c|0,o=a,a=s,s=n,n=c+h|0}n=n+this.A|0,s=s+this.B|0,a=a+this.C|0,o=o+this.D|0,d=d+this.E|0,f=f+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,s,a,o,d,f,l,u)}roundClean(){$91294e775a6684d7$var$SHA256_W.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class $91294e775a6684d7$var$SHA224 extends $91294e775a6684d7$var$SHA256{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}}$91294e775a6684d7$exports.sha256=(0,$bb5e1fcd97588e49$exports.wrapConstructor)(()=>new $91294e775a6684d7$var$SHA256),$91294e775a6684d7$exports.sha224=(0,$bb5e1fcd97588e49$exports.wrapConstructor)(()=>new $91294e775a6684d7$var$SHA224);var $b37c4403146d31a9$exports={},$awmEs=parcelRequire("awmEs"),$b37c4403146d31a9$require$Buffer=$awmEs.Buffer,$9Mq5w=parcelRequire("9Mq5w");!function(r){$b37c4403146d31a9$exports=r()}(function(){return(function r(i,n,s){function a(d,f){if(!n[d]){if(!i[d]){var l=void 0;if(!f&&l)return l(d,!0);if(o)return o(d,!0);var u=Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[d]={exports:{}};i[d][0].call(c.exports,function(r){return a(i[d][1][r]||r)},c,c.exports,r,i,n,s)}return n[d].exports}for(var o=void 0,d=0;d>2,f=(3&i)<<4|n>>4,l=1>6:64,u=2>4,n=(15&d)<<4|(f=o.indexOf(r.charAt(u++)))>>2,s=(3&f)<<6|(l=o.indexOf(r.charAt(u++))),h[c++]=i,64!==f&&(h[c++]=n),64!==l&&(h[c++]=s);return h}},{"./support":30,"./utils":32}],2:[function(r,i,n){var s=r("./external"),a=r("./stream/DataWorker"),o=r("./stream/Crc32Probe"),d=r("./stream/DataLengthProbe");function f(r,i,n,s,a){this.compressedSize=r,this.uncompressedSize=i,this.crc32=n,this.compression=s,this.compressedContent=a}f.prototype={getContentWorker:function(){var r=new a(s.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new d("data_length")),i=this;return r.on("end",function(){if(this.streamInfo.data_length!==i.uncompressedSize)throw Error("Bug : uncompressed data size mismatch")}),r},getCompressedWorker:function(){return new a(s.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},f.createWorkerFrom=function(r,i,n){return r.pipe(new o).pipe(new d("uncompressedSize")).pipe(i.compressWorker(n)).pipe(new d("compressedSize")).withStreamInfo("compression",i)},i.exports=f},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(r,i,n){var s=r("./stream/GenericWorker");n.STORE={magic:"\x00\x00",compressWorker:function(){return new s("STORE compression")},uncompressWorker:function(){return new s("STORE decompression")}},n.DEFLATE=r("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(r,i,n){var s=r("./utils"),a=function(){for(var r,i=[],n=0;n<256;n++){r=n;for(var s=0;s<8;s++)r=1&r?3988292384^r>>>1:r>>>1;i[n]=r}return i}();i.exports=function(r,i){return void 0!==r&&r.length?"string"!==s.getTypeOf(r)?function(r,i,n,s){var o=a,d=s+n;r^=-1;for(var f=s;f>>8^o[255&(r^i[f])];return -1^r}(0|i,r,r.length,0):function(r,i,n,s){var o=a,d=s+n;r^=-1;for(var f=s;f>>8^o[255&(r^i.charCodeAt(f))];return -1^r}(0|i,r,r.length,0):0}},{"./utils":32}],5:[function(r,i,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(r,i,n){var s=null;s="undefined"!=typeof Promise?Promise:r("lie"),i.exports={Promise:s}},{lie:37}],7:[function(r,i,n){var s="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,a=r("pako"),o=r("./utils"),d=r("./stream/GenericWorker"),f=s?"uint8array":"array";function l(r,i){d.call(this,"FlateWorker/"+r),this._pako=null,this._pakoAction=r,this._pakoOptions=i,this.meta={}}n.magic="\b\x00",o.inherits(l,d),l.prototype.processChunk=function(r){this.meta=r.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(f,r.data),!1)},l.prototype.flush=function(){d.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){d.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new a[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var r=this;this._pako.onData=function(i){r.push({data:i,meta:r.meta})}},n.compressWorker=function(r){return new l("Deflate",r)},n.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(r,i,n){function s(r,i){var n,s="";for(n=0;n>>=8;return s}function a(r,i,n,a,d,c){var p,h,g=r.file,m=r.compression,v=c!==f.utf8encode,_=o.transformTo("string",c(g.name)),b=o.transformTo("string",f.utf8encode(g.name)),T=g.comment,E=o.transformTo("string",c(T)),w=o.transformTo("string",f.utf8encode(T)),S=b.length!==g.name.length,I=w.length!==T.length,O="",C="",A="",k=g.dir,M=g.date,D={crc32:0,compressedSize:0,uncompressedSize:0};i&&!n||(D.crc32=r.crc32,D.compressedSize=r.compressedSize,D.uncompressedSize=r.uncompressedSize);var P=0;i&&(P|=8),!v&&(S||I)&&(P|=2048);var N=0,q=0;k&&(N|=16),"UNIX"===d?(q=798,N|=function(r,i){var n=r;return r||(n=i?16893:33204),(65535&n)<<16}(g.unixPermissions,k)):(q=20,N|=function(r){return 63&(r||0)}(g.dosPermissions)),p=(M.getUTCHours()<<6|M.getUTCMinutes())<<5|M.getUTCSeconds()/2,h=(M.getUTCFullYear()-1980<<4|M.getUTCMonth()+1)<<5|M.getUTCDate(),S&&(C=s(1,1)+s(l(_),4)+b,O+="up"+s(C.length,2)+C),I&&(A=s(1,1)+s(l(E),4)+w,O+="uc"+s(A.length,2)+A);var B="";return B+="\n\x00"+s(P,2)+m.magic+s(p,2)+s(h,2)+s(D.crc32,4)+s(D.compressedSize,4)+s(D.uncompressedSize,4)+s(_.length,2)+s(O.length,2),{fileRecord:u.LOCAL_FILE_HEADER+B+_+O,dirRecord:u.CENTRAL_FILE_HEADER+s(q,2)+B+s(E.length,2)+"\x00\x00\x00\x00"+s(N,4)+s(a,4)+_+O+E}}var o=r("../utils"),d=r("../stream/GenericWorker"),f=r("../utf8"),l=r("../crc32"),u=r("../signature");function c(r,i,n,s){d.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=i,this.zipPlatform=n,this.encodeFileName=s,this.streamFiles=r,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(c,d),c.prototype.push=function(r){var i=r.meta.percent||0,n=this.entriesCount,s=this._sources.length;this.accumulate?this.contentBuffer.push(r):(this.bytesWritten+=r.data.length,d.prototype.push.call(this,{data:r.data,meta:{currentFile:this.currentFile,percent:n?(i+100*(n-s-1))/n:100}}))},c.prototype.openedSource=function(r){this.currentSourceOffset=this.bytesWritten,this.currentFile=r.file.name;var i=this.streamFiles&&!r.file.dir;if(i){var n=a(r,i,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:n.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(r){this.accumulate=!1;var i=this.streamFiles&&!r.file.dir,n=a(r,i,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),i)this.push({data:function(r){return u.DATA_DESCRIPTOR+s(r.crc32,4)+s(r.compressedSize,4)+s(r.uncompressedSize,4)}(r),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var r=this.bytesWritten,i=0;i=this.index;i--)n=(n<<8)+this.byteAt(i);return this.index+=r,n},readString:function(r){return s.transformTo("string",this.readData(r))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var r=this.readInt(4);return new Date(Date.UTC(1980+(r>>25&127),(r>>21&15)-1,r>>16&31,r>>11&31,r>>5&63,(31&r)<<1))}},i.exports=a},{"../utils":32}],19:[function(r,i,n){var s=r("./Uint8ArrayReader");function a(r){s.call(this,r)}r("../utils").inherits(a,s),a.prototype.readData=function(r){this.checkOffset(r);var i=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,i},i.exports=a},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(r,i,n){var s=r("./DataReader");function a(r){s.call(this,r)}r("../utils").inherits(a,s),a.prototype.byteAt=function(r){return this.data.charCodeAt(this.zero+r)},a.prototype.lastIndexOfSignature=function(r){return this.data.lastIndexOf(r)-this.zero},a.prototype.readAndCheckSignature=function(r){return r===this.readData(4)},a.prototype.readData=function(r){this.checkOffset(r);var i=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,i},i.exports=a},{"../utils":32,"./DataReader":18}],21:[function(r,i,n){var s=r("./ArrayReader");function a(r){s.call(this,r)}r("../utils").inherits(a,s),a.prototype.readData=function(r){if(this.checkOffset(r),0===r)return new Uint8Array(0);var i=this.data.subarray(this.zero+this.index,this.zero+this.index+r);return this.index+=r,i},i.exports=a},{"../utils":32,"./ArrayReader":17}],22:[function(r,i,n){var s=r("../utils"),a=r("../support"),o=r("./ArrayReader"),d=r("./StringReader"),f=r("./NodeBufferReader"),l=r("./Uint8ArrayReader");i.exports=function(r){var i=s.getTypeOf(r);return s.checkSupport(i),"string"!==i||a.uint8array?"nodebuffer"===i?new f(r):a.uint8array?new l(s.transformTo("uint8array",r)):new o(s.transformTo("array",r)):new d(r)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(r,i,n){n.LOCAL_FILE_HEADER="PK\x03\x04",n.CENTRAL_FILE_HEADER="PK\x01\x02",n.CENTRAL_DIRECTORY_END="PK\x05\x06",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x06\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK\x06\x06",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(r,i,n){var s=r("./GenericWorker"),a=r("../utils");function o(r){s.call(this,"ConvertWorker to "+r),this.destType=r}a.inherits(o,s),o.prototype.processChunk=function(r){this.push({data:a.transformTo(this.destType,r.data),meta:r.meta})},i.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(r,i,n){var s=r("./GenericWorker"),a=r("../crc32");function o(){s.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}r("../utils").inherits(o,s),o.prototype.processChunk=function(r){this.streamInfo.crc32=a(r.data,this.streamInfo.crc32||0),this.push(r)},i.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(r,i,n){var s=r("../utils"),a=r("./GenericWorker");function o(r){a.call(this,"DataLengthProbe for "+r),this.propName=r,this.withStreamInfo(r,0)}s.inherits(o,a),o.prototype.processChunk=function(r){if(r){var i=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=i+r.data.length}a.prototype.processChunk.call(this,r)},i.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(r,i,n){var s=r("../utils"),a=r("./GenericWorker");function o(r){a.call(this,"DataWorker");var i=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,r.then(function(r){i.dataIsReady=!0,i.data=r,i.max=r&&r.length||0,i.type=s.getTypeOf(r),i.isPaused||i._tickAndRepeat()},function(r){i.error(r)})}s.inherits(o,a),o.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!a.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,s.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(s.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var r=null,i=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":r=this.data.substring(this.index,i);break;case"uint8array":r=this.data.subarray(this.index,i);break;case"array":case"nodebuffer":r=this.data.slice(this.index,i)}return this.index=i,this.push({data:r,meta:{percent:this.max?this.index/this.max*100:0}})},i.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(r,i,n){function s(r){this.name=r||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}s.prototype={push:function(r){this.emit("data",r)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(r){this.emit("error",r)}return!0},error:function(r){return!this.isFinished&&(this.isPaused?this.generatedError=r:(this.isFinished=!0,this.emit("error",r),this.previous&&this.previous.error(r),this.cleanUp()),!0)},on:function(r,i){return this._listeners[r].push(i),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(r,i){if(this._listeners[r])for(var n=0;n "+r:r}},i.exports=s},{}],29:[function(r,i,n){var s=r("../utils"),a=r("./ConvertWorker"),o=r("./GenericWorker"),d=r("../base64"),f=r("../support"),l=r("../external"),u=null;if(f.nodestream)try{u=r("../nodejs/NodejsStreamOutputAdapter")}catch(r){}function c(r,i){return new l.Promise(function(n,a){var o=[],f=r._internalType,l=r._outputType,u=r._mimeType;r.on("data",function(r,n){o.push(r),i&&i(n)}).on("error",function(r){o=[],a(r)}).on("end",function(){try{var r=function(r,i,n){switch(r){case"blob":return s.newBlob(s.transformTo("arraybuffer",i),n);case"base64":return d.encode(i);default:return s.transformTo(r,i)}}(l,function(r,i){var n,s=0,a=null,o=0;for(n=0;n>>6:(n<65536?i[d++]=224|n>>>12:(i[d++]=240|n>>>18,i[d++]=128|n>>>12&63),i[d++]=128|n>>>6&63),i[d++]=128|63&n);return i}(r)},n.utf8decode=function(r){return a.nodebuffer?s.transformTo("nodebuffer",r).toString("utf-8"):function(r){var i,n,a,o,d=r.length,l=Array(2*d);for(i=n=0;i>10&1023,l[n++]=56320|1023&a)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),s.applyFromCharCode(l)}(r=s.transformTo(a.uint8array?"uint8array":"array",r))},s.inherits(u,d),u.prototype.processChunk=function(r){var i=s.transformTo(a.uint8array?"uint8array":"array",r.data);if(this.leftOver&&this.leftOver.length){if(a.uint8array){var o=i;(i=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),i.set(o,this.leftOver.length)}else i=this.leftOver.concat(i);this.leftOver=null}var d=function(r,i){var n;for((i=i||r.length)>r.length&&(i=r.length),n=i-1;0<=n&&128==(192&r[n]);)n--;return n<0?i:0===n?i:n+f[r[n]]>i?n:i}(i),l=i;d!==i.length&&(a.uint8array?(l=i.subarray(0,d),this.leftOver=i.subarray(d,i.length)):(l=i.slice(0,d),this.leftOver=i.slice(d,i.length))),this.push({data:n.utf8decode(l),meta:r.meta})},u.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=u,s.inherits(c,d),c.prototype.processChunk=function(r){this.push({data:n.utf8encode(r.data),meta:r.meta})},n.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(r,i,n){var s=r("./support"),a=r("./base64"),o=r("./nodejsUtils"),d=r("./external");function f(r){return r}function l(r,i){for(var n=0;n>8;this.dir=!!(16&this.externalFileAttributes),0==r&&(this.dosPermissions=63&this.externalFileAttributes),3==r&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var r=s(this.extraFields[1].value);this.uncompressedSize===a.MAX_VALUE_32BITS&&(this.uncompressedSize=r.readInt(8)),this.compressedSize===a.MAX_VALUE_32BITS&&(this.compressedSize=r.readInt(8)),this.localHeaderOffset===a.MAX_VALUE_32BITS&&(this.localHeaderOffset=r.readInt(8)),this.diskNumberStart===a.MAX_VALUE_32BITS&&(this.diskNumberStart=r.readInt(4))}},readExtraFields:function(r){var i,n,s,a=r.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});r.index+4>>6:(n<65536?i[d++]=224|n>>>12:(i[d++]=240|n>>>18,i[d++]=128|n>>>12&63),i[d++]=128|n>>>6&63),i[d++]=128|63&n);return i},n.buf2binstring=function(r){return l(r,r.length)},n.binstring2buf=function(r){for(var i=new s.Buf8(r.length),n=0,a=i.length;n>10&1023,u[s++]=56320|1023&a)}return l(u,s)},n.utf8border=function(r,i){var n;for((i=i||r.length)>r.length&&(i=r.length),n=i-1;0<=n&&128==(192&r[n]);)n--;return n<0?i:0===n?i:n+d[r[n]]>i?n:i}},{"./common":41}],43:[function(r,i,n){i.exports=function(r,i,n,s){for(var a=65535&r|0,o=r>>>16&65535|0,d=0;0!==n;){for(n-=d=2e3>>1:r>>>1;i[n]=r}return i}();i.exports=function(r,i,n,a){var o=s,d=a+n;r^=-1;for(var f=a;f>>8^o[255&(r^i[f])];return -1^r}},{}],46:[function(r,i,n){var s,a=r("../utils/common"),o=r("./trees"),d=r("./adler32"),f=r("./crc32"),l=r("./messages"),u=0,c=4,p=0,h=-2,g=-1,m=4,v=2,_=8,b=9,T=286,E=30,w=19,S=573,I=15,O=3,C=258,A=262,k=42,M=113,D=1,P=2,N=3,q=4;function B(r,i){return r.msg=l[i],i}function L(r){return(r<<1)-(4r.avail_out&&(n=r.avail_out),0!==n&&(a.arraySet(r.output,i.pending_buf,i.pending_out,n,r.next_out),r.next_out+=n,i.pending_out+=n,r.total_out+=n,r.avail_out-=n,i.pending-=n,0===i.pending&&(i.pending_out=0))}function H(r,i){o._tr_flush_block(r,0<=r.block_start?r.block_start:-1,r.strstart-r.block_start,i),r.block_start=r.strstart,U(r.strm)}function z(r,i){r.pending_buf[r.pending++]=i}function G(r,i){r.pending_buf[r.pending++]=i>>>8&255,r.pending_buf[r.pending++]=255&i}function V(r,i){var n,s,a=r.max_chain_length,o=r.strstart,d=r.prev_length,f=r.nice_match,l=r.strstart>r.w_size-A?r.strstart-(r.w_size-A):0,u=r.window,c=r.w_mask,p=r.prev,h=r.strstart+C,g=u[o+d-1],m=u[o+d];r.prev_length>=r.good_match&&(a>>=2),f>r.lookahead&&(f=r.lookahead);do if(u[(n=i)+d]===m&&u[n+d-1]===g&&u[n]===u[o]&&u[++n]===u[o+1]){o+=2,n++;do;while(u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&ol&&0!=--a)return d<=r.lookahead?d:r.lookahead}function K(r){var i,n,s,o,l,u,c,p,h,g,m=r.w_size;do{if(o=r.window_size-r.lookahead-r.strstart,r.strstart>=m+(m-A)){for(a.arraySet(r.window,r.window,m,m,0),r.match_start-=m,r.strstart-=m,r.block_start-=m,i=n=r.hash_size;s=r.head[--i],r.head[i]=m<=s?s-m:0,--n;);for(i=n=m;s=r.prev[--i],r.prev[i]=m<=s?s-m:0,--n;);o+=m}if(0===r.strm.avail_in)break;if(u=r.strm,c=r.window,p=r.strstart+r.lookahead,h=o,g=void 0,g=u.avail_in,h=O)for(l=r.strstart-r.insert,r.ins_h=r.window[l],r.ins_h=(r.ins_h<=O&&(r.ins_h=(r.ins_h<=O){if(s=o._tr_tally(r,r.strstart-r.match_start,r.match_length-O),r.lookahead-=r.match_length,r.match_length<=r.max_lazy_match&&r.lookahead>=O){for(r.match_length--;r.strstart++,r.ins_h=(r.ins_h<=O&&(r.ins_h=(r.ins_h<=O&&r.match_length<=r.prev_length){for(a=r.strstart+r.lookahead-O,s=o._tr_tally(r,r.strstart-1-r.prev_match,r.prev_length-O),r.lookahead-=r.prev_length-1,r.prev_length-=2;++r.strstart<=a&&(r.ins_h=(r.ins_h<r.pending_buf_size-5&&(n=r.pending_buf_size-5);;){if(r.lookahead<=1){if(K(r),0===r.lookahead&&i===u)return D;if(0===r.lookahead)break}r.strstart+=r.lookahead,r.lookahead=0;var s=r.block_start+n;if((0===r.strstart||r.strstart>=s)&&(r.lookahead=r.strstart-s,r.strstart=s,H(r,!1),0===r.strm.avail_out)||r.strstart-r.block_start>=r.w_size-A&&(H(r,!1),0===r.strm.avail_out))return D}return r.insert=0,i===c?(H(r,!0),0===r.strm.avail_out?N:q):(r.strstart>r.block_start&&(H(r,!1),r.strm.avail_out),D)}),new Y(4,4,8,4,W),new Y(4,5,16,8,W),new Y(4,6,32,32,W),new Y(4,4,16,16,$),new Y(8,16,32,32,$),new Y(8,16,128,128,$),new Y(8,32,128,256,$),new Y(32,128,258,1024,$),new Y(32,258,258,4096,$)],n.deflateInit=function(r,i){return Q(r,i,_,15,8,0)},n.deflateInit2=Q,n.deflateReset=J,n.deflateResetKeep=X,n.deflateSetHeader=function(r,i){return r&&r.state?2!==r.state.wrap?h:(r.state.gzhead=i,p):h},n.deflate=function(r,i){var n,a,d,l;if(!r||!r.state||5>8&255),z(a,a.gzhead.time>>16&255),z(a,a.gzhead.time>>24&255),z(a,9===a.level?2:2<=a.strategy||a.level<2?4:0),z(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(z(a,255&a.gzhead.extra.length),z(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(r.adler=f(r.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69):(z(a,0),z(a,0),z(a,0),z(a,0),z(a,0),z(a,9===a.level?2:2<=a.strategy||a.level<2?4:0),z(a,3),a.status=M);else{var g=_+(a.w_bits-8<<4)<<8;g|=(2<=a.strategy||a.level<2?0:a.level<6?1:6===a.level?2:3)<<6,0!==a.strstart&&(g|=32),g+=31-g%31,a.status=M,G(a,g),0!==a.strstart&&(G(a,r.adler>>>16),G(a,65535&r.adler)),r.adler=1}}if(69===a.status){if(a.gzhead.extra){for(d=a.pending;a.gzindex<(65535&a.gzhead.extra.length)&&(a.pending!==a.pending_buf_size||(a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),U(r),d=a.pending,a.pending!==a.pending_buf_size));)z(a,255&a.gzhead.extra[a.gzindex]),a.gzindex++;a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),a.gzindex===a.gzhead.extra.length&&(a.gzindex=0,a.status=73)}else a.status=73}if(73===a.status){if(a.gzhead.name){d=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),U(r),d=a.pending,a.pending===a.pending_buf_size)){l=1;break}l=a.gzindexd&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),0===l&&(a.gzindex=0,a.status=91)}else a.status=91}if(91===a.status){if(a.gzhead.comment){d=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),U(r),d=a.pending,a.pending===a.pending_buf_size)){l=1;break}l=a.gzindexd&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),0===l&&(a.status=103)}else a.status=103}if(103===a.status&&(a.gzhead.hcrc?(a.pending+2>a.pending_buf_size&&U(r),a.pending+2<=a.pending_buf_size&&(z(a,255&r.adler),z(a,r.adler>>8&255),r.adler=0,a.status=M)):a.status=M),0!==a.pending){if(U(r),0===r.avail_out)return a.last_flush=-1,p}else if(0===r.avail_in&&L(i)<=L(n)&&i!==c)return B(r,-5);if(666===a.status&&0!==r.avail_in)return B(r,-5);if(0!==r.avail_in||0!==a.lookahead||i!==u&&666!==a.status){var m=2===a.strategy?function(r,i){for(var n;;){if(0===r.lookahead&&(K(r),0===r.lookahead)){if(i===u)return D;break}if(r.match_length=0,n=o._tr_tally(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++,n&&(H(r,!1),0===r.strm.avail_out))return D}return r.insert=0,i===c?(H(r,!0),0===r.strm.avail_out?N:q):r.last_lit&&(H(r,!1),0===r.strm.avail_out)?D:P}(a,i):3===a.strategy?function(r,i){for(var n,s,a,d,f=r.window;;){if(r.lookahead<=C){if(K(r),r.lookahead<=C&&i===u)return D;if(0===r.lookahead)break}if(r.match_length=0,r.lookahead>=O&&0r.lookahead&&(r.match_length=r.lookahead)}if(r.match_length>=O?(n=o._tr_tally(r,1,r.match_length-O),r.lookahead-=r.match_length,r.strstart+=r.match_length,r.match_length=0):(n=o._tr_tally(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++),n&&(H(r,!1),0===r.strm.avail_out))return D}return r.insert=0,i===c?(H(r,!0),0===r.strm.avail_out?N:q):r.last_lit&&(H(r,!1),0===r.strm.avail_out)?D:P}(a,i):s[a.level].func(a,i);if(m!==N&&m!==q||(a.status=666),m===D||m===N)return 0===r.avail_out&&(a.last_flush=-1),p;if(m===P&&(1===i?o._tr_align(a):5!==i&&(o._tr_stored_block(a,0,0,!1),3===i&&(F(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),U(r),0===r.avail_out))return a.last_flush=-1,p}return i!==c?p:a.wrap<=0?1:(2===a.wrap?(z(a,255&r.adler),z(a,r.adler>>8&255),z(a,r.adler>>16&255),z(a,r.adler>>24&255),z(a,255&r.total_in),z(a,r.total_in>>8&255),z(a,r.total_in>>16&255),z(a,r.total_in>>24&255)):(G(a,r.adler>>>16),G(a,65535&r.adler)),U(r),0=n.w_size&&(0===f&&(F(n.head),n.strstart=0,n.block_start=0,n.insert=0),g=new a.Buf8(n.w_size),a.arraySet(g,i,m-n.w_size,n.w_size,0),i=g,m=n.w_size),l=r.avail_in,u=r.next_in,c=r.input,r.avail_in=m,r.next_in=0,r.input=i,K(n);n.lookahead>=O;){for(s=n.strstart,o=n.lookahead-(O-1);n.ins_h=(n.ins_h<>>=w=E>>>24,m-=w,0==(w=E>>>16&255))k[o++]=65535&E;else{if(!(16&w)){if(0==(64&w)){E=v[(65535&E)+(g&(1<>>=w,m-=w),m<15&&(g+=A[s++]<>>=w=E>>>24,m-=w,!(16&(w=E>>>16&255))){if(0==(64&w)){E=_[(65535&E)+(g&(1<>>=w,m-=w,(w=o-d)>3,g&=(1<<(m-=S<<3))-1,r.next_in=s,r.next_out=o,r.avail_in=s>>24&255)+(r>>>8&65280)+((65280&r)<<8)+((255&r)<<24)}function _(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function b(r){var i;return r&&r.state?(i=r.state,r.total_in=r.total_out=i.total=0,r.msg="",i.wrap&&(r.adler=1&i.wrap),i.mode=h,i.last=0,i.havedict=0,i.dmax=32768,i.head=null,i.hold=0,i.bits=0,i.lencode=i.lendyn=new s.Buf32(g),i.distcode=i.distdyn=new s.Buf32(m),i.sane=1,i.back=-1,c):p}function T(r){var i;return r&&r.state?((i=r.state).wsize=0,i.whave=0,i.wnext=0,b(r)):p}function E(r,i){var n,s;return r&&r.state?(s=r.state,i<0?(n=0,i=-i):(n=1+(i>>4),i<48&&(i&=15)),i&&(i<8||15=d.wsize?(s.arraySet(d.window,i,n-d.wsize,d.wsize,0),d.wnext=0,d.whave=d.wsize):(a<(o=d.wsize-d.wnext)&&(o=a),s.arraySet(d.window,i,n-a,o,d.wnext),(a-=o)?(s.arraySet(d.window,i,n-a,a,0),d.wnext=a,d.whave=d.wsize):(d.wnext+=o,d.wnext===d.wsize&&(d.wnext=0),d.whave>>8&255,n.check=o(n.check,K,2,0),S=w=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&w)<<8)+(w>>8))%31){r.msg="incorrect header check",n.mode=30;break}if(8!=(15&w)){r.msg="unknown compression method",n.mode=30;break}if(S-=4,U=8+(15&(w>>>=4)),0===n.wbits)n.wbits=U;else if(U>n.wbits){r.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(K[0]=255&w,K[1]=w>>>8&255,n.check=o(n.check,K,2,0)),S=w=0,n.mode=3;case 3:for(;S<32;){if(0===T)break i;T--,w+=g[_++]<>>8&255,K[2]=w>>>16&255,K[3]=w>>>24&255,n.check=o(n.check,K,4,0)),S=w=0,n.mode=4;case 4:for(;S<16;){if(0===T)break i;T--,w+=g[_++]<>8),512&n.flags&&(K[0]=255&w,K[1]=w>>>8&255,n.check=o(n.check,K,2,0)),S=w=0,n.mode=5;case 5:if(1024&n.flags){for(;S<16;){if(0===T)break i;T--,w+=g[_++]<>>8&255,n.check=o(n.check,K,2,0)),S=w=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(T<(k=n.length)&&(k=T),k&&(n.head&&(U=n.head.extra_len-n.length,n.head.extra||(n.head.extra=Array(n.head.extra_len)),s.arraySet(n.head.extra,g,_,k,U)),512&n.flags&&(n.check=o(n.check,g,k,_)),T-=k,_+=k,n.length-=k),n.length))break i;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===T)break i;for(k=0;U=g[_+k++],n.head&&U&&n.length<65536&&(n.head.name+=String.fromCharCode(U)),U&&k>9&1,n.head.done=!0),r.adler=n.check=0,n.mode=12;break;case 10:for(;S<32;){if(0===T)break i;T--,w+=g[_++]<>>=7&S,S-=7&S,n.mode=27;break}for(;S<3;){if(0===T)break i;T--,w+=g[_++]<>>=1)){case 0:n.mode=14;break;case 1:if(C(n),n.mode=20,6!==i)break;w>>>=2,S-=2;break i;case 2:n.mode=17;break;case 3:r.msg="invalid block type",n.mode=30}w>>>=2,S-=2;break;case 14:for(w>>>=7&S,S-=7&S;S<32;){if(0===T)break i;T--,w+=g[_++]<>>16^65535)){r.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&w,S=w=0,n.mode=15,6===i)break i;case 15:n.mode=16;case 16:if(k=n.length){if(T>>=5,S-=5,n.ndist=1+(31&w),w>>>=5,S-=5,n.ncode=4+(15&w),w>>>=4,S-=4,286>>=3,S-=3}for(;n.have<19;)n.lens[W[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,z={bits:n.lenbits},H=f(0,n.lens,0,19,n.lencode,0,n.work,z),n.lenbits=z.bits,H){r.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,q=65535&V,!((P=V>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>>=P,S-=P,n.lens[n.have++]=q;else{if(16===q){for(G=P+2;S>>=P,S-=P,0===n.have){r.msg="invalid bit length repeat",n.mode=30;break}U=n.lens[n.have-1],k=3+(3&w),w>>>=2,S-=2}else if(17===q){for(G=P+3;S>>=P)),w>>>=3,S-=3}else{for(G=P+7;S>>=P)),w>>>=7,S-=7}if(n.have+k>n.nlen+n.ndist){r.msg="invalid bit length repeat",n.mode=30;break}for(;k--;)n.lens[n.have++]=U}}if(30===n.mode)break;if(0===n.lens[256]){r.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,z={bits:n.lenbits},H=f(l,n.lens,0,n.nlen,n.lencode,0,n.work,z),n.lenbits=z.bits,H){r.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,z={bits:n.distbits},H=f(u,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,z),n.distbits=z.bits,H){r.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===i)break i;case 20:n.mode=21;case 21:if(6<=T&&258<=E){r.next_out=b,r.avail_out=E,r.next_in=_,r.avail_in=T,n.hold=w,n.bits=S,d(r,O),b=r.next_out,m=r.output,E=r.avail_out,_=r.next_in,g=r.input,T=r.avail_in,w=n.hold,S=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;N=(V=n.lencode[w&(1<>>16&255,q=65535&V,!((P=V>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>B)])>>>16&255,q=65535&V,!(B+(P=V>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>>=B,S-=B,n.back+=B}if(w>>>=P,S-=P,n.back+=P,n.length=q,0===N){n.mode=26;break}if(32&N){n.back=-1,n.mode=12;break}if(64&N){r.msg="invalid literal/length code",n.mode=30;break}n.extra=15&N,n.mode=22;case 22:if(n.extra){for(G=n.extra;S>>=n.extra,S-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;N=(V=n.distcode[w&(1<>>16&255,q=65535&V,!((P=V>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>B)])>>>16&255,q=65535&V,!(B+(P=V>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>>=B,S-=B,n.back+=B}if(w>>>=P,S-=P,n.back+=P,64&N){r.msg="invalid distance code",n.mode=30;break}n.offset=q,n.extra=15&N,n.mode=24;case 24:if(n.extra){for(G=n.extra;S>>=n.extra,S-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){r.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===E)break i;if(k=O-E,n.offset>k){if((k=n.offset-k)>n.whave&&n.sane){r.msg="invalid distance too far back",n.mode=30;break}M=k>n.wnext?(k-=n.wnext,n.wsize-k):n.wnext-k,k>n.length&&(k=n.length),D=n.window}else D=m,M=b-n.offset,k=n.length;for(ET?(w=z[G+p[C]],L[F+p[C]]):(w=96,0),g=1<>P)+(m-=g)]=E<<24|w<<16|S|0,0!==m;);for(g=1<>=1;if(0!==g?(B&=g-1,B+=g):B=0,C++,0==--U[O]){if(O===k)break;O=i[n+p[C]]}if(M>>7)]}function z(r,i){r.pending_buf[r.pending++]=255&i,r.pending_buf[r.pending++]=i>>>8&255}function G(r,i,n){r.bi_valid>v-n?(r.bi_buf|=i<>v-r.bi_valid,r.bi_valid+=n-v):(r.bi_buf|=i<>>=1,n<<=1,0<--i;);return n>>>1}function W(r,i,n){var s,a,o=Array(m+1),d=0;for(s=1;s<=m;s++)o[s]=d=d+n[s-1]<<1;for(a=0;a<=i;a++){var f=r[2*a+1];0!==f&&(r[2*a]=K(o[f]++,f))}}function $(r){var i;for(i=0;i>1;1<=n;n--)X(r,o,n);for(a=l;n=r.heap[1],r.heap[1]=r.heap[r.heap_len--],X(r,o,1),s=r.heap[1],r.heap[--r.heap_max]=n,r.heap[--r.heap_max]=s,o[2*a]=o[2*n]+o[2*s],r.depth[a]=(r.depth[n]>=r.depth[s]?r.depth[n]:r.depth[s])+1,o[2*n+1]=o[2*s+1]=a,r.heap[1]=a++,X(r,o,1),2<=r.heap_len;);r.heap[--r.heap_max]=r.heap[1],function(r,i){var n,s,a,o,d,f,l=i.dyn_tree,u=i.max_code,c=i.stat_desc.static_tree,p=i.stat_desc.has_stree,h=i.stat_desc.extra_bits,v=i.stat_desc.extra_base,_=i.stat_desc.max_length,b=0;for(o=0;o<=m;o++)r.bl_count[o]=0;for(l[2*r.heap[r.heap_max]+1]=0,n=r.heap_max+1;n>=7;s>>=1)if(1&n&&0!==r.dyn_ltree[2*i])return a;if(0!==r.dyn_ltree[18]||0!==r.dyn_ltree[20]||0!==r.dyn_ltree[26])return o;for(i=32;i>>3,(f=r.static_len+3+7>>>3)<=d&&(d=f)):d=f=n+5,n+4<=d&&-1!==i?en(r,i,n,s):4===r.strategy||f===d?(G(r,2+(s?1:0),3),J(r,A,k)):(G(r,4+(s?1:0),3),function(r,i,n,s){var a;for(G(r,i-257,5),G(r,n-1,5),G(r,s-4,4),a=0;a>>8&255,r.pending_buf[r.d_buf+2*r.last_lit+1]=255&i,r.pending_buf[r.l_buf+r.last_lit]=255&n,r.last_lit++,0===i?r.dyn_ltree[2*n]++:(r.matches++,i--,r.dyn_ltree[2*(D[n]+u+1)]++,r.dyn_dtree[2*H(i)]++),r.last_lit===r.lit_bufsize-1},n._tr_align=function(r){G(r,2,3),V(r,b,A),function(r){16===r.bi_valid?(z(r,r.bi_buf),r.bi_buf=0,r.bi_valid=0):8<=r.bi_valid&&(r.pending_buf[r.pending++]=255&r.bi_buf,r.bi_buf>>=8,r.bi_valid-=8)}(r)}},{"../utils/common":41}],53:[function(r,i,n){i.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(r,i,n){(function(r){!function(r,i){if(!r.setImmediate){var n,s,a,o,d=1,f={},l=!1,u=r.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(r);c=c&&c.setTimeout?c:r,n="[object process]"===({}).toString.call(r.process)?function(r){$9Mq5w.nextTick(function(){h(r)})}:!function(){if(r.postMessage&&!r.importScripts){var i=!0,n=r.onmessage;return r.onmessage=function(){i=!1},r.postMessage("","*"),r.onmessage=n,i}}()?r.MessageChannel?((a=new MessageChannel).port1.onmessage=function(r){h(r.data)},function(r){a.port2.postMessage(r)}):u&&"onreadystatechange"in u.createElement("script")?(s=u.documentElement,function(r){var i=u.createElement("script");i.onreadystatechange=function(){h(r),i.onreadystatechange=null,s.removeChild(i),i=null},s.appendChild(i)}):function(r){setTimeout(h,0,r)}:(o="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",g,!1):r.attachEvent("onmessage",g),function(i){r.postMessage(o+i,"*")}),c.setImmediate=function(r){"function"!=typeof r&&(r=Function(""+r));for(var i=Array(arguments.length-1),s=0;s>$2be1c3a1d39d0a84$var$_7n)*$2be1c3a1d39d0a84$var$_0x71n)%$2be1c3a1d39d0a84$var$_256n)&$2be1c3a1d39d0a84$var$_2n&&(t^=$2be1c3a1d39d0a84$var$_1n<<($2be1c3a1d39d0a84$var$_1n<n>32?$c886d2710269b158$exports.default.rotlBH(r,i,n):$c886d2710269b158$exports.default.rotlSH(r,i,n),$2be1c3a1d39d0a84$var$rotlL=(r,i,n)=>n>32?$c886d2710269b158$exports.default.rotlBL(r,i,n):$c886d2710269b158$exports.default.rotlSL(r,i,n);function $2be1c3a1d39d0a84$var$keccakP(r,i=24){let n=new Uint32Array(10);for(let s=24-i;s<24;s++){for(let i=0;i<10;i++)n[i]=r[i]^r[i+10]^r[i+20]^r[i+30]^r[i+40];for(let i=0;i<10;i+=2){let s=(i+8)%10,a=(i+2)%10,o=n[a],d=n[a+1],f=$2be1c3a1d39d0a84$var$rotlH(o,d,1)^n[s],l=$2be1c3a1d39d0a84$var$rotlL(o,d,1)^n[s+1];for(let n=0;n<50;n+=10)r[i+n]^=f,r[i+n+1]^=l}let i=r[2],a=r[3];for(let n=0;n<24;n++){let s=$2be1c3a1d39d0a84$var$SHA3_ROTL[n],o=$2be1c3a1d39d0a84$var$rotlH(i,a,s),d=$2be1c3a1d39d0a84$var$rotlL(i,a,s),f=$2be1c3a1d39d0a84$var$SHA3_PI[n];i=r[f],a=r[f+1],r[f]=o,r[f+1]=d}for(let i=0;i<50;i+=10){for(let s=0;s<10;s++)n[s]=r[i+s];for(let s=0;s<10;s++)r[i+s]^=~n[(s+2)%10]&n[(s+4)%10]}r[0]^=$2be1c3a1d39d0a84$var$SHA3_IOTA_H[s],r[1]^=$2be1c3a1d39d0a84$var$SHA3_IOTA_L[s]}n.fill(0)}$2be1c3a1d39d0a84$exports.keccakP=$2be1c3a1d39d0a84$var$keccakP;class $2be1c3a1d39d0a84$var$Keccak extends $bb5e1fcd97588e49$exports.Hash{constructor(r,i,n,s=!1,a=24){if(super(),this.blockLen=r,this.suffix=i,this.outputLen=n,this.enableXOF=s,this.rounds=a,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,$a240473818576109$exports.default.number(n),0>=this.blockLen||this.blockLen>=200)throw Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,$bb5e1fcd97588e49$exports.u32)(this.state)}keccak(){$2be1c3a1d39d0a84$var$keccakP(this.state32,this.rounds),this.posOut=0,this.pos=0}update(r){$a240473818576109$exports.default.exists(this);let{blockLen:i,state:n}=this;r=(0,$bb5e1fcd97588e49$exports.toBytes)(r);let s=r.length;for(let a=0;a=n&&this.keccak();let o=Math.min(n-this.posOut,a-s);r.set(i.subarray(this.posOut,this.posOut+o),s),this.posOut+=o,s+=o}return r}xofInto(r){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(r)}xof(r){return $a240473818576109$exports.default.number(r),this.xofInto(new Uint8Array(r))}digestInto(r){if($a240473818576109$exports.default.output(r,this),this.finished)throw Error("digest() was already called");return this.writeInto(r),this.destroy(),r}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(r){let{blockLen:i,suffix:n,outputLen:s,rounds:a,enableXOF:o}=this;return r||(r=new $2be1c3a1d39d0a84$var$Keccak(i,n,s,o,a)),r.state32.set(this.state32),r.pos=this.pos,r.posOut=this.posOut,r.finished=this.finished,r.rounds=a,r.suffix=n,r.outputLen=s,r.enableXOF=o,r.destroyed=this.destroyed,r}}$2be1c3a1d39d0a84$exports.Keccak=$2be1c3a1d39d0a84$var$Keccak;const $2be1c3a1d39d0a84$var$gen=(r,i,n)=>(0,$bb5e1fcd97588e49$exports.wrapConstructor)(()=>new $2be1c3a1d39d0a84$var$Keccak(i,r,n));$2be1c3a1d39d0a84$exports.sha3_224=$2be1c3a1d39d0a84$var$gen(6,144,28),$2be1c3a1d39d0a84$exports.sha3_256=$2be1c3a1d39d0a84$var$gen(6,136,32),$2be1c3a1d39d0a84$exports.sha3_384=$2be1c3a1d39d0a84$var$gen(6,104,48),$2be1c3a1d39d0a84$exports.sha3_512=$2be1c3a1d39d0a84$var$gen(6,72,64),$2be1c3a1d39d0a84$exports.keccak_224=$2be1c3a1d39d0a84$var$gen(1,144,28),$2be1c3a1d39d0a84$exports.keccak_256=$2be1c3a1d39d0a84$var$gen(1,136,32),$2be1c3a1d39d0a84$exports.keccak_384=$2be1c3a1d39d0a84$var$gen(1,104,48),$2be1c3a1d39d0a84$exports.keccak_512=$2be1c3a1d39d0a84$var$gen(1,72,64);const $2be1c3a1d39d0a84$var$genShake=(r,i,n)=>(0,$bb5e1fcd97588e49$exports.wrapXOFConstructorWithOpts)((s={})=>new $2be1c3a1d39d0a84$var$Keccak(i,r,void 0===s.dkLen?n:s.dkLen,!0));$2be1c3a1d39d0a84$exports.shake128=$2be1c3a1d39d0a84$var$genShake(31,168,16),$2be1c3a1d39d0a84$exports.shake256=$2be1c3a1d39d0a84$var$genShake(31,136,32);var $692be64e687bb0ca$exports={};Object.defineProperty($692be64e687bb0ca$exports,"__esModule",{value:!0}),$692be64e687bb0ca$exports.blake2b=void 0;const $692be64e687bb0ca$var$IV=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),$692be64e687bb0ca$var$BUF=new Uint32Array(32);function $692be64e687bb0ca$var$G1(r,i,n,s,a,o){let d=a[o],f=a[o+1],l=$692be64e687bb0ca$var$BUF[2*r],u=$692be64e687bb0ca$var$BUF[2*r+1],c=$692be64e687bb0ca$var$BUF[2*i],p=$692be64e687bb0ca$var$BUF[2*i+1],h=$692be64e687bb0ca$var$BUF[2*n],g=$692be64e687bb0ca$var$BUF[2*n+1],m=$692be64e687bb0ca$var$BUF[2*s],v=$692be64e687bb0ca$var$BUF[2*s+1],_=$c886d2710269b158$exports.default.add3L(l,c,d);u=$c886d2710269b158$exports.default.add3H(_,u,p,f),l=0|_,({Dh:v,Dl:m}={Dh:v^u,Dl:m^l}),({Dh:v,Dl:m}={Dh:$c886d2710269b158$exports.default.rotr32H(v,m),Dl:$c886d2710269b158$exports.default.rotr32L(v,m)}),({h:g,l:h}=$c886d2710269b158$exports.default.add(g,h,v,m)),({Bh:p,Bl:c}={Bh:p^g,Bl:c^h}),({Bh:p,Bl:c}={Bh:$c886d2710269b158$exports.default.rotrSH(p,c,24),Bl:$c886d2710269b158$exports.default.rotrSL(p,c,24)}),$692be64e687bb0ca$var$BUF[2*r]=l,$692be64e687bb0ca$var$BUF[2*r+1]=u,$692be64e687bb0ca$var$BUF[2*i]=c,$692be64e687bb0ca$var$BUF[2*i+1]=p,$692be64e687bb0ca$var$BUF[2*n]=h,$692be64e687bb0ca$var$BUF[2*n+1]=g,$692be64e687bb0ca$var$BUF[2*s]=m,$692be64e687bb0ca$var$BUF[2*s+1]=v}function $692be64e687bb0ca$var$G2(r,i,n,s,a,o){let d=a[o],f=a[o+1],l=$692be64e687bb0ca$var$BUF[2*r],u=$692be64e687bb0ca$var$BUF[2*r+1],c=$692be64e687bb0ca$var$BUF[2*i],p=$692be64e687bb0ca$var$BUF[2*i+1],h=$692be64e687bb0ca$var$BUF[2*n],g=$692be64e687bb0ca$var$BUF[2*n+1],m=$692be64e687bb0ca$var$BUF[2*s],v=$692be64e687bb0ca$var$BUF[2*s+1],_=$c886d2710269b158$exports.default.add3L(l,c,d);u=$c886d2710269b158$exports.default.add3H(_,u,p,f),l=0|_,({Dh:v,Dl:m}={Dh:v^u,Dl:m^l}),({Dh:v,Dl:m}={Dh:$c886d2710269b158$exports.default.rotrSH(v,m,16),Dl:$c886d2710269b158$exports.default.rotrSL(v,m,16)}),({h:g,l:h}=$c886d2710269b158$exports.default.add(g,h,v,m)),({Bh:p,Bl:c}={Bh:p^g,Bl:c^h}),({Bh:p,Bl:c}={Bh:$c886d2710269b158$exports.default.rotrBH(p,c,63),Bl:$c886d2710269b158$exports.default.rotrBL(p,c,63)}),$692be64e687bb0ca$var$BUF[2*r]=l,$692be64e687bb0ca$var$BUF[2*r+1]=u,$692be64e687bb0ca$var$BUF[2*i]=c,$692be64e687bb0ca$var$BUF[2*i+1]=p,$692be64e687bb0ca$var$BUF[2*n]=h,$692be64e687bb0ca$var$BUF[2*n+1]=g,$692be64e687bb0ca$var$BUF[2*s]=m,$692be64e687bb0ca$var$BUF[2*s+1]=v}class $692be64e687bb0ca$var$BLAKE2b extends $9a4b3b889de6afac$exports.BLAKE2{constructor(r={}){super(128,void 0===r.dkLen?64:r.dkLen,r,64,16,16),this.v0l=0|$692be64e687bb0ca$var$IV[0],this.v0h=0|$692be64e687bb0ca$var$IV[1],this.v1l=0|$692be64e687bb0ca$var$IV[2],this.v1h=0|$692be64e687bb0ca$var$IV[3],this.v2l=0|$692be64e687bb0ca$var$IV[4],this.v2h=0|$692be64e687bb0ca$var$IV[5],this.v3l=0|$692be64e687bb0ca$var$IV[6],this.v3h=0|$692be64e687bb0ca$var$IV[7],this.v4l=0|$692be64e687bb0ca$var$IV[8],this.v4h=0|$692be64e687bb0ca$var$IV[9],this.v5l=0|$692be64e687bb0ca$var$IV[10],this.v5h=0|$692be64e687bb0ca$var$IV[11],this.v6l=0|$692be64e687bb0ca$var$IV[12],this.v6h=0|$692be64e687bb0ca$var$IV[13],this.v7l=0|$692be64e687bb0ca$var$IV[14],this.v7h=0|$692be64e687bb0ca$var$IV[15];let i=r.key?r.key.length:0;if(this.v0l^=this.outputLen|i<<8|16842752,r.salt){let i=(0,$bb5e1fcd97588e49$exports.u32)((0,$bb5e1fcd97588e49$exports.toBytes)(r.salt));this.v4l^=i[0],this.v4h^=i[1],this.v5l^=i[2],this.v5h^=i[3]}if(r.personalization){let i=(0,$bb5e1fcd97588e49$exports.u32)((0,$bb5e1fcd97588e49$exports.toBytes)(r.personalization));this.v6l^=i[0],this.v6h^=i[1],this.v7l^=i[2],this.v7h^=i[3]}if(r.key){let i=new Uint8Array(this.blockLen);i.set((0,$bb5e1fcd97588e49$exports.toBytes)(r.key)),this.update(i)}}get(){let{v0l:r,v0h:i,v1l:n,v1h:s,v2l:a,v2h:o,v3l:d,v3h:f,v4l:l,v4h:u,v5l:c,v5h:p,v6l:h,v6h:g,v7l:m,v7h:v}=this;return[r,i,n,s,a,o,d,f,l,u,c,p,h,g,m,v]}set(r,i,n,s,a,o,d,f,l,u,c,p,h,g,m,v){this.v0l=0|r,this.v0h=0|i,this.v1l=0|n,this.v1h=0|s,this.v2l=0|a,this.v2h=0|o,this.v3l=0|d,this.v3h=0|f,this.v4l=0|l,this.v4h=0|u,this.v5l=0|c,this.v5h=0|p,this.v6l=0|h,this.v6h=0|g,this.v7l=0|m,this.v7h=0|v}compress(r,i,n){this.get().forEach((r,i)=>$692be64e687bb0ca$var$BUF[i]=r),$692be64e687bb0ca$var$BUF.set($692be64e687bb0ca$var$IV,16);let{h:s,l:a}=$c886d2710269b158$exports.default.fromBig(BigInt(this.length));$692be64e687bb0ca$var$BUF[24]=$692be64e687bb0ca$var$IV[8]^a,$692be64e687bb0ca$var$BUF[25]=$692be64e687bb0ca$var$IV[9]^s,n&&($692be64e687bb0ca$var$BUF[28]=~$692be64e687bb0ca$var$BUF[28],$692be64e687bb0ca$var$BUF[29]=~$692be64e687bb0ca$var$BUF[29]);let o=0,d=$9a4b3b889de6afac$exports.SIGMA;for(let n=0;n<12;n++)$692be64e687bb0ca$var$G1(0,4,8,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(0,4,8,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(1,5,9,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(1,5,9,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(2,6,10,14,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(2,6,10,14,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(3,7,11,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(3,7,11,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(0,5,10,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(0,5,10,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(1,6,11,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(1,6,11,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(2,7,8,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(2,7,8,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(3,4,9,14,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(3,4,9,14,r,i+2*d[o++]);this.v0l^=$692be64e687bb0ca$var$BUF[0]^$692be64e687bb0ca$var$BUF[16],this.v0h^=$692be64e687bb0ca$var$BUF[1]^$692be64e687bb0ca$var$BUF[17],this.v1l^=$692be64e687bb0ca$var$BUF[2]^$692be64e687bb0ca$var$BUF[18],this.v1h^=$692be64e687bb0ca$var$BUF[3]^$692be64e687bb0ca$var$BUF[19],this.v2l^=$692be64e687bb0ca$var$BUF[4]^$692be64e687bb0ca$var$BUF[20],this.v2h^=$692be64e687bb0ca$var$BUF[5]^$692be64e687bb0ca$var$BUF[21],this.v3l^=$692be64e687bb0ca$var$BUF[6]^$692be64e687bb0ca$var$BUF[22],this.v3h^=$692be64e687bb0ca$var$BUF[7]^$692be64e687bb0ca$var$BUF[23],this.v4l^=$692be64e687bb0ca$var$BUF[8]^$692be64e687bb0ca$var$BUF[24],this.v4h^=$692be64e687bb0ca$var$BUF[9]^$692be64e687bb0ca$var$BUF[25],this.v5l^=$692be64e687bb0ca$var$BUF[10]^$692be64e687bb0ca$var$BUF[26],this.v5h^=$692be64e687bb0ca$var$BUF[11]^$692be64e687bb0ca$var$BUF[27],this.v6l^=$692be64e687bb0ca$var$BUF[12]^$692be64e687bb0ca$var$BUF[28],this.v6h^=$692be64e687bb0ca$var$BUF[13]^$692be64e687bb0ca$var$BUF[29],this.v7l^=$692be64e687bb0ca$var$BUF[14]^$692be64e687bb0ca$var$BUF[30],this.v7h^=$692be64e687bb0ca$var$BUF[15]^$692be64e687bb0ca$var$BUF[31],$692be64e687bb0ca$var$BUF.fill(0)}destroy(){this.destroyed=!0,this.buffer32.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}$692be64e687bb0ca$exports.blake2b=(0,$bb5e1fcd97588e49$exports.wrapConstructorWithOpts)(r=>new $692be64e687bb0ca$var$BLAKE2b(r));var $awmEs=parcelRequire("awmEs");function $ce1f303d0aa8ec51$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $ce1f303d0aa8ec51$var$semver__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($f3bb2747c7b09053$exports),$ce1f303d0aa8ec51$var$axios__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($4ce02f68f14348c9$exports),$ce1f303d0aa8ec51$var$ByteBuffer__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($2kkR6),$ce1f303d0aa8ec51$var$BigNumber__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($eb25ad002e4befa3$exports),$ce1f303d0aa8ec51$var$JSZip__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($b37c4403146d31a9$exports);function $ce1f303d0aa8ec51$var$__rest(r,i){var n={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&0>i.indexOf(s)&&(n[s]=r[s]);if(null!=r&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,s=Object.getOwnPropertySymbols(r);ai.indexOf(s[a])&&Object.prototype.propertyIsEnumerable.call(r,s[a])&&(n[s[a]]=r[s[a]]);return n}function $ce1f303d0aa8ec51$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function $ce1f303d0aa8ec51$var$__values(r){var i="function"==typeof Symbol&&Symbol.iterator,n=i&&r[i],s=0;if(n)return n.call(r);if(r&&"number"==typeof r.length)return{next:function(){return r&&s>=r.length&&(r=void 0),{value:r&&r[s++],done:!r}}};throw TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")}function $ce1f303d0aa8ec51$var$__asyncValues(r){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var i,n=r[Symbol.asyncIterator];return n?n.call(r):(r=$ce1f303d0aa8ec51$var$__values(r),i={},s("next"),s("throw"),s("return"),i[Symbol.asyncIterator]=function(){return this},i);function s(n){i[n]=r[n]&&function(i){return new Promise(function(s,o){a(s,o,(i=r[n](i)).done,i.value)})}}function a(r,i,n,s){Promise.resolve(s).then(function(i){r({value:i,done:n})},i)}}"function"==typeof SuppressedError&&SuppressedError;const $ce1f303d0aa8ec51$var$callbackManager=new Map,$ce1f303d0aa8ec51$var$generateCallbackId=()=>`callback_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,$ce1f303d0aa8ec51$var$registerCallback=(r,i)=>{$ce1f303d0aa8ec51$var$callbackManager.set(r,i)},$ce1f303d0aa8ec51$var$executeCallback=(r,...i)=>{let n=$ce1f303d0aa8ec51$var$callbackManager.get(r);n&&n(...i)},$ce1f303d0aa8ec51$var$cleanupCallback=r=>{$ce1f303d0aa8ec51$var$callbackManager.delete(r)},$ce1f303d0aa8ec51$var$inject=({call:r,cancel:i,dispose:n,eventEmitter:s,init:a,updateSettings:o,switchTransport:d,uiResponse:f})=>{let l=Object.assign({on:(r,i)=>{s.on(r,i)},emit:()=>{},off:(r,i)=>{s.removeListener(r,i)},removeAllListeners:r=>{s.removeAllListeners(r)},init:a,call:r,dispose:n,uiResponse:f,cancel:i,updateSettings:o,switchTransport:d},$ce1f303d0aa8ec51$var$createCoreApi(r));return l},$ce1f303d0aa8ec51$var$createCoreApi=r=>({getLogs:()=>r({method:"getLogs"}),searchDevices:()=>r({method:"searchDevices"}),getFeatures:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getFeatures"})),getOnekeyFeatures:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getOnekeyFeatures"})),checkFirmwareRelease:i=>r({connectId:i,method:"checkFirmwareRelease"}),checkBLEFirmwareRelease:i=>r({connectId:i,method:"checkBLEFirmwareRelease"}),checkBridgeStatus:()=>r({method:"checkBridgeStatus"}),checkBridgeRelease:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"checkBridgeRelease"})),checkBootloaderRelease:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"checkBootloaderRelease"})),checkAllFirmwareRelease:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"checkAllFirmwareRelease"})),checkFirmwareTypeAvailable:i=>r(Object.assign(Object.assign({},i),{method:"checkFirmwareTypeAvailable"})),cipherKeyValue:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cipherKeyValue"})),testInitializeDeviceDuration:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"testInitializeDeviceDuration"})),deviceBackup:i=>r({connectId:i,method:"deviceBackup"}),deviceChangePin:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceChangePin"})),deviceFlags:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceFlags"})),deviceRebootToBoardloader:i=>r({connectId:i,method:"deviceRebootToBoardloader"}),deviceRebootToBootloader:i=>r({connectId:i,method:"deviceRebootToBootloader"}),deviceRecovery:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceRecovery"})),deviceReset:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceReset"})),deviceSettings:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceSettings"})),deviceUpdateReboot:i=>r({connectId:i,method:"deviceUpdateReboot"}),deviceUploadResource:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceUploadResource"})),deviceSupportFeatures:i=>r({connectId:i,method:"deviceSupportFeatures"}),deviceVerify:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceVerify"})),deviceWipe:i=>r({connectId:i,method:"deviceWipe"}),deviceFullyUploadResource:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceFullyUploadResource"})),deviceUpdateBootloader:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceUpdateBootloader"})),getPassphraseState:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getPassphraseState"})),deviceCancel:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceCancel"})),deviceLock:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceLock"})),deviceUnlock:(i,n)=>r(Object.assign(Object.assign({},n),{useEmptyPassphrase:!0,connectId:i,method:"deviceUnlock"})),getNextU2FCounter:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getNextU2FCounter"})),setU2FCounter:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"setU2FCounter"})),allNetworkGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"allNetworkGetAddress"})),allNetworkGetAddressByLoop:(i,n,s)=>{let{onLoopItemResponse:a,onAllItemsResponse:o}=s,d=$ce1f303d0aa8ec51$var$__rest(s,["onLoopItemResponse","onAllItemsResponse"]),f=$ce1f303d0aa8ec51$var$generateCallbackId();$ce1f303d0aa8ec51$var$registerCallback(f,a);let l=$ce1f303d0aa8ec51$var$generateCallbackId();return $ce1f303d0aa8ec51$var$registerCallback(l,(r,i)=>{null==o||o(r,i),$ce1f303d0aa8ec51$var$cleanupCallback(l),$ce1f303d0aa8ec51$var$cleanupCallback(f)}),r(Object.assign(Object.assign({},d),{connectId:i,deviceId:n,method:"allNetworkGetAddressByLoop",callbackId:f,callbackIdFinish:l}))},evmGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmGetAddress"})),evmGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmGetPublicKey"})),evmSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignMessage"})),evmSignMessageEIP712:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignMessageEIP712"})),evmSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignTransaction"})),evmSignTypedData:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignTypedData"})),evmVerifyMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmVerifyMessage"})),btcGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcGetAddress"})),btcGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcGetPublicKey"})),btcSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcSignMessage"})),btcSignPsbt:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcSignPsbt"})),btcSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcSignTransaction"})),btcVerifyMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcVerifyMessage"})),starcoinGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinGetAddress"})),starcoinGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinGetPublicKey"})),starcoinSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinSignMessage"})),starcoinSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinSignTransaction"})),starcoinVerifyMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinVerifyMessage"})),nemGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nemGetAddress"})),nemSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nemSignTransaction"})),solGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solGetAddress"})),solSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solSignTransaction"})),solSignOffchainMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solSignOffchainMessage"})),solSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solSignMessage"})),stellarGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"stellarGetAddress"})),stellarSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"stellarSignTransaction"})),firmwareUpdate:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"firmwareUpdate"})),firmwareUpdateV2:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"firmwareUpdateV2"})),firmwareUpdateV3:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"firmwareUpdateV3"})),promptWebDeviceAccess:i=>r(Object.assign(Object.assign({},i),{method:"promptWebDeviceAccess"})),tronGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tronGetAddress"})),tronSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tronSignMessage"})),tronSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tronSignTransaction"})),confluxGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxGetAddress"})),confluxSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxSignMessage"})),confluxSignMessageCIP23:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxSignMessageCIP23"})),confluxSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxSignTransaction"})),nearGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nearGetAddress"})),nearSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nearSignTransaction"})),aptosGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosGetAddress"})),aptosGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosGetPublicKey"})),aptosSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosSignMessage"})),aptosSignInMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosSignInMessage"})),aptosSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosSignTransaction"})),algoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"algoGetAddress"})),algoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"algoSignTransaction"})),cosmosGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cosmosGetAddress"})),cosmosGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cosmosGetPublicKey"})),cosmosSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cosmosSignTransaction"})),xrpGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"xrpGetAddress"})),xrpSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"xrpSignTransaction"})),suiGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiGetAddress"})),suiGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiGetPublicKey"})),suiSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiSignMessage"})),suiSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiSignTransaction"})),cardanoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoGetAddress"})),cardanoGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoGetPublicKey"})),cardanoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoSignTransaction"})),cardanoSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoSignMessage"})),filecoinGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"filecoinGetAddress"})),filecoinSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"filecoinSignTransaction"})),polkadotGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"polkadotGetAddress"})),polkadotSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"polkadotSignTransaction"})),kaspaGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"kaspaGetAddress"})),kaspaSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"kaspaSignTransaction"})),nexaGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nexaGetAddress"})),nexaSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nexaSignTransaction"})),nostrGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrGetPublicKey"})),nostrSignEvent:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrSignEvent"})),nostrEncryptMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrEncryptMessage"})),nostrDecryptMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrDecryptMessage"})),nostrSignSchnorr:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrSignSchnorr"})),lnurlAuth:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"lnurlAuth"})),nervosGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nervosGetAddress"})),nervosSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nervosSignTransaction"})),dnxGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"dnxGetAddress"})),dnxSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"dnxSignTransaction"})),tonGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tonGetAddress"})),tonSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tonSignMessage"})),tonSignProof:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tonSignProof"})),scdoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"scdoGetAddress"})),scdoSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"scdoSignMessage"})),scdoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"scdoSignTransaction"})),alephiumGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"alephiumGetAddress"})),alephiumSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"alephiumSignMessage"})),alephiumSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"alephiumSignTransaction"})),benfenGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenGetAddress"})),benfenGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenGetPublicKey"})),benfenSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenSignTransaction"})),benfenSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenSignMessage"})),neoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"neoGetAddress"})),neoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"neoSignTransaction"}))}),$ce1f303d0aa8ec51$var$lowLevelInject=({call:r,cancel:i,dispose:n,eventEmitter:s,init:a,uiResponse:o,updateSettings:d,switchTransport:f,addHardwareGlobalEventListener:l})=>{let u=Object.assign({addHardwareGlobalEventListener:l,removeAllListeners:r=>{s.removeAllListeners(r)},init:a,call:r,dispose:n,uiResponse:o,cancel:i,updateSettings:d,switchTransport:f,emit:()=>{}},$ce1f303d0aa8ec51$var$createCoreApi(r));return u};var $ce1f303d0aa8ec51$var$events={exports:{}},$ce1f303d0aa8ec51$var$R="object"==typeof Reflect?Reflect:null,$ce1f303d0aa8ec51$var$ReflectApply=$ce1f303d0aa8ec51$var$R&&"function"==typeof $ce1f303d0aa8ec51$var$R.apply?$ce1f303d0aa8ec51$var$R.apply:function(r,i,n){return Function.prototype.apply.call(r,i,n)};function $ce1f303d0aa8ec51$var$ProcessEmitWarning(r){console&&console.warn&&console.warn(r)}$ce1f303d0aa8ec51$var$ReflectOwnKeys=$ce1f303d0aa8ec51$var$R&&"function"==typeof $ce1f303d0aa8ec51$var$R.ownKeys?$ce1f303d0aa8ec51$var$R.ownKeys:Object.getOwnPropertySymbols?function(r){return Object.getOwnPropertyNames(r).concat(Object.getOwnPropertySymbols(r))}:function(r){return Object.getOwnPropertyNames(r)};var $ce1f303d0aa8ec51$var$NumberIsNaN=Number.isNaN||function(r){return r!=r};function $ce1f303d0aa8ec51$var$EventEmitter(){$ce1f303d0aa8ec51$var$EventEmitter.init.call(this)}$ce1f303d0aa8ec51$var$events.exports=$ce1f303d0aa8ec51$var$EventEmitter,$ce1f303d0aa8ec51$var$events.exports.once=$ce1f303d0aa8ec51$var$once,$ce1f303d0aa8ec51$var$EventEmitter.EventEmitter=$ce1f303d0aa8ec51$var$EventEmitter,$ce1f303d0aa8ec51$var$EventEmitter.prototype._events=void 0,$ce1f303d0aa8ec51$var$EventEmitter.prototype._eventsCount=0,$ce1f303d0aa8ec51$var$EventEmitter.prototype._maxListeners=void 0;var $ce1f303d0aa8ec51$var$defaultMaxListeners=10;function $ce1f303d0aa8ec51$var$checkListener(r){if("function"!=typeof r)throw TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}function $ce1f303d0aa8ec51$var$_getMaxListeners(r){return void 0===r._maxListeners?$ce1f303d0aa8ec51$var$EventEmitter.defaultMaxListeners:r._maxListeners}function $ce1f303d0aa8ec51$var$_addListener(r,i,n,s){if($ce1f303d0aa8ec51$var$checkListener(n),void 0===(o=r._events)?(o=r._events=Object.create(null),r._eventsCount=0):(void 0!==o.newListener&&(r.emit("newListener",i,n.listener?n.listener:n),o=r._events),d=o[i]),void 0===d)d=o[i]=n,++r._eventsCount;else if("function"==typeof d?d=o[i]=s?[n,d]:[d,n]:s?d.unshift(n):d.push(n),(a=$ce1f303d0aa8ec51$var$_getMaxListeners(r))>0&&d.length>a&&!d.warned){d.warned=!0;var a,o,d,f=Error("Possible EventEmitter memory leak detected. "+d.length+" "+String(i)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=r,f.type=i,f.count=d.length,$ce1f303d0aa8ec51$var$ProcessEmitWarning(f)}return r}function $ce1f303d0aa8ec51$var$onceWrapper(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function $ce1f303d0aa8ec51$var$_onceWrap(r,i,n){var s={fired:!1,wrapFn:void 0,target:r,type:i,listener:n},a=$ce1f303d0aa8ec51$var$onceWrapper.bind(s);return a.listener=n,s.wrapFn=a,a}function $ce1f303d0aa8ec51$var$_listeners(r,i,n){var s=r._events;if(void 0===s)return[];var a=s[i];return void 0===a?[]:"function"==typeof a?n?[a.listener||a]:[a]:n?$ce1f303d0aa8ec51$var$unwrapListeners(a):$ce1f303d0aa8ec51$var$arrayClone(a,a.length)}function $ce1f303d0aa8ec51$var$listenerCount(r){var i=this._events;if(void 0!==i){var n=i[r];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function $ce1f303d0aa8ec51$var$arrayClone(r,i){for(var n=Array(i),s=0;s0&&(o=i[0]),o instanceof Error)throw o;var o,d=Error("Unhandled error."+(o?" ("+o.message+")":""));throw d.context=o,d}var f=a[r];if(void 0===f)return!1;if("function"==typeof f)$ce1f303d0aa8ec51$var$ReflectApply(f,this,i);else for(var l=f.length,u=$ce1f303d0aa8ec51$var$arrayClone(f,l),n=0;n=0;o--)if(n[o]===i||n[o].listener===i){d=n[o].listener,a=o;break}if(a<0)return this;0===a?n.shift():$ce1f303d0aa8ec51$var$spliceOne(n,a),1===n.length&&(s[r]=n[0]),void 0!==s.removeListener&&this.emit("removeListener",r,d||i)}return this},$ce1f303d0aa8ec51$var$EventEmitter.prototype.off=$ce1f303d0aa8ec51$var$EventEmitter.prototype.removeListener,$ce1f303d0aa8ec51$var$EventEmitter.prototype.removeAllListeners=function(r){var i,n,s;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0==arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[r]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[r]),this;if(0==arguments.length){var a,o=Object.keys(n);for(s=0;s=0;s--)this.removeListener(r,i[s]);return this},$ce1f303d0aa8ec51$var$EventEmitter.prototype.listeners=function(r){return $ce1f303d0aa8ec51$var$_listeners(this,r,!0)},$ce1f303d0aa8ec51$var$EventEmitter.prototype.rawListeners=function(r){return $ce1f303d0aa8ec51$var$_listeners(this,r,!1)},$ce1f303d0aa8ec51$var$EventEmitter.listenerCount=function(r,i){return"function"==typeof r.listenerCount?r.listenerCount(i):$ce1f303d0aa8ec51$var$listenerCount.call(r,i)},$ce1f303d0aa8ec51$var$EventEmitter.prototype.listenerCount=$ce1f303d0aa8ec51$var$listenerCount,$ce1f303d0aa8ec51$var$EventEmitter.prototype.eventNames=function(){return this._eventsCount>0?$ce1f303d0aa8ec51$var$ReflectOwnKeys(this._events):[]};const $ce1f303d0aa8ec51$var$eventEmitter=new $ce1f303d0aa8ec51$var$events.exports,$ce1f303d0aa8ec51$var$topLevelInject=()=>{let r;let i=i=>r?r.call(i):Promise.resolve(void 0),n=Object.assign(Object.assign({on:(r,i)=>{$ce1f303d0aa8ec51$var$eventEmitter.on(r,i)},emit:(r,...i)=>{$ce1f303d0aa8ec51$var$eventEmitter.emit(r,...i)},off:(r,i)=>{$ce1f303d0aa8ec51$var$eventEmitter.emit(r,i)},init:(i,n)=>{var s;return null!==(s=null==(r=n)?void 0:r.init(i))&&void 0!==s?s:Promise.resolve(!1)},call:i},$ce1f303d0aa8ec51$var$createCoreApi(i)),{removeAllListeners:i=>{$ce1f303d0aa8ec51$var$eventEmitter.removeAllListeners(i),null==r||r.removeAllListeners(i)},dispose:()=>null==r?void 0:r.dispose(),uiResponse:i=>null==r?void 0:r.uiResponse(i),cancel:i=>null==r?void 0:r.cancel(i),updateSettings:i=>{var n;return null!==(n=null==r?void 0:r.updateSettings(i))&&void 0!==n?n:Promise.resolve(!1)},switchTransport:i=>{var n;return null!==(n=null==r?void 0:r.switchTransport(i))&&void 0!==n?n:Promise.resolve({success:!1})}});return n},$ce1f303d0aa8ec51$var$LOG_EVENT="LOG_EVENT",$ce1f303d0aa8ec51$var$LOG={OUTPUT:"log-output"},$ce1f303d0aa8ec51$var$createLogMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$LOG_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$MAX_ENTRIES=500;class $ce1f303d0aa8ec51$var$Log$g{constructor(r,i){this.prefix=r,this.enabled=i,this.messages=[]}addMessage(r,i,...n){this.messages.push({level:r,prefix:i,message:n,timestamp:new Date().getTime()}),this.messages.length>$ce1f303d0aa8ec51$var$MAX_ENTRIES&&this.messages.shift()}log(...r){this.addMessage("log",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.log(this.prefix,...r)}error(...r){this.addMessage("error",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.error(this.prefix,...r)}warn(...r){this.addMessage("warn",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.warn(this.prefix,...r)}debug(...r){this.addMessage("debug",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.log(this.prefix,...r)}}const $ce1f303d0aa8ec51$var$_logs={},$ce1f303d0aa8ec51$var$initLog=(r,i)=>{let n=new $ce1f303d0aa8ec51$var$Log$g(r,!!i);return $ce1f303d0aa8ec51$var$_logs[r]=n,n},$ce1f303d0aa8ec51$var$enableLog=r=>{Object.keys($ce1f303d0aa8ec51$var$_logs).forEach(i=>{$ce1f303d0aa8ec51$var$_logs[i].enabled=!!r})},$ce1f303d0aa8ec51$var$getLog=()=>{let r=[];return Object.keys($ce1f303d0aa8ec51$var$_logs).forEach(i=>{r=r.concat($ce1f303d0aa8ec51$var$_logs[i].messages)}),r.sort((r,i)=>r.timestamp-i.timestamp),r},$ce1f303d0aa8ec51$var$setLoggerPostMessage=r=>{$ce1f303d0aa8ec51$var$postMessage$1=r},$ce1f303d0aa8ec51$var$serializeLog=(...r)=>r.map(r=>"string"==typeof r||"number"==typeof r||"boolean"==typeof r||void 0===r?r:"object"==typeof r?JSON.stringify(r,$ce1f303d0aa8ec51$var$getCircularReplacer()):r),$ce1f303d0aa8ec51$var$getCircularReplacer=()=>{let r=new WeakSet;return(i,n)=>{if("object"==typeof n&&null!==n){if(r.has(n))return;r.add(n)}return n}},$ce1f303d0aa8ec51$var$sendLogMessage=(r,...i)=>{null==$ce1f303d0aa8ec51$var$postMessage$1||$ce1f303d0aa8ec51$var$postMessage$1($ce1f303d0aa8ec51$var$createLogMessage($ce1f303d0aa8ec51$var$LOG.OUTPUT,$ce1f303d0aa8ec51$var$serializeLog(r,...i)))};$ce1f303d0aa8ec51$exports.LoggerNames=void 0,function(r){r.Core="@onekey/hd-core",r.Transport="Transport",r.Device="Device",r.DeviceCommands="DeviceCommands",r.DeviceConnector="DeviceConnector",r.DeviceList="DeviceList",r.DevicePool="DevicePool",r.HdCommonConnectSdk="@onekey/common-connect-sdk",r.HdBleSdk="@onekey/hd-ble-sdk",r.HdTransportHttp="@onekey/hd-transport-http",r.HdTransportLowLevel="@onekey/hd-transport-lowlevel",r.HdBleTransport="@onekey/hd-ble-transport",r.HdWebBleTransport="@onekey/hd-web-ble-transport",r.HdTransportWebUsb="@onekey/hd-transport-webusb",r.HdTransportNodeUsb="@onekey/hd-transport-node-usb",r.Connect="@onekey/connect",r.Iframe="IFrame",r.SendMessage="[SendMessage]",r.Method="[Method]"}($ce1f303d0aa8ec51$exports.LoggerNames||($ce1f303d0aa8ec51$exports.LoggerNames={}));const $ce1f303d0aa8ec51$var$LoggerMap={[$ce1f303d0aa8ec51$exports.LoggerNames.Core]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Core),[$ce1f303d0aa8ec51$exports.LoggerNames.Transport]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Transport),[$ce1f303d0aa8ec51$exports.LoggerNames.Device]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Device),[$ce1f303d0aa8ec51$exports.LoggerNames.DeviceCommands]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DeviceCommands),[$ce1f303d0aa8ec51$exports.LoggerNames.DeviceConnector]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DeviceConnector),[$ce1f303d0aa8ec51$exports.LoggerNames.DeviceList]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DeviceList),[$ce1f303d0aa8ec51$exports.LoggerNames.DevicePool]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DevicePool),[$ce1f303d0aa8ec51$exports.LoggerNames.HdBleSdk]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdBleSdk),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportHttp]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportHttp),[$ce1f303d0aa8ec51$exports.LoggerNames.HdBleTransport]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdBleTransport),[$ce1f303d0aa8ec51$exports.LoggerNames.HdWebBleTransport]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdWebBleTransport),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportLowLevel]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportLowLevel),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportWebUsb]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportWebUsb),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportNodeUsb]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportNodeUsb),[$ce1f303d0aa8ec51$exports.LoggerNames.Connect]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Connect),[$ce1f303d0aa8ec51$exports.LoggerNames.Iframe]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Iframe),[$ce1f303d0aa8ec51$exports.LoggerNames.SendMessage]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.SendMessage),[$ce1f303d0aa8ec51$exports.LoggerNames.Method]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Method),[$ce1f303d0aa8ec51$exports.LoggerNames.HdCommonConnectSdk]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Method)},$ce1f303d0aa8ec51$var$getLogger=r=>$ce1f303d0aa8ec51$var$LoggerMap[r],$ce1f303d0aa8ec51$var$httpRequest$1=(r,i="text")=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n={};r.indexOf("ngrok-free.app")>-1&&(n["ngrok-skip-browser-warning"]=!0);let s=yield $ce1f303d0aa8ec51$var$axios__default.default.request({url:r,withCredentials:!1,responseType:"binary"===i?"arraybuffer":"json",headers:n});if(200==+s.status)return s.data;throw Error(`httpRequest error: ${r} ${s.statusText}`)}),$ce1f303d0aa8ec51$var$httpRequest=(r,i)=>$ce1f303d0aa8ec51$var$httpRequest$1(r,i),$ce1f303d0aa8ec51$var$getTimeStamp=()=>new Date().getTime(),$ce1f303d0aa8ec51$var$VER_NUMS=3,$ce1f303d0aa8ec51$var$versionRegex=new RegExp(/^[0-9]{1,3}(\.[0-9]{1,3}){0,2}$/),$ce1f303d0aa8ec51$var$isValidVersionString=r=>$ce1f303d0aa8ec51$var$versionRegex.test(r),$ce1f303d0aa8ec51$var$isValidVersionArray=r=>{if(!Array.isArray(r)||0===r.length||r.length>$ce1f303d0aa8ec51$var$VER_NUMS||0===r[0])return!1;for(let i=0;i{if(r.length===$ce1f303d0aa8ec51$var$VER_NUMS)return r;let i=[...r];for(let n=r.length;n<$ce1f303d0aa8ec51$var$VER_NUMS;n++)i.push(0);return i},$ce1f303d0aa8ec51$var$versionSplit=r=>$ce1f303d0aa8ec51$var$isValidVersionString(r)?r.split(".").map(r=>Number(r)):[0,0,0],$ce1f303d0aa8ec51$var$versionCompare=(r,i)=>{if("string"==typeof r&&"string"==typeof i&&r===i)return 0;let n="string"==typeof r?$ce1f303d0aa8ec51$var$versionSplit(r):r,s="string"==typeof i?$ce1f303d0aa8ec51$var$versionSplit(i):i,a=$ce1f303d0aa8ec51$var$isValidVersionArray(n),o=$ce1f303d0aa8ec51$var$isValidVersionArray(s);if(!a&&!o)return 0;if(!a&&o)return -1;if(a&&!o)return 1;let d=$ce1f303d0aa8ec51$var$normalizeVersionArray(n),f=$ce1f303d0aa8ec51$var$normalizeVersionArray(s);for(let r=0;r<$ce1f303d0aa8ec51$var$VER_NUMS;r++){if(d[r]>f[r])return 1;if(f[r]>d[r])return -1}return 0};function $ce1f303d0aa8ec51$var$patchFeatures(r){return"Features"!==r.type||r.message.major_version<1&&(r.message.major_version=1),r}const $ce1f303d0aa8ec51$var$Log$f=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);let $ce1f303d0aa8ec51$var$globalInstanceCounter=0,$ce1f303d0aa8ec51$var$sdkInstanceCounter=0;function $ce1f303d0aa8ec51$var$generateSdkInstanceId(){$ce1f303d0aa8ec51$var$sdkInstanceCounter++;let r=Date.now().toString().slice(-6);return`SDK-${$ce1f303d0aa8ec51$var$sdkInstanceCounter}-${r}`}function $ce1f303d0aa8ec51$var$generateInstanceId(r,i){$ce1f303d0aa8ec51$var$globalInstanceCounter++;let n=Date.now().toString().slice(-6),s=`${r}-${$ce1f303d0aa8ec51$var$globalInstanceCounter}-${n}`;return i?`${i}.${s}`:s}const $ce1f303d0aa8ec51$var$sdkInstances=new Map,$ce1f303d0aa8ec51$var$globalActiveRequests=new Map;function $ce1f303d0aa8ec51$var$createSdkTracingContext(){let r=$ce1f303d0aa8ec51$var$generateSdkInstanceId(),i={sdkInstanceId:r,createdAt:Date.now(),activeRequests:new Map};return $ce1f303d0aa8ec51$var$sdkInstances.set(r,i),i}function $ce1f303d0aa8ec51$var$createRequestContext(r,i,n){let s={responseID:r,sdkInstanceId:null==n?void 0:n.sdkInstanceId,methodName:i,connectId:null==n?void 0:n.connectId,deviceInstanceId:null==n?void 0:n.deviceInstanceId,commandsInstanceId:null==n?void 0:n.commandsInstanceId,parentResponseID:null==n?void 0:n.parentResponseID,startTime:Date.now(),status:"pending"};if($ce1f303d0aa8ec51$var$globalActiveRequests.set(s.responseID,s),null==n?void 0:n.sdkInstanceId){let r=$ce1f303d0aa8ec51$var$sdkInstances.get(n.sdkInstanceId);r&&r.activeRequests.set(s.responseID,s)}return s}function $ce1f303d0aa8ec51$var$updateRequestContext(r,i){let n=$ce1f303d0aa8ec51$var$globalActiveRequests.get(r);n&&Object.assign(n,i)}function $ce1f303d0aa8ec51$var$completeRequestContext(r,i){let n=$ce1f303d0aa8ec51$var$globalActiveRequests.get(r);if(n&&(n.endTime=Date.now(),n.status=i?"error":"success",i&&(n.error=i.message,$ce1f303d0aa8ec51$var$Log$f.error(`[RequestContext] [completeRequestContext] Error: ${$ce1f303d0aa8ec51$var$formatRequestContext(n)}`)),$ce1f303d0aa8ec51$var$globalActiveRequests.delete(r),n.sdkInstanceId)){let i=$ce1f303d0aa8ec51$var$sdkInstances.get(n.sdkInstanceId);i&&i.activeRequests.delete(r)}}function $ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(r){return Array.from($ce1f303d0aa8ec51$var$globalActiveRequests.values()).filter(i=>i.deviceInstanceId===r)}function $ce1f303d0aa8ec51$var$formatRequestContext(r){let i=r.endTime?r.endTime-r.startTime:Date.now()-r.startTime,n=[`[req:${r.responseID}]`,r.sdkInstanceId?`sdk=${r.sdkInstanceId}`:null,`method=${r.methodName}`,r.connectId?`connectId=${r.connectId}`:null,r.deviceInstanceId?`deviceInst=${r.deviceInstanceId}`:null,r.commandsInstanceId?`commandsInst=${r.commandsInstanceId}`:null,r.parentResponseID?`parent=${r.parentResponseID}`:null,`duration=${i}ms`,`status=${r.status}`,`error=${r.error}`].filter(Boolean);return n.join(" ")}function $ce1f303d0aa8ec51$var$cleanupSdkInstance(r){let i=$ce1f303d0aa8ec51$var$sdkInstances.get(r);if(i){for(let r of i.activeRequests.keys())$ce1f303d0aa8ec51$var$globalActiveRequests.delete(r);$ce1f303d0aa8ec51$var$sdkInstances.delete(r)}}$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode=void 0,function(r){r.bootloader="bootloader",r.normal="normal",r.notInitialized="notInitialized",r.backupMode="backupMode"}($ce1f303d0aa8ec51$exports.EOneKeyDeviceMode||($ce1f303d0aa8ec51$exports.EOneKeyDeviceMode={}));const $ce1f303d0aa8ec51$var$DeviceModelToTypes={model_mini:[$3FhS8.EDeviceType.Classic,$3FhS8.EDeviceType.Classic1s,$3FhS8.EDeviceType.ClassicPure,$3FhS8.EDeviceType.Mini],model_touch:[$3FhS8.EDeviceType.Touch,$3FhS8.EDeviceType.Pro],model_classic:[$3FhS8.EDeviceType.Classic,$3FhS8.EDeviceType.Classic1s,$3FhS8.EDeviceType.ClassicPure],model_classic1s:[$3FhS8.EDeviceType.Classic1s,$3FhS8.EDeviceType.ClassicPure]},$ce1f303d0aa8ec51$var$DeviceTypeToModels={[$3FhS8.EDeviceType.Classic]:["model_classic","model_mini"],[$3FhS8.EDeviceType.Classic1s]:["model_classic","model_mini","model_classic1s"],[$3FhS8.EDeviceType.ClassicPure]:["model_classic","model_mini","model_classic1s"],[$3FhS8.EDeviceType.Mini]:["model_mini"],[$3FhS8.EDeviceType.Touch]:["model_touch"],[$3FhS8.EDeviceType.Pro]:["model_touch"],[$3FhS8.EDeviceType.Unknown]:[]},$ce1f303d0aa8ec51$var$existCapability=(r,i)=>{var n;return null===(n=null==r?void 0:r.capabilities)||void 0===n?void 0:n.includes(i)},$ce1f303d0aa8ec51$var$getDeviceType=r=>{if(!r||"object"!=typeof r)return $3FhS8.EDeviceType.Unknown;switch(r.onekey_device_type){case"CLASSIC":return $3FhS8.EDeviceType.Classic;case"CLASSIC1S":return $3FhS8.EDeviceType.Classic1s;case"MINI":return $3FhS8.EDeviceType.Mini;case"TOUCH":return $3FhS8.EDeviceType.Touch;case"PRO":return $3FhS8.EDeviceType.Pro;case"PURE":return $3FhS8.EDeviceType.ClassicPure;default:if(!$7U5sq.isEmpty(r.onekey_serial_no))return $3FhS8.EDeviceType.Unknown}let i=$ce1f303d0aa8ec51$var$getDeviceUUID(r);if($7U5sq.isEmpty(i)&&!0===r.bootloader_mode&&"1"===r.model)return $3FhS8.EDeviceType.Classic;if($7U5sq.isEmpty(i))return $3FhS8.EDeviceType.Unknown;let n=i.slice(0,2);return"bi"===n.toLowerCase()||"cl"===n.toLowerCase()?$3FhS8.EDeviceType.Classic:"cp"===n.toLowerCase()?$3FhS8.EDeviceType.ClassicPure:"mi"===n.toLowerCase()?$3FhS8.EDeviceType.Mini:"tc"===n.toLowerCase()?$3FhS8.EDeviceType.Touch:"pr"===n.toLowerCase()?$3FhS8.EDeviceType.Pro:$3FhS8.EDeviceType.Unknown},$ce1f303d0aa8ec51$var$getDeviceTypeByBleName=r=>r?r.startsWith("BixinKey")||r.startsWith("K")?$3FhS8.EDeviceType.Classic:r.startsWith("T")||r.startsWith("Touch")?$3FhS8.EDeviceType.Touch:r.startsWith("Pro")?$3FhS8.EDeviceType.Pro:$3FhS8.EDeviceType.Unknown:$3FhS8.EDeviceType.Unknown,$ce1f303d0aa8ec51$var$getDeviceBleName=r=>null==r?null:r.onekey_ble_name||r.ble_name||null,$ce1f303d0aa8ec51$var$getDeviceUUID=r=>{let i=r.onekey_serial_no||r.onekey_serial||r.serial_no;return null!=i?i:""},$ce1f303d0aa8ec51$var$getDeviceLabel=r=>{if(!r)return null;let i=$ce1f303d0aa8ec51$var$getDeviceType(r);if(null==i)return null;if("string"==typeof r.label&&!$7U5sq.isEmpty(r.label))return r.label;let n=$ce1f303d0aa8ec51$var$getDeviceBleName(r);return $7U5sq.isEmpty(n)?i===$3FhS8.EDeviceType.ClassicPure?"OneKey Classic 1S":`OneKey ${i.charAt(0).toUpperCase()+i.slice(1)}`:n},$ce1f303d0aa8ec51$var$getMethodVersionRange=(r,i)=>{let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=i(n);if(s)return s;let a=["model_classic1s","model_classic","model_mini","model_touch"];for(let r of a)if($ce1f303d0aa8ec51$var$DeviceModelToTypes[r].includes(n)&&(s=i(r)))break;return s},$ce1f303d0aa8ec51$var$getFirmwareType=r=>{var i;return r?"OneKey Bitcoin-only"===r.fw_vendor?$3FhS8.EFirmwareType.BitcoinOnly:(null===(i=null==r?void 0:r.capabilities)||void 0===i?void 0:i.length)>0&&!$ce1f303d0aa8ec51$var$existCapability(r,$5xch2.Enum_Capability.Capability_Bitcoin_like)?$3FhS8.EFirmwareType.BitcoinOnly:$3FhS8.EFirmwareType.Universal:$3FhS8.EFirmwareType.Universal},$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion=r=>{var i,n;return r?$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_firmware_version)?null===(i=r.onekey_firmware_version)||void 0===i?void 0:i.split("."):$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_version)?null===(n=r.onekey_version)||void 0===n?void 0:n.split("."):[0,0,0]:[0,0,0]},$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion=r=>{let i=(null==r?void 0:r.onekey_ble_version)||(null==r?void 0:r.ble_ver);return i&&$ce1f303d0aa8ec51$var$semver__default.default.valid(i)&&i?i.split(".").map(Number):[0,0,0]},$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion=r=>{var i,n,s,a,o;return r?$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_boot_version)?null===(i=r.onekey_boot_version)||void 0===i?void 0:i.split("."):r.bootloader_version?$ce1f303d0aa8ec51$var$semver__default.default.valid(r.bootloader_version)?null===(o=r.bootloader_version)||void 0===o?void 0:o.split("."):[0,0,0]:r.bootloader_mode?[null!==(n=null==r?void 0:r.major_version)&&void 0!==n?n:0,null!==(s=null==r?void 0:r.minor_version)&&void 0!==s?s:0,null!==(a=null==r?void 0:r.patch_version)&&void 0!==a?a:0]:[0,0,0]:[0,0,0]},$ce1f303d0aa8ec51$var$getDeviceBoardloaderVersion=r=>{var i;return $ce1f303d0aa8ec51$var$semver__default.default.valid(null==r?void 0:r.onekey_board_version)?null===(i=null==r?void 0:r.onekey_board_version)||void 0===i?void 0:i.split("."):[0,0,0]},$ce1f303d0aa8ec51$var$HD_HARDENED=2147483648,$ce1f303d0aa8ec51$var$toHardened=r=>(r|$ce1f303d0aa8ec51$var$HD_HARDENED)>>>0,$ce1f303d0aa8ec51$var$fromHardened=r=>(r&~$ce1f303d0aa8ec51$var$HD_HARDENED)>>>0,$ce1f303d0aa8ec51$var$PATH_NOT_VALID=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Not a valid path"),$ce1f303d0aa8ec51$var$PATH_NEGATIVE_VALUES=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Path cannot contain negative values"),$ce1f303d0aa8ec51$var$getHDPath=r=>{let i=r.toLowerCase().split("/");if("m"!==i[0])throw $ce1f303d0aa8ec51$var$PATH_NOT_VALID;return i.filter(r=>"m"!==r&&""!==r).map(r=>{let i=!1;"'"===r.substr(r.length-1)&&(i=!0,r=r.substr(0,r.length-1));let n=parseInt(r);if(Number.isNaN(n))throw $ce1f303d0aa8ec51$var$PATH_NOT_VALID;if(n<0)throw $ce1f303d0aa8ec51$var$PATH_NEGATIVE_VALUES;return i&&(n=$ce1f303d0aa8ec51$var$toHardened(n)),n})},$ce1f303d0aa8ec51$var$isEqualBip44CoinType=(r,i)=>$ce1f303d0aa8ec51$var$isBip44Path(r)&&r[1]===$ce1f303d0aa8ec51$var$toHardened(i),$ce1f303d0aa8ec51$var$isBip44Path=r=>Array.isArray(r)&&r[0]===$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$isMultisigPath=r=>Array.isArray(r)&&r[0]===$ce1f303d0aa8ec51$var$toHardened(48),$ce1f303d0aa8ec51$var$isSegwitPath=r=>Array.isArray(r)&&r[0]===$ce1f303d0aa8ec51$var$toHardened(49),$ce1f303d0aa8ec51$var$isTaprootPath=r=>Array.isArray(r)&&(r[0]===$ce1f303d0aa8ec51$var$toHardened(86)||r[0]===$ce1f303d0aa8ec51$var$toHardened(10025)),$ce1f303d0aa8ec51$var$getScriptType=r=>{if(!Array.isArray(r)||r.length<1)return"SPENDADDRESS";let i=$ce1f303d0aa8ec51$var$fromHardened(r[0]);switch(i){case 48:return"SPENDMULTISIG";case 49:return"SPENDP2SHWITNESS";case 84:return"SPENDWITNESS";case 86:case 10025:return"SPENDTAPROOT";default:return"SPENDADDRESS"}},$ce1f303d0aa8ec51$var$getOutputScriptType=r=>{if(!Array.isArray(r)||r.length<1)return"PAYTOADDRESS";if(49===r[0])return"PAYTOP2SHWITNESS";let i=$ce1f303d0aa8ec51$var$fromHardened(r[0]);switch(i){case 48:return"PAYTOMULTISIG";case 49:return"PAYTOP2SHWITNESS";case 84:return"PAYTOWITNESS";case 86:case 10025:return"PAYTOTAPROOT";default:return"PAYTOADDRESS"}},$ce1f303d0aa8ec51$var$serializedPath=r=>{let i=r.map(r=>r&$ce1f303d0aa8ec51$var$HD_HARDENED?`${r&~$ce1f303d0aa8ec51$var$HD_HARDENED}'`:r).join("/");return`m/${i}`},$ce1f303d0aa8ec51$var$validatePath=(r,i=0,n=!1)=>{let s;if(!(s="string"==typeof r?$ce1f303d0aa8ec51$var$getHDPath(r):Array.isArray(r)?r.map(r=>{let i=parseInt(r);if(Number.isNaN(i))throw $ce1f303d0aa8ec51$var$PATH_NOT_VALID;if(i<0)throw $ce1f303d0aa8ec51$var$PATH_NEGATIVE_VALUES;return i}):void 0)||i>0&&s.length{let n=r.filter(r=>$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),i));return 0===n.length?"valid":n.some(r=>r.required)?"required":"outdated"},$ce1f303d0aa8ec51$var$getReleaseChangelog=(r,i)=>{let n=r.filter(r=>$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),i));return n.map(r=>r.changelog)},$ce1f303d0aa8ec51$var$findLatestRelease=r=>{let i=r[0];return r.forEach(r=>{$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),i.version.join("."))&&(i=r)}),i},$ce1f303d0aa8ec51$var$Log$e=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core),$ce1f303d0aa8ec51$var$FIRMWARE_FIELDS=["firmware","firmware-v2","firmware-v8","firmware-btc-v8"],$ce1f303d0aa8ec51$var$FIRMWARE_FIELD_TYPE_MAP={firmware:$3FhS8.EFirmwareType.Universal,"firmware-v2":$3FhS8.EFirmwareType.Universal,"firmware-v8":$3FhS8.EFirmwareType.Universal,"firmware-btc-v8":$3FhS8.EFirmwareType.BitcoinOnly};function $ce1f303d0aa8ec51$var$getFirmwareTypeFromField(r){let i=$ce1f303d0aa8ec51$var$FIRMWARE_FIELD_TYPE_MAP[r];return void 0===i?$3FhS8.EFirmwareType.Universal:i}class $ce1f303d0aa8ec51$var$DataManager{static enrichFirmwareReleaseInfo(r){if(!r||"object"!=typeof r)return{firmware:[],ble:[]};let i=Object.assign({},r);return $ce1f303d0aa8ec51$var$FIRMWARE_FIELDS.forEach(r=>{let n=i[r];if(n&&Array.isArray(n)&&0!==n.length)try{i[r]=n.map(i=>{if(!i||"object"!=typeof i||i.firmwareType)return i;let n=$ce1f303d0aa8ec51$var$getFirmwareTypeFromField(r);return Object.assign(Object.assign({},i),{firmwareType:n})})}catch(i){console.error(`Error enriching firmware field "${r}":`,i)}}),i}static load(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.settings=r,!r.fetchConfig)return;let i=r.preRelease?"https://data.onekey.so/pre-config.json":"https://data.onekey.so/config.json",n=`${i}?noCache=${$ce1f303d0aa8ec51$var$getTimeStamp()}`,s=null,a="none";if(r.configFetcher){$ce1f303d0aa8ec51$var$Log$e.debug("[DataConfig] Trying configFetcher (client-side fetcher)...");try{(s=yield r.configFetcher(n))?(a="configFetcher",$ce1f303d0aa8ec51$var$Log$e.log("[DataConfig] ConfigFetcher success")):$ce1f303d0aa8ec51$var$Log$e.debug("[DataConfig] ConfigFetcher returned null, will fallback to axios")}catch(r){$ce1f303d0aa8ec51$var$Log$e.warn("[DataConfig] ConfigFetcher error, will fallback to axios:",r)}}if(!s){$ce1f303d0aa8ec51$var$Log$e.debug("[DataConfig] Trying axios (SDK default fetcher)...");try{let r=yield $ce1f303d0aa8ec51$var$axios__default.default.get(n,{timeout:7e3});s=r.data,a="axios",$ce1f303d0aa8ec51$var$Log$e.log("[DataConfig] Axios fetch success")}catch(r){$ce1f303d0aa8ec51$var$Log$e.warn("[DataConfig] Axios fetch error:",r)}}s?($ce1f303d0aa8ec51$var$Log$e.log(`[DataConfig] Config loaded successfully via [${a}]`),this.deviceMap={[$3FhS8.EDeviceType.Classic]:this.enrichFirmwareReleaseInfo(s.classic),[$3FhS8.EDeviceType.Classic1s]:this.enrichFirmwareReleaseInfo(s.classic1s),[$3FhS8.EDeviceType.ClassicPure]:this.enrichFirmwareReleaseInfo(s.classicpure),[$3FhS8.EDeviceType.Mini]:this.enrichFirmwareReleaseInfo(s.mini),[$3FhS8.EDeviceType.Touch]:this.enrichFirmwareReleaseInfo(s.touch),[$3FhS8.EDeviceType.Pro]:this.enrichFirmwareReleaseInfo(s.pro)},this.assets={bridge:s.bridge}):$ce1f303d0aa8ec51$var$Log$e.warn("[DataConfig] All fetch methods failed, using built-in default config")})}static updateEnv(r){if(this.settings){let i=this.settings.env;this.settings=Object.assign(Object.assign({},this.settings),{env:r}),console.debug(`DataManager env updated: ${i} -> ${r}`)}}static checkAndReloadData(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$getTimeStamp()-this.lastCheckTimestamp>108e5&&(yield this.load(this.settings).then(()=>{this.lastCheckTimestamp=$ce1f303d0aa8ec51$var$getTimeStamp()}))})}static getProtobufMessages(r="latest"){return this.messages[r]}static getSettings(r){return this.settings?"string"==typeof r?this.settings[r]:this.settings:null}}$ce1f303d0aa8ec51$var$_a$1=$ce1f303d0aa8ec51$var$DataManager,$ce1f303d0aa8ec51$var$DataManager.deviceMap={[$3FhS8.EDeviceType.Classic]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Classic1s]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Mini]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Touch]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Pro]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.ClassicPure]:{firmware:[],ble:[]}},$ce1f303d0aa8ec51$var$DataManager.assets=null,$ce1f303d0aa8ec51$var$DataManager.messages={latest:$ce1f303d0aa8ec51$var$MessagesJSON,v1:$ce1f303d0aa8ec51$var$MessagesLegacyV1JSON},$ce1f303d0aa8ec51$var$DataManager.lastCheckTimestamp=0,$ce1f303d0aa8ec51$var$DataManager.getFirmwareStatus=(r,i)=>{var n,s;let a=$ce1f303d0aa8ec51$var$getDeviceType(r);if(a===$3FhS8.EDeviceType.Unknown)return"unknown";let o=$ce1f303d0aa8ec51$var$getFirmwareType(r),d=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r);if(!1===r.firmware_present)return"none";if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(a)&&r.bootloader_mode)return"unknown";let f=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),l=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[a])||void 0===n?void 0:n[f])&&void 0!==s?s:[],u=d.join(".");return l.length>0&&o!==i&&(u="0.0.0"),$ce1f303d0aa8ec51$var$getReleaseStatus(l,u)},$ce1f303d0aa8ec51$var$DataManager.getSysResourcesLatestRelease=({features:r,forcedUpdateRes:i,firmwareType:n})=>{var s,a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r),f=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r);if(d!==$3FhS8.EDeviceType.Pro&&d!==$3FhS8.EDeviceType.Touch)return;let l=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:n}),u=null!==(a=null===(s=$ce1f303d0aa8ec51$var$_a$1.deviceMap[d])||void 0===s?void 0:s[l])&&void 0!==a?a:[],c=f.join("."),p=u.filter(r=>i?!!r.resource:$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),c)&&!!r.resource);return null===(o=$ce1f303d0aa8ec51$var$findLatestRelease(p))||void 0===o?void 0:o.resource},$ce1f303d0aa8ec51$var$DataManager.getSysFullResource=(r,i)=>{var n,s,a;let o=$ce1f303d0aa8ec51$var$getDeviceType(r);if(o===$3FhS8.EDeviceType.Unknown||o!==$3FhS8.EDeviceType.Pro&&o!==$3FhS8.EDeviceType.Touch)return;let d=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),f=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[o])||void 0===n?void 0:n[d])&&void 0!==s?s:[],l=f.filter(r=>!!r.fullResource);return null===(a=$ce1f303d0aa8ec51$var$findLatestRelease(l))||void 0===a?void 0:a.fullResource},$ce1f303d0aa8ec51$var$DataManager.getBootloaderResource=(r,i)=>{var n,s,a;let o=$ce1f303d0aa8ec51$var$getDeviceType(r);if(o===$3FhS8.EDeviceType.Unknown)throw Error("Device type is unknown");if(o!==$3FhS8.EDeviceType.Pro&&o!==$3FhS8.EDeviceType.Touch)return;let d=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),f=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[o])||void 0===n?void 0:n[d])&&void 0!==s?s:[];if(0===f.length)throw Error(`Could not found bootloader resource with deviceType:${o} firmwareUpdateField:${d}`);let l=f.filter(r=>!!r.bootloaderResource);return null===(a=$ce1f303d0aa8ec51$var$findLatestRelease(l))||void 0===a?void 0:a.bootloaderResource},$ce1f303d0aa8ec51$var$DataManager.getBootloaderTargetVersion=(r,i)=>{var n,s,a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r);if(d===$3FhS8.EDeviceType.Unknown)return;let f=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),l=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[d])||void 0===n?void 0:n[f])&&void 0!==s?s:[],u=l.filter(r=>!!r.bootloaderResource);return null!==(o=null===(a=null==u?void 0:u[0])||void 0===a?void 0:a.bootloaderVersion)&&void 0!==o?o:void 0},$ce1f303d0aa8ec51$var$DataManager.getBootloaderRelatedFirmwareVersion=(r,i)=>{var n,s,a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r);if(d===$3FhS8.EDeviceType.Unknown||!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(d))return;let f=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),l=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[d])||void 0===n?void 0:n[f])&&void 0!==s?s:[],u=l.filter(r=>!!r.bootloaderRelatedFirmwareVersion);return null!==(o=null===(a=null==u?void 0:u[0])||void 0===a?void 0:a.bootloaderRelatedFirmwareVersion)&&void 0!==o?o:void 0},$ce1f303d0aa8ec51$var$DataManager.getFirmwareChangelog=(r,i)=>{var n,s;let a=$ce1f303d0aa8ec51$var$getDeviceType(r);if(a===$3FhS8.EDeviceType.Unknown)return[];let o=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r),d=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),f=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[a])||void 0===n?void 0:n[d])&&void 0!==s?s:[];if(!1===r.firmware_present||$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(a)&&r.bootloader_mode)return $ce1f303d0aa8ec51$var$getReleaseChangelog(f,"0.0.0");let l=o.join(".");return $ce1f303d0aa8ec51$var$getReleaseChangelog(f,l)},$ce1f303d0aa8ec51$var$DataManager.getFirmwareLatestRelease=(r,i)=>{var n,s;let a=$ce1f303d0aa8ec51$var$getDeviceType(r);if(a===$3FhS8.EDeviceType.Unknown)return;let o=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),d=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[a])||void 0===n?void 0:n[o])&&void 0!==s?s:[],f=$ce1f303d0aa8ec51$var$findLatestRelease(d);if(!f)return f;if(!f.resource){let n=$ce1f303d0aa8ec51$var$_a$1.getSysResourcesLatestRelease({features:r,firmwareType:i});return Object.assign(Object.assign({},f),{resource:n})}return f},$ce1f303d0aa8ec51$var$DataManager.getBLEFirmwareStatus=r=>{var i,n;let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(s===$3FhS8.EDeviceType.Unknown)return"unknown";let a=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(r);if(!a)return"none";let o=null!==(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.deviceMap[s])||void 0===i?void 0:i.ble)&&void 0!==n?n:[],d=a.join(".");return $ce1f303d0aa8ec51$var$getReleaseStatus(o,d)},$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareChangelog=r=>{var i,n;let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(s===$3FhS8.EDeviceType.Unknown)return[];let a=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(r);if(!a)return[];let o=null!==(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.deviceMap[s])||void 0===i?void 0:i.ble)&&void 0!==n?n:[],d=a.join(".");return $ce1f303d0aa8ec51$var$getReleaseChangelog(o,d)},$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareLatestRelease=r=>{var i,n;let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(s===$3FhS8.EDeviceType.Unknown)return;let a=null!==(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.deviceMap[s])||void 0===i?void 0:i.ble)&&void 0!==n?n:[];return $ce1f303d0aa8ec51$var$findLatestRelease(a)},$ce1f303d0aa8ec51$var$DataManager.getTransportStatus=r=>{var i,n;let s=null===(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.assets)||void 0===i?void 0:i.bridge)||void 0===n?void 0:n.version;if(!s)return"valid";let a=$ce1f303d0aa8ec51$var$semver__default.default.gte(r,s.join("."));return a?"valid":"outdated"},$ce1f303d0aa8ec51$var$DataManager.getBridgeChangelog=()=>{var r;return null===(r=$ce1f303d0aa8ec51$var$_a$1.assets)||void 0===r?void 0:r.bridge.changelog},$ce1f303d0aa8ec51$var$DataManager.isBleConnect=r=>"react-native"===r||"lowlevel"===r||"desktop-web-ble"===r,$ce1f303d0aa8ec51$var$DataManager.isDesktopWebUsb=r=>"desktop-webusb"===r,$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb=r=>"webusb"===r;const $ce1f303d0aa8ec51$var$PROTOBUF_MESSAGE_CONFIG={model_mini:[{minVersion:"3.3.0",messageVersion:"latest"},{minVersion:"0.0.1",messageVersion:"v1"},{minVersion:"0.0.0",messageVersion:"latest"}],model_touch:[{minVersion:"4.5.0",messageVersion:"latest"},{minVersion:"0.0.1",messageVersion:"v1"},{minVersion:"0.0.0",messageVersion:"latest"}]},$ce1f303d0aa8ec51$var$getSupportMessageVersion=r=>{var i;if(!r)return{messages:$ce1f303d0aa8ec51$var$DataManager.messages.latest,messageVersion:"latest"};let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),s=$ce1f303d0aa8ec51$var$getDeviceType(r),a=$ce1f303d0aa8ec51$var$PROTOBUF_MESSAGE_CONFIG[s]||$ce1f303d0aa8ec51$var$DeviceTypeToModels[s]&&$ce1f303d0aa8ec51$var$DeviceTypeToModels[s].map(r=>$ce1f303d0aa8ec51$var$PROTOBUF_MESSAGE_CONFIG[r]).find(r=>void 0!==r),o=null!==(i=null==a?void 0:a.sort((r,i)=>$ce1f303d0aa8ec51$var$semver__default.default.compare(i.minVersion,r.minVersion)))&&void 0!==i?i:[];for(let{minVersion:r,messageVersion:i}of o)if($ce1f303d0aa8ec51$var$semver__default.default.gte(n,r))return{messages:$ce1f303d0aa8ec51$var$DataManager.messages[i],messageVersion:i};return{messages:$ce1f303d0aa8ec51$var$DataManager.messages.latest,messageVersion:"latest"}},$ce1f303d0aa8ec51$var$supportInputPinOnSoftware=r=>{if(!r)return{support:!1};let i=$ce1f303d0aa8ec51$var$getDeviceType(r);if(i===$3FhS8.EDeviceType.Touch||i===$3FhS8.EDeviceType.Pro)return{support:!1};let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return{support:$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"2.3.0"),require:"2.3.0"}},$ce1f303d0aa8ec51$var$supportNewPassphrase=r=>{if(!r)return{support:!1};let i=$ce1f303d0aa8ec51$var$getDeviceType(r);if(i===$3FhS8.EDeviceType.Touch||i===$3FhS8.EDeviceType.Pro)return{support:!0};let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return{support:$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"2.4.0"),require:"2.4.0"}},$ce1f303d0aa8ec51$var$getPassphraseStateWithRefreshDeviceInfo=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var n,s,a,o,d;let{features:f,commands:l}=r,u=(null==f?void 0:f.unlocked)===!1,{passphraseState:c,newSession:p,unlockedAttachPin:h}=yield $ce1f303d0aa8ec51$var$getPassphraseState(f,l,Object.assign({},i)),g=$ce1f303d0aa8ec51$var$getDeviceType(f)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(f)===$3FhS8.EDeviceType.Pro,m=c&&(null==f?void 0:f.passphrase_protection)!==!0,v=g&&u;return(v||m)&&(yield r.getFeatures()),(null==f?void 0:f.device_id)&&r.updateInternalState(null!==(s=null===(n=r.features)||void 0===n?void 0:n.passphrase_protection)&&void 0!==s&&s,c,null!==(o=null===(a=r.features)||void 0===a?void 0:a.device_id)&&void 0!==o?o:"",p,null===(d=r.features)||void 0===d?void 0:d.session_id),{passphraseState:c,newSession:p,unlockedAttachPin:h}}),$ce1f303d0aa8ec51$var$getPassphraseState=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){if(!r)return{passphraseState:void 0,newSession:void 0,unlockedAttachPin:void 0};let s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r),a=$ce1f303d0aa8ec51$var$getDeviceType(r),o=$ce1f303d0aa8ec51$var$existCapability(r,$5xch2.Enum_Capability.Capability_AttachToPin),d=o||a===$3FhS8.EDeviceType.Pro&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s.join("."),"4.15.0");if(d){let{message:r,type:s}=yield i.typedCall("GetPassphraseState","PassphraseState",{passphrase_state:(null==n?void 0:n.onlyMainPin)?void 0:null==n?void 0:n.expectPassphraseState});if("CallMethodError"===s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Get the passphrase state error");return{passphraseState:r.passphrase_state,newSession:r.session_id,unlockedAttachPin:r.unlocked_attach_pin}}let{message:f,type:l}=yield i.typedCall("GetAddress","Address",{address_n:[$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$toHardened(1),$ce1f303d0aa8ec51$var$toHardened(0),0,0],coin_name:"Testnet",script_type:"SPENDADDRESS",show_display:!1});if("CallMethodError"===l)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Get the passphrase state error");return{passphraseState:f.address,newSession:void 0,unlockedAttachPin:void 0}}),$ce1f303d0aa8ec51$var$supportBatchPublicKey=(r,i)=>{if(!r)return!1;let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),s=$ce1f303d0aa8ec51$var$getDeviceType(r);return(null==i?void 0:i.includeNode)&&s===$3FhS8.EDeviceType.Pro?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"4.14.0"):(null==i?void 0:i.includeNode)&&s===$3FhS8.EDeviceType.Touch?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"4.11.0"):(null==i?void 0:i.includeNode)&&$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic1s.includes(s)?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"3.12.0"):(null==i?void 0:i.includeNode)&&$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(s)?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"3.10.0"):(null==i||!i.includeNode)&&(s===$3FhS8.EDeviceType.Touch||s===$3FhS8.EDeviceType.Pro?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"3.1.0"):$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"2.6.0"))},$ce1f303d0aa8ec51$var$supportModifyHomescreen=r=>{if(!r)return{support:!1};let i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),n=$ce1f303d0aa8ec51$var$getDeviceType(r);return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(n)?{support:!0}:{support:$ce1f303d0aa8ec51$var$semver__default.default.gte(i,"3.4.0")}},$ce1f303d0aa8ec51$var$getLatestFirmwareField=r=>"bitcoinonly"===r?"firmware-btc-v8":"firmware-v8",$ce1f303d0aa8ec51$var$getFirmwareUpdateField=({features:r,updateType:i,targetVersion:n,firmwareType:s})=>{let a=$ce1f303d0aa8ec51$var$getDeviceType(r),o=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r);if("ble"===i)return"ble";let d=$ce1f303d0aa8ec51$var$getLatestFirmwareField(s);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(a))return d;if(a===$3FhS8.EDeviceType.Touch){if(n){if($ce1f303d0aa8ec51$var$semver__default.default.eq(n,"4.0.0"))return"firmware-v2";if($ce1f303d0aa8ec51$var$semver__default.default.gt(n,"4.0.0"))return d}return $ce1f303d0aa8ec51$var$semver__default.default.lt(o.join("."),"3.4.0")?"firmware":d}return a===$3FhS8.EDeviceType.Pro?d:"firmware"},$ce1f303d0aa8ec51$var$getFirmwareUpdateFieldArray=(r,i)=>{let n=$ce1f303d0aa8ec51$var$getDeviceType(r);if("ble"===i)return["ble"];if("classic"===n||"classic1s"===n||"mini"===n||"classicpure"===n)return["firmware-v8"];if("touch"===n){let i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return $ce1f303d0aa8ec51$var$semver__default.default.gt(i,"4.0.0")?["firmware-v8","firmware"]:$ce1f303d0aa8ec51$var$semver__default.default.gte(i,"4.0.0")?["firmware-v2","firmware"]:!i||$ce1f303d0aa8ec51$var$semver__default.default.lt(i,"3.0.0")?["firmware-v8","firmware-v2","firmware"]:["firmware"]}return"pro"===n?["firmware-v8"]:["firmware"]};function $ce1f303d0aa8ec51$var$fixVersion(r){let i=r.split(".");for(;i.length<3;)i.push("0");return(i=i.map(r=>$7U5sq.isNaN(parseInt(r,10))?"0":r)).join(".")}const $ce1f303d0aa8ec51$var$fixFeaturesFirmwareVersion=r=>{let i=Object.assign({},r);return i.onekey_firmware_version&&!$ce1f303d0aa8ec51$var$semver__default.default.valid(i.onekey_firmware_version)&&(i.onekey_firmware_version=$ce1f303d0aa8ec51$var$fixVersion(i.onekey_firmware_version)),i.onekey_version&&!$ce1f303d0aa8ec51$var$semver__default.default.valid(i.onekey_version)&&(i.onekey_version=$ce1f303d0aa8ec51$var$fixVersion(i.onekey_version)),i};var $c1edd194c2ff5fa7$exports={};$c1edd194c2ff5fa7$exports=JSON.parse('{"name":"@onekeyfe/hd-core","version":"1.1.26-alpha.8","description":"Core processes and APIs for communicating with OneKey hardware devices.","author":"OneKey","homepage":"https://github.com/OneKeyHQ/hardware-js-sdk#readme","license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/OneKeyHQ/hardware-js-sdk.git"},"publishConfig":{"access":"public"},"scripts":{"dev":"rimraf dist && rollup -c ../../build/rollup.config.js -w","build":"rimraf dist && rollup -c ../../build/rollup.config.js","lint":"eslint .","lint:fix":"eslint . --fix","test":"jest"},"bugs":{"url":"https://github.com/OneKeyHQ/hardware-js-sdk/issues"},"dependencies":{"@onekeyfe/hd-shared":"1.1.26-alpha.8","@onekeyfe/hd-transport":"1.1.26-alpha.8","axios":"1.15.0","bignumber.js":"^9.0.2","bytebuffer":"^5.0.1","jszip":"^3.10.1","parse-uri":"^1.0.7","semver":"^7.3.7"},"peerDependencies":{"@noble/hashes":"^1.1.3"},"devDependencies":{"@noble/hashes":"^1.1.3","@types/parse-uri":"^1.0.0","@types/semver":"^7.3.9","@types/w3c-web-usb":"^1.0.10","@types/web-bluetooth":"^0.0.21"},"gitHead":"f8267f4b63086b9d0bd61b0a3a41912c4c197291"}');const $ce1f303d0aa8ec51$var$getSDKVersion=()=>$c1edd194c2ff5fa7$exports.version,$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN=`https://jssdk.onekey.so/${$ce1f303d0aa8ec51$var$getSDKVersion()}/`,$ce1f303d0aa8ec51$var$whitelist=[{origin:"file://"},{origin:"1key.so"},{origin:"onekey.so"},{origin:"onekeycn.com"},{origin:"onekeytest.com"},{origin:"localhost"}],$ce1f303d0aa8ec51$var$whitelistExtension=["jnmbobjmhlngoefaiojfljckilhhlhcj","acmacodkjbdgmoleebolmdjonilkdbch","mcohilncbfahbmgdjkbpemcciiolgcge"],$ce1f303d0aa8ec51$var$DEFAULT_PRIORITY=2,$ce1f303d0aa8ec51$var$initialSettings={configSrc:"./data/config.json",version:"",debug:!1,priority:$ce1f303d0aa8ec51$var$DEFAULT_PRIORITY,trustedHost:!1,connectSrc:$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN,iframeSrc:`${$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN}iframe.html`,parentOrigin:"undefined"!=typeof window&&window.location?window.location.origin:"",extension:"undefined"!=typeof chrome&&(null===($ce1f303d0aa8ec51$var$_a=null==chrome?void 0:chrome.runtime)||void 0===$ce1f303d0aa8ec51$var$_a?void 0:$ce1f303d0aa8ec51$var$_a.id)||"",supportedBrowser:"undefined"==typeof navigator||!/Trident|MSIE|Edge/.test(navigator.userAgent),env:"web",lazyLoad:!1,timestamp:new Date().getTime()},$ce1f303d0aa8ec51$var$getEnv=()=>{if("undefined"!=typeof chrome&&chrome.runtime&&void 0!==chrome.runtime.onConnect)return"webextension";if("undefined"!=typeof navigator){if("string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase())return"react-native";let r=navigator.userAgent.toLowerCase();if(r.indexOf(" electron/")>-1)return"electron"}return"web"},$ce1f303d0aa8ec51$var$corsValidator=r=>{if("string"==typeof r)return r.match(/^https:\/\/([A-Za-z0-9\-_]+\.)*onekey\.so\//)||r.match(/^https?:\/\/localhost:[58][0-9]{3}\//),r},$ce1f303d0aa8ec51$var$parseConnectSettings=(r={})=>{let i;let n=Object.assign({},$ce1f303d0aa8ec51$var$initialSettings);Object.prototype.hasOwnProperty.call(r,"debug")&&(n.debug=r.debug),r.isFrame&&(n.parentOrigin=r.parentOrigin),"string"==typeof r.connectSrc&&(n.connectSrc=r.connectSrc),"undefined"!=typeof window?i=window.ONEKEY_CONNECT_SRC:void 0!==$parcel$global&&(i=$parcel$global.ONEKEY_CONNECT_SRC),"string"==typeof i&&(n.connectSrc=$ce1f303d0aa8ec51$var$corsValidator(i),n.debug=!0);let s=n.connectSrc||$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN;return n.iframeSrc=`${s}iframe.html`,r.transportReconnect&&(n.transportReconnect=r.transportReconnect),r.lazyLoad&&(n.lazyLoad=r.lazyLoad),"string"==typeof r.env?n.env=r.env:n.env=$ce1f303d0aa8ec51$var$getEnv(),r.timestamp&&(n.timestamp=r.timestamp),r.preRelease&&(n.preRelease=r.preRelease),r.fetchConfig&&(n.fetchConfig=r.fetchConfig),n};function $ce1f303d0aa8ec51$var$shouldUpdateBootloaderForClassicAndMini({currentVersion:r,bootloaderVersion:i,willUpdateFirmware:n,targetBootloaderVersion:s,bootloaderRelatedFirmwareVersion:a}){return!(s&&$ce1f303d0aa8ec51$var$semver__default.default.gte(i,s.join(".")))&&!!($ce1f303d0aa8ec51$var$semver__default.default.gte(n,a.join("."))||$ce1f303d0aa8ec51$var$semver__default.default.gte(r,a.join(".")))}function $ce1f303d0aa8ec51$var$isEnteredManuallyBoot(r,i){let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=n===$3FhS8.EDeviceType.Mini,a="firmware"===i&&n===$3FhS8.EDeviceType.Classic&&"1.8.3"===r.bootloader_version;return s||a}function $ce1f303d0aa8ec51$var$checkNeedUpdateBootForTouch(r,i){let n=$ce1f303d0aa8ec51$var$getDeviceType(r);if(!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(n))return!1;let s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),a=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(r).join("."),o=$ce1f303d0aa8ec51$var$DataManager.getBootloaderTargetVersion(r,i);return!!o&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s,"3.2.0")&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s,"4.1.0")&&$ce1f303d0aa8ec51$var$semver__default.default.lte(a,o.join("."))}function $ce1f303d0aa8ec51$var$checkNeedUpdateBootForClassicAndMini({features:r,willUpdateFirmware:i,firmwareType:n}){let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(s)||!i)return!1;let a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),o=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(r).join("."),d=$ce1f303d0aa8ec51$var$DataManager.getBootloaderTargetVersion(r,n);if(d&&$ce1f303d0aa8ec51$var$semver__default.default.gte(o,d.join(".")))return!1;let f=$ce1f303d0aa8ec51$var$DataManager.getBootloaderRelatedFirmwareVersion(r,n);return!!f&&$ce1f303d0aa8ec51$var$shouldUpdateBootloaderForClassicAndMini({currentVersion:a,bootloaderVersion:o,willUpdateFirmware:i,targetBootloaderVersion:d,bootloaderRelatedFirmwareVersion:f})}const $ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE$1=16384;function $ce1f303d0aa8ec51$var$checkBootloaderLength(r){let i=new Uint8Array(r.slice(0,Math.min($ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE$1,r.byteLength))),n=$ce1f303d0aa8ec51$var$ByteBuffer__default.default.wrap(i,void 0,void 0,!0);n.LE(),n.readByte(),n.readByte(),n.readByte(),n.readByte();let s=n.readUint32();n.readUint32();let a=n.readUint32(),o=s+a;return o===r.byteLength}const $ce1f303d0aa8ec51$var$LANGUAGE_LABELS={en:"English",zh_cn:"简体中文",zh_hk:"繁體中文",ja:"日本語",ko:"한국어",fr:"Fran\xe7ais",de:"Deutsch",ru:"Russian",es:"Spanish",it:"Italiano",pt_br:"Portuguese (Brazil)"},$ce1f303d0aa8ec51$var$getLanguageConfig=r=>{let i=[];switch(r){case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Mini:i=["en","zh_cn"];break;case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.ClassicPure:i=["en","zh_cn","zh_hk","ja","pt_br","de","ko"];break;case $3FhS8.EDeviceType.Touch:case $3FhS8.EDeviceType.Pro:i=Object.keys($ce1f303d0aa8ec51$var$LANGUAGE_LABELS);break;default:i=[]}return i.map(r=>({code:r,label:$ce1f303d0aa8ec51$var$LANGUAGE_LABELS[r]}))},$ce1f303d0aa8ec51$var$getAutoLockOptions=r=>{switch(r){case $3FhS8.EDeviceType.Mini:case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.ClassicPure:return[{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:2,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];case $3FhS8.EDeviceType.Touch:case $3FhS8.EDeviceType.Pro:return[{seconds:30,minute:0,hour:0,day:0},{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:2,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:30,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];default:return[]}},$ce1f303d0aa8ec51$var$getAutoShutDownOptions=r=>{switch(r){case $3FhS8.EDeviceType.Mini:return[];case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.ClassicPure:return[{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:3,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];case $3FhS8.EDeviceType.Touch:case $3FhS8.EDeviceType.Pro:return[{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:2,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];default:return[]}},$ce1f303d0aa8ec51$var$getT1Data=()=>({default:{name:"default",hex:""},original:{name:"original",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000003c000000000000000000000000000003fc000000000000000000000000000003fc000000000000000000000000000003fc000000000000000000000000000003fc0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000ff000000000000000000000000000003ffc00000000000000000000000000003ffc0000000000000000000000000000f00f0000000000000000000000000000f00f0000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000000f00f0000000000000000000000000000f00f00000000000000000000000000003ffc00000000000000000000000000003ffc00000000000000000000000000000ff000000000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},circleweb:{name:"circleweb",hex:"00486003070c08080c01c1c0380000c0007cc003fc04080c08017f801800018000f7c0033806080c08031d80180001000088400218020c0c0802018018000700008040020e0304041806018018003f0001f0400206010404180401803000f9000188e00403018604100c03c06003e180030fe00c01808e3e10080271f01f0180070f383e00c0fe7f3018041fb83c00801e880ff38060e1e3fc10080e0ee000c0f87007c0c020c0c1c610101c0780006078600300703f80c18320201803000070182003001c3b80c1816040100300007f0c6001000660c0e383f08010010007fc0660030001c043ff8319001001007cf00340030000c07f9cfe0e00100307e0c00160030000c07c84fe0e0078033e00c001e003e001c0d8c48e0c03cc0fe0018001f006ffc7f38c448e0c0e07ff00018001b80c03fc3f06669bfe7807fc000180019e3800181f062293e7c0071c00018001ffe0001809831292c1000c060007c001e0c0001808c3929481001c02007fc003806000181071bfa48100780307f0e0030020001c3038ffe8c30ff801fe00600700303ffff00c3ff8eff81801e000300e001fe071fe07381a7f00180100003f1e0010006043e7600c430018030000f9f200100040603ce007c30008060001c0c600100040600cc006c3000c0c00018083003000406007c007e3800f3800030083002001c07ffcc007fffe3ff0000200838060ffe0f1fc40071c0fe07000020047c0ffc03f800cc0061800c0300006003cfff00039c01fe00e1800c010007e00207fc00030c1fe701f38018018ffff002cc06000607f863c71fe01801fe0030033802000403c063ff0c3c0801800038021003003c0300e2311c07880180001802300103e402039e31f700fc0300000c0760013c06060e1e31e1807c0600000f966001c0031ff813ff40c07e1c00003ffc20018001f0e0333e607183fc0000601c20010000e0606222203900ff0000c00c70030007e020c662101f00e7fe00800fd803003ec0218463180600601ff90000780601f0c03f086308060060007f00003e0e0780607f886104fe0060000300001ff9fc0060c0f841079e0040000100000dc060003f807041060600c000018000058060007b807041840301f00001800007003001c1007fc3ec01831c00008000070010070100706c3c01fe07000fc0000600181c018060380c01f001c078e010060018700380c0300c01e00070c03870060018c006e1c010040330001d801fd00e001b001c7ec0100606180007000e001a001c003818c03007fc0c00030006003f003c00701040300ffc0e000300040fc3807f00e02060f0080c07000300040680c1c18180407f98380603800300060300ff00c300405f87fc0301c00300060100ce006600808183c40100e1ff000711008600380100818106018063038009f"},circuit:{name:"circuit",hex:"ffffffc18380002180001c0380f00c0000000041038000608000380701e0180000000063038000608000700e03c030400000003e038000218000e01c078060e000000000038000330001c0380f00c1b0000000000380001e000380701e0183180000001c03800000000700e03c03060c0000003703800000000e01c078060c060000006103800000001c0380f00c1803ffffffc18387ff8000380701e0183001ffffffc18387ff8000700e03c0306000000000610387ff8000e01c078060c000000000330387878001c0380f00c180000000001c038707800380701e0183038000000000038703800700e03c030606c000000000038707800e01c078060c0c6000000000038787801c0380f00c181830ffffffc00387ff80380701e018303018ffffffe00387ff80700e03c03060600c000000600387ff80e01c078060c0c0060000006003800001c0380f00c18180033ffffe600380000380701e01830300013ffffe600380000700e03c03060600003ffffe600380000e01c078060c0c02013ffffe600380001c0380f00c181807013c001e6007c000380701e01830300f813c001e600fe000700e03c03060601fc13c001e601ff000e01c078060c0c03de03c001e601ff001c0380f00c1818078f03c001e601ff00380701e01830300f0783c001e601ff00700e03c03060601e03c3c001e600ff00e01c078060c0c03c01e3c001e600fe01c0380f00c181807800f3c001e600380380701e01830300f00073c001e600000700e03c03060601e00033c001e600000e01c078060c0c03c00013c001e600001c0380f00c181807800003c001e60000380701e01830300f000003ffffe60000700e03c03060601e0c0013ffffe60000e01c078060c0c03c1f0033ffffe60001c0380f00c1818078218073ffffe6000380701e01830300f06080f0000006000700e03c03060601e06081e0000006000e01c078060c0c03c02083cffffffe001c0380f00c1818078133078ffffffc00380701e01830300f07de0f0000000000700e03c03060601e08401e0000000000e01c078060c0c03c18203c0000000001c0380f00c1818078102078100000000380701e01830300f01860f0200000000700e03c03060601e00c41e0400000000e01c078060c0c03c00783c0800078001c0380f00c181807800007810000cc00380701e01830300f00000f0200018600700e03c03060600780001e040fff0200e01c078060c03003c0003c0800018201c0380f00c1801801e00078100000860380701e3f80c00c00f000f0200000fc0700e03c63006006007801e0400000300e01c07841003003003c03c08001c0001c0380f041001801801e078100066000380701e041000c00c00f0f0200043000700e03c0630006006e079e04000c1000e01c07803e0003003b83fc08038"},starweb:{name:"starweb",hex:"01e600002f804210c218803f80001bc01f86000020f04610e31883c10000187ef1890000200e4331a1308e010000042331190ffe2003c1e010e070010ffe2623221108022000e04210c0c001180622112221880223e078040803c0f11004211144218c0222386404080cc31110047108444204022308230004104611100c5088cc46440201081188046246311008188c88844603110890c800c2462010180844888c420311f88830038446e230108c441088e33e10188810030447823e10c4421108a1e0100084180208400203e046221111000008008618060840040000222223111000180002140b104006000222112233180ffe1e830219104f1ff8023111222220f00701c1221120e01807c0111162220780058070a1210180680078111044646e0000403c80e14780c0001d888844446203e23006e0c1990110e01988884447830e201821e0c1e10601fc107888844e010c3106006041c1082104201c8888d8008410030030c1823002086006c448e030c210808030c3024042184301c44880f841e0407818e6048081f087c0443b038c2080203c1dae070180610c70351c0e061000fffe17ba0fffc003081c0e181802180e08038b36380438061006067c30030c300401f937f000070c30030fd2080186c002009daf601000d8600612110403038001004decc0200070300c221182060dffc0c063f980c07fec18186211c18818403ffffb37ffff00860c30e21120f0602000fe0e1c1fe00101834122111060c0180303861870300200c1822211180102060c007e1f800c08106006221116020f813000c738c0062078100e2211130418c0f0031ffe2003c0c608122211118830618f07fbf7f81c608304622211113070c3007f32d33f8030c383a2220191301d8600f026d903c0184603222088914c070c03606edd81b00c380ca26088998300181c4076db808e0400186644888981c010e080e7f9c0418200e0644488890070230181873860607103802444888a100e6c0107061838200d8e001c44888c3c03f0033f06183a3003f00f0c44c0486700b007c6061838f803c03984c0444841c180ec0c04083c0c0060e08488445080610008180c1c06040021804288446180620008321e1e12040011806108442100421810222e1911040610802108624200c43f10424a1490823f08c01091e24600846310838924704231884018913283818842010309243022108c4078530f807908c2220611a01811108427c07c03800708fe240c10c20c091ec43c007081b00010f0283210c2130d07c20003e0c28e00100039c210c210c70002001c504484e010003e0200c2101f000201f848c44437f003f00221211003e0033f98888442233ffe6000221110019fffa110888c2311200060e0261121c1800122310c0a2118c00043a1640923718000c62114"},stars:{name:"stars",hex:"0000000000000000000000000000000007e000000000000000000000000000000ff000000000000000000000000000001ff800000000000000200000000000043ffc00000001000000000000008000007ffe0800000380000000000001c000007ffe00000001000000000000009038007ffe0000000800000000001c00027c007ffe0000002040000000003e0000fe007ffe80000000003ff000003e0000fe007ffe2a00014021fffe00003e0000fe003ffc0080780007ffff80001c00007c001ff80028fc001fffffe00080000038000ff00002fc003ffffff000020000800007e00000fc00fffffffc02000000000000000000fc01ffc63ffe080100010000000800007803ffc63fff000000000000000000000003ffc63fff200080020000000400010007ffc63fff80000000000000000000000fffc63fffc0002008000000020004000fe00007ffc0000000000000000010001fe00000ffe0001020000000010020001fe000007fe0000000000000004000003ffc00003ff0000840000000000080003ffe07c03ff0000000000000002000003ffe07f03ff0000780000000000200007ffe07f83ff8000fc0000000001800007ffe07f83ff8000fc0000000003c00007ffe07f03ff8000fc0000000003c00007ffe07c07ff8000fc0000000001800007ffe0000fff8000780000000000000007ffe00007ff8000000008000001000007ffe00001ff800010001c000000000007ffe07e01ff8000000008000001000007ffe07f80ff8000100020000002000017ffe07fc0ff8000000000000000000043ffe07fc0ff000010004000c002000203ffe07fc0ff500008000000c000000803ffe07f80ff0480000100000004001c01ffe07e01fe0030080000000000000801ffc00001fe0030000400000004000000fe000003fc0000080000000000000000fe00000ffc00000008000000080000007e00003ff800000400000000000000003ffc63fff000000020000000080000003ffc63fff000000780000000000000009ffc63ffe000000fc0000000100000020ffc63ffc000001fe00000000000000003fc63ff0000001fe00000007800000401fffffe0000001fe0000000fc0000e0007ffff84000001fe0000000fd5401f0001fffe00000014fc0000000fc0155f00003ff0010000a0790000000fc0001f0000000000000500000000000780000e000000000040100000400000200000004000000000194000001000000000000010000000003c0000000800008000000004000000003c000000020000000000000000000000180000000080020000000001000000000000000000180800000000006000000000000080003c1c00000000006000000000000000003c0800001000000000000000000000001800000000000000000000000000000000"},bitcoin_b2:{name:"bitcoin_b2",hex:"000000000000000000000000000000000000000000000007800000000000000000000000000000fffc000000000000000000000000000fffffc00000000000000000000000003ffffff0000000000000000000000000fffffffc000000000000000000000003fffffffe000000000000000000000007ffffffff80000000000000000000000fffffffffc0000000000000000000001fffffffffe0000000000000000000007ffffffffff8000000000000000000007ffffffffff800000000000000000000fffffffffffc00000000000000000001fffffc7ffffe00000000000000000003fffff8f3ffff00000000000000000007fffff8f1ffff00000000000000000007fffff8e3ffff8000000000000000000ffffc10e3ffffc000000000000000000ffff800e3ffffc000000000000000001ffffc0003ffffe000000000000000001fffff0001ffffe000000000000000003fffff80007ffff000000000000000003fffff81803ffff000000000000000003fffff83f01ffff000000000000000003fffff03f80ffff000000000000000007fffff03fc0ffff800000000000000007fffff03fc0ffff800000000000000007fffff07fc0ffff800000000000000007ffffe07fc0ffff800000000000000007ffffe03f80ffff80000000000000000fffffe00001ffffc0000000000000000fffffe00003ffffc0000000000000000fffffc00007ffffc0000000000000000fffffc0f807ffffc00000000000000007ffffc0fe03ffff800000000000000007ffffc1ff01ffff800000000000000007ffff81ff81ffff800000000000000007ffff81ff80ffff800000000000000007fff801ff80ffff800000000000000003fff003ff81ffff000000000000000003fff000ff01ffff000000000000000003fffc000001ffff000000000000000003ffff800003ffff000000000000000001ffffc00007fffe000000000000000001ffffc7000ffffe000000000000000000ffffc71ffffffc000000000000000000ffff8f1ffffffc0000000000000000007fff8f1ffffff80000000000000000003fffce3ffffff00000000000000000003ffffe3ffffff00000000000000000001fffffffffffe00000000000000000000fffffffffffc000000000000000000007ffffffffff8000000000000000000007ffffffffff8000000000000000000001fffffffffe0000000000000000000000fffffffffc00000000000000000000007ffffffff800000000000000000000001fffffffe000000000000000000000000fffffffc0000000000000000000000003ffffff00000000000000000000000000fffffc000000000000000000000000000fffc000000000000000000000000000007800000000000000000000000000000000000000000000000"},bitcoin_shade:{name:"bitcoin_shade",hex:"00000000000002aaaa00000000000000000000000000155757600000000000000000000000002aeffef80000000000000000000000015dffffff000000000000000000000003bffbfbab80000000000000000000000ffff7f75540000000000000000000001ffe800aaaa0000000000000000000003fdc00005550000000000000000000007fb000002aa800000000000000000000ffc00000055600000000000000000001ff80007002ae00000000000000000003ff00007801fd00000000000000000007fe00007882fa80000000000000000007fc41c0f1f07f4000000000000000000ff889f8f1e0bea000000000000000001ff113fff1e15fd000000000000000001fe223ffe3c2aff000000000000000003fc440fff3c157f000000000000000003f88883fffc3ebf800000000000000007fd5103fff85f7f800000000000000007faaa23fffe3fbfc00000000000000007f55547f9ff9fdfc0000000000000000feaaa87f07fcfffc0000000000000000ff55547f01fe7dfe0000000000000000feaaa8ff00fe3efe0000000000000001fc5554fe007f5f7e0000000000000001feaaa8fe087f3efe0000000000000001fd7551fc147f1d7f0000000000000001febfe9fc00ff3aff0000000000000001fd77f3ff00ff177f0000000000000001feefebfffffe2eff0000000000000001fd5ff3fffffe1d7f0000000000000001febfe7fbfffc2aff00000000000000017d7fe7f0fff0577f0000000000000000feafeff03fe0eefe0000000000000001dd5d4fe00ff1557d0000000000000000beba0fe207f02a7a00000000000000015555dfe503f854760000000000000000aeabffc283f808ee00000000000000005757ffc143fc11de0000000000000000aaa7ffc2a3fc22be00000000000000005751fff007fc457c00000000000000006ba83ffe0ff889fc00000000000000005d540ffffff801f800000000000000003baa0ffffff003f8000000000000000037d40f7ffff007f000000000000000003fea0f1fffe00fe000000000000000001ff11e3dff800fd000000000000000000ff21e3c08001ba000000000000000000ffc3c3c00001740000000000000000007fc8c7800002ac0000000000000000003ff007800005500000000000000000003ff22780000aa00000000000000000001ffd40000055400000000000000000000ffea88800aa8000000000000000000007ffd11501d50000000000000000000003fff2aa1bfa0000000000000000000000ffffd7fff400000000000000000000007fffffffe800000000000000000000001fffffffd000000000000000000000000fffffffc0000000000000000000000001ffffff000000000000000000000000007ffffc0000000000000000000000000007ffc00000000000000"},bitcoin_b:{name:"bitcoin_b",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000003e0000000000000000000000000000003e1800000000000000000000000000007c1f00000000000000000000000000007c3e00000000000000000000000001007c3e00000000000000000000000001f07c3e00000000000000000000000003fff83c00000000000000000000000003fffc7c00000000000000000000000003fffffc00000000000000000000000001fffffc000000000000000000000000003ffffe000000000000000000000000001fffff800000000000000000000000001fffffe00000000000000000000000001ff7fff00000000000000000000000001fe07ff80000000000000000000000001fe01ffc0000000000000000000000003fe00ffe0000000000000000000000003fe007fe0000000000000000000000003fe003fe0000000000000000000000003fc003fe0000000000000000000000007fc003fe0000000000000000000000007fc003fe0000000000000000000000007fc007fe0000000000000000000000007ff00ffc000000000000000000000000fffffffc000000000000000000000000fffffff8000000000000000000000000fffffff0000000000000000000000000ffffffc0000000000000000000000001ff0fffc0000000000000000000000001ff01ffe0000000000000000000000001fe007ff0000000000000000000000001fe001ff8000000000000000000000003fe000ff8000000000000000000000003fe000ffc000000000000000000000003fc000ffc0000000000000000000000e7fc0007fc0000000000000000000001fffc000ffc0000000000000000000001fffc000ffc0000000000000000000001fffe001ffc0000000000000000000003ffffc07ff80000000000000000000000fffffffff800000000000000000000000ffffffff0000000000000000000000001fffffff0000000000000000000000001ffffffe0000000000000000000000001f3ffffc0000000000000000000000001e0ffff00000000000000000000000003e0f07800000000000000000000000003e1f00000000000000000000000000003e1f00000000000000000000000000003e1f00000000000000000000000000003c3e0000000000000000000000000000043e0000000000000000000000000000003e0000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},bitcoin_full:{name:"bitcoin_full",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e000020000000000000000000000003ff8001e000f000000000000f00000007ffe003e001f000000000000f8000000ffff003c001f030000000000f8000001fe7f803c001f1f0000000000f0000003fe5fc03c00041e000000000040000007f01fe07c00001e000000000000000007f01fe07800001e00000000000000000ff807e07fe01e3ff03fc0fe01e0ff800ff8c3f07ff03e3ff0ffc1ff81e1ffc00ff8c3f0fff83c3fe1ffc3ff83e1ffe00ff007f0fcf83c3fe3f087cfc3c3e3e00ff007f0f07c3c3c03e00f87c3c3c1e00ff187f0f03c7c7807c00f03c3c3c1e00fe1c7f0f03c787807801e03c7c3c1e00f81c7f1e03c787807801e03c783c1e00fc007e1e07c78780f801e03c78781e007f00fe1e078f8f00f801e07c78783e007f4ffe1e078f0f00f801e07878783c003f4ffc3c0f0f0f00f801e0f8f0783c001ffff83c1f0f0f807c01f0f0f0f83c000ffff03ffe0f0ffc7fe1fff0f0f07c0007ffe03ffc1e0ffc3fe0ffe0f0f0780003ff807ff81e07fc1ff07fc1f0f07800007c000fc00001f007c01e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},bitcat:{name:"bitcat",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff000000000000000000000000001e1ffff1e000000000000000000000007efffffcf80000000000000000000000e3ffffff1c0000000000000000000000c7ffffffce00000000000000000000019fffffffe60000000000000000000001bffffffff600000000000000000000013ffffffffa0000000000000000000000781fffe07c0000000000000000000000e10fffc41c0000000000000000000000e00fffc01e0000000000000000000001f00fcfe03e0000000000000000000001fc3f83f0fe0000000000000000000001ffff83ffff0000000000000000000003ffff87ffff0000000000000000000001ffffefffff0000000000000000000003ffefefefff0000000000000000000001ffefefdfff0000000000000000000001ffefcfdffe0000000000000000000001fff7979ffe0000000000000000000000fff8383ffc00000000000000000000007ffffffff800000000000000000000003ffffffff0000000000000000000000027ffffffc00000000000000000000000783f87fc380000000000000000000000f9c00003fc0000000000000000000000f7f703fffc0000000000000000000001e7f783fffe0000000000000000000001effb87fffe0000000000000000000003effbffffff0000000000000000000003effbffffff0000000000000000000007e7f3ffffff8000000000000000000007c001ffffff800000000000000000000f00007fffffc00000000000000000000e00003fffffc00000000000000000000c01001fffffe00000000000000000001803f00fffffe00000000000000000001803fc0fffffe000000000000000000010030e07fffff000000000000000000030030707fffff000000000000000000020070303fffff000000000000000000020060303fffff000000000000000000020060703fffff80000000000000000006007fe03fffff8000000000000000000600ffc01fffff8000000000000000000600c38037ffff8000000000000000000603c0c037ffff8000000000000000000603f8e037ffff8000000000000000000601f8e037ffffbf8000000000000000060180e037ffffbfe0000000000000000301c0c0760fffbfe0000000000000000301ffc071f3ff7ff00000000000000003807f80f3f9ff7ff00000000000000001c00601f3fdfefff00000000000000000e00003f7fdfdffe00000000000000000300007f7fdf3ffe0000000000000000000000ff3fd8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},nyancat:{name:"nyancat",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000030000000000000000000000000000000cc000000000000000000000000000000cc0000000000000000000000000000003000000000000000000000000000000030000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffe00000000000000000000000fffffffff00000000000000000000003ff9ffffff80000000000000000000003f19bfffff80000000000000000000003f833fffff80000000000000000000003fc03fffff80000000000000000000003fc03fffff80000000000000000000003f861fffff80000000000000000000003f870f8fff80000000000000000000003f8f8f87ff80000000000000000000003f0f0e71ff83800000000000000000003e000e79ff83c00000003fffe000000f3e101e7e7f8fc00000083fffe000000f3e3c3e7e7f8fc000000ffffffffff007303e3e7f001fc000000ffffffe1ff3c3207e1e7f807fc000000ffffffe1fe1e03c1c3e7fb7ffc000000f07fffe4fe0f03c003e7fffffc000000f87fffc4ff0703c803cffffffc000000f33fffc8ff83c399861fffffff000000f33fff9cffc3c3f9ff1ff7ffdf000000e47f0780ffe0f3fbff9fe7ffcf000000c67f87e3fff0e3ffff9fe7ff8f000000e07f33fff87803ffff9f87e20f000000f0ff33fff87c03ffff9f87e20f000000fffe47fffb3f83ffff9fffffff000000fffc67fff13fc3ffff9fffffff000000fffe07fff67ff3ffff9fe78e3f000000ffff0fffc67ff3ffff9fe78e3f000000ffffffffe07ff3ffffe7e0003c000000fffffffff8ffe3ffffe7e00038000000ff134bffffce00fffff9ffffe0000000fc0001ffff0000fffff9ffffe00000000000000000003f0000000000000000000000000000003f0000000000000000000000000000003c010000000c000000000000000000003c01c000780e000000000000600600000000000000000000000000006006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000180000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},coffee:{name:"coffee",hex:"0000000000000000000000000000000000000000000000000001fff8000000000000000000000000001e00bfc0000000000000000000000000e00005f800000000000000000000000180002bff00000000000000000000000600005fffc00000000000000000000008000003fff000000000000000000000100000007ffc00000000000000000000300000000ffe000000000000000000002000000001ff000000000000000000002000000000ff8000000000000000000040000000003fc000000000000000000040000000000fe0000000000000000000400000000007f0000000000000000000400000000003f0000000000000000000600000000001f8000000000000000000600000000000f8000000000000000000600000000000780000000000000000007000000000007c000000000000000001f800000000003c00000000000000000e7c00000000003800000000000000001c7e0000000000380000000000000000707f0000000000380000000000000000c57f80000000003000000000000000018a3fe000000000300000000000000003053ff0000000006000000000000000062abffc000000004000000000000000045dffff8000000180000000000000000c3bbfffe000000600000000000000000865dfff5e00003000000000000000001ac0ffffe1ffff80000000000000000011437fffd000000000000000000000003281afffa00000000000000000000000350047ff400000000c000000000000002080e7ff800000003f00000000000000250077ffd00000017f8000000000000022a83bffa20000003fc0000000000000251003ff400000000f40000000000000209801fe880000000680000000000000314800ff40000000030000000000000032ac00ffa000000001000000000000003546007f40000000011000000000000010eb003e8800000001a00000000000001179c11f50010400008000000000000018bae16b8202080000800000000000000957f0160404480001000000000000000c8ff80be80aac0001000000000000000477ff54fd558f803600000000000000063bfff27bba00fffc000000000000000357ffff3f500007f00000000000000001abffff9aa00000000000000000000000d5ffffc40000000000000000000000406bffffe200000000000000000000000031fffff1d4000000000000000000080818bffff8fea808ab80000000000000040c5ffffc7fd5555f8000000000002010472ffffe1fffbbff000000000000000409d7ffff0ffffffe000000000000080000e3ffff87fffffc00000000000020852139ffff81fffff00000000000000003041e3fffc0ffffe000000000000000501907c7ffe03fff8000000000000000220000fafff01ffe00000000000000000004101fd5f807f80000"},flower:{name:"flower",hex:"e598b7fdffdf7dc00000000000000000fbe46fffffff1d80024000000000000054917defffff77bc0830000000000000ef68b7ffffff7ffe2020000000000000ffb65ffffffffbe641600000000000003fdd97ffffdf7dfcb6a80000000000001ff68affffffffdc2dd600000000000087eb457f7fdffff8fb8600000000000071ffa7bf7ffffef3fe740000000000003cff63ffbfdffff3fdcc000000000000ab37a5ffbfffff7fbb9c0000000000008d9d757fdfa7f0ff7d38000000000000f3e7caffd4e7effefe7007000000000077b7ea55e24bf3fbace078c0000000009c79e83ec220d7f7f9c3e780000000006effd41f388007eff393888000000000b75fed9f20080fbffe1e410000000000ebffbbe700128bfffc714200000000007dfbfef9400003febdcc2c0000000000ff7ff7be7302217efe34180000000000f3fffef80809007ff8c83000000000003dbfd760004020ffe721c000000000000007fbf9000041ff9e33800000000000c373ff408112017ef8de000000000000013c7ffaa400047f2638ff0000000000873700410000987999c3f6c000000000057bf1ac042c04fe7e1fbfc00000000014adfff0026041ffe1ffffe000000000095feff0624008003fffff8000000000133bfffe0c0031fffffff800000000000ffdfffc801981ffffff00000000000007dbfff1080300fffff0000000000000217fedc60100033fff00000000000000189fff8e480001c00000000000000000e80bf81dc00800700050100000000000008009fbd088081f0000ce00000000000410b5ffe2001607c00007000000000020637fffe6800180fe009c0000000000050fbfffef860ff807ffe00000000000885ffdffdf9796ffc00000000000000070ff3fff9fb798bffe0000000000000046fbffffff37edf7ffc0000000000000357dedffff7ff6fffffc0000000000007be7efffbffffbffffff000000000000cfbfcf7fbffbfddff3ffe000000000001c7e0fff7ffbfeefff3ff800000000007ff00ffe3ffbfffbffe37c0000000000fec008a4fffdfffe7fff7e0000000000b5001181bbfdffff8efedf8000000000580042046ffdffdfe1dff58000000000000507807ffcfffffc6ffb800000000004000420bffcfffeff3c3e0000000000120808503ffc7fffffdf00000000000030c018813ffe3ffdf7e7800000000000f7003a211ffc3ffef9f5c00000000000f80030022dfe4efd7f79600000000000000060800ffc0eef9cb5e000000000000000424403dc07f5c7ea0000000000000000d04823ad41ffc3fe0000000000000000909820b9007dc07e000000000000000192200009000f000000000000000000010060201180080000000000000000000148c000040040000000000000000000035380000400001000000000000000"},saturn:{name:"saturn",hex:"00000000000000000000007800a00300000000000000000000000703ffffc0c000000000000000028000707eaaa0f8600000000000000101010307d5011d1c30000000000000000000007aa2aaa3cf1000000000000000000401d54404045708000000000000000888086a0fe80a2b880000000000000019541017f00f059988000000000000023aaaa0000000c24b880000000000004455554000000025458800000000000080aaeae880000010a98800000000000107fd55d5000000080d900000000000023bfbbbaa0000000aab9000000000000577f7ff5540000004432000000000000aaffefeaaa88000080b210000000000555ffdff5550400009564200000000102abfefffbaa0000008b6400000000000557fdfff7750200008ac800000000000aafefffefaa0800010490800000000415dfdfffffd5510001552100000000002abffffffffaa000022a6200000000004777fffffffd50000456440000000020aefffffffffaa88008ac88000000000115fffffffff555000959100000000002abffffffffbbaa0012b22000000004457ffdffffff7f5440256440000000010affeffffffeefea804a980000000026415dfffffffdffd5009530000000008980abffffffefffba032a4400000001138157ffffffdfff7c045c88000000004e82affffffffffff808d900000000009d815dfffffdfffff010e400000000026a82bbfffffbffffc022c88000000044c50557ffffffffff80d5900000000089ca08affffffffffe212e44000000003794115ffffffffffc051c80000000044e2802bffffffffff00a3220000000089d504557ff7fffffe4056440000000112aa000afeaffffff880b910000000002554001555ffffffe010f200000000004aa80002bfffffff882ac880000000009550004577fffffe00573000000000012aa0022afffffff8808cc0000000000255400015ffffffe10159100000000004a280002bffffff882ae4000000000009a4800105fffffc0455904000000000134100000afffff0808e40400000000026910000955fff84515901800000000026a2000022bffc2028e60300000000004d520000457fe04057901c00000000008b42000022fe0008ae406a0000000000995200001fc000157101d400000000001aa200000002022bca07a800000000003642000000000557305d5000000000003a8100000000aab880eaa0000000000036518000000515c403d5c000000000003a2a600000a2af102eab0000000000003b241c007e5578c03d460000000000003a9883ff888bc200ea980000000000001d445101115e100755600000000000001a60aaaa2be1803aa3800000000000008f1604057e0c74c45c0000000000000083eaeaafe0e087ffc00000000000000060ffdffc0e0400000000000000000000"},jupiter:{name:"jupiter",hex:"0000000008907bfdb7bf2b948000000000000000041eaff7a9d5f3fa0080000000000000012cfffefefe755400800000000000080b3fff5ffff7ffbfa0400000000000008644cbddff7ffffb804000000000000000beffffffffdbb880200000000000010aa7fb7ddf5df5de1020000000000004e579eef6fbffff7be6200000000000049bf27fdfbdefffedf0100000000000010500fffffffeffff6410000000000000261fffffffffffffd8100000000000000fd71fbdf7f7fbeebc0000000000000123e72dffecdbb4b500080000000000008040a58a03ef1a76500800000000000000393941ded666b34a08000000000000000047cf35da1d74a08800000000000000000041990af81d6688000000000000800000000000ef80180400000000000000000400100c38ea0204000000000000010d0804838540f82004000000000000003f1f80002eb9fa8004000000000000007c7ffffc17ffe33c0400000000000417707fffb2fffbc66c0400000000000099c3ffffc7ffff23ff04000000000003183cffff3dfffcd0e00400000000000000a27ffefffff9ff080400000000005c095c3ff306ffffd080040000000000001000001e03ffffc000040000000000000000000024f70100000400000000000000000001f7500eff4004000000000000001037ff7f07fedea20400000000000037f7fefffff9bfbb510000000000000001b7ffffffffd642000800000000000018f83d4fd2340000c008000000000000000080005080000c0008000000000000000000000007ffd06088000000000000000003e080fa36214008000000000000000b7e1f7f7cd0b00010000000000000080b4e753fffec18b01000000000000807cc1fa0401c9affc01000000000001012123246fe03ffc40020000000000001450a77bbff800020e02000000000000081056e7f49e00e0008200000000000002079e19fff685000884000000000001008e031388ff1a1cf4040000000000000151ca2e572d6233b80000000000000000aff00ea4280cc40008000000000000002bfd4309d02008241000000000000000bdff017f03ff209c1000000000000000421af0000f276f7020000000000000080080153473ff9e522000000000000000032a6f4cfebf7fa8400000000000000020a990813bdff68040000000000000000106016fc77eb500800000000000000008c04e5fc081930100000000000000000000209f9b7f40010000000000000000000042402a30ac3200000000000000000000a028904510040000000000000000000240137194cc08000000000000000020010680a1a00010000000000000000000000028100000200000000000000000000400800000004000000000000000000000010000102080000000000000000000000010040001000000000"},einstein:{name:"einstein",hex:"fffe812fffffffffffffff8800000000f7d10057fffffffffffffe1000000000fee800a88bfffffffffffd4000000000fdfd0111fffffffffffffda000000000b2fa0003fffffffffffffe9000000000f5f70045ffffffffffffff4000000000eaec000027ffffffffffffe000000000ddf8015001ffffffffffff1080000000b2f20000023fffffffffff9c00000000cdfe0000017ffff7fffffdd800000000cafc0000002fffe07ffffef80000000020f20001101fffe00ffffff900000000e0e8000a0003ffc01fffffae0000000045f400040001ff0007ffffc740000000806800003880fe800fffefe1800000005578000d3cc0fd8733fffd50c000000022e800080420fa8f9bffffa0000000000475400013007501dfff7df12000000000a880100c80f8846bfffea82000000001b000000e41fd0027fffd841000000020b002000ea0fe830bfffe8010000000045007011fc0ffffc7ffffc010000000004008a02388ffcfaffffd8000000000005007880750ff70e7fffdc0010000000020001e1fa03faff3fefec00200000000000617c3f07fdf7ffd7c1000000000000002c80ea03fe3efbefca000000000000000effdc01ffe7dddff400000000000000299ff803fffdbbabb000000000000000175ff007fffff7dfd4000000000000000f7ff803fffffaaeea0000000000000015dff001fffff55fc1c60000000000001bfff203ffffe3abfb8400000000000017f7f405fffff747d6720000000000000dffe803ffffee82e80800000000000004ffd001fdfff951704000000000000002abe003fffffa22b800000000000000095fc0017eff7f67fc0000000008000002bfc000feffe89f2800000000000000005f80005f7fe51fd400000000000000003f00002b3fe09b8220000000000000051f4000039ff85d8500000000000000002e80000fbfc0eea800000000000000103d44001fdfc0dd34000000000000000029a0003fefe0a77800000000000000101400015ff7c0775000000000060000000aaa046afee8cd98000000000800000015545d53fd780e08000000000a000000020008097fe02248000000000400000004001695ff804000000000000c00000000081820ffc00000000000000c00000040000140ff8000000000000008000000000000029f8000000000000008000000000000007f4000000000000000000000000000001f000000000000000000000000000000170000000000000000000000000000022b0000000000000000000000000000051600000000000000000000000000002b8a0000000000000000000000000000551400000000000000000000000000002ba40000000000000000000000000057ff4000000000000000000000000000fffece00000000000000000000000001ffff9fc00000000000000"},piggy:{name:"piggy",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000c001fffe000000000000000000000003e00fffffc00000000000000000000007f03ffffff0000000000000000000000630fffffffc000000000000000000003631ffffffff000000000000000000001ff3ffffffff801000000000000000001fe7fffe7fffc0180000000000000000078fffc66fffc0780000000000000000019fffe0cfff83f8000000000000000001fffff00fff8ff0000000000000000000fffff00fff3ff00000000000000000007fffe187ff3ff00000000000000000007fffe1c3ff7fe00000000000000000007fffe3e3ffffc00000000000000000007fffc3c3fffe000000000000000000007fff8003fffc000000000000000000007fff8407fffe000000000000000000007fff8f0fffff000000000000000000007ffc0f8fffff000000000000000000007ff81f87fff3000000000000000000007fff0707fff3800000000000000000007fff000ffff3f00000000000000000007fff200ffffff80000000000000000007ffe661ffffff80000000000000000007fffe7fffffff00000000000000000003fffeffffffff00000000000000000003ffffffffffff00000000000000000003fffffffffffe00000000000000000003fffffffffff800000000000000000003ffffffffffc000000000000000000003fe3ffffff80000000000000000000001fe00fffe000000000000000000000001fcc0007e000000000000000000000001fc7c007e7c0000000000000000000001f87e003e3c0000000000000000000000f87c003e3c0000000000000000000000f83e001e3c0000000000000000000000781e001e1c0000000000000000000000700e000e1c00000000000000000000003006000e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384327c0021938007c2113e0078f800040e3e600061914007c613300030a8000c0b3e600061d16001061e200030200008192a700071d12001071838003020000811227000d15120010d1838003020000c1b226000f13160010f1c2000302000040a22600099314001099320003020000786227c008933c00108913e00fc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},honeybadger:{name:"honeybadger",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddda80000000000000000000000000150046f00000000005a80000000000004fffff8c00000000bb4c000000000002beff749b80000001e40300000000000cfa9bc5296000001f4ff080000000000be6f7eb015800f6ea9b3e600000000033bdfdf999eea7dd8ef6cc1000000000fffffff7ca9fd9afb87d2f1800000001fdffffffc4c600eff9fd1164000000017fffff7f7d9b27bfeffd00e400000002ffffffffff6edd7fe7f8022400000004fffffffffe71d7fff7d8400380000005fffff7fffdffffffbf4441408000000bffffffffffffdffffe000092c000003fbbfffffffffffffee900000080000033f7f7ffffffffff1bb210000040000067856bfffffffffc15d4000001800000cb8915fffffffff008e40001470000011ea9317fffffffe0054a0006bc0000023d18a15bffffffc0025400180000000c6a004895957fbf5000ac006000000031e400264a45656900015000c000000181580094a0aa8a521001200700000006094a012a20848a400000000c0000003800a000111040942200009010000000e0350004890009089488004820000003826b041142400080021100041000000248220c00020200011205000a1000000400880e0085008000241c20020800000680203c00088040001020780108000003000078000000082080408e00440000039000e00000111a42fd91858024000001c003800000f237ff4aa100e022000000c00f0000032020000092003051000000783a00015c20200000a20018490000001fc6001ba02030000193000e28800000000402e400101cc00088e003077fe00000080500000c0730008058018a01500000041800000e001800d28800e017e80000081f00000604580064780022aef0000004058000038038003fe000355ed000000400400000ffe0000080000ff7000000040840000020000000000000000000000792400000000000000000000000000002ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},dragon:{name:"dragon",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000003f8c000000000000000000000100000007ef0000000000000000008d848300000871f8000000000000001effffc1800007fe3ff02000000000003fff1ffce10001ff3ffee001f8000001f7fdffffe80000381a7f80003f00f9063efffd7ff881001d7eff00000783ff8dfffffdffdec1007f1df1400001effeebfdb801f7bf7080fe0dce000000ffffffff30001efd30807c0ffd0000003fffffff0000037778807c00070000000003fffbde0000edfcc06c000f0000000001fffbc600003b7c607e000800000000007dee7200000fae383b000820000000008fbc3a0000037e1f07c0017c0000000063f230000001ff8f81e002600000000007e0400000005fca81f6074400000000ffc00000000037fa80ff039e00000001ff80000000000ff3805d006200000003fc000000000007fd807f83c20000039f00000000000003ffc07e8fc00000059c00000000000001ffe1ff1f70000001f0000000000000005fffbdfe20000021c00000000000083077dffc380000002f80000000000004185ffbfbf00000001c60000000000003fbe3eff63000000001300000000000003fffbfc0400000001638000000000000503fdc00000000000e40000000000005d83ff000000000000000000000000003901f8000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},narwal:{name:"narwal",hex:"0000000000000000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000e3000000000000000000000000000003810000000000000000000000000000060180000000000000000000000000000c018000000000000000000000000000180180000000000000000000000000001801800000000000000000000000000010018000000000000000000000000000100180000000000000000000000000001800c0000000000000000000000000001800c0000000000000001e00000000001800e000000000000000fc00000000000c003ffff00000000003f800000000000e000007fe00000000063000000000000300000006000000003ce00000000000038000000c00000000618000000000000e01800038003ffc01cf000000000000180780007007f80fc71c000000000000701e0001c07c00007c78000000000000c073f03f01e0000060c000000000000180c07ff80f000011c380000000000003018000003c00003f078000000000000603800000e000801c0cc000000000000c03000001c001c0381860000000000018030000070001c060f0700000000000180700000c00008060c330000000000030070000380000007f8638000000000030030000700000001e0e18000000000030030000c00000000018180000000000300380018000080000701800000000003001c00700000fc00fe01800000000003000e00c000003ffffc018000000000030003838000001ffffc038000000000030000ff0000000fc07c0300000000000300007c000000070008030000000000018003e00000000300100600000000000180000000000000e0e00e000000000000c00000000000001f000c000000000000c00000000000000000180000000000006000000000000000003000000000000030000000000000000070000000000000180000000000000000e00000000000000c000000000000000180000000000000060000400000000003c0000000000000030000c0010000000e6000000000000001c00180018000001c3000000000000000700180030000007018000000000000001c038003000001c00c000000000000000f030007000007c0060000000000000001e3000600003c780600000000000000007f000e0003e00f0300000000000000000f000c007f0001e3000000000000000003001cffe000003e000000000000000003003ff0000000000000000000000000030060000000000000000000000000000300c000000000000000000000000000030180000000000000000000000000000187000000000000000000000000000001fe0000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},rabbit:{name:"rabbit",hex:"00000000000000000000000000000000000000000000000bf800000000000000000000000000007eaf8000000000000000000000000003e000e00000000000000000000000000e000020000000000000000000000000180000600000000000000000000000003000006000000000000000000000000060000180000000000000000000000000c000038000000000000000000000000180000e0000000000000000000000000b0000380000000000000000000000001f00007e000000000000000000000000e0000003800000000000000000000001c0000000e0000000000000000000000300000000380000000000000000000006000000000c000000000000000000000c00000000060000000000000000000008180000000200000000000000000000183c000000030000000000000000000010180000000600000000000000000000100000a015fc00000000000000000000300000ffff6000000000000000000000100000d54000000000000000000000003000007c0000000000000000000000001000000700000000000000000000000018000001e0000000000000000000000018000000380000000000000000000000080000000e00000000000000000000000c0000000300000000000000000000000700000001800000000000000000000001a0000000c00000000000000000000000e00000007000000000000000000000002000000018000000000000000000000060000000080000000000000000000000400000000c00000000000000000000006000000006000000000000000000000060000000020000000000000000000000c0000000030000000000000000000001800000b8018000000000000000000002000001ee0080000000000000000000060000030000c0000000000000000000060000060000c00000000000000000000400000c00007c0000000000000000000400000800002f0000000000000000000400000800000180000000000000000006000018000000c0000000000000000006030008000000400000000000000000030380180000006000000000000000000186c00800000060000000000000000000fc400c000000200000000000000000002030040000006000000000000000000000185600000040000000000000000000000dfe00000040000000000000000000000700000000c000000000000000000000040000000180000000000000000000000c0000060700000000000000000000000c00003ffc000000000000000000000018000030a00000000000000000000000080000100000000000000000000000000c000060000000000000000000000000070001c000000000000000000000000003fb7f00000000000000000000000000002fe80000000000000000000000000000000000000000000000"},bunny:{name:"bunny",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000002000078000000000000000000000000078000f800000000000000000000000007c000f800000000000000000000000007c001f800000000000000000000000007e0019800000000000000000000000006700318000000000000000000000000063007180000000000000000000000000610061800000000000000000000000006180c1800000000000000000000000004080c18000000000000000000000000040c1c18000000000000000000000000040c1818000000000000000000000000060c1830000000000000000000000000060c1030000000000000000000000000060c1030000000000000000000000000020c1060000000000000000000000000030c1060000000000000000000000000030410e0000000000000000000000000019ffcc000000000000000000000000003ffffc000000000000000000000000007f007e00000000000000000000000001e0000780000000000000000000000007c00001c000000000000000000000000f0000006000000000000000000000001e00000030000000000000000000000038000000180000000000000000000000700000000c000000000000000000000060000000060000000000000000000000c0000000060000000000000000000001c000000003000000000000000000000180000000030000000000000000000003800000000180000000000000000000038000000001800000000000000000000700007f8001c0000000000000000000070001f9c000c000000000000000000007000700e000c00000000000000000000f000e007800c00000000000000000000e001c003800c00000000000000000000e0030001800c00000000000000000000e0030000c00c00000000000000000000e0070000c00c00000000000000000000e0060000c00c00000000000000000000e0040001c00c00000000000000000000e00c0000c00c0000000000000000000070080000401c0000000000000000000070080000c01c00000000000000000000700c0000c01c00000000000000000000380e0000c0380000000000000000000038060000c0380000000000000000000018040000c030030000000000200000001c0400008070038006000000600000004e060000806006fc1e00000070007e1c7e07000180f88cfdfc000000d00067ffdf03800701fbf80f9c0000025801f03083c3800603fe40001fe00003cf0fc00001e1800c0f900000007e003ec7fc0000007fc0383e000000000600f800000000001ff0fbf8000000000000000000000000001fff80000000000000000000000000000000000000000000000000000000000000000000000000000"},rooster:{name:"rooster",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000bc000000000000000000000000000000fc000000000000000000000000000001fc000000000000000000000000000001f8000000000000000000000000000003fc000000000000000000000000000003ff000000000000000000000000000003ff800000000000000000000000000007ffc00000000000000000000000000007ffe00000000000000000000000000000fff00000000030000000000000000000fff800000000fe000000000000000000fff800000003ff000000000000000000fffc00000007fc000000000000000000fffe0000000fe00000000000000000007fff0000001fc00000000000000000003fff8000001ffc0000000000000000003fff800000ffff0000000000000000003fffc00003ffff8000000000000000003fffe00007ffffc000000000000000003ffffe000fffffc000000000000000007fffffc01ffffb0000000000000000007ffffffc3ffff10000000000000000007fffffffffffe18000000000000000003ffffffffffff08000000000000000003ffffffffffff08000000000000000003ffffffffffff08000000000000000001ffffffffffff00000000000000000001fffffffffffe00000000000000000000fffffffffffc00000000000000000000fffffffffffc000000000000000000007fffffffff98000000000000000000003fffffffffb0000000000000000000001ffffffffe00000000000000000000000ffffffffe000000000000000000000007fffffff6000000000000000000000003fffffff0000000000000000000000001fffffff0000000000000000000000000fffffff00000000000000000000000007fffffc00000000000000000000000001fffffc000000000000000000000000007fffec000000000000000000000000001fffc0000000000000000000000000000fffc0000000000000000000000000000ff9800000000000000000000000000007d00000000000000000000000000000078000000000000000000000000000000780000000000000000000000000000007000000000000000000000000000000070000000000000000000000000000000f0000000000000000000000000000000f0000000000000000000000000000000e0000000000000000000000000000000e0000000000000000000000000000017e000000000000000000000000000007ff000000000000000000000000000000ef000000000000000000000000000001fe000000000000000000000000000000fc0000000000000000000000000000038800000000000000000000000000000010000000000000000000000000000000000000000000000000"},genesis:{name:"genesis",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd8003f600000039e118000bc71c7000318000c00000006c311800086db6d80031e380c6fe38e06c3319cf186db6d80031b6c0c6db6d806ce2186d91cdb6d80031b7c0c6db7de06c3619edb30db6780031b600c6db60606c341b6da30db6180031b3c0c6db3dc039e471eda3e71c700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ec0000006c00000003006030006000030c0000006c0000000300003000c000030f1cf1ce6ce681cf03cd6f361ce000030d86db1b6db7836d836f6dbc36c000030d9edb1f6db6036d836c6db836c000030db6db186db6036d836c6dbc36c00001ed9ed9cf6ce601cd83cc6db61cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c00d80030300030000c0000000000030c00180030600030000c0000e71ce78f0f1cd9cdb8739a3c73cd9c018db1b6db0d86db6db066de361b6f3001efb1b6db0d9edb6db066d8367b6e3c006c31b6db0db6db6db066d836db6f0c01c79ce6cf0f1ed9c79863983c7b6db8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000ffc03bbbbbbbbb93b3bbb00000000001f3e02aaaaaaaaab2aa22900000000001c0e02aaaaaaaaa93abbb90000000000380702aaaaaaaaa90aaaa90000000000380703bbbbbbbbbbbb3bb97fff000000380700000000000000000140010000003807039bbb9393bbb93bb940010000003fff02a2aa2a32228b22894001000000ffffc3a2bbbb13bbb933b940017f0000ffffc0a2a8aa128a8920894001417c00ffffc39bbbabbbbbbbbbb940014145c0e001c00000000000000001c001c1c76ae001c2bbbbb93ab939399140014145c0e001c2a20a0aa2a28aa2314001417c00e001c3b30bbbb3bbbbba1140017f0000e001c0a20a8aa0aaa2aa114001000000e001c0a20bbab8babab9b94001000000e001c000000000000000014001000000e001c3bb3b933b939bbbb97fff000000e001c08a8a32a2aaa20a210000000000f807c0bb3b133abba33bb10000000000ff3fc0a28a12aaaaa222a100000000007fff80bb3a3b3bab9bbba3000000000007f8000000000000000000000000000001e0000000000000000000000000000000000"},my_bank:{name:"my_bank",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000ffc00000000000000000000000000003fff0000000000000000000000000000ffffc000000000000000000000000003fffff00000000000000000000000001ffffffe0000000000000000000000007fffffff800000000000000000000001ffffffffe00000000000000000000007fffffffff8000000000000000000001ffffffffffe000000000000000000007fffffffffff80000000000000000001ffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffffffff800000000000000000007fffffffffff800000000000000000007fffffffffff800000000000000000007fffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c078781e0007f800780381c070780003c0f87c3e0007fe007803c1c070f80003e0f83c3c0007fe007c03e1c071f00003e1f81e7800071f00fc03e1c073e00003e1f81e7800070f00fe03f1c073c00003f1f80ff000071e01fe03f1c077800003f3f80ff00007fe01ee03f9c07f000003f3f807e00007fe01cf03bdc07f000003fbf807c00007ff03cf039dc07f800003bff803c000070f03ff039fc077c00003bf7803c000070703ff838fc073c000039f7803c000070f07ff838fc071e000039e7803c00007ff0783c387c071f000039e7803c00007fe0f03c383c070f800038e7803c00007fc0f03c383c07078000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},candle:{name:"candle",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000030000000000000000000000000000000380000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003e0000000000000000000000000000003e0000000000000000000000000000007e0000000000000000000000000000007f000000000000000000000000000000ff000000000000000000000000000001ff000000000000000000000000000003ff000000000000000000000000000003ff000000000000000000000000000007ff000000000000000000000000000007ff00000000000000000000000000000ffe00000000000000000000000000000ffe00000000000000000000000000001fbe00000000000000000000000000001fbe00000000000000000000000000001f3e00000000000000000000000000003f3e00000000000000000000000000003e3e00000000000000000000000000003e3f00000000000000000000000000003c3f80000000000000000000000000003c3f80000000000000000000000000003c3fc0000000000000000000000000007c3fc0000000000000000000000000007c3fc0000000000000000000000000007c1fe0000000000000000000000000003c1fe0000000000000000000000000003c0fe0000000000000000000000000003c07e0000000000000000000000000003c07e0000000000000000000000000003c03c0000000000000000000000000001e03c0000000000000000000000000001e01c0000000000000000000000000000e01800000000000000000000000000007018000000000000000000000000000070100000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe000000000000000000000000000001ff000000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000"},ancap:{name:"ancap",hex:"0000001fffffffffffffffffff8000000000001fffffffffffffffffff0000000000001fffffffffffffffffff0000000000000f0000000ffffffffffe0000000000000780000007fffffffffc0000000000000780000007fffffffffc00000000000003c0000003fffffffff800000000000003e03fffc3fffffffff800000000000001e07fffe1fffffffff000000000000000f07ffff0fff0007ff000000000000000f07800f0ffe0007fe000000000000000787800787fe000ffc000000000000000783c00787fc001ffc0000000000000003c3e003c3fc001ff80000000000000003e1e003e3f8003ff80000000000000001e0f001e1f0003ff00000000000000000f0f000f0f0007ff00000000000000000f07800f0e000ffe0000000000000000078780079e000ffc00000000000000000783c0079e001ffc000000000000000003c3e003fc001ff8000000000000000003e1e003fc003ff8000000000000000001e0f001f8003ff0000000000000000000f0f000f8007ff0000000000000000000f07800f000ffe00000000000000000007878000000ffc0000000000000000000783c000001ffc00000000000000000003c3e000001ff800000000000000000003e1e000003ff800000000000000000001e0f000003ff000000000000000000000f0f000007fe000000000000000000000f0780000ffe00000000000000000000078780000ffc0000000000000000000007c3c0001ffc0000000000000000000003c3e0001ff80000000000000000000001e1e0003ff80000000000000000000001e0f0003ff00000000000000000000000f0f0007fe00000000000000000000000f07800ffe00000000000000000000000787800ffc000000000000000000000007c3c01ffc000000000000000000000003c3e01ff8000000000000000000000001e1e03ff8000000000000000000000001e0f03ff0000000000000000000000000f0f07fe0000000000000000000000000f078ffe00000000000000000000000007878ffc00000000000000000000000007c3dffc00000000000000000000000003c3fff800000000000000000000000001e1fff800000000000000000000000001e0fff000000000000000000000000000f0ffe000000000000000000000000000f0ffe00000000000000000000000000078ffc0000000000000000000000000007cffc0000000000000000000000000003cff80000000000000000000000000001eff80000000000000000000000000001eff00000000000000000000000000000ffe00000000000000000000000000000ffe000000000000000000000000000007fc000000000000000000000000000007fc000000000000000000000000000003f8000000000000000000000000000001f800000000000000"},anonymous:{name:"anonymous",hex:"000000001f0000fffc0003e000000000000000001e30007ff80071e000000000000000001cf0003ff0007ce0000000000000000019fe001fe001fee000000000000000003bff801fc08fffe000000000000000003fffe01fc01fffe000000000000000003ffff11fe03fffe000000000000000003ffff83ff87fffe000000000000000003ffffc3ff0ffffe000000000000000003ffffe3fe1fffff000000000000000003ff07e1fe3f03ff000000000000000003fc01f0fe7c00ff000000000000000003f00070fff8003f000000000000000003e00010ffc0003f000000000000000003800000ffc0000f000000000000000003000000ffc00000000000000000000003800010ffe0007c0000000000000000038007f07fffffff0000000000000000033ffff0ffffffff000000000000000003fffff0ffffffff000000000000000003fffff0ffffffff000000000000000003fffff0ffffffff000000000000000001ffffe0ffffffff000000000000000000fffff0fffffffe000000000000000000fffff0fffffffe0000000000000000007fffe0fffffffe0000000000000000007fffe0fffffffc0000000000000000003fffc0fffffff80000000000000000011fff80ff3ffff000000000000000000187e100ff1fffe0000000000000000000800200ffce000800000000000000000081fe10ffef0008000000000000000000c8fe31ffeff80800000000000000000048ff31fffff888000000000000000000643fa1fffff090000000000000000000241ff1ffffe110000000000000000000320ff9fdffc1200000000000000000001803f8f8ff822000000000000000000019006000fe06600000000000000000000c800000380c400000000000000000000e4000200018c000000000000000000006300070003180000000000000000000031800f8006180000000000000000000038f00f801c3000000000000000000000187fe001fe60000000000000000000001c3ff83ffe60000000000000000000000c07fffffcc0000000000000000000000e03fffff9c00000000000000000000006183ffff98000000000000000000000031f001ff30000000000000000000000031fe01fe60000000000000000000000019fe03fe60000000000000000000000019ff03fcc000000000000000000000000cff07fdc0000000000000000000000004fe07ff80000000000000000000000007fe03ff00000000000000000000000003fc03ff00000000000000000000000001fc01fe00000000000000000000000000fc01fc000000000000000000000000007c03f8000000000000000000000000007e03f8000000000000000000000000003e03f0000000000000000000000000003e07e0000000000000000000000000001e07c00000000000000"},mushroom:{name:"mushroom",hex:"00000000000000000000000000000000000000000000007ff40000000000000000000000000007ffffc00000000000000000000000003ffffff8000000000000000000000000ffffffff000000000000000000000003fffe007fc0000000000000000000000ffff8001ff0000000000000000000001ffff0000ffc000000000000000000003f87f00007fe000000000000000000007f07f00007ff00000000000000000000fe07f8000fff80000000000000000001fe1ffc003fffc0000000000000000003ffbfffabffffe0000000000000000007fffffffffffff000000000000000000ffffe3ffffffff800000000000000001ffff01ffffffffc00000000000000003fffc01ffffffffc00000000000000003fff801fffff07fc00000000000000007fff003fffff01fe00000000000000007fff007fffff00ff0000000000000000ff3f83ffffff807f0000000000000000fc3fffffffffc07f0000000000000000f83ffffffffffaff8000000000000001f03fffffffffffff8000000000000001f03fffffffffffff8000000000000001f07fffffffffffffc000000000000001f0ffffffffffffffc000000000000001f1ffffd557ffffffc000000000000001fffffaaaaabfffff8000000000000000ffffd5555555ffff8000000000000000fffeaa8808aaafff00000000000000007fd550000011555c00000000000000000aaa0000000022a800000000000000000000000000000000000000000000000000000002aa00000000000000000000000000055555500000000000000000000000000aaaaaa8000000000000000000000000055555500000000000000000000000000aaaaaa8000000000000000000000000055555500000000000000000000000000aaaaaa8000000000000000000000000055555500000000000000000000000000aaaaaa80000000000000000000000001ffffffc0000000000000000000000001ffffffc0000000000000000000000001ffffffc0000000000000000000000001ffffffe0000000000000000000000001ffffffe0000000000000000000000003ffffffe0000000000000000000000003ffffffe0000000000000000000000003ffffffe0000000000000000000000003fffffff0000000000000000000000003fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000003ffffffe0000000000000000000000001ffffffc00000000000000000000000007fffff000000000000000000000000001ffffc0000000000000000000000000003fff800000000000000000000000000007f400000000000000"},invader:{name:"invader",hex:"0000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc00000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc00000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc0000000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc000000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc00000000000000000000000000000000000000000000000000000000000000000000000000"},mtgox:{name:"mtgox",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000003ffc0000000000000000000000000000fffc0000000000000000000000000003c1fe000000000000000000000000000e00fe000000000000000000000000001800fe000000000000000000000000007000fc00000000000000000000000000c000fc000000000000000000000000030001fc000000000000000000000000060001f8000000000000000000000000080001f8000000000000000000000000000003f8000000000000000000000000000003f0000000000000000000000000000007f0000000000000000000000000000007e000000000000000000000000000000fc000000000000000000000000000001fc000000000000000000000000000003f8000000000000000000000000000003f0000000000000000000000000000007f000000000000000000000000000000fe00028000a2aaaa81ffff01fffe0ff1fc0005400155555543ffff87ffff07f9fc0002a002a2aaaa87ffffcfffff87fff8000540055555550fffffcfffffc3fff0000aa00aa002800f00001f0007c1ffe0000550155005000f00001e0007c1ffc0000aa82aa002800f00001e000780ffc0000554154005001f0fffde0007807f80000a2828a00a801e0fffde000780ffc0000514514005001e1fffde000781ffc0000a2aa0a00a001e1fffbe000783ffe0001415414005001e0007bc000787fff0000a0a80a00a001e0007bc000f8ffff0001405414005001f000fbe001f1fe7f8000a0282800a2a1fffff3fffff3fc3f8001405014005141fffff1ffffe7f81fc000a0202800a2a0ffffe0ffffcff01fe0014000140141403fff847fff1fe00fe000000000000000000008000000000000000000000000000000100000000000000000000000000000000000aaaa8000000000000000000000001000555500000000000000000000000020002aaa0000000000000000000000004000155400000000000000000000000000002aa8000000000000000000000000400155500000000000000000000000008002aaa000000000000000000000000140055540000000000000000000000000a02aaa8000000000000000000000000151555100000000000000000000000000aaaa800000000000000000000000000155550000000000000000000000000000aaa8000000000000000000000000000155500000000000000000000000000000aa800000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},electrum:{name:"electrum",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000fe00000000000000000000000000001ffff0000000000000000000000000007ffffc00000000000000000000000003ffffff00000000000000000000000007ffffffc000000000000000000000001ffffffff000000000000000000000003e07ffc0f80000000000000000000000f801ff003e0000000000000000000001f0f07c1e1f0000000000000000000003f3fc38ff9f8000000000000000000007e3ff01ff8fc000000000000000000007e7ffc7ffcfe00000000000000000000fe7ff83ffc7e00000000000000000001fc7ff11ffe7f00000000000000000003fcffe38ffe7f80000000000000000003fcffc7c7fe7f80000000000000000007fcff8fe3fe7fc0000000000000000007fcff8001fe7fc000000000000000000ffc7000000e7fe000000000000000000ffc000fe0007fe000000000000000001ffc067ffc403ff000000000000000001ff07cfffe7c0ff000000000000000001fc078ffff3c87f000000000000000001f8e79f97f1ce1f000000000000000003f1e33f97f98f8f800000000000000003e7f33e01f89fc7800000000000000003c7f27e00fc9fe7800000000000000003cff07f187c1ff38000000000000000039ff8ff1cfe3ff38000000000000000039ff8ff18fe3ff38000000000000000039ff8ff007e3ff38000000000000000039ff8ff1c7e3ff3800000000000000003cff87f1e7c1fe7800000000000000003cff23f1c7c9fe7800000000000000003e7f33e00f89fcf800000000000000003f1f31f97f9cf1f800000000000000001f8e79f97f1ce3f000000000000000001fc278ff7e3c87f000000000000000001ff07c7ffe7c1ff000000000000000001ffc067ffc407ff000000000000000000ffe000fe0007fe000000000000000000ffe7800003e7fe0000000000000000007fcff8ee1fe7fc0000000000000000007fcffcfe3fe7fc0000000000000000003feffc7c7fe7f80000000000000000003feffe38ffe7f80000000000000000001fe7ff11ffe7f00000000000000000000fe7ff83ffefe00000000000000000000fe7ffc3ffcfe000000000000000000007f3ff01ffcfc000000000000000000003f3fe387f9f8000000000000000000001f8f07e0e3f0000000000000000000000fc01ff007e00000000000000000000003f0fffe1fc00000000000000000000001ffffffff000000000000000000000000fffffffe0000000000000000000000003ffffff800000000000000000000000007ffffc000000000000000000000000001ffff00000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000000000000000000000000"},mycelium:{name:"mycelium",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000fffe0000000000000000000000000003f7df800000000000000000000000001f07c1f00000000000000000000000007807c03c000000000000000000000001c007c0070000000000000000000000030007c00180000000000000000000000e0007c000e0000000000000000000001c0007c0007000000000000000000000300007c0001800000000000000000000600007c0000c00000000000000000000c0000fe000060000000000000000000180000fe000030000000000000000000180003ff800030000000000000000000300007ffc0001800000000000000000060001ffff0000c00000000000000000040007ffffc0004000000000000000000c000ff01fe0006000000000000000000807ffc007ffc0200000000000000000180fff8003ffe0300000000000000000181ffe0000fff0300000000000000000101cf800003e70100000000000000000301c7800003c70180000000000000000201ffc00007ff0180000000000000000200fff0001fff00c0000000000000000600fff8003ffe00c00000000000000006007ffe00fffc00c00000000000000006003cff83fe7c00c00000000000000004003c3ffff87c00400000000000000004003c0fffe07c00400000000000000004003c07ffc07c00400000000000000004003c01ff007c00400000000000000004003c00fe007c00400000000000000004003c007e007c00400000000000000004003c007c007c00400000000000000006003c007c007c00c00000000000000006003c007c007c00c00000000000000006007c007c007c00c00000000000000002007c007c007c00c0000000000000000200fe007c00fe0180000000000000000300fe007c01ff0180000000000000000103ff807c03ff8180000000000000000107ffe07c0fffe30000000000000000019ffff07c3ffffb000000000000000000ff83fc7c7fc7fe000000000000000000fe00ff7dff01fe0000000000000000007c007ffffc007e00000000000000000070001ffff0001c000000000000000000300007ffe00018000000000000000000100001e7800030000000000000000000180001e70000300000000000000000000c0001ff000060000000000000000000060000fe0000c0000000000000000000030000fe0001800000000000000000000180003800070000000000000000000000e00000000e0000000000000000000000300000001800000000000000000000001c00000070000000000000000000000007800003e0000000000000000000000001e0001f000000000000000000000000003f01fc000000000000000000000000000fffe0000000000000000000000000000000000000000000000"},ethereum:{name:"ethereum",hex:"0000000000000000000000000000000000000000000000030000000000000000000000000000000280000000000000000000000000000007000000000000000000000000000000068000000000000000000000000000000f4000000000000000000000000000001ea000000000000000000000000000001f5000000000000000000000000000003ea000000000000000000000000000003f5000000000000000000000000000007ea80000000000000000000000000000ff540000000000000000000000000000feaa0000000000000000000000000001ff540000000000000000000000000001feaa0000000000000000000000000003ff550000000000000000000000000007feaa8000000000000000000000000007ff55400000000000000000000000000ffeaa800000000000000000000000000fff55400000000000000000000000001ffeaaa00000000000000000000000003fff55500000000000000000000000003ffeaaa80000000000000000000000007ffc55500000000000000000000000007ffa2aa8000000000000000000000000ffd40554000000000000000000000001ffaa00aa000000000000000000000001fd540055000000000000000000000003eaaa000a000000000000000000000003d5540005000000000000000000000006aaaa000080000000000000000000000d55540000000000000000000000000002aaaa0000000000000000000000000001555400000000000000000000000000002aaa0000000000000000000000000000155400000000000000000000000000040aaa00008000000000000000000000030154000100000000000000000000000380aa0002000000000000000000000001e0540015000000000000000000000000f80a002a000000000000000000000000fe0400540000000000000000000000007f0202a80000000000000000000000003fc005500000000000000000000000001ff00aa00000000000000000000000001ff855400000000000000000000000000ffeaaa000000000000000000000000007ff554000000000000000000000000007feaa8000000000000000000000000003ff550000000000000000000000000001feaa0000000000000000000000000000ff540000000000000000000000000000fea800000000000000000000000000007f5400000000000000000000000000003ea800000000000000000000000000003f5000000000000000000000000000001ea000000000000000000000000000000f4000000000000000000000000000000680000000000000000000000000000007000000000000000000000000000000028000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000"},litecoin:{name:"litecoin",hex:"00000000000000aaaa00000000000000000000000000057fff400000000000000000000000000fffffe80000000000000000000000005ffffff4000000000000000000000000fffffffa000000000000000000000005ff8001ff40000000000000000000000bfc00003fa00000000000000000000017f000011fd0000000000000000000003fc0000aa3f8000000000000000000007f00000171fc00000000000000000000fe000000fcfe000000000000000000017c001ff9707d00000000000000000002f8222aa8803e80000000000000000001f5403558001f40000000000000000003e2882ab8000f80000000000000000007c51075500007c000000000000000000fc8206ab00033a00000000000000000079040557001fbd000000000000000000f80806ee002f9e000000000000000001f0100dfe015fdf000000000000000002f0200ffe0abfef800000000000000001e0404ffe1557cf400000000000000003e0808ffc0aae0f800000000000000001e0151ffc055807400000000000000003e02a1ffcc2a007800000000000000007c5541fffc50007c00000000000000003caaa3fffc80007800000000000000007dd553fff800007c00000000000000003daaa3fff00000ba00000000000000007dd503ffc000073c00000000000000003ce80fff00002fba00000000000000007dd03fff0000573c00000000000000003d807fff0002abba00000000000000007c007ffe0005577c00000000000000003c007ffe008aaafa00000000000000007c008ffe0115547c00000000000000003e000ffe0222a07800000000000000005e010ffc0000007400000000000000003e0a9ffc000000f800000000000000001e151fffffff00f000000000000000002f7a9fffffff00f800000000000000001f7d1fffff5601f000000000000000000fbebfffeaaa01e80000000000000000179d3ffdd55603d000000000000000000bda3fffaaaa3be0000000000000000007c03ffffffc77c0000000000000000003e000000000ef80000000000000000001f0000000005f40000000000000000002f800a22022be800000000000000000017c055440457f00000000000000000000be3eaa8088fe000000000000000000005f3d550111fc000000000000000000002f8aa80003f80000000000000000000017e540000ff0000000000000000000000bf800003fa00000000000000000000005ff0001ff400000000000000000000002bff83ffe8000000000000000000000005ffffff40000000000000000000000002fffffe8000000000000000000000000057ffd5000000000000000000000000000aaaa00000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000000000000000000000"},myetherwallet:{name:"myetherwallet",hex:"000000000000007ffe0000000000000000000000000007d555e00000000000000000000000001aaaaab800000000000000000000000075455556000000000000000000000001aab2aaab800000000000000000000006557d555540000000000000000000000eaa7aaaaab0000000000000000000001f557d555558000000000000000000003b2abcaaaaac000000000000000000007354cd55555600000000000000000000f2a9ceaaaaab0000000000000000000175958001555580000000000000000002ebcb3ffcaaaac0000000000000000002e4d2ffff155540000000000000000006caeaffffcaaaa000000000000000000dd4f77ffff55550000000000000000009aa66bffffaaab0000000000000000013957e3ffffd555800000000000000001aaabc9ffffeaaa8000000000000000035553d5fffff55540000000000000000272abcafffffaaac0000000000000000365535501fff955400000000000000006eaa7eaaa7ffcaaa00000000000000004e55665541ffd55600000000000000005ca8672abaffeaaa0000000000000000dd572755797fe5560000000000000000baa7caaa9c7feaaa0000000000000000b94ff3955d3ff5550000000000000000baaffdaaaebff2ab0000000000000000f54ffdd0003ff5550000000000000000f2aff9c7fffff2ab0000000000000000e54ff8e1fffff55100000000000000008aaffaa83ffff2a70000000000000000d54ff9744ffff54f0000000000000000aaaffc7283fff2af0000000000000000d54ffd75507ff55d0000000000000000aaaffebaaa9fea9f0000000000000000d557fe395507e55a00000000000000006aa7ff1caac8eaaa00000000000000005557ff9d54f1153a00000000000000006aabffccaa6e2a7200000000000000005553fff0157e557400000000000000002aa9ffffeabcaaec00000000000000003154ffffe53d54e40000000000000000122afffff2bcaac8000000000000000014547ffff57555d800000000000000000aaa3ffffa7ea9d0000000000000000009110ffff96653900000000000000000062287fffca6aba00000000000000000045541fffed7534000000000000000000288a87ffecb2740000000000000000001151407e1939780000000000000000000a2228001a9ab000000000000000000004445500795ce0000000000000000000068aaaa7329cc000000000000000000001111153f54d8000000000000000000000a222abeaab0000000000000000000000445555e55600000000000000000000003888a9caa800000000000000000000000d1554d57000000000000000000000000322222bc0000000000000000000000000e4455e000000000000000000000000001fabf000000000000000000000000000007e000000000000000"},zcash:{name:"zcash",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f80000000000000000000000000000ffffc000000000000000000000000003fffff80000000000000000000000000ffffffe0000000000000000000000003fffffff800000000000000000000000ffffffffc00000000000000000000001fffffffff00000000000000000000003ffe001fff80000000000000000000007ff00003ffc000000000000000000000ffc00000ffe000000000000000000001ff803f003ff000000000000000000003fe003f001ff000000000000000000007fc003f000ff800000000000000000007f8003f0007fc0000000000000000000ff0003f0003fc0000000000000000000fe01fffff01fe0000000000000000001fe01fffff00ff0000000000000000001fc01fffff007f0000000000000000003f881fffff007f0000000000000000003f801fffff003f8000000000000000003f201ffffe003f801f800e001f80e01c7f401ffffe003f807fe00f007fe0e01c7f008003fc001fc0fff01f00fff0e01c7f010007f8001fc1e0f01f00f070e01c7e02000ff8001fc1e0703f81e078e01cfe04001ff0001fc1c0703b81e078e01cfe88083fe0001fc3c0783b80f000e01cfe10103fc0000fc3c00079c0fc00e01cfe20207fc0000fc3c00071c07f00fffcfe4040ff80000fc3c00071e03fc0fffcfe8880ff00001fc3c000f0e007e0fffcfe1101fe00001fc3c000e0e001f0e01cfe2223fe00001fc3c078fff00078e01c7e4407fc00001fc1c071fff1c078e01c7f0887f800001fc1e071c071c078e01c7f510ff777003f81e0f3c079e070e01c7f2a1fffff003f80ffe38038fff0e01c3f943fffff003f807fc380387fe0e01c3faabfffff007f001f87803c1f80e01c1fd53fffff007f0000000000000000001fcabfffff00ff0000000000000000000fe53fffff01fe0000000000000000000ff2803f0081fe00000000000000000007f9553f1003fc00000000000000000003fcaa3f2007fc00000000000000000003fe443f400ff800000000000000000001ff2abf003ff000000000000000000000ffc100007fe0000000000000000000007ff2a221ffc0000000000000000000003ffc000fff80000000000000000000001fffe1ffff00000000000000000000000ffffffffe000000000000000000000003fffffff8000000000000000000000001fffffff00000000000000000000000003fffffc00000000000000000000000000fffff0000000000000000000000000000fff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},dash:{name:"dash",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffc03fffff00ffffff8fe000fe007fffffe07fffff81ffffff8fe000fe00ffffffe1ffffff83ffffff1fc001fc00ffffffe1ffffff87ffffff1fc001fc00ffffffe3ffffff8fffffff1fc001fc0000000fe3f8003f8fe000003f8003f80000001fc7f8003f8fe000003f8003f80fff001fc7f0007f1fffffe03ffffff81ffe001fc7f0007f1ffffff07ffffff81ffe003f87f1ffff1ffffff87ffffff01ffe003f8fe1fffe0ffffff87ffffff03ffe003f8fe1fffe07fffff8fffffff00000007f0fe3fffe000003f8fe000fe00000007f1fc3fffc000007f8fe000fe007ffffff1fc001fc7ffffff1fc001fe00ffffffe1fc001fc7ffffff1fc001fc00ffffffe3f8003f8ffffffe1fc001fc00ffffffc3f8003f8ffffffc3fc003fc01ffffff03f8003f8ffffff83f8003f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},bitcoin_cash:{name:"bitcoin_cash",hex:"00003ffff00ffffffffff00ffffc000000003ffff01ffffffffff80ffffc000000003fffe03ffffffffffc07fffc000000003fffc03ffff1fffffc03fffc000000003fffc07ffe30fffffe03fffc000000003fff80fffe38ffffff01fffc000000003fff80fffe38ffffff01fffc000000003fff01fffe3803ffff80fffc000000003fff03ffff0000ffffc0fffc000000003fff03ffff0000ffffc0fffc000000003ffe03fff000007fffc07ffc000000003ffe07ffc003c07fffe07ffc000000003ffe07ffc00fe03fffe07ffc000000003ffc07ffc00ff07fffe03ffc000000003ffc0ffffe0ff07ffff03ffc000000003ffc0ffffe07e07ffff03ffc000000003ffc0ffffe07c0fffff03ffc000000003ffc0ffffe07801ffff03ffc000000003ffc0fffff00000ffff03ffc000000003ffc0fffff000007fff03ffc000000003ffc0fffff003c07fff03ffc000000003ffc0fffff03fe03fff03ffc000000003ffc0fffff83ff03fff03ffc000000003ffc0fffff81ff03fff03ffc000000003ffc0fffff81fe03fff03ffc000000003ffc0fffff81fe07fff03ffc000000003ffc0fffffc1f807fff03ffc000000003ffc07ffffc0e00fffe03ffc000000003ffe07ffffc0001fffe07ffc000000003ffe07ffffc0007fffe07ffc000000003ffe03fffe0003ffffc07ffc000000003fff03fffe0023ffffc0fffc000000003fff03fffe0061ffffc0fffc000000003fff01fffe3c71ffff80fffc000000003fff80fffffc71ffff01fffc000000003fff80fffffc71ffff01fffc000000003fffc07ffffe3ffffe03fffc000000003fffc07ffffffffffc03fffc000000003fffe03ffffffffffc07fffc000000003fffe01ffffffffff807fffc000000003ffff00ffffffffff00ffffc000000003ffff807ffffffffe01ffffc000000003ffffc03ffffffffc03ffffc000000003ffffe00ffffffff007ffffc000000003fffff007ffffffe00fffffc000000003fffff801ffffff801fffffc000000003fffffc007ffffe003fffffc000000003fffffe000ffff0007fffffc000000003ffffff0000ff0000ffffffc00000000000000000000000000000000000000000000000000000000000000000000000000038000001c000000000e00000000001fe39800001c001fe0000e00000000001ff198000018003fc0000e00000000001c7818000000007840000e00000000001c3b9f1f3f1dfc700fc7eff0000000001c739f3f7f9dfe700fe7eff0000000001ff39878739dcee000ee0e78000000001ffb9870e1ddc6e0036f0e38000000001c3b9870e1ddc6700fe7ce38000000001c3b9870e1ddc6701c61ee38000000001c3b987071ddc6781c606e38000000001ffb9fff7f9dc63fffefee38000000001ff39fbf3f1dc61fefefee380000"},bitcoin_gold:{name:"bitcoin_gold",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc000000000000000000000000000000ff80000000000000000000000000000007e00000000000000000000000000000fcf80000000000000000000000000000ff1e0000000000000000000000000000ffe78000000000000000000000000000fff9c000000000000000000000000000fffce000000000000000000000000000ffff7000000000000000000000000000ffffb800000000000000000000000000ffffdc00000000000000000000000000ffffee00000000000000000000000000c7fff700000000000000000000000000fdfffb00000000000000000000000000ff7ffb80000000000000000000000000f7bffd80000000000000000000000000f1dffec0000000000000000000000000f0fffec0000000000000000000000000fe37ffe0000000000000000000000000ffbbff60000000000000000000000000ffddff60000000000000000000000000ffcdfff00000000000000000000000001fceffb00000000000000000000000000fc6ffb3f1ffe7e1f8770e1f81f8f1fc0fc3ffb3f9ffeff3fc778e3fc7fcf1ff0fc37ff3f9fffff7fe77ce7fe7fef1ff7fc37ff3b9c71e3f0f77cef0cf1ef1e7ff837fd3f9c73c0e0f77eee00e0ef1e3ffc37fd3f9c73c0e0777fee7fe0ff1e3ffe37fd3fdc73c0e07777ee7ee0ff1e3fff37fd39dc73c0e0f777ee7ee0ef1e307f37ff39dc71e3f0f773ef0ef1ef1e707f37ff3fdc71ff7fe771e7fe7feffff07f3ffb3fdc70ff3fc771e7fc7fcffff07f6ffb3f9c707e1f8770e1f01f0fffc1ffeffb0000000000000000000000000ffedfff0000000000000000000000000fffdff60000000000000000000000000ffbbff60000000000000000000000000fe77ffe0000000000000000000000000f0effec0000000000000000000000000f1dfffc0000000000000000000000000e7bffd80000000000000000000000000ff7ffb80000000000000000000000000f9fffb0000000000000000000000000087fff600000000000000000000000000ffffee00000000000000000000000000ffffdc00000000000000000000000000ffffb800000000000000000000000000ffff7000000000000000000000000000fffce000000000000000000000000000fffbc000000000000000000000000000ffe78000000000000000000000000000ff1e0000000000000000000000000000f878000000000000000000000000000003e00000000000000000000000000000ff800000000000000000000000000000fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},vertcoin:{name:"vertcoin",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff00000000000000000000000000003ffff000000000000000000000000001fffffc00000000000000000000000003ffffff0000000000000000000000000fffffff8000000000000000000000003fffffffe000000000000000000000007ffffffff00000000000000000000000fffffffff80000000000000000000001fffffffff00000000000000000000003fffffffff00000000000000000000007ffffffffe00000000000000000000007ffffffffc0000000000000000000000fffffffffc0000000000000000000001fffffffff80000000000000000000001fffffffff00000000000000000000003ffffffffe00200000000000000000003ffffffffe00200000000000000000007ffffffffc00700000000000000000007ffffffff800f00000000000000000007ffffffff801f80000000000006000007ffffffff001f8000000000000600000ffffffffe003f8000004000000000000ffffffffe007f8000004000000000000ffffffffc007f81e049f83c1e0613c00ffffffff800ff83f05df8fc3f0e1fe00fe000fff001ffc61860408061821c200fc0007ff003ffc40840418040c218200f80003fe003ffc40840410040c218300ffe001fc007ffcff840410040c218300fff001fc00fff8c0040410040c218300fff800f800fff840040418040c218300fff8007001fff8600404180608218300fffc003003fff83084040c03182183007ffe002007fff81f840787e1f02183007fff000007fff80000000000000000007fff00000ffff00000000000000000003fff80001ffff00000000000000000003fffc0001fffe00000000000000000003fffe0003fffe00000000000000000001fffe0007fffc00000000000000000000ffff0007fffc00000000000000000000ffff800ffff8000000000000000000007fffc01ffff8000000000000000000003fffc03ffff0000000000000000000003fffe03fffe0000000000000000000001ffff07fffc0000000000000000000000ffff8ffff800000000000000000000007fffdffff000000000000000000000001fffffffe000000000000000000000000fffffff80000000000000000000000003fffffe00000000000000000000000000fffff8000000000000000000000000001fffe00000000000000000000000000001fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},namecoin:{name:"namecoin",hex:"00000000000000000000000000000000000000000000000ff00000000000000000000000000000ffff0000000000000000000000000003ffffc00000000000000000000000000ffffff00000000000000000000000001ffffff80000000000000000000000007ffffffe000000000000000000000000ffffffff000000000000000000000001ffffffff800000000000000000000003ffffffffc00000000000000000000007ffffffffe00000000000000000000007ffffffffe0000000000000000000000fff87fff1f0000000000000000000000fff07ffc3f0000000000000000000001ffe03ffc3f8000000000000000000001ffe01ff83f8000000000000000000003ffe11ff87fc000000000000000000003ffc18ff87fc000000000000000000003ffc187f07fc000000000000000000007ffc1c3f07fe000000000000000000007ffc0e3f0ffe000000000000000000007ff8061f0ffe000000000000000000007ff8070e0ffe000000000000000000007ff843860ffe000000000000000000007ff061c61ffe000000000000000000007ff071c21ffe000000000000000000007ff0f8e01ffe000000000000000000007ff0f8701ffe000000000000000000007fe0fc383ffe000000000000000000003fe0fe383ffc000000000000000000003fe1fe183ffc000000000000000000003fe1ff087ffc000000000000000000003fc1ff807ffc000000000000000000001fc1ffc07ff8000000000000000000001fc3ffc0fff8000000000000000000000f87ffe1fff0000000000000000000000fffffffffe00000000000000000000007ffffffffe00000000000000000000003ffffffffc00000000000000000000001ffffffff800000000000000000000000ffffffff0000000000000000000000007ffffffe0000000000000000000000003ffffffc0000000000000000000000001ffffff800000000000000000000000007ffffe000000000000000000000000001ffff80000000000000000000000000003ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000001c0000000000000000000000000000001800000000000000000000000000000000000000000000000fc1fcfff0f87e7e39fc0000000000001fe3f8fff1fcfefe39fc0000000000001ce739ce738de1e7399c0000000000001cee39ce731dc1c7738c00000000000018ee39ce77f9c1c7739c00000000000038ee31ce77f1c187739c00000000000039ce738e7701c18e731c00000000000039cff39c63f1f9fe671c00000000000039c7f39ce3f1f9fce73800000000000031c3e39ce1f07870e73800000000000000000000000000000000000000"},monacoin:{name:"monacoin",hex:"00000000002000000000040000000000000000000030000000000c0000000000000000000030000000000c0000000000000000000038000000001c000000000000000000003c000000003c000000000000000000007c000000003e000000000000000000007e000000007e000000000000000000007f00000000fe000000000000000000007f00000000fe00000000000000000000ff80000001ff00000000000000000000ff80000001ff00000000000000000000ffc0000003ff00000000000000000000ffe0000007ff00000000000000000001ffe0000007ff80000000000000000001fff07ffe0fff80000000000000000001ffffffffffff80000000000000000001ffffffffffff80000000000000000001ffffffffffff80000000000000000003ffffffffffffc0000000000000000003ffffffffffffc0000000000000000003ffffffffffffc0000000000000000003ffffffffffffc0000000000000000007ffffffffffffe000000000000000000ffffffffffffff000000000000000001ffffffffffffff800000000000000003ffffffffffffffc00000000000000007fff1ffffff8fffe00000000000000007ffe3ffffffc7ffe0000000000000000fffc7ffffffe3fff0000000000000001fff8ffffffff1fff8000000000000001fff1ffffffff8fff8000000000000003fff3fe7ffe7fc7ffc000000000000003ffe7fe3ffc7fe7ffc000000000000003fffffe3ffc7fffffc000000000000007ffffff0000ffffffe000000000000007ffffff0001ffffffe000000000000007ffffff8001ffffffe000000000000007ffffffcfe3ffffffe000000000000007ffffffc7e3ffffffe000000000000007ffffffe3c7ffffffe000000000000007ffffffe3cfffffffe000000000000007fffffff18fffffffe000000000000007fffffff91fffffffe000000000000003fffffff81fffffffc000000000000003fffffffc3fffffffc000000000000003fffffffc3fffffffc000000000000001fffffffe7fffffff8000000000000001fffffffeffffffff8000000000000000ffffffffffffffff00000000000000007fffffffffffffff00000000000000007ffffffffffffffe00000000000000003ffffffffffffffc00000000000000001ffffffffffffff800000000000000000ffffffffffffff0000000000000000007ffffffffffffe0000000000000000001ffffffffffff80000000000000000000ffffffffffff000000000000000000003ffffffffffc000000000000000000000ffffffffff00000000000000000000003ffffffffc00000000000000000000000ffffffff0000000000000000000000000ffffff000000000000000000000000000ffff0000000000000000000000000000000000000000000000"},doge:{name:"doge",hex:"000000000000023c0000000000000000000000000000027c0000000000000000000000000000023a0000000000000000000000000000031a0000000000000000000000000000023e0000000000000000000000000000020d00000000000000000000000000000204800000000000000000000000000002168000000000000000000000000000020b40000000000000000000000000000405800000000000000000000000000004c8d000000000000000000000000000057f25580000000000000000000000001afbcfe200000000000000001600000075757ffd000000000000000021800001aaefaffe400000000000000041e0001d5557f7ff2000000000000000027c01ceaabffaffd000000000000000411a0e755577ff7fe8000000000000004288d8aa889befffe80000000000000041552555415fdffdf40000000000000042a286aaba15ff1bfa00000000000000401541555c45f86ff5200000000000004002808aae2a6cf6fd200000000000004010815ddd9559177e40000000000000200080abbb83ac17ff40000000000000200045455f44f217ffc010000000000020062aeafee0ff8fffe0f0000000000010050555fdfc7ffffff1c00000000000100302aaabfbbbffffff0000000000001000c55557ffdfffbffc00000000000008002aaaafeebfeffffc000000000000040013d558e1fffe07fcfc000000000004202baab20bbffc07ffa000000000000244475567c17ff003ff000000000000020a4eaac8e4bfe001fefe000000000001441dd580e0ffc001ff80000000000002a0bbaa80ecffc000ff7e0000000000037577778097ffc0007f8700000000000286eeebe06fffc0007ff8000000000003015ddddfddffe4003f8c000000000002823bbeaaabffe2003f800000000000036374ff554dfffc007fc000000000000282ebffeabffffc007fc0000000000003655fffffffffd6007fc0000000000002a27ffffffffbfe007fc0000000000002547fffffffcfd6003fc0000000000001aaffffffffcdfa087fc000000000000111ffffffffd576107fc00000000000012a7fffffffeaba00ffc0000000000000557fffffffe55c00ffc0000000000000e8ffffffffeaba01ffc0000000000000d57fffffffffc401ffc0000000000000aa3ffffffff00083ffe0000000000000d43fffffffe000d7ff60000000000000aa7ffffffff00bafff70000000000000943ffffffff0157fff78000000000000aa3ffffffffc2affff7c000000000000b45ffffffffffffffd78000000000000aa9ffffffffffefffafc000000000000150ffffffffffffffd7c000000000000aaa7fffffffffffff3fe0000000000007543fffffffffffff77f0000000000006a89fffffffffffffaff0000000000005140fffffffffffff5ff000000"},digibyte:{name:"digibyte",hex:"0000000000000003c000000000000000000000000000007ffe0000000000000000000000000001ffff8000000000000000000000000007ffffe00000000000000000000000001fc003f80000000000000000000000003f0000fc0000000000000000000000007c00003e000000000000000000000000f800001f000000000000000000000001f000000f800000000000000000000003e0000007c00000000000000000000003c0000003c000000000000000000000078000cc01e0000000000000000000000f00009800f0000000000000000000000f01fffc00f0000000000000000000000e01ffff8070000000000000000000001e03ffffc078000000000000000000001c00000fe038000000000000000000001c000003e038000000000000000000001c000003e038000000000000000000003c003e03e03c000000000000000000003c003c03e03c000000000000000000003c003c03c03c000000000000000000003c007807c03c000000000000000000003c007807803c000000000000000000003c00f80f003c000000000000000000001c00f01f0038000000000000000000001c00f03e0038000000000000000000001c01f1f80038000000000000000000001e01fff00078000000000000000000000e03ff800070000000000000000000000f03fc0000f0000000000000000000000700cc0000e0000000000000000000000780000001e00000000000000000000003c0000003c00000000000000000000003e0000007c00000000000000000000001f000000f800000000000000000000000f800001f0000000000000000000000007c00003e0000000000000000000000003f0000fc0000000000000000000000001fe007f800000000000000000000000007ffffe000000000000000000000000001ffff80000000000000000000000000003ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180060000000000000000000000001fc3000c7f000000000000000000000019e0000063000600000000000000000038e00600c3000e06000000000000000030c63f98c6719f1f800000000000000030c66318fc330c31800000000000000061cc63318c3618730000000000000000618cc6318c34187f00000000000000006318c6330c3c30600000000000000000fe18ee63983838600000000000000000fc18ec63f0303c7c000000000000000000000c00006000000000000000000000000018000060000000000000000000000003f00003c0000000000000000000000001c0000300000000000000"},decred:{name:"decred",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffc0007ffffe0000000000000000000fffe0003fffffc0000000000000000007fff0001ffffff0000000000000000003fffc000ffffff8000000000000000001fffe0007fffffc0000000000000000007fff0001ffffff0000000000000000003fff8000ffffff0000000000000000001fffc0007fffff8000000000000000000fffe0003fffffc0000000000000000007fff8001fffffe0000000000000000003fffc000007ffe0000000000000000003fffe000001fff000000000000000000fffff000000fff000000000000000001fffff8000007ff800000000000000003fffffc000003ff80000000000000000ffffffe000001ff80000000000000001fffffff800001ffc0000000000000001fffffffc00000ffc0000000000000003fffffffe00000ffc0000000000000007ffffffff00000ffc0000000000000007ffe0000000000ffc000000000000000fff80000000000ffc000000000000000fff00000000000ffc000000000000001ffe00000000000ffc000000000000001ffc00000000000ffc000000000000001ff800000000001ffc000000000000003ff800000000001ff8000000000000003ff000000000003ff8000000000000003ff000000000007ff8000000000000003ff00000000000fff0000000000000003ff00000000001fff0000000000000003ff00000000007ffe0000000000000003ff00000ffffffffe0000000000000003ff000007fffffffc0000000000000003ff000003fffffff80000000000000003ff800001fffffff80000000000000001ff8000007ffffff00000000000000001ffc000003fffffc00000000000000001ffe000001fffff800000000000000000fff000000fffff000000000000000000fff8000007fffc0000000000000000007ffe000003fffc0000000000000000007fffff8001fffe0000000000000000003fffffc0007fff0000000000000000001fffffe0003fff8000000000000000000ffffff0001fffc000000000000000000ffffff8000fffe0000000000000000003fffffe0007fff8000000000000000001ffffff0003fffc000000000000000000ffffff8000fffe0000000000000000003fffffc0007fff00000000000000000007ffffe0003fff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},multibit:{name:"multibit",hex:"0ffc07f8e01c7ffe07ff0000000000001ff80ff9e03c7fff83ff8000000000003ff03ff9e03c7fffc0ffc000000000007fe07ff9e03c7fffe0ffc000000000007fc0fff9e03c7ffff07fe00000000000ffc1fff9e03c7ffff83ff00000000000ff83ff81e03c7ffffc1ff00000000000ff07e001e03c17fffe0ff80000000000fe0f0001e03c03ffff0ffc0000000000fe1f0001e03c00ffff87fc0000000000fc1f1fffffff803fff83fe0000000000f83f1ffffffffc0fffc3fe0000000000f87f1fffffffff07ffe1fe0000000000f07f1fffffffffc3ffe1ff0000000000f0ff00fff87fffe3fff0ff0000000000e0ff003fe001fff1fff0ff8000000000e0ff801fe0007ff1fff87f8000000000e1fffe1fe0003ff9fff87f8000000000c3ffff1fe0f81ff8fff87f8000000000c3ffff1fe1fc0ff8fffc3fc000000000c3ffff1fe1fe0ff8fffc3fc00000000087ffff1fe1fe0ff8fffc1fc00000000087ffff1fe1ff0ff8fffe1fc00000000087ffff1fe1fe0ff8fffe1fe00000000087ffff1fe0fc0ff1fffe1fe0000000008fffff1fe0f01ff1fffe1fe0000000000fffff1fe0003fe3fffe1fe0000000000fffff1fe0007fc3ffff0fe0000000000fffff1fe001ff87ffff0fe0000000000fffff1ffffffe07ffff0fe0000000000fffff1ffffffe03ffff0fe0000000000fffff1fffffffe0ffff0fe0000000000fffff1ffffffff87fff0fe0000000000fffff1e3f8c03fc7fff0fe0000000000fffff1e3f0c00fe3fff0fe0000000000fffff1e3f8c007f3fff0fe0000000000fffff1e3f8c003f1fff0fe0000000000fffff1e3f8c7c3f1fff0fe0000000000fffff1e3f8c7e1f9ffe1fe00000000087ffff1e000c7e1f9ffe1fe00000000087ffff1e000c7e1f9ffe1fe00000000087ffff1e000c7e1f9ffe1fc00000000087ffff1e1f0c7e1f9ffe1fc000000000c3ffff1e3f8c7e1f1ffc3fc000000000c3ffff1e3f8c7e1f1ffc3fc000000000c3ffff1e3f8c7c3f1ff83fc000000000e1ffe01e3f8c003f3ff87f8000000000e1ffc01e3f08007e3ff07f8000000000e0ffc03e3f0801fc7ff07f8000000000f0ff8ffffffffffc7ff0ff0000000000f0ff8ffffffffff0ffe0ff0000000000f87f8fffffffffe1ffe1ff0000000000f83f8fffffffff83ffc3fe0000000000fc3f8fffffffe007ff83fe0000000000fe1f8001e03c001fff87fc0000000000fe0f8001e03c007fff07fc0000000000ff07c001e03c07fffe0ff80000000000ff83fff9e03c7ffffc1ff80000000000ff83fff9e03c7ffff83ff000000000007fc1fff9e03c7ffff03fe000000000007fe07ff9e03c7fffe07fe000000000003ff03ff9e03c7fffc0ffc000000000001ff81ff9e03c7fff81ff8000000000000ffc0ff9e03c7ffe03ff000000000000"},reddit:{name:"reddit",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000f80fe000000000000000000000000000ff9c7000000000000000000000000001cff8300000000000000000000000000180f830000000000000000000000000018038300000000000000000000000000380183000000000000000000000000003001cf000000000000000000000000003000fe0000000000000000000000000070007c000000000000000000000000006000000000000000000000000000000060000000000000000000000000000003f00000000000000000000000000000ffffc000000000000000000000000007fffff800000000000000000000001c1fc000fe0e000000000000000000007ffc00000fbf80000000000000000000fff0000003ffc0000000000000000001c3c0000000f0e0000000000000000001878000000078600000000000000000018e000000001c600000000000000000018c000000000c600000000000000000019c01f001e006600000000000000000019803f803f00760000000000000000001f003f807f803e0000000000000000000f003f807f803c00000000000000000007003f807f803800000000000000000007003f803f001800000000000000000007001f001f0018000000000000000000070000000000380000000000000000000700000000003800000000000000000003000000000030000000000000000000030000000000300000000000000000000180000000007000000000000000000001c00c000c00e000000000000000000000e00f003c00c0000000000000000000007007fff803c0000000000000000000007801ffe00780000000000000000000001c001e000e00000000000000000000000f0000003c000000000000000000000007e00001f8000000000000000000000001fc000fe00000000000000000000000003fffff0000000000000000000000000007fff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},hacker:{name:"hacker",hex:"00000000000000000000000000000000000000007ffffffffffffffe00000000000000004000040000200002000000000000000040000403c020000200000000000000004000041ff820000200000000000000004000043ffc20000200000000000000004000047ffe20000200000000000000004000047ffe2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff20000200000000000000004000047ffe20000200000000000000004000047ffe20000200000000000000004000043ffc20000200000000000000004000040ff0200002000000000000000040000403c02000020000000000000000400004000020000200000000000000007ffffffffffffffe000000000000000040000400002000020000000000000000400004000020000200000000000000004000040000207f020000000000000000400004000021ffc20000000000000000400004000023ffe20000000000000000400004000023fff20000000000000000400004000027fff20000000000000000400004000027fff2000000000000000040000400002ffffa000000000000000040000400002ffffa000000000000000040000400002ffffa000000000000000040000400002ffffa0000000000000000400004000027fff20000000000000000400004000027fff20000000000000000400004000023fff20000000000000000400004000023ffe20000000000000000400004000021ffc200000000000000004000040000207f02000000000000000040000400002000020000000000000000400004000020000200000000000000007ffffffffffffffe00000000000000004000040000200002000000000000000040780403c0201e02000000000000000041ff040ff020ff82000000000000000043ff843ffc21ffc2000000000000000047ffc47ffe23ffe200000000000000004fffe47ffe27fff200000000000000004fffe4ffff27fff200000000000000005fffe4ffff27fffa00000000000000005ffff4ffff2ffffa00000000000000005ffff4ffff2ffffa00000000000000005ffff4ffff2ffffa00000000000000005ffff4ffff2ffffa00000000000000004fffe4ffff27fff200000000000000004fffe47ffe27fff2000000000000000047ffc47ffe23ffe2000000000000000043ff843ffc21ffc2000000000000000041ff041ff820ff820000000000000000407c0403c0203e020000000000000000400004000020000200000000000000007ffffffffffffffe0000000000000000000000000000000000000000"},polis:{name:"polis",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000007fe00000000e00070001c000000000007ff00000000e0007000180000080000070f00000000e00070000000000c0000070780000000e00070000000001c000007038fc733f8e1f873be3c00003e00000707bfe7f7fce3fc73ff3c00003f00000707bcf7f71ee79e73ef3c00007f000007ff3877871ee70e7387bc00007f800007ff01f7803eefff7387bc0000ff800007fe1ff783feefff7387bc0000ffc00007003e7787deeffe7387bc0001ffc000070078778e1eef007387bc0003f7e000070070f78e1ee70e7387bc0003f3f000070079f78f3ee7fe7387bc0007e3f00007003ff787fee3fc7387bc0007c1f80007001e7783cee1f87387bc000fc0f8000000000000000000000000000f80fc000000000000000000000000001f807e000000000000000000000000003f007e0007fe0003ce000000000000003f003f0007ff0003ce000000000000007e001f00070f0003c0000000000000007c001f8007078003c000000000000000fc000f8007038fe3ce3f800000000001f8000fc007079ff3ce7fc00000000001f80007e00707befbcef1c00000000003f00007e007ff387bcef1c00000000003f00003f007ff783bcefc000000000007e00001f007fe783bce7f800000000007c00001f80700783bce1fc0000000000fc00000f80700783bce03e0000000001f83fffffc0700383bcee0e0000000001f87fffffe07003cfbcef9e0000000003f07fffffe07001ff3ce7fc0000000003e0fffffff07000fe3ce3f80000000007e0fffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},carlos:{name:"carlos",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000007f80000007f000000000000000000000ffc00000fffc00000000000000000000fee00000fffc00000000000000000001fe300380fffa00000000000000000000f8180f807ff800000000000000000003ff0806f87ff000000000000000000007f88002807fd000000000000000000007ffc4000070300000000000000000000f4fe0000180000000000000000000000e0fe0000000000000000000000000001e7ff0000000000000000000000000001e7ff0000000000000000000000000001c7bf0000000000000000000000000001c09f0000000000000000000000000001d05f0000000000000000000000000001c01f1800000000000000000000000001c01e1800000000000000000000000000e01e3800000000000000000000000000cffc300000000000000000000000000047fc000000000000000000000000000007f400000000000000000000000000000fe000000000000000000000000000000fc800000000000000000000000000000fc800000000000000000000000000000781e0000000000000000000000000000007e000000000000000000000000000000fe000000000000000000000000000003fc00000000000000000000000000000ff800000000000000000000000000008ff0000000000000000000000000000107e0000000000000000000000000000003e0000000000000000000000000000007c000000000000000000000000000000fc000000000000000000000000000001f8000000000000000000000000000003f0000000000000000000000000000183f0000000000000000000000000000103f0000000000000000000000000000407f000000000000000000000000000040ee000000000000000000000000000040e00000000000000000000000000000c1c60000000000000000000000000000c39c0000000000000000000000000000e73c0000000000000000000000000000e73c0000000000000000000000000000e6780000000000000000000000000000ee780000000000000000000000000000ec780000000000000000000000000001fc780000000000000000000000000003f8700000000000000000000000000003f8700000000000000000000000000002f8700000000000000000000000000003f8700000000000000000000000000001f0200000000000000000000000000001f0000000000000000000000000000001d0000000000000000000000000000001f0000000000000000000"},xrc:{name:"xrc",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc000000000000000000000000000003ff00000000000000000000000000000fff80000000000000000000000000001fff80000000000000000000000000007f8fc038000000000000000000000000fe07c0fe000000000000000000000001fc03c3ff800000000000000000000001f803cfffc00000000000000000000003f003ff83c00000000000000000000003e007fe01e00000000000000000000007c007fc00f0000000000000000000000f800ff800f0000000000000000000000f801ff080e0000000000000000000000f001ff3c3e0000000000000000000001f003fffffe0000000000000000000001f043fffffc0000000000000000000007f0e7fffff8000000000000000000000ff1fffffff0000000000000000000003fffffffffe0000000000000000000007fffffffffe000000000000000000000fffffffffff000000000000000000001fffffffffff800000000000000000001fffffffffffc00000000000000000003f83fffe0fffe00000000000000000003f00fffc03fff00000000000000000007e007ff801fff00000000000000000007c703ff180fff8000000000000000000fcf83ff3e0fff8000000000000000000f9cc1fe6307ffc000000000000000000f9861fec107ffc000000000000000001f9861fec107ffc000000000000000001f98c1fe6307ffc000000000000000001f8fc3fe7e0fffe000000000000000001fc783073c0fffe000000000000000001fe00603001fffe000000000000000001ff00e03803fffe000000000000000001ff81f03e0ffffe000000000000000001fe7ff87ff3fffe000000000000000000fc0ffcffc1fffe000000000000000000fcc3ffff18fffc000000000000000000fcf87fc07cfffc0000000000000000007e78000439fff80000000000000000007f223c7c91fff80000000000000000003f0e793dc3fff00000000000000000001fff3399fffff00000000000000000001fff87c3ffffe00000000000000000000fffffffffffc000000000000000000007ffffffffff8000000000000000000001ffffffffff0000000000000000000000fffffffffc00000000000000000000003ffffffff0000000000000000000000007ffffff800000000000000000000000003ffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}),$ce1f303d0aa8ec51$var$getTouchData=()=>({"wallpaper-1":{name:"wallpaper-1",hex:"77616c6c70617065722d312e706e67"},"wallpaper-2":{name:"wallpaper-2",hex:"77616c6c70617065722d322e706e67"},"wallpaper-3":{name:"wallpaper-3",hex:"77616c6c70617065722d332e706e67"},"wallpaper-4":{name:"wallpaper-4",hex:"77616c6c70617065722d342e706e67"}}),$ce1f303d0aa8ec51$var$getProData=()=>({"wallpaper-1":{name:"wallpaper-1",hex:"77616c6c70617065722d312e6a7067"},"wallpaper-2":{name:"wallpaper-2",hex:"77616c6c70617065722d322e6a7067"},"wallpaper-3":{name:"wallpaper-3",hex:"77616c6c70617065722d332e6a7067"},"wallpaper-4":{name:"wallpaper-4",hex:"77616c6c70617065722d342e6a7067"},"wallpaper-5":{name:"wallpaper-5",hex:"77616c6c70617065722d352e6a7067"},"wallpaper-6":{name:"wallpaper-6",hex:"77616c6c70617065722d362e6a7067"},"wallpaper-7":{name:"wallpaper-7",hex:"77616c6c70617065722d372e6a7067"}}),$ce1f303d0aa8ec51$var$getHomeScreenHex=(r,i)=>{var n,s;let a;switch(r){case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.Mini:case $3FhS8.EDeviceType.ClassicPure:a=$ce1f303d0aa8ec51$var$getT1Data();break;case $3FhS8.EDeviceType.Touch:a=$ce1f303d0aa8ec51$var$getTouchData();break;case $3FhS8.EDeviceType.Pro:a=$ce1f303d0aa8ec51$var$getProData();break;default:a={}}return null!==(s=null===(n=a[i])||void 0===n?void 0:n.hex)&&void 0!==s?s:""},$ce1f303d0aa8ec51$var$getHomeScreenDefaultList=r=>{let i;let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");switch(n){case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.Mini:case $3FhS8.EDeviceType.ClassicPure:i=$ce1f303d0aa8ec51$var$getT1Data();break;case $3FhS8.EDeviceType.Touch:i=$ce1f303d0aa8ec51$var$getTouchData();break;case $3FhS8.EDeviceType.Pro:i=$ce1f303d0aa8ec51$var$semver__default.default.gte(s,"4.10.0")?$ce1f303d0aa8ec51$var$getProData():Object.keys($ce1f303d0aa8ec51$var$getProData()).slice(0,4).reduce((r,i)=>(r[i]=$ce1f303d0aa8ec51$var$getProData()[i],r),{});break;default:i={}}return Object.keys(i)},$ce1f303d0aa8ec51$var$getHomeScreenSize=({deviceType:r,homeScreenType:i,thumbnail:n})=>{let s={touch:{thumbnail:{Nft:{width:238,height:238},WallPaper:{width:144,height:240}},full:{width:480,height:800}},pro:{thumbnail:{Nft:{width:226,height:226,radius:40},WallPaper:{width:144,height:240,radius:40}},full:{width:480,height:800}}}[r];if(s)return n?s.thumbnail[i]:s.full},$ce1f303d0aa8ec51$var$isBleConnect=r=>"react-native"===r||"lowlevel"===r,$ce1f303d0aa8ec51$var$wait=r=>new Promise(i=>{setTimeout(i,r)}),$ce1f303d0aa8ec51$var$findDefectiveBatchDevice=r=>{if(!r)return;let{onekey_serial:i,se_ver:n}=r;if(!i)return;let s=+i.slice(5);if(!Number.isNaN(s))return s>=21032200001&&s<=21032201500&&"1.1.0.2"===n},$ce1f303d0aa8ec51$var$getDefectiveDeviceInfo=r=>{if(!$ce1f303d0aa8ec51$var$findDefectiveBatchDevice(r))return null;let i=$ce1f303d0aa8ec51$var$getDeviceUUID(r),n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=r.se_ver;return{serialNo:i,seVersion:s,deviceType:n||"Unknown"}},$ce1f303d0aa8ec51$var$CORE_EVENT="CORE_EVENT",$ce1f303d0aa8ec51$var$parseMessage=r=>{let{data:i}=r,n={event:i.event,type:i.type,payload:i.payload};return"number"==typeof r.id&&(n.id=r.id),"boolean"==typeof n.success&&(n.success=i.success),n},$ce1f303d0aa8ec51$var$createErrorMessage=r=>{let i={error:r.message,code:r.code};return r instanceof $3FhS8.HardwareError&&(i={error:r.message,code:r.errorCode}),{success:!1,payload:i}},$ce1f303d0aa8ec51$var$UI_EVENT="UI_EVENT",$ce1f303d0aa8ec51$var$UI_REQUEST={REQUEST_PIN:"ui-request_pin",INVALID_PIN:"ui-invalid_pin",REQUEST_BUTTON:"ui-button",REQUEST_PASSPHRASE:"ui-request_passphrase",REQUEST_PASSPHRASE_ON_DEVICE:"ui-request_passphrase_on_device",REQUEST_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:"ui-request_select_device_in_bootloader_for_web_device",REQUEST_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:"ui-request_select_device_for_switch_firmware_web_device",CLOSE_UI_WINDOW:"ui-close_window",CLOSE_UI_PIN_WINDOW:"ui-close_pin_window",DEVICE_PROGRESS:"ui-device_progress",BLUETOOTH_PERMISSION:"ui-bluetooth_permission",BLUETOOTH_UNSUPPORTED:"ui-bluetooth_unsupported",BLUETOOTH_POWERED_OFF:"ui-bluetooth_powered_off",BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE:"ui-bluetooth_characteristic_notify_change_failure",LOCATION_PERMISSION:"ui-location_permission",LOCATION_SERVICE_PERMISSION:"ui-location_service_permission",FIRMWARE_PROCESSING:"ui-firmware-processing",FIRMWARE_PROGRESS:"ui-firmware-progress",FIRMWARE_TIP:"ui-firmware-tip",PREVIOUS_ADDRESS_RESULT:"ui-previous_address_result",WEB_DEVICE_PROMPT_ACCESS_PERMISSION:"ui-web_device_prompt_access_permission",BOOTLOADER:"ui-device_bootloader_mode",NOT_IN_BOOTLOADER:"ui-device_not_in_bootloader_mode",REQUIRE_MODE:"ui-device_require_mode",NOT_INITIALIZE:"ui-device_not_initialized",SEEDLESS:"ui-device_seedless",FIRMWARE_OLD:"ui-device_firmware_old",FIRMWARE_NOT_SUPPORTED:"ui-device_firmware_unsupported",FIRMWARE_NOT_COMPATIBLE:"ui-device_firmware_not_compatible",FIRMWARE_NOT_INSTALLED:"ui-device_firmware_not_installed",NOT_USE_ONEKEY_DEVICE:"ui-device_please_use_onekey_device"};$ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage=void 0,function(r){r.CheckLatestUiResource="CheckLatestUiResource",r.StartDownloadFirmware="StartDownloadFirmware",r.FinishDownloadFirmware="FinishDownloadFirmware",r.DownloadLatestUiResource="DownloadLatestUiResource",r.DownloadFirmware="DownloadFirmware",r.DownloadBleFirmware="DownloadBleFirmware",r.DownloadLatestBootloaderResource="DownloadLatestBootloaderResource",r.DownloadLatestUiResourceSuccess="DownloadLatestUiResourceSuccess",r.DownloadFirmwareSuccess="DownloadFirmwareSuccess",r.DownloadBleFirmwareSuccess="DownloadBleFirmwareSuccess",r.DownloadLatestBootloaderResourceSuccess="DownloadLatestBootloaderResourceSuccess",r.AutoRebootToBootloader="AutoRebootToBootloader",r.GoToBootloaderSuccess="GoToBootloaderSuccess",r.SelectDeviceInBootloaderForWebDevice="SelectDeviceInBootloaderForWebDevice",r.SwitchFirmwareReconnectDevice="SwitchFirmwareReconnectDevice",r.ConfirmOnDevice="ConfirmOnDevice",r.FirmwareEraseSuccess="FirmwareEraseSuccess",r.StartTransferData="StartTransferData",r.InstallingFirmware="InstallingFirmware",r.UpdateBootloader="UpdateBootloader",r.UpdateBootloaderSuccess="UpdateBootloaderSuccess",r.UpdateSysResource="UpdateSysResource",r.UpdateSysResourceSuccess="UpdateSysResourceSuccess",r.FirmwareUpdating="FirmwareUpdating",r.FirmwareUpdateCompleted="FirmwareUpdateCompleted"}($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage||($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage={}));const $ce1f303d0aa8ec51$var$createUiMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$UI_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$IFRAME={INIT:"iframe-init",INIT_BRIDGE:"iframe-init-bridge",CALL:"iframe-call",CANCEL:"iframe-cancel",SWITCH_TRANSPORT:"iframe-switch-transport",CALLBACK:"iframe-callback"},$ce1f303d0aa8ec51$var$createIFrameMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$UI_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$RESPONSE_EVENT="RESPONSE_EVENT",$ce1f303d0aa8ec51$var$createResponseMessage=(r,i,n)=>({event:$ce1f303d0aa8ec51$var$RESPONSE_EVENT,type:$ce1f303d0aa8ec51$var$RESPONSE_EVENT,id:r,success:i,payload:i?n:$3FhS8.serializeError(n)}),$ce1f303d0aa8ec51$var$UI_RESPONSE={RECEIVE_PIN:"ui-receive_pin",RECEIVE_PASSPHRASE:"ui-receive_passphrase",SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:"ui-receive_select-device-in-bootloader-for-web-device",SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:"ui-receive_select-device-for-switch-firmware-web-device"},$ce1f303d0aa8ec51$var$createUiResponse=(r,i)=>({event:$ce1f303d0aa8ec51$var$UI_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$DEVICE_EVENT="DEVICE_EVENT",$ce1f303d0aa8ec51$var$DEVICE={CONNECT:"device-connect",CONNECT_UNACQUIRED:"device-connect_unacquired",DISCONNECT:"device-disconnect",CHANGED:"device-changed",ACQUIRE:"device-acquire",RELEASE:"device-release",ACQUIRED:"device-acquired",RELEASED:"device-released",USED_ELSEWHERE:"device-used_elsewhere",UNREADABLE:"unreadable-device",LOADING:"device-loading",BUTTON:"button",PIN:"pin",PASSPHRASE:"passphrase",PASSPHRASE_ON_DEVICE:"passphrase_on_device",WORD:"word",SUPPORT_FEATURES:"support_features",SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:"select_device_in_bootloader_for_web_device",SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:"select_device_for_switch_firmware_web_device",FEATURES:"features"},$ce1f303d0aa8ec51$var$createDeviceMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$DEVICE_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$FIRMWARE_EVENT="FIRMWARE_EVENT",$ce1f303d0aa8ec51$var$FIRMWARE={RELEASE_INFO:"firmware-release-info",BLE_RELEASE_INFO:"ble-firmware-release-info"},$ce1f303d0aa8ec51$var$createFirmwareMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$FIRMWARE_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$LogBlockEvent=new Set([$ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PIN,$ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PASSPHRASE]),$ce1f303d0aa8ec51$var$Log$d=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.DevicePool),$ce1f303d0aa8ec51$var$getDiff=(r,i)=>{let n=i.filter(i=>void 0===r.find(r=>r.path===i.path)),s=r.filter(r=>void 0===i.find(i=>i.path===r.path)),a=i.filter(i=>{let n=r.find(r=>r.path===i.path);return!!n&&n.session!==i.session}),o=a.filter(r=>"string"==typeof r.session),d=a.filter(r=>"string"!=typeof r.session),f=i.filter(i=>{let n=r.find(r=>r.path===i.path);return!!n&&n.debugSession!==i.debugSession}),l=a.filter(r=>"string"==typeof r.debugSession),u=a.filter(r=>"string"!=typeof r.debugSession),c=n.length+s.length+a.length+f.length>0;return{connected:n,disconnected:s,changedSessions:a,acquired:o,released:d,changedDebugSessions:f,debugAcquired:l,debugReleased:u,didUpdate:c,descriptors:i}};class $ce1f303d0aa8ec51$var$DevicePool extends $ce1f303d0aa8ec51$var$events.exports{static setConnector(r){this.connector=r}static getDevices(r,i,n){var s,a,o,d,f,l,u;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let c={},p=[];if(i){let s=this.devicesCache[i];if(s){let a=r.find(r=>r.path===s.originalDescriptor.path);if(a)return s.updateDescriptor(a,!0),c[i]=s,p.push(s),yield this._checkDevicePool(n),{devices:c,deviceList:p};$ce1f303d0aa8ec51$var$Log$d.debug("found device in cache, but path is different: ",i)}}try{for(s=!0,a=$ce1f303d0aa8ec51$var$__asyncValues(r);!(d=(o=yield a.next()).done);s=!0){u=o.value,s=!1;let r=u,i=yield this._createDevice(r,n);if(i.features){let n=$ce1f303d0aa8ec51$var$getDeviceUUID(i.features);if(this.devicesCache[n]){let i=this.devicesCache[n];i.updateDescriptor(r,!0)}this.devicesCache[n]=i,c[n]=i}p.push(i)}}catch(r){f={error:r}}finally{try{!s&&!d&&(l=a.return)&&(yield l.call(a))}finally{if(f)throw f.error}}return yield this._checkDevicePool(n),{devices:c,deviceList:p}})}static clearDeviceCache(r){r&&delete this.devicesCache[r]}static _createDevice(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=this.getDeviceByPath(r.path);return n||((n=$ce1f303d0aa8ec51$var$Device.fromDescriptor(r)).deviceConnector=this.connector,yield n.connect(),yield n.initialize(i),yield n.release()),n})}static _checkDevicePool(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){yield this._sendConnectMessage(r),this._sendDisconnectMessage()})}static _sendConnectMessage(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){for(let i=this.connectedPool.length-1;i>=0;i--){let n=this.connectedPool[i],s=yield this._createDevice(n,r);$ce1f303d0aa8ec51$var$Log$d.debug("emit DEVICE.CONNECT: ",null==s?void 0:s.features),this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.CONNECT,s),this.connectedPool.splice(i,1)}})}static _sendDisconnectMessage(){for(let r=this.disconnectPool.length-1;r>=0;r--){let i=this.connectedPool[r],n=(null==i?void 0:i.path)?this.getDeviceByPath(i.path):null;n&&this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,n),this.disconnectPool.splice(r,1)}}static reportDeviceChange(r){let i=$ce1f303d0aa8ec51$var$getDiff(this.current||[],r);this.upcoming=r,this.current=this.upcoming,$ce1f303d0aa8ec51$var$Log$d.debug("device pool -> current: ",this.current),$ce1f303d0aa8ec51$var$Log$d.debug("device pool -> upcomming: ",this.upcoming),$ce1f303d0aa8ec51$var$Log$d.debug("DeviceCache.reportDeviceChange diff: ",i),i.didUpdate&&(i.connected.forEach(r=>{let i=this.getDeviceByPath(r.path);if(!i){this._addConnectedDeviceToPool(r);return}$ce1f303d0aa8ec51$var$Log$d.debug("emit DEVICE.CONNECT: ",i.features),this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.CONNECT,i)}),i.disconnected.forEach(r=>{this._removeDeviceFromConnectedPool(r.path);let i=this.getDeviceByPath(r.path);if(!i){this._addDisconnectedDeviceToPool(r);return}$ce1f303d0aa8ec51$var$Log$d.debug("emit DEVICE.DISCONNECT: ",i.features),this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,i)}))}static getDeviceByPath(r){return Object.values(this.devicesCache).find(i=>i.originalDescriptor.path===r)}static _addConnectedDeviceToPool(r){let i=this.connectedPool.findIndex(i=>i.path===r.path);if(i>-1){this.connectedPool.splice(i,1,r);return}this.connectedPool.push(r)}static _removeDeviceFromConnectedPool(r){let i=this.connectedPool.findIndex(i=>i.path===r);i>-1&&this.connectedPool.splice(i,1)}static _addDisconnectedDeviceToPool(r){let i=this.disconnectPool.findIndex(i=>i.path===r.path);if(i>-1){this.disconnectPool.splice(i,1,r);return}this.disconnectPool.push(r)}static resetState(){this.current=null,this.upcoming=[],this.connectedPool=[],this.disconnectPool=[],this.devicesCache={},this.emitter.removeAllListeners(),$ce1f303d0aa8ec51$var$Log$d.debug("DevicePool state has been reset")}}$ce1f303d0aa8ec51$var$DevicePool.current=null,$ce1f303d0aa8ec51$var$DevicePool.upcoming=[],$ce1f303d0aa8ec51$var$DevicePool.connectedPool=[],$ce1f303d0aa8ec51$var$DevicePool.disconnectPool=[],$ce1f303d0aa8ec51$var$DevicePool.devicesCache={},$ce1f303d0aa8ec51$var$DevicePool.emitter=new $ce1f303d0aa8ec51$var$events.exports;const $ce1f303d0aa8ec51$var$Log$c=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Transport),$ce1f303d0aa8ec51$var$BleLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdBleTransport),$ce1f303d0aa8ec51$var$HttpLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportHttp),$ce1f303d0aa8ec51$var$LowLevelLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportLowLevel),$ce1f303d0aa8ec51$var$NodeUsbLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportNodeUsb),$ce1f303d0aa8ec51$var$WebBleLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdWebBleTransport),$ce1f303d0aa8ec51$var$WebUsbLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportWebUsb);class $ce1f303d0aa8ec51$var$TransportManager{static load(){$ce1f303d0aa8ec51$var$Log$c.debug("transport manager load"),this.defaultMessages=$ce1f303d0aa8ec51$var$DataManager.getProtobufMessages(),this.currentMessages=this.defaultMessages,this.messageVersion="latest"}static configure(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$Log$c.debug("Initializing transports",r),"react-native"===r)this.reactNativeInit?$ce1f303d0aa8ec51$var$Log$c.debug("React Native Do Not Initializing transports"):(yield this.transport.init($ce1f303d0aa8ec51$var$BleLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter),this.reactNativeInit=!0);else if("node-usb"===r)yield this.transport.init($ce1f303d0aa8ec51$var$NodeUsbLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter);else if("lowlevel"===r){if(!this.plugin)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured,"Lowlevel transport must have plugin");yield this.transport.init($ce1f303d0aa8ec51$var$LowLevelLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter,this.plugin)}else"desktop-web-ble"===r?yield this.transport.init($ce1f303d0aa8ec51$var$WebBleLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter):"webusb"===r||"desktop-webusb"===r?yield this.transport.init($ce1f303d0aa8ec51$var$WebUsbLogger):yield this.transport.init($ce1f303d0aa8ec51$var$HttpLogger);$ce1f303d0aa8ec51$var$Log$c.debug("Configuring transports"),yield this.transport.configure(JSON.stringify(this.defaultMessages)),$ce1f303d0aa8ec51$var$Log$c.debug("Configuring transports done")}catch(r){if($ce1f303d0aa8ec51$var$Log$c.debug("Initializing transports error: ",r),"ECONNABORTED"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError)}})}static reconfigure(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log$c.debug("Begin reconfiguring transports");let{messageVersion:i,messages:n}=$ce1f303d0aa8ec51$var$getSupportMessageVersion(r);if(this.currentMessages!==n&&n){$ce1f303d0aa8ec51$var$Log$c.debug(`Reconfiguring transports version:${i}`);try{yield this.transport.configure(JSON.stringify(n)),this.currentMessages=n,this.messageVersion=i}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportInvalidProtobuf,`Transport_InvalidProtobuf: ${r.message}`)}}})}static setTransport(r,i){let n=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");"react-native"===n?this.transport=new r({scanTimeout:3e3}):this.transport=new r,i&&(this.plugin=i,$ce1f303d0aa8ec51$var$Log$c.debug("set transport plugin: ",this.plugin)),$ce1f303d0aa8ec51$var$Log$c.debug("set transport: ",this.transport.name,this.transport.version,this.transport.configured)}static getTransport(){return this.transport}static getDefaultMessages(){return this.defaultMessages}static getCurrentMessages(){return this.currentMessages}static getMessageVersion(){return this.messageVersion}}$ce1f303d0aa8ec51$var$TransportManager.reactNativeInit=!1,$ce1f303d0aa8ec51$var$TransportManager.messageVersion="latest",$ce1f303d0aa8ec51$var$TransportManager.plugin=null;const $ce1f303d0aa8ec51$var$assertType=(r,i)=>{let n=Array.isArray(i)?i:i.split("|");if(!n.includes(r.type))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ResponseUnexpectTypeError,`assertType: Response of unexpected type: ${r.type}. Should be ${i}`)},$ce1f303d0aa8ec51$var$cancelDeviceInPrompt=(r,i=!0)=>{var n;let s=r.hasDeviceAcquire()?r.mainId:void 0;if(!s)return Promise.resolve({success:!1,error:$3FhS8.HardwareErrorCode.RuntimeError,payload:{message:"Device disconnected or acquired by someone else"}});let a=null===(n=r.commands)||void 0===n?void 0:n.transport;return i?null==a?void 0:a.call(s,"Cancel",{}).then(()=>({success:!0,error:null,payload:{message:"Cancel request sent"}})).catch(r=>({success:!1,error:r.errorCode,payload:{message:r.message}})):null==a?void 0:a.post(s,"Cancel",{}).then(()=>({success:!0,error:$3FhS8.HardwareErrorCode.RuntimeError,payload:{message:"Cancel request sent"}}))},$ce1f303d0aa8ec51$var$cancelDeviceWithInitialize=r=>{var i;let n=r.hasDeviceAcquire()?r.mainId:void 0;if(!n)return Promise.resolve({success:!1,error:$3FhS8.HardwareErrorCode.RuntimeError,payload:{message:"Device disconnected or acquired by someone else"}});let s=null===(i=r.commands)||void 0===i?void 0:i.transport;return null==s?void 0:s.call(n,"Initialize",{}).then(()=>({success:!0,error:null,payload:{message:"Cancel request sent"}})).catch(r=>({success:!1,error:r.errorCode,payload:{message:r.message}}))},$ce1f303d0aa8ec51$var$Log$b=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.DeviceCommands),$ce1f303d0aa8ec51$var$LogCore=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);class $ce1f303d0aa8ec51$var$DeviceCommands{constructor(r,i){this.device=r,this.mainId=i,this.transport=$ce1f303d0aa8ec51$var$TransportManager.getTransport(),this.disposed=!1,this.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("DeviceCommands",r.sdkInstanceId),$ce1f303d0aa8ec51$var$Log$b.debug(`[DeviceCommands] Created: ${this.instanceId}, device: ${this.device.instanceId}`)}dispose(r){var i,n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.disposed=!0,yield null===(n=(i=this.transport).cancel)||void 0===n?void 0:n.call(i)})}checkDisposed(){if(this.disposed)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"DeviceCommands already disposed")}cancelDeviceOnOneKeyDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{name:r}=this.transport;if("HttpTransport"!==r)return $ce1f303d0aa8ec51$var$cancelDeviceWithInitialize(this.device);try{yield this.device.acquire(),yield $ce1f303d0aa8ec51$var$cancelDeviceWithInitialize(this.device)}catch(r){}})}cancelDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{name:r}=this.transport;if("HttpTransport"!==r)return $ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1);try{yield this.device.acquire(),yield $ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1)}catch(r){}})}cancel(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.disposed&&(this.dispose(!0),this.callPromise))try{yield Promise.all([new Promise((r,i)=>setTimeout(()=>i(Error("cancel timeout")),1e4)),(yield this.callPromise)])}catch(r){this.callPromise=void 0}})}call(r,i={}){var n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log$b.debug("[DeviceCommands] [call] Sending",r);try{let n=this.transport.call(this.mainId,r,i);this.callPromise=n;let s=yield n;return"Failure"===s.type?$ce1f303d0aa8ec51$var$LogCore.debug("[DeviceCommands] [call] Received",s.type,s.message):$ce1f303d0aa8ec51$var$LogCore.debug("[DeviceCommands] [call] Received",s.type),s}catch(s){if($ce1f303d0aa8ec51$var$LogCore.debug("[DeviceCommands] [call] Received error",s),s.errorCode===$3FhS8.HardwareErrorCode.BleDeviceBondError)return{type:"BleDeviceBondError",message:{error:null==s?void 0:s.message}};let r=null===(n=null==s?void 0:s.response)||void 0===n?void 0:n.data,i=null==r?void 0:r.error;if(!i&&r&&"string"==typeof r)try{let n=JSON.parse(r);i=null==n?void 0:n.error}catch(r){}if(r&&$ce1f303d0aa8ec51$var$Log$b.debug("error response",r),"device disconnected during action"===i)return{type:"BridgeDeviceDisconnected",message:{error:i}};if(i&&-1!==i.indexOf("Request failed with status code"))return{type:"CallMethodError",message:{error:null!=r?r:""}};throw s}})}typedCall(r,i,n){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.disposed)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"typedCall: DeviceCommands already disposed");try{let i=["ButtonAck","PinMatrixAck","PassphraseAck","Cancel","BixinPinInputOnDevice"];!i.includes(r)&&n&&$ce1f303d0aa8ec51$var$Log$b.debug("[DeviceCommands] [typedCall] Sending payload",r,n)}catch(r){}let s=yield this._commonCall(r,n);try{$ce1f303d0aa8ec51$var$assertType(s,i)}catch(r){if($ce1f303d0aa8ec51$var$Log$b.debug("DeviceCommands typedcall error: ",r),r instanceof $3FhS8.HardwareError){if(r.errorCode===$3FhS8.HardwareErrorCode.ResponseUnexpectTypeError){if(r.message.indexOf("BridgeNetworkError")>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNetworkError);if(r.message.indexOf("BleDeviceBondError")>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleDeviceBondError);if(r.message.indexOf("BridgeDeviceDisconnected")>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeDeviceDisconnected);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ResponseUnexpectTypeError)}}else throw r}return s})}_commonCall(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=yield this.call(r,i);return this._filterCommonTypes(n,r)})}_filterCommonTypes(r,i){try{"react-native"===$ce1f303d0aa8ec51$var$DataManager.getSettings("env")?$ce1f303d0aa8ec51$var$Log$b.debug("_filterCommonTypes: ",JSON.stringify(r)):$ce1f303d0aa8ec51$var$Log$b.debug("_filterCommonTypes: ",r)}catch(r){}if(this.device.clearCancelableAction(),"Failure"===r.type){let{code:n,message:s}=r.message,a=null;if("Failure_FirmwareError"!==n||s||(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareError)),"Failure_ActionCancelled"===n&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ActionCancelled)),"Failure_PinInvalid"===n&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PinInvalid,s)),"Failure_PinCancelled"===n&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PinCancelled)),"Failure_DataError"===n&&("Please confirm the BlindSign enabled"===s&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlindSignDisabled)),"File already exists"===s&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FileAlreadyExists)),(null==s?void 0:s.includes("bytes overflow"))&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DataOverload)),null==s?void 0:s.includes("Too many inputs"))){let r=s.match(/\((.+?)\)/);a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TooManyInputs,void 0,{count:null==r?void 0:r[1]})}return("Failure_ProcessError"===n&&((null==s?void 0:s.includes("Bootloader file verify failed"))||(null==s?void 0:s.includes("verify failed"))?a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareVerificationFailed,s):(null==s?void 0:s.includes("Firmware downgrade not allowed"))&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareDowngradeNotAllowed,s))),"Failure_UnexpectedMessage"===n&&("PassphraseAck"===i?a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.UnexpectPassphrase):"Not in Signing mode"===s&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NotInSigningMode))),a)?Promise.reject(a):Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`${n||"Failure_UnknownCode"},${s||"no error message"}`))}if("Features"===r.type)return Promise.resolve($ce1f303d0aa8ec51$var$patchFeatures(r));if("ButtonRequest"===r.type){let i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(i)?this.device.setCancelableAction(()=>this.cancelDeviceOnOneKeyDevice()):this.device.setCancelableAction(()=>this.cancelDevice()),"ButtonRequest_PassphraseEntry"===r.message.code?this.device.emit($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE_ON_DEVICE,this.device):this.device.emit($ce1f303d0aa8ec51$var$DEVICE.BUTTON,this.device,r.message),this._commonCall("ButtonAck",{})}if(r.type,"PinMatrixRequest"===r.type)return this._promptPin(r.message.type).then(r=>"@@ONEKEY_INPUT_PIN_IN_DEVICE"===r?(this.device.setCancelableAction(()=>this.cancelDeviceOnOneKeyDevice()),this._commonCall("BixinPinInputOnDevice").finally(()=>{this.device.clearCancelableAction()})):this._commonCall("PinMatrixAck",{pin:r}),r=>Promise.reject(r));if("PassphraseRequest"===r.type){let i=r.message.exists_attach_pin_user;return this._promptPassphrase({existsAttachPinUser:i}).then(r=>{let{passphrase:n,passphraseOnDevice:s,attachPinOnDevice:a}=r;return a&&i?this._commonCall("PassphraseAck",{on_device_attach_pin:!0}):s?this._commonCall("PassphraseAck",{on_device:!0}):this._commonCall("PassphraseAck",{passphrase:n})})}return r.type,r.type,Promise.resolve(r)}_promptPin(r){return new Promise((i,n)=>{let s=r=>$ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1).then(r=>{let i=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled,`${$ce1f303d0aa8ec51$var$DEVICE.PIN} canceled`);if(r){let{payload:s}=r||{};n(i||Error(null==s?void 0:s.message))}else n(i)}).catch(r=>{n(r)}),a=this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.PIN);if($ce1f303d0aa8ec51$var$Log$b.debug(`[${this.instanceId}] _promptPin called`,{responseID:this.currentResponseID,deviceInstanceId:this.device.instanceId,listenerCount:a}),a>0)this.device.setCancelableAction(s),this.device.emit($ce1f303d0aa8ec51$var$DEVICE.PIN,this.device,r,(r,n)=>{this.device.clearCancelableAction(),r?s():i(n)});else{let r=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(this.device.instanceId),i={commandsInstanceId:this.instanceId,deviceInstanceId:this.device.instanceId,currentResponseID:this.currentResponseID,listenerCount:a,activeRequests:r.map($ce1f303d0aa8ec51$var$formatRequestContext)};$ce1f303d0aa8ec51$var$LogCore.error("[DeviceCommands] [call] PIN callback not configured, cancelling request",Object.assign({},i)),n($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`_promptPin: PIN callback not configured: ${JSON.stringify(i)}`))}})}_promptPassphrase(r){return new Promise((i,n)=>{let s=r=>$ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1).then(r=>{let i=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled,`${$ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE} canceled`);if(r){let{payload:s}=r||{};n(i||Error(null==s?void 0:s.message))}else n(i)}).catch(r=>{n(r)});this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE)>0?(this.device.setCancelableAction(s),this.device.emit($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,this.device,r,(r,n)=>{this.device.clearCancelableAction(),n?s():i(r)})):($ce1f303d0aa8ec51$var$LogCore.error("[DeviceCommands] [call] Passphrase callback not configured, cancelling request"),n($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"_promptPassphrase: Passphrase callback not configured")))})}}const $ce1f303d0aa8ec51$var$parseRunOptions=r=>(r||(r={}),r),$ce1f303d0aa8ec51$var$Log$a=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Device),$ce1f303d0aa8ec51$var$deviceSessionCache={};function $ce1f303d0aa8ec51$var$preloadSessionCache(r,i,n){let s=`${r}@${i}`;$ce1f303d0aa8ec51$var$deviceSessionCache[s]=n}class $ce1f303d0aa8ec51$var$Device extends $ce1f303d0aa8ec51$var$events.exports{constructor(r,i){super(),this.deviceConnector=null,this.deviceAcquired=!1,this.features=void 0,this.featuresNeedsReload=!1,this.externalState=[],this.unavailableCapabilities={},this.instance=0,this.internalState=[],this.needReloadDevice=!1,this.keepSession=!1,this.passphraseState=void 0,this.originalDescriptor=r,this.sdkInstanceId=i,this.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("Device",this.sdkInstanceId),this.createdAt=Date.now(),$ce1f303d0aa8ec51$var$Log$a.debug(`[Device] Created: ${this.instanceId}${this.sdkInstanceId?` for SDK: ${this.sdkInstanceId}`:""}`)}static fromDescriptor(r,i){let n=Object.assign({},r);return new $ce1f303d0aa8ec51$var$Device(n,i)}toMessageObject(){var r;if(this.isUnacquired()||!this.features)return null;let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=$ce1f303d0aa8ec51$var$getDeviceType(this.features),s=$ce1f303d0aa8ec51$var$getDeviceBleName(this.features),a=$ce1f303d0aa8ec51$var$getDeviceLabel(this.features);return{connectId:$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)?this.mainId||null:$ce1f303d0aa8ec51$var$getDeviceUUID(this.features),uuid:$ce1f303d0aa8ec51$var$getDeviceUUID(this.features),commType:this.originalDescriptor.commType,sdkInstanceId:this.sdkInstanceId,instanceId:this.instanceId,createdAt:this.createdAt,deviceType:n,deviceId:this.features.device_id||null,path:null===(r=this.originalDescriptor)||void 0===r?void 0:r.path,bleName:s,name:s||a||`OneKey ${null==n?void 0:n.toUpperCase()}`,label:a||"OneKey",mode:this.getMode(),features:this.features,firmwareVersion:this.getFirmwareVersion(),bleFirmwareVersion:this.getBLEFirmwareVersion(),unavailableCapabilities:this.unavailableCapabilities}}connect(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return new Promise((i,n)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)){try{yield this.acquire(),i(!0)}catch(r){n(r)}return}if(!this.mainId||!this.isUsedHere()&&this.originalDescriptor){try{yield this.acquire(),i(!0)}catch(r){n(r)}return}if(this.isUsedHere()){i(!0);return}i(!1)}))}acquire(){var r,i,n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a)?"id":"session";try{if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(a)){let n=yield null===(r=this.deviceConnector)||void 0===r?void 0:r.acquire(this.originalDescriptor.id);this.mainId=null!==(i=n.uuid)&&void 0!==i?i:"",$ce1f303d0aa8ec51$var$Log$a.debug("Expected uuid:",this.mainId)}else this.mainId=yield null===(n=this.deviceConnector)||void 0===n?void 0:n.acquire(this.originalDescriptor.path,this.originalDescriptor.session),$ce1f303d0aa8ec51$var$Log$a.debug("Expected session id:",this.mainId);this.deviceAcquired=!0,this.updateDescriptor({[o]:this.mainId}),this.commands&&(yield this.commands.dispose(!1)),this.commands=new $ce1f303d0aa8ec51$var$DeviceCommands(this,null!==(s=this.mainId)&&void 0!==s?s:"")}catch(r){if(this.runPromise)this.runPromise.reject(r);else throw r;this.runPromise=null}})}release(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if(this.isUsedHere()&&!this.keepSession&&this.mainId||this.mainId&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)){if(this.pendingCallbackPromise)try{$ce1f303d0aa8ec51$var$Log$a.debug("Waiting for callback tasks to complete before releasing device (in release method)"),yield this.pendingCallbackPromise.promise}catch(r){$ce1f303d0aa8ec51$var$Log$a.error("Error waiting for callback tasks in release method:",r)}if(this.commands&&(this.commands.dispose(!1),this.commands.callPromise))try{yield this.commands.callPromise}catch(r){this.commands.callPromise=void 0}try{yield null===(r=this.deviceConnector)||void 0===r?void 0:r.release(this.mainId,!1),this.updateDescriptor({session:null})}catch(r){$ce1f303d0aa8ec51$var$Log$a.error("[Device] release error: ",r)}finally{this.needReloadDevice=!0}}this.deviceAcquired=!1})}getCommands(){return this.commands}generateStateKey(r,i){return i?`${r}@${i}`:r}getInternalState(r){var i,n;$ce1f303d0aa8ec51$var$Log$a.debug("getInternalState session cache: ",$ce1f303d0aa8ec51$var$deviceSessionCache),$ce1f303d0aa8ec51$var$Log$a.debug("getInternalState session param: ",`device_id: ${r}`,`features.device_id: ${null===(i=this.features)||void 0===i?void 0:i.device_id}`,`passphraseState: ${this.passphraseState}`);let s=r||(null===(n=this.features)||void 0===n?void 0:n.device_id);if(!s||!this.passphraseState)return;let a=this.generateStateKey(s,this.passphraseState);return $ce1f303d0aa8ec51$var$deviceSessionCache[a]}updateInternalState(r,i,n,s=null,a=null){$ce1f303d0aa8ec51$var$Log$a.debug("updateInternalState session param: ",`device_id: ${n}`,`enablePassphrase: ${r}`,`passphraseState: ${i}`,`sessionId: ${s}`,`featuresSessionId: ${a}`),r&&(s?$ce1f303d0aa8ec51$var$deviceSessionCache[this.generateStateKey(n,i)]=s:a&&($ce1f303d0aa8ec51$var$deviceSessionCache[this.generateStateKey(n,i)]=a));let o=`${n}`;$ce1f303d0aa8ec51$var$deviceSessionCache[o]&&delete $ce1f303d0aa8ec51$var$deviceSessionCache[o],$ce1f303d0aa8ec51$var$Log$a.debug("updateInternalState session cache: ",$ce1f303d0aa8ec51$var$deviceSessionCache)}setInternalState(r,i){var n,s;if($ce1f303d0aa8ec51$var$Log$a.debug("setInternalState session param: ",`state: ${r}`,`initSession: ${i}`,`device_id: ${null===(n=this.features)||void 0===n?void 0:n.device_id}`,`passphraseState: ${this.passphraseState}`),!this.features||!this.passphraseState&&!i)return;let a=null===(s=this.features)||void 0===s?void 0:s.device_id;if(!a)return;let o=this.generateStateKey(a,this.passphraseState);r&&($ce1f303d0aa8ec51$var$deviceSessionCache[o]=r),$ce1f303d0aa8ec51$var$Log$a.debug("setInternalState done session cache: ",$ce1f303d0aa8ec51$var$deviceSessionCache)}clearInternalState(r){var i;$ce1f303d0aa8ec51$var$Log$a.debug("clearInternalState param: ",r);let n=r||(null===(i=this.features)||void 0===i?void 0:i.device_id);if(!n)return;let s=`${n}`;if(delete $ce1f303d0aa8ec51$var$deviceSessionCache[s],this.passphraseState){let r=this.generateStateKey(n,this.passphraseState);delete $ce1f303d0aa8ec51$var$deviceSessionCache[r]}}initialize(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.passphraseState=null==r?void 0:r.passphraseState,(null==r?void 0:r.initSession)&&this.clearInternalState(null==r?void 0:r.deviceId);let i=this.getInternalState(null==r?void 0:r.deviceId),n={};i&&(n.session_id=i),(null==r?void 0:r.deriveCardano)&&(n.derive_cardano=!0),n.passphrase_state=null==r?void 0:r.passphraseState,n.is_contains_attach=!0,$ce1f303d0aa8ec51$var$Log$a.debug("Initialize device begin:",{deviceId:null==r?void 0:r.deviceId,passphraseState:null==r?void 0:r.passphraseState,initSession:null==r?void 0:r.initSession,InitializePayload:n});try{let{message:i}=yield Promise.race([this.commands.typedCall("Initialize","Features",n),new Promise((r,i)=>{setTimeout(()=>{i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed))},25e3)})]);$ce1f303d0aa8ec51$var$Log$a.debug("Initialize device end: ",i),this._updateFeatures(i,null==r?void 0:r.initSession),yield $ce1f303d0aa8ec51$var$TransportManager.reconfigure(this.features)}catch(r){throw $ce1f303d0aa8ec51$var$Log$a.error("Initialization failed:",r),r}})}getFeatures(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{message:r}=yield this.commands.typedCall("GetFeatures","Features",{});this._updateFeatures(r)})}_updateFeatures(r,i){var n;this.features&&this.features.session_id&&!r.session_id&&(r.session_id=this.features.session_id),this.features&&this.features.device_id&&r.session_id&&this.setInternalState(r.session_id,i),r.unlocked=null===(n=r.unlocked)||void 0===n||n,r=$ce1f303d0aa8ec51$var$fixFeaturesFirmwareVersion(r),this.features=r,this.featuresNeedsReload=!1,this.emit($ce1f303d0aa8ec51$var$DEVICE.FEATURES,this,r)}updateDescriptor(r,i=!1){let n=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(n))return;let s=this.originalDescriptor.session,a=r.session;s!==a&&(this.originalDescriptor.session=a),i&&(this.originalDescriptor=r)}updateFromCache(r){this.mainId=r.mainId,this.commands=r.commands,this.updateDescriptor(r.originalDescriptor,!0),r.features&&this._updateFeatures(r.features)}run(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return this.runPromise&&(yield this.interruptionFromOutside(),$ce1f303d0aa8ec51$var$Log$a.debug("[Device] run error:","Device is running, but will cancel previous operate")),i=$ce1f303d0aa8ec51$var$parseRunOptions(i),this.runPromise=$3FhS8.createDeferred(this._runInner.bind(this,r,i)),this.runPromise.promise})}_runInner(r,i){var n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.isUsedHere()||this.commands.disposed){let n=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if("react-native"!==n){try{yield this.acquire()}catch(r){return this.runPromise=null,Promise.reject(r)}try{r&&(yield this.initialize(i))}catch(r){if(this.runPromise=null,r instanceof $3FhS8.HardwareError)return Promise.reject(r);return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed,`Initialize failed: ${r.message}, code: ${r.code}`))}}else"react-native"===n&&this.commands&&(this.commands.disposed=!1)}if(i.keepSession&&(this.keepSession=!0),r)try{yield r()}catch(r){this.runPromise&&this.runPromise.reject(r),r instanceof $3FhS8.HardwareError&&$3FhS8.ERROR_CODES_REQUIRE_RELEASE.includes(r.errorCode)&&($3FhS8.ERROR_CODES_REQUIRE_DISCONNECT.includes(r.errorCode)&&(yield null===(n=this.deviceConnector)||void 0===n?void 0:n.disconnect(this.mainId)),yield this.release(),$ce1f303d0aa8ec51$var$Log$a.debug(`error code ${r.errorCode} release device, mainId: ${this.mainId}`)),this.runPromise=null;return}(this.keepSession||"boolean"==typeof i.keepSession)&&!1!==i.keepSession||(this.keepSession=!1,yield this.release(),$ce1f303d0aa8ec51$var$Log$a.debug("release device, mainId: ",this.mainId)),this.runPromise&&this.runPromise.resolve(),this.runPromise=null})}interruptionFromOutside(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.commands&&(yield this.commands.dispose(!1)),this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInterruptedFromOutside))})}interruptionFromUser(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInterruptedFromUser);yield null===(r=this.cancelableAction)||void 0===r?void 0:r.call(this,n),yield null===(i=this.commands)||void 0===i?void 0:i.cancel(),this.runPromise&&(this.runPromise.reject(n),this.runPromise=null)})}setCancelableAction(r){this.cancelableAction=i=>r(i).catch(r=>{$ce1f303d0aa8ec51$var$Log$a.debug("cancelableAction error",r)}).finally(()=>{this.clearCancelableAction()})}clearCancelableAction(){this.cancelableAction=void 0}getMode(){var r,i,n;return(null===(r=this.features)||void 0===r?void 0:r.bootloader_mode)?$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.bootloader:(null===(i=this.features)||void 0===i?void 0:i.initialized)?(null===(n=this.features)||void 0===n?void 0:n.no_backup)?$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.backupMode:$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.normal:$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.notInitialized}getFirmwareVersion(){return this.features?$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.features):null}getBLEFirmwareVersion(){return this.features?$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(this.features):null}isUsed(){return"string"==typeof this.originalDescriptor.session}hasDeviceAcquire(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return $ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)?this.deviceAcquired:this.isUsed()&&this.deviceAcquired}isUsedHere(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return!$ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)&&this.isUsed()&&this.originalDescriptor.session===this.mainId}isUsedElsewhere(){return this.isUsed()&&!this.isUsedHere()}isBootloader(){return this.features&&!!this.features.bootloader_mode}isInitialized(){return this.features&&!!this.features.initialized}isSeedless(){return this.features&&!!this.features.no_backup}isUnacquired(){return void 0===this.features}hasUnexpectedMode(r,i){if(this.features){if(this.isBootloader()&&!r.includes($ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER))return $ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER;if(!this.isInitialized()&&!r.includes($ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE))return $ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE;if(this.isSeedless()&&!r.includes($ce1f303d0aa8ec51$var$UI_REQUEST.SEEDLESS))return $ce1f303d0aa8ec51$var$UI_REQUEST.SEEDLESS;if(!this.isBootloader()&&i.includes($ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER))return $ce1f303d0aa8ec51$var$UI_REQUEST.NOT_IN_BOOTLOADER}return null}hasUsePassphrase(){var r;let i=$ce1f303d0aa8ec51$var$getDeviceType(this.features)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(this.features)===$3FhS8.EDeviceType.Pro,n=i&&(null===(r=this.features)||void 0===r?void 0:r.unlocked)===!1;return this.features&&(!!this.features.passphrase_protection||n)}checkDeviceId(r){return!!this.features&&this.features.device_id===r}lockDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.commands.typedCall("LockDevice","Success",{});return r.message})}supportUnlockVersionRange(){return{pro:{min:"4.15.0"}}}unlockDevice(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=null===(r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.features))||void 0===r?void 0:r.join("."),n=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.features,r=>this.supportUnlockVersionRange()[r]),s=$ce1f303d0aa8ec51$var$existCapability(this.features,$5xch2.Enum_Capability.Capability_AttachToPin),a=s||n&&$ce1f303d0aa8ec51$var$semver__default.default.gte(i,n.min);if(a){let r=yield this.commands.typedCall("UnLockDevice","UnLockDeviceResponse");if(this.features)return this.features.unlocked=null==r.message.unlocked?null:r.message.unlocked,this.features.unlocked_attach_pin=null==r.message.unlocked_attach_pin?void 0:r.message.unlocked_attach_pin,this.features.passphrase_protection=null==r.message.passphrase_protection?null:r.message.passphrase_protection,Promise.resolve(this.features);let i=yield this.commands.typedCall("GetFeatures","Features");return this._updateFeatures(i.message),Promise.resolve(i.message)}let{type:o}=yield this.commands.typedCall("GetAddress","Address",{address_n:[$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$toHardened(1),$ce1f303d0aa8ec51$var$toHardened(0),0,0],coin_name:"Testnet",script_type:"SPENDADDRESS",show_display:!1});if("CallMethodError"===o)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"unlock device error");let d=yield this.commands.typedCall("GetFeatures","Features");return this._updateFeatures(d.message),Promise.resolve(d.message)})}checkPassphraseStateSafety(r,i,n){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.features)return!1;let{passphraseState:s,unlockedAttachPin:a}=yield $ce1f303d0aa8ec51$var$getPassphraseStateWithRefreshDeviceInfo(this,{expectPassphraseState:r,onlyMainPin:i});if(n)return!0;let o=a&&i,d=a&&r&&r!==s;if($ce1f303d0aa8ec51$var$Log$a.debug("Check passphrase state safety: ",{passphraseState:r,newPassphraseState:s,unlockedAttachPin:a,useEmptyPassphrase:i}),o||d){try{yield this.lockDevice()}catch(r){}return this.clearInternalState(),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceCheckUnlockTypeError))}return!r||r===s||(this.clearInternalState(),!1)})}}class $ce1f303d0aa8ec51$var$DeviceList extends $ce1f303d0aa8ec51$var$events.exports{constructor(){super(...arguments),this.devices={}}getDeviceLists(r,i){var n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let a=yield null===(n=this.connector)||void 0===n?void 0:n.enumerate(),o=null!==(s=null==a?void 0:a.descriptors)&&void 0!==s?s:[];this.devices={};let{deviceList:d,devices:f}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(o,r,i);return this.devices=f,d})}allDevices(){return Object.keys(this.devices).map(r=>this.devices[r])}getDevice(r){return this.devices[r]}}const $ce1f303d0aa8ec51$var$getFirmwareReleaseInfo=(r,i)=>{let n=$ce1f303d0aa8ec51$var$DataManager.getFirmwareStatus(r,i),s=$ce1f303d0aa8ec51$var$DataManager.getFirmwareChangelog(r,i),a=$ce1f303d0aa8ec51$var$DataManager.getFirmwareLatestRelease(r,i),o=!!r.bootloader_mode;return{status:n,changelog:s,release:a,bootloaderMode:o}},$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo=r=>{let i=$ce1f303d0aa8ec51$var$DataManager.getBLEFirmwareStatus(r),n=$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareChangelog(r),s=$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareLatestRelease(r),a=!!r.bootloader_mode;return{status:i,changelog:n,release:s,bootloaderMode:a}},$ce1f303d0aa8ec51$var$getBootloaderReleaseInfo=({features:r,willUpdateFirmwareVersion:i,firmwareType:n})=>{let s=$ce1f303d0aa8ec51$var$DataManager.getFirmwareLatestRelease(r,n),a=[null==s?void 0:s.bootloaderChangelog].filter(r=>null!=r&&"object"==typeof r&&Object.prototype.hasOwnProperty.call(r,"zh-CN")&&Object.prototype.hasOwnProperty.call(r,"en-US")),o=!!r.bootloader_mode,d=!1,f=$ce1f303d0aa8ec51$var$getDeviceType(r);return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(f)?d=!!$ce1f303d0aa8ec51$var$checkNeedUpdateBootForClassicAndMini({features:r,willUpdateFirmware:i,firmwareType:n}):$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(f)&&(d=$ce1f303d0aa8ec51$var$checkNeedUpdateBootForTouch(r,n)),{status:d?"outdated":"valid",changelog:a,release:s,bootloaderMode:o,shouldUpdate:d}},$ce1f303d0aa8ec51$var$Log$9=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$BaseMethod{constructor(r){this.shouldEnsureConnected=!0,this.checkDeviceId=!1,this.useDevicePassphraseState=!0,this.skipForceUpdateCheck=!1,this.strictCheckDeviceSupport=!1,this.postPreviousAddressMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.PREVIOUS_ADDRESS_RESULT,{device:this.device.toMessageObject(),data:r}))};let{payload:i}=r;this.name=i.method,this.payload=i,this.responseID=r.id||0,this.connectId=i.connectId||"",this.deviceId=i.deviceId||"",this.useDevice=!0,this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[]}getVersionRange(){return{}}setContext(r){this.sdkInstanceId=r.sdkInstanceId,this.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("Method",this.sdkInstanceId),$ce1f303d0aa8ec51$var$Log$9.debug(`[BaseMethod] Created: ${this.instanceId}, method: ${this.name}, SDK: ${this.sdkInstanceId}`)}setDevice(r){var i,n;this.device=r,!r.sdkInstanceId&&this.sdkInstanceId&&(r.sdkInstanceId=this.sdkInstanceId,r.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("Device",this.sdkInstanceId)),this.requestContext&&(this.requestContext.deviceInstanceId=r.instanceId,this.requestContext.commandsInstanceId=null===(i=r.commands)||void 0===i?void 0:i.instanceId,this.requestContext.sdkInstanceId=this.sdkInstanceId),r.commands&&this.sdkInstanceId&&(r.commands.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("DeviceCommands",this.sdkInstanceId)),r.commands&&(r.commands.currentResponseID=this.responseID),$ce1f303d0aa8ec51$var$Log$9.debug(`[${this.instanceId}] setDevice: ${r.instanceId}, commands: ${null===(n=r.commands)||void 0===n?void 0:n.instanceId}`)}checkFirmwareRelease(){if(!this.device||!this.device.features)return;let r=$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features),i=$ce1f303d0aa8ec51$var$getFirmwareReleaseInfo(this.device.features,r);this.postMessage($ce1f303d0aa8ec51$var$createFirmwareMessage($ce1f303d0aa8ec51$var$FIRMWARE.RELEASE_INFO,Object.assign(Object.assign({},i),{device:this.device.toMessageObject()})));let n=$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo(this.device.features);this.postMessage($ce1f303d0aa8ec51$var$createFirmwareMessage($ce1f303d0aa8ec51$var$FIRMWARE.BLE_RELEASE_INFO,Object.assign(Object.assign({},n),{device:this.device.toMessageObject()})))}checkDeviceSupportFeature(){if(!this.device||!this.device.features)return;let r=$ce1f303d0aa8ec51$var$supportInputPinOnSoftware(this.device.features),i=$ce1f303d0aa8ec51$var$supportModifyHomescreen(this.device.features);this.postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.SUPPORT_FEATURES,{inputPinOnSoftware:r,modifyHomescreen:i,device:this.device.toMessageObject()}))}checkFeatureVersionLimit(r,i,n){var s;if(!r())return;let a=null===(s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features))||void 0===s?void 0:s.join("."),o=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.device.features,r=>i()[r]);if(!o){if(null==n?void 0:n.strictCheckDeviceSupport)throw $3FhS8.createDeviceNotSupportMethodError(this.name,$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features));return}if($ce1f303d0aa8ec51$var$semver__default.default.valid(a)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(a,o.min))throw $3FhS8.createNeedUpgradeFirmwareHardwareError({currentVersion:a,requireVersion:o.min,methodName:this.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features)})}checkSafetyLevelOnTestNet(){var r,i,n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let s=!1;"evmSignTransaction"===this.name&&[3,4,5,420,11155111].includes(Number(null===(i=null===(r=this.payload)||void 0===r?void 0:r.transaction)||void 0===i?void 0:i.chainId))&&(s=!0),s&&(null===(n=this.device.features)||void 0===n?void 0:n.safety_checks)==="Strict"&&($ce1f303d0aa8ec51$var$Log$9.debug("will change safety_checks level"),yield this.device.commands.typedCall("ApplySettings","Success",{safety_checks:"PromptTemporarily"}))})}dispose(){}}class $ce1f303d0aa8ec51$var$TestInitializeDeviceDuration extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=Date.now();yield this.device.commands.typedCall("Initialize","Features");let i=Date.now(),n=i-r;return Promise.resolve(n)})}}class $ce1f303d0aa8ec51$var$SearchDevices extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i,n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){yield $ce1f303d0aa8ec51$var$TransportManager.configure();let a=yield null===(r=this.connector)||void 0===r?void 0:r.enumerate(),o=null!==(i=null==a?void 0:a.descriptors)&&void 0!==i?i:[],d=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(d)){let r=[],i=new Set;for(let a of o){let o=null===(n=a.id)||void 0===n?void 0:n.toLowerCase();i.has(o)||(i.add(o),r.push(Object.assign(Object.assign({},a),{connectId:a.id,deviceType:$ce1f303d0aa8ec51$var$getDeviceTypeByBleName(null!==(s=a.name)&&void 0!==s?s:"")})))}return r}let{deviceList:f}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(o);return f.map(r=>r.toMessageObject())})}}class $ce1f303d0aa8ec51$var$GetFeatures extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;return(null===(r=this.payload)||void 0===r?void 0:r.detectBootloaderDevice)&&(null===(i=this.device.features)||void 0===i?void 0:i.bootloader_mode)?Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceDetectInBootloaderMode)):Promise.resolve(this.device.features)}}class $ce1f303d0aa8ec51$var$GetOnekeyFeatures extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{message:r}=yield this.device.commands.typedCall("OnekeyGetFeatures","OnekeyFeatures");return r.onekey_firmware_version&&!$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_firmware_version)&&(r.onekey_firmware_version=$ce1f303d0aa8ec51$var$fixVersion(r.onekey_firmware_version)),Promise.resolve(r)})}}class $ce1f303d0aa8ec51$var$GetPassphraseState extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed));let{passphraseState:r}=yield $ce1f303d0aa8ec51$var$getPassphraseStateWithRefreshDeviceInfo(this.device),{features:i}=this.device;return i&&!0===i.passphrase_protection?Promise.resolve(r):Promise.resolve(void 0)})}}class $ce1f303d0aa8ec51$var$GetLogs extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}serializeLog({level:r,prefix:i,message:n,timestamp:s}){let a=new Date(s).toISOString(),o=n.map(r=>"object"==typeof r?JSON.stringify(r):String(r)).join(" ");return`[${a}] ${r.toUpperCase()} ${i}: ${o}`}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=$ce1f303d0aa8ec51$var$getLog().map(r=>this.serializeLog(r));return Promise.resolve(r)})}}class $ce1f303d0aa8ec51$var$CheckFirmwareRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r;let i=this.payload;if(this.device.features){let n=$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features),s=null!==(r=i.firmwareType)&&void 0!==r?r:n,a=$ce1f303d0aa8ec51$var$getFirmwareReleaseInfo(this.device.features,s);return Promise.resolve(a)}return Promise.resolve(null)}}class $ce1f303d0aa8ec51$var$CheckBLEFirmwareRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){if(this.device.features){let r=$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo(this.device.features);return Promise.resolve(r)}return Promise.resolve(null)}}class $ce1f303d0aa8ec51$var$CheckBridgeStatus extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{$ce1f303d0aa8ec51$var$axios__default.default.request({url:"http://localhost:21320",method:"POST",withCredentials:!1,timeout:3e3}).then(()=>r(!0)).catch(n=>{"ECONNABORTED"===n.code?i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError)):r(!1)})})})}}const $ce1f303d0aa8ec51$var$REQUIRED_BRIDGE_VERSION="2.2.0",$ce1f303d0aa8ec51$var$TOUCH_NEED_UPDATE_BRIDGE_VERSION="4.3.0",$ce1f303d0aa8ec51$var$CLASSIC_MINI_NEED_UPDATE_BRIDGE_VERSION="3.1.0";function $ce1f303d0aa8ec51$var$getBridgeReleaseInfo({deviceType:r,currentFirmwareVersion:i,willUpdateFirmwareVersion:n}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let{data:s}=yield $ce1f303d0aa8ec51$var$axios__default.default.request({url:"http://localhost:21320",method:"POST",withCredentials:!1,timeout:3e3}),{version:a="0.0.0"}=s,o=$ce1f303d0aa8ec51$var$semver__default.default.lt(a,$ce1f303d0aa8ec51$var$REQUIRED_BRIDGE_VERSION),d=!1;$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(r)&&(n&&$ce1f303d0aa8ec51$var$semver__default.default.gte(n,$ce1f303d0aa8ec51$var$TOUCH_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0),$ce1f303d0aa8ec51$var$semver__default.default.gte(i,$ce1f303d0aa8ec51$var$TOUCH_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0)),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(r)&&(n&&$ce1f303d0aa8ec51$var$semver__default.default.gte(n,$ce1f303d0aa8ec51$var$CLASSIC_MINI_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0),$ce1f303d0aa8ec51$var$semver__default.default.gte(i,$ce1f303d0aa8ec51$var$CLASSIC_MINI_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0));let f=$ce1f303d0aa8ec51$var$DataManager.getBridgeChangelog();return{shouldUpdate:d,status:d?"outdated":"valid",releaseVersion:$ce1f303d0aa8ec51$var$REQUIRED_BRIDGE_VERSION,changelog:f}}catch(r){if("ECONNABORTED"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNotInstalled)}})}class $ce1f303d0aa8ec51$var$CheckBridgeRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)return null;let{willUpdateFirmwareVersion:r}=this.payload,{features:i}=this.device,n=$ce1f303d0aa8ec51$var$getDeviceType(i),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(i).join(".");return $ce1f303d0aa8ec51$var$getBridgeReleaseInfo({deviceType:n,currentFirmwareVersion:s,willUpdateFirmwareVersion:r})})}}class $ce1f303d0aa8ec51$var$CheckBootloaderRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)return null;let{features:i}=this.device,n=this.payload,s=$ce1f303d0aa8ec51$var$getFirmwareType(i),a=null!==(r=n.firmwareType)&&void 0!==r?r:s,o=$ce1f303d0aa8ec51$var$getBootloaderReleaseInfo({features:i,willUpdateFirmwareVersion:n.willUpdateFirmwareVersion,firmwareType:a});return Promise.resolve(o)})}}class $ce1f303d0aa8ec51$var$CheckAllFirmwareRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{features:n}=this.device,{checkBridgeRelease:s,firmwareType:a}=this.payload;if(!n)return Promise.resolve(null);let o=$ce1f303d0aa8ec51$var$getFirmwareType(n),d=null!=a?a:o,f=$ce1f303d0aa8ec51$var$getFirmwareReleaseInfo(n,d),l=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(n).join("."),u=null===(i=null===(r=f.release)||void 0===r?void 0:r.version)||void 0===i?void 0:i.join("."),c=$ce1f303d0aa8ec51$var$getDeviceType(n),p=null;s&&("required"===f.status||"outdated"===f.status)&&(p=yield $ce1f303d0aa8ec51$var$getBridgeReleaseInfo({deviceType:c,currentFirmwareVersion:l,willUpdateFirmwareVersion:u}));let h=$ce1f303d0aa8ec51$var$getBootloaderReleaseInfo({features:n,willUpdateFirmwareVersion:u,firmwareType:d}),g=$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo(n);return{firmware:f,bootloader:h,ble:g,bridge:p?{shouldUpdate:p.shouldUpdate,status:p.shouldUpdate?"outdated":"valid",changelog:p.changelog,release:p.releaseVersion}:void 0,features:n}})}}class $ce1f303d0aa8ec51$var$CheckFirmwareTypeAvailable extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;let n=this.payload,{deviceType:s,firmwareType:a}=n;if(s===$3FhS8.EDeviceType.Unknown)return Promise.resolve(void 0);let o=$ce1f303d0aa8ec51$var$getLatestFirmwareField(a),d=null!==(i=null===(r=$ce1f303d0aa8ec51$var$DataManager.deviceMap[s])||void 0===r?void 0:r[o])&&void 0!==i?i:[],f=$ce1f303d0aa8ec51$var$findLatestRelease(d);return Promise.resolve(f)}}class $ce1f303d0aa8ec51$var$DeviceBackup extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("BackupDevice","Success");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$hasHexPrefix=r=>"0x"===r.slice(0,2).toLowerCase(),$ce1f303d0aa8ec51$var$stripHexPrefix=r=>$ce1f303d0aa8ec51$var$hasHexPrefix(r)?r.slice(2):r,$ce1f303d0aa8ec51$var$addHexPrefix=r=>$ce1f303d0aa8ec51$var$hasHexPrefix(r)?r:`0x${r}`,$ce1f303d0aa8ec51$var$isHexString=(r,i)=>"string"==typeof r&&!!r.match(/^(0x|0X)?[0-9A-Fa-f]*$/)&&(!i||r.length===2+2*i),$ce1f303d0aa8ec51$var$stripHexStartZeroes=r=>{for(;/^00/.test(r);)r=r.slice(2);return r},$ce1f303d0aa8ec51$var$modifyValues=(r,i)=>Object.fromEntries(Object.entries(r).map(([r,n])=>[r,i(n,r)])),$ce1f303d0aa8ec51$var$formatAnyHex=r=>{if("string"==typeof r){let i=$ce1f303d0aa8ec51$var$stripHexPrefix(r);return i.length%2!=0&&(i=`0${i}`),i}return Array.isArray(r)?r.map($ce1f303d0aa8ec51$var$formatAnyHex):"object"==typeof r?$ce1f303d0aa8ec51$var$modifyValues(r,r=>$ce1f303d0aa8ec51$var$formatAnyHex(r)):r},$ce1f303d0aa8ec51$var$hexes=Array.from({length:256},(r,i)=>i.toString(16).padStart(2,"0"));function $ce1f303d0aa8ec51$var$bytesToHex(r){if(!(r instanceof Uint8Array))throw Error("Uint8Array expected");let i="";for(let n=0;n$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,r),$ce1f303d0aa8ec51$var$invalidResponse=r=>$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,r),$ce1f303d0aa8ec51$var$validateParams=(r,i)=>{i.forEach(i=>{let n=Object.prototype.hasOwnProperty.call(r,i.name);if(!n&&i.required)throw $ce1f303d0aa8ec51$var$invalidParameter(`Missing required parameter: ${i.name}`);let s=r[i.name];if(s&&i.type)switch(i.type){case"array":if(Array.isArray(s)){if(!i.allowEmpty&&s.length<1)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter "${i.name}" is empty.`)}else throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`);break;case"uint":if("string"!=typeof s&&"number"!=typeof s)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] has invalid type. "string|number" expected.`);if("number"==typeof s&&!Number.isSafeInteger(s)||!/^(?:[1-9]\d*|\d)$/.test(s.toString().replace(/^-/,i.allowNegative?"":"-")))throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] has invalid value "${s}". Integer representation expected.`);break;case"bigNumber":if("string"!=typeof s)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [string].`);try{let r=new $ce1f303d0aa8ec51$var$BigNumber__default.default(s);if(r.toFixed(0)!==s)throw Error("")}catch(r){throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`)}break;case"buffer":{if(null==s)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [buffer].`);let r=void 0!==$ce1f303d0aa8ec51$require$Buffer&&"function"==typeof $ce1f303d0aa8ec51$require$Buffer.isBuffer&&$ce1f303d0aa8ec51$require$Buffer.isBuffer(s),n=s.constructor&&"function"==typeof s.constructor.isBuffer&&s.constructor.isBuffer(s),a="undefined"!=typeof ArrayBuffer&&s instanceof ArrayBuffer,o="undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(s);if(!r&&!n&&!a&&!o)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [buffer].`);break}case"hexString":if("string"!=typeof s||!$ce1f303d0aa8ec51$var$isHexString($ce1f303d0aa8ec51$var$addHexPrefix(s)))throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`);break;default:if(typeof s!==i.type)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`)}})};function $ce1f303d0aa8ec51$var$validateResult(r,i,n){if(Array.isArray(r)){if((null==n?void 0:n.expectedLength)!==null&&r.length!==(null==n?void 0:n.expectedLength))throw $ce1f303d0aa8ec51$var$invalidResponse(`Expected array length of ${null==n?void 0:n.expectedLength}, but got ${r.length}`);r.forEach((r,n)=>{i.forEach(i=>{if(null==r[i])throw $ce1f303d0aa8ec51$var$invalidResponse(`Field '${i}' in array item at index ${n} is null`)})})}else if("object"==typeof r&&null!==r)i.forEach(i=>{if(null==r[i])throw $ce1f303d0aa8ec51$var$invalidResponse(`Field '${i}' in object is null`)});else throw $ce1f303d0aa8ec51$var$invalidResponse("Result is neither an array nor a valid object")}class $ce1f303d0aa8ec51$var$DeviceChangePin extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"remove",type:"boolean"}]),this.params={remove:this.payload.remove}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ChangePin","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceFlags extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"flags",type:"number"}]),this.params={flags:this.payload.flags}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ApplyFlags","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceRebootToBootloader extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}getVersionRange(){return{classic:{min:"2.1.11"},mini:{min:"2.1.11"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("RebootToBootloader","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceRebootToBoardloader extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}getVersionRange(){return{classic:{min:"2.1.11"},mini:{min:"2.1.11"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("BixinOutMessageSE","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceRecovery extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"wordCount",type:"number"},{name:"passphraseProtection",type:"boolean"},{name:"pinProtection",type:"boolean"},{name:"language",type:"string"},{name:"label",type:"string"},{name:"enforceWordlist",type:"boolean"},{name:"type",type:"object"},{name:"u2fCounter",type:"number"},{name:"dryRun",type:"boolean"}]),this.params={word_count:this.payload.wordCount,passphrase_protection:this.payload.passphraseProtection,pin_protection:this.payload.pinProtection,language:this.payload.language,label:this.payload.label,enforce_wordlist:this.payload.enforceWordlist,type:this.payload.type,u2f_counter:this.payload.u2fCounter||Math.floor(Date.now()/1e3),dry_run:this.payload.dryRun}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("RecoveryDevice","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceReset extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"displayRandom",type:"boolean"},{name:"strength",type:"number"},{name:"passphraseProtection",type:"boolean"},{name:"pinProtection",type:"boolean"},{name:"language",type:"string"},{name:"label",type:"string"},{name:"u2fCounter",type:"number"},{name:"skipBackup",type:"boolean"},{name:"noBackup",type:"boolean"},{name:"backupType"}]),this.params={display_random:this.payload.displayRandom,strength:this.payload.strength||256,passphrase_protection:this.payload.passphraseProtection,pin_protection:this.payload.pinProtection,language:this.payload.language,label:this.payload.label,u2f_counter:this.payload.u2fCounter||Math.floor(Date.now()/1e3),skip_backup:this.payload.skipBackup,no_backup:this.payload.noBackup,backup_type:this.payload.backupType}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ResetDevice","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceSettings extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"language",type:"string"},{name:"label",type:"string"},{name:"usePassphrase",type:"boolean"},{name:"homescreen",type:"string"},{name:"passphraseSource",type:"number"},{name:"autoLockDelayMs",type:"number"},{name:"displayRotation",type:"number"},{name:"passphraseAlwaysOnDevice",type:"boolean"},{name:"safetyChecks",type:"number"},{name:"experimentalFeatures",type:"boolean"},{name:"autoShutdownDelayMs",type:"number"},{name:"changeBrightness",type:"boolean"},{name:"hapticFeedback",type:"boolean"}]),this.params=Object.assign(Object.assign({language:this.payload.language,label:this.payload.label,use_passphrase:this.payload.usePassphrase,homescreen:this.payload.homescreen,_passphrase_source:this.payload.passphraseSource,auto_lock_delay_ms:this.payload.autoLockDelayMs,display_rotation:this.payload.displayRotation,passphrase_always_on_device:this.payload.passphraseAlwaysOnDevice,safety_checks:this.payload.safetyChecks,experimental_features:this.payload.experimentalFeatures,auto_shutdown_delay_ms:this.payload.autoShutdownDelayMs},this.payload.changeBrightness?{change_brightness:this.payload.changeBrightness}:void 0),{haptic_feedback:this.payload.hapticFeedback})}getVersionRange(){return this.payload.usePassphrase?{model_mini:{min:"2.4.0"}}:{}}run(){var r,i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.device.commands.typedCall("ApplySettings","Success",Object.assign({},this.params));return r.message}catch(o){if(null===(r=o.message)||void 0===r?void 0:r.toLowerCase().includes("no setting provided"))return Promise.reject($3FhS8.TypedError($3FhS8.HardwareErrorCode.DeviceSettingsNotProvided,o.message));if(null===(i=o.message)||void 0===i?void 0:i.includes("all support ISO_639-1 language keys include")){let r=null===(a=null===(s=null===(n=o.message)||void 0===n?void 0:n.replace("all support ISO_639-1 language keys include",""))||void 0===s?void 0:s.trim())||void 0===a?void 0:a.split(" "),i=r.reduce((r,i)=>{let n=null==$ce1f303d0aa8ec51$var$LANGUAGE_LABELS?void 0:$ce1f303d0aa8ec51$var$LANGUAGE_LABELS[i];return n&&r.push(n),r},[]);return Promise.reject($3FhS8.TypedError($3FhS8.HardwareErrorCode.DeviceSettingsLanguageNotSupport,o.message,{languages:i.join(", ")}))}throw o}})}}class $ce1f303d0aa8ec51$var$DeviceUpdateReboot extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("DeviceBackToBoot","Success");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$safeThrowError=r=>{var i;if(r instanceof $3FhS8.HardwareError)throw r;if("ERR_NETWORK"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNotInstalled);if("ECONNABORTED"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError);if("ERR_BAD_REQUEST"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNetworkError);{let n=null!==(i=null==r?void 0:r.message)&&void 0!==i?i:String(r),s=(null==r?void 0:r.name)?`${r.name}: `:"";throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.UnknownError,`${s}${n}`)}};class $ce1f303d0aa8ec51$var$DeviceUploadResource extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.paramsData={data:new Uint8Array,thumbnailData:new Uint8Array,blurData:new Uint8Array},this.uploadProgress={totalBytes:0,uploadedBytes:0,currentFile:"main"},this.processResourceRequest=r=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i;if("Success"===r.type){let i={message:r.message.message};i.applyScreen=!0;let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join("."),s=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);return s===$3FhS8.EDeviceType.Pro&&$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"4.17.0")&&(i.applyScreen=!1),i}let{offset:n,data_length:s}=r.message,{data:a,thumbnailData:o,blurData:d}=this.paramsData;if(void 0===n)throw Error("offset is undefined");switch(r.type){case"ResourceRequest":i=a;break;case"BlurRequest":i=d;break;case"ZoomRequest":i=o;break;default:throw Error("Invalid request type")}let f=this.getDataChunk(i,n,s),l=$1304429e902731e7$exports.blake2s(f);this.updateProgress(f.byteLength,r.type);let u={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(f),hash:$bb5e1fcd97588e49$exports.bytesToHex(l)},c=yield this.device.commands.typedCall("ResourceAck",["ResourceRequest","ZoomRequest","BlurRequest","Success"],u);return this.processResourceRequest(c)})}getVersionRange(){return{model_touch:{min:"3.2.0"}}}checkUploadNFTSupport(){let r=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join(".");if(!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(r))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"Device Not Support Upload NFT");if($ce1f303d0aa8ec51$var$semver__default.default.lt(i,"4.1.0"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,"Device firmware version is too low, please update to 4.1.0",{current:i,require:"4.1.0"})}init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"suffix",type:"string",required:!0},{name:"dataHex",type:"string",required:!0},{name:"thumbnailDataHex",type:"string",required:!0},{name:"blurDataHex",type:"hexString",required:!0},{name:"resType",type:"number",required:!0},{name:"nftMetaData",type:"string"},{name:"fileNameNoExt",type:"string"}]);let{suffix:r,dataHex:i,thumbnailDataHex:n,blurDataHex:s,resType:a,nftMetaData:o}=this.payload;this.paramsData={data:new Uint8Array($ce1f303d0aa8ec51$var$hexToBytes(i)),thumbnailData:new Uint8Array($ce1f303d0aa8ec51$var$hexToBytes(n)),blurData:new Uint8Array($ce1f303d0aa8ec51$var$hexToBytes(s))},this.uploadProgress.totalBytes=this.paramsData.data.byteLength+this.paramsData.thumbnailData.byteLength+this.paramsData.blurData.byteLength,this.uploadProgress.uploadedBytes=0;let d=$bb5e1fcd97588e49$exports.bytesToHex($1304429e902731e7$exports.blake2s(this.payload.dataHex)).slice(0,8),f=$7U5sq.isEmpty(this.payload.fileNameNoExt)?`${0===a?"wp":"nft"}-${d}-${Math.floor(Date.now()/1e3)}`:this.payload.fileNameNoExt;this.params={extension:r,data_length:this.paramsData.data.byteLength,zoom_data_length:this.paramsData.thumbnailData.byteLength,blur_data_length:this.paramsData.blurData.byteLength,res_type:a,nft_meta_data:o,file_name_no_ext:f}}getDataChunk(r,i,n){let s=Math.min(i+n,r.byteLength);return r.subarray(i,s)}updateProgress(r,i){this.uploadProgress.uploadedBytes+=r,"ResourceRequest"===i?this.uploadProgress.currentFile="main":"ZoomRequest"===i?this.uploadProgress.currentFile="thumbnail":this.uploadProgress.currentFile="blur",this.uploadProgress.uploadedBytes,this.uploadProgress.totalBytes}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.payload.resType===$5xch2.Messages.ResourceType.Nft&&this.checkUploadNFTSupport();let r=yield this.device.commands.typedCall("ResourceUpload",["ResourceRequest","ZoomRequest","BlurRequest","Success"],this.params);return this.processResourceRequest(r)})}}class $ce1f303d0aa8ec51$var$DeviceSupportFeatures extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){if(!this.device.features)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Device not initialized"));let r=$ce1f303d0aa8ec51$var$supportInputPinOnSoftware(this.device.features),i=$ce1f303d0aa8ec51$var$supportModifyHomescreen(this.device.features);return Promise.resolve({inputPinOnSoftware:r,modifyHomescreen:i,device:this.device.toMessageObject()})}}class $ce1f303d0aa8ec51$var$DeviceVerify extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"dataHex",type:"hexString"}]),this.params={data:$ce1f303d0aa8ec51$var$formatAnyHex(this.payload.dataHex)}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(i)){let i=yield this.device.commands.typedCall("BixinVerifyDeviceRequest","BixinVerifyDeviceAck",Object.assign(Object.assign({},this.params),{data:$bb5e1fcd97588e49$exports.bytesToHex($91294e775a6684d7$exports.sha256(this.params.data))}));r=i.message}else{let i=yield this.device.commands.typedCall("SESignMessage","SEMessageSignature",{message:this.params.data}),n=yield this.device.commands.typedCall("ReadSEPublicCert","SEPublicCert");r={cert:n.message.public_cert,signature:i.message.signature}}return($ce1f303d0aa8ec51$var$validateResult(r,["cert","signature"]),r)?Promise.resolve(r):Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Device not support verify"))})}}class $ce1f303d0aa8ec51$var$DeviceWipe extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("WipeDevice","Success");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$getBinary=({features:r,updateType:i,version:n,isUpdateBootloader:s,firmwareType:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let o;let d=$ce1f303d0aa8ec51$var$getInfo({features:r,updateType:i,targetVersion:null==n?void 0:n.join("."),firmwareType:a});if(!d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"no firmware found for this device");if(n&&!$ce1f303d0aa8ec51$var$semver__default.default.eq(d.version.join("."),n.join("."))){let i="touch"===$ce1f303d0aa8ec51$var$getDeviceType(r)&&!r.onekey_version;if(!i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"firmware version mismatch")}let f="ble"===i?d.webUpdate:s?d.bootloaderResource:d.url;try{o=yield $ce1f303d0aa8ec51$var$httpRequest(f,"binary")}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Method_FirmwareUpdate_DownloadFailed")}return Object.assign(Object.assign({},d),{binary:o})}),$ce1f303d0aa8ec51$var$getSysResourceBinary=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let i;try{i=yield $ce1f303d0aa8ec51$var$httpRequest(r,"binary")}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Method_FirmwareUpdate_DownloadFailed")}return{binary:i}}),$ce1f303d0aa8ec51$var$getInfo=({features:r,updateType:i,targetVersion:n,firmwareType:s})=>{var a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r);if("unknown"===d)return null;let{deviceMap:f}=$ce1f303d0aa8ec51$var$DataManager,l=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:i,targetVersion:n,firmwareType:s}),u=null!==(o=null===(a=null==f?void 0:f[d])||void 0===a?void 0:a[l])&&void 0!==o?o:[];return $ce1f303d0aa8ec51$var$findLatestRelease(u)},$ce1f303d0aa8ec51$var$NEW_BOOT_UPRATE_FIRMWARE_VERSION="2.4.5",$ce1f303d0aa8ec51$var$SESSION_ERROR$1="session not found",$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM$1="Firmware install confirmed",$ce1f303d0aa8ec51$var$Log$8=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method),$ce1f303d0aa8ec51$var$isDeviceDisconnectedError$1=r=>{let i=r instanceof Error?r.message:String(null!=r?r:"");return i.includes("device was disconnected")||i.includes("transferIn")||i.includes("USBDevice")},$ce1f303d0aa8ec51$var$postConfirmationMessage=r=>{var i;(null===(i=r.features)||void 0===i?void 0:i.firmware_present)&&r.emit($ce1f303d0aa8ec51$var$DEVICE.BUTTON,r,{code:"ButtonRequest_FirmwareUpdate"})},$ce1f303d0aa8ec51$var$postProgressMessage=(r,i,n,s)=>{s($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROGRESS,{device:r.toMessageObject(),progress:i,progressType:n}))},$ce1f303d0aa8ec51$var$postProcessingMessage=(r,i)=>{i($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROCESSING,{type:r}))},$ce1f303d0aa8ec51$var$postProgressTip=(r,i,n)=>{n($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:r.toMessageObject(),data:{message:i}}))},$ce1f303d0aa8ec51$var$waitBleInstall=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){"ble"===r&&(yield $ce1f303d0aa8ec51$var$wait(1e4))}),$ce1f303d0aa8ec51$var$uploadFirmware=(r,i,n,s,{payload:a,rebootOnSuccess:o},d)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var f,l;let u=$ce1f303d0aa8ec51$var$getDeviceType(s.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(u)){let o;$ce1f303d0aa8ec51$var$postConfirmationMessage(s),$ce1f303d0aa8ec51$var$postProgressTip(s,"ConfirmOnDevice",n);let u="firmware"===r;if(u&&!d){let r=yield i("GetFeatures","Features",{}),o=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(r.message).join("."),d=$ce1f303d0aa8ec51$var$semver__default.default.gte(o,"2.1.0");if($ce1f303d0aa8ec51$var$Log$8.debug("supportUpgradeFileHeader:",d),d){let r=1024;if(a.byteLength0&&$ce1f303d0aa8ec51$var$postProgressMessage(s,Math.round(r/d*100),"transferData",n),"CallMethodError"===(f=yield i("FirmwareUpload",["FirmwareRequest","Success"],{payload:l})).type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"upload firmware error")}return $ce1f303d0aa8ec51$var$postProgressMessage(s,100,"transferData",n),yield $ce1f303d0aa8ec51$var$waitBleInstall(r),f.message}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"uploadFirmware: unknown device model")}),$ce1f303d0aa8ec51$var$newTouchUpdateProcess=(r,i,n,{payload:s},a=!0)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var o,d,f,l,u;let c;let p=n.getCommands().typedCall.bind(n.getCommands());$ce1f303d0aa8ec51$var$postProgressTip(n,"StartTransferData",i);let h=`0:${"ble"===r?"ble-":""}firmware.bin`,g=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),m=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(g)?16:128,v=1024*m,_=Math.ceil(s.byteLength/v),b=0;for(let r=0;r<_;r++){let a=r*v,o=Math.min(a+v,s.byteLength),d=o-a,f=s.slice(a,o),l=0===r,u=Math.round((r+1)/_*100),c=yield $ce1f303d0aa8ec51$var$emmcFileWriteWithRetry(n,h,d,b,f,l,u);b+=c.message.processed_byte,$ce1f303d0aa8ec51$var$postProgressMessage(n,u,"transferData",i)}$ce1f303d0aa8ec51$var$postConfirmationMessage(n),$ce1f303d0aa8ec51$var$postProgressTip(n,"ConfirmOnDevice",i),$ce1f303d0aa8ec51$var$postProgressTip(n,"InstallingFirmware",i),p=n.getCommands().typedCall.bind(n.getCommands());try{c=yield p("FirmwareUpdateEmmc","Success",{path:h,reboot_on_success:a})}catch(r){if($ce1f303d0aa8ec51$var$isDeviceDisconnectedError$1(r))$ce1f303d0aa8ec51$var$Log$8.log("Rebooting device"),c={type:"Success",message:{message:$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM$1}};else throw r}if("Success"===c.type&&(null===(o=null==c?void 0:c.message)||void 0===o?void 0:o.message)===$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM$1){let r=12e4,i=Date.now(),s=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(g);for(;Date.now()-i{setTimeout(()=>{i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed))},3e3)})])}catch(r){$ce1f303d0aa8ec51$var$Log$8.log("catch Bluetooth error when device is restarting: ",r)}else{let r=yield null===(f=n.deviceConnector)||void 0===f?void 0:f.enumerate(),i=null!==(l=null==r?void 0:r.descriptors)&&void 0!==l?l:[],{deviceList:s}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(i,n.originalDescriptor.id);1===s.length&&(n.updateFromCache(s[0]),yield n.acquire(),n.commands.disposed=!1,n.getCommands().mainId=null!==(u=n.mainId)&&void 0!==u?u:"")}let r=n.getCommands().typedCall.bind(n.getCommands());yield r("GetFeatures","Features",{}),$ce1f303d0aa8ec51$var$DevicePool.resetState();break}catch(r){console.error("Device reconnect failed: ",r),$ce1f303d0aa8ec51$var$Log$8.error("Device reconnect failed:",r),yield $ce1f303d0aa8ec51$var$wait(1e3)}}return c}),$ce1f303d0aa8ec51$var$emmcFileWriteWithRetry=(r,i,n,s,a,o,d)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var f,l,u,c,p,h,g,m,v;let _=()=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var f;let l=r.getCommands().typedCall.bind(r.getCommands()),u=yield l("EmmcFileWrite","EmmcFile",{file:{path:i,len:n,offset:s,data:a},overwrite:o,append:0!==s,ui_percentage:d});if("EmmcFile"!==u.type){if("CallMethodError"===u.type&&(null!==(f=u.message.error)&&void 0!==f?f:"").indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR$1)>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,$ce1f303d0aa8ec51$var$SESSION_ERROR$1);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error")}return u}),b=10;for(;b>0;)try{let r=yield _();return r}catch(n){if($ce1f303d0aa8ec51$var$Log$8.error("emmcWrite error: ",n),0==--b)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error");let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(i))yield $ce1f303d0aa8ec51$var$wait(3e3),yield null===(f=r.deviceConnector)||void 0===f?void 0:f.acquire(r.originalDescriptor.id,null,!0),yield r.initialize();else if((null===(l=null==n?void 0:n.message)||void 0===l?void 0:l.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR$1))>-1||(null===(c=null===(u=null==n?void 0:n.response)||void 0===u?void 0:u.data)||void 0===c?void 0:c.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR$1))>-1){let i=yield null===(p=r.deviceConnector)||void 0===p?void 0:p.enumerate(),n=null!==(h=null==i?void 0:i.descriptors)&&void 0!==h?h:[],{deviceList:s}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(n,void 0);1===s.length&&(null===(m=null===(g=s[0])||void 0===g?void 0:g.features)||void 0===m?void 0:m.bootloader_mode)&&(r.updateFromCache(s[0]),yield r.acquire(),r.getCommands().mainId=null!==(v=r.mainId)&&void 0!==v?v:"")}yield $ce1f303d0aa8ec51$var$wait(3e3)}}),$ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE=16384,$ce1f303d0aa8ec51$var$processResourceRequest=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){if("Success"===i.type)return i.message;let{offset:s,data_length:a}=i.message;if(void 0===s)throw Error("offset is undefined");let o=new Uint8Array(n.slice(s,Math.min(s+a,n.byteLength))),d=$1304429e902731e7$exports.blake2s(o),f={data_chunk:$ce1f303d0aa8ec51$var$bytesToHex(o),hash:$ce1f303d0aa8ec51$var$bytesToHex(d)},l=yield r("ResourceAck",["ResourceRequest","Success"],Object.assign({},f));return $ce1f303d0aa8ec51$var$processResourceRequest(r,l,n)}),$ce1f303d0aa8ec51$var$updateResource=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a=new Uint8Array(n.slice(0,Math.min($ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE,n.byteLength))),o=$1304429e902731e7$exports.blake2s(a),d=yield r("ResourceUpdate",["ResourceRequest","Success"],{file_name:i,data_length:n.byteLength,initial_data_chunk:$ce1f303d0aa8ec51$var$bytesToHex(a),hash:$ce1f303d0aa8ec51$var$bytesToHex(o)});return null==s||s(),$ce1f303d0aa8ec51$var$processResourceRequest(r,d,n)}),$ce1f303d0aa8ec51$var$updateResources=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateSysResource",i);let a=yield $ce1f303d0aa8ec51$var$JSZip__default.default.loadAsync(s),o=Object.entries(a.files),d=0,f=100/o.length;for(let[s,a]of o){let o=s.split("/").pop();if(!a.dir&&-1===s.indexOf("__MACOSX")&&o){let i=yield a.async("arraybuffer");yield $ce1f303d0aa8ec51$var$updateResource(r,o,i)}$ce1f303d0aa8ec51$var$postProgressMessage(n,Math.floor(d+=f),"installingFirmware",i)}return $ce1f303d0aa8ec51$var$postProgressMessage(n,100,"installingFirmware",i),$ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateSysResourceSuccess",i),!0}),$ce1f303d0aa8ec51$var$updateBootloader=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return $ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateBootloader",i),$ce1f303d0aa8ec51$var$postProgressMessage(n,Math.floor(0),"installingFirmware",i),yield $ce1f303d0aa8ec51$var$updateResource(r,"bootloader.bin",s,()=>{$ce1f303d0aa8ec51$var$postProcessingMessage("resource",i)}),$ce1f303d0aa8ec51$var$postProgressMessage(n,Math.floor(100),"installingFirmware",i),$ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateBootloaderSuccess",i),!0});class $ce1f303d0aa8ec51$var$DeviceFullyUploadResource extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))}}init(){this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}isSupportResourceUpdate(r,i){if("firmware"!==i)return!1;let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=n===$3FhS8.EDeviceType.Touch||n===$3FhS8.EDeviceType.Pro,a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return s&&$ce1f303d0aa8ec51$var$semver__default.default.gte(a,"3.4.0")}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:i}=this,{features:n}=i,s=this.payload,a=$ce1f303d0aa8ec51$var$getFirmwareType(n),o=null!==(r=s.firmwareType)&&void 0!==r?r:a;if(!(null==n?void 0:n.bootloader_mode)&&n&&n){let{binary:r}=this.payload;if(!r){this.postTipMessage("CheckLatestUiResource");let i=$ce1f303d0aa8ec51$var$DataManager.getSysFullResource(n,o);if(i){this.postTipMessage("DownloadLatestUiResource");let n=yield $ce1f303d0aa8ec51$var$getSysResourceBinary(i);this.postTipMessage("DownloadLatestUiResourceSuccess"),n&&(r=n.binary)}}yield $ce1f303d0aa8ec51$var$updateResources(this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,i,r)}})}}const $ce1f303d0aa8ec51$var$Log$7=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method),$ce1f303d0aa8ec51$var$SESSION_ERROR="session not found",$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM="Firmware install confirmed",$ce1f303d0aa8ec51$var$isDeviceDisconnectedError=r=>{let i=r instanceof Error?r.message:String(null!=r?r:"");return i.includes("device was disconnected")||i.includes("transferIn")||i.includes("USBDevice")};class $ce1f303d0aa8ec51$var$FirmwareUpdateBaseMethod extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))},this.postProcessingMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROCESSING,{type:r}))},this.postProgressMessage=(r,i)=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROGRESS,{device:this.device.toMessageObject(),progress:r,progressType:i}))}}init(){}run(){return Promise.resolve()}isBleReconnect(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return this.payload.connectId&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)}_promptDeviceInBootloaderForWebDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE)>0&&this.device.emit($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,this.device,(n,s)=>{n?i(n):r(s)})})})}_promptDeviceForSwitchFirmwareWebDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE)>0&&this.device.emit($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,this.device,(n,s)=>{n?i(n):r(s)})})})}checkDeviceToBootloader(r){var i,n;let s;this.checkPromise=$3FhS8.createDeferred();let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=r&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a);$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] isBleReconnect: ",o);let d=!0,f=0,l=$ce1f303d0aa8ec51$var$getDeviceType(null===(i=this===null||void 0===this?void 0:this.device)||void 0===i?void 0:i.features)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(null===(n=this===null||void 0===this?void 0:this.device)||void 0===n?void 0:n.features)===$3FhS8.EDeviceType.Pro,u=setInterval(()=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n,a,c;if(f+=1,$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] isFirstCheck: ",d),l&&d&&(d=!1,$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] wait 3000ms"),yield $ce1f303d0aa8ec51$var$wait(3e3)),f>4&&$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb($ce1f303d0aa8ec51$var$DataManager.getSettings("env"))&&!this.payload.skipWebDevicePrompt){clearInterval(u),clearTimeout(s);try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);let i=yield this._promptDeviceInBootloaderForWebDevice();i&&(yield this._checkDeviceInBootloaderMode(r,u,s))}catch(r){$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] _promptDeviceInBootloaderForWebDevice failed: ",r),null===(i=this.checkPromise)||void 0===i||i.reject(r)}return}if(o)try{yield null===(n=this.device.deviceConnector)||void 0===n?void 0:n.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize(),(null===(a=this.device.features)||void 0===a?void 0:a.bootloader_mode)&&(clearInterval(u),null===(c=this.checkPromise)||void 0===c||c.resolve(!0))}catch(r){$ce1f303d0aa8ec51$var$Log$7.log("catch Bluetooth error when device is restarting: ",r)}else yield this._checkDeviceInBootloaderMode(r,u,s)}),o?3e3:2e3);s=setTimeout(()=>{this.checkPromise&&(clearInterval(u),this.checkPromise.reject(Error()))},3e4)}_checkDeviceInBootloaderMode(r,i,n){var s,a,o,d,f;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let l=yield null===(s=this.device.deviceConnector)||void 0===s?void 0:s.enumerate(),u=null!==(a=null==l?void 0:l.descriptors)&&void 0!==a?a:[],{deviceList:c}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(u,r);return 1===c.length&&null!==(d=null===(o=c[0])||void 0===o?void 0:o.features)&&void 0!==d&&!!d.bootloader_mode&&(this.device.updateFromCache(c[0]),this.device.commands.disposed=!1,i&&clearInterval(i),n&&clearTimeout(n),null===(f=this.checkPromise)||void 0===f||f.resolve(!0),!0)})}enterBootloaderMode(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands());if(this.device.features&&!this.device.features.bootloader_mode){let n=$ce1f303d0aa8ec51$var$getDeviceUUID(this.device.features),s=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.AutoRebootToBootloader);let a=yield i("DeviceBackToBoot","Success");if("CallMethodError"===a.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.GoToBootloaderSuccess),this.checkDeviceToBootloader(this.payload.connectId),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(s)&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(n),delete $ce1f303d0aa8ec51$var$DevicePool.devicesCache[""],yield null===(r=this.checkPromise)||void 0===r?void 0:r.promise,this.checkPromise=null;let o=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(s);return yield $ce1f303d0aa8ec51$var$wait(o?3e3:1500),yield this.device.acquire(),!0}catch(r){if(r instanceof $3FhS8.HardwareError)return Promise.reject(r);return console.log("auto go to bootloader mode failed: ",r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure))}}})}startEmmcFirmwareUpdate({path:r}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i;let n=this.device.getCommands().typedCall.bind(this.device.getCommands());try{i=yield n("FirmwareUpdateEmmc","Success",{path:r,reboot_on_success:!0})}catch(r){if($ce1f303d0aa8ec51$var$isDeviceDisconnectedError(r))$ce1f303d0aa8ec51$var$Log$7.log("Rebooting device"),i={type:"Success",message:{message:$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM}};else throw r}if("Success"!==i.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareError,"firmware update error");this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.FirmwareUpdating)})}createUpdatesFolderIfNotExists(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands());yield i("EmmcDirMake","Success",{path:r})})}emmcCommonUpdateProcess({payload:r,filePath:i,processedSize:n,totalSize:s}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!i.startsWith("0:"))throw Error("filePath must start with 0:");let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a)?16:128,d=1024*o,f=Math.ceil(r.byteLength/d),l=0,u=0;for(let a=0;a$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var d;let f=this.device.getCommands().typedCall.bind(this.device.getCommands()),l=yield f("EmmcFileWrite","EmmcFile",{file:{path:r,len:i,offset:n,data:s},overwrite:a,append:0!==n,ui_percentage:o});if("EmmcFile"!==l.type){if("CallMethodError"===l.type&&(null!==(d=l.message.error)&&void 0!==d?d:"").indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR)>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,$ce1f303d0aa8ec51$var$SESSION_ERROR);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error")}return l}),_=10;for(;_>0;)try{let r=yield v();return r}catch(i){if($ce1f303d0aa8ec51$var$Log$7.error("emmcWrite error: ",i),0==--_)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error");let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(r))yield $ce1f303d0aa8ec51$var$wait(3e3),yield null===(d=this.device.deviceConnector)||void 0===d?void 0:d.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize();else if((null===(f=null==i?void 0:i.message)||void 0===f?void 0:f.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR))>-1||(null===(u=null===(l=null==i?void 0:i.response)||void 0===l?void 0:l.data)||void 0===u?void 0:u.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR))>-1){let r=yield null===(c=this.device.deviceConnector)||void 0===c?void 0:c.enumerate(),i=null!==(p=null==r?void 0:r.descriptors)&&void 0!==p?p:[],{deviceList:n}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(i,void 0);1===n.length&&(null===(g=null===(h=n[0])||void 0===h?void 0:h.features)||void 0===g?void 0:g.bootloader_mode)&&(this.device.updateFromCache(n[0]),yield this.device.acquire(),this.device.getCommands().mainId=null!==(m=this.device.mainId)&&void 0!==m?m:"")}yield $ce1f303d0aa8ec51$var$wait(2e3)}})}reboot(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands());try{let n=yield i("Reboot","Success",{reboot_type:r});return n.message}catch(r){if(r instanceof Error&&(r.message.includes("device was disconnected")||r.message.includes("transferIn")||r.message.includes("USBDevice")))return{message:"Device rebooted successfully"};throw r}})}}class $ce1f303d0aa8ec51$var$DeviceUpdateBootloader extends $ce1f303d0aa8ec51$var$FirmwareUpdateBaseMethod{init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}updateBootloaderWithEmmcFileWrite(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r="0:boot/bootloader.bin";return this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.StartTransferData),yield this.emmcCommonUpdateProcess({payload:i,filePath:r}),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.ConfirmOnDevice),yield this.reboot($5xch2.RebootType.Normal),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.UpdateBootloaderSuccess),!0})}updateTouchBootloader({device:r,features:i,firmwareType:n}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{binary:s}=this.payload;if(!s){this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.CheckLatestUiResource);let r=i?$ce1f303d0aa8ec51$var$DataManager.getBootloaderResource(i,n):null;if(r){this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.DownloadLatestBootloaderResource);let i=yield $ce1f303d0aa8ec51$var$getSysResourceBinary(r);this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.DownloadLatestBootloaderResourceSuccess),i&&(s=i.binary)}}if(!$ce1f303d0aa8ec51$var$checkBootloaderLength(s))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CheckDownloadFileError);return i&&i.bootloader_mode?(this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.UpdateBootloader),this.updateBootloaderWithEmmcFileWrite(r,s)):i&&!i.bootloader_mode?(yield $ce1f303d0aa8ec51$var$updateBootloader(this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,r,s),Promise.resolve(!0)):void 0})}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:i}=this,{features:n}=i,s=this.payload,a=$ce1f303d0aa8ec51$var$getDeviceType(n),o=$ce1f303d0aa8ec51$var$getFirmwareType(n),d=null!==(r=s.firmwareType)&&void 0!==r?r:o;return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(a)?this.updateTouchBootloader({device:i,features:n,firmwareType:d}):Promise.resolve(!0)})}}class $ce1f303d0aa8ec51$var$DeviceLock extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("LockDevice","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceUnlock extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return this.device.unlockDevice()})}}class $ce1f303d0aa8ec51$var$DeviceCancel extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("Cancel","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$SetU2FCounter extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.params={u2f_counter:this.payload.u2f_counter}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("SetU2FCounter","Success",this.params);return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$GetNextU2FCounter extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("GetNextU2FCounter","NextU2FCounter");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$Log$6=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$FirmwareUpdate extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))}}init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0;let{payload:r}=this;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"version",type:"array"},{name:"binary",type:"buffer"},{name:"updateType",type:"string",required:!0},{name:"rebootOnSuccess",type:"boolean"}]),this.params={updateType:r.updateType},"version"in r&&(this.params=Object.assign(Object.assign({},this.params),{version:r.version})),"binary"in r&&(this.params=Object.assign(Object.assign({},this.params),{binary:r.binary}))}checkDeviceToBootloader(r){this.checkPromise=$3FhS8.createDeferred();let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=r&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i);$ce1f303d0aa8ec51$var$Log$6.log("FirmwareUpdate [checkDeviceToBootloader] isBleReconnect: ",n);let s=setInterval(()=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,a,o,d,f,l,u,c;if(n)try{yield null===(i=this.device.deviceConnector)||void 0===i?void 0:i.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize(),(null===(a=this.device.features)||void 0===a?void 0:a.bootloader_mode)&&(clearInterval(s),null===(o=this.checkPromise)||void 0===o||o.resolve(!0))}catch(r){$ce1f303d0aa8ec51$var$Log$6.log("catch Bluetooth error when device is restarting: ",r)}else{let i=yield null===(d=this.device.deviceConnector)||void 0===d?void 0:d.enumerate(),n=null!==(f=null==i?void 0:i.descriptors)&&void 0!==f?f:[],{deviceList:a}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(n,r);1===a.length&&(null===(u=null===(l=a[0])||void 0===l?void 0:l.features)||void 0===u?void 0:u.bootloader_mode)&&(this.device.updateFromCache(a[0]),this.device.commands.disposed=!1,clearInterval(s),null===(c=this.checkPromise)||void 0===c||c.resolve(!0))}}),n?3e3:2e3);setTimeout(()=>{this.checkPromise&&(clearInterval(s),this.checkPromise.reject(Error()))},3e4)}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n;let{device:s,params:a}=this,{features:o,commands:d}=s,f=$ce1f303d0aa8ec51$var$getDeviceType(o);if(!(null==o?void 0:o.bootloader_mode)&&o){let i=$ce1f303d0aa8ec51$var$getDeviceUUID(o);if($ce1f303d0aa8ec51$var$isEnteredManuallyBoot(o,a.updateType))return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));try{this.postTipMessage("AutoRebootToBootloader");let n=yield d.typedCall("DeviceBackToBoot","Success");if("CallMethodError"===n.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);this.postTipMessage("GoToBootloaderSuccess"),this.checkDeviceToBootloader(this.payload.connectId),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(f)&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(i),delete $ce1f303d0aa8ec51$var$DevicePool.devicesCache[""],yield null===(r=this.checkPromise)||void 0===r?void 0:r.promise,this.checkPromise=null;let s=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(f);yield $ce1f303d0aa8ec51$var$wait(s?3e3:1500)}catch(r){if(r instanceof $3FhS8.HardwareError)return Promise.reject(r);return $ce1f303d0aa8ec51$var$Log$6.log("auto go to bootloader mode failed: ",r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure))}}try{if(a.binary)n=this.params.binary;else{if(!s.features)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"no features found for this device");this.postTipMessage("DownloadFirmware");let r=yield $ce1f303d0aa8ec51$var$getBinary({features:s.features,version:a.version,updateType:a.updateType,firmwareType:$3FhS8.EFirmwareType.Universal});n=r.binary,this.postTipMessage("DownloadFirmwareSuccess")}}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,null!==(i=r.message)&&void 0!==i?i:r)}yield this.device.acquire();let l=yield $ce1f303d0aa8ec51$var$uploadFirmware(a.updateType,this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,s,{payload:n,rebootOnSuccess:this.payload.rebootOnSuccess},!1);return this.connectId&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(this.connectId),l})}}const $ce1f303d0aa8ec51$var$Log$5=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$FirmwareUpdateV2 extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))}}init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0;let{payload:r}=this;if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"version",type:"array"},{name:"binary",type:"buffer"},{name:"forcedUpdateRes",type:"boolean"},{name:"platform",type:"string",required:!0},{name:"firmwareType",type:"string"}]),!r.updateType)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"updateType is required");this.params={updateType:r.updateType,forcedUpdateRes:r.forcedUpdateRes,isUpdateBootloader:r.isUpdateBootloader},"version"in r&&(this.params=Object.assign(Object.assign({},this.params),{version:r.version,firmwareType:r.firmwareType})),"binary"in r&&(this.params=Object.assign(Object.assign({},this.params),{binary:r.binary}))}_promptDeviceInBootloaderForWebDevice({device:r}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE)>0&&this.device.emit($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,this.device,(n,s)=>{n?i(n):r(s)})})})}checkDeviceToBootloader(r){var i,n;let s;this.checkPromise=$3FhS8.createDeferred();let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=r&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a);$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] isBleReconnect: ",o);let d=!0,f=0,l=$ce1f303d0aa8ec51$var$getDeviceType(null===(i=this===null||void 0===this?void 0:this.device)||void 0===i?void 0:i.features)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(null===(n=this===null||void 0===this?void 0:this.device)||void 0===n?void 0:n.features)===$3FhS8.EDeviceType.Pro,u=setInterval(()=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n,a,c;if(f+=1,$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] isFirstCheck: ",d),l&&d&&(d=!1,$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] wait 3000ms"),yield $ce1f303d0aa8ec51$var$wait(3e3)),f>4&&$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb($ce1f303d0aa8ec51$var$DataManager.getSettings("env"))&&!this.payload.skipWebDevicePrompt){clearInterval(u),clearTimeout(s);try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);let i=yield this._promptDeviceInBootloaderForWebDevice({device:this.device});i&&(yield this._checkDeviceInBootloaderMode(r,u,s))}catch(r){$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] promptDeviceInBootloaderForWebDevice failed: ",r),null===(i=this.checkPromise)||void 0===i||i.reject(r)}return}if(o)try{yield null===(n=this.device.deviceConnector)||void 0===n?void 0:n.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize(),(null===(a=this.device.features)||void 0===a?void 0:a.bootloader_mode)&&(clearInterval(u),null===(c=this.checkPromise)||void 0===c||c.resolve(!0))}catch(r){$ce1f303d0aa8ec51$var$Log$5.log("catch Bluetooth error when device is restarting: ",r)}else yield this._checkDeviceInBootloaderMode(r,u,s)}),o?3e3:2e3);s=setTimeout(()=>{this.checkPromise&&(clearInterval(u),this.checkPromise.reject(Error()))},3e4)}_checkDeviceInBootloaderMode(r,i,n){var s,a,o,d,f;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let l=yield null===(s=this.device.deviceConnector)||void 0===s?void 0:s.enumerate(),u=null!==(a=null==l?void 0:l.descriptors)&&void 0!==a?a:[],{deviceList:c}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(u,r);return 1===c.length&&null!==(d=null===(o=c[0])||void 0===o?void 0:o.features)&&void 0!==d&&!!d.bootloader_mode&&(this.device.updateFromCache(c[0]),this.device.commands.disposed=!1,i&&clearInterval(i),n&&clearTimeout(n),null===(f=this.checkPromise)||void 0===f||f.resolve(!0),!0)})}isEnteredManuallyBoot(r){let i=$ce1f303d0aa8ec51$var$getDeviceType(r),n=i===$3FhS8.EDeviceType.Mini,s="firmware"===this.params.updateType&&i===$3FhS8.EDeviceType.Classic&&"1.8.3"===r.bootloader_version;return n||s}isSupportResourceUpdate(r,i){if("firmware"!==i)return!1;let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=n===$3FhS8.EDeviceType.Touch||n===$3FhS8.EDeviceType.Pro,a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return s&&$ce1f303d0aa8ec51$var$semver__default.default.gte(a,"3.2.0")}checkVersionForCopyTouchResource(r,i){var n;if(!r)return;let s=$ce1f303d0aa8ec51$var$getDeviceType(r),a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),o=null===(n=this.params.version)||void 0===n?void 0:n.join("."),{updateType:d}=this.params,f=$ce1f303d0aa8ec51$var$getInfo({features:r,updateType:d,firmwareType:i});if(!f)return;let{fullResourceRange:l}=f;if(!l)return;let[u,c]=l;if(s===$3FhS8.EDeviceType.Touch&&"firmware"===d&&o&&$ce1f303d0aa8ec51$var$semver__default.default.lt(a,u)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(o,c)&&"desktop"!==this.payload.platform)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.UseDesktopToUpdateFirmware)}run(){var r,i,n,s,a,o,d,f,l;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let u;let{device:c,params:p}=this,{features:h,commands:g}=c,m=$ce1f303d0aa8ec51$var$getDeviceType(h),v=$ce1f303d0aa8ec51$var$getFirmwareType(c.features),_=null!==(r=p.firmwareType)&&void 0!==r?r:v;if(this.checkVersionForCopyTouchResource(h,_),!(null==h?void 0:h.bootloader_mode)&&h){let r=$ce1f303d0aa8ec51$var$getDeviceUUID(h);if(this.isEnteredManuallyBoot(h))return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));if(h&&this.isSupportResourceUpdate(h,p.updateType)){this.postTipMessage("CheckLatestUiResource");let r=$ce1f303d0aa8ec51$var$DataManager.getSysResourcesLatestRelease({features:h,forcedUpdateRes:p.forcedUpdateRes,firmwareType:_});if(r){this.postTipMessage("DownloadLatestUiResource");let i=yield $ce1f303d0aa8ec51$var$getSysResourceBinary(r);this.postTipMessage("DownloadLatestUiResourceSuccess"),i&&(yield $ce1f303d0aa8ec51$var$updateResources(this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,c,i.binary))}}null===(n=null===(i=this.device)||void 0===i?void 0:i.commands)||void 0===n||n.checkDisposed();try{this.postTipMessage("AutoRebootToBootloader");let i=yield g.typedCall("DeviceBackToBoot","Success");if("CallMethodError"===i.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);this.postTipMessage("GoToBootloaderSuccess"),this.checkDeviceToBootloader(this.payload.connectId),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(m)&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(r),delete $ce1f303d0aa8ec51$var$DevicePool.devicesCache[""],yield null===(s=this.checkPromise)||void 0===s?void 0:s.promise,this.checkPromise=null,null===(o=null===(a=this.device)||void 0===a?void 0:a.commands)||void 0===o||o.checkDisposed();let n=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(m);yield $ce1f303d0aa8ec51$var$wait(n?3e3:1500)}catch(r){if(r instanceof $3FhS8.HardwareError)return Promise.reject(r);return console.log("auto go to bootloader mode failed: ",r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure))}}try{if(p.binary)u=this.params.binary;else{if(!c.features)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"no features found for this device");this.postTipMessage("DownloadFirmware");let r=yield $ce1f303d0aa8ec51$var$getBinary({features:c.features,version:p.version,updateType:p.updateType,isUpdateBootloader:p.isUpdateBootloader,firmwareType:_});u=r.binary,this.postTipMessage("DownloadFirmwareSuccess")}}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,null!==(d=r.message)&&void 0!==d?d:r)}null===(l=null===(f=this.device)||void 0===f?void 0:f.commands)||void 0===l||l.checkDisposed(),yield this.device.acquire();let b=yield $ce1f303d0aa8ec51$var$uploadFirmware(p.updateType,this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,c,{payload:u,rebootOnSuccess:!0},p.isUpdateBootloader);return this.connectId&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(this.connectId),b})}}const $ce1f303d0aa8ec51$var$Log$4=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method),$ce1f303d0aa8ec51$var$MIN_UPDATE_V3_BOOTLOADER_VERSION="2.8.0";class $ce1f303d0aa8ec51$var$FirmwareUpdateV3 extends $ce1f303d0aa8ec51$var$FirmwareUpdateBaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.isSwitchFirmware=!1}init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0;let{payload:r}=this;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"bleVersion",type:"array"},{name:"bleBinary",type:"buffer"},{name:"firmwareVersion",type:"array"},{name:"firmwareBinary",type:"buffer"},{name:"resourceBinary",type:"buffer"},{name:"forcedUpdateRes",type:"boolean"},{name:"bootloaderVersion",type:"array"},{name:"bootloaderBinary",type:"buffer"},{name:"firmwareType",type:"string"},{name:"platform",type:"string"}]),this.params={bleBinary:r.bleBinary,firmwareBinary:r.firmwareBinary,forcedUpdateRes:r.forcedUpdateRes,bleVersion:r.bleVersion,bootloaderVersion:r.bootloaderVersion,bootloaderBinary:r.bootloaderBinary,firmwareVersion:r.firmwareVersion,resourceBinary:r.resourceBinary,firmwareType:r.firmwareType,platform:r.platform}}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:n}=this,{features:s}=n,a=$ce1f303d0aa8ec51$var$getDeviceType(s),o=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(s).join(".");if(this.validateDeviceAndVersion(a,o),!s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Device features not available");let d=$ce1f303d0aa8ec51$var$getFirmwareType(s),f=null!==(r=this.params.firmwareType)&&void 0!==r?r:d;this.isSwitchFirmware=f!==d;let l=null,u=[],c=null;try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.StartDownloadFirmware),l=yield this.prepareResourceBinary(f),u=yield this.prepareFirmwareAndBleBinary(f),c=yield this.prepareBootloaderBinary(f),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.FinishDownloadFirmware)}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,null!==(i=r.message)&&void 0!==i?i:r)}if(!c&&0===u.length)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,"No firmware to update");yield this.enterBootloaderMode();let p=yield this.executeUpdate({resourceBinary:l,fwBinaryMap:u,bootloaderBinary:c});return p})}validateDeviceAndVersion(r,i){if(r===$3FhS8.EDeviceType.Unknown)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"unknown device type");if(r!==$3FhS8.EDeviceType.Pro)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"only pro device is supported");if($ce1f303d0aa8ec51$var$semver__default.default.lt(i,$ce1f303d0aa8ec51$var$MIN_UPDATE_V3_BOOTLOADER_VERSION))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"bootloader version needs to be updated")}prepareResourceBinary(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.params.resourceBinary)return this.params.resourceBinary;let{features:i}=this.device;if(!i)return null;let n=$ce1f303d0aa8ec51$var$DataManager.getSysResourcesLatestRelease({features:i,forcedUpdateRes:this.params.forcedUpdateRes,firmwareType:r});if(n){let r=(yield $ce1f303d0aa8ec51$var$getSysResourceBinary(n)).binary;return r}return $ce1f303d0aa8ec51$var$Log$4.warn("No resource url found"),null})}prepareBootloaderBinary(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.params.bootloaderBinary)return this.params.bootloaderBinary;let{features:i}=this.device;if(!i)return null;if(this.params.bootloaderVersion){let n=$ce1f303d0aa8ec51$var$DataManager.getBootloaderResource(i,r);if(n){let r=(yield $ce1f303d0aa8ec51$var$getSysResourceBinary(n)).binary;return r}}return null})}prepareFirmwareAndBleBinary(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=[];if(this.params.firmwareBinary)i.push({fileName:"firmware.bin",binary:this.params.firmwareBinary});else if(this.params.firmwareVersion){let{features:n}=this.device;if(n){let s=(yield $ce1f303d0aa8ec51$var$getBinary({features:n,version:this.params.firmwareVersion,updateType:"firmware",isUpdateBootloader:!1,firmwareType:r})).binary;i.push({fileName:"firmware.bin",binary:s})}}if(this.params.bleBinary)i.push({fileName:"ble-firmware.bin",binary:this.params.bleBinary});else if(this.params.bleVersion){let{features:n}=this.device;if(n){let s=yield $ce1f303d0aa8ec51$var$getBinary({features:n,version:this.params.bleVersion,updateType:"ble",firmwareType:r});i.push({fileName:"ble-firmware.bin",binary:s.binary})}}return i})}executeUpdate({resourceBinary:r,fwBinaryMap:i,bootloaderBinary:n}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let s=0,a=0;for(let n of(r&&(s+=r.byteLength),i))s+=n.binary.byteLength;if(n&&(s+=n.byteLength),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.StartTransferData),r){let i=yield $ce1f303d0aa8ec51$var$JSZip__default.default.loadAsync(r),n=Object.entries(i.files);for(let[r,i]of n){let n=r.split("/").pop();if(!i.dir&&-1===r.indexOf("__MACOSX")&&n){let r=yield i.async("arraybuffer");a=yield this.emmcCommonUpdateProcess({payload:r,filePath:`0:res/${n}`,processedSize:a,totalSize:s})}}}for(let r of(n&&(a=yield this.emmcCommonUpdateProcess({payload:n,filePath:"0:boot/bootloader.bin",processedSize:a,totalSize:s})),yield this.createUpdatesFolderIfNotExists("0:updates/"),i))r&&(a=yield this.emmcCommonUpdateProcess({payload:r.binary,filePath:`0:updates/${r.fileName}`,processedSize:a,totalSize:s}));try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.ConfirmOnDevice),yield this.startEmmcFirmwareUpdate({path:"0:updates"})}catch(r){if($ce1f303d0aa8ec51$var$Log$4.error("triggerFirmwareUpdateEmmc error: ",r),null==r?void 0:r.errorCode){let i=[$3FhS8.HardwareErrorCode.ActionCancelled,$3FhS8.HardwareErrorCode.CallQueueActionCancelled,$3FhS8.HardwareErrorCode.FirmwareVerificationFailed,$3FhS8.HardwareErrorCode.BleDeviceNotBonded,$3FhS8.HardwareErrorCode.BleServiceNotFound,$3FhS8.HardwareErrorCode.BlePoweredOff,$3FhS8.HardwareErrorCode.BleUnsupported,$3FhS8.HardwareErrorCode.BlePermissionError,$3FhS8.HardwareErrorCode.BleLocationError,$3FhS8.HardwareErrorCode.BleDeviceBondError,$3FhS8.HardwareErrorCode.BleCharacteristicNotifyError,$3FhS8.HardwareErrorCode.BleTimeoutError,$3FhS8.HardwareErrorCode.BleWriteCharacteristicError,$3FhS8.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission];if(i.includes(r.errorCode))throw r}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareError,(null==r?void 0:r.message)||"Firmware update failed")}yield $3FhS8.wait(1500),this.postProcessingMessage("firmware"),this.postProgressMessage(0,"installingFirmware");let o=Date.now(),d=3e5,f=0,l=3;for(;;){if(Date.now()-o>d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Firmware update process timeout after 5 minutes");try{let r=this.device.getCommands().typedCall.bind(this.device.getCommands()),i=3e3,n=yield Promise.race([r("GetFeatures","Features",{}),new Promise((r,n)=>{setTimeout(()=>n($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNotResponse,"GetFeatures timeout",{method:"GetFeatures",timeoutMs:i})),i)})]);f=0;let s=n.message,a=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(s).join("."),o=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(s).join("."),d=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(s).join(".");if("0.0.0"!==d)return this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.FirmwareUpdateCompleted),$ce1f303d0aa8ec51$var$DevicePool.resetState(),{bootloaderVersion:a,bleVersion:o,firmwareVersion:d};yield $3FhS8.wait(1e3)}catch(n){$ce1f303d0aa8ec51$var$Log$4.log("getFeatures error",n);let r=!0,i=this.extractUpdateModeProgress(n);if(null!==i?(f=0,this.postProgressMessage(i,"installingFirmware"),yield $3FhS8.wait(1e3),r=!1):this.isGetFeaturesTimeoutError(n)?(f+=1)<=l&&(yield $3FhS8.wait(1e3),r=!1):f=0,r){yield $3FhS8.wait(1e3);let r=this.isBleReconnect()&&(this.params.bleBinary||this.params.bleVersion)?18e4:6e4;f=0,yield this.waitForDeviceReconnect(r)}}}})}extractUpdateModeProgress(r){let i=this.normalizeErrorMessage(r);if(!i)return null;let n=i.match(/Update mode\s*(\d+)/i);if(!n)return null;let s=parseInt(n[1],10);return Number.isNaN(s)?null:s}isGetFeaturesTimeoutError(r){var i;return r instanceof $3FhS8.HardwareError&&r.errorCode===$3FhS8.HardwareErrorCode.CallMethodNotResponse&&(null===(i=r.params)||void 0===i?void 0:i.method)==="GetFeatures"}normalizeErrorMessage(r){if(!r)return"";if("string"==typeof r)return r;if("object"==typeof r){let{message:i}=r;if("string"==typeof i)return i;if(null!=i)return String(i)}return""}canPromptWebUsbSwitchFirmwareReconnect(){return!!this.isSwitchFirmware&&$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb($ce1f303d0aa8ec51$var$DataManager.getSettings("env"))&&!this.payload.skipWebDevicePrompt&&this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE)>0}waitForDeviceReconnect(r){var i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let o=Date.now(),d=this.isBleReconnect(),f=0;for(;Date.now()-o{setTimeout(()=>{i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed))},3e3)})]);return}catch(r){$ce1f303d0aa8ec51$var$Log$4.log("catch Bluetooth error when device is restarting: ",r)}else{let r=yield null===(n=this.device.deviceConnector)||void 0===n?void 0:n.enumerate(),i=null!==(s=null==r?void 0:r.descriptors)&&void 0!==s?s:[],o=this.canPromptWebUsbSwitchFirmwareReconnect();if(o){if((f+=1)>4){this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.SwitchFirmwareReconnectDevice);try{yield this._promptDeviceForSwitchFirmwareWebDevice()}catch(r){$ce1f303d0aa8ec51$var$Log$4.log("WebUSB re-authorization failed: ",r)}f=0}}else f=0;let{deviceList:d}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(i,this.connectId);if(1===d.length){this.device.updateFromCache(d[0]),yield this.device.acquire(),this.device.commands.disposed=!1,this.device.getCommands().mainId=null!==(a=this.device.mainId)&&void 0!==a?a:"";return}}yield $3FhS8.wait(1e3)}catch(r){console.error("Device reconnect failed: ",r),$ce1f303d0aa8ec51$var$Log$4.error("Device reconnect failed:",r),yield $3FhS8.wait(1e3)}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound,`Device not reconnected within ${r/1e3}s`)})}}const $ce1f303d0aa8ec51$var$Log$3=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$PromptWebDeviceAccess extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{deviceSerialNumberFromUI:n}=this.payload;yield $ce1f303d0aa8ec51$var$TransportManager.configure();let s="webusb"===$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if(!s)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Not webusb environment"));try{let a,o;if(n)o=[{path:n,device:{serialNumber:n},debug:!0}];else{if(!(a=yield null===(r=this.connector)||void 0===r?void 0:r.promptDeviceAccess()))return yield Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.WebDevicePromptAccessError));s&&(o=[{path:null!==(i=a.serialNumber)&&void 0!==i?i:"",device:a,debug:!0}])}let{deviceList:d}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(o);if(d.length>0)return{device:d[0].toMessageObject()};return{device:null}}catch(r){return $ce1f303d0aa8ec51$var$Log$3.debug(r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Please select the device to connect"))}})}}class $ce1f303d0aa8ec51$var$CipherKeyValue extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{let i=$ce1f303d0aa8ec51$var$validatePath(r.path);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"key",type:"string"},{name:"value",type:"hexString"},{name:"encrypt",type:"boolean"},{name:"askOnEncrypt",type:"boolean"},{name:"askOnDecrypt",type:"boolean"},{name:"iv",type:"hexString"}]),this.params.push({address_n:i,key:r.key,value:$ce1f303d0aa8ec51$var$formatAnyHex(r.value),encrypt:r.encrypt,ask_on_encrypt:r.askOnEncrypt,ask_on_decrypt:r.askOnDecrypt,iv:$ce1f303d0aa8ec51$var$formatAnyHex(r.iv)})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;iObject.assign({coin:i},r)},evm:{methodName:"evmGetAddress",getParams:(r,i)=>{let n;let{path:s,showOnOneKey:a}=r;return i&&(n=parseInt(i)),{chainId:n,path:s,showOnOneKey:a}}},sol:{methodName:"solGetAddress"},algo:{methodName:"algoGetAddress"},near:{methodName:"nearGetAddress"},stc:{methodName:"starcoinGetAddress"},cfx:{methodName:"confluxGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r;return{chainId:parseInt(null!=i?i:"1029"),path:n,showOnOneKey:s}}},tron:{methodName:"tronGetAddress"},aptos:{methodName:"aptosGetAddress"},xrp:{methodName:"xrpGetAddress"},cosmos:{methodName:"cosmosGetPublicKey",getParams:r=>{let{path:i,prefix:n,showOnOneKey:s}=r;return{hrp:n,path:i,showOnOneKey:s}}},ada:{methodName:"cardanoGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r,a="string"==typeof n?`${n}/0/0`:$ce1f303d0aa8ec51$var$serializedPath([...n,0,0]),o="string"==typeof n?`${n}/2/0`:$ce1f303d0aa8ec51$var$serializedPath([...n,2,0]),d=1;return i&&(d=i===$ce1f303d0aa8ec51$var$Mainnet?1:0),{addressParameters:{addressType:$5xch2.Messages.CardanoAddressType.BASE,path:a,stakingPath:o},protocolMagic:764824073,networkId:d,derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,showOnOneKey:s,address:"",isCheck:!1}}},sui:{methodName:"suiGetAddress"},benfen:{methodName:"benfenGetAddress"},fil:{methodName:"filecoinGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r,a=!1;return i&&(a=i!==$ce1f303d0aa8ec51$var$Mainnet),{isTestnet:a,path:n,showOnOneKey:s}}},dot:{methodName:"polkadotGetAddress",getParams:(r,i)=>{let{path:n,prefix:s,showOnOneKey:a}=r;if(!s||!i)throw Error("Invalid params");return{prefix:parseInt(s),network:i,path:n,showOnOneKey:a}}},kaspa:{methodName:"kaspaGetAddress",getParams:r=>{let{path:i,prefix:n,showOnOneKey:s,useTweak:a}=r;return{scheme:"schnorr",prefix:n,path:i,showOnOneKey:s,useTweak:a}}},nexa:{methodName:"nexaGetAddress",getParams:r=>{let{path:i,prefix:n,showOnOneKey:s}=r;return{scheme:"Schnorr",prefix:n,path:i,showOnOneKey:s}}},dynex:{methodName:"dnxGetAddress"},nervos:{methodName:"nervosGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r;return{network:i,path:n,showOnOneKey:s}}},scdo:{methodName:"scdoGetAddress"},ton:{methodName:"tonGetAddress"},alph:{methodName:"alephiumGetAddress"},nostr:{methodName:"nostrGetPublicKey"},neo:{methodName:"neoGetAddress"},stellar:{methodName:"stellarGetAddress"}};class $ce1f303d0aa8ec51$var$AllNetworkGetAddressBase extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.abortController=null}init(){var r,i;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"bundle",type:"array"}]),null===(i=null===(r=this.payload)||void 0===r?void 0:r.bundle)||void 0===i||i.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"network",type:"string",required:!0},{name:"chainName",type:"string"},{name:"showOnOneKey",type:"boolean"}])})}generateMethodName({network:r,payload:i,originalIndex:n}){var s,a;let{name:o,coin:d}=$ce1f303d0aa8ec51$var$networkAliases[r]||{name:r,coin:null==i?void 0:i.chainName},f=$ce1f303d0aa8ec51$var$networkConfigMap[o];if(!f)throw Error(`Unsupported network: ${r}`);return{methodName:f.methodName,params:Object.assign(Object.assign({},null!==(a=null===(s=null==f?void 0:f.getParams)||void 0===s?void 0:s.call(f,i,d,f.methodName))&&void 0!==a?a:i),{originPayload:i}),_originRequestParams:i,_originalIndex:n}}callMethod(r,i,n){var s,a,o;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let d;let f=$ce1f303d0aa8ec51$var$findMethod({event:$ce1f303d0aa8ec51$var$IFRAME.CALL,type:$ce1f303d0aa8ec51$var$IFRAME.CALL,payload:Object.assign({connectId:this.payload.connectId,deviceId:this.payload.deviceId,method:r},i)});f.connector=this.connector,f.postMessage=this.postMessage,this.context&&(null===(s=f.setContext)||void 0===s||s.call(f,this.context)),f.requestContext=$ce1f303d0aa8ec51$var$createRequestContext(f.responseID,r,{sdkInstanceId:this.sdkInstanceId,connectId:this.payload.connectId,parentResponseID:this.responseID});let l=()=>{var r;null===(r=this.abortController)||void 0===r||r.abort($3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.RepeatUnlocking])},u=(...[r,i])=>{"ButtonRequest_PinEntry"===i.code||"ButtonRequest_AttachPin"===i.code?l():$ce1f303d0aa8ec51$var$onDeviceButtonHandler(r,i)};try{f.init(),null===(a=f.setDevice)||void 0===a||a.call(f,this.device),f.context=this.context,f.requestContext&&this.device&&$ce1f303d0aa8ec51$var$updateRequestContext(f.requestContext.responseID,{deviceInstanceId:this.device.instanceId,commandsInstanceId:null===(o=this.device.commands)||void 0===o?void 0:o.instanceId}),this.device.on($ce1f303d0aa8ec51$var$DEVICE.BUTTON,u),this.device.on($ce1f303d0aa8ec51$var$DEVICE.PIN,l),this.device.on($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,l),$ce1f303d0aa8ec51$var$preCheckDeviceSupport(this.device,f);let r=yield f.run();if(!Array.isArray(r)||0===r.length)throw Error("No response");d=r.map((r,s)=>Object.assign(Object.assign({},i.bundle[s]._originRequestParams),{success:!0,payload:Object.assign(Object.assign({},r),{rootFingerprint:n})})),f.requestContext&&$ce1f303d0aa8ec51$var$completeRequestContext(f.requestContext.responseID)}catch(n){let r=$ce1f303d0aa8ec51$var$handleSkippableHardwareError(n,this.device,f);if(r)d=i.bundle.map(i=>Object.assign(Object.assign({},i._originRequestParams),{success:!1,payload:{error:r.message,code:r.errorCode,params:r.params,connectId:f.connectId,deviceId:f.deviceId}}));else throw n;f.requestContext&&$ce1f303d0aa8ec51$var$completeRequestContext(f.requestContext.responseID,n instanceof Error?n:Error(String(n)))}finally{this.device.off($ce1f303d0aa8ec51$var$DEVICE.BUTTON,u),this.device.off($ce1f303d0aa8ec51$var$DEVICE.PIN,l),this.device.off($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,l)}return d})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("GetPublicKey","PublicKey",{address_n:[$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$toHardened(1),$ce1f303d0aa8ec51$var$toHardened(0)],coin_name:"Testnet",script_type:"SPENDADDRESS",show_display:!1});if(this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.CLOSE_UI_PIN_WINDOW)),null==r.message.root_fingerprint)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter);return this.abortController=new AbortController,this.getAllNetworkAddress(r.message.root_fingerprint).catch(r=>{if(r instanceof $3FhS8.HardwareError&&r.errorCode===$3FhS8.HardwareErrorCode.RepeatUnlocking)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RepeatUnlocking,r.message);throw r})})}}function $ce1f303d0aa8ec51$var$preCheckDeviceSupport(r,i){let n=$ce1f303d0aa8ec51$var$getMethodVersionRange(r.features,r=>i.getVersionRange()[r]),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r.features).join(".");if(n&&$ce1f303d0aa8ec51$var$semver__default.default.valid(n.min)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(s,n.min))throw $3FhS8.ERRORS.createNeedUpgradeFirmwareHardwareError({currentVersion:s,requireVersion:n.min,methodName:i.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(r.features)});if(i.strictCheckDeviceSupport&&!n)throw $3FhS8.ERRORS.createDeviceNotSupportMethodError(i.name,$ce1f303d0aa8ec51$var$getFirmwareType(r.features))}function $ce1f303d0aa8ec51$var$handleSkippableHardwareError(r,i,n){var s,a,o,d,f,l;let u;if(r instanceof $3FhS8.HardwareError&&r.errorCode!==$3FhS8.HardwareErrorCode.RuntimeError){let{errorCode:i}=r;i===$3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware?u=r:i===$3FhS8.HardwareErrorCode.DeviceNotSupportMethod&&(u=r)}else if((null===(s=r.message)||void 0===s?void 0:s.includes("Failure_UnexpectedMessage"))||(null===(a=r.message)||void 0===a?void 0:a.includes("Failure_UnknownMessage"))){let r=$ce1f303d0aa8ec51$var$getMethodVersionRange(i.features,r=>n.getVersionRange()[r]),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(i.features).join(".");u=r&&$ce1f303d0aa8ec51$var$semver__default.default.valid(r.min)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(s,r.min)?$3FhS8.ERRORS.createNeedUpgradeFirmwareHardwareError({currentVersion:s,requireVersion:r.min,methodName:n.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(i.features)}):$3FhS8.ERRORS.createDeviceNotSupportMethodError(n.name,$ce1f303d0aa8ec51$var$getFirmwareType(i.features))}else((null===(d=null===(o=r.message)||void 0===o?void 0:o.toLowerCase())||void 0===d?void 0:d.includes("forbidden key path"))||(null===(l=null===(f=r.message)||void 0===f?void 0:f.toLowerCase())||void 0===l?void 0:l.includes("invalid path")))&&(u=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,r.message));return u}class $ce1f303d0aa8ec51$var$AllNetworkGetAddress extends $ce1f303d0aa8ec51$var$AllNetworkGetAddressBase{getAllNetworkAddress(r){var i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let o=[],d={},{bundle:f}=this.payload,l=f.map((r,i)=>this.generateMethodName({network:r.network,payload:r,originalIndex:i})).reduce((r,i)=>(r[i.methodName]||(r[i.methodName]=[]),r[i.methodName].push(i),r),{}),u=0;for(let[o,f]of Object.entries(l)){let l={bundle:f.map(r=>Object.assign({},r.params))};if(null===(i=this.abortController)||void 0===i?void 0:i.signal.aborted)throw Error($3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.RepeatUnlocking]);let c=yield this.callMethod(o,l,r);if(null===(n=this.abortController)||void 0===n?void 0:n.signal.aborted)throw Error($3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.RepeatUnlocking]);for(let r=0;r1){let r=Math.round((u+1)/this.payload.bundle.length*100);this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.DEVICE_PROGRESS,{progress:r}))}u++}for(let r=0;r{let n;if(i){let r=i.toLowerCase();n=$ce1f303d0aa8ec51$var$bitcoin.find(i=>i.name.toLowerCase()===r||i.label.toLowerCase()===r)}else if(r){let i=$ce1f303d0aa8ec51$var$fromHardened(r[1]);n=$ce1f303d0aa8ec51$var$bitcoin.find(r=>r.slip44===i)}if(!n){if(i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`Invalid coin name: ${i}`);if(r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`Invalid path: ${r[0]}`);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter)}return n},$ce1f303d0aa8ec51$var$getCoinAndScriptType=(r,i,n)=>{let s=$ce1f303d0aa8ec51$var$getCoinInfo(r,i).name,a=n;void 0===a&&(a=$ce1f303d0aa8ec51$var$isMultisigPath(r));let o=$ce1f303d0aa8ec51$var$getScriptType(r);return"SPENDMULTISIG"!==o||a||(o="SPENDADDRESS"),{coinName:s,scriptType:null!=o?o:"SPENDADDRESS"}};function $ce1f303d0aa8ec51$var$isCoinNameInList(r,i){for(let n=0;n{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,1);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"coin",type:"string"},{name:"showOnOneKey",type:"boolean"},{name:"multisig",type:"object"},{name:"scriptType",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{multisig:a,coin:o}=r,{scriptType:d}=r;d||"SPENDMULTISIG"!==(d=$ce1f303d0aa8ec51$var$getScriptType(n))||a||(d="SPENDADDRESS");let f=$ce1f303d0aa8ec51$var$getCoinInfo(n,o).name;this.params.push({address_n:n,show_display:s,coin_name:f,multisig:a,script_type:d||"SPENDADDRESS"})})}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange(this.params.map(r=>r.coin_name))}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;ir.address_n.length<3);if(d)throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.ForbiddenKeyPath,"Path length must be greater than 3");let f=$ce1f303d0aa8ec51$var$supportBatchPublicKey(r.features,a);if(!f)throw $3FhS8.createDeviceNotSupportMethodError("BatchGetPublickeys",$ce1f303d0aa8ec51$var$getFirmwareType(r.features));let l=i.find(r=>!$ce1f303d0aa8ec51$var$isEqualBip44CoinType(r.address_n,s));if((null==a?void 0:a.ignoreCoinType)===!1&&l)throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.ForbiddenKeyPath);let u=10,c=$ce1f303d0aa8ec51$var$getDeviceType(r.features);$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(c)?u=10:$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(c)&&(u=20);let p={public_keys:[],hd_nodes:[]},h=$ce1f303d0aa8ec51$var$splitArray(i,u);for(let i of h){let s=yield r.commands.typedCall("BatchGetPublickeys","EcdsaPublicKeys",{paths:i,ecdsa_curve_name:n,include_node:null!==(o=null==a?void 0:a.includeNode)&&void 0!==o&&o});if("EcdsaPublicKeys"!==s.type)throw $3FhS8.createDeviceNotSupportMethodError("BatchGetPublickeys",$ce1f303d0aa8ec51$var$getFirmwareType(r.features));p.root_fingerprint=s.message.root_fingerprint,p.public_keys.push(...s.message.public_keys),p.hd_nodes.push(...s.message.hd_nodes)}if(p.hd_nodes.length!==i.length&&(null==a?void 0:a.includeNode))throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"BatchGetPublickeys failed, hd_nodes length not match");if(p.public_keys.length!==i.length&&!(null==a?void 0:a.includeNode))throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"BatchGetPublickeys failed, public_keys length not match");return p})}const $ce1f303d0aa8ec51$var$VERSION_BYTES={XPUB:76067358,YPUB:77429938,ZPUB:78792518};function $ce1f303d0aa8ec51$var$getVersionBytes(r,i){if("bitcoin"===r.toLowerCase())switch(i){case"SPENDADDRESS":case"SPENDMULTISIG":default:return $ce1f303d0aa8ec51$var$VERSION_BYTES.XPUB;case"SPENDP2SHWITNESS":return $ce1f303d0aa8ec51$var$VERSION_BYTES.YPUB;case"SPENDWITNESS":return $ce1f303d0aa8ec51$var$VERSION_BYTES.ZPUB}else if("litecoin"===r.toLowerCase())switch(i){case"SPENDADDRESS":case"SPENDMULTISIG":return 27108450;case"SPENDP2SHWITNESS":return 28471030;case"SPENDWITNESS":return 78792518}else if("dogecoin"===r.toLowerCase()){if("SPENDADDRESS"===i)return 49990397;if("SPENDMULTISIG"===i)return 76067358}}function $ce1f303d0aa8ec51$var$base58Check(r){let i=$91294e775a6684d7$exports.sha256($91294e775a6684d7$exports.sha256(new Uint8Array(r))).slice(0,4),n=$ce1f303d0aa8ec51$require$Buffer.concat([new Uint8Array(r),new Uint8Array(i)]),s="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",a="",o=BigInt(`0x${n.toString("hex")}`),d=BigInt(58);for(;o>0;){let r=Number(o%d);o/=d,a=s[r]+a}for(let r=0;r{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,1);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"coin",type:"string"},{name:"showOnOneKey",type:"boolean"},{name:"scriptType",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{multisig:a,coin:o}=r,{scriptType:d}=r;d||"SPENDMULTISIG"!==(d=$ce1f303d0aa8ec51$var$getScriptType(n))||a||(d="SPENDADDRESS");let f=$ce1f303d0aa8ec51$var$getCoinInfo(n,o).name;this.params.push({address_n:n,show_display:s,coin_name:f,script_type:d||"SPENDADDRESS"})})}isBtcNetwork(r){return"Testnet"===r.coin_name||"Bitcoin"===r.coin_name}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange(this.params.map(r=>r.coin_name))}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];try{let i=this.params.some(r=>r.show_display);if(i||!this.hasBundle)throw Error("Goto getPublickey");for(let r of this.params){let i=$ce1f303d0aa8ec51$var$getVersionBytes(r.coin_name,r.script_type);if(!i)throw Error(`Invalid coinName, not support generate xpub for scriptType: ${r.script_type}`)}let n=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"secp256k1",0,{includeNode:!0,ignoreCoinType:!0});if(!(null==n?void 0:n.hd_nodes)||this.params.length!==n.hd_nodes.length)throw Error("Invalid response from Publickeys");for(let i=0;i/*)`}r.push({path:o,node:a,xpub:d,root_fingerprint:f,xpubSegwit:l})}}catch(i){if(i instanceof $3FhS8.HardwareError){let{errorCode:r}=i;if(r===$3FhS8.HardwareErrorCode.PinCancelled||r===$3FhS8.HardwareErrorCode.ActionCancelled||r===$3FhS8.HardwareErrorCode.ResponseUnexpectTypeError||r===$3FhS8.HardwareErrorCode.PinInvalid)throw i}r=[];for(let i=0;i/*)`}r.push(a)}}return $ce1f303d0aa8ec51$var$validateResult(r,["xpub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?r:r[0])})}}class $ce1f303d0aa8ec51$var$BTCSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"coin",type:"string"},{name:"noScriptType",type:"boolean"},{name:"dAppSignType",type:"string"}]);let{path:r,messageHex:i,coin:n,noScriptType:s,dAppSignType:a}=this.payload,o=s,d=!1,f=$ce1f303d0aa8ec51$var$validatePath(r),{coinName:l,scriptType:u}=$ce1f303d0aa8ec51$var$getCoinAndScriptType(f,n,!1),c=u;"ecdsa"===a||"bip322-simple"===a?"ecdsa"===a?o=!0:(d=!0,o=!1):c=u,this.params={address_n:f,message:$ce1f303d0aa8ec51$var$formatAnyHex(i),coin_name:l,script_type:c,no_script_type:o,is_bip322_simple:d}}getVersionRange(){return this.payload.dAppSignType?{pro:{min:"4.9.3"}}:$ce1f303d0aa8ec51$var$getBitcoinForkVersionRange([this.params.coin_name])}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("SignMessage","MessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$BTCSignPsbt extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"psbt",type:"hexString",required:!0},{name:"coin",type:"string"}]);let{psbt:r,coin:i}=this.payload,n=$ce1f303d0aa8ec51$var$getCoinInfo(void 0,i);this.params={psbt:$ce1f303d0aa8ec51$var$formatAnyHex(r),coin_name:n.name}}getVersionRange(){return{pro:{min:"4.9.3"},model_classic1s:{min:"3.10.1"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.device.commands.typedCall("SignPsbt","SignedPsbt",Object.assign({},this.params));return r.message}catch(n){let{message:r}=n,i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if(r.includes("PSBT parse failed")&&(i===$3FhS8.EDeviceType.Classic1s||i===$3FhS8.EDeviceType.ClassicPure))throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.BTCPsbtTooManyUtxos,"PSBT too many utxos",{count:5});throw n}})}}const $ce1f303d0aa8ec51$var$requestPrevTxInfo$1=({typedCall:r,txRequest:{request_type:i,details:n},refTxs:s})=>{let{tx_hash:a}=n;if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: unknown details.tx_hash");let o=s[a.toLowerCase()];if(!o)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown tx: ${a}`);if("TXINPUT"===i){if(!o.bin_outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXINPUT: ${a}`);return r("TxAckPrevInput","TxRequest",{tx:{input:o.inputs[n.request_index]}})}if("TXOUTPUT"===i){if(!o.bin_outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXOUTPUT: ${a}`);return r("TxAckPrevOutput","TxRequest",{tx:{output:o.bin_outputs[n.request_index]}})}if("TXORIGINPUT"===i){if(!o.outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXORIGINPUT: ${a}`);return r("TxAckInput","TxRequest",{tx:{input:o.inputs[n.request_index]}})}if("TXORIGOUTPUT"===i){if(!o.outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXORIGOUTPUT: ${a}`);return r("TxAckOutput","TxRequest",{tx:{output:o.outputs[n.request_index]}})}if("TXEXTRADATA"===i){if("number"!=typeof n.extra_data_len)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_len");if("number"!=typeof n.extra_data_offset)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_offset");if("string"!=typeof o.extra_data)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: No extra data for transaction ${o.hash}`);let i=o.extra_data,s=n.extra_data_len,a=n.extra_data_offset,d=i.substring(2*a,(a+s)*2);return r("TxAckPrevExtraData","TxRequest",{tx:{extra_data_chunk:d}})}if("TXMETA"===i){let i=o.extra_data,n={version:o.version,lock_time:o.lock_time,inputs_count:o.inputs.length,outputs_count:o.outputs?o.outputs.length:o.bin_outputs.length,timestamp:o.timestamp,version_group_id:o.version_group_id,expiry:o.expiry,branch_id:o.branch_id,extra_data_len:i?i.length/2:void 0};return r("TxAckPrevMeta","TxRequest",{tx:n})}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Unknown request type: ${i}`)},$ce1f303d0aa8ec51$var$requestSignedTxInfo$1=({typedCall:r,txRequest:{request_type:i,details:n},inputs:s,outputs:a})=>{if("TXINPUT"===i)return r("TxAckInput","TxRequest",{tx:{input:s[n.request_index]}});if("TXOUTPUT"===i)return r("TxAckOutput","TxRequest",{tx:{output:a[n.request_index]}});if("TXMETA"===i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXMETA from signed transaction");if("TXEXTRADATA"===i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXEXTRADATA from signed transaction");throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestSignedTxInfo: Unknown request type: ${i}`)},$ce1f303d0aa8ec51$var$requestTxAck$1=r=>{let{tx_hash:i}=r.txRequest.details;return i?$ce1f303d0aa8ec51$var$requestPrevTxInfo$1(r):$ce1f303d0aa8ec51$var$requestSignedTxInfo$1(r)},$ce1f303d0aa8ec51$var$saveTxSignatures$1=(r,i,n)=>{if(!n)return;let{signature_index:s,signature:a,serialized_tx:o}=n;if(o&&r.push(o),"number"==typeof s){if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"saveTxSignatures: Unexpected null in trezor:TxRequestSerialized signature.");i[s]=a}},$ce1f303d0aa8ec51$var$processTxRequest$2=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{typedCall:i,txRequest:n,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f}=r;if($ce1f303d0aa8ec51$var$saveTxSignatures$1(d,f,n.serialized),"TXFINISHED"===n.request_type)return Promise.resolve({signatures:f,serializedTx:d.join("")});let{message:l}=yield $ce1f303d0aa8ec51$var$requestTxAck$1(r);return $ce1f303d0aa8ec51$var$processTxRequest$2({typedCall:i,txRequest:l,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f})});var $ce1f303d0aa8ec51$var$signtx=(r,i,n,s,a,o)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d={};s.forEach(r=>{d[r.hash.toLowerCase()]=r});let{message:f}=yield r("SignTx","TxRequest",Object.assign(Object.assign({},a),{inputs_count:i.length,outputs_count:n.length,coin_name:o}));return $ce1f303d0aa8ec51$var$processTxRequest$2({typedCall:r,txRequest:f,refTxs:d,inputs:i,outputs:n,serializedTx:[],signatures:[]})});const $ce1f303d0aa8ec51$var$requestPrevTxInfo=({txRequest:{request_type:r,details:i},refTxs:n})=>{let{tx_hash:s}=i;if(!s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: unknown details.tx_hash");let a=n[s.toLowerCase()];if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown tx: ${s}`);if(!a.bin_outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: bin_outputs not set tx: ${s}`);if("TXINPUT"===r)return{inputs:[a.inputs[i.request_index]]};if("TXOUTPUT"===r)return{bin_outputs:[a.bin_outputs[i.request_index]]};if("TXEXTRADATA"===r){if("number"!=typeof i.extra_data_len)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_len");if("number"!=typeof i.extra_data_offset)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_offset");if("string"!=typeof a.extra_data)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: No extra data for transaction ${a.hash}`);let r=a.extra_data,n=i.extra_data_len,s=i.extra_data_offset,o=r.substring(2*s,(s+n)*2);return{extra_data:o}}if("TXMETA"===r){let r=a.extra_data,i={version:a.version,lock_time:a.lock_time,inputs_cnt:a.inputs.length,outputs_cnt:a.bin_outputs.length,timestamp:a.timestamp,version_group_id:a.version_group_id,expiry:a.expiry,branch_id:a.branch_id};return"string"==typeof r&&0!==r.length?Object.assign(Object.assign({},i),{extra_data_len:r.length/2}):i}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Unknown request type: ${r}`)},$ce1f303d0aa8ec51$var$requestSignedTxInfo=({txRequest:{request_type:r,details:i},inputs:n,outputs:s})=>{if("TXINPUT"===r)return{inputs:[n[i.request_index]]};if("TXOUTPUT"===r)return{outputs:[s[i.request_index]]};if("TXMETA"===r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXMETA from signed transaction");if("TXEXTRADATA"===r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXEXTRADATA from signed transaction");throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestSignedTxInfo: Unknown request type: ${r}`)},$ce1f303d0aa8ec51$var$requestTxAck=r=>{let{tx_hash:i}=r.txRequest.details;return i?$ce1f303d0aa8ec51$var$requestPrevTxInfo(r):$ce1f303d0aa8ec51$var$requestSignedTxInfo(r)},$ce1f303d0aa8ec51$var$saveTxSignatures=(r,i,n)=>{if(!n)return;let{signature_index:s,signature:a,serialized_tx:o}=n;if(o&&r.push(o),"number"==typeof s){if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"saveTxSignatures: Unexpected null in oneKey:TxRequestSerialized signature.");i[s]=a}},$ce1f303d0aa8ec51$var$processTxRequest$1=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{typedCall:i,txRequest:n,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f}=r;if($ce1f303d0aa8ec51$var$saveTxSignatures(d,f,n.serialized),"TXFINISHED"===n.request_type)return Promise.resolve({signatures:f,serializedTx:d.join("")});let l=$ce1f303d0aa8ec51$var$requestTxAck(r),{message:u}=yield i("TxAck","TxRequest",{tx:l});return $ce1f303d0aa8ec51$var$processTxRequest$1({typedCall:i,txRequest:u,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f})});var $ce1f303d0aa8ec51$var$signtxLegacy=(r,i,n,s,a,o)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d={};s.forEach(r=>{d[r.hash.toLowerCase()]=r});let{message:f}=yield r("SignTx","TxRequest",Object.assign(Object.assign({},a),{inputs_count:i.length,outputs_count:n.length,coin_name:o}));return $ce1f303d0aa8ec51$var$processTxRequest$1({typedCall:r,txRequest:f,refTxs:d,inputs:i,outputs:n,serializedTx:[],signatures:[]})});class $ce1f303d0aa8ec51$var$BTCSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"coin",type:"string",required:!0},{name:"inputs",type:"array",required:!0},{name:"outputs",type:"array",required:!0},{name:"refTxs",type:"array",required:!0,allowEmpty:!0},{name:"locktime",type:"number"},{name:"version",type:"number"},{name:"expiry",type:"number"},{name:"overwintered",type:"boolean"},{name:"versionGroupId",type:"number"},{name:"branchId",type:"number"},{name:"timestamp",type:"number"}]),this.payload.refTxs.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"hash",type:"hexString",required:!0},{name:"inputs",type:"array",required:!0},{name:"bin_outputs",type:"array",required:!Array.isArray(r.outputs)},{name:"outputs",type:"array"},{name:"version",type:"number",required:!0},{name:"lock_time",type:"number",required:!0},{name:"extra_data",type:"string"},{name:"timestamp",type:"number"},{name:"version_group_id",type:"number"}])}),this.payload.inputs.forEach(r=>{$ce1f303d0aa8ec51$var$validatePath(r.address_n);let i=$ce1f303d0aa8ec51$var$isSegwitPath(r.address_n);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"hexString",required:!0},{name:"prev_index",type:"number",required:!0},{name:"script_type",type:"string"},{name:"amount",type:"string",required:i},{name:"sequence",type:"number"},{name:"multisig",type:"object"}])}),this.payload.outputs.forEach(r=>{if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"address_n",type:"array"},{name:"address",type:"string"},{name:"amount",type:"string"},{name:"op_return_data",type:"string"},{name:"multisig",type:"object"}]),Object.prototype.hasOwnProperty.call(r,"address_n")&&Object.prototype.hasOwnProperty.call(r,"address"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Cannot use address and address_n in one output");if(r.address_n){let i=$ce1f303d0aa8ec51$var$getOutputScriptType(r.address_n);if(r.script_type!==i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`Output change script_type should be set to ${i}`)}});let{inputs:r,outputs:i,refTxs:n,account:s,coin:a}=this.payload,o=$ce1f303d0aa8ec51$var$getCoinInfo(void 0,a).name;this.params={inputs:r,outputs:i,refTxs:n,addresses:s?s.addresses:void 0,options:{lock_time:this.payload.locktime,timestamp:this.payload.timestamp,version:this.payload.version,expiry:this.payload.expiry,overwintered:this.payload.overwintered,version_group_id:this.payload.versionGroupId,branch_id:this.payload.branchId},coinName:o}}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange([this.params.coinName])}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:r,params:i}=this,n=r.unavailableCapabilities.replaceTransaction,{refTxs:s}=i,a=n?$ce1f303d0aa8ec51$var$signtxLegacy:$ce1f303d0aa8ec51$var$signtx,o=yield a(r.commands.typedCall.bind(r.commands),i.inputs,i.outputs,s,i.options,i.coinName);return o})}}class $ce1f303d0aa8ec51$var$BTCVerifyMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"address",type:"string",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"signature",type:"hexString",required:!0},{name:"coin",type:"string",required:!0}]);let{coin:r}=this.payload,{address:i,messageHex:n,signature:s}=$ce1f303d0aa8ec51$var$formatAnyHex(this.payload),a=$ce1f303d0aa8ec51$var$getCoinInfo(void 0,r).name;this.params={address:i,message:n,signature:s,coin_name:a}}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange([this.params.coin_name])}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("VerifyMessage","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$ConfluxGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i,n;let s=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"chainId",type:"number"},{name:"showOnOneKey",type:"boolean"}]);let a=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:s,chain_id:null!==(n=r.chainId)&&void 0!==n?n:1029,show_display:a})})}getVersionRange(){return{model_mini:{min:"2.4.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{if(!r)return["",""];let n=r.slice(0,i),s=r.slice(i);return[n,s]};class $ce1f303d0aa8ec51$var$ConfluxSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.addressN=[],this.processTxRequest=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!r.data_length){let i=r.signature_v,n=r.signature_r,s=r.signature_s;if(null==i||null==n||null==s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"sign transaction failed");return Promise.resolve({v:`0x${i.toString(16)}`,r:`0x${n}`,s:`0x${s}`})}let[n,s]=$ce1f303d0aa8ec51$var$cutString(i,2*r.data_length),a=yield this.device.commands.typedCall("ConfluxTxAck","ConfluxTxRequest",{data_chunk:n});return this.processTxRequest(a.message,s)}),this.evmSignTx=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{to:n,value:s,gasPrice:a,gasLimit:o,nonce:d,data:f,chainId:l,epochHeight:u,storageLimit:c}=i,p=null==f?0:f.length/2,[h,g]=$ce1f303d0aa8ec51$var$cutString(f,2048),m={address_n:r,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),gas_price:$ce1f303d0aa8ec51$var$stripHexStartZeroes(a),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(o),to:n,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(s),epoch_height:$ce1f303d0aa8ec51$var$stripHexStartZeroes(u),storage_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(c),chain_id:l};0!==p&&(m=Object.assign(Object.assign({},m),{data_length:p,data_initial_chunk:h}));let v=yield this.device.commands.typedCall("ConfluxSignTx","ConfluxTxRequest",m);return this.processTxRequest(v.message,g)})}init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload;this.addressN=$ce1f303d0aa8ec51$var$validatePath(r,3);let n=i,s=[{name:"to",type:"hexString",required:!0},{name:"value",type:"hexString",required:!0},{name:"gasLimit",type:"hexString",required:!0},{name:"gasPrice",type:"hexString",required:!0},{name:"nonce",type:"hexString",required:!0},{name:"epochHeight",type:"hexString",required:!0},{name:"storageLimit",type:"hexString",required:!0},{name:"chainId",type:"number",required:!0},{name:"data",type:"hexString"}];$ce1f303d0aa8ec51$var$validateParams(n,s),this.formattedTx=$ce1f303d0aa8ec51$var$formatAnyHex(n)}getVersionRange(){return{model_mini:{min:"2.4.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{addressN:r,formattedTx:i}=this;if(null==i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"ConfluxSignTransaction: format tx error");let n=yield this.evmSignTx(r,i);return Promise.resolve(n)})}}function $ce1f303d0aa8ec51$var$getAddressLegacyV1({typedCall:r,param:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return r("EthereumGetAddress","EthereumAddress",{address_n:i.address_n,show_display:i.show_display,chain_id:i.chain_id})})}function $ce1f303d0aa8ec51$var$getAddress({typedCall:r,param:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return r("EthereumGetAddressOneKey","EthereumAddressOneKey",Object.assign({},i))})}class $ce1f303d0aa8ec51$var$EvmGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"chainId",type:"number"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,chain_id:r.chainId})})}getEvmAddress(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$getAddressLegacyV1({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r}):$ce1f303d0aa8ec51$var$getAddress({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i!!r.showOnOneKey),this.useBatch=!this.confirmShowOnOneKey&&this.hasBundle&&this.payload.useBatch;let s=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(s,[{name:"bundle",type:"array"}]),this.params=[],s.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"chainId",type:"number"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,chain_id:r.chainId})})}getEvmPublicKey(r){return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$getPublicKeyLegacyV1({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r}):$ce1f303d0aa8ec51$var$getPublicKey({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r})}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=[];if(this.useBatch&&$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features))try{let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"secp256k1",60,{includeNode:!1,ignoreCoinType:!0}),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r,publicKey:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),yield Promise.resolve(i)}catch(r){}for(let r=0;r$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let o;if(!i.data_length){let r=i.signature_v,n=i.signature_r,a=i.signature_s,o="authorization_signatures"in i?i.authorization_signatures:void 0;if(null==r||null==n||null==a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"processTxRequest: Unexpected request");s&&r<=1&&(r+=2*s+35);let d={v:`0x${r.toString(16)}`,r:`0x${n}`,s:`0x${a}`};return o&&o.length>0&&(d.authorizationSignatures=o.map(r=>({yParity:r.y_parity,r:r.r,s:r.s}))),Promise.resolve(d)}let[d,f]=$ce1f303d0aa8ec51$var$cutString(n,2*i.data_length);return o=a?yield r("EthereumTxAck","EthereumTxRequest",{data_chunk:d}):yield r("EthereumTxAckOneKey","EthereumTxRequestOneKey",{data_chunk:d}),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:o.message,data:f,chainId:s,supportTrezor:a})}),$ce1f303d0aa8ec51$var$evmSignTx=({typedCall:r,addressN:i,tx:n,supportTrezor:s})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a;let{to:o,value:d,gasPrice:f,gasLimit:l,nonce:u,data:c,chainId:p,txType:h}=n,g=null==c?0:c.length/2,[m,v]=$ce1f303d0aa8ec51$var$cutString(c,2048),_={address_n:i,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(u),gas_price:$ce1f303d0aa8ec51$var$stripHexStartZeroes(f),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(l),to:o,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),chain_id:p};return 0!==g&&(_=Object.assign(Object.assign({},_),{data_length:g,data_initial_chunk:m})),null!==h&&(_=Object.assign(Object.assign({},_),{tx_type:h})),a=s?yield r("EthereumSignTx","EthereumTxRequest",_):yield r("EthereumSignTxOneKey","EthereumTxRequestOneKey",_),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:a.message,data:v,chainId:p,supportTrezor:s})}),$ce1f303d0aa8ec51$var$evmSignTxEip1559=({typedCall:r,addressN:i,tx:n,supportTrezor:s})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a;let{to:o,value:d,gasLimit:f,nonce:l,data:u,chainId:c,maxFeePerGas:p,maxPriorityFeePerGas:h,accessList:g}=n,m=null==u?0:u.length/2,[v,_]=$ce1f303d0aa8ec51$var$cutString(u,2048),b={address_n:i,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(l),max_gas_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(p),max_priority_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(h),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(f),to:o,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),data_length:m,data_initial_chunk:v,chain_id:c,access_list:(g||[]).map(r=>({address:r.address,storage_keys:r.storageKeys}))};return a=s?yield r("EthereumSignTxEIP1559","EthereumTxRequest",b):yield r("EthereumSignTxEIP1559OneKey","EthereumTxRequestOneKey",b),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:a.message,data:_,supportTrezor:s})}),$ce1f303d0aa8ec51$var$evmSignTxEip7702=({typedCall:r,addressN:i,tx:n,supportTrezor:s})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a;let{to:o,value:d,gasLimit:f,nonce:l,data:u,chainId:c,maxFeePerGas:p,maxPriorityFeePerGas:h,accessList:g,authorizationList:m}=n,v=null==u?0:u.length/2,[_,b]=$ce1f303d0aa8ec51$var$cutString(u,2048),T={address_n:i,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(l),max_gas_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(p),max_priority_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(h),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(f),to:o,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),data_length:v,data_initial_chunk:_,chain_id:c,access_list:(g||[]).map(r=>({address:r.address,storage_keys:r.storageKeys})),authorization_list:m.map(r=>({address_n:r.addressN||[],chain_id:r.chainId,address:$ce1f303d0aa8ec51$var$addHexPrefix(r.address),nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(r.nonce),signature:void 0!==r.yParity&&r.r&&r.s?{y_parity:r.yParity,r:r.r,s:r.s}:void 0}))};if(s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"EIP7702 not supported by Trezor");return a=yield r("EthereumSignTxEIP7702OneKey","EthereumTxRequestOneKey",T),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:a.message,data:b,supportTrezor:s})}),$ce1f303d0aa8ec51$var$signTransaction$1=({typedCall:r,isEIP1559:i,isEIP7702:n,addressN:s,tx:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return n?$ce1f303d0aa8ec51$var$evmSignTxEip7702({typedCall:r,addressN:s,tx:a}):i?$ce1f303d0aa8ec51$var$evmSignTxEip1559({typedCall:r,addressN:s,tx:a}):$ce1f303d0aa8ec51$var$evmSignTx({typedCall:r,addressN:s,tx:a})}),$ce1f303d0aa8ec51$var$signTransaction=({typedCall:r,isEIP1559:i,isEIP7702:n,addressN:s,tx:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return n?$ce1f303d0aa8ec51$var$evmSignTxEip7702({typedCall:r,addressN:s,tx:a,supportTrezor:!0}):i?$ce1f303d0aa8ec51$var$evmSignTxEip1559({typedCall:r,addressN:s,tx:a,supportTrezor:!0}):$ce1f303d0aa8ec51$var$evmSignTx({typedCall:r,addressN:s,tx:a,supportTrezor:!0})});class $ce1f303d0aa8ec51$var$EVMSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.addressN=[],this.isEIP1559=!1,this.isEIP7702=!1}hasEIP7702Features(r){let i=r.authorizationList;return!!(i&&Array.isArray(i)&&i.length>0)}hasEIP1559Features(r){return!!(r.maxFeePerGas&&r.maxPriorityFeePerGas)}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload;this.addressN=$ce1f303d0aa8ec51$var$validatePath(r,3);let n=i;this.isEIP7702=this.hasEIP7702Features(n),this.isEIP1559=this.hasEIP1559Features(n)&&!this.isEIP7702;let s=[{name:"to",type:"hexString",required:!0},{name:"value",type:"hexString",required:!0},{name:"gasLimit",type:"hexString",required:!0},{name:"nonce",type:"hexString",required:!0},{name:"chainId",type:"number",required:!0},{name:"data",type:"hexString"}];this.isEIP7702?(s.push({name:"maxFeePerGas",type:"hexString",required:!0}),s.push({name:"maxPriorityFeePerGas",type:"hexString",required:!0}),s.push({name:"authorizationList",type:"array",required:!0})):this.isEIP1559?(s.push({name:"maxFeePerGas",type:"hexString",required:!0}),s.push({name:"maxPriorityFeePerGas",type:"hexString",required:!0})):(s.push({name:"gasPrice",type:"hexString",required:!0}),s.push({name:"txType",type:"number"})),$ce1f303d0aa8ec51$var$validateParams(n,s),this.formattedTx=$ce1f303d0aa8ec51$var$formatAnyHex(n)}getVersionRange(){return this.isEIP7702?{model_classic1s:{min:"3.13.0"},pro:{min:"4.16.0"}}:this.isEIP1559?{model_mini:{min:"2.1.11"}}:{model_mini:{min:"1.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{addressN:r,isEIP1559:i,isEIP7702:n,formattedTx:s}=this;if(null==s)throw $3FhS8.ERRORS.TypedError("Runtime","formattedTx is not set");return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$signTransaction({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,tx:s,isEIP1559:i,isEIP7702:n}):$ce1f303d0aa8ec51$var$signTransaction$1({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,tx:s,isEIP1559:i,isEIP7702:n})})}}const $ce1f303d0aa8ec51$var$signTypedHash$1=({typedCall:r,addressN:i,device:n,chainId:s,domainHash:a,messageHash:o})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d=$ce1f303d0aa8ec51$var$getDeviceType(n.features);if(d===$3FhS8.EDeviceType.Touch||d===$3FhS8.EDeviceType.Pro){let r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(n.features).join("."),i="4.2.0";if($ce1f303d0aa8ec51$var$semver__default.default.lt(r,i))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,`Device firmware version is too low, please update to ${i}`,{current:r,require:i})}return r("EthereumSignTypedHash","EthereumTypedDataSignature",{address_n:i,domain_separator_hash:null!=a?a:"",message_hash:o,chain_id:s})}),$ce1f303d0aa8ec51$var$signTypedHash=({typedCall:r,addressN:i,device:n,chainId:s,domainHash:a,messageHash:o})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d=$ce1f303d0aa8ec51$var$getDeviceType(n.features);if(d===$3FhS8.EDeviceType.Touch||d===$3FhS8.EDeviceType.Pro){let r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(n.features).join("."),i="4.2.0";if($ce1f303d0aa8ec51$var$semver__default.default.lt(r,i))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,`Device firmware version is too low, please update to ${i}`,{current:r,require:i})}return r("EthereumSignTypedHashOneKey","EthereumTypedDataSignatureOneKey",{address_n:i,domain_separator_hash:null!=a?a:"",message_hash:o,chain_id:s})}),$ce1f303d0aa8ec51$var$signTypedData$1=({typedCall:r,addressN:i,data:n,metamaskV4Compat:s,chainId:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{primaryType:o}=n,d=yield r("EthereumSignTypedData",["EthereumTypedDataStructRequest","EthereumTypedDataValueRequest","EthereumTypedDataSignature","EthereumGnosisSafeTxRequest"],{address_n:i,primary_type:o,metamask_v4_compat:s,chain_id:a});return d}),$ce1f303d0aa8ec51$var$signTypedData=({typedCall:r,addressN:i,data:n,metamaskV4Compat:s,chainId:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{primaryType:o}=n;return r("EthereumSignTypedDataOneKey",["EthereumTypedDataStructRequestOneKey","EthereumTypedDataValueRequestOneKey","EthereumTypedDataSignatureOneKey","EthereumGnosisSafeTxRequest"],{address_n:i,primary_type:o,metamask_v4_compat:s,chain_id:a})}),$ce1f303d0aa8ec51$var$twosComplement=(r,i)=>{if(i<1||i>32)throw $3FhS8.ERRORS.TypedError("Runtime","Int byte size must be between 1 and 32 (8 and 256 bits)");let n=new $ce1f303d0aa8ec51$var$BigNumber__default.default(2).exponentiatedBy(8*i-1).negated(),s=n.negated().minus(1),a=new $ce1f303d0aa8ec51$var$BigNumber__default.default(r);if(a.isGreaterThan(s)||a.isLessThan(n))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Overflow when trying to convert number ${r.toString()} into ${i} bytes`);return a.isPositive()?a:a.minus(n).minus(n)},$ce1f303d0aa8ec51$var$intToHex=(r,i,n)=>{let s=new $ce1f303d0aa8ec51$var$BigNumber__default.default(r);if(n&&(s=$ce1f303d0aa8ec51$var$twosComplement(s,i)),s.isNegative())throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Cannot convert negative number to unsigned interger: ${r.toString()}`);let a=s.toString(16),o=2*i;if(a.length>o)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Overflow when trying to convert number ${r.toString()} into ${i} bytes`);return a.padStart(2*i,"0")},$ce1f303d0aa8ec51$var$paramTypeArray=new RegExp(/^(.*)\[([0-9]*)\]$/),$ce1f303d0aa8ec51$var$paramTypeBytes=new RegExp(/^bytes([0-9]*)$/),$ce1f303d0aa8ec51$var$paramTypeNumber=new RegExp(/^(u?int)([0-9]*)$/),$ce1f303d0aa8ec51$var$parseArrayType=r=>{let i=$ce1f303d0aa8ec51$var$paramTypeArray.exec(r);if(null===i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`typename ${r} could not be parsed as an EIP-712 array`);let[n,s,a]=i;return{entryTypeName:s,arraySize:parseInt(a,10)||null}},$ce1f303d0aa8ec51$var$encodeData=(r,i)=>{if($ce1f303d0aa8ec51$var$paramTypeBytes.test(r)||"address"===r)return $ce1f303d0aa8ec51$var$formatAnyHex(i);if("string"===r)return $ce1f303d0aa8ec51$require$Buffer.from(i,"utf-8").toString("hex");let n=$ce1f303d0aa8ec51$var$paramTypeNumber.exec(r);if(n){let[r,s,a]=n,o=Math.ceil(parseInt(a,10)/8);return $ce1f303d0aa8ec51$var$intToHex(i,o,"int"===s)}if("bool"===r)return i?"01":"00";throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Unsupported data type for direct field encoding: ${r}`)},$ce1f303d0aa8ec51$var$paramTypesMap={string:$5xch2.EthereumDataType.STRING,bool:$5xch2.EthereumDataType.BOOL,address:$5xch2.EthereumDataType.ADDRESS},$ce1f303d0aa8ec51$var$getFieldType=(r,i)=>{let n=$ce1f303d0aa8ec51$var$paramTypeArray.exec(r);if(n){let[r,s,a]=n,o=$ce1f303d0aa8ec51$var$getFieldType(s,i);return{data_type:$5xch2.EthereumDataType.ARRAY,size:parseInt(a,10)||void 0,entry_type:o}}let s=$ce1f303d0aa8ec51$var$paramTypeNumber.exec(r);if(s){let[r,i,n]=s;return{data_type:"uint"===i?$5xch2.EthereumDataType.UINT:$5xch2.EthereumDataType.INT,size:Math.floor(parseInt(n,10)/8)}}let a=$ce1f303d0aa8ec51$var$paramTypeBytes.exec(r);if(a){let[r,i]=a;return{data_type:$5xch2.EthereumDataType.BYTES,size:parseInt(i,10)||void 0}}let o=$ce1f303d0aa8ec51$var$paramTypesMap[r];if(o)return{data_type:o};if(r in i)return{data_type:$5xch2.EthereumDataType.STRUCT,size:i[r].length,struct_name:r};throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`No type definition specified: ${r}`)},$ce1f303d0aa8ec51$var$MINI_MAX_STRUCT_FIELDS=16,$ce1f303d0aa8ec51$var$MINI_MAX_ACCESS_PATH_DEPTH=6,$ce1f303d0aa8ec51$var$MINI_MAX_CUSTOM_DEP_STRUCTS=8,$ce1f303d0aa8ec51$var$MINI_MAX_NAME_LENGTH=63,$ce1f303d0aa8ec51$var$MINI_MAX_DYNAMIC_VALUE_BYTES=1536,$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_TYPE_FIELDS=24,$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_ELEMENTS=24;class $ce1f303d0aa8ec51$var$EVMSignTypedData extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"metamaskV4Compat",type:"boolean"},{name:"data",type:"object"},{name:"domainHash",type:"hexString"},{name:"messageHash",type:"hexString"},{name:"chainId",type:"number"}]);let{path:r,data:i,metamaskV4Compat:n,domainHash:s,messageHash:a,chainId:o}=this.payload,d=$ce1f303d0aa8ec51$var$validatePath(r,3);if(this.params={addressN:d,metamaskV4Compat:n,data:i,chainId:o},s){if(this.params.domainHash=$ce1f303d0aa8ec51$var$formatAnyHex(s),a)this.params.messageHash=$ce1f303d0aa8ec51$var$formatAnyHex(a);else if(i&&(!i.primaryType||"EIP712Domain"!==i.primaryType))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"message_hash should only be empty when data.primaryType=EIP712Domain")}}handleSignTypedData({typedCall:r,signData:i,response:n,supportTrezor:s}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{types:a,primaryType:o,domain:d,message:f}=i;for(;"EthereumTypedDataStructRequest"===n.type||"EthereumTypedDataStructRequestOneKey"===n.type;){let{name:i}=n.message,o=a[i];if(void 0===o)throw $3FhS8.ERRORS.TypedError("Runtime",`Type ${i} was not defined in types object`);let d={members:o.map(({name:r,type:i})=>({name:r,type:$ce1f303d0aa8ec51$var$getFieldType(i,a)}))};n=s?yield r("EthereumTypedDataStructAck",["EthereumTypedDataStructRequest","EthereumTypedDataValueRequest","EthereumTypedDataSignature"],d):yield r("EthereumTypedDataStructAckOneKey",["EthereumTypedDataStructRequestOneKey","EthereumTypedDataValueRequestOneKey","EthereumTypedDataSignatureOneKey"],d)}for(;"EthereumTypedDataValueRequest"===n.type||"EthereumTypedDataValueRequestOneKey"===n.type;){let i,l,u;let{member_path:c}=n.message,[p,...h]=c;switch(p){case 0:i=d,l="EIP712Domain";break;case 1:i=f,l=o;break;default:throw $3FhS8.ERRORS.TypedError("Runtime","Root index can only be 0 or 1")}for(let r of h)if(Array.isArray(i))l=$ce1f303d0aa8ec51$var$parseArrayType(l).entryTypeName,i=i[r];else if("object"==typeof i&&null!==i){let n=a[l][r];l=n.type,i=i[n.name]}u=Array.isArray(i)?$ce1f303d0aa8ec51$var$encodeData("uint16",i.length):$ce1f303d0aa8ec51$var$encodeData(l,i),n=s?yield r("EthereumTypedDataValueAck",["EthereumTypedDataValueRequest","EthereumTypedDataSignature"],{value:u}):yield r("EthereumTypedDataValueAckOneKey",["EthereumTypedDataValueRequestOneKey","EthereumTypedDataSignatureOneKey"],{value:u})}if("EthereumGnosisSafeTxRequest"===n.type){let{data:i}=this.params,s={to:i.message.to,value:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.value).toString(16)),data:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(i.message.data)),operation:parseInt(i.message.operation),safeTxGas:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.safeTxGas).toString(16)),baseGas:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.baseGas).toString(16)),gasPrice:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.gasPrice).toString(16)),gasToken:i.message.gasToken,refundReceiver:i.message.refundReceiver,nonce:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.nonce).toString(16)),chain_id:$ce1f303d0aa8ec51$var$parseChainId(i.domain.chainId),verifyingContract:i.domain.verifyingContract};n=yield r("EthereumGnosisSafeTxAck",["EthereumTypedDataSignature","EthereumTypedDataSignatureOneKey"],s)}if("EthereumTypedDataSignature"!==n.type&&"EthereumTypedDataSignatureOneKey"!==n.type)throw $3FhS8.ERRORS.TypedError("Runtime","Unexpected response type");let{address:l,signature:u}=n.message;return{address:l,signature:u}})}signTypedData(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let{addressN:i,data:n,metamaskV4Compat:s,chainId:a}=this.params,o=!1;return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?(o=!0,r=yield $ce1f303d0aa8ec51$var$signTypedData$1({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:i,data:n,metamaskV4Compat:s,chainId:a})):(o=!1,r=yield $ce1f303d0aa8ec51$var$signTypedData({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:i,data:n,metamaskV4Compat:s,chainId:a})),this.handleSignTypedData({typedCall:this.device.commands.typedCall.bind(this.device.commands),signData:n,response:r,supportTrezor:o})})}signTypedHash({typedCall:r,addressN:i,chainId:n,domainHash:s,messageHash:a}){if(!s)throw $3FhS8.ERRORS.TypedError("Runtime","domainHash is required");return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$signTypedHash$1({typedCall:r,addressN:i,domainHash:s,messageHash:a,chainId:n,device:this.device}):$ce1f303d0aa8ec51$var$signTypedHash({typedCall:r,addressN:i,domainHash:s,messageHash:a,chainId:n,device:this.device})}getVersionRange(){return{model_mini:{min:"2.1.9"}}}hasBiggerData(r){let i=$7U5sq.get(r.message,"data",void 0);if(!i)return!1;let n=1024,s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join("."),a=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),o="4.4.0",d=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic1s.includes(a)||$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(a)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s,o);d&&(n=1536);let f=i.startsWith("0x")?2:0;return(i.length-f)/2>n}hasNestedArrays(r){if(!r)return!1;if(Array.isArray(r)){for(let i of r)if(Array.isArray(i)||"object"==typeof i&&null!==i&&this.hasNestedArrays(i))return!0}else if("object"==typeof r&&null!==r){for(let i in r)if(this.hasNestedArrays(r[i]))return!0}return!1}hasClassicFamilyTypedDataFormatViolations(r){if(!(null==r?void 0:r.types)||!r.primaryType)return!1;let i=r=>/\[[0-9]*\]$/.test(r),n=r=>/^bytes(\d*)$/.test(r),s=i=>i in r.types;if(Object.values(r.types).some(r=>r.length>$ce1f303d0aa8ec51$var$MINI_MAX_STRUCT_FIELDS)||Object.entries(r.types).some(([r,i])=>r.length>$ce1f303d0aa8ec51$var$MINI_MAX_NAME_LENGTH||i.some(r=>r.name.length>$ce1f303d0aa8ec51$var$MINI_MAX_NAME_LENGTH)))return!0;let a=Object.values(r.types).reduce((r,n)=>r+n.filter(r=>i(r.type)).length,0);if(a>$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_TYPE_FIELDS)return!0;let o=(n,a)=>{if(i(n)){let{entryTypeName:r}=$ce1f303d0aa8ec51$var$parseArrayType(n);return 1+o(r,a)}if(!s(n))return 1;if(a.has(n))return $ce1f303d0aa8ec51$var$MINI_MAX_ACCESS_PATH_DEPTH+1;a.add(n);let d=r.types[n].reduce((r,{type:i})=>{let n=1+o(i,a);return Math.max(r,n)},1);return a.delete(n),d},d=1+Math.max(o("EIP712Domain",new Set),o(r.primaryType,new Set));if(d>$ce1f303d0aa8ec51$var$MINI_MAX_ACCESS_PATH_DEPTH)return!0;let f=new Set,l=(n,a)=>{if(i(n)){let{entryTypeName:r}=$ce1f303d0aa8ec51$var$parseArrayType(n);l(r,a);return}!s(n)||a.has(n)||(a.add(n),"EIP712Domain"!==n&&n!==r.primaryType&&f.add(n),r.types[n].forEach(({type:r})=>l(r,a)),a.delete(n))};if(l("EIP712Domain",new Set),l(r.primaryType,new Set),f.size>$ce1f303d0aa8ec51$var$MINI_MAX_CUSTOM_DEP_STRUCTS)return!0;let u=(r,i)=>{if("string"===r)return"string"==typeof i?$ce1f303d0aa8ec51$require$Buffer.byteLength(i,"utf8"):0;if(n(r)&&"string"==typeof i){let r=i.startsWith("0x")?2:0;return(i.length-r)/2}return 0},c=(n,a)=>{if(null==a)return!1;if(i(n)){if(!Array.isArray(a))return!1;let{entryTypeName:r}=$ce1f303d0aa8ec51$var$parseArrayType(n),o=s(r),d=!o&&!i(r);return a.length>$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_ELEMENTS&&(!!d||!!this.params.metamaskV4Compat&&!!o)||a.some(i=>c(r,i))}return u(n,a)>$ce1f303d0aa8ec51$var$MINI_MAX_DYNAMIC_VALUE_BYTES||!!("object"==typeof a&&s(n))&&r.types[n].some(({name:r,type:i})=>c(i,a[r]))};return c("EIP712Domain",r.domain)||c(r.primaryType,r.message)}supportSignTyped(){let r=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(r)){let r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join("."),i="2.2.0";if($ce1f303d0aa8ec51$var$semver__default.default.lt(r,i))return!1}return!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)throw $3FhS8.ERRORS.TypedError("Device_InitializeFailed","Device initialization failed. Please try again.");let{addressN:r,chainId:i}=this.params,n=$ce1f303d0aa8ec51$var$existCapability(this.device.features,$5xch2.Enum_Capability.Capability_EthereumTypedData),s=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(s)&&(!n||this.hasClassicFamilyTypedDataFormatViolations(this.params.data))){let n;$ce1f303d0aa8ec51$var$validateParams(this.params,[{name:"domainHash",type:"hexString",required:!0},{name:"messageHash",type:"hexString",required:!0}]);let{domainHash:s,messageHash:a}=this.params;return Promise.resolve((n=this.supportSignTyped()?yield this.signTypedHash({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,domainHash:s,messageHash:a,chainId:i}):yield this.device.commands.typedCall("EthereumSignMessageEIP712","EthereumMessageSignature",{address_n:r,domain_hash:null!=s?s:"",message_hash:null!=a?a:""})).message)}if(this.hasNestedArrays(this.params.data)||this.hasBiggerData(this.params.data)){$ce1f303d0aa8ec51$var$validateParams(this.params,[{name:"domainHash",type:"hexString",required:!0},{name:"messageHash",type:"hexString",required:!0}]);let{domainHash:n,messageHash:s}=this.params;if(!n)throw $3FhS8.ERRORS.TypedError("Runtime","domainHash is required");let a=yield this.signTypedHash({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,domainHash:n,messageHash:s,chainId:i});return Promise.resolve(a.message)}return this.signTypedData()})}}function $ce1f303d0aa8ec51$var$verifyMessageLegacyV1({typedCall:r,params:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=yield r("EthereumVerifyMessage","Success",{signature:i.signature,message:i.message,address:i.address,chain_id:i.chain_id});return Promise.resolve(n.message)})}function $ce1f303d0aa8ec51$var$verifyMessage({typedCall:r,params:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=yield r("EthereumVerifyMessageOneKey","Success",Object.assign({},i));return Promise.resolve(n.message)})}class $ce1f303d0aa8ec51$var$EVMSignMessage$1 extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"address",type:"string",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"signature",type:"hexString",required:!0},{name:"chainId",type:"number"}]);let{address:r,messageHex:i,signature:n}=$ce1f303d0aa8ec51$var$formatAnyHex(this.payload);this.params={address:r,message:i,signature:n,chain_id:this.payload.chainId}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$verifyMessageLegacyV1({typedCall:this.device.commands.typedCall.bind(this.device.commands),params:this.params}):$ce1f303d0aa8ec51$var$verifyMessage({typedCall:this.device.commands.typedCall.bind(this.device.commands),params:this.params})})}}class $ce1f303d0aa8ec51$var$StarcoinGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"network",type:"number"},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,network:r.network||$ce1f303d0aa8ec51$var$MAINNET,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var n;return{address_n:i,network:r.version>>24&255,timestamp:r.timeStamp,fee:r.fee,deadline:null!==(n=r.deadline)&&void 0!==n?n:0,signer:i?void 0:r.signer}},this.transferMessage=r=>{let i=r.mosaics?r.mosaics.map(r=>({namespace:r.mosaicId.namespaceId,mosaic:r.mosaicId.name,quantity:r.quantity})):void 0;return{recipient:r.recipient,amount:r.amount,payload:r.message?r.message.payload:void 0,public_key:r.message&&2===r.message.type?r.message.publicKey:void 0,mosaics:i}},this.importanceTransferMessage=r=>({mode:this.NEM_IMPORTANCE_TRANSFER_MODES[r.importanceTransfer.mode],public_key:r.importanceTransfer.publicKey}),this.aggregateModificationMessage=r=>{let i=r.modifications?r.modifications.map(r=>({type:this.NEM_AGGREGATE_MODIFICATION_TYPES[r.modificationType],public_key:r.cosignatoryAccount})):void 0;return{modifications:i,relative_change:r.minCosignatories.relativeChange}},this.provisionNamespaceMessage=r=>{var i,n,s;return{namespace:null!==(i=r.newPart)&&void 0!==i?i:"",parent:r.parent||void 0,sink:null!==(n=r.rentalFeeSink)&&void 0!==n?n:"",fee:null!==(s=r.rentalFee)&&void 0!==s?s:0}},this.mosaicCreationMessage=r=>{var i,n;let{levy:s}=r.mosaicDefinition,a={namespace:r.mosaicDefinition.id.namespaceId,mosaic:r.mosaicDefinition.id.name,levy:s&&s.type?this.NEM_MOSAIC_LEVY_TYPES[s.type]:void 0,fee:s&&s.fee,levy_address:s&&s.recipient,levy_namespace:s&&s.mosaicId&&s.mosaicId.namespaceId,levy_mosaic:s&&s.mosaicId&&s.mosaicId.name,description:r.mosaicDefinition.description},{properties:o}=r.mosaicDefinition;return Array.isArray(o)&&o.forEach(r=>{let{name:i,value:n}=r;switch(i){case"divisibility":a.divisibility=parseInt(n);break;case"initialSupply":a.supply=parseInt(n);break;case"supplyMutable":a.mutable_supply="true"===n;break;case"transferable":a.transferable="true"===n}}),{definition:a,sink:null!==(i=r.creationFeeSink)&&void 0!==i?i:"",fee:null!==(n=r.creationFee)&&void 0!==n?n:0}},this.supplyChangeMessage=r=>{var i;return{namespace:r.mosaicId.namespaceId,mosaic:r.mosaicId.name,type:this.NEM_SUPPLY_CHANGE_TYPES[r.supplyType],delta:null!==(i=r.delta)&&void 0!==i?i:0}},this.parseTx=(r,i)=>{let n=r,s={transaction:this.getCommon(r,i),transfer:void 0,importance_transfer:void 0,aggregate_modification:void 0,provision_namespace:void 0,mosaic_creation:void 0,supply_change:void 0};switch((r.type===$ce1f303d0aa8ec51$var$NEM_COSIGNING||r.type===$ce1f303d0aa8ec51$var$NEM_MULTISIG||r.type===$ce1f303d0aa8ec51$var$NEM_MULTISIG_SIGNATURE)&&(s.cosigning=r.type===$ce1f303d0aa8ec51$var$NEM_COSIGNING||r.type===$ce1f303d0aa8ec51$var$NEM_MULTISIG_SIGNATURE,n=r.otherTrans,s.multisig=this.getCommon(n)),n.type){case $ce1f303d0aa8ec51$var$NEM_TRANSFER:s.transfer=this.transferMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_IMPORTANCE_TRANSFER:s.importance_transfer=this.importanceTransferMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_AGGREGATE_MODIFICATION:s.aggregate_modification=this.aggregateModificationMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_PROVISION_NAMESPACE:s.provision_namespace=this.provisionNamespaceMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_MOSAIC_CREATION:s.mosaic_creation=this.mosaicCreationMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_SUPPLY_CHANGE:s.supply_change=this.supplyChangeMessage(n);break;default:throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Unknown transaction type")}return s}}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params=this.parseTx(i,n)}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("NEMSignTx","NEMSignedTx",Object.assign({},this.params));return Promise.resolve(r)})}}class $ce1f303d0aa8ec51$var$SolGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{let i=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"extraInfo",type:"object"}]),this.params.push(Object.assign({address_n:i,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(r.rawTx)},r.extraInfo?{extra_info:r.extraInfo}:void 0))})}getVersionRange(){return this.existsVersionedTx()?{model_mini:{min:"3.1.0"},model_touch:{min:"4.3.0"}}:{classic:{min:"2.1.9"},mini:{min:"2.1.9"}}}isVersionedTx(r){if(0===r.length)return!1;try{let i=r.startsWith("0x")?r.slice(2):r,n=parseInt(i[0],16).toString(2);return"1"===n[0]}catch(r){return!1}}existsVersionedTx(){for(let r=0;r{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i,n;switch(r.type){case"createAccount":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"destination",type:"string",required:!0},{name:"startingBalance",type:"bigNumber",required:!0}]),{type:"StellarCreateAccountOp",source_account:r.source,new_account:r.destination,starting_balance:r.startingBalance};case"payment":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"destination",type:"string",required:!0},{name:"amount",type:"bigNumber",required:!0},{name:"asset",required:!0}]),{type:"StellarPaymentOp",source_account:r.source,destination_account:r.destination,asset:r.asset,amount:r.amount};case"pathPayment":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"destAmount",type:"bigNumber",required:!0}]),{type:"StellarPathPaymentOp",source_account:r.source,send_asset:r.sendAsset,send_max:r.sendMax,destination_account:r.destination,destination_asset:r.destAsset,destination_amount:r.destAmount,paths:r.path};case"createPassiveOffer":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"amount",type:"bigNumber",required:!0}]),{type:"StellarCreatePassiveOfferOp",source_account:r.source,buying_asset:r.buying,selling_asset:r.selling,amount:r.amount,price_n:r.price.n,price_d:r.price.d};case"manageOffer":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"amount",type:"bigNumber",required:!0}]),{type:"StellarManageOfferOp",source_account:r.source,buying_asset:r.buying,selling_asset:r.selling,amount:r.amount,offer_id:r.offerId,price_n:r.price.n,price_d:r.price.d};case"setOptions":{let i=r.signer?{signer_type:r.signer.type,signer_key:r.signer.key,signer_weight:r.signer.weight}:void 0;return Object.assign({type:"StellarSetOptionsOp",source_account:r.source,clear_flags:r.clearFlags,set_flags:r.setFlags,master_weight:r.masterWeight,low_threshold:r.lowThreshold,medium_threshold:r.medThreshold,high_threshold:r.highThreshold,home_domain:r.homeDomain,inflation_destination_account:r.inflationDest},i)}case"changeTrust":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"limit",type:"bigNumber"}]),{type:"StellarChangeTrustOp",source_account:r.source,asset:r.line,limit:r.limit};case"allowTrust":return{type:"StellarAllowTrustOp",source_account:r.source,trusted_account:r.trustor,asset_type:r.assetType,asset_code:r.assetCode,is_authorized:r.authorize?1:0};case"accountMerge":return{type:"StellarAccountMergeOp",source_account:r.source,destination_account:r.destination};case"manageData":return{type:"StellarManageDataOp",source_account:r.source,key:r.name,value:r.value};case"bumpSequence":return{type:"StellarBumpSequenceOp",source_account:r.source,bump_to:r.bumpTo};case"invokeHostFunctionOneKey":{let s=null!==(i=r.callArgsXDRHex)&&void 0!==i?i:"",a=null!==(n=r.sorobanAuthXDRHex)&&void 0!==n?n:"";if(!this.sorobanState)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"sorobanState not initialized");return this.sorobanState.callArgs=s,this.sorobanState.callArgsSent=Math.min(s.length,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS),this.sorobanState.auth=a,this.sorobanState.authSent=Math.min(a.length,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS),{type:"StellarInvokeHostFunctionOp",source_account:r.source,contract_address:r.contract,function_name:r.functionName,call_args_xdr_size:s.length/2,call_args_xdr_initial_chunk:s.slice(0,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS),soroban_auth_xdr_size:a.length/2,soroban_auth_xdr_initial_chunk:a.slice(0,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS)}}case"pathPaymentStrictReceive":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"sendMax",type:"bigNumber",required:!0}]),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"destAmount",type:"bigNumber",required:!0}]),{type:"StellarPathPaymentStrictReceiveOp",source_account:r.source,send_asset:r.sendAsset,send_max:r.sendMax,destination_account:r.destination,destination_asset:r.destAsset,destination_amount:r.destAmount,paths:r.path};case"pathPaymentStrictSend":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"sendAmount",type:"bigNumber",required:!0}]),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"destMin",type:"bigNumber",required:!0}]),{type:"StellarPathPaymentStrictSendOp",source_account:r.source,send_asset:r.sendAsset,send_amount:r.sendAmount,destination_account:r.destination,destination_asset:r.destAsset,destination_min:r.destMin,paths:r.path};default:return{}}},this.processTxRequest=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){switch(r.type){case"StellarSignedTx":return r.message;case"StellarSorobanDataRequest":{let s;if(!this.sorobanState)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"sorobanState not initialized");let a=r.message.type,o=2*r.message.data_length;switch(a){case"CALL":{let{callArgs:r,callArgsSent:i}=this.sorobanState;s=r.slice(i,i+o),this.sorobanState.callArgsSent+=s.length;break}case"AUTH":{let{auth:r,authSent:i}=this.sorobanState;s=r.slice(i,i+o),this.sorobanState.authSent+=s.length;break}case"EXT":{let{ext:r,extSent:i}=this.sorobanState;s=r.slice(i,i+o),this.sorobanState.extSent+=s.length;break}default:throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`unknown soroban request type: ${a}`)}let d=yield this.device.commands.typedCall("StellarSorobanDataAck",["StellarSorobanDataRequest","StellarSignedTx"],{data_xdr:s});return this.processTxRequest(d,i,n)}case"StellarTxOpRequest":{let r=i[n],{type:s}=r,a=$ce1f303d0aa8ec51$var$__rest(r,["type"]),o=yield this.device.commands.typedCall(s,["StellarTxOpRequest","StellarSorobanDataRequest","StellarSignedTx"],a);return this.processTxRequest(o,i,n+1)}default:throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`unexpected response type: ${r.type}`)}})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"networkPassphrase",type:"string",required:!0},{name:"transaction",type:"object",required:!0}]);let{transaction:r,networkPassphrase:i}=this.payload;if(!r.timebounds)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"timebounds is required");let n=$ce1f303d0aa8ec51$var$validatePath(this.payload.path,3),s=r.operations.some(r=>"invokeHostFunctionOneKey"===r.type);if(s){if(1!==r.operations.length)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Soroban transactions must contain exactly one operation");if(!r.sorobanDataXDR)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"sorobanDataXDR is required for Soroban transactions");this.sorobanState={callArgs:"",callArgsSent:0,auth:"",authSent:0,ext:r.sorobanDataXDR,extSent:0}}this.params=Object.assign({address_n:n,network_passphrase:i,source_account:r.source,fee:r.fee,sequence_number:r.sequence,num_operations:r.operations.length,memo_type:$5xch2.StellarMemoType.NONE,timebounds_start:r.timebounds.minTime,timebounds_end:r.timebounds.maxTime},this.sorobanState?{soroban_data_size:this.sorobanState.ext.length/2}:{}),r.memo&&(this.params.memo_type=r.memo.type,this.params.memo_text=r.memo.text,this.params.memo_id=r.memo.id,this.params.memo_hash=r.memo.hash),r.operations.forEach(r=>{let i=this.parseOperation(r);i&&this.operations.push(i)})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("StellarSignTx","StellarTxOpRequest",Object.assign({},this.params));return this.processTxRequest(r,this.operations,0)})}}class $ce1f303d0aa8ec51$var$TronGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.5.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;ithis.params.message_type===$5xch2.TronMessageType.V2,()=>this.getMessageV2VersionRange(),{strictCheckDeviceSupport:!0});let r=yield this.device.commands.typedCall("TronSignMessage","TronMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$TronSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{parseTx(r,i){var n;let s={address_n:i,data:r.data,timestamp:r.timestamp,fee_limit:r.feeLimit,ref_block_bytes:r.refBlockBytes,ref_block_hash:r.refBlockHash,expiration:r.expiration,contract:{}};return r.contract&&(r.contract.transferContract&&(s.contract={transfer_contract:{to_address:r.contract.transferContract.toAddress,amount:r.contract.transferContract.amount}}),r.contract.triggerSmartContract&&(s.contract={trigger_smart_contract:{contract_address:r.contract.triggerSmartContract.contractAddress,call_value:r.contract.triggerSmartContract.callValue,data:r.contract.triggerSmartContract.data,call_token_value:r.contract.triggerSmartContract.callTokenValue,asset_id:r.contract.triggerSmartContract.assetId}}),r.contract.freezeBalanceV2Contract&&(s.contract={freeze_balance_v2_contract:{frozen_balance:r.contract.freezeBalanceV2Contract.frozenBalance,resource:r.contract.freezeBalanceV2Contract.resource}}),r.contract.unfreezeBalanceV2Contract&&(s.contract={unfreeze_balance_v2_contract:{unfreeze_balance:r.contract.unfreezeBalanceV2Contract.unfreezeBalance,resource:r.contract.unfreezeBalanceV2Contract.resource}}),r.contract.delegateResourceContract&&(s.contract={delegate_resource_contract:{resource:r.contract.delegateResourceContract.resource,balance:r.contract.delegateResourceContract.balance,receiver_address:r.contract.delegateResourceContract.receiverAddress,lock:r.contract.delegateResourceContract.lock,lock_period:r.contract.delegateResourceContract.lockPeriod}}),r.contract.unDelegateResourceContract&&(s.contract={undelegate_resource_contract:{resource:r.contract.unDelegateResourceContract.resource,balance:r.contract.unDelegateResourceContract.balance,receiver_address:r.contract.unDelegateResourceContract.receiverAddress}}),r.contract.withdrawExpireUnfreezeContract&&(s.contract={withdraw_expire_unfreeze_contract:{}}),r.contract.withdrawBalanceContract&&(s.contract={withdraw_balance_contract:{owner_address:r.contract.withdrawBalanceContract.ownerAddress}}),r.contract.voteWitnessContract&&(s.contract={vote_witness_contract:{votes:null===(n=r.contract.voteWitnessContract.votes)||void 0===n?void 0:n.map(r=>({vote_address:r.voteAddress,vote_count:r.voteCount})),support:r.contract.voteWitnessContract.support}}),r.contract.cancelAllUnfreezeV2Contract&&(s.contract={cancel_all_unfreeze_v2_contract:{}})),s}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);$ce1f303d0aa8ec51$var$validateParams(i,[{name:"refBlockBytes",type:"hexString",required:!0},{name:"refBlockHash",type:"hexString",required:!0},{name:"expiration",type:"number",required:!0},{name:"timestamp",type:"number",required:!0},{name:"contract",type:"object",required:!0}]),this.params=this.parseTx($ce1f303d0aa8ec51$var$formatAnyHex(i),n)}getVersionRange(){return{model_mini:{min:"2.5.0"}}}getFixDataTypeVersionRange(){return{pro:{min:"4.13.0"},touch:{min:"4.12.0"},model_classic1s:{min:"3.12.0"}}}checkFixDataTypeSupportVoteWitnessError(){let{data:r}=this.payload,{cancel_all_unfreeze_v2_contract:i,vote_witness_contract:n}=this.params.contract;this.checkFeatureVersionLimit(()=>!$7U5sq.isEmpty(r)||!!i||!!n,()=>this.getFixDataTypeVersionRange())}supportDelegateResourceLockPeriodVersionRange(){return{pro:{min:"4.15.0"},touch:{min:"4.12.0"},model_classic1s:{min:"3.13.0"}}}checkSupportDelegateContractLockPeriod(){let{delegate_resource_contract:r}=this.params.contract;this.checkFeatureVersionLimit(()=>!!r&&void 0!==r.lock_period&&null!==r.lock_period,()=>this.supportDelegateResourceLockPeriodVersionRange())}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFixDataTypeSupportVoteWitnessError(),this.checkSupportDelegateContractLockPeriod();let r=yield this.device.commands.typedCall("TronSignTx","TronSignedTx",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$NearGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.5.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i!!r.showOnOneKey)),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"bundle",type:"array"}]),this.params=[],n.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}publicKeyToAddress(r){let i=$2be1c3a1d39d0a84$exports.sha3_256.create();return i.update($ce1f303d0aa8ec51$var$hexToBytes(r)),i.update("\x00"),`0x${$bb5e1fcd97588e49$exports.bytesToHex(i.digest())}`}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){var r,i,n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let s=$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features),a=[];if(s){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",637);for(let s=0;s$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n;let s=yield this.device.commands.typedCall("AptosGetAddress","AptosAddress",r),a={path:$ce1f303d0aa8ec51$var$serializedPath(r.address_n),address:null!==(n=null===(i=s.message.address)||void 0===i?void 0:i.toLowerCase())&&void 0!==n?n:""};return this.shouldConfirm&&this.postPreviousAddressMessage(a),a})));return $ce1f303d0aa8ec51$var$validateResult(a,["address"],{expectedLength:this.params.length}),this.hasBundle?a:a[0]})}}class $ce1f303d0aa8ec51$var$AptosGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",637),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r,publicKey:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$AptosSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"transactionType",type:"number",required:!1}]);let{path:r,rawTx:i,transactionType:n}=this.payload,s=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:s,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i),tx_type:n}}getVersionRange(){return{model_mini:{min:"2.6.0"}}}getWithDataVersionRange(){return{pro:{min:"4.14.0"},model_classic1s:{min:"3.12.0"},classic:{min:"3.10.0"}}}checkWithDataError(){let{transactionType:r}=this.payload;this.checkFeatureVersionLimit(()=>1===r,()=>this.getWithDataVersionRange())}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkWithDataError();let r=yield this.device.commands.typedCall("AptosSignTx","AptosSignedTx",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$AptosSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"payload",type:"object",required:!0}]);let{path:r,payload:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);$ce1f303d0aa8ec51$var$validateParams(i,[{name:"address",type:"string"},{name:"chainId",type:"string"},{name:"application",type:"string"},{name:"nonce",type:"string",required:!0},{name:"message",type:"string",required:!0}]),this.params={address_n:n,payload:{address:i.address,chain_id:i.chainId,application:i.application,nonce:i.nonce,message:i.message}}}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r="APTOS\n";this.params.payload.address&&(r+=`address: ${this.params.payload.address} +`),this.params.payload.application&&(r+=`application: ${this.params.payload.application} +`),this.params.payload.chain_id&&(r+=`chainId: ${this.params.payload.chain_id} +`),r+=`message: ${this.params.payload.message} +nonce: ${this.params.payload.nonce}`;let i=yield this.device.commands.typedCall("AptosSignMessage","AptosMessageSignature",Object.assign({},this.params)),{address:n,signature:s}=i.message;return Promise.resolve({path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n),address:n,signature:s,fullMessage:r})})}}class $ce1f303d0aa8ec51$var$AptosSignInMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"payload",type:"string",required:!0}]);let{path:r,payload:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,siwa_payload:i}}getVersionRange(){return{pro:{min:"4.16.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("AptosSignSIWAMessage","AptosMessageSignature",Object.assign({},this.params)),{address:i,signature:n}=r.message;return Promise.resolve({path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n),address:i,signature:n})})}}class $ce1f303d0aa8ec51$var$AlgoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"hrp",type:"string"},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{hrp:a}=r;this.params.push({address_n:n,hrp:a,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"4.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i,n;let s=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"curve",type:"string"},{name:"showOnOneKey",type:"boolean"}]);let a=null===(i=r.showOnOneKey)||void 0===i||i,o=null!==(n=r.curve)&&void 0!==n?n:"secp256k1";if("secp256k1"!==o)throw Error("Curve name is not supported");this.params.push({address_n:s,curve:o,show_display:a})})}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"4.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,this.params[0].curve,118),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r,publicKey:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$CosmosSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0}]);let{path:r,rawTx:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i)}}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"4.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.device.commands.typedCall("CosmosSignTx","CosmosSignedTx",Object.assign({},this.params)),{signature:i}=r.message;return{path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n),signature:i}}catch(i){let{message:r}=i;if(r.includes("Failure_DataError,Json parse failed")||r.includes("Failure_DataError,Invalid message"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CosmosInvalidJsonMessage,r);throw i}})}}class $ce1f303d0aa8ec51$var$XrpGetAddress$1 extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1,this.shouldConfirm=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};this.shouldConfirm=!!this.hasBundle&&this.payload.bundle.some(r=>!!r.showOnOneKey),$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.9.0"}}}run(){var r,i,n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let a=[];for(let o=0;o!!r.showOnOneKey)),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"bundle",type:"array"}]),this.params=[],n.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features),s=[];if(n){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",784);for(let n=0;n$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n;let s=yield this.device.commands.typedCall("SuiGetAddress","SuiAddress",r),a={path:$ce1f303d0aa8ec51$var$serializedPath(r.address_n),address:null!==(n=null===(i=s.message.address)||void 0===i?void 0:i.toLowerCase())&&void 0!==n?n:""};return this.shouldConfirm&&this.postPreviousAddressMessage(a),a})));return $ce1f303d0aa8ec51$var$validateResult(s,["address"],{expectedLength:this.params.length}),this.hasBundle?s:s[0]})}}class $ce1f303d0aa8ec51$var$SuiGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",784),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),publicKey:r,pub:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$SuiSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0}]);let{path:r,messageHex:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i)}}getVersionRange(){return{model_mini:{min:"3.4.0"},model_touch:{min:"4.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("SuiSignMessage","SuiMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$SuiSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.chunkByteSize=1024,this.processTxRequest=(r,i,n,s=0)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if("SuiSignedTx"===i.type)return i.message;let{data_length:a}=i.message;if(!a)return i.message;let o=n.subarray(s,s+a),d=s+o.length,f={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(o)},l=yield r("SuiTxAck",["SuiSignedTx","SuiTxRequest"],Object.assign({},f));return this.processTxRequest(r,l,n,d)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0}]);let{path:r,rawTx:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i)}}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}supportChunkTransfer(){let r=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join(".");if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(r)){if($ce1f303d0aa8ec51$var$semver__default.default.valid(i))return $ce1f303d0aa8ec51$var$semver__default.default.gte(i,"3.7.0")}else if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(r)&&$ce1f303d0aa8ec51$var$semver__default.default.valid(i))return $ce1f303d0aa8ec51$var$semver__default.default.gte(i,"4.8.0");return!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=this.device.getCommands().typedCall.bind(this.device.getCommands()),n=0;this.supportChunkTransfer()&&(n=this.chunkByteSize,r=$ce1f303d0aa8ec51$require$Buffer.from(this.params.raw_tx,"hex"),this.params={address_n:this.params.address_n,raw_tx:"",data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(r.subarray(0,this.chunkByteSize)),data_length:r.length});let s=yield i("SuiSignTx",["SuiSignedTx","SuiTxRequest"],Object.assign({},this.params));return this.processTxRequest(i,s,r,n)})}}const $ce1f303d0aa8ec51$var$validateAddressParameters=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"addressType",type:"number",required:!0},{name:"stakingKeyHash",type:"string"},{name:"paymentScriptHash",type:"string"},{name:"stakingScriptHash",type:"string"}]),r.path&&$ce1f303d0aa8ec51$var$validatePath(r.path),r.stakingPath&&$ce1f303d0aa8ec51$var$validatePath(r.stakingPath),r.certificatePointer&&$ce1f303d0aa8ec51$var$validateParams(r.certificatePointer,[{name:"blockIndex",type:"number",required:!0},{name:"txIndex",type:"number",required:!0},{name:"certificateIndex",type:"number",required:!0}])},$ce1f303d0aa8ec51$var$addressParametersToProto=r=>{let i,n=[];r.path&&(n=$ce1f303d0aa8ec51$var$validatePath(r.path,3));let s=[];return r.stakingPath&&(s=$ce1f303d0aa8ec51$var$validatePath(r.stakingPath,3)),r.certificatePointer&&(i={block_index:r.certificatePointer.blockIndex,tx_index:r.certificatePointer.txIndex,certificate_index:r.certificatePointer.certificateIndex}),{address_type:r.addressType,address_n:n,address_n_staking:s,staking_key_hash:r.stakingKeyHash,certificate_pointer:i,script_payment_hash:r.paymentScriptHash,script_staking_hash:r.stakingScriptHash}},$ce1f303d0aa8ec51$var$addressParametersFromProto=r=>{let i;return r.certificate_pointer&&(i={blockIndex:r.certificate_pointer.block_index,txIndex:r.certificate_pointer.tx_index,certificateIndex:r.certificate_pointer.certificate_index}),{addressType:r.address_type,path:r.address_n,stakingPath:r.address_n_staking,stakingKeyHash:r.staking_key_hash,certificatePointer:i}},$ce1f303d0aa8ec51$var$modifyAddressParametersForBackwardsCompatibility=r=>{if(r.address_type===$5xch2.Messages.CardanoAddressType.REWARD){let{address_n:i,address_n_staking:n}=r;if(i.length>0&&n.length>0)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Only stakingPath is allowed for CardanoAddressType.REWARD");return i.length>0&&(n=i,i=[]),Object.assign(Object.assign({},r),{address_n:i,address_n_staking:n})}return r};class $ce1f303d0aa8ec51$var$CardanoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{init(){var r,i,n;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle),this.isCheck=this.hasBundle?!!(null===(i=this.payload)||void 0===i?void 0:i.bundle.every(r=>!!r.isCheck)):!!(null===(n=this.payload)||void 0===n?void 0:n.isCheck);let s=this.hasBundle?this.payload:{bundle:[this.payload]};this.params=s.bundle.map(r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"addressParameters",type:"object",required:!0},{name:"networkId",type:"number",required:!0},{name:"protocolMagic",type:"number",required:!0},{name:"derivationType",type:"number"},{name:"address",type:"string"},{name:"showOnOneKey",type:"boolean"}]),$ce1f303d0aa8ec51$var$validateAddressParameters(r.addressParameters),{address_parameters:$ce1f303d0aa8ec51$var$addressParametersToProto(r.addressParameters),address:r.address,protocol_magic:r.protocolMagic,network_id:r.networkId,derivation_type:void 0!==r.derivationType?r.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,show_display:"boolean"!=typeof r.showOnOneKey||!!r.showOnOneKey}))}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.1.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i of this.params){let n,s;let{address_parameters:a,protocol_magic:o,network_id:d,derivation_type:f,show_display:l}=i,u=yield this.device.commands.typedCall("CardanoGetAddress","CardanoAddress",{address_parameters:a,protocol_magic:o,network_id:d,derivation_type:f,show_display:l});if(a.address_type===$5xch2.Messages.CardanoAddressType.BASE&&!this.isCheck){let r=yield this.device.commands.typedCall("CardanoGetPublicKey","CardanoPublicKey",{address_n:a.address_n.slice(0,3),derivation_type:f,show_display:!1});n=r.message.xpub;let i=yield this.device.commands.typedCall("CardanoGetAddress","CardanoAddress",{address_parameters:{address_type:$5xch2.Messages.CardanoAddressType.REWARD,address_n:[],address_n_staking:a.address_n_staking},protocol_magic:o,network_id:d,derivation_type:f,show_display:!1});s=i.message.address}let c=$ce1f303d0aa8ec51$var$serializedPath(i.address_parameters.address_n);r.push({addressParameters:$ce1f303d0aa8ec51$var$addressParametersFromProto(i.address_parameters),protocolMagic:i.protocol_magic,networkId:i.network_id,serializedPath:c,serializedStakingPath:$ce1f303d0aa8ec51$var$serializedPath(i.address_parameters.address_n_staking),address:u.message.address,xpub:n,stakeAddress:s}),this.postPreviousAddressMessage({path:c,address:u.message.address})}return $ce1f303d0aa8ec51$var$validateResult(r,["serializedPath","serializedStakingPath","address"],{expectedLength:this.params.length}),this.hasBundle?r:r[0]})}}class $ce1f303d0aa8ec51$var$CardanoGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=i.bundle.map(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"derivationType",type:"number"},{name:"showOnOneKey",type:"boolean"}]);let i=$ce1f303d0aa8ec51$var$validatePath(r.path,3);return{address_n:i,derivation_type:void 0!==r.derivationType?r.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,show_display:"boolean"==typeof r.showOnOneKey&&r.showOnOneKey}})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.1.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[],i=this.device.getCommands();for(let n=0;n($ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"string",required:!0},{name:"prev_index",type:"number",required:!0}]),{input:{prev_hash:r.prev_hash,prev_index:r.prev_index},path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0}),$ce1f303d0aa8ec51$var$transformCollateralInput=r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"string",required:!0},{name:"prev_index",type:"number",required:!0}]),{collateralInput:{prev_hash:r.prev_hash,prev_index:r.prev_index},path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0}),$ce1f303d0aa8ec51$var$transformReferenceInput=r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"string",required:!0},{name:"prev_index",type:"number",required:!0}]),{prev_hash:r.prev_hash,prev_index:r.prev_index}),$ce1f303d0aa8ec51$var$validateTokens=r=>{r.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"assetNameBytes",type:"string",required:!0},{name:"amount",type:"uint"},{name:"mintAmount",type:"uint",allowNegative:!0}])})},$ce1f303d0aa8ec51$var$validateTokenBundle=r=>{r.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"policyId",type:"string",required:!0},{name:"tokenAmounts",type:"array",required:!0}]),$ce1f303d0aa8ec51$var$validateTokens(r.tokenAmounts)})},$ce1f303d0aa8ec51$var$tokenBundleToProto=r=>($ce1f303d0aa8ec51$var$validateTokenBundle(r),r.map(r=>({policyId:r.policyId,tokens:$ce1f303d0aa8ec51$var$tokenAmountsToProto(r.tokenAmounts)}))),$ce1f303d0aa8ec51$var$tokenAmountsToProto=r=>r.map(r=>({asset_name_bytes:r.assetNameBytes,amount:r.amount,mint_amount:r.mintAmount})),$ce1f303d0aa8ec51$var$hexStringByteLength=r=>r.length/2,$ce1f303d0aa8ec51$var$sendChunkedHexString=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a=0;for(;a{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"address",type:"string"},{name:"amount",type:"uint",required:!0},{name:"tokenBundle",type:"array",allowEmpty:!0},{name:"datumHash",type:"string"},{name:"format",type:"number"},{name:"inlineDatum",type:"string"},{name:"referenceScript",type:"string"}]);let i={output:{amount:r.amount,asset_groups_count:0,datum_hash:r.datumHash,format:r.format,inline_datum_size:r.inlineDatum?$ce1f303d0aa8ec51$var$hexStringByteLength(r.inlineDatum):void 0,reference_script_size:r.referenceScript?$ce1f303d0aa8ec51$var$hexStringByteLength(r.referenceScript):void 0},inlineDatum:r.inlineDatum,referenceScript:r.referenceScript};return r.addressParameters?($ce1f303d0aa8ec51$var$validateAddressParameters(r.addressParameters),i.output.address_parameters=$ce1f303d0aa8ec51$var$addressParametersToProto(r.addressParameters)):i.output.address=r.address,r.tokenBundle?(i.tokenBundle=$ce1f303d0aa8ec51$var$tokenBundleToProto(r.tokenBundle),i.output.asset_groups_count=i.tokenBundle.length):i.output.asset_groups_count=0,i},$ce1f303d0aa8ec51$var$sendOutput=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n=2048,{output:s,tokenBundle:a,inlineDatum:o,referenceScript:d}=i;if(yield r("CardanoTxOutput","CardanoTxItemAck",s),a)for(let i of a)for(let n of(yield r("CardanoAssetGroup","CardanoTxItemAck",{policy_id:i.policyId,tokens_count:i.tokens.length}),i.tokens))yield r("CardanoToken","CardanoTxItemAck",n);o&&(yield $ce1f303d0aa8ec51$var$sendChunkedHexString(r,o,n,"CardanoTxInlineDatumChunk")),d&&(yield $ce1f303d0aa8ec51$var$sendChunkedHexString(r,d,n,"CardanoTxReferenceScriptChunk"))}),$ce1f303d0aa8ec51$var$ipv4AddressToHex=r=>$ce1f303d0aa8ec51$require$Buffer.from(r.split(".").map(r=>parseInt(r,10))).toString("hex"),$ce1f303d0aa8ec51$var$ipv6AddressToHex=r=>r.split(":").join(""),$ce1f303d0aa8ec51$var$validatePoolMargin=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"numerator",type:"string",required:!0},{name:"denominator",type:"string",required:!0}])},$ce1f303d0aa8ec51$var$validatePoolMetadata=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"url",type:"string",required:!0},{name:"hash",type:"string",required:!0}])},$ce1f303d0aa8ec51$var$validatePoolRelay=r=>{if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"type",type:"number",required:!0}]),r.type===$5xch2.Messages.CardanoPoolRelayType.SINGLE_HOST_IP){let i=[{name:"port",type:"number",required:!0}];if(r.ipv4Address&&i.push({name:"ipv4Address",type:"string",required:!1}),r.ipv6Address&&i.push({name:"ipv6Address",type:"string",required:!1}),$ce1f303d0aa8ec51$var$validateParams(r,i),!r.ipv4Address&&!r.ipv6Address)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Either ipv4Address or ipv6Address must be supplied")}else r.type===$5xch2.Messages.CardanoPoolRelayType.SINGLE_HOST_NAME?$ce1f303d0aa8ec51$var$validateParams(r,[{name:"hostName",type:"string",required:!0},{name:"port",type:"number",required:!0}]):r.type===$5xch2.Messages.CardanoPoolRelayType.MULTIPLE_HOST_NAME&&$ce1f303d0aa8ec51$var$validateParams(r,[{name:"hostName",type:"string",required:!0}])},$ce1f303d0aa8ec51$var$validatePoolOwners=r=>{r.forEach(r=>{if(r.stakingKeyHash&&$ce1f303d0aa8ec51$var$validateParams(r,[{name:"stakingKeyHash",type:"string",required:!r.stakingKeyPath}]),r.stakingKeyPath&&$ce1f303d0aa8ec51$var$validatePath(r.stakingKeyPath,5),!r.stakingKeyHash&&!r.stakingKeyPath)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Either stakingKeyHash or stakingKeyPath must be supplied")});let i=r.filter(r=>!!r.stakingKeyPath).length;if(1!==i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Exactly one pool owner must be given as a path")},$ce1f303d0aa8ec51$var$validatePoolParameters=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"poolId",type:"string",required:!0},{name:"vrfKeyHash",type:"string",required:!0},{name:"pledge",type:"string",required:!0},{name:"cost",type:"string",required:!0},{name:"margin",type:"object",required:!0},{name:"rewardAccount",type:"string",required:!0},{name:"owners",type:"array",required:!0},{name:"relays",type:"array",required:!0,allowEmpty:!0},{name:"metadata",type:"object"}]),$ce1f303d0aa8ec51$var$validatePoolMargin(r.margin),$ce1f303d0aa8ec51$var$validatePoolOwners(r.owners),r.relays.forEach($ce1f303d0aa8ec51$var$validatePoolRelay),r.metadata&&$ce1f303d0aa8ec51$var$validatePoolMetadata(r.metadata)},$ce1f303d0aa8ec51$var$transformPoolParameters=r=>r?($ce1f303d0aa8ec51$var$validatePoolParameters(r),{poolParameters:{pool_id:r.poolId,vrf_key_hash:r.vrfKeyHash,pledge:r.pledge,cost:r.cost,margin_numerator:r.margin.numerator,margin_denominator:r.margin.denominator,reward_account:r.rewardAccount,metadata:r.metadata,owners_count:r.owners.length,relays_count:r.relays.length},poolOwners:r.owners.map(r=>({staking_key_hash:r.stakingKeyHash,staking_key_path:r.stakingKeyPath?$ce1f303d0aa8ec51$var$validatePath(r.stakingKeyPath,5):void 0})),poolRelays:r.relays.map(r=>({type:r.type,ipv4_address:r.ipv4Address?$ce1f303d0aa8ec51$var$ipv4AddressToHex(r.ipv4Address):void 0,ipv6_address:r.ipv6Address?$ce1f303d0aa8ec51$var$ipv6AddressToHex(r.ipv6Address):void 0,host_name:r.hostName,port:r.port}))}):{poolParameters:void 0,poolOwners:[],poolRelays:[]},$ce1f303d0aa8ec51$var$transformDRep=r=>{if(r){if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"type",type:"number",required:!0},{name:"keyHash",type:"string"},{name:"scriptHash",type:"string"}]),r.type===$5xch2.Messages.CardanoDRepType.KEY_HASH&&!r.keyHash)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"key_hash must be supplied for key_hash type");if(r.type===$5xch2.Messages.CardanoDRepType.SCRIPT_HASH&&!r.scriptHash)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"script_hash must be supplied for script_hash type");return{type:r.type,key_hash:r.keyHash,script_hash:r.scriptHash}}},$ce1f303d0aa8ec51$var$transformCertificate=r=>{let i=[{name:"type",type:"number",required:!0}];r.type!==$5xch2.Messages.CardanoCertificateType.STAKE_POOL_REGISTRATION&&(i.push({name:"scriptHash",type:"string"}),i.push({name:"keyHash",type:"string"})),r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DELEGATION&&i.push({name:"pool",type:"string",required:!0}),r.type===$5xch2.Messages.CardanoCertificateType.STAKE_POOL_REGISTRATION&&i.push({name:"poolParameters",type:"object",required:!0}),(r.type===$5xch2.Messages.CardanoCertificateType.STAKE_REGISTRATION_CONWAY||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY)&&i.push({name:"deposit",required:!0}),r.type===$5xch2.Messages.CardanoCertificateType.VOTE_DELEGATION&&i.push({name:"dRep",type:"object",required:!0}),$ce1f303d0aa8ec51$var$validateParams(r,i);let{poolParameters:n,poolOwners:s,poolRelays:a}=$ce1f303d0aa8ec51$var$transformPoolParameters(r.poolParameters),o=$ce1f303d0aa8ec51$var$transformDRep(r.dRep);return{certificate:{type:r.type,path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0,script_hash:r.scriptHash,key_hash:r.keyHash,pool:r.pool,pool_parameters:n,deposit:r.deposit,drep:o},poolOwners:s,poolRelays:a}},$ce1f303d0aa8ec51$var$MAX_DELEGATION_COUNT=32,$ce1f303d0aa8ec51$var$transformDelegation=r=>(r.votingPublicKey&&(console.warn("Please use votePublicKey instead of votingPublicKey."),r.votePublicKey=r.votingPublicKey),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"votingPublicKey",type:"string",required:!0},{name:"weight",type:"uint",required:!0}]),{vote_public_key:r.votePublicKey,weight:r.weight}),$ce1f303d0aa8ec51$var$transformCvoteRegistrationParameters=r=>{var i;r.votingPublicKey&&(console.warn("Please use votePublicKey instead of votingPublicKey."),r.votePublicKey=r.votingPublicKey),r.rewardAddressParameters&&(console.warn("Please use paymentAddressParameters instead of rewardAddressParameters."),r.paymentAddressParameters=r.rewardAddressParameters),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"votePublicKey",type:"string"},{name:"stakingPath",required:!0},{name:"nonce",type:"uint",required:!0},{name:"format",type:"number"},{name:"delegations",type:"array",allowEmpty:!0},{name:"votingPurpose",type:"uint"},{name:"paymentAddress",type:"string"}]);let{paymentAddressParameters:n}=r;$ce1f303d0aa8ec51$var$validateAddressParameters(n);let{delegations:s}=r;if(s&&s.length>$ce1f303d0aa8ec51$var$MAX_DELEGATION_COUNT)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`At most ${$ce1f303d0aa8ec51$var$MAX_DELEGATION_COUNT} delegations are allowed in a governance registration`);return{vote_public_key:r.votePublicKey,staking_path:$ce1f303d0aa8ec51$var$validatePath(r.stakingPath,3),payment_address_parameters:n?$ce1f303d0aa8ec51$var$addressParametersToProto(n):void 0,nonce:r.nonce,format:r.format,delegations:null!==(i=null==s?void 0:s.map($ce1f303d0aa8ec51$var$transformDelegation))&&void 0!==i?i:[],voting_purpose:r.votingPurpose,payment_address:r.paymentAddress}},$ce1f303d0aa8ec51$var$transformAuxiliaryData=r=>{let i;return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"hash",type:"string"}]),r.cVoteRegistrationParameters&&(i=$ce1f303d0aa8ec51$var$transformCvoteRegistrationParameters(r.cVoteRegistrationParameters)),{hash:r.hash,cvote_registration_parameters:i}},$ce1f303d0aa8ec51$var$modifyAuxiliaryDataForBackwardsCompatibility=r=>{let{cvote_registration_parameters:i}=r;return(null==i?void 0:i.payment_address_parameters)?(i.payment_address_parameters=$ce1f303d0aa8ec51$var$modifyAddressParametersForBackwardsCompatibility(i.payment_address_parameters),Object.assign(Object.assign({},r),{cvote_registration_parameters:i})):r},$ce1f303d0aa8ec51$var$gatherWitnessPaths=(r,i,n,s,a,o,d)=>{let f=new Map;function l(r){let i=JSON.stringify(r);f.set(i,r)}return d!==$5xch2.Messages.CardanoTxSigningMode.MULTISIG_TRANSACTION&&(r.forEach(({path:r})=>{r&&l(r)}),i.forEach(({certificate:r,poolOwners:i})=>{r.path&&(r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DELEGATION||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DEREGISTRATION)&&l(r.path),i.forEach(r=>{r.staking_key_path&&l(r.staking_key_path)})}),n.forEach(({path:r})=>{r&&l(r)})),d===$5xch2.Messages.CardanoTxSigningMode.PLUTUS_TRANSACTION&&s.forEach(({path:r})=>{r&&l(r)}),a.forEach(({key_path:r})=>{r&&l(r)}),o.forEach(r=>{l(r)}),Array.from(f.values())};class $ce1f303d0aa8ec51$var$CardanoSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasConway=()=>{var r,i;let n=this.payload;if(!0===n.tagCborSets||(null===(r=n.auxiliaryData)||void 0===r?void 0:r.cVoteRegistrationParameters)!=null)return!0;for(let r of null!==(i=n.certificates)&&void 0!==i?i:[])if(null!=r.dRep||null!=r.deposit||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_REGISTRATION_CONWAY||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY||r.type===$5xch2.Messages.CardanoCertificateType.VOTE_DELEGATION)return!0;return!1},this.supportConwayVersionRange=()=>({pro:{min:"4.12.0"},touch:{min:"4.10.0"},classic:{min:"3.10.0"}}),this.checkSupportConway=()=>{var r;if(!this.hasConway())return;let i=null===(r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features))||void 0===r?void 0:r.join("."),n=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.device.features,r=>this.supportConwayVersionRange()[r]);if(n&&(!$ce1f303d0aa8ec51$var$semver__default.default.valid(i)||$ce1f303d0aa8ec51$var$semver__default.default.lt(i,n.min)))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,`Device firmware version is too low, please update to ${n.min}`,{current:i,require:n.min})}}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.1.0"}}}init(){var r;let i;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let{payload:n}=this;n.auxiliaryData&&n.auxiliaryData.governanceRegistrationParameters&&(console.warn("Please use cVoteRegistrationParameters instead of governanceRegistrationParameters."),n.auxiliaryData.cVoteRegistrationParameters=n.auxiliaryData.governanceRegistrationParameters),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"signingMode",type:"number",required:!0},{name:"inputs",type:"array",required:!0},{name:"outputs",type:"array",required:!0,allowEmpty:!0},{name:"fee",type:"uint",required:!0},{name:"ttl",type:"uint"},{name:"certificates",type:"array",allowEmpty:!0},{name:"withdrawals",type:"array",allowEmpty:!0},{name:"mint",type:"array",allowEmpty:!0},{name:"validityIntervalStart",type:"uint"},{name:"scriptDataHash",type:"string"},{name:"collateralInputs",type:"array",allowEmpty:!0},{name:"requiredSigners",type:"array",allowEmpty:!0},{name:"totalCollateral",type:"uint"},{name:"referenceInputs",type:"array",allowEmpty:!0},{name:"protocolMagic",type:"number",required:!0},{name:"networkId",type:"number",required:!0},{name:"additionalWitnessRequests",type:"array",allowEmpty:!0},{name:"derivationType",type:"number"},{name:"includeNetworkId",type:"boolean"},{name:"chunkify",type:"boolean"},{name:"tagCborSets",type:"boolean"}]);let s=n.inputs.map($ce1f303d0aa8ec51$var$transformInput),a=n.outputs.map($ce1f303d0aa8ec51$var$transformOutput),o=[];n.certificates&&(o=n.certificates.map($ce1f303d0aa8ec51$var$transformCertificate));let d=[];n.withdrawals&&(d=n.withdrawals.map(r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"amount",type:"uint",required:!0},{name:"scriptHash",type:"string"},{name:"keyHash",type:"string"}]),{path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0,amount:r.amount,script_hash:r.scriptHash,key_hash:r.keyHash})));let f=[];n.mint&&(f=$ce1f303d0aa8ec51$var$tokenBundleToProto(n.mint)),n.auxiliaryData&&(i=$ce1f303d0aa8ec51$var$transformAuxiliaryData(n.auxiliaryData));let l=[];n.additionalWitnessRequests&&(l=n.additionalWitnessRequests.map(r=>$ce1f303d0aa8ec51$var$validatePath(r,3)));let u=[];n.collateralInputs&&(u=n.collateralInputs.map($ce1f303d0aa8ec51$var$transformCollateralInput));let c=[];n.requiredSigners&&(c=n.requiredSigners.map(r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"keyHash",type:"string"}]),{key_path:r.keyPath?$ce1f303d0aa8ec51$var$validatePath(r.keyPath,3):void 0,key_hash:r.keyHash})));let p=n.collateralReturn?$ce1f303d0aa8ec51$var$transformOutput(n.collateralReturn):void 0,h=[];n.referenceInputs&&(h=n.referenceInputs.map($ce1f303d0aa8ec51$var$transformReferenceInput)),this.params={signingMode:n.signingMode,inputsWithPath:s,outputsWithData:a,fee:n.fee,ttl:n.ttl,certificatesWithPoolOwnersAndRelays:o,withdrawals:d,mint:f,auxiliaryData:i,validityIntervalStart:n.validityIntervalStart,scriptDataHash:n.scriptDataHash,collateralInputsWithPath:u,requiredSigners:c,collateralReturnWithData:p,totalCollateral:n.totalCollateral,referenceInputs:h,protocolMagic:n.protocolMagic,networkId:n.networkId,witnessPaths:$ce1f303d0aa8ec51$var$gatherWitnessPaths(s,o,d,u,c,l,n.signingMode),additionalWitnessRequests:l,derivationType:void 0!==n.derivationType?n.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,includeNetworkId:n.includeNetworkId,chunkify:n.chunkify,tagCborSets:n.tagCborSets}}signTx(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=this.device.getCommands().typedCall.bind(this.device.getCommands()),n=!!this.params.auxiliaryData,s={signing_mode:this.params.signingMode,protocol_magic:this.params.protocolMagic,network_id:this.params.networkId,inputs_count:this.params.inputsWithPath.length,outputs_count:this.params.outputsWithData.length,fee:this.params.fee,ttl:this.params.ttl,certificates_count:this.params.certificatesWithPoolOwnersAndRelays.length,withdrawals_count:this.params.withdrawals.length,has_auxiliary_data:n,validity_interval_start:this.params.validityIntervalStart,witness_requests_count:this.params.witnessPaths.length,minting_asset_groups_count:this.params.mint.length,script_data_hash:this.params.scriptDataHash,collateral_inputs_count:this.params.collateralInputsWithPath.length,required_signers_count:this.params.requiredSigners.length,has_collateral_return:null!=this.params.collateralReturnWithData,total_collateral:this.params.totalCollateral,reference_inputs_count:this.params.referenceInputs.length,derivation_type:this.params.derivationType,include_network_id:this.params.includeNetworkId,chunkify:this.params.chunkify,tag_cbor_sets:this.params.tagCborSets};for(let{input:r}of(yield i("CardanoSignTxInit","CardanoTxItemAck",s),this.params.inputsWithPath))yield i("CardanoTxInput","CardanoTxItemAck",r);for(let r of this.params.outputsWithData)yield $ce1f303d0aa8ec51$var$sendOutput(i,r);for(let{certificate:r,poolOwners:n,poolRelays:s}of this.params.certificatesWithPoolOwnersAndRelays){for(let s of(yield i("CardanoTxCertificate","CardanoTxItemAck",r),n))yield i("CardanoPoolOwner","CardanoTxItemAck",s);for(let r of s)yield i("CardanoPoolRelayParameters","CardanoTxItemAck",r)}for(let r of this.params.withdrawals)yield i("CardanoTxWithdrawal","CardanoTxItemAck",r);if(this.params.auxiliaryData){let{catalyst_registration_parameters:n}=this.params.auxiliaryData;n&&(this.params.auxiliaryData=$ce1f303d0aa8ec51$var$modifyAuxiliaryDataForBackwardsCompatibility(this.params.auxiliaryData));let{message:s}=yield i("CardanoTxAuxiliaryData","CardanoTxAuxiliaryDataSupplement",this.params.auxiliaryData),a=$5xch2.Messages.CardanoTxAuxiliaryDataSupplementType[s.type];a!==$5xch2.Messages.CardanoTxAuxiliaryDataSupplementType.NONE&&(r={type:a,auxiliaryDataHash:s.auxiliary_data_hash,cVoteRegistrationSignature:s.cvote_registration_signature,catalystSignature:s.cvote_registration_signature,governanceSignature:s.cvote_registration_signature}),yield i("CardanoTxHostAck","CardanoTxItemAck")}if(this.params.mint.length>0)for(let r of(yield i("CardanoTxMint","CardanoTxItemAck",{asset_groups_count:this.params.mint.length}),this.params.mint))for(let n of(yield i("CardanoAssetGroup","CardanoTxItemAck",{policy_id:r.policyId,tokens_count:r.tokens.length}),r.tokens))yield i("CardanoToken","CardanoTxItemAck",n);for(let{collateralInput:r}of this.params.collateralInputsWithPath)yield i("CardanoTxCollateralInput","CardanoTxItemAck",r);for(let r of this.params.requiredSigners)yield i("CardanoTxRequiredSigner","CardanoTxItemAck",r);for(let r of(this.params.collateralReturnWithData&&(yield $ce1f303d0aa8ec51$var$sendOutput(i,this.params.collateralReturnWithData)),this.params.referenceInputs))yield i("CardanoTxReferenceInput","CardanoTxItemAck",r);let a=[];for(let r of this.params.witnessPaths){let{message:n}=yield i("CardanoTxWitnessRequest","CardanoTxWitnessResponse",{path:r});a.push({type:$5xch2.Messages.CardanoTxWitnessType[n.type],pubKey:n.pub_key,signature:n.signature,chainCode:n.chain_code})}let{message:o}=yield i("CardanoTxHostAck","CardanoTxBodyHash");return yield i("CardanoTxHostAck","CardanoSignTxFinished"),{hash:o.tx_hash,witnesses:a,auxiliaryDataSupplement:r}})}run(){return this.checkSupportConway(),this.signTx()}}class $ce1f303d0aa8ec51$var$CardanoSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE];let{payload:r}=this;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",type:"string",required:!0},{name:"message",type:"string",required:!0},{name:"derivationType",type:"number"},{name:"networkId",type:"number",required:!0},{name:"addressType",type:"number"},{name:"protocolMagic",type:"number"}]);let i=$ce1f303d0aa8ec51$var$validatePath(r.path,3);this.params={address_n:i,message:r.message,derivation_type:void 0!==r.derivationType?r.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,network_id:r.networkId,address_type:r.addressType,protocol_magic:r.protocolMagic}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}getAddressTypeVersionRange(){return{pro:{min:"4.9.3"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFeatureVersionLimit(()=>null!==this.params.address_type&&void 0!==this.params.address_type,()=>this.getAddressTypeVersionRange());let r=yield this.device.commands.typedCall("CardanoSignMessage","CardanoMessageSignature",this.params);return r.message})}}class $ce1f303d0aa8ec51$var$FilecoinGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"isTestnet",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,testnet:r.isTestnet})})}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"3.5.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"prefix",required:!0},{name:"network",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{prefix:a,network:o}=r;this.params.push({address_n:n,prefix:a,network:$ce1f303d0aa8ec51$var$parseNetwork(o),show_display:s})})}getVersionRange(){let r=this.params.map(r=>r.network);return $ce1f303d0aa8ec51$var$getPolkadotVersionRangeWithBundle(r)}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"prefix",type:"string"},{name:"scheme",type:"string"},{name:"useTweak",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,prefix:r.prefix,scheme:r.scheme,use_tweak:r.useTweak})})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}getUseTweakVersionRange(){return{pro:{min:"4.14.0"},model_classic1s:{min:"3.12.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFeatureVersionLimit(()=>this.params.some(r=>!1===r.use_tweak),()=>this.getUseTweakVersionRange(),{strictCheckDeviceSupport:!0});let r=[];for(let i=0;ir+i.length,0),this}toBuffer(){return this.concat()}concat(){return $awmEs.Buffer.concat(this.bufs,this.bufLen)}write(r){if(!$ce1f303d0aa8ec51$var$isBuffer(r))throw Error("BufferWriter.write: Invalid type");return this.bufs.push(r),this.bufLen+=r.length,this}writeReverse(r){if(!$ce1f303d0aa8ec51$var$isBuffer(r))throw Error("BufferWriter.write: Invalid type");return this.bufs.push(r.reverse()),this.bufLen+=r.length,this}writeVarBytes(r){if(!$ce1f303d0aa8ec51$var$isBuffer(r))throw Error("BufferWriter.write: Invalid type");return this.writeUInt64LE(new $ce1f303d0aa8ec51$var$BigNumber__default.default(r.length)),this.write(r),this}writeUInt8(r){let i=$awmEs.Buffer.alloc(1);return i.writeUInt8(r,0),this.write(i),this}writeUInt16BE(r){let i=$awmEs.Buffer.alloc(2);return i.writeUInt16BE(r,0),this.write(i),this}writeUInt16LE(r){let i=$awmEs.Buffer.alloc(2);return i.writeUInt16LE(r,0),this.write(i),this}writeUInt32BE(r){let i=$awmEs.Buffer.alloc(4);return i.writeUInt32BE(r,0),this.write(i),this}writeInt32LE(r){let i=$awmEs.Buffer.alloc(4);return i.writeInt32LE(r,0),this.write(i),this}writeUInt32LE(r){let i=$awmEs.Buffer.alloc(4);return i.writeUInt32LE(r,0),this.write(i),this}writeUInt64BEBN(r){let i=$ce1f303d0aa8ec51$var$bigNumberToBuffer(r,{size:8});return this.write(i),this}writeUInt64LE(r){let i=$ce1f303d0aa8ec51$var$bigNumberToBuffer(r,{size:8});return this.writeReverse(i),this}writeVarintNum(r){let i=$ce1f303d0aa8ec51$var$BufferWriter.varintBufNum(r);return this.write(i),this}writeVarintBN(r){let i=$ce1f303d0aa8ec51$var$BufferWriter.varintBufBN(r);return this.write(i),this}static varintBufNum(r){let i;return r<253?(i=$awmEs.Buffer.alloc(1)).writeUInt8(r,0):r<65536?((i=$awmEs.Buffer.alloc(3)).writeUInt8(253,0),i.writeUInt16LE(r,1)):r<4294967296?((i=$awmEs.Buffer.alloc(5)).writeUInt8(254,0),i.writeUInt32LE(r,1)):((i=$awmEs.Buffer.alloc(9)).writeUInt8(255,0),i.writeInt32LE(-1&r,1),i.writeUInt32LE(Math.floor(r/4294967296),5)),i}static varintBufBN(r){let i;let n=r.toNumber();if(n<253)(i=$awmEs.Buffer.alloc(1)).writeUInt8(n,0);else if(n<65536)(i=$awmEs.Buffer.alloc(3)).writeUInt8(253,0),i.writeUInt16LE(n,1);else if(n<4294967296)(i=$awmEs.Buffer.alloc(5)).writeUInt8(254,0),i.writeUInt32LE(n,1);else{let n=new $ce1f303d0aa8ec51$var$BufferWriter;n.writeUInt8(255),n.writeUInt64LE(r),i=n.concat()}return i}}const $ce1f303d0aa8ec51$var$TransactionSigningHashKey=$ce1f303d0aa8ec51$require$Buffer.from("TransactionSigningHash");class $ce1f303d0aa8ec51$var$HashWriter{constructor(){this.bw=new $ce1f303d0aa8ec51$var$BufferWriter,this.blake2b=$692be64e687bb0ca$exports.blake2b.create({dkLen:32,key:$ce1f303d0aa8ec51$var$TransactionSigningHashKey}),this.hash={update:r=>{this.bw.write(r),this.blake2b.update(r)},digest:()=>$ce1f303d0aa8ec51$require$Buffer.from(this.blake2b.digest())}}writeUInt8(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt8(r),this.hash.update(i.toBuffer())}writeUInt16LE(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt16LE(r),this.hash.update(i.toBuffer())}writeUInt32LE(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt32LE(r),this.hash.update(i.toBuffer())}writeUInt64LE(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt64LE(new $ce1f303d0aa8ec51$var$BigNumber__default.default(r)),this.hash.update(i.toBuffer())}writeVarBytes(r){this.writeUInt64LE(r.length),this.hash.update(r)}writeHash(r){this.hash.update(r)}finalize(){return this.hash.digest()}toBuffer(){return this.bw.toBuffer()}}function $ce1f303d0aa8ec51$var$zeroHash(){return $ce1f303d0aa8ec51$require$Buffer.alloc(32)}function $ce1f303d0aa8ec51$var$zeroSubnetworkID(){return $ce1f303d0aa8ec51$require$Buffer.alloc(20)}function $ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(r){return(r&$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_ANYONECANPAY)===$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_ANYONECANPAY}function $ce1f303d0aa8ec51$var$isSighashSingle(r){return(31&r)===$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_SINGLE}function $ce1f303d0aa8ec51$var$isSighashNone(r){return(31&r)===$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_NONE}function $ce1f303d0aa8ec51$var$hashOutpoint(r,i){r.writeHash($ce1f303d0aa8ec51$require$Buffer.from(i.prevTxId,"hex")),r.writeUInt32LE(i.outputIndex)}function $ce1f303d0aa8ec51$var$getPreviousOutputsHash(r,i){if($ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(i))return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return r.inputs.forEach(r=>$ce1f303d0aa8ec51$var$hashOutpoint(n,r)),n.finalize()}function $ce1f303d0aa8ec51$var$getSequencesHash(r,i){if($ce1f303d0aa8ec51$var$isSighashSingle(i)||$ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(i)||$ce1f303d0aa8ec51$var$isSighashNone(i))return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return r.inputs.forEach(r=>n.writeUInt64LE(r.sequenceNumber)),n.finalize()}function $ce1f303d0aa8ec51$var$getSigOpCountsHash(r,i){if($ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(i))return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return r.inputs.forEach(r=>n.writeUInt8(r.sigOpCount)),n.finalize()}function $ce1f303d0aa8ec51$var$hashTxOut(r,i){r.writeUInt64LE(i.satoshis),r.writeUInt16LE(0),r.writeVarBytes($ce1f303d0aa8ec51$require$Buffer.from(i.script,"hex"))}function $ce1f303d0aa8ec51$var$getOutputsHash(r,i,n){if($ce1f303d0aa8ec51$var$isSighashNone(n))return $ce1f303d0aa8ec51$var$zeroHash();if($ce1f303d0aa8ec51$var$isSighashSingle(n)){if(i>=r.outputs.length)return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return n.finalize()}let s=new $ce1f303d0aa8ec51$var$HashWriter;return r.outputs.forEach(r=>$ce1f303d0aa8ec51$var$hashTxOut(s,r)),s.finalize()}function $ce1f303d0aa8ec51$var$serialize(r,i){var n;let s=new $ce1f303d0aa8ec51$var$HashWriter;s.writeUInt16LE(r.version),s.writeHash($ce1f303d0aa8ec51$var$getPreviousOutputsHash(r,r.sigHashType)),s.writeHash($ce1f303d0aa8ec51$var$getSequencesHash(r,r.sigHashType)),s.writeHash($ce1f303d0aa8ec51$var$getSigOpCountsHash(r,r.sigHashType));let a=r.inputs[i];return $ce1f303d0aa8ec51$var$hashOutpoint(s,a),s.writeUInt16LE(0),s.writeVarBytes($ce1f303d0aa8ec51$require$Buffer.from(a.output.script,"hex")),s.writeUInt64LE(a.output.satoshis),s.writeUInt64LE(a.sequenceNumber),s.writeUInt8(null!==(n=r.sigOpCount)&&void 0!==n?n:1),s.writeHash($ce1f303d0aa8ec51$var$getOutputsHash(r,i,r.sigHashType)),s.writeUInt64LE(r.lockTime),s.writeHash($ce1f303d0aa8ec51$var$zeroSubnetworkID()),s.writeUInt64LE(0),s.writeHash($ce1f303d0aa8ec51$var$zeroHash()),s.writeUInt8(r.sigHashType),{hash:s.finalize(),raw:s.toBuffer()}}class $ce1f303d0aa8ec51$var$KaspaSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r,i,n,s,a;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE];let o=this.payload;$ce1f303d0aa8ec51$var$validateParams(o,[{name:"version",type:"number"},{name:"sigHashType",type:"number",required:!0},{name:"inputs",type:"array",required:!0},{name:"outputs",type:"array",required:!0},{name:"lockTime",required:!0},{name:"sigOpCount",type:"number"},{name:"subNetworkID",type:"string"},{name:"useTweak",type:"boolean"}]);let d=o.inputs.map(r=>{var i;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",type:"string",required:!0},{name:"prevTxId",type:"string",required:!0},{name:"outputIndex",type:"number",required:!0},{name:"sequenceNumber",required:!0}]);let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);return Object.assign(Object.assign({},r),{path:n,sigOpCount:null!==(i=r.sigOpCount)&&void 0!==i?i:1})}),f=o.outputs.map(r=>{var i;return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"satoshis",required:!0},{name:"script",type:"string",required:!0},{name:"scriptVersion",type:"number"}]),Object.assign(Object.assign({},r),{scriptVersion:null!==(i=r.scriptVersion)&&void 0!==i?i:0})});this.params=Object.assign(Object.assign({},o),{inputs:d,outputs:f,scheme:null!==(r=o.scheme)&&void 0!==r?r:"schnorr",prefix:null!==(i=o.prefix)&&void 0!==i?i:"kaspa",sigHashType:null!==(n=o.sigHashType)&&void 0!==n?n:$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_ALL|$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_FORKID,sigOpCount:null!==(s=o.sigOpCount)&&void 0!==s?s:1,subNetworkID:null!==(a=o.subNetworkID)&&void 0!==a?a:$bb5e1fcd97588e49$exports.bytesToHex($ce1f303d0aa8ec51$var$zeroSubnetworkID()),useTweak:o.useTweak})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}getUseTweakVersionRange(){return{pro:{min:"4.14.0"},model_classic1s:{min:"3.12.0"}}}processTxRequest(r,i,n,s){var a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if("KaspaSignedTx"===i.type)return s.push({index:n,signature:i.message.signature}),s;if("KaspaTxInputRequest"===i.type){s.push({index:n,signature:null!==(a=i.message.signature)&&void 0!==a?a:""});let o=i.message.request_index,{raw:d}=$ce1f303d0aa8ec51$var$serialize(this.params,o),f=this.params.inputs[o],l=yield r("KaspaTxInputAck",["KaspaTxInputRequest","KaspaSignedTx"],{address_n:f.path,raw_message:$bb5e1fcd97588e49$exports.bytesToHex(d)});return this.processTxRequest(r,l,o,s)}return s})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFeatureVersionLimit(()=>!1===this.params.useTweak,()=>this.getUseTweakVersionRange(),{strictCheckDeviceSupport:!0});let{raw:r}=$ce1f303d0aa8ec51$var$serialize(this.params,0),i=this.params.inputs[0],{device:n,params:s}=this,a=yield n.commands.typedCall("KaspaSignTx",["KaspaTxInputRequest","KaspaSignedTx"],{address_n:i.path,raw_message:$bb5e1fcd97588e49$exports.bytesToHex(r),scheme:s.scheme,prefix:s.prefix,input_count:s.inputs.length,use_tweak:s.useTweak});return this.processTxRequest(n.commands.typedCall.bind(n.commands),a,0,[])})}}class $ce1f303d0aa8ec51$var$NexaGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"prefix",type:"string"},{name:"scheme",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,prefix:r.prefix,scheme:r.scheme})})}getVersionRange(){return{model_mini:{min:"3.2.0"},model_touch:{min:"4.4.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i($ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",type:"string",required:!0},{name:"message",type:"string",required:!0},{name:"prefix",type:"string",required:!0}]),r)),this.params=r}getVersionRange(){return{model_mini:{min:"3.2.0"},model_touch:{min:"4.4.0"}}}processTxRequest(r,i,n,s){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{signature:a}=i.message;if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ResponseUnexpectTypeError,"signature is not valid");if("NexaSignedTx"===i.type)return s.push({index:n,signature:a}),s;if("NexaTxInputRequest"===i.type){s.push({index:n,signature:a});let o=i.message.request_index,d=this.params.inputs[o],f=yield r("NexaTxInputAck",["NexaTxInputRequest","NexaSignedTx"],{address_n:d.path,raw_message:d.message});return this.processTxRequest(r,f,o,s)}return s})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:r,params:i}=this,n=i.inputs[0],s=yield r.commands.typedCall("NexaSignTx",["NexaTxInputRequest","NexaSignedTx"],{address_n:$ce1f303d0aa8ec51$var$validatePath(n.path,3),raw_message:n.message,prefix:n.prefix,input_count:i.inputs.length});return this.processTxRequest(r.commands.typedCall.bind(r.commands),s,0,[])})}}class $ce1f303d0aa8ec51$var$NostrGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=Object.prototype.hasOwnProperty.call(this.payload,"bundle");let r=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(r,[{name:"bundle",type:"array"}]),this.params=[],r.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,1);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"3.6.0"},model_touch:{min:"4.7.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"network",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,network:r.network})})}getVersionRange(){return{model_mini:{min:"3.7.0"},model_touch:{min:"4.9.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var a,o;if("NervosSignedTx"===i.type){if(!(null===(a=null==i?void 0:i.message)||void 0===a?void 0:a.signature))throw Error("No signature returned");return Object.assign(Object.assign({},i.message),{path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n)})}let{data_length:d}=i.message;if(!d){if(!(null===(o=null==i?void 0:i.message)||void 0===o?void 0:o.signature))throw Error("No signature returned");return Object.assign(Object.assign({},i.message),{path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n)})}let f=n.subarray(s,s+d),l=s+f.length,u={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(f)},c=yield r("NervosTxAck",["NervosSignedTx","NervosTxRequest"],Object.assign({},u));return this.processTxRequest(r,c,n,l)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"witnessHex",type:"hexString",required:!0},{name:"network",type:"string",required:!0}]);let{path:r,rawTx:i,witnessHex:n,network:s}=this.payload,a=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:a,raw_tx:$ce1f303d0aa8ec51$require$Buffer.from($ce1f303d0aa8ec51$var$formatAnyHex(i),"hex"),witness_buffer:$ce1f303d0aa8ec51$var$formatAnyHex(n),network:s}}getVersionRange(){return{model_mini:{min:"3.7.0"},model_touch:{min:"4.9.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=this.params.raw_tx.length,i=r,n=this.params.raw_tx,s=this.device.getCommands().typedCall.bind(this.device.getCommands()),a=yield s("NervosSignTx","NervosSignedTx",{address_n:this.params.address_n,data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(n.subarray(0,i)),data_length:r,witness_buffer:this.params.witness_buffer,network:this.params.network});return this.processTxRequest(s,a,n,i)})}}class $ce1f303d0aa8ec51$var$DnxGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{classic:{min:"3.8.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i!!r.showOnOneKey),$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"walletVersion"},{name:"isBounceable",type:"boolean"},{name:"isTestnetOnly",type:"boolean"},{name:"workchain"},{name:"walletId",type:"number"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,wallet_version:r.walletVersion,is_bounceable:r.isBounceable,is_testnet_only:r.isTestnetOnly,workchain:r.workchain,wallet_id:r.walletId})})}getVersionRange(){return{model_touch:{min:"4.10.0"},model_classic1s:{min:"3.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!r.init_data_length){let i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),n=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic1s.includes(i),s=null==r.signning_message;return Promise.resolve(Object.assign(Object.assign({},r),{skip_validate:n||s}))}let[n,s]=$ce1f303d0aa8ec51$var$cutString(i,2*r.init_data_length),a=yield this.device.commands.typedCall("TonTxAck","TonSignedMessage",{init_data_chunk:n});return this.processTxRequest(a.message,s)})}init(){this.strictCheckDeviceSupport=!0,this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"destination",type:"string"},{name:"jettonMasterAddress",type:"string"},{name:"jettonWalletAddress",type:"string"},{name:"tonAmount"},{name:"jettonAmount"},{name:"fwdFee"},{name:"comment",type:"string"},{name:"isRawData",type:"boolean"},{name:"mode",type:"number"},{name:"seqno",type:"number"},{name:"expireAt"},{name:"walletVersion"},{name:"walletId",type:"number"},{name:"workchain"},{name:"isBounceable",type:"boolean"},{name:"isTestnetOnly",type:"boolean"},{name:"extDestination",type:"array"},{name:"extTonAmount",type:"array"},{name:"extPayload",type:"array"},{name:"initState",type:"hexString"},{name:"signingMessageRepr",type:"hexString"}]);let{path:r}=this.payload,i=$ce1f303d0aa8ec51$var$validatePath(r,3);this.initState=$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(this.payload.initState));let n=null==this.initState?0:this.initState.length/2;this.params={address_n:i,destination:this.payload.destination,jetton_master_address:this.payload.jettonMasterAddress,jetton_wallet_address:this.payload.jettonWalletAddress,ton_amount:this.payload.tonAmount,fwd_fee:this.payload.fwdFee,comment:this.payload.comment,mode:this.payload.mode,is_raw_data:this.payload.isRawData,seqno:this.payload.seqno,expire_at:this.payload.expireAt,wallet_version:this.payload.walletVersion,wallet_id:this.payload.walletId,workchain:this.payload.workchain,is_bounceable:this.payload.isBounceable,is_testnet_only:this.payload.isTestnetOnly,ext_destination:this.payload.extDestination,ext_ton_amount:this.payload.extTonAmount,ext_payload:this.payload.extPayload,init_data_length:n,signing_message_repr:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(this.payload.signingMessageRepr))}}getVersionRange(){return{model_touch:{min:"4.10.0"},model_classic1s:{min:"3.10.0"}}}getSupportJettonAmountBytesVersionRange(){return{pro:{min:"4.10.2"},model_classic1s:{min:"3.10.0"}}}checkSupportJettonAmountBytes(){var r;let i=null===(r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features))||void 0===r?void 0:r.join("."),n=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.device.features,r=>this.getSupportJettonAmountBytesVersionRange()[r]);return!!(!n||$ce1f303d0aa8ec51$var$semver__default.default.valid(i)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(i,n.min))}getFixCommentErrorVersionRange(){return{pro:{min:"4.10.1"},model_classic1s:{min:"3.10.0"}}}checkFixCommentError(){let{comment:r,jettonAmount:i}=this.payload;this.checkFeatureVersionLimit(()=>!$7U5sq.isEmpty(r)&&null!=i,()=>this.getFixCommentErrorVersionRange())}getFixInitStateErrorVersionRange(){return{pro:{min:"4.13.0"},model_classic1s:{min:"3.12.0"}}}checkFixInitStateError(){let{initState:r,signingMessageRepr:i}=this.payload;this.checkFeatureVersionLimit(()=>!$7U5sq.isEmpty(r)&&!$7U5sq.isEmpty(i),()=>this.getFixInitStateErrorVersionRange())}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFixCommentError(),this.checkFixInitStateError();let{jettonAmount:i}=this.payload;i&&(this.checkSupportJettonAmountBytes()?this.params.jetton_amount_bytes=$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i).toString(16))):this.params.jetton_amount=i);let n=null!==(r=this.initState)&&void 0!==r?r:"";if(this.initState){let[r,i]=$ce1f303d0aa8ec51$var$cutString(n,2048);this.params.init_data_initial_chunk=r,n=i}let s=this.device.getCommands().typedCall.bind(this.device.getCommands()),a=yield s("TonSignMessage","TonSignedMessage",Object.assign({},this.params));return this.processTxRequest(a.message,n)})}}class $ce1f303d0aa8ec51$var$TonSignProof extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.strictCheckDeviceSupport=!0,this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"appdomain",type:"string"},{name:"comment",type:"string"},{name:"expireAt"},{name:"walletVersion"},{name:"walletId",type:"number"},{name:"workchain"},{name:"isBounceable",type:"boolean"},{name:"isTestnetOnly",type:"boolean"}]);let{path:r}=this.payload,i=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:i,appdomain:this.payload.appdomain,comment:this.payload.comment,expire_at:this.payload.expireAt,wallet_version:this.payload.walletVersion,wallet_id:this.payload.walletId,workchain:this.payload.workchain,is_bounceable:this.payload.isBounceable,is_testnet_only:this.payload.isTestnetOnly}}getVersionRange(){return{model_touch:{min:"4.10.0"},model_classic1s:{min:"3.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("TonSignProof","TonSignedProof",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$ScdoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{data_length:a}=i.message;if(!a)return i.message;let o=n.subarray(s,s+a),d=s+o.length,f={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(o)},l=yield r("ScdoTxAck","ScdoSignedTx",Object.assign({},f));return this.processTxRequest(r,l,n,d)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"nonce",required:!0},{name:"gasPrice",required:!0,type:"string"},{name:"gasLimit",required:!0,type:"string"},{name:"to",required:!0,type:"string"},{name:"value",required:!0,type:"string"},{name:"timestamp",required:!0,type:"string"},{name:"data",type:"hexString"},{name:"txType",type:"number"}]);let{path:r,nonce:i,gasPrice:n,gasLimit:s,to:a,value:o,timestamp:d,txType:f}=this.payload,l=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:l,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(i)),gas_price:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(n)),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(s)),to:a,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(o)),timestamp:d?$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(d)):void 0,tx_type:f}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands()),n=null===(r=this.payload)||void 0===r?void 0:r.data,s=n&&$ce1f303d0aa8ec51$require$Buffer.from($ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(n)),"hex"),a=this.chunkByteSize;s&&s.length>0&&(this.params.data_initial_chunk=$bb5e1fcd97588e49$exports.bytesToHex(s.subarray(0,this.chunkByteSize)),this.params.data_length=s.length);let o=yield i("ScdoSignTx",["ScdoSignedTx"],Object.assign({},this.params));return this.processTxRequest(i,o,s,a)})}}class $ce1f303d0aa8ec51$var$ScdoSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0}]);let{path:r,messageHex:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i)}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ScdoSignMessage","ScdoSignedMessage",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$AlephiumGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i,n,s;let a=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"includePublicKey",type:"boolean"},{name:"group",type:"number"}]);let o=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push(Object.assign({address_n:a,show_display:o,include_public_key:null!==(n=r.includePublicKey)&&void 0!==n&&n},null!==r.group&&{target_group:null!==(s=r.group)&&void 0!==s?s:0}))})}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let o;if("AlephiumSignedTx"===i.type)return i.message;let{data_length:d}=i.message;if("AlephiumTxRequest"===i.type){if(!d)return i.message;let f=n.subarray(a,a+d),l=a+f.length,u={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(f)};return o=yield r("AlephiumTxAck",["AlephiumSignedTx","AlephiumTxRequest","AlephiumBytecodeRequest"],Object.assign({},u)),this.processTxRequest(r,o,n,s,l)}if("AlephiumBytecodeRequest"===i.type){if(!(null==s?void 0:s.length))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"scriptOpt is required");let i={bytecode_data:$bb5e1fcd97588e49$exports.bytesToHex(s)};return o=yield r("AlephiumBytecodeAck",["AlephiumSignedTx","AlephiumBytecodeRequest"],Object.assign({},i)),this.processTxRequest(r,o,n,s,a)}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Unknown response type: ${i.type}`)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",required:!0,type:"hexString"},{name:"scriptOpt",type:"string"}]);let{path:r}=this.payload,i=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:i,data_initial_chunk:"",data_length:0}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=this.device.getCommands().typedCall.bind(this.device.getCommands()),i=this.chunkByteSize,n=$ce1f303d0aa8ec51$require$Buffer.from(this.payload.rawTx,"hex"),s=this.payload.scriptOpt&&$ce1f303d0aa8ec51$require$Buffer.from(this.payload.scriptOpt,"hex");this.params={address_n:this.params.address_n,data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(n.subarray(0,this.chunkByteSize)),data_length:n.length};let a=yield r("AlephiumSignTx",["AlephiumSignedTx","AlephiumTxRequest","AlephiumBytecodeRequest"],Object.assign({},this.params));return this.processTxRequest(r,a,n,s,i)})}}class $ce1f303d0aa8ec51$var$AlephiumSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"messageType",type:"string"}]);let{path:r,messageHex:i,messageType:n}=this.payload,s=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:s,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i),message_type:$ce1f303d0aa8ec51$require$Buffer.from(null!=n?n:"alephium","utf-8").toString("hex")}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("AlephiumSignMessage","AlephiumMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$BENFEN_ADDRESS_LENGTH=32,$ce1f303d0aa8ec51$var$PUBLIC_KEY_SIZE=32,$ce1f303d0aa8ec51$var$SIGNATURE_SCHEME_TO_FLAG={};function $ce1f303d0aa8ec51$var$normalizeBenfenAddress(r,i=!1){let n=r.toLowerCase();return!i&&n.startsWith("0x")&&(n=n.slice(2)),`0x${n.padStart(2*$ce1f303d0aa8ec51$var$BENFEN_ADDRESS_LENGTH,"0")}`.toLowerCase()}function $ce1f303d0aa8ec51$var$publicKeyToAddress(r){let i=new Uint8Array($ce1f303d0aa8ec51$var$PUBLIC_KEY_SIZE+1);return i.set([0]),i.set($bb5e1fcd97588e49$exports.hexToBytes(r),1),$ce1f303d0aa8ec51$var$normalizeBenfenAddress($bb5e1fcd97588e49$exports.bytesToHex($692be64e687bb0ca$exports.blake2b(i,{dkLen:32})).slice(0,2*$ce1f303d0aa8ec51$var$BENFEN_ADDRESS_LENGTH))}function $ce1f303d0aa8ec51$var$hex2BfcAddress(r){if(/^BFC/i.test(r))return r;let i=r.replace(/^0x/,"").padStart(64,"0").toLowerCase(),n=$91294e775a6684d7$exports.sha256(new TextEncoder().encode(i)),s=$bb5e1fcd97588e49$exports.bytesToHex(n).slice(0,4);return`BFC${i}${s}`}class $ce1f303d0aa8ec51$var$BenfenGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1,this.shouldConfirm=!1,this.strictCheckDeviceSupport=!0}init(){var r,i;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let n=this.hasBundle?this.payload:{bundle:[this.payload]};this.shouldConfirm=this.payload.showOnOneKey||(null===(i=this.payload.bundle)||void 0===i?void 0:i.some(r=>!!r.showOnOneKey)),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"bundle",type:"array"}]),this.params=[],n.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features),n=[];if(i){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",728);for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=yield this.device.commands.typedCall("BenfenGetAddress","BenfenAddress",r),n={path:$ce1f303d0aa8ec51$var$serializedPath(r.address_n),address:$ce1f303d0aa8ec51$var$hex2BfcAddress(i.message.address)};return this.shouldConfirm&&this.postPreviousAddressMessage(n),n})));return $ce1f303d0aa8ec51$var$validateResult(n,["address"],{expectedLength:this.params.length}),this.hasBundle?n:n[0]})}}class $ce1f303d0aa8ec51$var$BenfenGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1,this.strictCheckDeviceSupport=!0}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",728),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$BenfenSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0}]);let{path:r,messageHex:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i)}}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("BenfenSignMessage","BenfenMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$BenfenSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.chunkByteSize=1024,this.processTxRequest=(r,i,n,s=0)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if("BenfenSignedTx"===i.type)return i.message;let{data_length:a}=i.message;if(!a)return i.message;let o=n.subarray(s,s+a),d=s+o.length,f={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(new Uint8Array(o))},l=yield r("BenfenTxAck",["BenfenSignedTx","BenfenTxRequest"],Object.assign({},f));return this.processTxRequest(r,l,n,d)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"coinType",type:"string",required:!1}]);let{path:r,rawTx:i,coinType:n}=this.payload,s=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params=Object.assign({address_n:s,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i)},n&&{coin_type:$ce1f303d0aa8ec51$var$formatAnyHex($ce1f303d0aa8ec51$require$Buffer.from(n).toString("hex"))})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=this.device.getCommands().typedCall.bind(this.device.getCommands()),i=this.chunkByteSize,n=$ce1f303d0aa8ec51$require$Buffer.from(this.params.raw_tx,"hex");this.params={address_n:this.params.address_n,coin_type:this.params.coin_type,raw_tx:"",data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(new Uint8Array(n.buffer).subarray(0,this.chunkByteSize)),data_length:n.length};let s=yield r("BenfenSignTx",["BenfenSignedTx","BenfenTxRequest"],Object.assign({},this.params));return this.processTxRequest(r,s,n,i)})}}class $ce1f303d0aa8ec51$var$NeoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.strictCheckDeviceSupport=!0,this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=[];for(let s=0;snew Promise(n=>{setTimeout(n,r,i)}),$ce1f303d0aa8ec51$var$Log$2=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.DeviceConnector);class $ce1f303d0aa8ec51$var$DeviceConnector{constructor(){this.listenTimestamp=0,this.current=null,this.upcoming=[],this.listening=!1,$ce1f303d0aa8ec51$var$TransportManager.load(),this.transport=$ce1f303d0aa8ec51$var$TransportManager.getTransport(),$ce1f303d0aa8ec51$var$DevicePool.setConnector(this)}enumerate(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.transport.enumerate();return this.upcoming=r,this._reportDevicesChange(),{descriptors:r}}catch(r){$ce1f303d0aa8ec51$var$safeThrowError(r)}})}listen(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=null!==this.current,n=this.current||[];this.listening=!0;try{if($ce1f303d0aa8ec51$var$Log$2.debug("Start listening",n),this.listenTimestamp=new Date().getTime(),r=i?yield this.transport.listen(n):yield this.transport.enumerate(),!this.listening)return;this.upcoming=r,$ce1f303d0aa8ec51$var$Log$2.debug("Listen result",r),this._reportDevicesChange(),this.listening&&this.listen()}catch(i){let r=new Date().getTime()-this.listenTimestamp;$ce1f303d0aa8ec51$var$Log$2.debug("Listen error","timestamp",r,typeof i),r>1100?(yield $ce1f303d0aa8ec51$var$resolveAfter(1e3,null),this.listening&&this.listen()):$ce1f303d0aa8ec51$var$Log$2.warn("Transport error")}})}stop(){this.listening=!1}acquire(r,i,n){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log$2.debug("acquire",r,i);let s=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");try{let a;return a=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(s)?yield this.transport.acquire({uuid:r,forceCleanRunPromise:n}):yield this.transport.acquire({path:r,previous:null!=i?i:null})}catch(r){$ce1f303d0aa8ec51$var$Log$2.error("acquire error: ",r.message),$ce1f303d0aa8ec51$var$safeThrowError(r)}})}release(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let n=yield this.transport.release(r,i);return n}catch(r){$ce1f303d0aa8ec51$var$safeThrowError(r)}})}disconnect(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{this.transport.disconnect&&r&&(yield this.transport.disconnect(r))}catch(r){$ce1f303d0aa8ec51$var$safeThrowError(r)}})}promptDeviceAccess(){return this.transport.promptDeviceAccess?this.transport.promptDeviceAccess():Promise.resolve(null)}_reportDevicesChange(){$ce1f303d0aa8ec51$var$DevicePool.reportDeviceChange(this.upcoming)}}const $ce1f303d0aa8ec51$var$Log$1=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);class $ce1f303d0aa8ec51$var$RequestQueue{constructor(){this.requestQueue=new Map,this.pendingCallbackTasks=new Map,this.generateRequestId=r=>r&&null!=r.responseID?r.responseID:Date.now()}createTask(r){let i=this.generateRequestId(r);r&&r.responseID!==i&&(r.responseID=i);let n=new AbortController,s={id:i,method:r,abortController:n};return this.requestQueue.set(i,s),s}getTask(r){return this.requestQueue.get(r)}getAbortController(r){var i;return null===(i=this.requestQueue.get(r))||void 0===i?void 0:i.abortController}abortRequest(r){let i=this.requestQueue.get(r);return null!=i&&!!i.abortController&&($ce1f303d0aa8ec51$var$Log$1.debug(`Aborting request ${r}`),i.abortController.abort(),!0)}abortRequestsByConnectId(r){let i=0;return this.requestQueue.forEach((n,s)=>{n.abortController&&n.method.connectId===r&&(n.abortController.abort(),n.abortController=void 0,i++)}),i}abortAllRequests(){let r=0;return this.requestQueue.forEach(i=>{i.abortController&&(i.abortController.abort(),r++)}),r}getRequestTasksId(){return Array.from(this.requestQueue.keys())}resolveRequest(r,i){var n;let s=this.requestQueue.get(r);s&&(null===(n=s.callPromise)||void 0===n||n.resolve(i)),this.releaseTask(r)}rejectRequest(r,i){var n;let s=this.requestQueue.get(r);s&&(null===(n=s.callPromise)||void 0===n||n.reject(i)),this.releaseTask(r)}releaseTask(r){this.requestQueue.delete(r)}registerPendingCallbackTask(r,i){this.pendingCallbackTasks.set(r,i),i.promise.finally(()=>{$ce1f303d0aa8ec51$var$Log$1.debug(`Callback task completed for connectId: ${r}`),this.pendingCallbackTasks.delete(r)})}waitForPendingCallbackTasks(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.pendingCallbackTasks.get(r);i&&($ce1f303d0aa8ec51$var$Log$1.debug(`Waiting for pending callback task to complete for connectId: ${r}`),yield i.promise)})}cancelCallbackTasks(r){let i=this.pendingCallbackTasks.get(r);i&&i.resolve()}}const $ce1f303d0aa8ec51$var$getMutex=()=>{let r=Symbol(),i={};return (n=r)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){for(;i[n];)yield i[n];let r=()=>{};return i[n]=new Promise(i=>{r=i}).finally(()=>{delete i[n]}),r})},$ce1f303d0aa8ec51$var$getSynchronize=r=>{let i=null!=r?r:$ce1f303d0aa8ec51$var$getMutex();return(r,n)=>i(n).then(i=>Promise.resolve().then(r).finally(i))},$ce1f303d0aa8ec51$var$Log=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);function $ce1f303d0aa8ec51$var$hasDeriveCardano(r){var i;return!!(r.name.startsWith("allNetworkGetAddress")&&r.payload&&r.payload.bundle&&r.payload.bundle.some(r=>r&&"ada"===r.network))||r.name.startsWith("cardano")||(null===(i=r.payload)||void 0===i?void 0:i.deriveCardano)}const $ce1f303d0aa8ec51$var$parseInitOptions=r=>({initSession:null==r?void 0:r.payload.initSession,passphraseState:null==r?void 0:r.payload.passphraseState,deviceId:null==r?void 0:r.payload.deviceId,deriveCardano:r&&$ce1f303d0aa8ec51$var$hasDeriveCardano(r)});let $ce1f303d0aa8ec51$var$_uiPromises=[];const $ce1f303d0aa8ec51$var$deviceCacheMap=new Map;let $ce1f303d0aa8ec51$var$pollingId=1;const $ce1f303d0aa8ec51$var$pollingState={};let $ce1f303d0aa8ec51$var$preConnectCache={passphraseState:void 0};const $ce1f303d0aa8ec51$var$toError=r=>{if(r instanceof Error)return r;if(null!=r){if("string"==typeof r)return Error(r);try{return Error(JSON.stringify(r))}catch(i){return Error(String(r))}}},$ce1f303d0aa8ec51$var$updateMethodRequestContext=(r,i)=>{r.requestContext&&$ce1f303d0aa8ec51$var$updateRequestContext(r.requestContext.responseID,i)},$ce1f303d0aa8ec51$var$completeMethodRequestContext=(r,i)=>{r.requestContext&&$ce1f303d0aa8ec51$var$completeRequestContext(r.requestContext.responseID,$ce1f303d0aa8ec51$var$toError(i))},$ce1f303d0aa8ec51$var$callAPI=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var n;let s;if(!i.id||!i.payload||i.type!==$ce1f303d0aa8ec51$var$IFRAME.CALL)return Promise.reject($3FhS8.ERRORS.TypedError("on call: message.id or message.payload is missing"));try{(s=$ce1f303d0aa8ec51$var$findMethod(i)).connector=$ce1f303d0aa8ec51$var$_connector,s.postMessage=$ce1f303d0aa8ec51$var$postMessage,null===(n=s.setContext)||void 0===n||n.call(s,r),s.requestContext=$ce1f303d0aa8ec51$var$createRequestContext(s.responseID,s.name,{sdkInstanceId:r.sdkInstanceId,connectId:s.connectId}),$ce1f303d0aa8ec51$var$Log.debug(`[${r.sdkInstanceId}] callAPI: ${$ce1f303d0aa8ec51$var$formatRequestContext(s.requestContext)}`),s.init()}catch(r){return Promise.reject(r)}if($ce1f303d0aa8ec51$var$DevicePool.emitter.on($ce1f303d0aa8ec51$var$DEVICE.CONNECT,$ce1f303d0aa8ec51$var$onDeviceConnectHandler),!s.useDevice){$ce1f303d0aa8ec51$var$updateMethodRequestContext(s,{status:"running"});try{let r=yield s.run();return $ce1f303d0aa8ec51$var$completeMethodRequestContext(s),$ce1f303d0aa8ec51$var$createResponseMessage(s.responseID,!0,r)}catch(r){return $ce1f303d0aa8ec51$var$completeMethodRequestContext(s,r),$ce1f303d0aa8ec51$var$createResponseMessage(s.responseID,!1,{error:r})}}let{requestQueue:a,methodSynchronize:o}=r,d=yield o(()=>{for(let r of a.getRequestTasksId()){let i=a.getTask(r);$ce1f303d0aa8ec51$var$Log.debug("pre request task: ",`task?.id: ${null==i?void 0:i.id}, + task?.method.connectId: ${null==i?void 0:i.method.connectId}, + task?.method.deviceId: ${null==i?void 0:i.method.deviceId}, + task?.method.name: ${null==i?void 0:i.method.name}`)}return null});return d?$ce1f303d0aa8ec51$var$createResponseMessage(s.responseID,!1,{error:d}):$ce1f303d0aa8ec51$var$onCallDevice(r,i,s)}),$ce1f303d0aa8ec51$var$waitWithTimeout=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n=new Promise((r,n)=>{setTimeout(()=>n(Error("Request timeout")),i)});return Promise.race([r,n])}),$ce1f303d0aa8ec51$var$waitForPendingPromise=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n=r();if(n){$ce1f303d0aa8ec51$var$Log.debug("pre pending call promise before call method, wait for it");try{yield $ce1f303d0aa8ec51$var$waitWithTimeout(n,5e3)}catch(r){}null==i||i(n),$ce1f303d0aa8ec51$var$Log.debug("pre pending call promise before call method done")}}),$ce1f303d0aa8ec51$var$onCallDevice=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var s,a,o,d;let f,l;let{requestQueue:u,getPrePendingCallPromise:c,setPrePendingCallPromise:p}=r;$ce1f303d0aa8ec51$var$updateMethodRequestContext(n,{status:"running"});let h=$ce1f303d0aa8ec51$var$preConnectCache.passphraseState!==n.payload.passphraseState;$ce1f303d0aa8ec51$var$preConnectCache={passphraseState:n.payload.passphraseState},(h||n.payload.initSession)&&($ce1f303d0aa8ec51$var$Log.debug("passphrase state change, clear device cache"),$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(n.payload.connectId)),n.connectId&&(yield r.waitForCallbackTasks(n.connectId)),yield $ce1f303d0aa8ec51$var$waitForPendingPromise(c,p);let g=u.createTask(n);try{$ce1f303d0aa8ec51$var$pollingState[$ce1f303d0aa8ec51$var$pollingId]&&($ce1f303d0aa8ec51$var$pollingState[$ce1f303d0aa8ec51$var$pollingId]=!1),$ce1f303d0aa8ec51$var$pollingId+=1,l=yield $ce1f303d0aa8ec51$var$ensureConnected(r,n,$ce1f303d0aa8ec51$var$pollingId,null===(s=g.abortController)||void 0===s?void 0:s.signal)}catch(r){if(console.log("ensureConnected error: ",r),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r),"AbortError"===r.name||"Request aborted"===r.message)return u.releaseTask(n.responseID),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ActionCancelled,"Request cancelled by user")});return u.releaseTask(n.responseID),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r})}if(null===(a=n.payload)||void 0===a?void 0:a.onlyConnectBleDevice)return $ce1f303d0aa8ec51$var$Log.debug("Call API - only connect ble device: ",null==l?void 0:l.mainId),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!0,null);$ce1f303d0aa8ec51$var$Log.debug("Call API - setDevice: ",l.mainId),null===(o=n.setDevice)||void 0===o||o.call(n,l),n.context=r,$ce1f303d0aa8ec51$var$updateMethodRequestContext(n,{deviceInstanceId:l.instanceId,commandsInstanceId:null===(d=l.commands)||void 0===d?void 0:d.instanceId});let m=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(l.instanceId);m.length>0&&$ce1f303d0aa8ec51$var$Log.warn(`[${n.instanceId}] Device ${l.instanceId} has ${m.length} active requests:`,m.map($ce1f303d0aa8ec51$var$formatRequestContext)),l.on($ce1f303d0aa8ec51$var$DEVICE.PIN,$ce1f303d0aa8ec51$var$onDevicePinHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.BUTTON,$ce1f303d0aa8ec51$var$onDeviceButtonHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,i.payload.useEmptyPassphrase?$ce1f303d0aa8ec51$var$onEmptyPassphraseHandler:$ce1f303d0aa8ec51$var$onDevicePassphraseHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE_ON_DEVICE,$ce1f303d0aa8ec51$var$onEnterPassphraseOnDeviceHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.FEATURES,$ce1f303d0aa8ec51$var$onDeviceFeaturesHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,$ce1f303d0aa8ec51$var$onSelectDeviceInBootloaderForWebDeviceHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,$ce1f303d0aa8ec51$var$onSelectDeviceForSwitchFirmwareWebDeviceHandler);try{n.connectId&&(yield r.waitForCallbackTasks(n.connectId)),yield $ce1f303d0aa8ec51$var$waitForPendingPromise(c,p);let i=()=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var r,i,s,a,o;let d=$ce1f303d0aa8ec51$var$getMethodVersionRange(l.features,r=>n.getVersionRange()[r]);if(l.features){if(yield $ce1f303d0aa8ec51$var$DataManager.checkAndReloadData(),$ce1f303d0aa8ec51$var$findDefectiveBatchDevice(l.features)){let r=$ce1f303d0aa8ec51$var$getDefectiveDeviceInfo(l.features);if(r)throw $3FhS8.createDefectiveFirmwareError(r.serialNo,r.seVersion||"Unknown",r.deviceType,n.connectId,n.deviceId)}let r=$ce1f303d0aa8ec51$var$getFirmwareType(l.features),i=$ce1f303d0aa8ec51$var$DataManager.getFirmwareStatus(l.features,r),s=$ce1f303d0aa8ec51$var$DataManager.getBLEFirmwareStatus(l.features),a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(l.features).join("."),o=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(l.features).join(".");if(("required"===i||"required"===s)&&!1===n.skipForceUpdateCheck){let r={firmware:a,ble:o},d=[];throw"required"===i&&d.push("firmware"),"required"===s&&d.push("ble"),$3FhS8.createNewFirmwareForceUpdateHardwareError(n.connectId,n.deviceId,d,r)}if(d){if($ce1f303d0aa8ec51$var$semver__default.default.valid(d.min)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(a,d.min)){if("none"===i||"valid"===i)throw $3FhS8.createNewFirmwareUnReleaseHardwareError({currentVersion:a,requireVersion:d.min,methodName:n.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(l.features)});return Promise.reject($3FhS8.createNeedUpgradeFirmwareHardwareError({currentVersion:a,requireVersion:d.min,methodName:n.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(l.features)}))}if(d.max&&$ce1f303d0aa8ec51$var$semver__default.default.valid(d.max)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(a,d.max))return Promise.reject($3FhS8.createDeprecatedHardwareError(a,d.max,n.name))}else if(n.strictCheckDeviceSupport)throw $3FhS8.createDeviceNotSupportMethodError(n.name,$ce1f303d0aa8ec51$var$getFirmwareType(l.features))}let c=l.hasUnexpectedMode(n.allowDeviceMode,n.requireDeviceMode);if(c)return c===$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_IN_BOOTLOADER?Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RequiredButInBootloaderMode)):c===$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER?Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NotAllowInBootloaderMode)):Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceUnexpectedMode,c));if(n.deviceId&&n.checkDeviceId){let r=l.checkDeviceId(n.deviceId);if(!r)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceCheckDeviceIdError))}if(n.checkFirmwareRelease(),n.checkDeviceSupportFeature(),$ce1f303d0aa8ec51$var$_deviceList&&(yield $ce1f303d0aa8ec51$var$TransportManager.reconfigure(l.features)),$ce1f303d0aa8ec51$var$checkPassphraseEnableState(n,l.features),l.hasUsePassphrase()&&n.useDevicePassphraseState){let a=$ce1f303d0aa8ec51$var$supportNewPassphrase(l.features);if(!a.support)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotSupportPassphrase,`Device not support passphrase, please update to ${a.require}`,{require:a.require}));let o=yield l.checkPassphraseStateSafety(null===(r=n.payload)||void 0===r?void 0:r.passphraseState,null===(i=n.payload)||void 0===i?void 0:i.useEmptyPassphrase,null===(s=n.payload)||void 0===s?void 0:s.skipPassphraseCheck);if($ce1f303d0aa8ec51$var$checkPassphraseEnableState(n,l.features),!o)return $ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(n.payload.connectId),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceCheckPassphraseStateError));$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.CLOSE_UI_PIN_WINDOW))}try{yield n.checkSafetyLevelOnTestNet()}catch(i){let r=i instanceof $3FhS8.HardwareError?i:$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"open safety check failed.");throw r}null===(o=null===(a=n.device)||void 0===a?void 0:a.commands)||void 0===o||o.checkDisposed();try{let r=yield n.run();$ce1f303d0aa8ec51$var$Log.debug("Call API - Inner Method Run: "),f=$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!0,r),u.resolveRequest(n.responseID,f),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n)}catch(r){if($ce1f303d0aa8ec51$var$Log.debug("Call API - Inner Method Run Error",r),f=$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r}),u.resolveRequest(n.responseID,f),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r),r instanceof $3FhS8.HardwareError&&$3FhS8.ERROR_CODES_REQUIRE_RELEASE.includes(r.errorCode))throw r}});$ce1f303d0aa8ec51$var$Log.debug("Call API - Device Run: ",l.mainId);let s=Object.assign({keepSession:n.payload.keepSession},$ce1f303d0aa8ec51$var$parseInitOptions(n)),a=()=>l.run(i,s);g.callPromise=$3FhS8.createDeferred(a);try{return yield g.callPromise.promise}catch(r){return $ce1f303d0aa8ec51$var$Log.debug("Device Run Error: ",r),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r})}}catch(r){f=$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r}),u.rejectRequest(n.responseID,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,r.message)),$ce1f303d0aa8ec51$var$Log.debug("Call API - Run Error: ",r),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r)}finally{let r=f;if(r&&n&&n.dispose(),u.releaseTask(n.responseID),$ce1f303d0aa8ec51$var$closePopup(),$ce1f303d0aa8ec51$var$cleanup(),l){let r=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(l.instanceId);r.length>1?$ce1f303d0aa8ec51$var$Log.warn(`[${n.instanceId}] Removing listeners while ${r.length} requests are active!`,{deviceInstanceId:l.instanceId,activeRequests:r.map($ce1f303d0aa8ec51$var$formatRequestContext),pinListeners:l.listenerCount($ce1f303d0aa8ec51$var$DEVICE.PIN)}):$ce1f303d0aa8ec51$var$removeDeviceListener(l)}}});function $ce1f303d0aa8ec51$var$initDeviceList(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)&&r.connectId){yield $ce1f303d0aa8ec51$var$TransportManager.configure();return}$ce1f303d0aa8ec51$var$_deviceList||($ce1f303d0aa8ec51$var$_deviceList=new $ce1f303d0aa8ec51$var$DeviceList,yield $ce1f303d0aa8ec51$var$TransportManager.configure(),$ce1f303d0aa8ec51$var$_deviceList.connector=$ce1f303d0aa8ec51$var$_connector),yield $ce1f303d0aa8ec51$var$_deviceList.getDeviceLists(r.connectId,$ce1f303d0aa8ec51$var$parseInitOptions(r))})}function $ce1f303d0aa8ec51$var$initDevice(r){var i;let n;if(!$ce1f303d0aa8ec51$var$_deviceList)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceListNotInitialized);let s=$ce1f303d0aa8ec51$var$_deviceList.allDevices();if((null===(i=r.payload)||void 0===i?void 0:i.detectBootloaderDevice)&&s.some(r=>{var i;return null===(i=r.features)||void 0===i?void 0:i.bootloader_mode}))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceDetectInBootloaderMode);if(r.connectId)n=$ce1f303d0aa8ec51$var$_deviceList.getDevice(r.connectId);else if(1===s.length)[n]=s;else if(s.length>1)throw $3FhS8.ERRORS.TypedError(["firmwareUpdateV3","firmwareUpdateV2","checkFirmwareRelease","checkBootloaderRelease","checkBLEFirmwareRelease"].includes(r.name)?$3FhS8.HardwareErrorCode.FirmwareUpdateLimitOneDevice:$3FhS8.HardwareErrorCode.SelectDevice);if(!n){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb(r))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound)}return n.deviceConnector=$ce1f303d0aa8ec51$var$_connector,n}function $ce1f303d0aa8ec51$var$initDeviceForBle(r){let i;if(!r.connectId&&!$ce1f303d0aa8ec51$var$_deviceList)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceListNotInitialized);return r.connectId?($ce1f303d0aa8ec51$var$deviceCacheMap.has(r.connectId)?i=$ce1f303d0aa8ec51$var$deviceCacheMap.get(r.connectId):(i=$ce1f303d0aa8ec51$var$Device.fromDescriptor({id:r.connectId},r.sdkInstanceId),$ce1f303d0aa8ec51$var$deviceCacheMap.set(r.connectId,i)),i.deviceConnector=$ce1f303d0aa8ec51$var$_connector,i):$ce1f303d0aa8ec51$var$initDevice(r)}let $ce1f303d0aa8ec51$var$bleTimeoutRetry=0;function $ce1f303d0aa8ec51$var$connectDeviceForBle(r,i){var n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{if(yield i.acquire(),null===(n=r.payload)||void 0===n?void 0:n.onlyConnectBleDevice)return;yield i.initialize($ce1f303d0aa8ec51$var$parseInitOptions(r))}catch(n){if(n.errorCode===$3FhS8.HardwareErrorCode.BleTimeoutError&&$ce1f303d0aa8ec51$var$bleTimeoutRetry<=5)$ce1f303d0aa8ec51$var$bleTimeoutRetry+=1,$ce1f303d0aa8ec51$var$Log.debug(`Bletooth connect timeout and will retry, retry count: ${$ce1f303d0aa8ec51$var$bleTimeoutRetry}`),yield $ce1f303d0aa8ec51$var$wait(3e3),yield $ce1f303d0aa8ec51$var$connectDeviceForBle(r,i);else throw n}})}const $ce1f303d0aa8ec51$var$ensureConnected=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let r=0,a=i.payload&&"number"==typeof i.payload.retryCount?i.payload.retryCount:5,o=i.payload&&i.payload.pollIntervalTime||1e3,d=i.payload&&i.payload.timeout||1e4,f=null;$ce1f303d0aa8ec51$var$Log.debug(`EnsureConnected function start, MAX_RETRY_COUNT=${a}, POLL_INTERVAL_TIME=${o} `);let l=(u=o)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return new Promise((o,c)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var p;let h;let g=()=>!!s&&!!s.aborted&&(f&&clearTimeout(f),c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled)),!0);if(g())return;if(!$ce1f303d0aa8ec51$var$pollingState[n]){$ce1f303d0aa8ec51$var$Log.debug("EnsureConnected function stop, polling id: ",n),c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PollingStop));return}f&&clearTimeout(f),f=setTimeout(()=>{c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PollingTimeout))},d),r+=1,$ce1f303d0aa8ec51$var$Log.debug("EnsureConnected function try count: ",r," poll interval time: ",u);try{yield $ce1f303d0aa8ec51$var$initDeviceList(i)}catch(r){if($ce1f303d0aa8ec51$var$Log.debug("device list error: ",r),[$3FhS8.HardwareErrorCode.BridgeNotInstalled,$3FhS8.HardwareErrorCode.BridgeTimeoutError,$3FhS8.HardwareErrorCode.BridgeNeedsPermission].includes(r.errorCode)){$ce1f303d0aa8ec51$var$_deviceList=void 0,c(r);return}r.errorCode===$3FhS8.HardwareErrorCode.TransportNotConfigured&&(yield $ce1f303d0aa8ec51$var$TransportManager.configure())}if(g())return;let m=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");try{if(h=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(m)?$ce1f303d0aa8ec51$var$initDeviceForBle(i):$ce1f303d0aa8ec51$var$initDevice(i)){if(f&&clearTimeout(f),$ce1f303d0aa8ec51$var$DataManager.isBleConnect(m)){if($ce1f303d0aa8ec51$var$bleTimeoutRetry=0,g())return;yield $ce1f303d0aa8ec51$var$connectDeviceForBle(i,h)}o(h);return}}catch(r){if($ce1f303d0aa8ec51$var$Log.debug("device error: ",r),[$3FhS8.HardwareErrorCode.BleCharacteristicNotifyChangeFailure].includes(r.errorCode)&&$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE)),[$3FhS8.HardwareErrorCode.BlePoweredOff,$3FhS8.HardwareErrorCode.BleUnsupported,$3FhS8.HardwareErrorCode.BlePermissionError,$3FhS8.HardwareErrorCode.BleLocationError,$3FhS8.HardwareErrorCode.BleLocationServicesDisabled,$3FhS8.HardwareErrorCode.BleDeviceNotBonded,$3FhS8.HardwareErrorCode.BleDeviceBondError,$3FhS8.HardwareErrorCode.BleDeviceBondedCanceled,$3FhS8.HardwareErrorCode.BleCharacteristicNotifyError,$3FhS8.HardwareErrorCode.BleTimeoutError,$3FhS8.HardwareErrorCode.BleWriteCharacteristicError,$3FhS8.HardwareErrorCode.BleAlreadyConnected,$3FhS8.HardwareErrorCode.FirmwareUpdateLimitOneDevice,$3FhS8.HardwareErrorCode.SelectDevice,$3FhS8.HardwareErrorCode.DeviceDetectInBootloaderMode,$3FhS8.HardwareErrorCode.BleCharacteristicNotifyChangeFailure,$3FhS8.HardwareErrorCode.BridgeNeedsPermission].includes(r.errorCode)){c(r);return}}if(r>a){f&&clearTimeout(f),$ce1f303d0aa8ec51$var$Log.debug("EnsureConnected get to max try count, will return: ",r),!$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb(m)||(null===(p=i.payload)||void 0===p?void 0:p.skipWebDevicePrompt)?c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound)):($ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.WEB_DEVICE_PROMPT_ACCESS_PERMISSION)),c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission)));return}if(!g())return setTimeout(()=>o(l(1.5*u)),u)}))});return $ce1f303d0aa8ec51$var$pollingState[n]=!0,l()}),$ce1f303d0aa8ec51$var$cancel=(r,i)=>{var n,s;let{requestQueue:a,setPrePendingCallPromise:o}=r;if(i)try{a.cancelCallbackTasks(i);let r=a.getRequestTasksId();$ce1f303d0aa8ec51$var$Log.debug(`Cancel Api connect requestQueues: length:${r.length} requestIds:${r.join(",")}`);let s=[];for(let i of r){let r=a.getTask(i);if($ce1f303d0aa8ec51$var$Log.debug("Cancel Api connect task: ",r),r&&(null===(n=r.method)||void 0===n?void 0:n.device)){if(!s.includes(r.method.device)){let{device:i}=r.method;o(null==i?void 0:i.interruptionFromUser()),s.push(i)}a.rejectRequest(i,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled))}}a.abortRequestsByConnectId(i)}catch(r){$ce1f303d0aa8ec51$var$Log.error("Cancel API Error: ",r)}else{let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)){$ce1f303d0aa8ec51$var$Log.debug("Cancel Api all _deviceList: ");let r=[];for(let i of a.getRequestTasksId()){let n=a.getTask(i);if($ce1f303d0aa8ec51$var$Log.debug("Cancel Api connect task: ",n),n&&(null===(s=n.method)||void 0===s?void 0:s.device)){if(!r.includes(n.method.device)){let{device:i}=n.method;null==i||i.interruptionFromUser(),r.push(i)}a.rejectRequest(i,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled))}}}else null==$ce1f303d0aa8ec51$var$_deviceList||$ce1f303d0aa8ec51$var$_deviceList.allDevices().forEach(r=>{$ce1f303d0aa8ec51$var$Log.debug("device: ",r," device.hasDeviceAcquire: ",r.hasDeviceAcquire()),r.hasDeviceAcquire()&&(null==r||r.interruptionFromUser())}),a.getRequestTasksId().forEach(r=>{a.rejectRequest(r,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled))})}$ce1f303d0aa8ec51$var$cleanup(),$ce1f303d0aa8ec51$var$closePopup()},$ce1f303d0aa8ec51$var$checkPassphraseEnableState=(r,i)=>{if(r.useDevicePassphraseState){if((null==i?void 0:i.passphrase_protection)===!0){let i=null==r.payload.passphraseState||""===r.payload.passphraseState,n=!r.payload.useEmptyPassphrase&&!r.payload.skipPassphraseCheck;if(i&&n)throw $ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(r.payload.connectId),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceOpenedPassphrase)}if((null==i?void 0:i.passphrase_protection)===!1&&r.payload.passphraseState)throw $ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(r.payload.connectId),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotOpenedPassphrase)}},$ce1f303d0aa8ec51$var$cleanup=()=>{$ce1f303d0aa8ec51$var$_uiPromises=[],$ce1f303d0aa8ec51$var$Log.debug("Cleanup...")},$ce1f303d0aa8ec51$var$removeDeviceListener=r=>{r.removeAllListeners(),$ce1f303d0aa8ec51$var$DevicePool.emitter.removeAllListeners($ce1f303d0aa8ec51$var$DEVICE.CONNECT)},$ce1f303d0aa8ec51$var$closePopup=()=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.CLOSE_UI_WINDOW))},$ce1f303d0aa8ec51$var$onDeviceConnectHandler=r=>{let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)?r:r.toMessageObject();$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.CONNECT,{device:n}))},$ce1f303d0aa8ec51$var$onDeviceDisconnectHandler=r=>{let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)?r:r.toMessageObject();$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,{device:n}))},$ce1f303d0aa8ec51$var$onDevicePinHandler=(...[r,i,n])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.log("request Input PIN");let s=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PIN,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PIN,{device:r.toMessageObject(),type:i}));let a=yield s.promise;n(null,a.payload)}),$ce1f303d0aa8ec51$var$onDeviceButtonHandler=(...[r,i])=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.BUTTON,Object.assign(Object.assign({},i),{device:r.toMessageObject()}))),"ButtonRequest_PinEntry"===i.code||"ButtonRequest_AttachPin"===i.code?($ce1f303d0aa8ec51$var$Log.log("request Confirm Input PIN or Attach PIN"),$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PIN,{device:r.toMessageObject(),type:i.code}))):($ce1f303d0aa8ec51$var$Log.log("request Confirm Button"),$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_BUTTON,{device:r.toMessageObject()})))},$ce1f303d0aa8ec51$var$onDeviceFeaturesHandler=(...[r,i])=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.FEATURES,Object.assign({},i)))},$ce1f303d0aa8ec51$var$onDevicePassphraseHandler=(...[r,i,n])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.debug("onDevicePassphraseHandler");let s=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PASSPHRASE,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PASSPHRASE,{device:r.toMessageObject(),passphraseState:r.passphraseState,existsAttachPinUser:i.existsAttachPinUser}));let a=yield s.promise,{value:o,passphraseOnDevice:d,save:f,attachPinOnDevice:l}=a.payload;n({passphrase:o.normalize("NFKD"),passphraseOnDevice:d,attachPinOnDevice:l,cache:f})}),$ce1f303d0aa8ec51$var$onEmptyPassphraseHandler=(...[r,,i])=>{$ce1f303d0aa8ec51$var$Log.debug("onEmptyPassphraseHandler"),i({passphrase:""})},$ce1f303d0aa8ec51$var$onEnterPassphraseOnDeviceHandler=(...[r])=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE,{device:r.toMessageObject(),passphraseState:r.passphraseState}))},$ce1f303d0aa8ec51$var$onSelectDeviceInBootloaderForWebDeviceHandler=(...[r,i])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.debug("onSelectDeviceInBootloaderForWebDeviceHandler");let n=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,{device:r.toMessageObject()}));let s=yield n.promise;i(null,s.payload.deviceId)}),$ce1f303d0aa8ec51$var$onSelectDeviceForSwitchFirmwareWebDeviceHandler=(...[r,i])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.debug("onSelectDeviceForSwitchFirmwareWebDeviceHandler");let n=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,{device:r.toMessageObject()}));let s=yield n.promise;i(null,s.payload.deviceId)}),$ce1f303d0aa8ec51$var$postMessage=r=>{$ce1f303d0aa8ec51$var$_core&&$ce1f303d0aa8ec51$var$_core.emit($ce1f303d0aa8ec51$var$CORE_EVENT,r)},$ce1f303d0aa8ec51$var$createUiPromise=(r,i)=>{let n=$3FhS8.createDeferred(r,i);return $ce1f303d0aa8ec51$var$_uiPromises.push(n),n},$ce1f303d0aa8ec51$var$findUiPromise=r=>$ce1f303d0aa8ec51$var$_uiPromises.find(i=>i.id===r),$ce1f303d0aa8ec51$var$removeUiPromise=r=>{$ce1f303d0aa8ec51$var$_uiPromises=$ce1f303d0aa8ec51$var$_uiPromises.filter(i=>i!==r)};class $ce1f303d0aa8ec51$var$Core extends $ce1f303d0aa8ec51$var$events.exports{constructor(){super(),this.requestQueue=new $ce1f303d0aa8ec51$var$RequestQueue,this.methodSynchronize=$ce1f303d0aa8ec51$var$getSynchronize(),this.tracingContext=$ce1f303d0aa8ec51$var$createSdkTracingContext(),this.sdkInstanceId=this.tracingContext.sdkInstanceId,$ce1f303d0aa8ec51$var$Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`)}getCoreContext(){return{sdkInstanceId:this.sdkInstanceId,tracingContext:this.tracingContext,requestQueue:this.requestQueue,methodSynchronize:this.methodSynchronize,getPrePendingCallPromise:()=>this.prePendingCallPromise,setPrePendingCallPromise:r=>{this.prePendingCallPromise=r},registerCallbackTask:(r,i)=>{this.requestQueue.registerPendingCallbackTask(r,i)},waitForCallbackTasks:r=>this.requestQueue.waitForPendingCallbackTasks(r),cancelCallbackTasks:r=>this.requestQueue.cancelCallbackTasks(r)}}handleMessage(r){var i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){switch(r.type){case $ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PIN:case $ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PASSPHRASE:case $ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:case $ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:{let i=$ce1f303d0aa8ec51$var$findUiPromise(r.type);i&&($ce1f303d0aa8ec51$var$Log.log("receive UI Response: ",r.type),i.resolve(r),$ce1f303d0aa8ec51$var$removeUiPromise(i));break}case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_UNSUPPORTED:case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_POWERED_OFF:case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_PERMISSION:case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE:case $ce1f303d0aa8ec51$var$UI_REQUEST.LOCATION_PERMISSION:case $ce1f303d0aa8ec51$var$UI_REQUEST.LOCATION_SERVICE_PERMISSION:$ce1f303d0aa8ec51$var$postMessage(r);break;case $ce1f303d0aa8ec51$var$IFRAME.CALL:{$ce1f303d0aa8ec51$var$Log.log("call API: ",r);let o=yield $ce1f303d0aa8ec51$var$callAPI(this.getCoreContext(),r),{success:d,payload:f}=o;if($ce1f303d0aa8ec51$var$Log.log("call API Response: ",o),d)return o;return Object.assign(Object.assign({},o),{payload:Object.assign(Object.assign({},f),{connectId:null!==(n=null===(i=r.payload)||void 0===i?void 0:i.connectId)&&void 0!==n?n:"",deviceId:null!==(a=null===(s=r.payload)||void 0===s?void 0:s.deviceId)&&void 0!==a?a:""})})}case $ce1f303d0aa8ec51$var$IFRAME.CANCEL:$ce1f303d0aa8ec51$var$Log.log("cancel API: ",r),$ce1f303d0aa8ec51$var$cancel(this.getCoreContext(),r.payload.connectId);break;case $ce1f303d0aa8ec51$var$IFRAME.CALLBACK:$ce1f303d0aa8ec51$var$Log.log("callback message: ",r),$ce1f303d0aa8ec51$var$postMessage(r)}return Promise.resolve(r)})}dispose(){$ce1f303d0aa8ec51$var$_deviceList=void 0,$ce1f303d0aa8ec51$var$_connector=void 0,$ce1f303d0aa8ec51$var$Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`),$ce1f303d0aa8ec51$var$cleanupSdkInstance(this.sdkInstanceId)}}const $ce1f303d0aa8ec51$var$initCore=()=>$ce1f303d0aa8ec51$var$_core=new $ce1f303d0aa8ec51$var$Core,$ce1f303d0aa8ec51$var$initConnector=()=>($ce1f303d0aa8ec51$var$_connector=new $ce1f303d0aa8ec51$var$DeviceConnector,$ce1f303d0aa8ec51$var$DevicePool.emitter.on($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,$ce1f303d0aa8ec51$var$onDeviceDisconnectHandler),$ce1f303d0aa8ec51$var$_connector),$ce1f303d0aa8ec51$var$initTransport=(r,i)=>{$ce1f303d0aa8ec51$var$TransportManager.setTransport(r,i)},$ce1f303d0aa8ec51$var$init=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){try{try{yield $ce1f303d0aa8ec51$var$DataManager.load(r),$ce1f303d0aa8ec51$var$initTransport(i,n)}catch(r){$ce1f303d0aa8ec51$var$Log.error("DataManager.load error")}return $ce1f303d0aa8ec51$var$enableLog($ce1f303d0aa8ec51$var$DataManager.getSettings("debug")),"react-native"!==$ce1f303d0aa8ec51$var$DataManager.getSettings("env")&&$ce1f303d0aa8ec51$var$setLoggerPostMessage($ce1f303d0aa8ec51$var$postMessage),$ce1f303d0aa8ec51$var$initCore(),$ce1f303d0aa8ec51$var$initConnector(),$ce1f303d0aa8ec51$var$_core}catch(r){$ce1f303d0aa8ec51$var$Log.error("core init",r)}}),$ce1f303d0aa8ec51$var$switchTransport=({env:r,Transport:i,plugin:n})=>{$ce1f303d0aa8ec51$var$DataManager.updateEnv(r),$ce1f303d0aa8ec51$var$TransportManager.setTransport(i,n),$ce1f303d0aa8ec51$var$_deviceList=void 0,$ce1f303d0aa8ec51$var$DevicePool.resetState(),$ce1f303d0aa8ec51$var$_connector=void 0,$ce1f303d0aa8ec51$var$initConnector()},$ce1f303d0aa8ec51$var$HardwareSdk=({init:r,call:i,dispose:n,eventEmitter:s,uiResponse:a,cancel:o,updateSettings:d,switchTransport:f})=>$ce1f303d0aa8ec51$var$inject({init:r,call:i,dispose:n,eventEmitter:s,uiResponse:a,cancel:o,updateSettings:d,switchTransport:f}),$ce1f303d0aa8ec51$var$HardwareSDKLowLevel=({init:r,call:i,dispose:n,eventEmitter:s,addHardwareGlobalEventListener:a,uiResponse:o,cancel:d,updateSettings:f,switchTransport:l})=>$ce1f303d0aa8ec51$var$lowLevelInject({init:r,call:i,dispose:n,eventEmitter:s,addHardwareGlobalEventListener:a,uiResponse:o,cancel:d,updateSettings:f,switchTransport:l}),$ce1f303d0aa8ec51$var$HardwareTopLevelSdk=()=>$ce1f303d0aa8ec51$var$topLevelInject();Object.defineProperty($ce1f303d0aa8ec51$exports,"PROTO",{enumerable:!0,get:function(){return $5xch2.Messages}}),$ce1f303d0aa8ec51$exports.CORE_EVENT=$ce1f303d0aa8ec51$var$CORE_EVENT,$ce1f303d0aa8ec51$exports.Core=$ce1f303d0aa8ec51$var$Core,$ce1f303d0aa8ec51$exports.DEFAULT_PRIORITY=$ce1f303d0aa8ec51$var$DEFAULT_PRIORITY,$ce1f303d0aa8ec51$exports.DEVICE=$ce1f303d0aa8ec51$var$DEVICE,$ce1f303d0aa8ec51$exports.DEVICE_EVENT=$ce1f303d0aa8ec51$var$DEVICE_EVENT,$ce1f303d0aa8ec51$exports.DataManager=$ce1f303d0aa8ec51$var$DataManager,$ce1f303d0aa8ec51$exports.DeviceModelToTypes=$ce1f303d0aa8ec51$var$DeviceModelToTypes,$ce1f303d0aa8ec51$exports.DeviceTypeToModels=$ce1f303d0aa8ec51$var$DeviceTypeToModels,$ce1f303d0aa8ec51$exports.FIRMWARE=$ce1f303d0aa8ec51$var$FIRMWARE,$ce1f303d0aa8ec51$exports.FIRMWARE_EVENT=$ce1f303d0aa8ec51$var$FIRMWARE_EVENT,$ce1f303d0aa8ec51$exports.HardwareSDKLowLevel=$ce1f303d0aa8ec51$var$HardwareSDKLowLevel,$ce1f303d0aa8ec51$exports.HardwareTopLevelSdk=$ce1f303d0aa8ec51$var$HardwareTopLevelSdk,$ce1f303d0aa8ec51$exports.IFRAME=$ce1f303d0aa8ec51$var$IFRAME,$ce1f303d0aa8ec51$exports.LOG=$ce1f303d0aa8ec51$var$LOG,$ce1f303d0aa8ec51$exports.LOG_EVENT=$ce1f303d0aa8ec51$var$LOG_EVENT,$ce1f303d0aa8ec51$exports.LogBlockEvent=$ce1f303d0aa8ec51$var$LogBlockEvent,$ce1f303d0aa8ec51$exports.RESPONSE_EVENT=$ce1f303d0aa8ec51$var$RESPONSE_EVENT,$ce1f303d0aa8ec51$exports.UI_EVENT=$ce1f303d0aa8ec51$var$UI_EVENT,$ce1f303d0aa8ec51$exports.UI_REQUEST=$ce1f303d0aa8ec51$var$UI_REQUEST,$ce1f303d0aa8ec51$exports.UI_RESPONSE=$ce1f303d0aa8ec51$var$UI_RESPONSE,$ce1f303d0aa8ec51$exports.checkNeedUpdateBootForClassicAndMini=$ce1f303d0aa8ec51$var$checkNeedUpdateBootForClassicAndMini,$ce1f303d0aa8ec51$exports.checkNeedUpdateBootForTouch=$ce1f303d0aa8ec51$var$checkNeedUpdateBootForTouch,$ce1f303d0aa8ec51$exports.cleanupCallback=$ce1f303d0aa8ec51$var$cleanupCallback,$ce1f303d0aa8ec51$exports.cleanupSdkInstance=$ce1f303d0aa8ec51$var$cleanupSdkInstance,$ce1f303d0aa8ec51$exports.completeRequestContext=$ce1f303d0aa8ec51$var$completeRequestContext,$ce1f303d0aa8ec51$exports.corsValidator=$ce1f303d0aa8ec51$var$corsValidator,$ce1f303d0aa8ec51$exports.createDeviceMessage=$ce1f303d0aa8ec51$var$createDeviceMessage,$ce1f303d0aa8ec51$exports.createErrorMessage=$ce1f303d0aa8ec51$var$createErrorMessage,$ce1f303d0aa8ec51$exports.createFirmwareMessage=$ce1f303d0aa8ec51$var$createFirmwareMessage,$ce1f303d0aa8ec51$exports.createIFrameMessage=$ce1f303d0aa8ec51$var$createIFrameMessage,$ce1f303d0aa8ec51$exports.createLogMessage=$ce1f303d0aa8ec51$var$createLogMessage,$ce1f303d0aa8ec51$exports.createRequestContext=$ce1f303d0aa8ec51$var$createRequestContext,$ce1f303d0aa8ec51$exports.createResponseMessage=$ce1f303d0aa8ec51$var$createResponseMessage,$ce1f303d0aa8ec51$exports.createSdkTracingContext=$ce1f303d0aa8ec51$var$createSdkTracingContext,$ce1f303d0aa8ec51$exports.createUiMessage=$ce1f303d0aa8ec51$var$createUiMessage,$ce1f303d0aa8ec51$exports.createUiResponse=$ce1f303d0aa8ec51$var$createUiResponse,$ce1f303d0aa8ec51$exports.default=$ce1f303d0aa8ec51$var$HardwareSdk,$ce1f303d0aa8ec51$exports.enableLog=$ce1f303d0aa8ec51$var$enableLog,$ce1f303d0aa8ec51$exports.executeCallback=$ce1f303d0aa8ec51$var$executeCallback,$ce1f303d0aa8ec51$exports.formatRequestContext=$ce1f303d0aa8ec51$var$formatRequestContext,$ce1f303d0aa8ec51$exports.generateInstanceId=$ce1f303d0aa8ec51$var$generateInstanceId,$ce1f303d0aa8ec51$exports.generateSdkInstanceId=$ce1f303d0aa8ec51$var$generateSdkInstanceId,$ce1f303d0aa8ec51$exports.getActiveRequestsByDeviceInstance=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance,$ce1f303d0aa8ec51$exports.getAutoLockOptions=$ce1f303d0aa8ec51$var$getAutoLockOptions,$ce1f303d0aa8ec51$exports.getAutoShutDownOptions=$ce1f303d0aa8ec51$var$getAutoShutDownOptions,$ce1f303d0aa8ec51$exports.getDeviceBLEFirmwareVersion=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion,$ce1f303d0aa8ec51$exports.getDeviceBleName=$ce1f303d0aa8ec51$var$getDeviceBleName,$ce1f303d0aa8ec51$exports.getDeviceBoardloaderVersion=$ce1f303d0aa8ec51$var$getDeviceBoardloaderVersion,$ce1f303d0aa8ec51$exports.getDeviceBootloaderVersion=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion,$ce1f303d0aa8ec51$exports.getDeviceFirmwareVersion=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion,$ce1f303d0aa8ec51$exports.getDeviceLabel=$ce1f303d0aa8ec51$var$getDeviceLabel,$ce1f303d0aa8ec51$exports.getDeviceType=$ce1f303d0aa8ec51$var$getDeviceType,$ce1f303d0aa8ec51$exports.getDeviceTypeByBleName=$ce1f303d0aa8ec51$var$getDeviceTypeByBleName,$ce1f303d0aa8ec51$exports.getDeviceUUID=$ce1f303d0aa8ec51$var$getDeviceUUID,$ce1f303d0aa8ec51$exports.getEnv=$ce1f303d0aa8ec51$var$getEnv,$ce1f303d0aa8ec51$exports.getFirmwareType=$ce1f303d0aa8ec51$var$getFirmwareType,$ce1f303d0aa8ec51$exports.getFirmwareUpdateField=$ce1f303d0aa8ec51$var$getFirmwareUpdateField,$ce1f303d0aa8ec51$exports.getFirmwareUpdateFieldArray=$ce1f303d0aa8ec51$var$getFirmwareUpdateFieldArray,$ce1f303d0aa8ec51$exports.getHDPath=$ce1f303d0aa8ec51$var$getHDPath,$ce1f303d0aa8ec51$exports.getHomeScreenDefaultList=$ce1f303d0aa8ec51$var$getHomeScreenDefaultList,$ce1f303d0aa8ec51$exports.getHomeScreenHex=$ce1f303d0aa8ec51$var$getHomeScreenHex,$ce1f303d0aa8ec51$exports.getHomeScreenSize=$ce1f303d0aa8ec51$var$getHomeScreenSize,$ce1f303d0aa8ec51$exports.getLanguageConfig=$ce1f303d0aa8ec51$var$getLanguageConfig,$ce1f303d0aa8ec51$exports.getLog=$ce1f303d0aa8ec51$var$getLog,$ce1f303d0aa8ec51$exports.getLogger=$ce1f303d0aa8ec51$var$getLogger,$ce1f303d0aa8ec51$exports.getMethodVersionRange=$ce1f303d0aa8ec51$var$getMethodVersionRange,$ce1f303d0aa8ec51$exports.getOutputScriptType=$ce1f303d0aa8ec51$var$getOutputScriptType,$ce1f303d0aa8ec51$exports.getSDKVersion=$ce1f303d0aa8ec51$var$getSDKVersion,$ce1f303d0aa8ec51$exports.getScriptType=$ce1f303d0aa8ec51$var$getScriptType,$ce1f303d0aa8ec51$exports.getTimeStamp=$ce1f303d0aa8ec51$var$getTimeStamp,$ce1f303d0aa8ec51$exports.httpRequest=$ce1f303d0aa8ec51$var$httpRequest,$ce1f303d0aa8ec51$exports.initCore=$ce1f303d0aa8ec51$var$init,$ce1f303d0aa8ec51$exports.isBleConnect=$ce1f303d0aa8ec51$var$isBleConnect,$ce1f303d0aa8ec51$exports.isValidVersionArray=$ce1f303d0aa8ec51$var$isValidVersionArray,$ce1f303d0aa8ec51$exports.isValidVersionString=$ce1f303d0aa8ec51$var$isValidVersionString,$ce1f303d0aa8ec51$exports.normalizeVersionArray=$ce1f303d0aa8ec51$var$normalizeVersionArray,$ce1f303d0aa8ec51$exports.parseConnectSettings=$ce1f303d0aa8ec51$var$parseConnectSettings,$ce1f303d0aa8ec51$exports.parseMessage=$ce1f303d0aa8ec51$var$parseMessage,$ce1f303d0aa8ec51$exports.patchFeatures=$ce1f303d0aa8ec51$var$patchFeatures,$ce1f303d0aa8ec51$exports.preloadSessionCache=$ce1f303d0aa8ec51$var$preloadSessionCache,$ce1f303d0aa8ec51$exports.safeThrowError=$ce1f303d0aa8ec51$var$safeThrowError,$ce1f303d0aa8ec51$exports.setLoggerPostMessage=$ce1f303d0aa8ec51$var$setLoggerPostMessage,$ce1f303d0aa8ec51$exports.supportInputPinOnSoftware=$ce1f303d0aa8ec51$var$supportInputPinOnSoftware,$ce1f303d0aa8ec51$exports.switchTransport=$ce1f303d0aa8ec51$var$switchTransport,$ce1f303d0aa8ec51$exports.updateRequestContext=$ce1f303d0aa8ec51$var$updateRequestContext,$ce1f303d0aa8ec51$exports.versionCompare=$ce1f303d0aa8ec51$var$versionCompare,$ce1f303d0aa8ec51$exports.versionSplit=$ce1f303d0aa8ec51$var$versionSplit,$ce1f303d0aa8ec51$exports.wait=$ce1f303d0aa8ec51$var$wait,$ce1f303d0aa8ec51$exports.whitelist=$ce1f303d0aa8ec51$var$whitelist,$ce1f303d0aa8ec51$exports.whitelistExtension=$ce1f303d0aa8ec51$var$whitelistExtension;var $3FhS8=parcelRequire("3FhS8"),$9f5d7f38984024f0$exports={},$5xch2=parcelRequire("5xch2"),$3FhS8=parcelRequire("3FhS8"),$68e51debd7d61343$exports={},$awmEs=parcelRequire("awmEs"),$68e51debd7d61343$require$Buffer=$awmEs.Buffer;const $68e51debd7d61343$var$hasBuffer=void 0!==$68e51debd7d61343$require$Buffer,$68e51debd7d61343$var$suspectProtoRx=/"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*:/,$68e51debd7d61343$var$suspectConstructorRx=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/;function $68e51debd7d61343$var$_parse(r,i,n){null==n&&null!==i&&"object"==typeof i&&(n=i,i=void 0),$68e51debd7d61343$var$hasBuffer&&$68e51debd7d61343$require$Buffer.isBuffer(r)&&(r=r.toString()),r&&65279===r.charCodeAt(0)&&(r=r.slice(1));let s=JSON.parse(r,i);if(null===s||"object"!=typeof s)return s;let a=n&&n.protoAction||"error",o=n&&n.constructorAction||"error";if("ignore"===a&&"ignore"===o)return s;if("ignore"!==a&&"ignore"!==o){if(!1===$68e51debd7d61343$var$suspectProtoRx.test(r)&&!1===$68e51debd7d61343$var$suspectConstructorRx.test(r))return s}else if("ignore"!==a&&"ignore"===o){if(!1===$68e51debd7d61343$var$suspectProtoRx.test(r))return s}else if(!1===$68e51debd7d61343$var$suspectConstructorRx.test(r))return s;return $68e51debd7d61343$var$filter(s,{protoAction:a,constructorAction:o,safe:n&&n.safe})}function $68e51debd7d61343$var$filter(r,{protoAction:i="error",constructorAction:n="error",safe:s}={}){let a=[r];for(;a.length;){let r=a;for(let o of(a=[],r)){if("ignore"!==i&&Object.prototype.hasOwnProperty.call(o,"__proto__")){if(!0===s)return null;if("error"===i)throw SyntaxError("Object contains forbidden prototype property");delete o.__proto__}if("ignore"!==n&&Object.prototype.hasOwnProperty.call(o,"constructor")&&Object.prototype.hasOwnProperty.call(o.constructor,"prototype")){if(!0===s)return null;if("error"===n)throw SyntaxError("Object contains forbidden prototype property");delete o.constructor}for(let r in o){let i=o[r];i&&"object"==typeof i&&a.push(i)}}}return r}function $68e51debd7d61343$var$parse(r,i,n){let{stackTraceLimit:s}=Error;Error.stackTraceLimit=0;try{return $68e51debd7d61343$var$_parse(r,i,n)}finally{Error.stackTraceLimit=s}}function $68e51debd7d61343$var$safeParse(r,i){let{stackTraceLimit:n}=Error;Error.stackTraceLimit=0;try{return $68e51debd7d61343$var$_parse(r,i,{safe:!0})}catch{return}finally{Error.stackTraceLimit=n}}function $9f5d7f38984024f0$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}$68e51debd7d61343$exports=$68e51debd7d61343$var$parse,$68e51debd7d61343$exports.default=$68e51debd7d61343$var$parse,$68e51debd7d61343$exports.parse=$68e51debd7d61343$var$parse,$68e51debd7d61343$exports.safeParse=$68e51debd7d61343$var$safeParse,$68e51debd7d61343$exports.scan=$68e51debd7d61343$var$filter;var $9f5d7f38984024f0$var$transport__default=$9f5d7f38984024f0$var$_interopDefaultLegacy($5xch2),$9f5d7f38984024f0$var$axios__default=$9f5d7f38984024f0$var$_interopDefaultLegacy($4ce02f68f14348c9$exports),$9f5d7f38984024f0$var$secureJSON__default=$9f5d7f38984024f0$var$_interopDefaultLegacy($68e51debd7d61343$exports);function $9f5d7f38984024f0$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function $9f5d7f38984024f0$var$contentType(r){return"string"==typeof r?"text/plain":"application/json"}function $9f5d7f38984024f0$var$wrapBody(r){return"string"==typeof r?r:JSON.stringify(r)}function $9f5d7f38984024f0$var$parseResult(r){try{let i=$9f5d7f38984024f0$var$secureJSON__default.default.parse(r);if("object"!=typeof i)throw Error("Invalid response");return i}catch(i){return r}}function $9f5d7f38984024f0$var$request(r){var i,n;return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let s={url:r.url,method:r.method,data:$9f5d7f38984024f0$var$wrapBody(r.body),withCredentials:!1,headers:{"Content-Type":$9f5d7f38984024f0$var$contentType(null==r.body?"":r.body)},timeout:null!==(i=r.timeout)&&void 0!==i?i:void 0,transformResponse:r=>r};try{let r=yield $9f5d7f38984024f0$var$axios__default.default.request(s);if(200==+r.status)return $9f5d7f38984024f0$var$parseResult(r.data);let i=$9f5d7f38984024f0$var$parseResult(r.data);if("object"==typeof i&&null!=i&&null!=i.error)throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:i.error});throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:r.data})}catch(s){let r=s,i=null===(n=null==r?void 0:r.response)||void 0===n?void 0:n.data;if("string"==typeof i){let r=$9f5d7f38984024f0$var$parseResult(i);if("object"==typeof r&&null!==r&&r.error)throw $3FhS8.CreateHardwareErrorByBridgeError(String(r.error));throw $3FhS8.CreateHardwareErrorByBridgeError(i)}throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.BridgeNetworkError,message:(null==r?void 0:r.message)||"Bridge network error"})}})}"function"==typeof SuppressedError&&SuppressedError,$9f5d7f38984024f0$var$axios__default.default.interceptors.request.use(r=>{var i;return"undefined"!=typeof window||(null===(i=r.url)||void 0===i?void 0:i.startsWith("http://localhost:21320"))&&!r.headers.get("Origin")&&r.headers.set("Origin","https://jssdk.onekey.so"),r});const $9f5d7f38984024f0$var$DEFAULT_URL="http://localhost:21320",{check:$9f5d7f38984024f0$var$check,buildOne:$9f5d7f38984024f0$var$buildOne,receiveOne:$9f5d7f38984024f0$var$receiveOne,parseConfigure:$9f5d7f38984024f0$var$parseConfigure}=$9f5d7f38984024f0$var$transport__default.default;class $9f5d7f38984024f0$var$HttpTransport{constructor(r){this.name="HttpTransport",this.configured=!1,this.stopped=!1,this.url=null==r?$9f5d7f38984024f0$var$DEFAULT_URL:r}_post(r){return this.stopped?Promise.reject($3FhS8.ERRORS.TypedError("Transport stopped.")):$9f5d7f38984024f0$var$request(Object.assign(Object.assign({},r),{method:"POST",url:this.url+r.url}))}init(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){this.Log=r;let i=yield this._silentInit();return i})}_silentInit(){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let r=yield $9f5d7f38984024f0$var$request({url:this.url,method:"POST",timeout:3e3}),i=$9f5d7f38984024f0$var$check.info(r);return i.version})}configure(r){let i=$9f5d7f38984024f0$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null===r)throw $3FhS8.ERRORS.TypedError("Http-Transport does not support listen without previous.");let i=yield this._post({url:"/listen",body:r}),n=$9f5d7f38984024f0$var$check.devices(i);return n})}enumerate(){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let r=yield this._post({url:"/enumerate"}),i=$9f5d7f38984024f0$var$check.devices(r);return i.map(r=>Object.assign(Object.assign({},r),{commType:"bridge"}))})}_acquireMixed(r){let i=null==r.previous?"null":encodeURIComponent(r.previous),n=encodeURIComponent(r.path),s=`/acquire/${n}/${i}`;return this._post({url:s})}acquire(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let i=yield this._acquireMixed(r);return $9f5d7f38984024f0$var$check.acquire(i)})}release(r,i){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let n=this._post({url:`/release/${r}`});i||(yield n)})}call(r,i,n){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages;$5xch2.LogBlockCommand.has(i)?this.Log.debug("call-"," name: ",i):this.Log.debug("call-"," name: ",i," data: ",n);let a=$9f5d7f38984024f0$var$buildOne(s,i,n),o=a.toString("hex"),d=yield this._post({url:`/call/${r}`,body:o,timeout:"Initialize"===i?1e4:void 0});if("string"!=typeof d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let f=$9f5d7f38984024f0$var$receiveOne(s,d);return $9f5d7f38984024f0$var$check.call(f)})}post(r,i,n){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages,a=$9f5d7f38984024f0$var$buildOne(s,i,n).toString("hex");yield this._post({url:`/post/${r}`,body:a})})}read(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let i=this._messages,n=yield this._post({url:`/read/${r}`});if("string"!=typeof n)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let s=$9f5d7f38984024f0$var$receiveOne(i,n);return $9f5d7f38984024f0$var$check.call(s)})}requestDevice(){return Promise.reject()}stop(){this.stopped=!0}cancel(){this.Log.debug("canceled")}}$9f5d7f38984024f0$exports=$9f5d7f38984024f0$var$HttpTransport;var $b837a238e3579d4d$exports={},$awmEs=parcelRequire("awmEs"),$b837a238e3579d4d$require$Buffer=$awmEs.Buffer;Object.defineProperty($b837a238e3579d4d$exports,"__esModule",{value:!0});var $5xch2=parcelRequire("5xch2"),$3FhS8=parcelRequire("3FhS8"),$2kkR6=parcelRequire("2kkR6");function $b837a238e3579d4d$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $b837a238e3579d4d$var$transport__default=$b837a238e3579d4d$var$_interopDefaultLegacy($5xch2),$b837a238e3579d4d$var$ByteBuffer__default=$b837a238e3579d4d$var$_interopDefaultLegacy($2kkR6);function $b837a238e3579d4d$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const{parseConfigure:$b837a238e3579d4d$var$parseConfigure$1,buildEncodeBuffers:$b837a238e3579d4d$var$buildEncodeBuffers,decodeProtocol:$b837a238e3579d4d$var$decodeProtocol,receiveOne:$b837a238e3579d4d$var$receiveOne$1,check:$b837a238e3579d4d$var$check$1}=$b837a238e3579d4d$var$transport__default.default,$b837a238e3579d4d$var$CONFIGURATION_ID=1,$b837a238e3579d4d$var$INTERFACE_ID=0,$b837a238e3579d4d$var$ENDPOINT_ID=1,$b837a238e3579d4d$var$PACKET_SIZE=64,$b837a238e3579d4d$var$HEADER_LENGTH=6,$b837a238e3579d4d$var$PACKET_IO_MAX_RETRIES=3,$b837a238e3579d4d$var$PACKET_IO_RETRY_DELAY=300;class $b837a238e3579d4d$var$WebUsbTransport{constructor(){this.name="WebUsbTransport",this.stopped=!1,this.configured=!1,this.deviceList=[],this.configurationId=$b837a238e3579d4d$var$CONFIGURATION_ID,this.endpointId=$b837a238e3579d4d$var$ENDPOINT_ID,this.interfaceId=$b837a238e3579d4d$var$INTERFACE_ID}init(r){this.Log=r;let{usb:i}=navigator;if(!i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"WebUSB is not supported by current browsers");this.usb=i}configure(r){let i=$b837a238e3579d4d$var$parseConfigure$1(r);this.configured=!0,this.messages=i}promptDeviceAccess(){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(!this.usb)return null;try{let r=yield this.usb.requestDevice({filters:$3FhS8.ONEKEY_WEBUSB_FILTER});return r}catch(r){return this.Log.debug("requestDevice error: ",r instanceof Error?`${r.name}: ${r.message}`:String(r)),null}})}enumerate(){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){return yield this.getConnectedDevices(),this.deviceList})}getConnectedDevices(){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(!this.usb)return[];let r=yield this.usb.getDevices(),i=r.filter(r=>{let i=$3FhS8.ONEKEY_WEBUSB_FILTER.some(i=>r.vendorId===i.vendorId&&r.productId===i.productId),n="string"==typeof r.serialNumber&&r.serialNumber.length>0;return i&&n});return this.deviceList=i.map(r=>({path:r.serialNumber,device:r,commType:"webusb"})),this.deviceList})}acquire(r){var i;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(r.path)try{return yield this.connect(null!==(i=r.path)&&void 0!==i?i:"",!0),yield Promise.resolve(r.path)}catch(r){throw this.Log.debug("acquire error: ",r instanceof Error?`${r.name}: ${r.message}`:String(r)),r}})}findDevice(r){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){0===this.deviceList.length&&(yield this.getConnectedDevices());let i=this.deviceList.find(i=>i.path===r);if(null==i&&(yield this.getConnectedDevices(),null==(i=this.deviceList.find(i=>i.path===r))))throw Error("Action was interrupted.");return i.device})}connect(r,i){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){let n=5;for(let s=0;s=$b837a238e3579d4d$var$PACKET_SIZE?f.append(n):f.append(n.slice(0,d-f.offset))}f.reset();let l=f.toBuffer();return $b837a238e3579d4d$require$Buffer.from(l).toString("hex")})}release(r){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){let i=yield this.findDevice(r);yield i.releaseInterface(this.interfaceId),yield i.close()})}}const{parseConfigure:$b837a238e3579d4d$var$parseConfigure,buildBuffers:$b837a238e3579d4d$var$buildBuffers,receiveOne:$b837a238e3579d4d$var$receiveOne,check:$b837a238e3579d4d$var$check}=$b837a238e3579d4d$var$transport__default.default;class $b837a238e3579d4d$var$ElectronBleTransport{constructor(){this.name="ElectronBleTransport",this.configured=!1,this.runPromise=null,this.connectedDevices=new Set,this.dataBuffers=new Map,this.notificationCleanups=new Map,this.disconnectCleanups=new Map}handleBluetoothError(r){if(r&&"object"==typeof r){if("code"in r){if(r.code===$3FhS8.HardwareErrorCode.BlePoweredOff)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePoweredOff);if(r.code===$3FhS8.HardwareErrorCode.BleUnsupported)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleUnsupported);if(r.code===$3FhS8.HardwareErrorCode.BlePermissionError)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePermissionError)}let i=r.message||String(r),n=$3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.BlePoweredOff],s=$3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.BleUnsupported],a=$3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.BlePermissionError];if(i.includes(n)||i.includes("poweredOff"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePoweredOff);if(i.includes(s)||i.includes("unsupported"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleUnsupported);if(i.includes(a)||i.includes("unauthorized"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePermissionError)}throw r}cleanupDeviceState(r){this.connectedDevices.delete(r),this.dataBuffers.delete(r);let i=this.notificationCleanups.get(r);i&&(i(),this.notificationCleanups.delete(r));let n=this.disconnectCleanups.get(r);n&&(n(),this.disconnectCleanups.delete(r))}init(r,i){var n,s;if(this.Log=r,this.emitter=i,!(null===(n=window.desktopApi)||void 0===n?void 0:n.nobleBle))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Noble BLE API is not available. Please ensure you are running in Electron with Noble support.");null===(s=this.Log)||void 0===s||s.debug("[Transport] Noble BLE Transport initialized")}configure(r){let i=$b837a238e3579d4d$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(){}enumerate(){var r,i;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){try{if(!(null===(r=window.desktopApi)||void 0===r?void 0:r.nobleBle))throw Error("Noble BLE API not available");let i=yield window.desktopApi.nobleBle.enumerate();return i}catch(r){null===(i=this.Log)||void 0===i||i.error("[Transport] Noble BLE enumerate failed:",r),this.handleBluetoothError(r)}})}acquire(r){var i,n,s;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){let{uuid:a,forceCleanRunPromise:o}=r;if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleRequiredUUID);o&&this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleForceCleanRunPromise));try{if(!(null===(i=window.desktopApi)||void 0===i?void 0:i.nobleBle))throw Error("Noble BLE API not available");let r=yield window.desktopApi.nobleBle.getDevice(a);if(!r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound,`Device ${a} not found`);try{yield window.desktopApi.nobleBle.connect(a),this.connectedDevices.add(a)}catch(r){this.handleBluetoothError(r)}this.dataBuffers.set(a,{buffer:[],bufferLength:0}),yield window.desktopApi.nobleBle.subscribe(a);let s=window.desktopApi.nobleBle.onNotification((r,i)=>{r===a&&this.handleNotificationData(a,i)});this.notificationCleanups.set(a,s);let o=window.desktopApi.nobleBle.onDeviceDisconnected(r=>{var i;r.id===a&&(this.cleanupDeviceState(a),null===(i=this.emitter)||void 0===i||i.emit("device-disconnect",{name:r.name,id:r.id,connectId:r.id}))});return this.disconnectCleanups.set(a,o),null===(n=this.emitter)||void 0===n||n.emit("device-connect",{name:r.name,id:r.id,connectId:r.id}),{uuid:a,path:a}}catch(r){throw null===(s=this.Log)||void 0===s||s.error("[Transport] Noble BLE acquire failed:",r),r}})}release(r){var i,n,s;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){try{this.connectedDevices.has(r)&&((null===(i=window.desktopApi)||void 0===i?void 0:i.nobleBle)&&(yield window.desktopApi.nobleBle.unsubscribe(r)),(null===(n=window.desktopApi)||void 0===n?void 0:n.nobleBle)&&(yield window.desktopApi.nobleBle.disconnect(r)),this.cleanupDeviceState(r))}catch(i){null===(s=this.Log)||void 0===s||s.error("[Transport] Noble BLE release failed:",i),this.cleanupDeviceState(r)}})}handleNotificationData(r,i){var n,s;if("PAIRING_REJECTED"===i){null===(n=this.Log)||void 0===n||n.debug("[Transport] Pairing rejection detected for device:",r),this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleDeviceBondedCanceled));return}let a=this.processNotificationPacket(r,i);if(a.error){null===(s=this.Log)||void 0===s||s.error("[Transport] Packet processing error:",a.error),this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleWriteCharacteristicError));return}a.isComplete&&a.completePacket&&this.runPromise&&this.runPromise.resolve(a.completePacket)}call(r,i,n){var s,a,o,d,f,l,u;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let c="Initialize"===i||"Cancel"===i;if(this.runPromise&&!c)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportCallInProgress);if(!this.connectedDevices.has(r))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotFound,`Device ${r} not connected`);this.runPromise=$3FhS8.createDeferred();let p=this._messages;"ResourceUpdate"===i||"ResourceAck"===i?null===(s=this.Log)||void 0===s||s.debug("[Transport] Noble BLE call","name:",i,"data:",{file_name:null==n?void 0:n.file_name,hash:null==n?void 0:n.hash}):$5xch2.LogBlockCommand.has(i)?null===(a=this.Log)||void 0===a||a.debug("[Transport] Noble BLE call","name:",i):null===(o=this.Log)||void 0===o||o.debug("[Transport] Noble BLE call","name:",i,"data:",n);let h=$b837a238e3579d4d$var$buildBuffers(p,i,n);try{if(!(null===(d=window.desktopApi)||void 0===d?void 0:d.nobleBle))throw Error("Noble BLE write API not available");for(let i=0;iparseInt(r,16))),o=this.dataBuffers.get(r);if(!o)return{isComplete:!1,error:"No buffer state for device"};if($3FhS8.isHeaderChunk(a)){let r=new DataView(a.buffer);o.bufferLength=r.getInt32(5,!1),o.buffer=[...a.subarray(3)]}else o.buffer=o.buffer.concat([...a]);if(o.buffer.length-$5xch2.COMMON_HEADER_SIZE>=o.bufferLength){let r=new Uint8Array(o.buffer);o.bufferLength=0,o.buffer=[];let i=Array.from(r).map(r=>r.toString(16).padStart(2,"0")).join("");return{isComplete:!0,completePacket:i}}return{isComplete:!1}}catch(r){return{isComplete:!1,error:`Packet processing error: ${r}`}}}}$b837a238e3579d4d$exports.ElectronBleTransport=$b837a238e3579d4d$var$ElectronBleTransport,$b837a238e3579d4d$exports.WebUsbTransport=$b837a238e3579d4d$var$WebUsbTransport;var $3187491a92e9934c$exports={},$3FhS8=parcelRequire("3FhS8"),$5xch2=parcelRequire("5xch2");function $3187491a92e9934c$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $3187491a92e9934c$var$transport__default=$3187491a92e9934c$var$_interopDefaultLegacy($5xch2);function $3187491a92e9934c$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const{check:$3187491a92e9934c$var$check,buildBuffers:$3187491a92e9934c$var$buildBuffers,receiveOne:$3187491a92e9934c$var$receiveOne,parseConfigure:$3187491a92e9934c$var$parseConfigure}=$3187491a92e9934c$var$transport__default.default;class $3187491a92e9934c$var$LowlevelTransport{constructor(){this.configured=!1,this.plugin={}}init(r,i,n){this.Log=r,this.emitter=i,this.plugin=n,this.plugin.init()}configure(r){let i=$3187491a92e9934c$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(){}enumerate(){return this.plugin.enumerate()}acquire(r){var i;return $3187491a92e9934c$var$__awaiter(this,void 0,void 0,function*(){try{return yield this.plugin.connect(r.uuid),{uuid:r.uuid}}catch(r){throw this.Log.debug("lowlelvel transport connect error: ",r),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.LowlevelTrasnportConnectError,null!==(i=r.message)&&void 0!==i?i:r)}})}release(r){return $3187491a92e9934c$var$__awaiter(this,void 0,void 0,function*(){try{return yield this.plugin.disconnect(r),!0}catch(r){return this.Log.debug("lowlelvel transport disconnect error: ",r),!1}})}call(r,i,n){return $3187491a92e9934c$var$__awaiter(this,void 0,void 0,function*(){if(null===this._messages||!this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages;$5xch2.LogBlockCommand.has(i)?this.Log.debug("lowlevel-transport","call-"," name: ",i):this.Log.debug("lowlevel-transport","call-"," name: ",i," data: ",n);let a=$3187491a92e9934c$var$buildBuffers(s,i,n);for(let i of a){let n=i.toString("hex");this.Log.debug("send hex strting: ",n);try{yield this.plugin.send(r,n)}catch(r){throw this.Log.debug("lowlevel transport send error: ",r),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleWriteCharacteristicError,r.reason)}}try{let r=yield this.plugin.receive();if("string"!=typeof r)throw Error("Returning data is not string");this.Log.debug("receive data: ",r);let i=$3187491a92e9934c$var$receiveOne(s,r);return $3187491a92e9934c$var$check.call(i)}catch(r){throw this.Log.error("lowlevel call error: ",r),r}})}cancel(){this.Log.debug("lowlevel-transport","cancel")}}$3187491a92e9934c$exports=$3187491a92e9934c$var$LowlevelTransport;var $8c2252da2d106adc$exports={},$5xch2=parcelRequire("5xch2"),$3FhS8=parcelRequire("3FhS8");function $8c2252da2d106adc$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $8c2252da2d106adc$var$transport__default=$8c2252da2d106adc$var$_interopDefaultLegacy($5xch2),$8c2252da2d106adc$var$axios__default=$8c2252da2d106adc$var$_interopDefaultLegacy($4ce02f68f14348c9$exports),$8c2252da2d106adc$var$secureJSON__default=$8c2252da2d106adc$var$_interopDefaultLegacy($68e51debd7d61343$exports);function $8c2252da2d106adc$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function $8c2252da2d106adc$var$contentType(r){return"string"==typeof r?"text/plain":"application/json"}function $8c2252da2d106adc$var$wrapBody(r){return"string"==typeof r?r:JSON.stringify(r)}function $8c2252da2d106adc$var$parseResult(r){try{let i=$8c2252da2d106adc$var$secureJSON__default.default.parse(r);if("object"!=typeof i)throw Error("Invalid response");return i}catch(i){return r}}function $8c2252da2d106adc$var$request(r){var i;return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let n={url:r.url,method:r.method,data:$8c2252da2d106adc$var$wrapBody(r.body),withCredentials:!1,headers:{"Content-Type":$8c2252da2d106adc$var$contentType(null==r.body?"":r.body)},timeout:null!==(i=r.timeout)&&void 0!==i?i:void 0,transformResponse:r=>r},s=yield $8c2252da2d106adc$var$axios__default.default.request(n);if(200==+s.status)return $8c2252da2d106adc$var$parseResult(s.data);let a=$8c2252da2d106adc$var$parseResult(s.data);if("object"==typeof a&&null!=a&&null!=a.error)throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:a.error});throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:s.data})})}"function"==typeof SuppressedError&&SuppressedError,$8c2252da2d106adc$var$axios__default.default.interceptors.request.use(r=>{var i;return"undefined"!=typeof window||(null===(i=r.url)||void 0===i?void 0:i.startsWith("http://localhost:21333"))&&!r.headers.get("Origin")&&(console.log("set node request origin"),r.headers.set("Origin","https://jssdk.onekey.so")),r});const $8c2252da2d106adc$var$DEFAULT_URL="http://localhost:21333",{check:$8c2252da2d106adc$var$check,buildOne:$8c2252da2d106adc$var$buildOne,receiveOne:$8c2252da2d106adc$var$receiveOne,parseConfigure:$8c2252da2d106adc$var$parseConfigure}=$8c2252da2d106adc$var$transport__default.default;class $8c2252da2d106adc$var$EmulatorTransport{constructor(r){this.name="EmulatorTransport",this.version="1.0.0",this.configured=!1,this.stopped=!1,this.isOutdated=!1,this.url=null==r?$8c2252da2d106adc$var$DEFAULT_URL:r}_post(r){return this.stopped?Promise.reject($3FhS8.ERRORS.TypedError("Transport stopped.")):$8c2252da2d106adc$var$request(Object.assign(Object.assign({},r),{method:"POST",url:this.url+r.url}))}init(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){this.Log=r;let i=yield this._silentInit();return i})}_silentInit(){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let r=yield $8c2252da2d106adc$var$request({url:this.url,method:"POST",timeout:3e3}),i=$8c2252da2d106adc$var$check.info(r);return i.version})}configure(r){let i=$8c2252da2d106adc$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null===r)throw $3FhS8.ERRORS.TypedError("Http-Transport does not support listen without previous.");let i=yield this._post({url:"/listen",body:r}),n=$8c2252da2d106adc$var$check.devices(i);return n})}enumerate(){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let r=yield this._post({url:"/enumerate"}),i=$8c2252da2d106adc$var$check.devices(r);return i.map(r=>Object.assign(Object.assign({},r),{commType:"emulator"}))})}_acquireMixed(r){let i=null==r.previous?"null":encodeURIComponent(r.previous),n=encodeURIComponent(r.path),s=`/acquire/${n}/${i}`;return this._post({url:s})}acquire(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let i=yield this._acquireMixed(r);return $8c2252da2d106adc$var$check.acquire(i)})}release(r,i){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let n=this._post({url:`/release/${r}`});i||(yield n)})}call(r,i,n){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages;$5xch2.LogBlockCommand.has(i)?this.Log.debug("call-"," name: ",i):this.Log.debug("call-"," name: ",i," data: ",n);let a=$8c2252da2d106adc$var$buildOne(s,i,n),o=a.toString("hex"),d=yield this._post({url:`/call/${r}`,body:o,timeout:"Initialize"===i?1e4:void 0});if("string"!=typeof d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let f=$8c2252da2d106adc$var$receiveOne(s,d);return $8c2252da2d106adc$var$check.call(f)})}post(r,i,n){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages,a=$8c2252da2d106adc$var$buildOne(s,i,n).toString("hex");yield this._post({url:`/post/${r}`,body:a})})}read(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let i=this._messages,n=yield this._post({url:`/read/${r}`});if("string"!=typeof n)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let s=$8c2252da2d106adc$var$receiveOne(i,n);return $8c2252da2d106adc$var$check.call(s)})}requestDevice(){return Promise.reject()}stop(){this.stopped=!0}cancel(){this.Log.debug("canceled")}}function $37578c5600331006$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}function $37578c5600331006$var$_interopNamespace(r){if(r&&r.__esModule)return r;var i=Object.create(null);return r&&Object.keys(r).forEach(function(n){if("default"!==n){var s=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(i,n,s.get?s:{enumerable:!0,get:function(){return r[n]}})}}),i.default=r,Object.freeze(i)}$8c2252da2d106adc$exports=$8c2252da2d106adc$var$EmulatorTransport;var $37578c5600331006$var$HardwareSdk__default=$37578c5600331006$var$_interopDefaultLegacy($ce1f303d0aa8ec51$exports),$37578c5600331006$var$HttpTransport__default=$37578c5600331006$var$_interopDefaultLegacy($9f5d7f38984024f0$exports),$37578c5600331006$var$LowlevelTransport__default=$37578c5600331006$var$_interopDefaultLegacy($3187491a92e9934c$exports),$37578c5600331006$var$EmulatorTransport__default=$37578c5600331006$var$_interopDefaultLegacy($8c2252da2d106adc$exports),$37578c5600331006$var$__assign=function(){return($37578c5600331006$var$__assign=Object.assign||function(r){for(var i,n=1,s=arguments.length;n0&&a[a.length-1])&&(6===f[0]||2===f[0])){d=0;continue}if(3===f[0]&&(!a||f[1]>a[0]&&f[1]0&&d.length>a&&!d.warned){d.warned=!0;var a,o,d,f=Error("Possible EventEmitter memory leak detected. "+d.length+" "+String(i)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=r,f.type=i,f.count=d.length,$37578c5600331006$var$ProcessEmitWarning(f)}return r}function $37578c5600331006$var$onceWrapper(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function $37578c5600331006$var$_onceWrap(r,i,n){var s={fired:!1,wrapFn:void 0,target:r,type:i,listener:n},a=$37578c5600331006$var$onceWrapper.bind(s);return a.listener=n,s.wrapFn=a,a}function $37578c5600331006$var$_listeners(r,i,n){var s=r._events;if(void 0===s)return[];var a=s[i];return void 0===a?[]:"function"==typeof a?n?[a.listener||a]:[a]:n?$37578c5600331006$var$unwrapListeners(a):$37578c5600331006$var$arrayClone(a,a.length)}function $37578c5600331006$var$listenerCount(r){var i=this._events;if(void 0!==i){var n=i[r];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function $37578c5600331006$var$arrayClone(r,i){for(var n=Array(i),s=0;s0&&(o=i[0]),o instanceof Error)throw o;var o,d=Error("Unhandled error."+(o?" ("+o.message+")":""));throw d.context=o,d}var f=a[r];if(void 0===f)return!1;if("function"==typeof f)$37578c5600331006$var$ReflectApply(f,this,i);else for(var l=f.length,u=$37578c5600331006$var$arrayClone(f,l),n=0;n=0;o--)if(n[o]===i||n[o].listener===i){d=n[o].listener,a=o;break}if(a<0)return this;0===a?n.shift():$37578c5600331006$var$spliceOne(n,a),1===n.length&&(s[r]=n[0]),void 0!==s.removeListener&&this.emit("removeListener",r,d||i)}return this},$37578c5600331006$var$EventEmitter.prototype.off=$37578c5600331006$var$EventEmitter.prototype.removeListener,$37578c5600331006$var$EventEmitter.prototype.removeAllListeners=function(r){var i,n,s;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0==arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[r]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[r]),this;if(0==arguments.length){var a,o=Object.keys(n);for(s=0;s=0;s--)this.removeListener(r,i[s]);return this},$37578c5600331006$var$EventEmitter.prototype.listeners=function(r){return $37578c5600331006$var$_listeners(this,r,!0)},$37578c5600331006$var$EventEmitter.prototype.rawListeners=function(r){return $37578c5600331006$var$_listeners(this,r,!1)},$37578c5600331006$var$EventEmitter.listenerCount=function(r,i){return"function"==typeof r.listenerCount?r.listenerCount(i):$37578c5600331006$var$listenerCount.call(r,i)},$37578c5600331006$var$EventEmitter.prototype.listenerCount=$37578c5600331006$var$listenerCount,$37578c5600331006$var$EventEmitter.prototype.eventNames=function(){return this._eventsCount>0?$37578c5600331006$var$ReflectOwnKeys(this._events):[]};var $37578c5600331006$var$eventEmitter=new $37578c5600331006$var$events.exports,$37578c5600331006$var$Log=$ce1f303d0aa8ec51$exports.getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdCommonConnectSdk),$37578c5600331006$var$getTransport=function(r){return $37578c5600331006$var$__awaiter(void 0,void 0,void 0,function(){return $37578c5600331006$var$__generator(this,function(i){switch(i.label){case 0:if("desktop-web-ble"===r)return[2,$b837a238e3579d4d$exports.ElectronBleTransport];if("webusb"===r||"desktop-webusb"===r)return[2,$b837a238e3579d4d$exports.WebUsbTransport];if("lowlevel"===r)return[2,$37578c5600331006$var$LowlevelTransport__default.default];if("node-usb"!==r)return[3,2];return[4,Promise.resolve().then(function(){return parcelRequire("7j6a5")}).then(function(r){return $37578c5600331006$var$_interopNamespace(r)})];case 1:return[2,i.sent().default];case 2:if("emulator"===r)return[2,$37578c5600331006$var$EmulatorTransport__default.default];return[2,$37578c5600331006$var$HttpTransport__default.default]}})})},$37578c5600331006$var$_settings=$ce1f303d0aa8ec51$exports.parseConnectSettings(),$37578c5600331006$var$_messageID=0,$37578c5600331006$var$messagePromises={},$37578c5600331006$var$dispose=function(){var r;$37578c5600331006$var$eventEmitter.removeAllListeners(),null===(r=null==$37578c5600331006$var$_core?void 0:$37578c5600331006$var$_core.dispose)||void 0===r||r.call($37578c5600331006$var$_core),$37578c5600331006$var$_settings=$ce1f303d0aa8ec51$exports.parseConnectSettings()},$37578c5600331006$var$uiResponse=function(r){if(!$37578c5600331006$var$_core)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NotInitialized);var i=r.type,n=r.payload;$37578c5600331006$var$_core.handleMessage({event:$ce1f303d0aa8ec51$exports.UI_EVENT,type:i,payload:n})},$37578c5600331006$var$cancel=function(r){void 0!==$37578c5600331006$var$_core&&$37578c5600331006$var$_core.handleMessage({event:$ce1f303d0aa8ec51$exports.IFRAME.CANCEL,type:$ce1f303d0aa8ec51$exports.IFRAME.CANCEL,payload:{connectId:r}})};function $37578c5600331006$var$handleMessage(r){var i=r.event;if($37578c5600331006$var$_core)switch(i!==$ce1f303d0aa8ec51$exports.LOG_EVENT&&$37578c5600331006$var$Log.debug("hd-common-connect-sdk handleMessage",r),i){case $ce1f303d0aa8ec51$exports.UI_EVENT:$37578c5600331006$var$eventEmitter.emit(r.event,r),$37578c5600331006$var$eventEmitter.emit(r.type,r.payload);break;case $ce1f303d0aa8ec51$exports.LOG_EVENT:case $ce1f303d0aa8ec51$exports.FIRMWARE_EVENT:$37578c5600331006$var$eventEmitter.emit(r.event,r);break;case $ce1f303d0aa8ec51$exports.DEVICE_EVENT:[$ce1f303d0aa8ec51$exports.DEVICE.CONNECT,$ce1f303d0aa8ec51$exports.DEVICE.DISCONNECT,$ce1f303d0aa8ec51$exports.DEVICE.FEATURES,$ce1f303d0aa8ec51$exports.DEVICE.SUPPORT_FEATURES].includes(r.type)&&$37578c5600331006$var$eventEmitter.emit(r.type,r.payload);break;case $ce1f303d0aa8ec51$exports.IFRAME.CALLBACK:var n=r.payload,s=n.callbackId,a=n.data,o=n.error;$ce1f303d0aa8ec51$exports.executeCallback(s,a,o);break;default:$37578c5600331006$var$Log.log("No need to be captured message",r.event)}}function $37578c5600331006$var$postMessage(r,i){return void 0===i&&(i=!0),$37578c5600331006$var$__awaiter(this,void 0,void 0,function(){return $37578c5600331006$var$__generator(this,function(n){switch(n.label){case 0:if(!$37578c5600331006$var$_core)throw $3FhS8.ERRORS.TypedError("postMessage: _core not found");if(!i)return[3,2];return $37578c5600331006$var$messagePromises[++$37578c5600331006$var$_messageID]=$3FhS8.createDeferred(),[4,$37578c5600331006$var$_core.handleMessage($37578c5600331006$var$__assign($37578c5600331006$var$__assign({},r),{id:"".concat($37578c5600331006$var$_messageID)}))];case 1:return[2,n.sent()];case 2:return $37578c5600331006$var$_core.handleMessage(r),[2]}})})}var $37578c5600331006$var$init=function(r,i,n){return $37578c5600331006$var$__awaiter(void 0,void 0,void 0,function(){var i,s,a;return $37578c5600331006$var$__generator(this,function(o){switch(o.label){case 0:$37578c5600331006$var$_settings=$37578c5600331006$var$__assign($37578c5600331006$var$__assign($37578c5600331006$var$__assign({},$37578c5600331006$var$_settings),r),{env:null!==(a=r.env)&&void 0!==a?a:"node"}),$ce1f303d0aa8ec51$exports.enableLog(!!r.debug),$37578c5600331006$var$Log.debug("init"),o.label=1;case 1:return o.trys.push([1,4,,5]),[4,$37578c5600331006$var$getTransport($37578c5600331006$var$_settings.env)];case 2:return i=o.sent(),[4,$ce1f303d0aa8ec51$exports.initCore($37578c5600331006$var$_settings,i,n)];case 3:return null==($37578c5600331006$var$_core=o.sent())||$37578c5600331006$var$_core.on($ce1f303d0aa8ec51$exports.CORE_EVENT,$37578c5600331006$var$handleMessage),$ce1f303d0aa8ec51$exports.setLoggerPostMessage($37578c5600331006$var$handleMessage),[2,!0];case 4:return s=o.sent(),$37578c5600331006$var$Log.error($ce1f303d0aa8ec51$exports.createErrorMessage(s)),[2,!1];case 5:return[2]}})})},$37578c5600331006$var$call=function(r){return $37578c5600331006$var$__awaiter(void 0,void 0,void 0,function(){var i,n,s,a,o;return $37578c5600331006$var$__generator(this,function(d){switch(d.label){case 0:$37578c5600331006$var$Log.debug("call: ",r),d.label=1;case 1:return d.trys.push([1,3,,4]),[4,$37578c5600331006$var$postMessage({event:$ce1f303d0aa8ec51$exports.IFRAME.CALL,type:$ce1f303d0aa8ec51$exports.IFRAME.CALL,payload:r})];case 2:if(i=d.sent())return $37578c5600331006$var$Log.debug("response: ",i),i.success||((null===(s=i.payload)||void 0===s?void 0:s.code)===$3FhS8.HardwareErrorCode.BleUnsupported&&$37578c5600331006$var$postMessage($ce1f303d0aa8ec51$exports.createUiMessage($ce1f303d0aa8ec51$exports.UI_REQUEST.BLUETOOTH_UNSUPPORTED),!1),(null===(a=i.payload)||void 0===a?void 0:a.code)===$3FhS8.HardwareErrorCode.BlePoweredOff&&$37578c5600331006$var$postMessage($ce1f303d0aa8ec51$exports.createUiMessage($ce1f303d0aa8ec51$exports.UI_REQUEST.BLUETOOTH_POWERED_OFF),!1),(null===(o=i.payload)||void 0===o?void 0:o.code)===$3FhS8.HardwareErrorCode.BlePermissionError&&$37578c5600331006$var$postMessage($ce1f303d0aa8ec51$exports.createUiMessage($ce1f303d0aa8ec51$exports.UI_REQUEST.BLUETOOTH_PERMISSION),!1)),[2,i];return[2,$ce1f303d0aa8ec51$exports.createErrorMessage($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNotResponse))];case 3:return n=d.sent(),$37578c5600331006$var$Log.error("__call error: ",n),[2,$ce1f303d0aa8ec51$exports.createErrorMessage(n)];case 4:return[2]}})})},$37578c5600331006$var$updateSettings=function(){return Promise.resolve(!0)},$37578c5600331006$var$switchTransport=function(){return Promise.resolve({success:!0})},$37578c5600331006$var$HardwareCommonConnectSdk=$37578c5600331006$var$HardwareSdk__default.default({eventEmitter:$37578c5600331006$var$eventEmitter,init:$37578c5600331006$var$init,call:$37578c5600331006$var$call,cancel:$37578c5600331006$var$cancel,dispose:$37578c5600331006$var$dispose,uiResponse:$37578c5600331006$var$uiResponse,updateSettings:$37578c5600331006$var$updateSettings,switchTransport:$37578c5600331006$var$switchTransport});$37578c5600331006$exports.default=$37578c5600331006$var$HardwareCommonConnectSdk,$37578c5600331006$exports.messagePromises=$37578c5600331006$var$messagePromises;const $bd8266c89806f406$var$MESSAGE_TOP_CHAR=63,$bd8266c89806f406$var$MESSAGE_HEADER_BYTE=35,$bd8266c89806f406$export$3c86bd56efb4b5a8=6,$bd8266c89806f406$export$d047003479962a35=r=>{if(r.length<9)return!1;let[i,n,s]=r;return String.fromCharCode(i)===String.fromCharCode($bd8266c89806f406$var$MESSAGE_TOP_CHAR)&&String.fromCharCode(n)===String.fromCharCode($bd8266c89806f406$var$MESSAGE_HEADER_BYTE)&&String.fromCharCode(s)===String.fromCharCode($bd8266c89806f406$var$MESSAGE_HEADER_BYTE)};function $bd8266c89806f406$export$e673efccd97e4223(r,i){let n,s=()=>{},a=()=>{},o=new Promise(async(i,o)=>{if(s=i,a=o,"function"==typeof r)try{await r()}catch(r){o(r)}"string"==typeof r&&(n=r)});return{id:n,data:i,resolve:s,reject:a,promise:o}}var $awmEs=parcelRequire("awmEs"),$d70b7d984fd77812$require$Buffer=$awmEs.Buffer;const $d70b7d984fd77812$var$UI_EVENT="UI_EVENT",$d70b7d984fd77812$var$UI_REQUEST={},$d70b7d984fd77812$var$UI_RESPONSE={RECEIVE_PIN:"ui-receive_pin",RECEIVE_PASSPHRASE:"ui-receive_passphrase"};function $d70b7d984fd77812$var$connectWebViewJavascriptBridge(r){window.WebViewJavascriptBridge&&WebViewJavascriptBridge.inited?r(WebViewJavascriptBridge):(console.log("wait bridge init success"),window.document.addEventListener("WebViewJavascriptBridgeReady",function(){r(WebViewJavascriptBridge)},!1))}$d70b7d984fd77812$var$connectWebViewJavascriptBridge(function(r){console.log("bridge init success"),$d70b7d984fd77812$var$bridge=r,$d70b7d984fd77812$var$registerBridgeHandler(r)});let $d70b7d984fd77812$var$isInitialized=!1;function $d70b7d984fd77812$var$getHardwareSDKInstance(){return new Promise(async(r,i)=>{if(!window.WebViewJavascriptBridge)throw Error("bridge is not connected");if($d70b7d984fd77812$var$isInitialized){console.log("already initialized, skip"),r($parcel$interopDefault($37578c5600331006$exports));return}let n={env:"lowlevel",fetchConfig:!0,debug:!0},s=$d70b7d984fd77812$var$createLowlevelPlugin();try{await $parcel$interopDefault($37578c5600331006$exports).init(n,void 0,s),console.log("HardwareSDK init success"),$d70b7d984fd77812$var$isInitialized=!0,r($parcel$interopDefault($37578c5600331006$exports)),$d70b7d984fd77812$var$listenHardwareEvent($parcel$interopDefault($37578c5600331006$exports))}catch(r){i(r)}})}let $d70b7d984fd77812$var$receiveQueue=[],$d70b7d984fd77812$var$protocolV2Buffer=[],$d70b7d984fd77812$var$protocolV2ExpectedLength=0;function $d70b7d984fd77812$var$resolveReceive(r){if($d70b7d984fd77812$var$runPromise){let i=$d70b7d984fd77812$var$runPromise;$d70b7d984fd77812$var$runPromise=void 0,i.resolve(r);return}$d70b7d984fd77812$var$receiveQueue.push(r)}function $d70b7d984fd77812$var$resetProtocolV2Buffer(){$d70b7d984fd77812$var$protocolV2Buffer=[],$d70b7d984fd77812$var$protocolV2ExpectedLength=0}function $d70b7d984fd77812$var$handleProtocolV2Chunk(r){if($d70b7d984fd77812$var$protocolV2Buffer=$d70b7d984fd77812$var$protocolV2Buffer.concat([...r]),0===$d70b7d984fd77812$var$protocolV2ExpectedLength&&$d70b7d984fd77812$var$protocolV2Buffer.length>=3){if(90!==$d70b7d984fd77812$var$protocolV2Buffer[0]){$d70b7d984fd77812$var$resetProtocolV2Buffer();return}$d70b7d984fd77812$var$protocolV2ExpectedLength=$d70b7d984fd77812$var$protocolV2Buffer[1]|$d70b7d984fd77812$var$protocolV2Buffer[2]<<8}for(;$d70b7d984fd77812$var$protocolV2ExpectedLength>0&&$d70b7d984fd77812$var$protocolV2Buffer.length>=$d70b7d984fd77812$var$protocolV2ExpectedLength;){let r=$d70b7d984fd77812$require$Buffer.from($d70b7d984fd77812$var$protocolV2Buffer.slice(0,$d70b7d984fd77812$var$protocolV2ExpectedLength));if($d70b7d984fd77812$var$protocolV2Buffer=$d70b7d984fd77812$var$protocolV2Buffer.slice($d70b7d984fd77812$var$protocolV2ExpectedLength),$d70b7d984fd77812$var$protocolV2ExpectedLength=0,$d70b7d984fd77812$var$resolveReceive(r.toString("hex")),0===$d70b7d984fd77812$var$protocolV2Buffer.length)return;if($d70b7d984fd77812$var$protocolV2Buffer.length>=3&&90===$d70b7d984fd77812$var$protocolV2Buffer[0])$d70b7d984fd77812$var$protocolV2ExpectedLength=$d70b7d984fd77812$var$protocolV2Buffer[1]|$d70b7d984fd77812$var$protocolV2Buffer[2]<<8;else{$d70b7d984fd77812$var$resetProtocolV2Buffer();return}}}function $d70b7d984fd77812$var$createLowlevelPlugin(){let r={enumerate:()=>new Promise(r=>{$d70b7d984fd77812$var$bridge.callHandler("enumerate",{},i=>{console.log("===> call enumerate response: ",i),r(JSON.parse(i))})}),send:(r,i)=>new Promise(n=>{$d70b7d984fd77812$var$bridge.callHandler("send",{uuid:r,data:i},r=>{n(r)})}),receive:()=>new Promise(r=>{if($d70b7d984fd77812$var$receiveQueue.length>0){r($d70b7d984fd77812$var$receiveQueue.shift());return}$d70b7d984fd77812$var$runPromise=$bd8266c89806f406$export$e673efccd97e4223();let i=$d70b7d984fd77812$var$runPromise.promise;r(i)}),connect:r=>new Promise(i=>{$d70b7d984fd77812$var$bridge.callHandler("connect",{uuid:r},()=>{i()})}),disconnect:r=>new Promise(i=>{$d70b7d984fd77812$var$bridge.callHandler("disconnect",{uuid:r},r=>{console.log("call connect response: ",r),i(r)})}),init:()=>(console.log("call init"),Promise.resolve()),version:"OneKey-1.0"};return r}function $d70b7d984fd77812$var$listenHardwareEvent(r){r.on($d70b7d984fd77812$var$UI_EVENT,i=>{"ui-request_pin"===i.type&&(console.log("PIN requested, calling requestPinInput handler"),$d70b7d984fd77812$var$bridge.callHandler("requestPinInput",{},i=>{let n=i&&""!==i?i:"@@ONEKEY_INPUT_PIN_IN_DEVICE";console.log("PIN response received:",i?"PIN entered":"Using hardware PIN"),r.uiResponse({type:$d70b7d984fd77812$var$UI_RESPONSE.RECEIVE_PIN,payload:n})})),"ui-request_passphrase"===i.type&&r.uiResponse({type:$d70b7d984fd77812$var$UI_RESPONSE.RECEIVE_PASSPHRASE,payload:{value:"",passphraseOnDevice:!1,save:!1}}),"ui-button"===i.type&&(console.log("Button confirmation requested, showing prompt on client"),$d70b7d984fd77812$var$bridge.callHandler("requestButtonConfirmation",{message:i.payload?.message||"Please confirm on your device"})),"ui-close_window"===i.type&&(console.log("Request to close UI window received"),$d70b7d984fd77812$var$bridge.callHandler("closeUIWindow",{}))})}function $d70b7d984fd77812$var$registerBridgeHandler(){$d70b7d984fd77812$var$bridge.registerHandler("bridgeCommonCall",async(r,i)=>{console.log("bridgeCommonCall",r);try{let n;let{name:s,data:a}=JSON.parse(r),{connectId:o,deviceId:d,...f}=a,l=await $d70b7d984fd77812$var$getHardwareSDKInstance();if(!l[s])throw Error(`Method ${s} not found`);n=await l[s](o,d,f),i(n)}catch(r){console.error(r),i({success:!1,error:r.message})}});let r=0,i=[];$d70b7d984fd77812$var$bridge.registerHandler("monitorCharacteristic",async n=>{try{let s=$d70b7d984fd77812$require$Buffer.from(n,"hex");if($d70b7d984fd77812$var$protocolV2Buffer.length>0||90===s[0]){$d70b7d984fd77812$var$handleProtocolV2Chunk(s);return}if($bd8266c89806f406$export$d047003479962a35(s)?(r=s.readInt32BE(5),i=[...s.subarray(3)]):i=i.concat([...s]),i.length-$bd8266c89806f406$export$3c86bd56efb4b5a8>=r){let n=$d70b7d984fd77812$require$Buffer.from(i);r=0,i=[],$d70b7d984fd77812$var$resolveReceive(n.toString("hex"))}}catch(r){console.log("monitor data error: ",r),$d70b7d984fd77812$var$runPromise?.reject(r)}})} \ No newline at end of file diff --git a/packages/connect-examples/native-android-example/app/src/main/assets/index.cba9be96.js b/packages/connect-examples/native-android-example/app/src/main/assets/index.cba9be96.js new file mode 100644 index 000000000..4522de47e --- /dev/null +++ b/packages/connect-examples/native-android-example/app/src/main/assets/index.cba9be96.js @@ -0,0 +1 @@ +function e(e,r,n,o){Object.defineProperty(e,r,{get:n,set:o,enumerable:!0,configurable:!0})}var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},o={},t=r.parcelRequire2d1f;null==t&&((t=function(e){if(e in n)return n[e].exports;if(e in o){var r=o[e];delete o[e];var t={id:e,exports:{}};return n[e]=t,r.call(t.exports,t,t.exports),t.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,r){o[e]=r},r.parcelRequire2d1f=t),t.register("dRo73",function(r,n){e(r.exports,"register",()=>o,e=>o=e),e(r.exports,"resolve",()=>t,e=>t=e);var o,t,i={};o=function(e){for(var r=Object.keys(e),n=0;n numeric require -// -// anything defined in a previous bundle is accessed via the -// orig method which is the require for previous bundles - -(function (modules, entry, mainEntry, parcelRequireName, globalName) { - /* eslint-disable no-undef */ - var globalObject = - typeof globalThis !== 'undefined' - ? globalThis - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : typeof global !== 'undefined' - ? global - : {}; - /* eslint-enable no-undef */ - - // Save the require from previous bundle to this closure if any - var previousRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - - var cache = previousRequire.cache || {}; - // Do not use `require` to prevent Webpack from trying to bundle this call - var nodeRequire = - typeof module !== 'undefined' && - typeof module.require === 'function' && - module.require.bind(module); - - function newRequire(name, jumped) { - if (!cache[name]) { - if (!modules[name]) { - // if we cannot find the module within our internal map or - // cache jump to the current global require ie. the last bundle - // that was added to the page. - var currentRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - if (!jumped && currentRequire) { - return currentRequire(name, true); - } - - // If there are other bundles on this page the require from the - // previous one is saved to 'previousRequire'. Repeat this as - // many times as there are bundles until the module is found or - // we exhaust the require chain. - if (previousRequire) { - return previousRequire(name, true); - } - - // Try the node require function if it exists. - if (nodeRequire && typeof name === 'string') { - return nodeRequire(name); - } - - var err = new Error("Cannot find module '" + name + "'"); - err.code = 'MODULE_NOT_FOUND'; - throw err; - } - - localRequire.resolve = resolve; - localRequire.cache = {}; - - var module = (cache[name] = new newRequire.Module(name)); - - modules[name][0].call( - module.exports, - localRequire, - module, - module.exports, - this - ); - } - - return cache[name].exports; - - function localRequire(x) { - var res = localRequire.resolve(x); - return res === false ? {} : newRequire(res); - } - - function resolve(x) { - var id = modules[name][1][x]; - return id != null ? id : x; - } - } - - function Module(moduleName) { - this.id = moduleName; - this.bundle = newRequire; - this.exports = {}; - } - - newRequire.isParcelRequire = true; - newRequire.Module = Module; - newRequire.modules = modules; - newRequire.cache = cache; - newRequire.parent = previousRequire; - newRequire.register = function (id, exports) { - modules[id] = [ - function (require, module) { - module.exports = exports; - }, - {}, - ]; - }; - - Object.defineProperty(newRequire, 'root', { - get: function () { - return globalObject[parcelRequireName]; - }, - }); - - globalObject[parcelRequireName] = newRequire; - - for (var i = 0; i < entry.length; i++) { - newRequire(entry[i]); - } - - if (mainEntry) { - // Expose entry point to Node, AMD or browser globals - // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js - var mainExports = newRequire(mainEntry); - - // CommonJS - if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = mainExports; - - // RequireJS - } else if (typeof define === 'function' && define.amd) { - define(function () { - return mainExports; - }); - - // - +OneKey Hardware

Hardware SDK WebView

\ No newline at end of file diff --git a/packages/connect-examples/native-android-example/web/package.json b/packages/connect-examples/native-android-example/web/package.json index 96056f9a2..fccf7456f 100644 --- a/packages/connect-examples/native-android-example/web/package.json +++ b/packages/connect-examples/native-android-example/web/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@noble/hashes": "^1.3.1", - "@onekeyfe/hd-common-connect-sdk": "1.1.15", + "@onekeyfe/hd-common-connect-sdk": "1.1.26-alpha.8", "lodash": "^4.17.21", "ripple-keypairs": "^1.3.0" }, diff --git a/packages/connect-examples/native-android-example/web/yarn.lock b/packages/connect-examples/native-android-example/web/yarn.lock index 6b9e916a3..8ba5fe523 100644 --- a/packages/connect-examples/native-android-example/web/yarn.lock +++ b/packages/connect-examples/native-android-example/web/yarn.lock @@ -110,77 +110,88 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@onekeyfe/hd-common-connect-sdk@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-common-connect-sdk/-/hd-common-connect-sdk-1.1.15.tgz#5c04d027d3be3de46a8a575525a6974d972784b3" - integrity sha512-pqP59nm+XRgFFHU61SNclsFQw5OCajyTikHwKgSstg5uQF0F2dHop0Y6plQzPkBfzZfsCAqvUvWKy9VVdVKpqQ== - dependencies: - "@onekeyfe/hd-core" "1.1.15" - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport-emulator" "1.1.15" - "@onekeyfe/hd-transport-http" "1.1.15" - "@onekeyfe/hd-transport-lowlevel" "1.1.15" - "@onekeyfe/hd-transport-web-device" "1.1.15" - -"@onekeyfe/hd-core@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-core/-/hd-core-1.1.15.tgz#e26752660fcf0be7fb55c5ae21e8be122d3f31a5" - integrity sha512-tZ3lFUS6FKQG28dSVEutIFdL0NBOIffdwtFBXDS2r9WQn4ANwQdmbcJVUOgzjM/LRtbs9mefLXrI0SC5fvVx0w== - dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" - axios "1.12.2" +"@onekeyfe/hd-common-connect-sdk@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-common-connect-sdk/-/hd-common-connect-sdk-1.1.26-alpha.8.tgz#77dae506c14adc282c96361ba62653e3165f884e" + integrity sha512-uwf6RcT7OsbJ3/okH/B2g5wRQJv4XPNQZdFg3JDAF7+66LfcLf4Q+6UuAnlb3nCfLClx/mQJZ8oGOZ8A9pldCQ== + dependencies: + "@onekeyfe/hd-core" "1.1.26-alpha.8" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-emulator" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-http" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-lowlevel" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-usb" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-web-device" "1.1.26-alpha.8" + +"@onekeyfe/hd-core@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-core/-/hd-core-1.1.26-alpha.8.tgz#1d4a2a63477da0f91f8b95f24c96336c9253d001" + integrity sha512-yMjOeHhyWMWN4rM3y9X6gZ0LRcnfxHJRjKtrpuysZVjWe9AH01emI433UVahm3laS5TEWSQ/+mXcOwPipGJIWg== + dependencies: + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + axios "1.15.0" bignumber.js "^9.0.2" bytebuffer "^5.0.1" jszip "^3.10.1" parse-uri "^1.0.7" semver "^7.3.7" -"@onekeyfe/hd-shared@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-shared/-/hd-shared-1.1.15.tgz#cb9d43c0accbacfb8fc03926b647e9ba66487f10" - integrity sha512-zyeqX9ZUP9vg/dSbywgw99N24WqdXySqS+CEf3Z/GcSksbYqU0qkfd3TCe6hvnXh7SbWzc7V6D+nbKGuRFsDKg== +"@onekeyfe/hd-shared@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-shared/-/hd-shared-1.1.26-alpha.8.tgz#1ffd005383159ff1488ddd331a0cad06216f6419" + integrity sha512-JnUrFagV5nFcNeAAJBGTVkiH8APz/0WE4MJlecqFuNlqNWWfGMZBZz6Y5ocZiQzd9+fzlh9n02rdBQxnD2qnMg== -"@onekeyfe/hd-transport-emulator@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-emulator/-/hd-transport-emulator-1.1.15.tgz#b89ed007e10ffcd99e3422f40a709bd8cc78aa34" - integrity sha512-ZpoHS171DsjqFii1sShs8XBj/j/c3VNROrE2bQ2rM6t9/HlCcYsW2u7L5xRvRO0qBhkNNJFBwLk1S9ajrOkgjw== +"@onekeyfe/hd-transport-emulator@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-emulator/-/hd-transport-emulator-1.1.26-alpha.8.tgz#0ecb4783272c5d0b6d020df0e4aa51b2b2039665" + integrity sha512-GNd2V+txjZjeBE9NIgsy7UccxWrtY+dnDuj2XbFaWUhTN+NXY8/pXyqDq9qeH5ReuaH17SIZIyGMtiY7J7ztOg== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" - axios "1.12.2" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + axios "1.15.0" secure-json-parse "^4.0.0" -"@onekeyfe/hd-transport-http@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-http/-/hd-transport-http-1.1.15.tgz#a5a0c9d93a9c19209bd53d9abebe5ea3eced5c44" - integrity sha512-MkfDV9rOkWKO+kZMop9toZObI2wVAAyISPbOTomo+Yoe7jYrjnpGbU0VzFa6e2sKQ04UGcL7DAV3dwB5+gvI9Q== +"@onekeyfe/hd-transport-http@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-http/-/hd-transport-http-1.1.26-alpha.8.tgz#02535908bd3b608e51ca25109b8602022fe4d6c5" + integrity sha512-zf9DWUyZ1fS+IKIBYhzF/aSgQJj2ftVQHbLpno1/2dSbKcH04qCI0a5u3nJE59vixyqqpBIk5q3mNaNy9GSo+Q== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" - axios "1.12.2" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + axios "1.15.0" secure-json-parse "^4.0.0" -"@onekeyfe/hd-transport-lowlevel@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-lowlevel/-/hd-transport-lowlevel-1.1.15.tgz#770968cdbdbaeda203bc73db6abc850035ae829c" - integrity sha512-BLJYb/+wk2XI0wpjbDU/Vjdg/ErY1PUIC04WHUfUbEyN0IjV/aozf+jI8K1ahZvbraVyrixL8SHkMBPYmxQzAg== +"@onekeyfe/hd-transport-lowlevel@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-lowlevel/-/hd-transport-lowlevel-1.1.26-alpha.8.tgz#3e6393e54e266e25c4bf8b737156f667a0cda1ca" + integrity sha512-uaMc4ipiK81iWnHVbXC7sUcW28dph+73f3+DWxzq9F3z9AWsopSYNYY7C6MA2kBPIsJeQ3yPSDxA0IINWGIswA== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" -"@onekeyfe/hd-transport-web-device@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-web-device/-/hd-transport-web-device-1.1.15.tgz#890dbaef27db86c2068c8910a3b01ca6a09b0d7c" - integrity sha512-aQWJuAjns5a1tc+BDP+QxYuKwpjqYNarWQHEYRf0iCr5pMKTZIrrjq4DFmWnw+6glGuXhSDkPGJ/7jHWZl/OYA== +"@onekeyfe/hd-transport-usb@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-usb/-/hd-transport-usb-1.1.26-alpha.8.tgz#6dd7f0121f7199f1131fce35dc9a3cb05f60eb51" + integrity sha512-ia5zJI810OXF8Rqkvz2y/ihNJIf5EZvDTISSoDn2JlrFvnOmfn9V8IyBsICDfoeXREIcmRelNvIg1Km+0qS/SQ== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + bytebuffer "^5.0.1" + usb "^2.14.0" + +"@onekeyfe/hd-transport-web-device@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-web-device/-/hd-transport-web-device-1.1.26-alpha.8.tgz#4bcb8004130bbe687c5142ceb0f455674006f96a" + integrity sha512-B5p/nVXiBN5pPCnWzQVhHkLzL5fIU4JiW9G4hGC4slgWBi2wtB1OtUAvzEALFimY7+4jPo98bnPZA1HYeIUOCw== + dependencies: + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" -"@onekeyfe/hd-transport@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport/-/hd-transport-1.1.15.tgz#ea0fb55c8b47b7c91222012ee2998ed41ec90dc0" - integrity sha512-IV4acNU/7x84CC9s+RHhAMZBK/SePBwqSDRY1xZ9io6AmUHLaRH2w6OC6/msJQyXy+juzL2T9RYYA0DxNXjp1Q== +"@onekeyfe/hd-transport@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport/-/hd-transport-1.1.26-alpha.8.tgz#0f743869db2187e1c607e55c1118dc15262ab39e" + integrity sha512-K1d/hAyqeF2E6JEKgtumuUad65ajSlsycJaXOTL2KgzS1fSPVfScXa6dlUamR4TfGk4o8UUaiC9XqFKbBk15gA== dependencies: bytebuffer "^5.0.1" long "^4.0.0" @@ -971,6 +982,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.10.tgz#73c9480791e3ddeb4887a660fc93a7f59353ad45" integrity sha512-vwzFiiy8Rn6E0MtA13/Cxxgpan/N6UeNYR9oUu6kuJWxu6zCk98trcDp8CBhbtaeuq9SykCmXkFr2lWLoPcvLg== +"@types/w3c-web-usb@^1.0.6": + version "1.0.14" + resolved "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz#9b2c8e723045e7bf8018d47efe1b736815b23b38" + integrity sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA== + abortcontroller-polyfill@^1.1.9: version "1.7.5" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" @@ -1015,14 +1031,14 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@1.12.2: - version "1.12.2" - resolved "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" - integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== +axios@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz#0fcee91ef03d386514474904b27863b2c683bf4f" + integrity sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q== dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.4" - proxy-from-env "^1.1.0" + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^2.1.0" base-x@^3.0.8, base-x@^3.0.9: version "3.0.9" @@ -1469,10 +1485,10 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -follow-redirects@^1.15.6: - version "1.15.11" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== +follow-redirects@^1.15.11: + version "1.16.0" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" + integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== for-each@^0.3.3: version "0.3.3" @@ -1481,10 +1497,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" - integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -1992,6 +2008,11 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== +node-addon-api@^8.0.0: + version "8.7.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.7.0.tgz#f64f8413456ecbe900221305a3f883c37666473f" + integrity sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA== + node-gyp-build-optional-packages@5.0.6: version "5.0.6" resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz#2949f5cc7dace3ac470fa2ff1a37456907120a1d" @@ -2002,6 +2023,11 @@ node-gyp-build-optional-packages@5.0.7: resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== +node-gyp-build@^4.5.0: + version "4.8.4" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" @@ -2177,10 +2203,10 @@ protobufjs@^6.11.2: "@types/node" ">=13.7.0" long "^4.0.0" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxy-from-env@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" + integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== react-error-overlay@6.0.9: version "6.0.9" @@ -2385,6 +2411,15 @@ update-browserslist-db@^1.0.11: escalade "^3.1.1" picocolors "^1.0.0" +usb@^2.14.0: + version "2.17.0" + resolved "https://registry.npmjs.org/usb/-/usb-2.17.0.tgz#ab4662aee723f0ed7c2a70ee622ff8d59491f018" + integrity sha512-UuFgrlglgDn5ll6d5l7kl3nDb2Yx43qLUGcDq+7UNLZLtbNug0HZBb2Xodhgx2JZB1LqvU+dOGqLEeYUeZqsHg== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^8.0.0" + node-gyp-build "^4.5.0" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" diff --git a/packages/connect-examples/native-ios-example/web/package.json b/packages/connect-examples/native-ios-example/web/package.json index 2dcc8a770..f2c26f63c 100644 --- a/packages/connect-examples/native-ios-example/web/package.json +++ b/packages/connect-examples/native-ios-example/web/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@noble/hashes": "^1.3.1", - "@onekeyfe/hd-common-connect-sdk": "1.1.15", + "@onekeyfe/hd-common-connect-sdk": "1.1.26-alpha.8", "lodash": "^4.17.21", "ripple-keypairs": "^1.3.0" }, diff --git a/packages/connect-examples/native-ios-example/web/web_dist/dist.8bfae1d7.js b/packages/connect-examples/native-ios-example/web/web_dist/dist.8bfae1d7.js new file mode 100644 index 000000000..a4274a21b --- /dev/null +++ b/packages/connect-examples/native-ios-example/web/web_dist/dist.8bfae1d7.js @@ -0,0 +1 @@ +var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function t(e,t,r,n){Object.defineProperty(e,t,{get:r,set:n,enumerable:!0,configurable:!0})}var r=e.parcelRequire2d1f;r.register("6oS5p",function(e,t){var n=r("awmEs").Buffer,o=r("9Mq5w");Object.defineProperty(e.exports,"__esModule",{value:!0});var i=r("2kkR6"),s=r("b2G2V"),c=r("5xch2"),a=r("3FhS8");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(i),f=function(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}(s),p=u(c);function d(e,t,r,n){return new(r||(r=Promise))(function(o,i){function s(e){try{a(n.next(e))}catch(e){i(e)}}function c(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):((t=e.value)instanceof r?t:new r(function(e){e(t)})).then(s,c)}a((n=n.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;let{parseConfigure:h,buildEncodeBuffers:y,decodeProtocol:v,receiveOne:g,check:b}=p.default;function m(e){return`usb:${e.busNumber}:${e.deviceAddress}`}function w(e){return 63===e[0]?e.subarray(1):e}function E(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}e.exports.PACKET_SIZE=64,e.exports.default=class{constructor(){this.name="NodeUsbTransport",this.version="",this.configured=!1,this.isOutdated=!1,this.serialToBusId=new Map,this.openDevices=new Map,this.reconnectLocks=new Map,this.cancelled=!1}init(e,t){return this.Log=e,this.emitter=t,Promise.resolve("")}configure(e){let t=h(e);return this.configured=!0,this.messages=t,Promise.resolve()}listen(){}stop(){}post(e,t,r){return d(this,void 0,void 0,function*(){if(!this.messages)throw a.ERRORS.TypedError(a.HardwareErrorCode.TransportNotConfigured);let n=y(this.messages,t,r);yield this.sendAllChunksWithRetry(e,n)})}read(e){return d(this,void 0,void 0,function*(){let t=this.getOpenDevice(e),r=yield this.receiveData(e,t);if("string"!=typeof r)throw a.ERRORS.TypedError(a.HardwareErrorCode.NetworkError,"Returning data is not string.");if(!this.messages)throw a.ERRORS.TypedError(a.HardwareErrorCode.TransportNotConfigured);return g(this.messages,r)})}enumerate(){return d(this,void 0,void 0,function*(){let e=f.getDeviceList(),t=e.filter(e=>{let{idVendor:t,idProduct:r}=e.deviceDescriptor;return a.ONEKEY_WEBUSB_FILTER.some(e=>t===e.vendorId&&r===e.productId)}),r=new Map,n=[];for(let e of t){let t=m(e),o=yield function(e,t){let{iSerialNumber:r}=e.deviceDescriptor;if(!r)return Promise.resolve(m(e));let n=m(e);if(t){for(let[r,o]of t)if(o.device===e||m(o.device)===n)return Promise.resolve(r)}return new Promise(t=>{let o=!1,i=e=>{o||(o=!0,t(e))},s=setTimeout(()=>{try{e.close()}catch(e){}i(n)},5e3);try{e.open();try{e.getStringDescriptor(r,(t,r)=>{clearTimeout(s);try{e.close()}catch(e){}i(r||n)})}catch(t){clearTimeout(s);try{e.close()}catch(e){}i(n)}}catch(e){clearTimeout(s),i(n)}})}(e,this.openDevices);r.set(o,t),n.push({path:o,id:o,name:"OneKey",commType:"usb",debug:!1})}return this.serialToBusId=r,n})}acquire(e){var t,r,n;let o=null!==(t=e.path)&&void 0!==t?t:"";if(!o)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,"No device path provided");try{return this.openDevice(o),Promise.resolve(o)}catch(e){throw null===(r=this.Log)||void 0===r||r.debug("NodeUsbTransport acquire error: ",e),a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,null!==(n=e.message)&&void 0!==n?n:String(e))}}release(e,t){return d(this,void 0,void 0,function*(){let t=this.openDevices.get(e);if(t){try{yield new Promise(e=>{t.iface.release(()=>{try{t.device.close()}catch(e){}e()})})}catch(e){try{t.device.close()}catch(e){}}this.openDevices.delete(e)}})}call(e,t,r){var n,o;return d(this,void 0,void 0,function*(){if(this.cancelled=!1,!this.messages)throw a.ERRORS.TypedError(a.HardwareErrorCode.TransportNotConfigured);if(!this.openDevices.get(e))throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`Device not acquired: ${e}`);let{messages:i}=this;c.LogBlockCommand.has(t)?null===(n=this.Log)||void 0===n||n.debug("NodeUsbTransport call-"," name: ",t):null===(o=this.Log)||void 0===o||o.debug("NodeUsbTransport call-"," name: ",t," data: ",r);let s=y(i,t,r);yield this.sendAllChunksWithRetry(e,s);let u=yield this.receiveData(e,this.getOpenDevice(e));if("string"!=typeof u)throw a.ERRORS.TypedError(a.HardwareErrorCode.NetworkError,"Returning data is not string.");let l=g(i,u);return b.call(l)})}cancel(){var e;null===(e=this.Log)||void 0===e||e.debug("NodeUsbTransport cancel"),this.cancelled=!0}getOpenDevice(e){let t=this.openDevices.get(e);if(!t)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`Device not acquired: ${e}`);return t}getErrorMessage(e){if(!e)return"";if("string"==typeof e)return e;if("object"==typeof e&&"message"in e){let{message:t}=e;return"string"==typeof t?t:String(null!=t?t:"")}return String(e)}isRetryableError(e){let t=this.getErrorMessage(e).toLowerCase();return t.includes("libusb")||t.includes("transfer")||t.includes("disconnected")||t.includes("device not found")||t.includes("busy")||t.includes("pipe")||t.includes("empty usb transfer")||t.includes("network")||t.includes("timeout")||t.includes("interrupt")}reconnectForRetry(e,t,r,n){let o=this.reconnectLocks.get(e);if(o)return o;let i=d(this,void 0,void 0,function*(){var o,i;null===(o=this.Log)||void 0===o||o.debug(`[NodeUsbTransport] transfer${t} failed, retry ${r}/3: ${this.getErrorMessage(n)}`),yield a.wait(300*r);try{yield this.release(e)}catch(e){null===(i=this.Log)||void 0===i||i.debug("[NodeUsbTransport] release before retry error:",e)}yield this.enumerate(),this.openDevice(e);let s=this.openDevices.get(e);if(!s)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`Device not found after reconnect: ${e}`);return s}).finally(()=>{this.reconnectLocks.delete(e)});return this.reconnectLocks.set(e,i),i}sendAllChunksWithRetry(e,t){var r;return d(this,void 0,void 0,function*(){let o;for(let i=1;i<=3;i++){if(this.cancelled)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceInterruptedFromOutside,"Cancelled");try{for(let r of t){let t=new Uint8Array(64);t[0]=63,t.set(new Uint8Array(r),1),yield function(e,t){return new Promise((r,n)=>{e.transfer(t,e=>{if(e)return n(e);r()})})}(this.getOpenDevice(e).epOut,n.from(t))}return}catch(n){o=n;let t=i<3&&this.isRetryableError(n);if(!t)throw n;try{yield this.reconnectForRetry(e,"out",i,n)}catch(e){o=e,null===(r=this.Log)||void 0===r||r.debug(`[NodeUsbTransport] reconnect failed on send retry ${i}/3: ${this.getErrorMessage(e)}`);break}}}throw o})}transferInWithRetry(e,t,r){var n;return d(this,void 0,void 0,function*(){let o;let i=t;for(let t=1;t<=3;t++){if(this.cancelled)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceInterruptedFromOutside,"Cancelled");try{return yield function(e,t){return new Promise((r,n)=>{e.transfer(t,(e,t)=>e?n(e):t&&0!==t.length?void r(t):n(Error("Empty USB transfer")))})}(i.epIn,r)}catch(s){o=s;let r=t<3&&this.isRetryableError(s);if(!r)throw s;try{i=yield this.reconnectForRetry(e,"in",t,s)}catch(e){o=e,null===(n=this.Log)||void 0===n||n.debug(`[NodeUsbTransport] reconnect failed on retry ${t}/3: ${this.getErrorMessage(e)}`);break}}}throw o})}openDevice(e){var t;let r=this.openDevices.get(e);if(r)return;let n=null!==(t=this.serialToBusId.get(e))&&void 0!==t?t:e,i=f.getDeviceList(),s=i.find(e=>m(e)===n);if(!s)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,`USB device not found: ${e}`);s.open();try{s.timeout=3e4;let t=s.interface(0);if("linux"===o.platform)try{t.isKernelDriverActive()&&t.detachKernelDriver()}catch(e){}t.claim();let r=t.endpoints.find(e=>"in"===e.direction&&129===e.address),n=t.endpoints.find(e=>"out"===e.direction&&1===e.address);if(!r||!n)throw a.ERRORS.TypedError(a.HardwareErrorCode.DeviceNotFound,"USB endpoints not found (expected IN 0x81, OUT 0x01)");r.timeout=3e4,n.timeout=3e4,this.openDevices.set(e,{device:s,iface:t,epIn:r,epOut:n})}catch(e){try{s.close()}catch(e){}throw e}}receiveData(e,t){return d(this,void 0,void 0,function*(){let r=yield this.transferInWithRetry(e,t,64),o=w(r),{length:i,typeId:s,restBuffer:c}=v.decodeChunked(E(o)),a=Number(i)+6,u=new l.default(a);for(u.writeUint16(s),u.writeUint32(Number(i)),i&&u.append(c);u.offset=63?u.append(n):u.append(n.slice(0,a-u.offset))}u.reset();let f=u.toBuffer();return n.from(f).toString("hex")})}}}),r.register("b2G2V",function(e,t){var n=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);(!o||("get"in o?!t.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=e.exports&&e.exports.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.LibUSBException=e.exports.useUsbDkBackend=e.exports.getDeviceList=e.exports.Transfer=e.exports.Device=e.exports.webusb=e.exports.findBySerialNumber=e.exports.findByIds=e.exports.usb=void 0;var i=r("gOtyk"),s=r("7rWg5");e.exports.usb=s,e.exports.findByIds=(e,t)=>{let r=s.getDeviceList();return r.find(r=>r.deviceDescriptor.idVendor===e&&r.deviceDescriptor.idProduct===t)};let c=async e=>{let t=s.getDeviceList(),r=e=>!!e.interfaces;for(let n of t)try{r(n)||n.open();let t=(0,i.promisify)(n.getStringDescriptor).bind(n),o=await t(n.deviceDescriptor.iSerialNumber);if(o&&o.toString()===e)return n}catch{}finally{try{r(n)&&n.close()}catch{}}};e.exports.findBySerialNumber=c;let a=new(r("9eAap")).WebUSB;e.exports.webusb=a;var s=r("7rWg5");Object.defineProperty(e.exports,"Device",{enumerable:!0,get:function(){return s.Device}}),Object.defineProperty(e.exports,"Transfer",{enumerable:!0,get:function(){return s.Transfer}}),Object.defineProperty(e.exports,"getDeviceList",{enumerable:!0,get:function(){return s.getDeviceList}}),Object.defineProperty(e.exports,"useUsbDkBackend",{enumerable:!0,get:function(){return s.useUsbDkBackend}}),Object.defineProperty(e.exports,"LibUSBException",{enumerable:!0,get:function(){return s.LibUSBException}}),o(r("53X0T"),e.exports),o(r("3AQYC"),e.exports),o(r("bWwoS"),e.exports),o(r("hyq5n"),e.exports),o(r("9eAap"),e.exports),o(r("eyiS7"),e.exports)}),r.register("gOtyk",function(e,t){var n=r("9Mq5w"),o=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n=o)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),c=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),y(r)?n.showHidden=r:r&&e.exports._extend(n,r),m(n.showHidden)&&(n.showHidden=!1),m(n.depth)&&(n.depth=2),m(n.colors)&&(n.colors=!1),m(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=u),f(n,t,n.depth)}function u(e,t){var r=a.styles[t];return r?"\x1b["+a.colors[r][0]+"m"+e+"\x1b["+a.colors[r][1]+"m":e}function l(e,t){return e}function f(t,r,n){if(t.customInspect&&r&&_(r.inspect)&&r.inspect!==e.exports.inspect&&!(r.constructor&&r.constructor.prototype===r)){var o,i,s,c,a,u=r.inspect(n,t);return b(u)||(u=f(t,u,n)),u}var l=function(e,t){if(m(t))return e.stylize("undefined","undefined");if(b(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return g(t)?e.stylize(""+t,"number"):y(t)?e.stylize(""+t,"boolean"):v(t)?e.stylize("null","null"):void 0}(t,r);if(l)return l;var E=Object.keys(r),O=(c={},E.forEach(function(e,t){c[e]=!0}),c);if(t.showHidden&&(E=Object.getOwnPropertyNames(r)),A(r)&&(E.indexOf("message")>=0||E.indexOf("description")>=0))return p(r);if(0===E.length){if(_(r)){var x=r.name?": "+r.name:"";return t.stylize("[Function"+x+"]","special")}if(w(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(S(r))return t.stylize(Date.prototype.toString.call(r),"date");if(A(r))return p(r)}var I="",D=!1,P=["{","}"];return(h(r)&&(D=!0,P=["[","]"]),_(r)&&(I=" [Function"+(r.name?": "+r.name:"")+"]"),w(r)&&(I=" "+RegExp.prototype.toString.call(r)),S(r)&&(I=" "+Date.prototype.toUTCString.call(r)),A(r)&&(I=" "+p(r)),0!==E.length||D&&0!=r.length)?n<0?w(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),a=D?function(e,t,r,n,o){for(var i=[],s=0,c=t.length;s=0&&s++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?i[0]+(""===o?"":o+"\n ")+" "+a.join(",\n ")+" "+i[1]:i[0]+o+" "+a.join(", ")+" "+i[1]):P[0]+I+P[1]}function p(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,r,n,o,i){var s,c,a;if((a=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?c=a.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):a.set&&(c=e.stylize("[Setter]","special")),T(n,o)||(s="["+o+"]"),!c&&(0>e.seen.indexOf(a.value)?(c=v(r)?f(e,a.value,null):f(e,a.value,r-1)).indexOf("\n")>-1&&(c=i?c.split("\n").map(function(e){return" "+e}).join("\n").slice(2):"\n"+c.split("\n").map(function(e){return" "+e}).join("\n")):c=e.stylize("[Circular]","special")),m(s)){if(i&&o.match(/^\d+$/))return c;(s=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.slice(1,-1),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+c}function h(e){return Array.isArray(e)}function y(e){return"boolean"==typeof e}function v(e){return null===e}function g(e){return"number"==typeof e}function b(e){return"string"==typeof e}function m(e){return void 0===e}function w(e){return E(e)&&"[object RegExp]"===O(e)}function E(e){return"object"==typeof e&&null!==e}function S(e){return E(e)&&"[object Date]"===O(e)}function A(e){return E(e)&&("[object Error]"===O(e)||e instanceof Error)}function _(e){return"function"==typeof e}function O(e){return Object.prototype.toString.call(e)}function x(e){return e<10?"0"+e.toString(10):e.toString(10)}e.exports.debuglog=function(t){if(!s[t=t.toUpperCase()]){if(c.test(t)){var r=n.pid;s[t]=function(){var n=e.exports.format.apply(e.exports,arguments);console.error("%s %d: %s",t,r,n)}}else s[t]=function(){}}return s[t]},e.exports.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.exports.types=r("aBLNt"),e.exports.isArray=h,e.exports.isBoolean=y,e.exports.isNull=v,e.exports.isNullOrUndefined=function(e){return null==e},e.exports.isNumber=g,e.exports.isString=b,e.exports.isSymbol=function(e){return"symbol"==typeof e},e.exports.isUndefined=m,e.exports.isRegExp=w,e.exports.types.isRegExp=w,e.exports.isObject=E,e.exports.isDate=S,e.exports.types.isDate=S,e.exports.isError=A,e.exports.types.isNativeError=A,e.exports.isFunction=_,e.exports.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},e.exports.isBuffer=r("90FXD");var I=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports.log=function(){var t,r;console.log("%s - %s",(r=[x((t=new Date).getHours()),x(t.getMinutes()),x(t.getSeconds())].join(":"),[t.getDate(),I[t.getMonth()],r].join(" ")),e.exports.format.apply(e.exports,arguments))},e.exports.inherits=r("6cuMU"),e.exports._extend=function(e,t){if(!t||!E(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var D="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(e,t){if(!e){var r=Error("Promise was rejected with a falsy value");r.reason=e,e=r}return t(e)}e.exports.promisify=function(e){if("function"!=typeof e)throw TypeError('The "original" argument must be of type Function');if(D&&e[D]){var t=e[D];if("function"!=typeof t)throw TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,D,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise(function(e,n){t=e,r=n}),o=[],i=0;i=0&&"[object Array]"!==o(e)&&"[object Function]"===o(e.callee)},c=function(){return i(arguments)}();i.isLegacyArguments=s,e.exports=c?i:s}),r.register("62xi1",function(e,t){var n=r("lrNgj");e.exports=function(){return n()&&!!Symbol.toStringTag}}),r.register("lrNgj",function(e,t){e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t||"[object Symbol]"!==Object.prototype.toString.call(t)||"[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length||"function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t||!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}}),r.register("bh6VG",function(e,t){var n=r("k0uab"),o=r("ah9HS"),i=o(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?o(r):r}}),r.register("k0uab",function(e,t){var n,o=SyntaxError,i=Function,s=TypeError,c=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},a=Object.getOwnPropertyDescriptor;if(a)try{a({},"")}catch(e){a=null}var u=function(){throw new s},l=a?function(){try{return arguments.callee,u}catch(e){try{return a(arguments,"callee").get}catch(e){return u}}}():u,f=r("1tMgc")(),p=r("eFp8J")(),d=Object.getPrototypeOf||(p?function(e){return e.__proto__}:null),h={},y="undefined"!=typeof Uint8Array&&d?d(Uint8Array):n,v={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":f&&d?d([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":h,"%AsyncGenerator%":h,"%AsyncGeneratorFunction%":h,"%AsyncIteratorPrototype%":h,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":h,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f&&d?d(d([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f&&d?d(new Map()[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f&&d?d(new Set()[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f&&d?d(""[Symbol.iterator]()):n,"%Symbol%":f?Symbol:n,"%SyntaxError%":o,"%ThrowTypeError%":l,"%TypedArray%":y,"%TypeError%":s,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(d)try{null.error}catch(e){var g=d(d(e));v["%Error.prototype%"]=g}var b=function e(t){var r;if("%AsyncFunction%"===t)r=c("async function () {}");else if("%GeneratorFunction%"===t)r=c("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=c("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&d&&(r=d(o.prototype))}return v[t]=r,r},m={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},w=r("6gIY6"),E=r("4ebPq"),S=w.call(Function.call,Array.prototype.concat),A=w.call(Function.apply,Array.prototype.splice),_=w.call(Function.call,String.prototype.replace),O=w.call(Function.call,String.prototype.slice),x=w.call(Function.call,RegExp.prototype.exec),I=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,T=/\\(\\)?/g,D=function(e){var t=O(e,0,1),r=O(e,-1);if("%"===t&&"%"!==r)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var n=[];return _(e,I,function(e,t,r,o){n[n.length]=r?_(o,T,"$1"):t||e}),n},P=function(e,t){var r,n=e;if(E(m,n)&&(n="%"+(r=m[n])[0]+"%"),E(v,n)){var i=v[n];if(i===h&&(i=b(n)),void 0===i&&!t)throw new s("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new o("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new s("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new s('"allowMissing" argument must be a boolean');if(null===x(/^%?[^%]*%?$/,e))throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=D(e),n=r.length>0?r[0]:"",i=P("%"+n+"%",t),c=i.name,u=i.value,l=!1,f=i.alias;f&&(n=f[0],A(r,S([0,1],f)));for(var p=1,d=!0;p=r.length){var b=a(u,h);u=(d=!!b)&&"get"in b&&!("originalValue"in b.get)?b.get:u[h]}else d=E(u,h),u=u[h];d&&!l&&(v[c]=u)}}return u}}),r.register("1tMgc",function(e,t){var n="undefined"!=typeof Symbol&&Symbol,o=r("lrNgj");e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&o()}}),r.register("eFp8J",function(e,t){var r={foo:{}},n=Object;e.exports=function(){return({__proto__:r}).foo===r.foo&&!(({__proto__:null})instanceof n)}}),r.register("6gIY6",function(e,t){var n=r("5q2Au");e.exports=Function.prototype.bind||n}),r.register("5q2Au",function(e,t){var r=Array.prototype.slice,n=Object.prototype.toString;e.exports=function(e){var t,o=this;if("function"!=typeof o||"[object Function]"!==n.call(o))throw TypeError("Function.prototype.bind called on incompatible "+o);for(var i=r.call(arguments,1),s=Math.max(0,o.length-i.length),c=[],a=0;a-1?t:"Object"===t&&b(e)}return a?g(e):null}}),r.register("6Y9zB",function(e,t){var n=r("fSmyv"),o=Object.prototype.toString,i=Object.prototype.hasOwnProperty,s=function(e,t,r){for(var n=0,o=e.length;n=3&&(i=r),"[object Array]"===o.call(e)?s(e,t,i):"string"==typeof e?c(e,t,i):a(e,t,i)}}),r.register("fSmyv",function(e,t){var r,n,o=Function.prototype.toString,i="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof i&&"function"==typeof Object.defineProperty)try{r=Object.defineProperty({},"length",{get:function(){throw n}}),n={},i(function(){throw 42},null,r)}catch(e){e!==n&&(i=null)}else i=null;var s=/^\s*class\b/,c=function(e){try{var t=o.call(e);return s.test(t)}catch(e){return!1}},a=function(e){try{if(c(e))return!1;return o.call(e),!0}catch(e){return!1}},u=Object.prototype.toString,l="function"==typeof Symbol&&!!Symbol.toStringTag,f=!(0 in[,]),p=function(){return!1};if("object"==typeof document){var d=document.all;u.call(d)===u.call(document.all)&&(p=function(e){if((f||!e)&&(void 0===e||"object"==typeof e))try{var t=u.call(e);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==e("")}catch(e){}return!1})}e.exports=i?function(e){if(p(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;try{i(e,null,r)}catch(e){if(e!==n)return!1}return!c(e)&&a(e)}:function(e){if(p(e))return!0;if(!e||"function"!=typeof e&&"object"!=typeof e)return!1;if(l)return a(e);if(c(e))return!1;var t=u.call(e);return!!("[object Function]"===t||"[object GeneratorFunction]"===t||/^\[object HTML/.test(t))&&a(e)}}),r.register("bfDOD",function(t,r){var n=["BigInt64Array","BigUint64Array","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray"],o="undefined"==typeof globalThis?e:globalThis;t.exports=function(){for(var e=[],t=0;tnavigator&&navigator.usb?navigator.usb:new c;class s extends Error{constructor(e,t){super(e),this.name=t}}class c{constructor(e={}){this.options=e,this.emitter=new o.EventEmitter,this.knownDevices=new Map,this.authorisedDevices=new Set;let t=async e=>{let t=await this.getWebDevice(e);t&&this.isAuthorisedDevice(t)&&this.emitter.emit("connect",{type:"connect",device:t})},r=async e=>{if(this.knownDevices.has(e)){let t=this.knownDevices.get(e);t&&this.isAuthorisedDevice(t)&&this.emitter.emit("disconnect",{type:"disconnect",device:t})}};this.emitter.on("newListener",e=>{let o=this.emitter.listenerCount(e);0===o&&("connect"===e?n.addListener("attach",t):"disconnect"===e&&n.addListener("detach",r))}),this.emitter.on("removeListener",e=>{let o=this.emitter.listenerCount(e);0===o&&("connect"===e?n.removeListener("attach",t):"disconnect"===e&&n.removeListener("detach",r))})}set onconnect(e){this._onconnect&&(this.removeEventListener("connect",this._onconnect),this._onconnect=void 0),e&&(this._onconnect=e,this.addEventListener("connect",this._onconnect))}set ondisconnect(e){this._ondisconnect&&(this.removeEventListener("disconnect",this._ondisconnect),this._ondisconnect=void 0),e&&(this._ondisconnect=e,this.addEventListener("disconnect",this._ondisconnect))}addEventListener(e,t){this.emitter.addListener(e,t)}removeEventListener(e,t){this.emitter.removeListener(e,t)}dispatchEvent(e){return!1}async requestDevice(e){if(!e)throw TypeError("requestDevice error: 1 argument required, but only 0 present");if(e.constructor!==({}).constructor)throw TypeError("requestDevice error: parameter 1 (options) is not an object");if(!e.filters)throw TypeError("requestDevice error: required member filters is undefined");if(e.filters.constructor!==[].constructor)throw TypeError("requestDevice error: the provided value cannot be converted to a sequence");e.filters.forEach(e=>{if(e.protocolCode&&!e.subclassCode)throw TypeError("requestDevice error: subclass code is required");if(e.subclassCode&&!e.classCode)throw TypeError("requestDevice error: class code is required")});let t=await this.loadDevices(e.filters);if(0===(t=t.filter(t=>this.filterDevice(t,e.filters))).length)throw new s("Failed to execute 'requestDevice' on 'USB': No device selected.","NotFoundError");try{let e=this.options.devicesFound?await this.options.devicesFound(t):t[0];if(!e)throw new s("Failed to execute 'requestDevice' on 'USB': No device selected.","NotFoundError");return this.authorisedDevices.add({vendorId:e.vendorId,productId:e.productId,classCode:e.deviceClass,subclassCode:e.deviceSubclass,protocolCode:e.deviceProtocol,serialNumber:e.serialNumber||void 0}),e}catch(e){throw new s("Failed to execute 'requestDevice' on 'USB': No device selected.","NotFoundError")}}async getDevices(){let e=this.options.allowAllDevices?void 0:this.options.allowedDevices,t=await this.loadDevices(e);return t.filter(e=>this.isAuthorisedDevice(e))}async loadDevices(e){let t=n.getDeviceList();t=this.quickFilter(t,e);let r=new Map;for(let e of t){let t=await this.getWebDevice(e);t&&r.set(e,t)}return this.knownDevices=r,[...this.knownDevices.values()]}async getWebDevice(e){if(!this.knownDevices.has(e)){this.options.deviceTimeout&&(e.timeout=this.options.deviceTimeout);try{let t=await i.WebUSBDevice.createInstance(e,this.options.autoDetachKernelDriver);this.knownDevices.set(e,t)}catch{}}return this.knownDevices.get(e)}quickFilter(e,t){return t&&t.length?e.filter(e=>t.some(t=>(!t.vendorId||t.vendorId===e.deviceDescriptor.idVendor)&&(!t.productId||t.productId===e.deviceDescriptor.idProduct))):e}filterDevice(e,t){return!t||!t.length||t.some(t=>{if(t.vendorId&&t.vendorId!==e.vendorId||t.productId&&t.productId!==e.productId)return!1;if(t.classCode){if(!e.configuration)return!1;let r=e.configuration.interfaces.some(e=>(!t.classCode||t.classCode===e.alternate.interfaceClass)&&(!t.subclassCode||t.subclassCode===e.alternate.interfaceSubclass)&&(!t.protocolCode||t.protocolCode===e.alternate.interfaceProtocol));if(r)return!0}return(!t.classCode||t.classCode===e.deviceClass)&&(!t.subclassCode||t.subclassCode===e.deviceSubclass)&&(!t.protocolCode||t.protocolCode===e.deviceProtocol)&&(!t.serialNumber||t.serialNumber===e.serialNumber)})}isAuthorisedDevice(e){return!!(this.options.allowAllDevices||this.options.allowedDevices&&this.filterDevice(e,this.options.allowedDevices))||[...this.authorisedDevices.values()].some(t=>t.vendorId===e.vendorId&&t.productId===e.productId&&t.classCode===e.deviceClass&&t.subclassCode===e.deviceSubclass&&t.protocolCode===e.deviceProtocol&&t.serialNumber===e.serialNumber)}}e.exports.WebUSB=c}),r.register("7rWg5",function(e,t){var n=r("k4yOc"),o=r("4WTH4"),i=r("hPn48");i.INIT_ERROR&&console.warn("Failed to initialize libusb."),Object.setPrototypeOf(i,n.EventEmitter.prototype),Object.defineProperty(i,"pollHotplug",{value:!1,writable:!0}),Object.defineProperty(i,"pollHotplugDelay",{value:500,writable:!0}),i.Device&&Object.getOwnPropertyNames(o.ExtendedDevice.prototype).forEach(e=>{Object.defineProperty(i.Device.prototype,e,Object.getOwnPropertyDescriptor(o.ExtendedDevice.prototype,e)||Object.create(null))});let s=new Set,c=()=>{let e=new Set(i.getDeviceList());for(let t of e)s.has(t)||i.emit("attach",t);for(let t of s)e.has(t)||i.emit("detach",t);s=e},a=!1,u=(e=!1)=>{if(e)a=!0;else{if(!a)return;c()}setTimeout(()=>u(),i.pollHotplugDelay)},l=()=>setTimeout(()=>c(),i.pollHotplugDelay),f=0,p=()=>{1!==(f=i.pollHotplug?0:i._supportedHotplugEvents())&&(s=new Set(i.getDeviceList())),f?(i._enableHotplugEvents(),2===f&&(i.on("attachIds",l),i.on("detachIds",l))):u(!0)},d=()=>{f?(i._disableHotplugEvents(),2===f&&(i.off("attachIds",l),i.off("detachIds",l))):a=!1};i.on("newListener",e=>{if("attach"!==e&&"detach"!==e)return;let t=i.listenerCount("attach")+i.listenerCount("detach");0===t&&p()}),i.on("removeListener",e=>{if("attach"!==e&&"detach"!==e)return;let t=i.listenerCount("attach")+i.listenerCount("detach");0===t&&d()}),e.exports=i}),r.register("k4yOc",function(e,t){var r,n="object"==typeof Reflect?Reflect:null,o=n&&"function"==typeof n.apply?n.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};r=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise(function(r,n){function o(r){e.removeListener(t,i),n(r)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",o),r([].slice.call(arguments))}v(e,t,i,{once:!0}),"error"!==t&&"function"==typeof e.on&&v(e,"error",o,{once:!0})})},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var c=10;function a(e){if("function"!=typeof e)throw TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function u(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function l(e,t,r,n){if(a(r),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),i=e._events),s=i[t]),void 0===s)s=i[t]=r,++e._eventsCount;else if("function"==typeof s?s=i[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(o=u(e))>0&&s.length>o&&!s.warned){s.warned=!0;var o,i,s,c=Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,console&&console.warn&&console.warn(c)}return e}function f(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=f.bind(n);return o.listener=r,n.wrapFn=o,o}function d(e,t,r){var n=e._events;if(void 0===n)return[];var o=n[t];return void 0===o?[]:"function"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=Array(e.length),r=0;r0&&(s=t[0]),s instanceof Error)throw s;var s,c=Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)o(a,this,t);else for(var u=a.length,l=y(a,u),r=0;r=0;i--)if(r[i]===t||r[i].listener===t){s=r[i].listener,o=i;break}if(o<0)return this;0===o?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return d(this,e,!0)},s.prototype.rawListeners=function(e){return d(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},s.prototype.listenerCount=h,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}}),r.register("4WTH4",function(e,t){var n=r("awmEs").Buffer,o=r("9Mq5w");Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.ExtendedDevice=void 0;var i=r("hPn48"),s=r("hyq5n"),c=r("53X0T");let a=e=>!!e&&e instanceof Uint8Array;e.exports.ExtendedDevice=class{constructor(){this._timeout=1e3}get timeout(){return this._timeout||1e3}set timeout(e){this._timeout=e}get configDescriptor(){try{return this.__getConfigDescriptor()}catch(t){let e=t.errno;if(e===i.LIBUSB_ERROR_NOT_FOUND||e===i.LIBUSB_ERROR_NO_DEVICE)return;throw t}}get allConfigDescriptors(){try{return this.__getAllConfigDescriptors()}catch(t){let e=t.errno;if(e===i.LIBUSB_ERROR_NOT_FOUND||e===i.LIBUSB_ERROR_NO_DEVICE)return[];throw t}}get parent(){return this.__getParent()}open(e=!0){if(this.__open(),this.interfaces=[],!1===e)return;let t=this.configDescriptor?this.configDescriptor.interfaces.length:0;for(let e=0;e{if(!e){this.interfaces=[];let e=this.configDescriptor?this.configDescriptor.interfaces.length:0;for(let t=0;t{u&&(l?u.call(this,e,t.slice(i.LIBUSB_CONTROL_SETUP_SIZE,i.LIBUSB_CONTROL_SETUP_SIZE+r)):u.call(this,e,r))});try{d.submit(p)}catch(e){u&&o.nextTick(()=>u.call(this,e,void 0))}return this}interface(e){if(!this.interfaces)throw Error("Device must be open before searching for interfaces");e=e||0;for(let t=0;t{if(e)return t(e);t(void 0,a(r)?r.toString("utf16le",2):void 0)})}getBosDescriptor(e){return this._bosDescriptor?e(void 0,this._bosDescriptor):this.deviceDescriptor.bcdUSB<513?e(void 0,void 0):void this.controlTransfer(i.LIBUSB_ENDPOINT_IN,i.LIBUSB_REQUEST_GET_DESCRIPTOR,i.LIBUSB_DT_BOS<<8,0,i.LIBUSB_DT_BOS_SIZE,(t,r)=>{if(t)return t.errno===i.LIBUSB_TRANSFER_STALL?e(void 0,void 0):e(t,void 0);if(!a(r))return e(void 0,void 0);let n=r.readUInt16LE(2);this.controlTransfer(i.LIBUSB_ENDPOINT_IN,i.LIBUSB_REQUEST_GET_DESCRIPTOR,i.LIBUSB_DT_BOS<<8,0,n,(t,r)=>{if(t)return t.errno===i.LIBUSB_TRANSFER_STALL?e(void 0,void 0):e(t,void 0);if(!a(r))return e(void 0,void 0);let n={bLength:r.readUInt8(0),bDescriptorType:r.readUInt8(1),wTotalLength:r.readUInt16LE(2),bNumDeviceCaps:r.readUInt8(4),capabilities:[]},o=i.LIBUSB_DT_BOS_SIZE;for(;o{if(r)return e(r,void 0);let o=n?n.capabilities.length:0;for(let e=0;e2){var a=n.lastIndexOf("/");if(a!==n.length-1){-1===a?(n="",o=0):o=(n=n.slice(0,a)).length-1-n.lastIndexOf("/"),i=c,s=0;continue}}else if(2===n.length||1===n.length){n="",o=0,i=c,s=0;continue}}t&&(n.length>0?n+="/..":n="..",o=2)}else n.length>0?n+="/"+e.slice(i+1,c):n=e.slice(i+1,c),o=c-i-1;i=c,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var s={resolve:function(){for(var e,t,r="",s=!1,c=arguments.length-1;c>=-1&&!s;c--)c>=0?t=arguments[c]:(void 0===e&&(e=n.cwd()),t=e),o(t),0!==t.length&&(r=t+"/"+r,s=47===t.charCodeAt(0));return(r=i(r,!s),s)?r.length>0?"/"+r:"/":r.length>0?r:"."},normalize:function(e){if(o(e),0===e.length)return".";var t=47===e.charCodeAt(0),r=47===e.charCodeAt(e.length-1);return(0!==(e=i(e,!t)).length||t||(e="."),e.length>0&&r&&(e+="/"),t)?"/"+e:e},isAbsolute:function(e){return o(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0==arguments.length)return".";for(var e,t=0;t0&&(void 0===e?e=r:e+="/"+r)}return void 0===e?".":s.normalize(e)},relative:function(e,t){if(o(e),o(t),e===t||(e=s.resolve(e))===(t=s.resolve(t)))return"";for(var r=1;ru){if(47===t.charCodeAt(c+f))return t.slice(c+f+1);if(0===f)return t.slice(c+f)}else i>u&&(47===e.charCodeAt(r+f)?l=f:0===f&&(l=0));break}var p=e.charCodeAt(r+f);if(p!==t.charCodeAt(c+f))break;47===p&&(l=f)}var d="";for(f=r+l+1;f<=n;++f)(f===n||47===e.charCodeAt(f))&&(0===d.length?d+="..":d+="/..");return d.length>0?d+t.slice(c+l):(c+=l,47===t.charCodeAt(c)&&++c,t.slice(c))},_makeLong:function(e){return e},dirname:function(e){if(o(e),0===e.length)return".";for(var t=e.charCodeAt(0),r=47===t,n=-1,i=!0,s=e.length-1;s>=1;--s)if(47===(t=e.charCodeAt(s))){if(!i){n=s;break}}else i=!1;return -1===n?r?"/":".":r&&1===n?"//":e.slice(0,n)},basename:function(e,t){if(void 0!==t&&"string"!=typeof t)throw TypeError('"ext" argument must be a string');o(e);var r,n=0,i=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";var c=t.length-1,a=-1;for(r=e.length-1;r>=0;--r){var u=e.charCodeAt(r);if(47===u){if(!s){n=r+1;break}}else -1===a&&(s=!1,a=r+1),c>=0&&(u===t.charCodeAt(c)?-1==--c&&(i=r):(c=-1,i=a))}return n===i?i=a:-1===i&&(i=e.length),e.slice(n,i)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!s){n=r+1;break}}else -1===i&&(s=!1,i=r+1);return -1===i?"":e.slice(n,i)},extname:function(e){o(e);for(var t=-1,r=0,n=-1,i=!0,s=0,c=e.length-1;c>=0;--c){var a=e.charCodeAt(c);if(47===a){if(!i){r=c+1;break}continue}-1===n&&(i=!1,n=c+1),46===a?-1===t?t=c:1!==s&&(s=1):-1!==t&&(s=-1)}return -1===t||-1===n||0===s||1===s&&t===n-1&&t===r+1?"":e.slice(t,n)},format:function(e){var t,r;if(null===e||"object"!=typeof e)throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return t=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||""),t?t===e.root?t+r:t+"/"+r:r},parse:function(e){o(e);var t,r={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return r;var n=e.charCodeAt(0),i=47===n;i?(r.root="/",t=1):t=0;for(var s=-1,c=0,a=-1,u=!0,l=e.length-1,f=0;l>=t;--l){if(47===(n=e.charCodeAt(l))){if(!u){c=l+1;break}continue}-1===a&&(u=!1,a=l+1),46===n?-1===s?s=l:1!==f&&(f=1):-1!==s&&(f=-1)}return -1===s||-1===a||0===f||1===f&&s===a-1&&s===c+1?-1!==a&&(0===c&&i?r.base=r.name=e.slice(1,a):r.base=r.name=e.slice(c,a)):(0===c&&i?(r.name=e.slice(1,s),r.base=e.slice(1,a)):(r.name=e.slice(c,s),r.base=e.slice(c,a)),r.ext=e.slice(s,a)),c>0?r.dir=e.slice(0,c-1):i&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,e.exports=s}),r.register("2pNh5",function(e,t){var r,n,o,i=e.exports={};function s(){throw Error("setTimeout has not been defined")}function c(){throw Error("clearTimeout has not been defined")}function a(e){if(r===setTimeout)return setTimeout(e,0);if((r===s||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:s}catch(e){r=s}try{n="function"==typeof clearTimeout?clearTimeout:c}catch(e){n=c}}();var u=[],l=!1,f=-1;function p(){l&&o&&(l=!1,o.length?u=o.concat(u):f=-1,u.length&&d())}function d(){if(!l){var e=a(p);l=!0;for(var t=u.length;t;){for(o=u,u=[];++f1)for(var r=1;rr.specificity?-1:1:0}}e.exports=v,v.resolve=v.path=function(e){e=i.resolve(e||".");try{var t=c(i.join(e,"package.json")).name.toUpperCase().replace(/-/g,"_");n.env[t+"_PREBUILD"]&&(e=n.env[t+"_PREBUILD"])}catch(e){}var r=b(i.join(e,"build/Release"),m);if(r)return r;var o=b(i.join(e,"build/Debug"),m);if(o)return o;var s=v(e);if(s)return s;var a=v(i.dirname(n.execPath));if(a)return a;throw Error("No native build was found for "+["platform="+p,"arch="+f,"runtime="+l,"abi="+u,"uv="+y,h?"armv="+h:"","libc="+d,"node="+n.versions.node,n.versions.electron?"electron="+n.versions.electron:"","function"==typeof __webpack_require__?"webpack=true":""].filter(Boolean).join(" ")+"\n loaded from: "+e+"\n");function v(e){var t=g(i.join(e,"prebuilds")).map(w).filter(E(p,f)).sort(S)[0];if(t){var r=i.join(e,"prebuilds",t.name),n=g(r).map(A).filter(_(l,u)).sort(O(l))[0];if(n)return i.join(r,n.file)}}},v.parseTags=A,v.matchTags=_,v.compareTags=O,v.parseTuple=w,v.matchTuple=E,v.compareTuples=S}),r.register("4AFFV",function(e,t){}),r.register("ikaqy",function(e,r){var n,o;t(e.exports,"arch",()=>n,e=>n=e),t(e.exports,"platform",()=>o,e=>o=e),n=function(){return"javascript"},o=function(){return"browser"}}),r.register("hyq5n",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Interface=void 0;var n=r("hPn48"),o=r("bWwoS"),i=r("gOtyk");e.exports.Interface=class{constructor(e,t){this.device=e,this.id=t,this.altSetting=0,this.refresh(),this.releaseAsync=(0,i.promisify)(this.release).bind(this),this.setAltSettingAsync=(0,i.promisify)(this.setAltSetting).bind(this)}refresh(){if(!this.device.configDescriptor)return;this.descriptor=this.device.configDescriptor.interfaces[this.id][this.altSetting],this.interfaceNumber=this.descriptor.bInterfaceNumber,this.endpoints=[];let e=this.descriptor.endpoints.length;for(let t=0;t{this.device.__releaseInterface(this.id,e=>{e||(this.altSetting=0,this.refresh()),t&&t.call(this,e)})};if(r&&0!==this.endpoints.length){let e=this.endpoints.length;this.endpoints.forEach(t=>{"in"===t.direction&&t.pollActive?(t.once("end",()=>{0==--e&&n()}),t.stopPoll()):0==--e&&n()})}else n()}isKernelDriverActive(){return this.device.__isKernelDriverActive(this.id)}detachKernelDriver(){return this.device.__detachKernelDriver(this.id)}attachKernelDriver(){return this.device.__attachKernelDriver(this.id)}setAltSetting(e,t){this.device.__setInterface(this.id,e,r=>{r||(this.altSetting=e,this.refresh()),t&&t.call(this,r)})}endpoint(e){return this.endpoints.find(t=>t.address===e)}}}),r.register("bWwoS",function(e,t){var n=r("awmEs").Buffer,o=r("9Mq5w");Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.OutEndpoint=e.exports.InEndpoint=e.exports.Endpoint=void 0;var i=r("k4yOc"),s=r("hPn48"),c=r("gOtyk");let a=e=>e&&e instanceof n;class u extends i.EventEmitter{constructor(e,t){super(),this.device=e,this.timeout=0,this.descriptor=t,this.address=t.bEndpointAddress,this.transferType=3&t.bmAttributes}clearHalt(e){return this.device.__clearHalt(this.address,e)}makeTransfer(e,t){return new s.Transfer(this.device,this.address,this.transferType,e,t)}}e.exports.Endpoint=u,e.exports.InEndpoint=class extends u{constructor(e,t){super(e,t),this.direction="in",this.pollTransfers=[],this.pollTransferSize=0,this.pollPending=0,this.pollActive=!1,this.transferAsync=(0,c.promisify)(this.transfer).bind(this)}transfer(e,t){let r=n.alloc(e);try{this.makeTransfer(this.timeout,(e,n,o)=>{t.call(this,e,r.slice(0,o))}).submit(r)}catch(e){o.nextTick(()=>t.call(this,e))}return this}startPoll(e,t,r){let o=(e,t,n,o)=>{if(e?e.errno!==s.LIBUSB_TRANSFER_CANCELLED&&this.pollActive&&(this.emit("error",e),this.stopPoll()):this.emit("data",n.slice(0,o)),this.pollActive)i(t);else if(this.pollPending--,0===this.pollPending&&(this.pollTransfers=[],this.pollActive=!1,this.emit("end"),r)){let t=(null==e?void 0:e.errno)===s.LIBUSB_TRANSFER_CANCELLED;r(t?void 0:e,n,o,t)}},i=e=>{try{e.submit(n.alloc(this.pollTransferSize),(t,r,n)=>{o(t,e,r,n)})}catch(e){this.emit("error",e),this.stopPoll()}};return this.pollTransfers=this.startPollTransfers(e,t,function(e,t,r){o(e,this,t,r)}),this.pollTransfers.forEach(i),this.pollPending=this.pollTransfers.length,this.pollTransfers}startPollTransfers(e=3,t=this.descriptor.wMaxPacketSize,r){if(this.pollActive)throw Error("Polling already active");this.pollTransferSize=t,this.pollActive=!0,this.pollPending=0;let n=[];for(let t=0;t{t&&t.call(this,e,n||0)};try{this.makeTransfer(this.timeout,r).submit(e)}catch(e){o.nextTick(()=>r(e))}return this}transferWithZLP(e,t){e.length%this.descriptor.wMaxPacketSize==0?(this.transfer(e),this.transfer(n.alloc(0),t)):this.transfer(e,t)}}}),r.register("53X0T",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Capability=void 0,e.exports.Capability=class{constructor(e,t){if(this.device=e,this.id=t,!e._bosDescriptor)throw Error("bosDescriptor not found");this.descriptor=e._bosDescriptor.capabilities[this.id],this.type=this.descriptor.bDevCapabilityType,this.data=this.descriptor.dev_capability_data}}}),r.register("eyiS7",function(e,t){var n=r("awmEs").Buffer;Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.WebUSBDevice=void 0;var o=r("7rWg5"),i=r("gOtyk"),s=r("ikaqy");class c{static async createInstance(e,t=!0){let r=new c(e,t);return await r.initialize(),r}constructor(e,t){this.device=e,this.autoDetachKernelDriver=t,this.manufacturerName=null,this.productName=null,this.serialNumber=null,this.configurations=[];let r=this.decodeVersion(e.deviceDescriptor.bcdUSB);this.usbVersionMajor=r.major,this.usbVersionMinor=r.minor,this.usbVersionSubminor=r.sub,this.deviceClass=e.deviceDescriptor.bDeviceClass,this.deviceSubclass=e.deviceDescriptor.bDeviceSubClass,this.deviceProtocol=e.deviceDescriptor.bDeviceProtocol,this.vendorId=e.deviceDescriptor.idVendor,this.productId=e.deviceDescriptor.idProduct;let n=this.decodeVersion(e.deviceDescriptor.bcdDevice);this.deviceVersionMajor=n.major,this.deviceVersionMinor=n.minor,this.deviceVersionSubminor=n.sub,this.controlTransferAsync=(0,i.promisify)(this.device.controlTransfer).bind(this.device),this.setConfigurationAsync=(0,i.promisify)(this.device.setConfiguration).bind(this.device),this.resetAsync=(0,i.promisify)(this.device.reset).bind(this.device),this.getStringDescriptorAsync=(0,i.promisify)(this.device.getStringDescriptor).bind(this.device)}get configuration(){if(!this.device.configDescriptor)return null;let e=this.device.configDescriptor.bConfigurationValue;return this.configurations.find(t=>t.configurationValue===e)||null}get opened(){return!!this.device.interfaces}async open(){try{if(this.opened)return;this.device.open(),"win32"!==(0,s.platform)()&&this.device.setAutoDetachKernelDriver(this.autoDetachKernelDriver)}catch(e){throw Error(`open error: ${e}`)}}async close(){try{if(!this.opened)return;try{if(this.configuration)for(let e of this.configuration.interfaces)await this._releaseInterface(e.interfaceNumber),this.configuration.interfaces[this.configuration.interfaces.indexOf(e)]={interfaceNumber:e.interfaceNumber,alternate:e.alternate,alternates:e.alternates,claimed:!1}}catch(e){}this.device.close()}catch(e){throw Error(`close error: ${e}`)}}async selectConfiguration(e){if(!this.opened||!this.device.configDescriptor)throw Error("selectConfiguration error: invalid state");if(this.device.configDescriptor.bConfigurationValue===e)return;let t=this.configurations.find(t=>t.configurationValue===e);if(!t)throw Error("selectConfiguration error: configuration not found");try{await this.setConfigurationAsync(e)}catch(e){throw Error(`selectConfiguration error: ${e}`)}}async claimInterface(e){if(!this.opened)throw Error("claimInterface error: invalid state");if(!this.configuration)throw Error("claimInterface error: interface not found");let t=this.configuration.interfaces.find(t=>t.interfaceNumber===e);if(!t)throw Error("claimInterface error: interface not found");if(!t.claimed)try{this.device.interface(e).claim(),this.configuration.interfaces[this.configuration.interfaces.indexOf(t)]={interfaceNumber:e,alternate:t.alternate,alternates:t.alternates,claimed:!0}}catch(e){throw Error(`claimInterface error: ${e}`)}}async releaseInterface(e){if(await this._releaseInterface(e),this.configuration){let t=this.configuration.interfaces.find(t=>t.interfaceNumber===e);t&&(this.configuration.interfaces[this.configuration.interfaces.indexOf(t)]={interfaceNumber:e,alternate:t.alternate,alternates:t.alternates,claimed:!1})}}async selectAlternateInterface(e,t){if(!this.opened)throw Error("selectAlternateInterface error: invalid state");if(!this.configuration)throw Error("selectAlternateInterface error: interface not found");let r=this.configuration.interfaces.find(t=>t.interfaceNumber===e);if(!r)throw Error("selectAlternateInterface error: interface not found");if(!r.claimed)throw Error("selectAlternateInterface error: invalid state");try{let r=this.device.interface(e);await r.setAltSettingAsync(t)}catch(e){throw Error(`selectAlternateInterface error: ${e}`)}}async controlTransferIn(e,t){try{this.checkDeviceOpen();let r=this.controlTransferParamsToType(e,o.LIBUSB_ENDPOINT_IN),n=await this.controlTransferAsync(r,e.request,e.value,e.index,t);return{data:n?new DataView(new Uint8Array(n).buffer):void 0,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{status:"stall"};if(e.errno===o.LIBUSB_TRANSFER_OVERFLOW)return{status:"babble"};throw Error(`controlTransferIn error: ${e}`)}}async controlTransferOut(e,t){try{this.checkDeviceOpen();let r=this.controlTransferParamsToType(e,o.LIBUSB_ENDPOINT_OUT),i=t?n.from(t):n.alloc(0),s=await this.controlTransferAsync(r,e.request,e.value,e.index,i);return{bytesWritten:s,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{bytesWritten:0,status:"stall"};throw Error(`controlTransferOut error: ${e}`)}}async clearHalt(e,t){try{let r=t|("in"===e?o.LIBUSB_ENDPOINT_IN:o.LIBUSB_ENDPOINT_OUT);await this.controlTransferAsync(o.LIBUSB_RECIPIENT_ENDPOINT,1,0,r,n.from(new Uint8Array))}catch(e){throw Error(`clearHalt error: ${e}`)}}async transferIn(e,t){try{this.checkDeviceOpen();let r=this.getEndpoint(e|o.LIBUSB_ENDPOINT_IN),n=await r.transferAsync(t);return{data:n?new DataView(new Uint8Array(n).buffer):void 0,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{status:"stall"};if(e.errno===o.LIBUSB_TRANSFER_OVERFLOW)return{status:"babble"};throw Error(`transferIn error: ${e}`)}}async transferOut(e,t){try{this.checkDeviceOpen();let r=this.getEndpoint(e|o.LIBUSB_ENDPOINT_OUT),i=n.from(t),s=await r.transferAsync(i);return{bytesWritten:s,status:"ok"}}catch(e){if(e.errno===o.LIBUSB_TRANSFER_STALL)return{bytesWritten:0,status:"stall"};throw Error(`transferOut error: ${e}`)}}async reset(){try{await this.resetAsync()}catch(e){throw Error(`reset error: ${e}`)}}async isochronousTransferIn(e,t){throw Error("isochronousTransferIn error: method not implemented")}async isochronousTransferOut(e,t,r){throw Error("isochronousTransferOut error: method not implemented")}async forget(){throw Error("forget error: method not implemented")}async initialize(){try{this.opened||(this.device.open(),255===this.deviceClass&&"darwin"===(0,s.platform)()&&await this.setConfigurationAsync(1)),this.manufacturerName=await this.getStringDescriptor(this.device.deviceDescriptor.iManufacturer),this.productName=await this.getStringDescriptor(this.device.deviceDescriptor.iProduct),this.serialNumber=await this.getStringDescriptor(this.device.deviceDescriptor.iSerialNumber),this.configurations=await this.getConfigurations()}catch(e){throw Error(`initialize error: ${e}`)}finally{this.opened&&this.device.close()}}decodeVersion(e){let t=`0000${e.toString(16)}`.slice(-4);return{major:parseInt(t.substr(0,2),void 0),minor:parseInt(t.substr(2,1),void 0),sub:parseInt(t.substr(3,1),void 0)}}async getStringDescriptor(e){try{let t=await this.getStringDescriptorAsync(e);return t?t.toString():""}catch(e){return""}}async getConfigurations(){let e=[];for(let t of this.device.allConfigDescriptors){let r=[];for(let e of t.interfaces){let t=[];for(let r of e){let e=[];for(let t of r.endpoints)e.push({endpointNumber:127&t.bEndpointAddress,direction:t.bEndpointAddress&o.LIBUSB_ENDPOINT_IN?"in":"out",type:(3&t.bmAttributes)===o.LIBUSB_TRANSFER_TYPE_BULK?"bulk":(3&t.bmAttributes)===o.LIBUSB_TRANSFER_TYPE_INTERRUPT?"interrupt":"isochronous",packetSize:t.wMaxPacketSize});t.push({alternateSetting:r.bAlternateSetting,interfaceClass:r.bInterfaceClass,interfaceSubclass:r.bInterfaceSubClass,interfaceProtocol:r.bInterfaceProtocol,interfaceName:await this.getStringDescriptor(r.iInterface),endpoints:e})}let n=e[0].bInterfaceNumber,i=t.find(e=>e.alternateSetting===this.device.interface(n).altSetting);i&&r.push({interfaceNumber:n,alternate:i,alternates:t,claimed:!1})}e.push({configurationValue:t.bConfigurationValue,configurationName:await this.getStringDescriptor(t.iConfiguration),interfaces:r})}return e}getEndpoint(e){if(this.device.interfaces)for(let t of this.device.interfaces){let r=t.endpoint(e);if(r)return r}}controlTransferParamsToType(e,t){let r="device"===e.recipient?o.LIBUSB_RECIPIENT_DEVICE:"interface"===e.recipient?o.LIBUSB_RECIPIENT_INTERFACE:"endpoint"===e.recipient?o.LIBUSB_RECIPIENT_ENDPOINT:o.LIBUSB_RECIPIENT_OTHER,n="standard"===e.requestType?o.LIBUSB_REQUEST_TYPE_STANDARD:"class"===e.requestType?o.LIBUSB_REQUEST_TYPE_CLASS:o.LIBUSB_REQUEST_TYPE_VENDOR;return r|n|t}async _releaseInterface(e){if(!this.opened)throw Error("releaseInterface error: invalid state");if(!this.configuration)throw Error("releaseInterface error: interface not found");let t=this.configuration.interfaces.find(t=>t.interfaceNumber===e);if(!t)throw Error("releaseInterface error: interface not found");if(t.claimed)try{let t=this.device.interface(e);await t.releaseAsync()}catch(e){throw Error(`releaseInterface error: ${e}`)}}checkDeviceOpen(){if(!this.opened)throw Error("The device must be opened first")}}e.exports.WebUSBDevice=c}),r.register("3AQYC",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/packages/connect-examples/native-ios-example/web/web_dist/index.50d43151.js b/packages/connect-examples/native-ios-example/web/web_dist/index.50d43151.js new file mode 100644 index 000000000..bd19b880c --- /dev/null +++ b/packages/connect-examples/native-ios-example/web/web_dist/index.50d43151.js @@ -0,0 +1,8 @@ +let $ce1f303d0aa8ec51$var$postMessage$1,$ce1f303d0aa8ec51$var$_core,$ce1f303d0aa8ec51$var$_deviceList,$ce1f303d0aa8ec51$var$_connector,$d70b7d984fd77812$var$bridge,$d70b7d984fd77812$var$runPromise;function $parcel$export(r,i,n,s){Object.defineProperty(r,i,{get:n,set:s,enumerable:!0,configurable:!0})}var r,i,n,s,$ce1f303d0aa8ec51$var$ReflectOwnKeys,$ce1f303d0aa8ec51$var$_a$1,$ce1f303d0aa8ec51$var$_a,$ce1f303d0aa8ec51$var$Networks,$ce1f303d0aa8ec51$var$SignatureType,$37578c5600331006$var$ReflectOwnKeys,$37578c5600331006$var$_core,$parcel$global="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};function $parcel$interopDefault(r){return r&&r.__esModule?r.default:r}function $parcel$defineInteropFlag(r){Object.defineProperty(r,"__esModule",{value:!0,configurable:!0})}var $parcel$modules={},$parcel$inits={},parcelRequire=$parcel$global.parcelRequire2d1f;null==parcelRequire&&((parcelRequire=function(r){if(r in $parcel$modules)return $parcel$modules[r].exports;if(r in $parcel$inits){var i=$parcel$inits[r];delete $parcel$inits[r];var n={id:r,exports:{}};return $parcel$modules[r]=n,i.call(n.exports,n,n.exports),n.exports}var s=Error("Cannot find module '"+r+"'");throw s.code="MODULE_NOT_FOUND",s}).register=function(r,i){$parcel$inits[r]=i},$parcel$global.parcelRequire2d1f=parcelRequire),parcelRequire.register("awmEs",function(r,i){$parcel$export(r.exports,"Buffer",()=>n,r=>n=r),$parcel$export(r.exports,"INSPECT_MAX_BYTES",()=>s,r=>s=r);var n,s,a=parcelRequire("cK8LV"),o=parcelRequire("7y6mg");let d="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;n=c,s=50;let f=2147483647;function l(){try{let r=new Uint8Array(1),i={foo:function(){return 42}};return Object.setPrototypeOf(i,Uint8Array.prototype),Object.setPrototypeOf(r,i),42===r.foo()}catch(r){return!1}}function u(r){if(r>f)throw RangeError('The value "'+r+'" is invalid for option "size"');let i=new Uint8Array(r);return Object.setPrototypeOf(i,c.prototype),i}function c(r,i,n){if("number"==typeof r){if("string"==typeof i)throw TypeError('The "string" argument must be of type string. Received type number');return m(r)}return p(r,i,n)}function p(r,i,n){if("string"==typeof r)return v(r,i);if(ArrayBuffer.isView(r))return b(r);if(null==r)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);if(ep(r,ArrayBuffer)||r&&ep(r.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(ep(r,SharedArrayBuffer)||r&&ep(r.buffer,SharedArrayBuffer)))return T(r,i,n);if("number"==typeof r)throw TypeError('The "value" argument must not be of type number. Received type number');let s=r.valueOf&&r.valueOf();if(null!=s&&s!==r)return c.from(s,i,n);let a=E(r);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof r[Symbol.toPrimitive])return c.from(r[Symbol.toPrimitive]("string"),i,n);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r)}function h(r){if("number"!=typeof r)throw TypeError('"size" argument must be of type number');if(r<0)throw RangeError('The value "'+r+'" is invalid for option "size"')}function g(r,i,n){return(h(r),r<=0)?u(r):void 0!==i?"string"==typeof n?u(r).fill(i,n):u(r).fill(i):u(r)}function m(r){return h(r),u(r<0?0:0|w(r))}function v(r,i){if(("string"!=typeof i||""===i)&&(i="utf8"),!c.isEncoding(i))throw TypeError("Unknown encoding: "+i);let n=0|S(r,i),s=u(n),a=s.write(r,i);return a!==n&&(s=s.slice(0,a)),s}function _(r){let i=r.length<0?0:0|w(r.length),n=u(i);for(let s=0;s=f)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+f.toString(16)+" bytes");return 0|r}function S(r,i){if(c.isBuffer(r))return r.length;if(ArrayBuffer.isView(r)||ep(r,ArrayBuffer))return r.byteLength;if("string"!=typeof r)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof r);let n=r.length,s=arguments.length>2&&!0===arguments[2];if(!s&&0===n)return 0;let a=!1;for(;;)switch(i){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return ed(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return eu(r).length;default:if(a)return s?-1:ed(r).length;i=(""+i).toLowerCase(),a=!0}}function I(r,i,n){let s=!1;if((void 0===i||i<0)&&(i=0),i>this.length||((void 0===n||n>this.length)&&(n=this.length),n<=0||(n>>>=0)<=(i>>>=0)))return"";for(r||(r="utf8");;)switch(r){case"hex":return z(this,i,n);case"utf8":case"utf-8":return B(this,i,n);case"ascii":return U(this,i,n);case"latin1":case"binary":return H(this,i,n);case"base64":return q(this,i,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return G(this,i,n);default:if(s)throw TypeError("Unknown encoding: "+r);r=(r+"").toLowerCase(),s=!0}}function O(r,i,n){let s=r[i];r[i]=r[n],r[n]=s}function C(r,i,n,s,a){if(0===r.length)return -1;if("string"==typeof n?(s=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),eh(n=+n)&&(n=a?0:r.length-1),n<0&&(n=r.length+n),n>=r.length){if(a)return -1;n=r.length-1}else if(n<0){if(!a)return -1;n=0}if("string"==typeof i&&(i=c.from(i,s)),c.isBuffer(i))return 0===i.length?-1:A(r,i,n,s,a);if("number"==typeof i)return(i&=255,"function"==typeof Uint8Array.prototype.indexOf)?a?Uint8Array.prototype.indexOf.call(r,i,n):Uint8Array.prototype.lastIndexOf.call(r,i,n):A(r,[i],n,s,a);throw TypeError("val must be string, number or Buffer")}function A(r,i,n,s,a){let o,d=1,f=r.length,l=i.length;if(void 0!==s&&("ucs2"===(s=String(s).toLowerCase())||"ucs-2"===s||"utf16le"===s||"utf-16le"===s)){if(r.length<2||i.length<2)return -1;d=2,f/=2,l/=2,n/=2}function u(r,i){return 1===d?r[i]:r.readUInt16BE(i*d)}if(a){let s=-1;for(o=n;of&&(n=f-l),o=n;o>=0;o--){let n=!0;for(let s=0;so&&(s=o):s=o;let d=i.length;for(s>d/2&&(s=d/2),a=0;a239?4:i>223?3:i>191?2:1;if(a+d<=n){let n,s,f,l;switch(d){case 1:i<128&&(o=i);break;case 2:(192&(n=r[a+1]))==128&&(l=(31&i)<<6|63&n)>127&&(o=l);break;case 3:n=r[a+1],s=r[a+2],(192&n)==128&&(192&s)==128&&(l=(15&i)<<12|(63&n)<<6|63&s)>2047&&(l<55296||l>57343)&&(o=l);break;case 4:n=r[a+1],s=r[a+2],f=r[a+3],(192&n)==128&&(192&s)==128&&(192&f)==128&&(l=(15&i)<<18|(63&n)<<12|(63&s)<<6|63&f)>65535&&l<1114112&&(o=l)}}null===o?(o=65533,d=1):o>65535&&(o-=65536,s.push(o>>>10&1023|55296),o=56320|1023&o),s.push(o),a+=d}return F(s)}c.TYPED_ARRAY_SUPPORT=l(),c.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}}),c.poolSize=8192,c.from=function(r,i,n){return p(r,i,n)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array),c.alloc=function(r,i,n){return g(r,i,n)},c.allocUnsafe=function(r){return m(r)},c.allocUnsafeSlow=function(r){return m(r)},c.isBuffer=function(r){return null!=r&&!0===r._isBuffer&&r!==c.prototype},c.compare=function(r,i){if(ep(r,Uint8Array)&&(r=c.from(r,r.offset,r.byteLength)),ep(i,Uint8Array)&&(i=c.from(i,i.offset,i.byteLength)),!c.isBuffer(r)||!c.isBuffer(i))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(r===i)return 0;let n=r.length,s=i.length;for(let a=0,o=Math.min(n,s);as.length?(c.isBuffer(i)||(i=c.from(i)),i.copy(s,a)):Uint8Array.prototype.set.call(s,i,a);else if(c.isBuffer(i))i.copy(s,a);else throw TypeError('"list" argument must be an Array of Buffers');a+=i.length}return s},c.byteLength=S,c.prototype._isBuffer=!0,c.prototype.swap16=function(){let r=this.length;if(r%2!=0)throw RangeError("Buffer size must be a multiple of 16-bits");for(let i=0;ii&&(r+=" ... "),""},d&&(c.prototype[d]=c.prototype.inspect),c.prototype.compare=function(r,i,n,s,a){if(ep(r,Uint8Array)&&(r=c.from(r,r.offset,r.byteLength)),!c.isBuffer(r))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof r);if(void 0===i&&(i=0),void 0===n&&(n=r?r.length:0),void 0===s&&(s=0),void 0===a&&(a=this.length),i<0||n>r.length||s<0||a>this.length)throw RangeError("out of range index");if(s>=a&&i>=n)return 0;if(s>=a)return -1;if(i>=n)return 1;if(i>>>=0,n>>>=0,s>>>=0,a>>>=0,this===r)return 0;let o=a-s,d=n-i,f=Math.min(o,d),l=this.slice(s,a),u=r.slice(i,n);for(let r=0;r>>=0,isFinite(n)?(n>>>=0,void 0===s&&(s="utf8")):(s=n,n=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let a=this.length-i;if((void 0===n||n>a)&&(n=a),r.length>0&&(n<0||i<0)||i>this.length)throw RangeError("Attempt to write outside buffer bounds");s||(s="utf8");let o=!1;for(;;)switch(s){case"hex":return k(this,r,i,n);case"utf8":case"utf-8":return M(this,r,i,n);case"ascii":case"latin1":case"binary":return D(this,r,i,n);case"base64":return P(this,r,i,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,r,i,n);default:if(o)throw TypeError("Unknown encoding: "+s);s=(""+s).toLowerCase(),o=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};let L=4096;function F(r){let i=r.length;if(i<=L)return String.fromCharCode.apply(String,r);let n="",s=0;for(;ss)&&(n=s);let a="";for(let s=i;sn)throw RangeError("Trying to access beyond buffer length")}function V(r,i,n,s,a,o){if(!c.isBuffer(r))throw TypeError('"buffer" argument must be a Buffer instance');if(i>a||ir.length)throw RangeError("Index out of range")}function W(r,i,n,s,a){ei(i,s,a,r,n,7);let o=Number(i&BigInt(4294967295));r[n++]=o,o>>=8,r[n++]=o,o>>=8,r[n++]=o,o>>=8,r[n++]=o;let d=Number(i>>BigInt(32)&BigInt(4294967295));return r[n++]=d,d>>=8,r[n++]=d,d>>=8,r[n++]=d,d>>=8,r[n++]=d,n}function $(r,i,n,s,a){ei(i,s,a,r,n,7);let o=Number(i&BigInt(4294967295));r[n+7]=o,o>>=8,r[n+6]=o,o>>=8,r[n+5]=o,o>>=8,r[n+4]=o;let d=Number(i>>BigInt(32)&BigInt(4294967295));return r[n+3]=d,d>>=8,r[n+2]=d,d>>=8,r[n+1]=d,d>>=8,r[n]=d,n+8}function Y(r,i,n,s,a,o){if(n+s>r.length||n<0)throw RangeError("Index out of range")}function Z(r,i,n,s,a){return i=+i,n>>>=0,a||Y(r,i,n,4,34028234663852886e22,-34028234663852886e22),o.write(r,i,n,s,23,4),n+4}function X(r,i,n,s,a){return i=+i,n>>>=0,a||Y(r,i,n,8,17976931348623157e292,-17976931348623157e292),o.write(r,i,n,s,52,8),n+8}c.prototype.slice=function(r,i){let n=this.length;r=~~r,i=void 0===i?n:~~i,r<0?(r+=n)<0&&(r=0):r>n&&(r=n),i<0?(i+=n)<0&&(i=0):i>n&&(i=n),i>>=0,i>>>=0,n||K(r,i,this.length);let s=this[r],a=1,o=0;for(;++o>>=0,i>>>=0,n||K(r,i,this.length);let s=this[r+--i],a=1;for(;i>0&&(a*=256);)s+=this[r+--i]*a;return s},c.prototype.readUint8=c.prototype.readUInt8=function(r,i){return r>>>=0,i||K(r,1,this.length),this[r]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(r,i){return r>>>=0,i||K(r,2,this.length),this[r]|this[r+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(r,i){return r>>>=0,i||K(r,2,this.length),this[r]<<8|this[r+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(r,i){return r>>>=0,i||K(r,4,this.length),(this[r]|this[r+1]<<8|this[r+2]<<16)+16777216*this[r+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(r,i){return r>>>=0,i||K(r,4,this.length),16777216*this[r]+(this[r+1]<<16|this[r+2]<<8|this[r+3])},c.prototype.readBigUInt64LE=eg(function(r){en(r>>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=i+256*this[++r]+65536*this[++r]+16777216*this[++r],a=this[++r]+256*this[++r]+65536*this[++r]+16777216*n;return BigInt(s)+(BigInt(a)<>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=16777216*i+65536*this[++r]+256*this[++r]+this[++r],a=16777216*this[++r]+65536*this[++r]+256*this[++r]+n;return(BigInt(s)<>>=0,i>>>=0,n||K(r,i,this.length);let s=this[r],a=1,o=0;for(;++o=(a*=128)&&(s-=Math.pow(2,8*i)),s},c.prototype.readIntBE=function(r,i,n){r>>>=0,i>>>=0,n||K(r,i,this.length);let s=i,a=1,o=this[r+--s];for(;s>0&&(a*=256);)o+=this[r+--s]*a;return o>=(a*=128)&&(o-=Math.pow(2,8*i)),o},c.prototype.readInt8=function(r,i){return(r>>>=0,i||K(r,1,this.length),128&this[r])?-((255-this[r]+1)*1):this[r]},c.prototype.readInt16LE=function(r,i){r>>>=0,i||K(r,2,this.length);let n=this[r]|this[r+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(r,i){r>>>=0,i||K(r,2,this.length);let n=this[r+1]|this[r]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(r,i){return r>>>=0,i||K(r,4,this.length),this[r]|this[r+1]<<8|this[r+2]<<16|this[r+3]<<24},c.prototype.readInt32BE=function(r,i){return r>>>=0,i||K(r,4,this.length),this[r]<<24|this[r+1]<<16|this[r+2]<<8|this[r+3]},c.prototype.readBigInt64LE=eg(function(r){en(r>>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=this[r+4]+256*this[r+5]+65536*this[r+6]+(n<<24);return(BigInt(s)<>>=0,"offset");let i=this[r],n=this[r+7];(void 0===i||void 0===n)&&es(r,this.length-8);let s=(i<<24)+65536*this[++r]+256*this[++r]+this[++r];return(BigInt(s)<>>=0,i||K(r,4,this.length),o.read(this,r,!0,23,4)},c.prototype.readFloatBE=function(r,i){return r>>>=0,i||K(r,4,this.length),o.read(this,r,!1,23,4)},c.prototype.readDoubleLE=function(r,i){return r>>>=0,i||K(r,8,this.length),o.read(this,r,!0,52,8)},c.prototype.readDoubleBE=function(r,i){return r>>>=0,i||K(r,8,this.length),o.read(this,r,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(r,i,n,s){if(r=+r,i>>>=0,n>>>=0,!s){let s=Math.pow(2,8*n)-1;V(this,r,i,n,s,0)}let a=1,o=0;for(this[i]=255&r;++o>>=0,n>>>=0,!s){let s=Math.pow(2,8*n)-1;V(this,r,i,n,s,0)}let a=n-1,o=1;for(this[i+a]=255&r;--a>=0&&(o*=256);)this[i+a]=r/o&255;return i+n},c.prototype.writeUint8=c.prototype.writeUInt8=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,1,255,0),this[i]=255&r,i+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,2,65535,0),this[i]=255&r,this[i+1]=r>>>8,i+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,2,65535,0),this[i]=r>>>8,this[i+1]=255&r,i+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,4,4294967295,0),this[i+3]=r>>>24,this[i+2]=r>>>16,this[i+1]=r>>>8,this[i]=255&r,i+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,4,4294967295,0),this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r,i+4},c.prototype.writeBigUInt64LE=eg(function(r,i=0){return W(this,r,i,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeBigUInt64BE=eg(function(r,i=0){return $(this,r,i,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeIntLE=function(r,i,n,s){if(r=+r,i>>>=0,!s){let s=Math.pow(2,8*n-1);V(this,r,i,n,s-1,-s)}let a=0,o=1,d=0;for(this[i]=255&r;++a>0)-d&255;return i+n},c.prototype.writeIntBE=function(r,i,n,s){if(r=+r,i>>>=0,!s){let s=Math.pow(2,8*n-1);V(this,r,i,n,s-1,-s)}let a=n-1,o=1,d=0;for(this[i+a]=255&r;--a>=0&&(o*=256);)r<0&&0===d&&0!==this[i+a+1]&&(d=1),this[i+a]=(r/o>>0)-d&255;return i+n},c.prototype.writeInt8=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,1,127,-128),r<0&&(r=255+r+1),this[i]=255&r,i+1},c.prototype.writeInt16LE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,2,32767,-32768),this[i]=255&r,this[i+1]=r>>>8,i+2},c.prototype.writeInt16BE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,2,32767,-32768),this[i]=r>>>8,this[i+1]=255&r,i+2},c.prototype.writeInt32LE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,4,2147483647,-2147483648),this[i]=255&r,this[i+1]=r>>>8,this[i+2]=r>>>16,this[i+3]=r>>>24,i+4},c.prototype.writeInt32BE=function(r,i,n){return r=+r,i>>>=0,n||V(this,r,i,4,2147483647,-2147483648),r<0&&(r=4294967295+r+1),this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r,i+4},c.prototype.writeBigInt64LE=eg(function(r,i=0){return W(this,r,i,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),c.prototype.writeBigInt64BE=eg(function(r,i=0){return $(this,r,i,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),c.prototype.writeFloatLE=function(r,i,n){return Z(this,r,i,!0,n)},c.prototype.writeFloatBE=function(r,i,n){return Z(this,r,i,!1,n)},c.prototype.writeDoubleLE=function(r,i,n){return X(this,r,i,!0,n)},c.prototype.writeDoubleBE=function(r,i,n){return X(this,r,i,!1,n)},c.prototype.copy=function(r,i,n,s){if(!c.isBuffer(r))throw TypeError("argument should be a Buffer");if(n||(n=0),s||0===s||(s=this.length),i>=r.length&&(i=r.length),i||(i=0),s>0&&s=this.length)throw RangeError("Index out of range");if(s<0)throw RangeError("sourceEnd out of bounds");s>this.length&&(s=this.length),r.length-i>>=0,n=void 0===n?this.length:n>>>0,r||(r=0),"number"==typeof r)for(a=i;a=s+4;n-=3)i=`_${r.slice(n-3,n)}${i}`;return`${r.slice(0,n)}${i}`}function et(r,i,n){en(i,"offset"),(void 0===r[i]||void 0===r[i+n])&&es(i,r.length-(n+1))}function ei(r,i,n,s,a,o){if(r>n||r3?0===i||i===BigInt(0)?`>= 0${a} and < 2${a} ** ${(o+1)*8}${a}`:`>= -(2${a} ** ${(o+1)*8-1}${a}) and < 2 ** ${(o+1)*8-1}${a}`:`>= ${i}${a} and <= ${n}${a}`,new J.ERR_OUT_OF_RANGE("value",s,r)}et(s,a,o)}function en(r,i){if("number"!=typeof r)throw new J.ERR_INVALID_ARG_TYPE(i,"number",r)}function es(r,i,n){if(Math.floor(r)!==r)throw en(r,n),new J.ERR_OUT_OF_RANGE(n||"offset","an integer",r);if(i<0)throw new J.ERR_BUFFER_OUT_OF_BOUNDS;throw new J.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${i}`,r)}Q("ERR_BUFFER_OUT_OF_BOUNDS",function(r){return r?`${r} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Q("ERR_INVALID_ARG_TYPE",function(r,i){return`The "${r}" argument must be of type number. Received type ${typeof i}`},TypeError),Q("ERR_OUT_OF_RANGE",function(r,i,n){let s=`The value of "${r}" is out of range.`,a=n;return Number.isInteger(n)&&Math.abs(n)>4294967296?a=ee(String(n)):"bigint"==typeof n&&(a=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(a=ee(a)),a+="n"),s+=` It must be ${i}. Received ${a}`},RangeError);let ea=/[^+/0-9A-Za-z-_]/g;function eo(r){if((r=(r=r.split("=")[0]).trim().replace(ea,"")).length<2)return"";for(;r.length%4!=0;)r+="=";return r}function ed(r,i){let n;i=i||1/0;let s=r.length,a=null,o=[];for(let d=0;d55295&&n<57344){if(!a){if(n>56319||d+1===s){(i-=3)>-1&&o.push(239,191,189);continue}a=n;continue}if(n<56320){(i-=3)>-1&&o.push(239,191,189),a=n;continue}n=(a-55296<<10|n-56320)+65536}else a&&(i-=3)>-1&&o.push(239,191,189);if(a=null,n<128){if((i-=1)<0)break;o.push(n)}else if(n<2048){if((i-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((i-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else if(n<1114112){if((i-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}else throw Error("Invalid code point")}return o}function ef(r){let i=[];for(let n=0;n>8,a.push(n%256),a.push(s);return a}function eu(r){return a.toByteArray(eo(r))}function ec(r,i,n,s){let a;for(a=0;a=i.length)&&!(a>=r.length);++a)i[a+n]=r[a];return a}function ep(r,i){return r instanceof i||null!=r&&null!=r.constructor&&null!=r.constructor.name&&r.constructor.name===i.name}function eh(r){return r!=r}let ey=function(){let r="0123456789abcdef",i=Array(256);for(let n=0;n<16;++n){let s=16*n;for(let a=0;a<16;++a)i[s+a]=r[n]+r[a]}return i}();function eg(r){return"undefined"==typeof BigInt?em:r}function em(){throw Error("BigInt not supported")}}),parcelRequire.register("cK8LV",function(r,i){$parcel$export(r.exports,"toByteArray",()=>n,r=>n=r),$parcel$export(r.exports,"fromByteArray",()=>s,r=>s=r),n=h,s=v;for(var n,s,a=[],o=[],d="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=0,u=f.length;l0)throw Error("Invalid string. Length must be a multiple of 4");var n=r.indexOf("=");-1===n&&(n=i);var s=n===i?0:4-n%4;return[n,s]}function p(r,i,n){return(i+n)*3/4-n}function h(r){var i,n,s=c(r),a=s[0],f=s[1],l=new d(p(r,a,f)),u=0,h=f>0?a-4:a;for(n=0;n>16&255,l[u++]=i>>8&255,l[u++]=255&i;return 2===f&&(i=o[r.charCodeAt(n)]<<2|o[r.charCodeAt(n+1)]>>4,l[u++]=255&i),1===f&&(i=o[r.charCodeAt(n)]<<10|o[r.charCodeAt(n+1)]<<4|o[r.charCodeAt(n+2)]>>2,l[u++]=i>>8&255,l[u++]=255&i),l}function g(r){return a[r>>18&63]+a[r>>12&63]+a[r>>6&63]+a[63&r]}function m(r,i,n){for(var s=[],a=i;al?l:f+d));return 1===s?o.push(a[(i=r[n-1])>>2]+a[i<<4&63]+"=="):2===s&&o.push(a[(i=(r[n-2]<<8)+r[n-1])>>10]+a[i>>4&63]+a[i<<2&63]+"="),o.join("")}o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63}),parcelRequire.register("7y6mg",function(r,i){var n,s;$parcel$export(r.exports,"read",()=>n,r=>n=r),$parcel$export(r.exports,"write",()=>s,r=>s=r),n=function(r,i,n,s,a){var o,d,f=8*a-s-1,l=(1<>1,c=-7,p=n?a-1:0,h=n?-1:1,g=r[i+p];for(p+=h,o=g&(1<<-c)-1,g>>=-c,c+=f;c>0;o=256*o+r[i+p],p+=h,c-=8);for(d=o&(1<<-c)-1,o>>=-c,c+=s;c>0;d=256*d+r[i+p],p+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return d?NaN:(g?-1:1)*(1/0);d+=Math.pow(2,s),o-=u}return(g?-1:1)*d*Math.pow(2,o-s)},s=function(r,i,n,s,a,o){var d,f,l,u=8*o-a-1,c=(1<>1,h=23===a?5960464477539062e-23:0,g=s?0:o-1,m=s?1:-1,v=i<0||0===i&&1/i<0?1:0;for(isNaN(i=Math.abs(i))||i===1/0?(f=isNaN(i)?1:0,d=c):(d=Math.floor(Math.log(i)/Math.LN2),i*(l=Math.pow(2,-d))<1&&(d--,l*=2),d+p>=1?i+=h/l:i+=h*Math.pow(2,1-p),i*l>=2&&(d++,l/=2),d+p>=c?(f=0,d=c):d+p>=1?(f=(i*l-1)*Math.pow(2,a),d+=p):(f=i*Math.pow(2,p-1)*Math.pow(2,a),d=0));a>=8;r[n+g]=255&f,g+=m,f/=256,a-=8);for(d=d<0;r[n+g]=255&d,g+=m,d/=256,u-=8);r[n+g-m]|=128*v}}),parcelRequire.register("9kaCP",function(r,i){var n=parcelRequire("85PoE"),s=n.MAX_SAFE_COMPONENT_LENGTH,a=n.MAX_SAFE_BUILD_LENGTH,o=n.MAX_LENGTH,d=parcelRequire("aW7Y5");i=r.exports={};let f=i.re=[],l=i.safeRe=[],u=i.src=[],c=i.t={},p=0,h="[a-zA-Z0-9-]",g=[["\\s",1],["\\d",o],[h,a]],m=r=>{for(let[i,n]of g)r=r.split(`${i}*`).join(`${i}{0,${n}}`).split(`${i}+`).join(`${i}{1,${n}}`);return r},v=(r,i,n)=>{let s=m(i),a=p++;d(r,a,i),c[r]=a,u[a]=i,f[a]=new RegExp(i,n?"g":void 0),l[a]=new RegExp(s,n?"g":void 0)};v("NUMERICIDENTIFIER","0|[1-9]\\d*"),v("NUMERICIDENTIFIERLOOSE","\\d+"),v("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${h}*`),v("MAINVERSION",`(${u[c.NUMERICIDENTIFIER]})\\.(${u[c.NUMERICIDENTIFIER]})\\.(${u[c.NUMERICIDENTIFIER]})`),v("MAINVERSIONLOOSE",`(${u[c.NUMERICIDENTIFIERLOOSE]})\\.(${u[c.NUMERICIDENTIFIERLOOSE]})\\.(${u[c.NUMERICIDENTIFIERLOOSE]})`),v("PRERELEASEIDENTIFIER",`(?:${u[c.NUMERICIDENTIFIER]}|${u[c.NONNUMERICIDENTIFIER]})`),v("PRERELEASEIDENTIFIERLOOSE",`(?:${u[c.NUMERICIDENTIFIERLOOSE]}|${u[c.NONNUMERICIDENTIFIER]})`),v("PRERELEASE",`(?:-(${u[c.PRERELEASEIDENTIFIER]}(?:\\.${u[c.PRERELEASEIDENTIFIER]})*))`),v("PRERELEASELOOSE",`(?:-?(${u[c.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${u[c.PRERELEASEIDENTIFIERLOOSE]})*))`),v("BUILDIDENTIFIER",`${h}+`),v("BUILD",`(?:\\+(${u[c.BUILDIDENTIFIER]}(?:\\.${u[c.BUILDIDENTIFIER]})*))`),v("FULLPLAIN",`v?${u[c.MAINVERSION]}${u[c.PRERELEASE]}?${u[c.BUILD]}?`),v("FULL",`^${u[c.FULLPLAIN]}$`),v("LOOSEPLAIN",`[v=\\s]*${u[c.MAINVERSIONLOOSE]}${u[c.PRERELEASELOOSE]}?${u[c.BUILD]}?`),v("LOOSE",`^${u[c.LOOSEPLAIN]}$`),v("GTLT","((?:<|>)?=?)"),v("XRANGEIDENTIFIERLOOSE",`${u[c.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),v("XRANGEIDENTIFIER",`${u[c.NUMERICIDENTIFIER]}|x|X|\\*`),v("XRANGEPLAIN",`[v=\\s]*(${u[c.XRANGEIDENTIFIER]})(?:\\.(${u[c.XRANGEIDENTIFIER]})(?:\\.(${u[c.XRANGEIDENTIFIER]})(?:${u[c.PRERELEASE]})?${u[c.BUILD]}?)?)?`),v("XRANGEPLAINLOOSE",`[v=\\s]*(${u[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[c.XRANGEIDENTIFIERLOOSE]})(?:\\.(${u[c.XRANGEIDENTIFIERLOOSE]})(?:${u[c.PRERELEASELOOSE]})?${u[c.BUILD]}?)?)?`),v("XRANGE",`^${u[c.GTLT]}\\s*${u[c.XRANGEPLAIN]}$`),v("XRANGELOOSE",`^${u[c.GTLT]}\\s*${u[c.XRANGEPLAINLOOSE]}$`),v("COERCE",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?(?:$|[^\\d])`),v("COERCERTL",u[c.COERCE],!0),v("LONETILDE","(?:~>?)"),v("TILDETRIM",`(\\s*)${u[c.LONETILDE]}\\s+`,!0),i.tildeTrimReplace="$1~",v("TILDE",`^${u[c.LONETILDE]}${u[c.XRANGEPLAIN]}$`),v("TILDELOOSE",`^${u[c.LONETILDE]}${u[c.XRANGEPLAINLOOSE]}$`),v("LONECARET","(?:\\^)"),v("CARETTRIM",`(\\s*)${u[c.LONECARET]}\\s+`,!0),i.caretTrimReplace="$1^",v("CARET",`^${u[c.LONECARET]}${u[c.XRANGEPLAIN]}$`),v("CARETLOOSE",`^${u[c.LONECARET]}${u[c.XRANGEPLAINLOOSE]}$`),v("COMPARATORLOOSE",`^${u[c.GTLT]}\\s*(${u[c.LOOSEPLAIN]})$|^$`),v("COMPARATOR",`^${u[c.GTLT]}\\s*(${u[c.FULLPLAIN]})$|^$`),v("COMPARATORTRIM",`(\\s*)${u[c.GTLT]}\\s*(${u[c.LOOSEPLAIN]}|${u[c.XRANGEPLAIN]})`,!0),i.comparatorTrimReplace="$1$2$3",v("HYPHENRANGE",`^\\s*(${u[c.XRANGEPLAIN]})\\s+-\\s+(${u[c.XRANGEPLAIN]})\\s*$`),v("HYPHENRANGELOOSE",`^\\s*(${u[c.XRANGEPLAINLOOSE]})\\s+-\\s+(${u[c.XRANGEPLAINLOOSE]})\\s*$`),v("STAR","(<|>)?=?\\s*\\*"),v("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),v("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}),parcelRequire.register("85PoE",function(r,i){let n="2.0.0",s=256,a=Number.MAX_SAFE_INTEGER||9007199254740991,o=16,d=s-6,f=["major","premajor","minor","preminor","patch","prepatch","prerelease"];r.exports={MAX_LENGTH:s,MAX_SAFE_COMPONENT_LENGTH:o,MAX_SAFE_BUILD_LENGTH:d,MAX_SAFE_INTEGER:a,RELEASE_TYPES:f,SEMVER_SPEC_VERSION:n,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}),parcelRequire.register("aW7Y5",function(r,i){var n=parcelRequire("9Mq5w");let s=("object"==typeof n&&n.env,()=>{});r.exports=s}),parcelRequire.register("9Mq5w",function(r,i){var n,s,a,o=r.exports={};function d(){throw Error("setTimeout has not been defined")}function f(){throw Error("clearTimeout has not been defined")}function l(r){if(n===setTimeout)return setTimeout(r,0);if((n===d||!n)&&setTimeout)return n=setTimeout,setTimeout(r,0);try{return n(r,0)}catch(i){try{return n.call(null,r,0)}catch(i){return n.call(this,r,0)}}}function u(r){if(s===clearTimeout)return clearTimeout(r);if((s===f||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(r);try{return s(r)}catch(i){try{return s.call(null,r)}catch(i){return s.call(this,r)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:d}catch(r){n=d}try{s="function"==typeof clearTimeout?clearTimeout:f}catch(r){s=f}}();var c=[],p=!1,h=-1;function g(){p&&a&&(p=!1,a.length?c=a.concat(c):h=-1,c.length&&m())}function m(){if(!p){var r=l(g);p=!0;for(var i=c.length;i;){for(a=c,c=[];++h1)for(var n=1;nnew s("string"==typeof r?r:{errorCode:r,message:null!=i?i:"",params:n}),f=r=>r&&r.error instanceof s?{error:r.error.message,code:r.error.errorCode,params:r.error.params}:r&&r.error&&"AxiosError"===r.error.name?{error:r.error.message,code:a.BridgeNetworkError}:r&&r.error instanceof Error?{error:r.error.message,code:r.error.code}:r,l=r=>{for(let i of Object.values(a))if(o[i]===r)return d(i);return new s(r)},u=r=>{let i=String(r||"");return i.includes("LIBUSB_ERROR_ACCESS")?d(a.BridgeNeedsPermission,"LIBUSB_ERROR_ACCESS"):d(a.BridgeNetworkError,i)},c=({currentVersion:i,requireVersion:n,methodName:s,firmwareType:o})=>{if((null==s?void 0:s.startsWith("btc"))===!1&&o===r.exports.EFirmwareType.BitcoinOnly)return v(null!=s?s:"",o);let f=s?` for method '${s}'`:"";return d(a.NewFirmwareUnRelease,`Device firmware version is too low${f}, please update to the latest version`,{current:i,require:n,method:s})},p=({currentVersion:i,requireVersion:n,methodName:s,firmwareType:o})=>{if((null==s?void 0:s.startsWith("btc"))===!1&&o===r.exports.EFirmwareType.BitcoinOnly)return v(null!=s?s:"",o);let f=s?` for method '${s}'`:"";return d(a.CallMethodNeedUpgradeFirmware,`Device firmware version is too low${f}, please update to ${n}`,{current:i,require:n,method:s})},h=(r,i,n,s)=>{let o=n||[],f={firmware:"firmware",ble:"BLE firmware"},l=o.filter(r=>r in f),u=()=>{let r=[];return(null==s?void 0:s.firmware)&&r.push(`firmware version: ${s.firmware}`),(null==s?void 0:s.ble)&&r.push(`BLE version: ${s.ble}`),r.length>0?` (${r.join(", ")})`:""},c=()=>l.map(r=>f[r]).join(" and "),p=`Device ${c()} version is too low. ${u()}`;return d(a.NewFirmwareForceUpdate,p,{connectId:r,deviceId:i,versionTypes:n,currentVersions:s})},g=(r,i,n)=>{let s=n?` Method '${n}'`:"This method";return d(a.CallMethodDeprecated,`Device firmware version is too high. ${s} has been deprecated in ${i}`,{current:r,deprecated:i,method:n})},m=(r,i,n,s,o)=>{let f=`Defective firmware detected (Serial: ${r}, SE: ${i}). Please update immediately.`;return d(a.DefectiveFirmware,f,{serialNo:r,seVersion:i,deviceType:n,connectId:s,deviceId:o})},v=(r,i)=>d(a.DeviceNotSupportMethod,"Device not support this method",{firmwareType:i.toString(),method:r});var _=Object.freeze({__proto__:null,HardwareError:s,HardwareErrorCode:a,HardwareErrorCodeMessage:o,TypedError:d,serializeError:f,CreateErrorByMessage:l,CreateHardwareErrorByBridgeError:u,createNewFirmwareUnReleaseHardwareError:c,createNeedUpgradeFirmwareHardwareError:p,createNewFirmwareForceUpdateHardwareError:h,createDeprecatedHardwareError:g,createDefectiveFirmwareError:m,createDeviceNotSupportMethodError:v});let b=[{vendorId:4617,productId:21440},{vendorId:4617,productId:21441},{vendorId:4617,productId:20298},{vendorId:4617,productId:20299}],T=[a.DeviceInitializeFailed,a.DeviceInterruptedFromOutside,a.DeviceInterruptedFromUser,a.DeviceCheckPassphraseStateError,a.ResponseUnexpectTypeError,a.PinInvalid,a.PinCancelled,a.UnexpectPassphrase],E=[a.DeviceInitializeFailed,a.ResponseUnexpectTypeError];r.exports.EOneKeyBleMessageKeys=void 0,function(r){r.BLE_SELECT="$onekey-ble-select",r.BLE_SELECT_RESULT="$onekey-ble-select-result",r.BLE_STOP_SCAN="$onekey-ble-stop-scan",r.BLE_CANCEL_REQUEST="$onekey-ble-cancel-request",r.BLE_PRE_SELECT="$onekey-ble-pre-select",r.BLE_CLEAR_PRE_SELECT="$onekey-ble-clear-pre-select",r.BLE_PAIRING_REQUEST="$onekey-ble-pairing-request",r.BLE_PAIRING_RESPONSE="$onekey-ble-pairing-response",r.BLE_ENUMERATE="$onekey-ble-enumerate",r.BLE_ENUMERATE_RESULT="$onekey-ble-enumerate-result",r.BLE_DEVICE_DISCONNECTED="$onekey-ble-device-disconnected",r.BLE_AVAILABILITY_CHECK="$onekey-ble-availability-check",r.NOBLE_BLE_ENUMERATE="$onekey-noble-ble-enumerate",r.NOBLE_BLE_STOP_SCAN="$onekey-noble-ble-stop-scan",r.NOBLE_BLE_GET_DEVICE="$onekey-noble-ble-get-device",r.NOBLE_BLE_CONNECT="$onekey-noble-ble-connect",r.NOBLE_BLE_DISCONNECT="$onekey-noble-ble-disconnect",r.NOBLE_BLE_WRITE="$onekey-noble-ble-write",r.NOBLE_BLE_SUBSCRIBE="$onekey-noble-ble-subscribe",r.NOBLE_BLE_UNSUBSCRIBE="$onekey-noble-ble-unsubscribe",r.NOBLE_BLE_NOTIFICATION="$onekey-noble-ble-notification",r.NOBLE_BLE_CANCEL_PAIRING="$onekey-noble-ble-cancel-pairing"}(r.exports.EOneKeyBleMessageKeys||(r.exports.EOneKeyBleMessageKeys={}));let w="00000001-0000-1000-8000-00805f9b34fb",S="00000002-0000-1000-8000-00805f9b34fb",I="00000003-0000-1000-8000-00805f9b34fb",O=63,C=35,A=r=>{if(r.length<9)return!1;let[i,n,s]=r;return String.fromCharCode(i)===String.fromCharCode(O)&&String.fromCharCode(n)===String.fromCharCode(C)&&String.fromCharCode(s)===String.fromCharCode(C)},k=(r,i)=>{var n;if(null===(n=null==i?void 0:i.startsWith)||void 0===n?void 0:n.call(i,"MI"))return!0;let s=/(BixinKey\d{10})|(K\d{4})|(T\d{4})|(Touch\s\w{4})|(Pro\s\w{4})/i;return!!(r&&s.exec(r))};function M(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function D(r,i){let n,s=r=>{},a=r=>{},o=new Promise((i,o)=>M(this,void 0,void 0,function*(){if(s=i,a=o,"function"==typeof r)try{yield r()}catch(r){o(r)}"string"==typeof r&&(n=r)}));return{id:n,data:i,resolve:s,reject:a,promise:o}}"function"==typeof SuppressedError&&SuppressedError;let P=r=>new Promise(i=>{setTimeout(i,r)});r.exports.EDeviceType=void 0,function(r){r.Unknown="unknown",r.Classic="classic",r.Classic1s="classic1s",r.ClassicPure="classicpure",r.Mini="mini",r.Touch="touch",r.Pro="pro"}(r.exports.EDeviceType||(r.exports.EDeviceType={})),r.exports.CreateErrorByMessage=l,r.exports.CreateHardwareErrorByBridgeError=u,r.exports.ERRORS=_,r.exports.ERROR_CODES_REQUIRE_DISCONNECT=E,r.exports.ERROR_CODES_REQUIRE_RELEASE=T,r.exports.HardwareError=s,r.exports.HardwareErrorCode=a,r.exports.HardwareErrorCodeMessage=o,r.exports.ONEKEY_NOTIFY_CHARACTERISTIC_UUID=I,r.exports.ONEKEY_SERVICE_UUID=w,r.exports.ONEKEY_WEBUSB_FILTER=b,r.exports.ONEKEY_WRITE_CHARACTERISTIC_UUID=S,r.exports.TypedError=d,r.exports.createDefectiveFirmwareError=m,r.exports.createDeferred=D,r.exports.createDeprecatedHardwareError=g,r.exports.createDeviceNotSupportMethodError=v,r.exports.createNeedUpgradeFirmwareHardwareError=p,r.exports.createNewFirmwareForceUpdateHardwareError=h,r.exports.createNewFirmwareUnReleaseHardwareError=c,r.exports.isHeaderChunk=A,r.exports.isOnekeyDevice=k,r.exports.serializeError=f,r.exports.wait=P}),parcelRequire.register("7U5sq",function(r,i){(function(){var n,s="4.17.21",a=200,o="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",d="Expected a function",f="Invalid `variable` option passed into `_.template`",l="__lodash_hash_undefined__",u=500,c="__lodash_placeholder__",p=1,h=2,g=4,m=1,v=2,_=1,b=2,T=4,E=8,w=16,S=32,I=64,O=128,C=256,A=512,k=30,M="...",D=800,P=16,N=1,q=2,B=3,L=1/0,F=9007199254740991,U=17976931348623157e292,H=0/0,z=4294967295,G=4294967294,K=2147483647,V=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],W="[object Arguments]",$="[object Array]",Y="[object AsyncFunction]",Z="[object Boolean]",X="[object Date]",J="[object DOMException]",Q="[object Error]",ee="[object Function]",et="[object GeneratorFunction]",ei="[object Map]",en="[object Number]",es="[object Null]",ea="[object Object]",eo="[object Promise]",ed="[object Proxy]",ef="[object RegExp]",el="[object Set]",eu="[object String]",ec="[object Symbol]",ep="[object Undefined]",eh="[object WeakMap]",ey="[object WeakSet]",eg="[object ArrayBuffer]",em="[object DataView]",ev="[object Float32Array]",e_="[object Float64Array]",eb="[object Int8Array]",eT="[object Int16Array]",eE="[object Int32Array]",ew="[object Uint8Array]",eS="[object Uint8ClampedArray]",eR="[object Uint16Array]",eI="[object Uint32Array]",ex=/\b__p \+= '';/g,eO=/\b(__p \+=) '' \+/g,eC=/(__e\(.*?\)|\b__t\)) \+\n'';/g,eA=/&(?:amp|lt|gt|quot|#39);/g,ek=/[&<>"']/g,eM=RegExp(eA.source),eD=RegExp(ek.source),eP=/<%-([\s\S]+?)%>/g,eN=/<%([\s\S]+?)%>/g,eq=/<%=([\s\S]+?)%>/g,eB=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,eL=/^\w*$/,eF=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,eU=/[\\^$.*+?()[\]{}|]/g,ej=RegExp(eU.source),eH=/^\s+/,ez=/\s/,eG=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,eK=/\{\n\/\* \[wrapped with (.+)\] \*/,eV=/,? & /,eW=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,e$=/[()=,{}\[\]\/\s]/,eY=/\\(\\)?/g,eZ=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,eX=/\w*$/,eJ=/^[-+]0x[0-9a-f]+$/i,eQ=/^0b[01]+$/i,e0=/^\[object .+?Constructor\]$/,e3=/^0o[0-7]+$/i,e2=/^(?:0|[1-9]\d*)$/,e8=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,e4=/($^)/,e7=/['\n\r\u2028\u2029\\]/g,e6="\ud800-\udfff",e5="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",e9="\\u2700-\\u27bf",te="a-z\\xdf-\\xf6\\xf8-\\xff",tt="A-Z\\xc0-\\xd6\\xd8-\\xde",tr="\\ufe0e\\ufe0f",ti="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",tn="['’]",ts="["+e6+"]",ta="["+ti+"]",to="["+e5+"]",td="\\d+",tf="["+e9+"]",tl="["+te+"]",tu="[^"+e6+ti+td+e9+te+tt+"]",tc="\ud83c[\udffb-\udfff]",tp="[^"+e6+"]",th="(?:\ud83c[\udde6-\uddff]){2}",ty="[\ud800-\udbff][\udc00-\udfff]",tg="["+tt+"]",tm="\\u200d",tv="(?:"+tl+"|"+tu+")",t_="(?:"+tg+"|"+tu+")",tb="(?:"+tn+"(?:d|ll|m|re|s|t|ve))?",tT="(?:"+tn+"(?:D|LL|M|RE|S|T|VE))?",tE="(?:"+to+"|"+tc+")?",tw="["+tr+"]?",tS="(?:"+tm+"(?:"+[tp,th,ty].join("|")+")"+tw+tE+")*",tR="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",tI="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",tx=tw+tE+tS,tO="(?:"+[tf,th,ty].join("|")+")"+tx,tC="(?:"+[tp+to+"?",to,th,ty,ts].join("|")+")",tA=RegExp(tn,"g"),tk=RegExp(to,"g"),tM=RegExp(tc+"(?="+tc+")|"+tC+tx,"g"),tD=RegExp([tg+"?"+tl+"+"+tb+"(?="+[ta,tg,"$"].join("|")+")",t_+"+"+tT+"(?="+[ta,tg+tv,"$"].join("|")+")",tg+"?"+tv+"+"+tb,tg+"+"+tT,tI,tR,td,tO].join("|"),"g"),tP=RegExp("["+tm+e6+e5+tr+"]"),tN=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tq=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],tB=-1,tL={};tL[ev]=tL[e_]=tL[eb]=tL[eT]=tL[eE]=tL[ew]=tL[eS]=tL[eR]=tL[eI]=!0,tL[W]=tL[$]=tL[eg]=tL[Z]=tL[em]=tL[X]=tL[Q]=tL[ee]=tL[ei]=tL[en]=tL[ea]=tL[ef]=tL[el]=tL[eu]=tL[eh]=!1;var tF={};tF[W]=tF[$]=tF[eg]=tF[em]=tF[Z]=tF[X]=tF[ev]=tF[e_]=tF[eb]=tF[eT]=tF[eE]=tF[ei]=tF[en]=tF[ea]=tF[ef]=tF[el]=tF[eu]=tF[ec]=tF[ew]=tF[eS]=tF[eR]=tF[eI]=!0,tF[Q]=tF[ee]=tF[eh]=!1;var tU={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},tj={"&":"&","<":"<",">":">",'"':""","'":"'"},tH={"&":"&","<":"<",">":">",""":'"',"'":"'"},tz={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},tG=parseFloat,tK=parseInt,tV="object"==typeof $parcel$global&&$parcel$global&&$parcel$global.Object===Object&&$parcel$global,tW="object"==typeof self&&self&&self.Object===Object&&self,t$=tV||tW||Function("return this")(),tY=i&&!i.nodeType&&i,tZ=tY&&r&&!r.nodeType&&r,tX=tZ&&tZ.exports===tY,tJ=tX&&tV.process,tQ=function(){try{var r=tZ&&tZ.require&&tZ.require("util").types;if(r)return r;return tJ&&tJ.binding&&tJ.binding("util")}catch(r){}}(),t0=tQ&&tQ.isArrayBuffer,t1=tQ&&tQ.isDate,t2=tQ&&tQ.isMap,t8=tQ&&tQ.isRegExp,t4=tQ&&tQ.isSet,t7=tQ&&tQ.isTypedArray;function t6(r,i,n){switch(n.length){case 0:return r.call(i);case 1:return r.call(i,n[0]);case 2:return r.call(i,n[0],n[1]);case 3:return r.call(i,n[0],n[1],n[2])}return r.apply(i,n)}function t5(r,i,n,s){for(var a=-1,o=null==r?0:r.length;++a-1}function rn(r,i,n){for(var s=-1,a=null==r?0:r.length;++s-1;);return n}function rk(r,i){for(var n=r.length;n--&&ry(i,r[n],0)>-1;);return n}function rM(r,i){for(var n=r.length,s=0;n--;)r[n]===i&&++s;return s}var rD=rb(tU),rP=rb(tj);function rN(r){return"\\"+tz[r]}function rq(r,i){return null==r?n:r[i]}function rB(r){return tP.test(r)}function rL(r){return tN.test(r)}function rF(r){for(var i,n=[];!(i=r.next()).done;)n.push(i.value);return n}function rU(r){var i=-1,n=Array(r.size);return r.forEach(function(r,s){n[++i]=[s,r]}),n}function rj(r,i){return function(n){return r(i(n))}}function rH(r,i){for(var n=-1,s=r.length,a=0,o=[];++n-1}function iw(r,i){var n=this.__data__,s=iK(n,r);return s<0?(++this.size,n.push([r,i])):n[s][1]=i,this}function iS(r){var i=-1,n=null==r?0:r.length;for(this.clear();++i=i?r:i)),r}function iJ(r,i,s,a,o,d){var f,l=i&p,u=i&h,c=i&g;if(s&&(f=o?s(r,a,o,d):s(r)),f!==n)return f;if(!fs(r))return r;var m=dJ(r);if(m){if(f=ad(r),!l)return sb(r,f)}else{var v=an(r),_=v==ee||v==et;if(d8(r))return sl(r,l);if(v==ea||v==W||_&&!o){if(f=u||_?{}:af(r),!l)return u?sw(r,i$(f,r)):sE(r,iW(f,r))}else{if(!tF[v])return o?r:{};f=al(r,v,l)}}d||(d=new iD);var b=d.get(r);if(b)return b;d.set(r,f),fv(r)?r.forEach(function(n){f.add(iJ(n,i,s,n,r,d))}):fo(r)&&r.forEach(function(n,a){f.set(a,iJ(n,i,s,a,r,d))});var T=c?u?s3:s1:u?f4:f8,E=m?n:T(r);return t9(E||r,function(n,a){E&&(n=r[a=n]),iG(f,a,iJ(n,i,s,a,r,d))}),f}function iQ(r){var i=f8(r);return function(n){return i0(n,r,i)}}function i0(r,i,s){var a=s.length;if(null==r)return!a;for(r=te(r);a--;){var o=s[a],d=i[o],f=r[o];if(f===n&&!(o in r)||!d(f))return!1}return!0}function i3(r,i,s){if("function"!=typeof r)throw new ti(d);return aM(function(){r.apply(n,s)},i)}function i2(r,i,n,s){var o=-1,d=ri,f=!0,l=r.length,u=[],c=i.length;if(!l)return u;n&&(i=rs(i,rx(n))),s?(d=rn,f=!1):i.length>=a&&(d=rC,f=!1,i=new iA(i));e:for(;++oo?0:o+s),(a=a===n||a>o?o:fC(a))<0&&(a+=o),a=s>a?0:fA(a);s0&&n(f)?i>1?ne(f,i-1,n,s,a):ra(a,f):s||(a[a.length]=f)}return a}var nt=sx(),nr=sx(!0);function ni(r,i){return r&&nt(r,i,f8)}function nn(r,i){return r&&nr(r,i,f8)}function ns(r,i){return rr(i,function(i){return fr(r[i])})}function na(r,i){i=sa(i,r);for(var s=0,a=i.length;null!=r&&si}function nl(r,i){return null!=r&&tf.call(r,i)}function nu(r,i){return null!=r&&i in te(r)}function nc(r,i,n){return r>=tW(i,n)&&r=120&&p.length>=120)?new iA(f&&p):n}p=r[0];var h=-1,g=l[0];e:for(;++h-1;)f!==r&&tw.call(f,l,1),tw.call(r,l,1);return r}function nH(r,i){for(var n=r?i.length:0,s=n-1;n--;){var a=i[n];if(n==s||a!==o){var o=a;ap(a)?tw.call(r,a,1):n5(r,a)}}return r}function nz(r,i){return r+tP(tJ()*(i-r+1))}function nG(r,i,n,s){for(var a=-1,o=tV(tD((i-r)/(n||1)),0),d=ez(o);o--;)d[s?o:++a]=r,r+=n;return d}function nK(r,i){var n="";if(!r||i<1||i>F)return n;do i%2&&(n+=r),(i=tP(i/2))&&(r+=r);while(i)return n}function nV(r,i){return aD(ax(r,i,l2),r+"")}function nW(r){return iU(lp(r))}function n$(r,i){var n=lp(r);return aq(n,iX(i,0,n.length))}function nY(r,i,s,a){if(!fs(r))return r;i=sa(i,r);for(var o=-1,d=i.length,f=d-1,l=r;null!=l&&++oa?0:a+i),(n=n>a?a:n)<0&&(n+=a),a=i>n?0:n-i>>>0,i>>>=0;for(var o=ez(a);++s>>1,d=r[o];null!==d&&!fb(d)&&(n?d<=i:d=a){var c=i?null:sK(r);if(c)return rz(c);f=!1,o=rC,u=new iA}else u=i?[]:l;e:for(;++s=a?r:nQ(r,i,s)}var sf=tO||function(r){return t$.clearTimeout(r)};function sl(r,i){if(i)return r.slice();var n=r.length,s=t_?t_(n):new r.constructor(n);return r.copy(s),s}function su(r){var i=new r.constructor(r.byteLength);return new tv(i).set(new tv(r)),i}function sc(r,i){var n=i?su(r.buffer):r.buffer;return new r.constructor(n,r.byteOffset,r.byteLength)}function sp(r){var i=new r.constructor(r.source,eX.exec(r));return i.lastIndex=r.lastIndex,i}function sh(r){return ie?te(ie.call(r)):{}}function sy(r,i){var n=i?su(r.buffer):r.buffer;return new r.constructor(n,r.byteOffset,r.length)}function sg(r,i){if(r!==i){var s=r!==n,a=null===r,o=r==r,d=fb(r),f=i!==n,l=null===i,u=i==i,c=fb(i);if(!l&&!c&&!d&&r>i||d&&f&&u&&!l&&!c||a&&f&&u||!s&&u||!o)return 1;if(!a&&!d&&!c&&r=f)return l;return l*("desc"==n[s]?-1:1)}}return r.index-i.index}function sv(r,i,n,s){for(var a=-1,o=r.length,d=n.length,f=-1,l=i.length,u=tV(o-d,0),c=ez(l+u),p=!s;++f1?s[o-1]:n,f=o>2?s[2]:n;for(d=r.length>3&&"function"==typeof d?(o--,d):n,f&&ah(s[0],s[1],f)&&(d=o<3?n:d,o=1),i=te(i);++a-1?o[d?i[f]:f]:n}}function sP(r){return s0(function(i){var s=i.length,a=s,o=ia.prototype.thru;for(r&&i.reverse();a--;){var f=i[a];if("function"!=typeof f)throw new ti(d);if(o&&!l&&"wrapper"==s4(f))var l=new ia([],!0)}for(a=l?a:s;++a1&&_.reverse(),p&&ul))return!1;var c=d.get(r),p=d.get(i);if(c&&p)return c==i&&p==r;var h=-1,g=!0,_=s&v?new iA:n;for(d.set(r,i),d.set(i,r);++h1?"& ":"")+i[s],i=i.join(n>2?", ":" "),r.replace(eG,"{\n/* [wrapped with "+i+"] */\n")}function ac(r){return dJ(r)||dX(r)||!!(tS&&r&&r[tS])}function ap(r,i){var n=typeof r;return!!(i=null==i?F:i)&&("number"==n||"symbol"!=n&&e2.test(r))&&r>-1&&r%1==0&&r0){if(++i>=D)return arguments[0]}else i=0;return r.apply(n,arguments)}}function aq(r,i){var s=-1,a=r.length,o=a-1;for(i=i===n?a:i;++s1?r[i-1]:n;return s="function"==typeof s?(r.pop(),s):n,oP(r,s)});function oz(r){var i=ir(r);return i.__chain__=!0,i}function oG(r,i){return i(r),r}function oK(r,i){return i(r)}var oV=s0(function(r){var i=r.length,s=i?r[0]:0,a=this.__wrapped__,o=function(i){return iZ(i,r)};return!(i>1)&&!this.__actions__.length&&a instanceof io&&ap(s)?((a=a.slice(s,+s+(i?1:0))).__actions__.push({func:oK,args:[o],thisArg:n}),new ia(a,this.__chain__).thru(function(r){return i&&!r.length&&r.push(n),r})):this.thru(o)});function oW(){return oz(this)}function o$(){return new ia(this.value(),this.__chain__)}function oY(){this.__values__===n&&(this.__values__=fx(this.value()));var r=this.__index__>=this.__values__.length,i=r?n:this.__values__[this.__index__++];return{done:r,value:i}}function oZ(){return this}function oX(r){for(var i,s=this;s instanceof is;){var a=aj(s);a.__index__=0,a.__values__=n,i?o.__wrapped__=a:i=a;var o=a;s=s.__wrapped__}return o.__wrapped__=r,i}function oJ(){var r=this.__wrapped__;if(r instanceof io){var i=r;return this.__actions__.length&&(i=new io(this)),(i=i.reverse()).__actions__.push({func:oK,args:[oc],thisArg:n}),new ia(i,this.__chain__)}return this.thru(oc)}function oQ(){return st(this.__wrapped__,this.__actions__)}var o0=sS(function(r,i,n){tf.call(r,n)?++r[n]:iY(r,n,1)});function o3(r,i,s){var a=dJ(r)?rt:i7;return s&&ah(r,i,s)&&(i=n),a(r,s6(i,3))}function o2(r,i){return(dJ(r)?rr:i9)(r,s6(i,3))}var o8=sD(aQ),o4=sD(a0);function o7(r,i){return ne(ds(r,i),1)}function o6(r,i){return ne(ds(r,i),L)}function o5(r,i,s){return s=s===n?1:fC(s),ne(ds(r,i),s)}function o9(r,i){return(dJ(r)?t9:i8)(r,s6(i,3))}function de(r,i){return(dJ(r)?re:i4)(r,s6(i,3))}var dt=sS(function(r,i,n){tf.call(r,n)?r[n].push(i):iY(r,n,[i])});function dr(r,i,n,s){r=d0(r)?r:lp(r),n=n&&!s?fC(n):0;var a=r.length;return n<0&&(n=tV(a+n,0)),f_(r)?n<=a&&r.indexOf(i,n)>-1:!!a&&ry(r,i,n)>-1}var di=nV(function(r,i,n){var s=-1,a="function"==typeof i,o=d0(r)?ez(r.length):[];return i8(r,function(r){o[++s]=a?t6(i,r,n):ny(r,i,n)}),o}),dn=sS(function(r,i,n){iY(r,n,i)});function ds(r,i){return(dJ(r)?rs:nk)(r,s6(i,3))}function da(r,i,s,a){return null==r?[]:(dJ(i)||(i=null==i?[]:[i]),dJ(s=a?n:s)||(s=null==s?[]:[s]),nB(r,i,s))}var dd=sS(function(r,i,n){r[n?0:1].push(i)},function(){return[[],[]]});function df(r,i,n){var s=dJ(r)?ro:rT,a=arguments.length<3;return s(r,s6(i,4),n,a,i8)}function dl(r,i,n){var s=dJ(r)?rd:rT,a=arguments.length<3;return s(r,s6(i,4),n,a,i4)}function du(r,i){return(dJ(r)?rr:i9)(r,dk(s6(i,3)))}function dc(r){return(dJ(r)?iU:nW)(r)}function dp(r,i,s){return i=(s?ah(r,i,s):i===n)?1:fC(i),(dJ(r)?ij:n$)(r,i)}function dh(r){return(dJ(r)?iH:nJ)(r)}function dy(r){if(null==r)return 0;if(d0(r))return f_(r)?rW(r):r.length;var i=an(r);return i==ei||i==el?r.size:nO(r).length}function dg(r,i,s){var a=dJ(r)?rf:n0;return s&&ah(r,i,s)&&(i=n),a(r,s6(i,3))}var dm=nV(function(r,i){if(null==r)return[];var n=i.length;return n>1&&ah(r,i[0],i[1])?i=[]:n>2&&ah(i[0],i[1],i[2])&&(i=[i[0]]),nB(r,ne(i,1),[])}),dv=tC||function(){return t$.Date.now()};function d_(r,i){if("function"!=typeof i)throw new ti(d);return r=fC(r),function(){if(--r<1)return i.apply(this,arguments)}}function db(r,i,s){return i=s?n:i,i=r&&null==i?r.length:i,sW(r,O,n,n,n,n,i)}function dT(r,i){var s;if("function"!=typeof i)throw new ti(d);return r=fC(r),function(){return--r>0&&(s=i.apply(this,arguments)),r<=1&&(i=n),s}}var dE=nV(function(r,i,n){var s=_;if(n.length){var a=rH(n,s7(dE));s|=S}return sW(r,s,i,n,a)}),dw=nV(function(r,i,n){var s=_|b;if(n.length){var a=rH(n,s7(dw));s|=S}return sW(i,s,r,n,a)});function dS(r,i,s){i=s?n:i;var a=sW(r,E,n,n,n,n,n,i);return a.placeholder=dS.placeholder,a}function dR(r,i,s){i=s?n:i;var a=sW(r,w,n,n,n,n,n,i);return a.placeholder=dR.placeholder,a}function dI(r,i,s){var a,o,f,l,u,c,p=0,h=!1,g=!1,m=!0;if("function"!=typeof r)throw new ti(d);function v(i){var s=a,d=o;return a=o=n,p=i,l=r.apply(d,s)}function _(r){return p=r,u=aM(E,i),h?v(r):l}function b(r){var n=r-c,s=r-p,a=i-n;return g?tW(a,f-s):a}function T(r){var s=r-c,a=r-p;return c===n||s>=i||s<0||g&&a>=f}function E(){var r=dv();if(T(r))return w(r);u=aM(E,b(r))}function w(r){return(u=n,m&&a)?v(r):(a=o=n,l)}function S(){u!==n&&sf(u),p=0,a=c=o=u=n}function I(){return u===n?l:w(dv())}function O(){var r=dv(),s=T(r);if(a=arguments,o=this,c=r,s){if(u===n)return _(c);if(g)return sf(u),u=aM(E,i),v(c)}return u===n&&(u=aM(E,i)),l}return i=fk(i)||0,fs(s)&&(h=!!s.leading,f=(g="maxWait"in s)?tV(fk(s.maxWait)||0,i):f,m="trailing"in s?!!s.trailing:m),O.cancel=S,O.flush=I,O}var dx=nV(function(r,i){return i3(r,1,i)}),dO=nV(function(r,i,n){return i3(r,fk(i)||0,n)});function dC(r){return sW(r,A)}function dA(r,i){if("function"!=typeof r||null!=i&&"function"!=typeof i)throw new ti(d);var n=function(){var s=arguments,a=i?i.apply(this,s):s[0],o=n.cache;if(o.has(a))return o.get(a);var d=r.apply(this,s);return n.cache=o.set(a,d)||o,d};return n.cache=new(dA.Cache||iS),n}function dk(r){if("function"!=typeof r)throw new ti(d);return function(){var i=arguments;switch(i.length){case 0:return!r.call(this);case 1:return!r.call(this,i[0]);case 2:return!r.call(this,i[0],i[1]);case 3:return!r.call(this,i[0],i[1],i[2])}return!r.apply(this,i)}}function dM(r){return dT(2,r)}dA.Cache=iS;var dD=so(function(r,i){var n=(i=1==i.length&&dJ(i[0])?rs(i[0],rx(s6())):rs(ne(i,1),rx(s6()))).length;return nV(function(s){for(var a=-1,o=tW(s.length,n);++a=i}),dX=ng(function(){return arguments}())?ng:function(r){return fa(r)&&tf.call(r,"callee")&&!tE.call(r,"callee")},dJ=ez.isArray,dQ=t0?rx(t0):nm;function d0(r){return null!=r&&fn(r.length)&&!fr(r)}function d1(r){return fa(r)&&d0(r)}function d2(r){return!0===r||!1===r||fa(r)&&nd(r)==Z}var d8=tU||uu,d4=t1?rx(t1):nv;function d7(r){return fa(r)&&1===r.nodeType&&!fy(r)}function d6(r){if(null==r)return!0;if(d0(r)&&(dJ(r)||"string"==typeof r||"function"==typeof r.splice||d8(r)||fT(r)||dX(r)))return!r.length;var i=an(r);if(i==ei||i==el)return!r.size;if(ab(r))return!nO(r).length;for(var n in r)if(tf.call(r,n))return!1;return!0}function d5(r,i){return n_(r,i)}function d9(r,i,s){var a=(s="function"==typeof s?s:n)?s(r,i):n;return a===n?n_(r,i,n,s):!!a}function fe(r){if(!fa(r))return!1;var i=nd(r);return i==Q||i==J||"string"==typeof r.message&&"string"==typeof r.name&&!fy(r)}function ft(r){return"number"==typeof r&&tj(r)}function fr(r){if(!fs(r))return!1;var i=nd(r);return i==ee||i==et||i==Y||i==ed}function fi(r){return"number"==typeof r&&r==fC(r)}function fn(r){return"number"==typeof r&&r>-1&&r%1==0&&r<=F}function fs(r){var i=typeof r;return null!=r&&("object"==i||"function"==i)}function fa(r){return null!=r&&"object"==typeof r}var fo=t2?rx(t2):nT;function fd(r,i){return r===i||nE(r,i,s9(i))}function ff(r,i,s){return s="function"==typeof s?s:n,nE(r,i,s9(i),s)}function fl(r){return fh(r)&&r!=+r}function fu(r){if(a_(r))throw new e6(o);return nw(r)}function fc(r){return null===r}function fp(r){return null==r}function fh(r){return"number"==typeof r||fa(r)&&nd(r)==en}function fy(r){if(!fa(r)||nd(r)!=ea)return!1;var i=tb(r);if(null===i)return!0;var n=tf.call(i,"constructor")&&i.constructor;return"function"==typeof n&&n instanceof n&&td.call(n)==tp}var fg=t8?rx(t8):nS;function fm(r){return fi(r)&&r>=-F&&r<=F}var fv=t4?rx(t4):nR;function f_(r){return"string"==typeof r||!dJ(r)&&fa(r)&&nd(r)==eu}function fb(r){return"symbol"==typeof r||fa(r)&&nd(r)==ec}var fT=t7?rx(t7):nI;function fE(r){return r===n}function fw(r){return fa(r)&&an(r)==eh}function fS(r){return fa(r)&&nd(r)==ey}var fR=sH(nA),fI=sH(function(r,i){return r<=i});function fx(r){if(!r)return[];if(d0(r))return f_(r)?r$(r):sb(r);if(tR&&r[tR])return rF(r[tR]());var i=an(r);return(i==ei?rU:i==el?rz:lp)(r)}function fO(r){return r?(r=fk(r))===L||r===-L?(r<0?-1:1)*U:r==r?r:0:0===r?r:0}function fC(r){var i=fO(r),n=i%1;return i==i?n?i-n:i:0}function fA(r){return r?iX(fC(r),0,z):0}function fk(r){if("number"==typeof r)return r;if(fb(r))return H;if(fs(r)){var i="function"==typeof r.valueOf?r.valueOf():r;r=fs(i)?i+"":i}if("string"!=typeof r)return 0===r?r:+r;r=rI(r);var n=eQ.test(r);return n||e3.test(r)?tK(r.slice(2),n?2:8):eJ.test(r)?H:+r}function fM(r){return sT(r,f4(r))}function fD(r){return r?iX(fC(r),-F,F):0===r?r:0}function fP(r){return null==r?"":n7(r)}var fN=sR(function(r,i){if(ab(i)||d0(i)){sT(i,f8(i),r);return}for(var n in i)tf.call(i,n)&&iG(r,n,i[n])}),fq=sR(function(r,i){sT(i,f4(i),r)}),fB=sR(function(r,i,n,s){sT(i,f4(i),r,s)}),fL=sR(function(r,i,n,s){sT(i,f8(i),r,s)}),fF=s0(iZ);function fU(r,i){var n=ii(r);return null==i?n:iW(n,i)}var fj=nV(function(r,i){r=te(r);var s=-1,a=i.length,o=a>2?i[2]:n;for(o&&ah(i[0],i[1],o)&&(a=1);++s1),i}),sT(r,s3(r),n),s&&(n=iJ(n,p|h|g,sZ));for(var a=i.length;a--;)n5(n,i[a]);return n});function lt(r,i){return li(r,dk(s6(i)))}var lr=s0(function(r,i){return null==r?{}:nL(r,i)});function li(r,i){if(null==r)return{};var n=rs(s3(r),function(r){return[r]});return i=s6(i),nF(r,n,function(r,n){return i(r,n[0])})}function ln(r,i,s){i=sa(i,r);var a=-1,o=i.length;for(o||(o=1,r=n);++ai){var a=r;r=i,i=a}if(s||r%1||i%1){var o=tJ();return tW(r+o*(i-r+tG("1e-"+((o+"").length-1))),i)}return nz(r,i)}var lv=sA(function(r,i,n){return i=i.toLowerCase(),r+(n?l_(i):i)});function l_(r){return lV(fP(r).toLowerCase())}function lb(r){return(r=fP(r))&&r.replace(e8,rD).replace(tk,"")}function lT(r,i,s){r=fP(r),i=n7(i);var a=r.length,o=s=s===n?a:iX(fC(s),0,a);return(s-=i.length)>=0&&r.slice(s,o)==i}function lE(r){return(r=fP(r))&&eD.test(r)?r.replace(ek,rP):r}function lw(r){return(r=fP(r))&&ej.test(r)?r.replace(eU,"\\$&"):r}var lS=sA(function(r,i,n){return r+(n?"-":"")+i.toLowerCase()}),lR=sA(function(r,i,n){return r+(n?" ":"")+i.toLowerCase()}),lI=sC("toLowerCase");function lx(r,i,n){r=fP(r);var s=(i=fC(i))?rW(r):0;if(!i||s>=i)return r;var a=(i-s)/2;return sF(tP(a),n)+r+sF(tD(a),n)}function lO(r,i,n){r=fP(r);var s=(i=fC(i))?rW(r):0;return i&&s>>0)?(r=fP(r))&&("string"==typeof i||null!=i&&!fg(i))&&!(i=n7(i))&&rB(r)?sd(r$(r),0,s):r.split(i,s):[]}var lN=sA(function(r,i,n){return r+(n?" ":"")+lV(i)});function lq(r,i,n){return r=fP(r),n=null==n?0:iX(fC(n),0,r.length),i=n7(i),r.slice(n,n+i.length)==i}function lB(r,i,s){var a=ir.templateSettings;s&&ah(r,i,s)&&(i=n),r=fP(r),i=fB({},i,a,s$);var o,d,l=fB({},i.imports,a.imports,s$),u=f8(l),c=rO(l,u),p=0,h=i.interpolate||e4,g="__p += '",m=tt((i.escape||e4).source+"|"+h.source+"|"+(h===eq?eZ:e4).source+"|"+(i.evaluate||e4).source+"|$","g"),v="//# sourceURL="+(tf.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++tB+"]")+"\n";r.replace(m,function(i,n,s,a,f,l){return s||(s=a),g+=r.slice(p,l).replace(e7,rN),n&&(o=!0,g+="' +\n__e("+n+") +\n'"),f&&(d=!0,g+="';\n"+f+";\n__p += '"),s&&(g+="' +\n((__t = ("+s+")) == null ? '' : __t) +\n'"),p=l+i.length,i}),g+="';\n";var _=tf.call(i,"variable")&&i.variable;if(_){if(e$.test(_))throw new e6(f)}else g="with (obj) {\n"+g+"\n}\n";g=(d?g.replace(ex,""):g).replace(eO,"$1").replace(eC,"$1;"),g="function("+(_||"obj")+") {\n"+(_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(d?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+g+"return __p\n}";var b=l$(function(){return e5(u,v+"return "+g).apply(n,c)});if(b.source=g,fe(b))throw b;return b}function lL(r){return fP(r).toLowerCase()}function lF(r){return fP(r).toUpperCase()}function lU(r,i,s){if((r=fP(r))&&(s||i===n))return rI(r);if(!r||!(i=n7(i)))return r;var a=r$(r),o=r$(i),d=rA(a,o),f=rk(a,o)+1;return sd(a,d,f).join("")}function lj(r,i,s){if((r=fP(r))&&(s||i===n))return r.slice(0,rY(r)+1);if(!r||!(i=n7(i)))return r;var a=r$(r),o=rk(a,r$(i))+1;return sd(a,0,o).join("")}function lH(r,i,s){if((r=fP(r))&&(s||i===n))return r.replace(eH,"");if(!r||!(i=n7(i)))return r;var a=r$(r),o=rA(a,r$(i));return sd(a,o).join("")}function lz(r,i){var s=k,a=M;if(fs(i)){var o="separator"in i?i.separator:o;s="length"in i?fC(i.length):s,a="omission"in i?n7(i.omission):a}var d=(r=fP(r)).length;if(rB(r)){var f=r$(r);d=f.length}if(s>=d)return r;var l=s-rW(a);if(l<1)return a;var u=f?sd(f,0,l).join(""):r.slice(0,l);if(o===n)return u+a;if(f&&(l+=u.length-l),fg(o)){if(r.slice(l).search(o)){var c,p=u;for(o.global||(o=tt(o.source,fP(eX.exec(o))+"g")),o.lastIndex=0;c=o.exec(p);)var h=c.index;u=u.slice(0,h===n?l:h)}}else if(r.indexOf(n7(o),l)!=l){var g=u.lastIndexOf(o);g>-1&&(u=u.slice(0,g))}return u+a}function lG(r){return(r=fP(r))&&eM.test(r)?r.replace(eA,rZ):r}var lK=sA(function(r,i,n){return r+(n?" ":"")+i.toUpperCase()}),lV=sC("toUpperCase");function lW(r,i,s){return(r=fP(r),(i=s?n:i)===n)?rL(r)?rQ(r):rc(r):r.match(i)||[]}var l$=nV(function(r,i){try{return t6(r,n,i)}catch(r){return fe(r)?r:new e6(r)}}),lY=s0(function(r,i){return t9(i,function(i){iY(r,i=aL(i),dE(r[i],r))}),r});function lZ(r){var i=null==r?0:r.length,n=s6();return r=i?rs(r,function(r){if("function"!=typeof r[1])throw new ti(d);return[n(r[0]),r[1]]}):[],nV(function(n){for(var s=-1;++sF)return[];var n=z,s=tW(r,z);i=s6(i),r-=z;for(var a=rS(s,i);++n0||i<0)?new io(s):(r<0?s=s.takeRight(-r):r&&(s=s.drop(r)),i!==n&&(s=(i=fC(i))<0?s.dropRight(-i):s.take(i-r)),s)},io.prototype.takeRightWhile=function(r){return this.reverse().takeWhile(r).reverse()},io.prototype.toArray=function(){return this.take(z)},ni(io.prototype,function(r,i){var s=/^(?:filter|find|map|reject)|While$/.test(i),a=/^(?:head|last)$/.test(i),o=ir[a?"take"+("last"==i?"Right":""):i],d=a||/^find/.test(i);o&&(ir.prototype[i]=function(){var i=this.__wrapped__,f=a?[1]:arguments,l=i instanceof io,u=f[0],c=l||dJ(i),p=function(r){var i=o.apply(ir,ra([r],f));return a&&h?i[0]:i};c&&s&&"function"==typeof u&&1!=u.length&&(l=c=!1);var h=this.__chain__,g=!!this.__actions__.length,m=d&&!h,v=l&&!g;if(!d&&c){i=v?i:new io(this);var _=r.apply(i,f);return _.__actions__.push({func:oK,args:[p],thisArg:n}),new ia(_,h)}return m&&v?r.apply(this,f):(_=this.thru(p),m?a?_.value()[0]:_.value():_)})}),t9(["pop","push","shift","sort","splice","unshift"],function(r){var i=tn[r],n=/^(?:push|sort|unshift)$/.test(r)?"tap":"thru",s=/^(?:pop|shift)$/.test(r);ir.prototype[r]=function(){var r=arguments;if(s&&!this.__chain__){var a=this.value();return i.apply(dJ(a)?a:[],r)}return this[n](function(n){return i.apply(dJ(n)?n:[],r)})}}),ni(io.prototype,function(r,i){var n=ir[i];if(n){var s=n.name+"";tf.call(r2,s)||(r2[s]=[]),r2[s].push({name:i,func:n})}}),r2[sN(n,b).name]=[{name:"wrapper",func:n}],io.prototype.clone=id,io.prototype.reverse=il,io.prototype.value=iu,ir.prototype.at=oV,ir.prototype.chain=oW,ir.prototype.commit=o$,ir.prototype.next=oY,ir.prototype.plant=oX,ir.prototype.reverse=oJ,ir.prototype.toJSON=ir.prototype.valueOf=ir.prototype.value=oQ,ir.prototype.first=ir.prototype.head,tR&&(ir.prototype[tR]=oZ),ir}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(t$._=r0,define(function(){return r0})):tZ?((tZ.exports=r0)._=r0,tY._=r0):t$._=r0}).call(this)}),parcelRequire.register("5xch2",function(r,i){Object.defineProperty(r.exports,"__esModule",{value:!0});var n=parcelRequire("b3D3y"),s=parcelRequire("98zPP"),a=parcelRequire("2kkR6"),o=parcelRequire("awmEs");function d(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}function f(r){if(r&&r.__esModule)return r;var i=Object.create(null);return r&&Object.keys(r).forEach(function(n){if("default"!==n){var s=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(i,n,s.get?s:{enumerable:!0,get:function(){return r[n]}})}}),i.default=r,Object.freeze(i)}var l=f(n),u=f(s),c=d(a);function p(r,i){var n={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&0>i.indexOf(s)&&(n[s]=r[s]);if(null!=r&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,s=Object.getOwnPropertySymbols(r);ai.indexOf(s[a])&&Object.prototype.propertyIsEnumerable.call(r,s[a])&&(n[s[a]]=r[s[a]]);return n}"function"==typeof SuppressedError&&SuppressedError;let h=["bool","string","bytes","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","double","float"],g=r=>h.includes(r),m=(r,i)=>(null==r?void 0:r.optional)&&void 0===i?null:(null==r?void 0:r.type)==="bytes"?c.default.wrap(i).toString("hex"):(null==r?void 0:r.long)?Number.isSafeInteger(i.toNumber())?i.toNumber():i.toString():i;function v(r,i){let n=p(r,[]),s={};return Object.keys(i).forEach(r=>{let a=i[r],o=n[r];if(a.repeated){if(g(a.type))s[r]=o.map(r=>m(a,r));else if("valuesById"in a.resolvedType)s[r]=o;else if("fields"in a.resolvedType)s[r]=o.map(r=>v(r,a.resolvedType.fields));else throw Error(`case not handled for repeated key: ${r}`)}else if(g(a.type))s[r]=m(a,o);else if("valuesById"in a.resolvedType)s[r]=a.resolvedType.valuesById[o];else if(a.resolvedType.fields)s[r]=v(o,a.resolvedType.fields);else throw Error(`case not handled: ${r}`)}),s}let _=(r,i)=>{let n;let s=i.toBuffer(),a=new Uint8Array(s);try{n=r.decode(a)}catch(i){if(a.length>1&&255===a[a.length-1])a[a.length-1]=4,n=r.decode(a);else throw i}return v(n,n.$type.fields)},b=(r,i)=>{if("bytes"===r)return"string"!=typeof i||i?o.Buffer.from(i,"hex"):i;if("number"==typeof i&&!Number.isSafeInteger(i))throw RangeError("field value is not within safe integer range");return i};function T(r,i){let n={};return r.fields&&Object.keys(r.fields).forEach(s=>{let a=r.fields[s],o=i[s];if(void 0!==o){if(a&&g(a.type)){a.repeated?n[s]=o.map(r=>b(a.type,r)):n[s]=b(a.type,o);return}if(a.repeated){let i=r.lookupTypeOrEnum(a.type);n[s]=o.map(r=>T(i,r))}else if("object"==typeof o&&null!==o){let i=r.lookupType(a.type);n[s]=T(i,o)}else if("number"==typeof o){let i=r.lookupEnum(a.type);n[s]=i.values[o]}else n[s]=o}}),n}let E=(r,i)=>{let n=T(r,i),s=r.fromObject(n),a=r.encode(s).finish(),o=new c.default(a.byteLength);return o.append(a),o.reset(),o};function w(r){return"string"==typeof r?l.Root.fromJSON(JSON.parse(r)):l.Root.fromJSON(r)}let S=(r,i)=>{let n=r.lookupType(i),s=r.lookupEnum("MessageType"),a=s.values[`MessageType_${i}`];return!a&&n.options&&(a=n.options["(wire_type)"]),{Message:n,messageType:a}},I=(r,i)=>{let n=r.lookupEnum("MessageType"),s=n.valuesById[i].replace("MessageType_",""),a=r.lookupType(s);return{Message:a,messageName:s}},O=63,C=35,A=8,k=63,M=6,D=r=>{let i=r.readUint16(),n=r.readUint32();return{typeId:i,length:n}},P=r=>{let i=r.readByte(),n=r.readByte(),s=r.readUint16(),a=r.readUint32();return{sharp1:i,sharp2:n,typeId:s,length:a}},N=r=>{let{typeId:i}=D(r);return{typeId:i,buffer:r}},q=r=>{let i=c.default.wrap(r,void 0,void 0,!0),{sharp1:n,sharp2:s,typeId:a,length:o}=P(i);if(n!==C||s!==C)throw Error("Didn't receive expected header signature.");return{length:o,typeId:a,restBuffer:i}};var B=Object.freeze({__proto__:null,decode:N,decodeChunked:q});function L(r,i){let{addTrezorHeaders:n,chunked:s,messageType:a}=i,o=(n?A:A-2)+r.limit,d=new c.default(o);if(n&&(d.writeByte(C),d.writeByte(C)),d.writeUint16(a),d.writeUint32(r.limit),d.append(r.buffer),d.reset(),!1===s)return d;let f=[],l=k,u=Math.floor((d.limit-1)/l)+1||1;for(let r=0;r{let{Message:s,messageType:a}=S(r,i),o=E(s,n);return L(o,{addTrezorHeaders:!0,chunked:!0,messageType:a})},H=(r,i,n)=>{let s=U(r,i,n),a=[];for(let r of s){let i=new c.default(k+1);i.writeByte(O),i.append(r),i.reset(),a.push(i)}return a};function z(r,i){let n=c.default.wrap(i,"hex"),{typeId:s,buffer:a}=N(n),{Message:o,messageName:d}=I(r,s),f=_(o,a);return{message:f,type:d}}let G="Wrong result type.";function K(r){if(null==r)return null;if("string"!=typeof r)throw Error(G);return r}var V=Object.freeze({__proto__:null,info:function(r){if("object"!=typeof r||null==r)throw Error("Wrong result type.");let{version:i}=r;if("string"!=typeof i)throw Error(G);let n=!!r.configured;return{version:i,configured:n}},version:function(r){if("string"!=typeof r)throw Error(G);return r.trim()},devices:function(r){if("object"!=typeof r||!(r instanceof Array))throw Error(G);return r.map(r=>{if("object"!=typeof r||null==r)throw Error(G);let{path:i}=r;if("string"!=typeof i)throw Error(G);let n=i.toString();return{path:n,session:K(r.session),debugSession:K(r.debugSession),product:r.product,vendor:r.vendor,debug:!!r.debug}})},acquire:function(r){if("object"!=typeof r||null==r)throw Error(G);let{session:i}=r;if("string"!=typeof i&&"number"!=typeof i)throw Error(G);return i.toString()},call:function(r){if("object"!=typeof r||null==r)throw Error(G);let{type:i}=r;if("string"!=typeof i)throw Error(G);let{message:n}=r;if("object"!=typeof n||null==n)throw Error(G);return{type:i,message:n}}});r.exports.AptosTransactionType=void 0,function(r){r[r.STANDARD=0]="STANDARD",r[r.WITH_DATA=1]="WITH_DATA"}(r.exports.AptosTransactionType||(r.exports.AptosTransactionType={})),r.exports.BinanceOrderType=void 0,function(r){r[r.OT_UNKNOWN=0]="OT_UNKNOWN",r[r.MARKET=1]="MARKET",r[r.LIMIT=2]="LIMIT",r[r.OT_RESERVED=3]="OT_RESERVED"}(r.exports.BinanceOrderType||(r.exports.BinanceOrderType={})),r.exports.BinanceOrderSide=void 0,function(r){r[r.SIDE_UNKNOWN=0]="SIDE_UNKNOWN",r[r.BUY=1]="BUY",r[r.SELL=2]="SELL"}(r.exports.BinanceOrderSide||(r.exports.BinanceOrderSide={})),r.exports.BinanceTimeInForce=void 0,function(r){r[r.TIF_UNKNOWN=0]="TIF_UNKNOWN",r[r.GTE=1]="GTE",r[r.TIF_RESERVED=2]="TIF_RESERVED",r[r.IOC=3]="IOC"}(r.exports.BinanceTimeInForce||(r.exports.BinanceTimeInForce={})),r.exports.Enum_InputScriptType=void 0,function(r){r[r.SPENDADDRESS=0]="SPENDADDRESS",r[r.SPENDMULTISIG=1]="SPENDMULTISIG",r[r.EXTERNAL=2]="EXTERNAL",r[r.SPENDWITNESS=3]="SPENDWITNESS",r[r.SPENDP2SHWITNESS=4]="SPENDP2SHWITNESS",r[r.SPENDTAPROOT=5]="SPENDTAPROOT"}(r.exports.Enum_InputScriptType||(r.exports.Enum_InputScriptType={})),r.exports.Enum_OutputScriptType=void 0,function(r){r[r.PAYTOADDRESS=0]="PAYTOADDRESS",r[r.PAYTOSCRIPTHASH=1]="PAYTOSCRIPTHASH",r[r.PAYTOMULTISIG=2]="PAYTOMULTISIG",r[r.PAYTOOPRETURN=3]="PAYTOOPRETURN",r[r.PAYTOWITNESS=4]="PAYTOWITNESS",r[r.PAYTOP2SHWITNESS=5]="PAYTOP2SHWITNESS",r[r.PAYTOTAPROOT=6]="PAYTOTAPROOT"}(r.exports.Enum_OutputScriptType||(r.exports.Enum_OutputScriptType={})),r.exports.DecredStakingSpendType=void 0,function(r){r[r.SSGen=0]="SSGen",r[r.SSRTX=1]="SSRTX"}(r.exports.DecredStakingSpendType||(r.exports.DecredStakingSpendType={})),r.exports.AmountUnit=void 0,function(r){r[r.BITCOIN=0]="BITCOIN",r[r.MILLIBITCOIN=1]="MILLIBITCOIN",r[r.MICROBITCOIN=2]="MICROBITCOIN",r[r.SATOSHI=3]="SATOSHI"}(r.exports.AmountUnit||(r.exports.AmountUnit={})),r.exports.Enum_RequestType=void 0,function(r){r[r.TXINPUT=0]="TXINPUT",r[r.TXOUTPUT=1]="TXOUTPUT",r[r.TXMETA=2]="TXMETA",r[r.TXFINISHED=3]="TXFINISHED",r[r.TXEXTRADATA=4]="TXEXTRADATA",r[r.TXORIGINPUT=5]="TXORIGINPUT",r[r.TXORIGOUTPUT=6]="TXORIGOUTPUT"}(r.exports.Enum_RequestType||(r.exports.Enum_RequestType={})),r.exports.RebootType=void 0,function(r){r[r.Normal=0]="Normal",r[r.Boardloader=1]="Boardloader",r[r.BootLoader=2]="BootLoader"}(r.exports.RebootType||(r.exports.RebootType={})),r.exports.CardanoDerivationType=void 0,function(r){r[r.LEDGER=0]="LEDGER",r[r.ICARUS=1]="ICARUS",r[r.ICARUS_TREZOR=2]="ICARUS_TREZOR"}(r.exports.CardanoDerivationType||(r.exports.CardanoDerivationType={})),r.exports.CardanoAddressType=void 0,function(r){r[r.BASE=0]="BASE",r[r.BASE_SCRIPT_KEY=1]="BASE_SCRIPT_KEY",r[r.BASE_KEY_SCRIPT=2]="BASE_KEY_SCRIPT",r[r.BASE_SCRIPT_SCRIPT=3]="BASE_SCRIPT_SCRIPT",r[r.POINTER=4]="POINTER",r[r.POINTER_SCRIPT=5]="POINTER_SCRIPT",r[r.ENTERPRISE=6]="ENTERPRISE",r[r.ENTERPRISE_SCRIPT=7]="ENTERPRISE_SCRIPT",r[r.BYRON=8]="BYRON",r[r.REWARD=14]="REWARD",r[r.REWARD_SCRIPT=15]="REWARD_SCRIPT"}(r.exports.CardanoAddressType||(r.exports.CardanoAddressType={})),r.exports.CardanoNativeScriptType=void 0,function(r){r[r.PUB_KEY=0]="PUB_KEY",r[r.ALL=1]="ALL",r[r.ANY=2]="ANY",r[r.N_OF_K=3]="N_OF_K",r[r.INVALID_BEFORE=4]="INVALID_BEFORE",r[r.INVALID_HEREAFTER=5]="INVALID_HEREAFTER"}(r.exports.CardanoNativeScriptType||(r.exports.CardanoNativeScriptType={})),r.exports.CardanoNativeScriptHashDisplayFormat=void 0,function(r){r[r.HIDE=0]="HIDE",r[r.BECH32=1]="BECH32",r[r.POLICY_ID=2]="POLICY_ID"}(r.exports.CardanoNativeScriptHashDisplayFormat||(r.exports.CardanoNativeScriptHashDisplayFormat={})),r.exports.CardanoTxOutputSerializationFormat=void 0,function(r){r[r.ARRAY_LEGACY=0]="ARRAY_LEGACY",r[r.MAP_BABBAGE=1]="MAP_BABBAGE"}(r.exports.CardanoTxOutputSerializationFormat||(r.exports.CardanoTxOutputSerializationFormat={})),r.exports.CardanoCertificateType=void 0,function(r){r[r.STAKE_REGISTRATION=0]="STAKE_REGISTRATION",r[r.STAKE_DEREGISTRATION=1]="STAKE_DEREGISTRATION",r[r.STAKE_DELEGATION=2]="STAKE_DELEGATION",r[r.STAKE_POOL_REGISTRATION=3]="STAKE_POOL_REGISTRATION",r[r.STAKE_REGISTRATION_CONWAY=7]="STAKE_REGISTRATION_CONWAY",r[r.STAKE_DEREGISTRATION_CONWAY=8]="STAKE_DEREGISTRATION_CONWAY",r[r.VOTE_DELEGATION=9]="VOTE_DELEGATION"}(r.exports.CardanoCertificateType||(r.exports.CardanoCertificateType={})),r.exports.CardanoDRepType=void 0,function(r){r[r.KEY_HASH=0]="KEY_HASH",r[r.SCRIPT_HASH=1]="SCRIPT_HASH",r[r.ABSTAIN=2]="ABSTAIN",r[r.NO_CONFIDENCE=3]="NO_CONFIDENCE"}(r.exports.CardanoDRepType||(r.exports.CardanoDRepType={})),r.exports.CardanoPoolRelayType=void 0,function(r){r[r.SINGLE_HOST_IP=0]="SINGLE_HOST_IP",r[r.SINGLE_HOST_NAME=1]="SINGLE_HOST_NAME",r[r.MULTIPLE_HOST_NAME=2]="MULTIPLE_HOST_NAME"}(r.exports.CardanoPoolRelayType||(r.exports.CardanoPoolRelayType={})),r.exports.CardanoTxAuxiliaryDataSupplementType=void 0,function(r){r[r.NONE=0]="NONE",r[r.CVOTE_REGISTRATION_SIGNATURE=1]="CVOTE_REGISTRATION_SIGNATURE"}(r.exports.CardanoTxAuxiliaryDataSupplementType||(r.exports.CardanoTxAuxiliaryDataSupplementType={})),r.exports.CardanoCVoteRegistrationFormat=void 0,function(r){r[r.CIP15=0]="CIP15",r[r.CIP36=1]="CIP36"}(r.exports.CardanoCVoteRegistrationFormat||(r.exports.CardanoCVoteRegistrationFormat={})),r.exports.CardanoTxSigningMode=void 0,function(r){r[r.ORDINARY_TRANSACTION=0]="ORDINARY_TRANSACTION",r[r.POOL_REGISTRATION_AS_OWNER=1]="POOL_REGISTRATION_AS_OWNER",r[r.MULTISIG_TRANSACTION=2]="MULTISIG_TRANSACTION",r[r.PLUTUS_TRANSACTION=3]="PLUTUS_TRANSACTION"}(r.exports.CardanoTxSigningMode||(r.exports.CardanoTxSigningMode={})),r.exports.CardanoTxWitnessType=void 0,function(r){r[r.BYRON_WITNESS=0]="BYRON_WITNESS",r[r.SHELLEY_WITNESS=1]="SHELLEY_WITNESS"}(r.exports.CardanoTxWitnessType||(r.exports.CardanoTxWitnessType={})),r.exports.FailureType=void 0,function(r){r[r.Failure_UnexpectedMessage=1]="Failure_UnexpectedMessage",r[r.Failure_ButtonExpected=2]="Failure_ButtonExpected",r[r.Failure_DataError=3]="Failure_DataError",r[r.Failure_ActionCancelled=4]="Failure_ActionCancelled",r[r.Failure_PinExpected=5]="Failure_PinExpected",r[r.Failure_PinCancelled=6]="Failure_PinCancelled",r[r.Failure_PinInvalid=7]="Failure_PinInvalid",r[r.Failure_InvalidSignature=8]="Failure_InvalidSignature",r[r.Failure_ProcessError=9]="Failure_ProcessError",r[r.Failure_NotEnoughFunds=10]="Failure_NotEnoughFunds",r[r.Failure_NotInitialized=11]="Failure_NotInitialized",r[r.Failure_PinMismatch=12]="Failure_PinMismatch",r[r.Failure_WipeCodeMismatch=13]="Failure_WipeCodeMismatch",r[r.Failure_InvalidSession=14]="Failure_InvalidSession",r[r.Failure_FirmwareError=99]="Failure_FirmwareError"}(r.exports.FailureType||(r.exports.FailureType={})),r.exports.Enum_ButtonRequestType=void 0,function(r){r[r.ButtonRequest_Other=1]="ButtonRequest_Other",r[r.ButtonRequest_FeeOverThreshold=2]="ButtonRequest_FeeOverThreshold",r[r.ButtonRequest_ConfirmOutput=3]="ButtonRequest_ConfirmOutput",r[r.ButtonRequest_ResetDevice=4]="ButtonRequest_ResetDevice",r[r.ButtonRequest_ConfirmWord=5]="ButtonRequest_ConfirmWord",r[r.ButtonRequest_WipeDevice=6]="ButtonRequest_WipeDevice",r[r.ButtonRequest_ProtectCall=7]="ButtonRequest_ProtectCall",r[r.ButtonRequest_SignTx=8]="ButtonRequest_SignTx",r[r.ButtonRequest_FirmwareCheck=9]="ButtonRequest_FirmwareCheck",r[r.ButtonRequest_Address=10]="ButtonRequest_Address",r[r.ButtonRequest_PublicKey=11]="ButtonRequest_PublicKey",r[r.ButtonRequest_MnemonicWordCount=12]="ButtonRequest_MnemonicWordCount",r[r.ButtonRequest_MnemonicInput=13]="ButtonRequest_MnemonicInput",r[r._Deprecated_ButtonRequest_PassphraseType=14]="_Deprecated_ButtonRequest_PassphraseType",r[r.ButtonRequest_UnknownDerivationPath=15]="ButtonRequest_UnknownDerivationPath",r[r.ButtonRequest_RecoveryHomepage=16]="ButtonRequest_RecoveryHomepage",r[r.ButtonRequest_Success=17]="ButtonRequest_Success",r[r.ButtonRequest_Warning=18]="ButtonRequest_Warning",r[r.ButtonRequest_PassphraseEntry=19]="ButtonRequest_PassphraseEntry",r[r.ButtonRequest_PinEntry=20]="ButtonRequest_PinEntry",r[r.ButtonRequest_AttachPin=8e3]="ButtonRequest_AttachPin"}(r.exports.Enum_ButtonRequestType||(r.exports.Enum_ButtonRequestType={})),r.exports.Enum_PinMatrixRequestType=void 0,function(r){r[r.PinMatrixRequestType_Current=1]="PinMatrixRequestType_Current",r[r.PinMatrixRequestType_NewFirst=2]="PinMatrixRequestType_NewFirst",r[r.PinMatrixRequestType_NewSecond=3]="PinMatrixRequestType_NewSecond",r[r.PinMatrixRequestType_WipeCodeFirst=4]="PinMatrixRequestType_WipeCodeFirst",r[r.PinMatrixRequestType_WipeCodeSecond=5]="PinMatrixRequestType_WipeCodeSecond",r[r.PinMatrixRequestType_BackupFirst=6]="PinMatrixRequestType_BackupFirst",r[r.PinMatrixRequestType_BackupSecond=7]="PinMatrixRequestType_BackupSecond",r[r.PinMatrixRequestType_AttachToPin=8e3]="PinMatrixRequestType_AttachToPin"}(r.exports.Enum_PinMatrixRequestType||(r.exports.Enum_PinMatrixRequestType={})),r.exports.EthereumDefinitionType=void 0,function(r){r[r.NETWORK=0]="NETWORK",r[r.TOKEN=1]="TOKEN"}(r.exports.EthereumDefinitionType||(r.exports.EthereumDefinitionType={})),r.exports.EthereumGnosisSafeTxOperation=void 0,function(r){r[r.CALL=0]="CALL",r[r.DELEGATE_CALL=1]="DELEGATE_CALL"}(r.exports.EthereumGnosisSafeTxOperation||(r.exports.EthereumGnosisSafeTxOperation={})),r.exports.EthereumDataTypeOneKey=void 0,function(r){r[r.UINT=1]="UINT",r[r.INT=2]="INT",r[r.BYTES=3]="BYTES",r[r.STRING=4]="STRING",r[r.BOOL=5]="BOOL",r[r.ADDRESS=6]="ADDRESS",r[r.ARRAY=7]="ARRAY",r[r.STRUCT=8]="STRUCT"}(r.exports.EthereumDataTypeOneKey||(r.exports.EthereumDataTypeOneKey={})),r.exports.EthereumDataType=void 0,function(r){r[r.UINT=1]="UINT",r[r.INT=2]="INT",r[r.BYTES=3]="BYTES",r[r.STRING=4]="STRING",r[r.BOOL=5]="BOOL",r[r.ADDRESS=6]="ADDRESS",r[r.ARRAY=7]="ARRAY",r[r.STRUCT=8]="STRUCT"}(r.exports.EthereumDataType||(r.exports.EthereumDataType={})),r.exports.Enum_BackupType=void 0,function(r){r[r.Bip39=0]="Bip39",r[r.Slip39_Basic=1]="Slip39_Basic",r[r.Slip39_Advanced=2]="Slip39_Advanced"}(r.exports.Enum_BackupType||(r.exports.Enum_BackupType={})),r.exports.Enum_SafetyCheckLevel=void 0,function(r){r[r.Strict=0]="Strict",r[r.PromptAlways=1]="PromptAlways",r[r.PromptTemporarily=2]="PromptTemporarily"}(r.exports.Enum_SafetyCheckLevel||(r.exports.Enum_SafetyCheckLevel={})),r.exports.OneKeyDeviceType=void 0,function(r){r[r.CLASSIC=0]="CLASSIC",r[r.CLASSIC1S=1]="CLASSIC1S",r[r.MINI=2]="MINI",r[r.TOUCH=3]="TOUCH",r[r.PRO=5]="PRO",r[r.PURE=6]="PURE"}(r.exports.OneKeyDeviceType||(r.exports.OneKeyDeviceType={})),r.exports.OneKeySeType=void 0,function(r){r[r.THD89=0]="THD89",r[r.SE608A=1]="SE608A"}(r.exports.OneKeySeType||(r.exports.OneKeySeType={})),r.exports.OneKeySEState=void 0,function(r){r[r.BOOT=0]="BOOT",r[r.APP=1]="APP"}(r.exports.OneKeySEState||(r.exports.OneKeySEState={})),r.exports.Enum_Capability=void 0,function(r){r[r.Capability_Bitcoin=1]="Capability_Bitcoin",r[r.Capability_Bitcoin_like=2]="Capability_Bitcoin_like",r[r.Capability_Binance=3]="Capability_Binance",r[r.Capability_Cardano=4]="Capability_Cardano",r[r.Capability_Crypto=5]="Capability_Crypto",r[r.Capability_EOS=6]="Capability_EOS",r[r.Capability_Ethereum=7]="Capability_Ethereum",r[r.Capability_Lisk=8]="Capability_Lisk",r[r.Capability_Monero=9]="Capability_Monero",r[r.Capability_NEM=10]="Capability_NEM",r[r.Capability_Ripple=11]="Capability_Ripple",r[r.Capability_Stellar=12]="Capability_Stellar",r[r.Capability_Tezos=13]="Capability_Tezos",r[r.Capability_U2F=14]="Capability_U2F",r[r.Capability_Shamir=15]="Capability_Shamir",r[r.Capability_ShamirGroups=16]="Capability_ShamirGroups",r[r.Capability_PassphraseEntry=17]="Capability_PassphraseEntry",r[r.Capability_EthereumTypedData=1e3]="Capability_EthereumTypedData",r[r.Capability_AttachToPin=8e3]="Capability_AttachToPin"}(r.exports.Enum_Capability||(r.exports.Enum_Capability={})),r.exports.ExportType=void 0,function(r){r[r.SeedEncExportType_NO=0]="SeedEncExportType_NO",r[r.SeedEncExportType_YES=1]="SeedEncExportType_YES",r[r.MnemonicPlainExportType_YES=2]="MnemonicPlainExportType_YES"}(r.exports.ExportType||(r.exports.ExportType={})),r.exports.SdProtectOperationType=void 0,function(r){r[r.DISABLE=0]="DISABLE",r[r.ENABLE=1]="ENABLE",r[r.REFRESH=2]="REFRESH"}(r.exports.SdProtectOperationType||(r.exports.SdProtectOperationType={})),r.exports.RecoveryDeviceType=void 0,function(r){r[r.RecoveryDeviceType_ScrambledWords=0]="RecoveryDeviceType_ScrambledWords",r[r.RecoveryDeviceType_Matrix=1]="RecoveryDeviceType_Matrix"}(r.exports.RecoveryDeviceType||(r.exports.RecoveryDeviceType={})),r.exports.Enum_WordRequestType=void 0,function(r){r[r.WordRequestType_Plain=0]="WordRequestType_Plain",r[r.WordRequestType_Matrix9=1]="WordRequestType_Matrix9",r[r.WordRequestType_Matrix6=2]="WordRequestType_Matrix6"}(r.exports.Enum_WordRequestType||(r.exports.Enum_WordRequestType={})),r.exports.SeedRequestType=void 0,function(r){r[r.SeedRequestType_Gen=0]="SeedRequestType_Gen",r[r.SeedRequestType_EncExport=1]="SeedRequestType_EncExport",r[r.SeedRequestType_EncImport=2]="SeedRequestType_EncImport"}(r.exports.SeedRequestType||(r.exports.SeedRequestType={})),r.exports.WL_OperationType=void 0,function(r){r[r.WL_OperationType_Add=0]="WL_OperationType_Add",r[r.WL_OperationType_Delete=1]="WL_OperationType_Delete",r[r.WL_OperationType_Inquire=2]="WL_OperationType_Inquire"}(r.exports.WL_OperationType||(r.exports.WL_OperationType={})),r.exports.ResourceType=void 0,function(r){r[r.WallPaper=0]="WallPaper",r[r.Nft=1]="Nft"}(r.exports.ResourceType||(r.exports.ResourceType={})),r.exports.NEMMosaicLevy=void 0,function(r){r[r.MosaicLevy_Absolute=1]="MosaicLevy_Absolute",r[r.MosaicLevy_Percentile=2]="MosaicLevy_Percentile"}(r.exports.NEMMosaicLevy||(r.exports.NEMMosaicLevy={})),r.exports.NEMSupplyChangeType=void 0,function(r){r[r.SupplyChange_Increase=1]="SupplyChange_Increase",r[r.SupplyChange_Decrease=2]="SupplyChange_Decrease"}(r.exports.NEMSupplyChangeType||(r.exports.NEMSupplyChangeType={})),r.exports.NEMModificationType=void 0,function(r){r[r.CosignatoryModification_Add=1]="CosignatoryModification_Add",r[r.CosignatoryModification_Delete=2]="CosignatoryModification_Delete"}(r.exports.NEMModificationType||(r.exports.NEMModificationType={})),r.exports.NEMImportanceTransferMode=void 0,function(r){r[r.ImportanceTransfer_Activate=1]="ImportanceTransfer_Activate",r[r.ImportanceTransfer_Deactivate=2]="ImportanceTransfer_Deactivate"}(r.exports.NEMImportanceTransferMode||(r.exports.NEMImportanceTransferMode={})),r.exports.SolanaOffChainMessageVersion=void 0,function(r){r[r.MESSAGE_VERSION_0=0]="MESSAGE_VERSION_0"}(r.exports.SolanaOffChainMessageVersion||(r.exports.SolanaOffChainMessageVersion={})),r.exports.SolanaOffChainMessageFormat=void 0,function(r){r[r.V0_RESTRICTED_ASCII=0]="V0_RESTRICTED_ASCII",r[r.V0_LIMITED_UTF8=1]="V0_LIMITED_UTF8"}(r.exports.SolanaOffChainMessageFormat||(r.exports.SolanaOffChainMessageFormat={})),r.exports.StellarAssetType=void 0,function(r){r[r.NATIVE=0]="NATIVE",r[r.ALPHANUM4=1]="ALPHANUM4",r[r.ALPHANUM12=2]="ALPHANUM12"}(r.exports.StellarAssetType||(r.exports.StellarAssetType={})),r.exports.StellarMemoType=void 0,function(r){r[r.NONE=0]="NONE",r[r.TEXT=1]="TEXT",r[r.ID=2]="ID",r[r.HASH=3]="HASH",r[r.RETURN=4]="RETURN"}(r.exports.StellarMemoType||(r.exports.StellarMemoType={})),r.exports.StellarSignerType=void 0,function(r){r[r.ACCOUNT=0]="ACCOUNT",r[r.PRE_AUTH=1]="PRE_AUTH",r[r.HASH=2]="HASH"}(r.exports.StellarSignerType||(r.exports.StellarSignerType={})),r.exports.StellarRequestType=void 0,function(r){r[r.CALL=0]="CALL",r[r.AUTH=1]="AUTH",r[r.EXT=2]="EXT"}(r.exports.StellarRequestType||(r.exports.StellarRequestType={})),r.exports.TezosContractType=void 0,function(r){r[r.Implicit=0]="Implicit",r[r.Originated=1]="Originated"}(r.exports.TezosContractType||(r.exports.TezosContractType={})),r.exports.TezosBallotType=void 0,function(r){r[r.Yay=0]="Yay",r[r.Nay=1]="Nay",r[r.Pass=2]="Pass"}(r.exports.TezosBallotType||(r.exports.TezosBallotType={})),r.exports.TonWalletVersion=void 0,function(r){r[r.V4R2=3]="V4R2"}(r.exports.TonWalletVersion||(r.exports.TonWalletVersion={})),r.exports.TonWorkChain=void 0,function(r){r[r.BASECHAIN=0]="BASECHAIN",r[r.MASTERCHAIN=1]="MASTERCHAIN"}(r.exports.TonWorkChain||(r.exports.TonWorkChain={})),r.exports.TronResourceCode=void 0,function(r){r[r.BANDWIDTH=0]="BANDWIDTH",r[r.ENERGY=1]="ENERGY",r[r.TRON_POWER=2]="TRON_POWER"}(r.exports.TronResourceCode||(r.exports.TronResourceCode={})),r.exports.TronMessageType=void 0,function(r){r[r.V1=1]="V1",r[r.V2=2]="V2"}(r.exports.TronMessageType||(r.exports.TronMessageType={})),r.exports.CommandFlags=void 0,function(r){r[r.Default=0]="Default",r[r.Factory_Only=1]="Factory_Only"}(r.exports.CommandFlags||(r.exports.CommandFlags={}));var W=Object.freeze({__proto__:null,get AptosTransactionType(){return r.exports.AptosTransactionType},get BinanceOrderType(){return r.exports.BinanceOrderType},get BinanceOrderSide(){return r.exports.BinanceOrderSide},get BinanceTimeInForce(){return r.exports.BinanceTimeInForce},get Enum_InputScriptType(){return r.exports.Enum_InputScriptType},get Enum_OutputScriptType(){return r.exports.Enum_OutputScriptType},get DecredStakingSpendType(){return r.exports.DecredStakingSpendType},get AmountUnit(){return r.exports.AmountUnit},get Enum_RequestType(){return r.exports.Enum_RequestType},get RebootType(){return r.exports.RebootType},get CardanoDerivationType(){return r.exports.CardanoDerivationType},get CardanoAddressType(){return r.exports.CardanoAddressType},get CardanoNativeScriptType(){return r.exports.CardanoNativeScriptType},get CardanoNativeScriptHashDisplayFormat(){return r.exports.CardanoNativeScriptHashDisplayFormat},get CardanoTxOutputSerializationFormat(){return r.exports.CardanoTxOutputSerializationFormat},get CardanoCertificateType(){return r.exports.CardanoCertificateType},get CardanoDRepType(){return r.exports.CardanoDRepType},get CardanoPoolRelayType(){return r.exports.CardanoPoolRelayType},get CardanoTxAuxiliaryDataSupplementType(){return r.exports.CardanoTxAuxiliaryDataSupplementType},get CardanoCVoteRegistrationFormat(){return r.exports.CardanoCVoteRegistrationFormat},get CardanoTxSigningMode(){return r.exports.CardanoTxSigningMode},get CardanoTxWitnessType(){return r.exports.CardanoTxWitnessType},get FailureType(){return r.exports.FailureType},get Enum_ButtonRequestType(){return r.exports.Enum_ButtonRequestType},get Enum_PinMatrixRequestType(){return r.exports.Enum_PinMatrixRequestType},get EthereumDefinitionType(){return r.exports.EthereumDefinitionType},get EthereumGnosisSafeTxOperation(){return r.exports.EthereumGnosisSafeTxOperation},get EthereumDataTypeOneKey(){return r.exports.EthereumDataTypeOneKey},get EthereumDataType(){return r.exports.EthereumDataType},get Enum_BackupType(){return r.exports.Enum_BackupType},get Enum_SafetyCheckLevel(){return r.exports.Enum_SafetyCheckLevel},get OneKeyDeviceType(){return r.exports.OneKeyDeviceType},get OneKeySeType(){return r.exports.OneKeySeType},get OneKeySEState(){return r.exports.OneKeySEState},get Enum_Capability(){return r.exports.Enum_Capability},get ExportType(){return r.exports.ExportType},get SdProtectOperationType(){return r.exports.SdProtectOperationType},get RecoveryDeviceType(){return r.exports.RecoveryDeviceType},get Enum_WordRequestType(){return r.exports.Enum_WordRequestType},get SeedRequestType(){return r.exports.SeedRequestType},get WL_OperationType(){return r.exports.WL_OperationType},get ResourceType(){return r.exports.ResourceType},get NEMMosaicLevy(){return r.exports.NEMMosaicLevy},get NEMSupplyChangeType(){return r.exports.NEMSupplyChangeType},get NEMModificationType(){return r.exports.NEMModificationType},get NEMImportanceTransferMode(){return r.exports.NEMImportanceTransferMode},get SolanaOffChainMessageVersion(){return r.exports.SolanaOffChainMessageVersion},get SolanaOffChainMessageFormat(){return r.exports.SolanaOffChainMessageFormat},get StellarAssetType(){return r.exports.StellarAssetType},get StellarMemoType(){return r.exports.StellarMemoType},get StellarSignerType(){return r.exports.StellarSignerType},get StellarRequestType(){return r.exports.StellarRequestType},get TezosContractType(){return r.exports.TezosContractType},get TezosBallotType(){return r.exports.TezosBallotType},get TonWalletVersion(){return r.exports.TonWalletVersion},get TonWorkChain(){return r.exports.TonWorkChain},get TronResourceCode(){return r.exports.TronResourceCode},get TronMessageType(){return r.exports.TronMessageType},get CommandFlags(){return r.exports.CommandFlags}});let $=new Set(["PassphraseAck","PinMatrixAck"]);l.util.Long=u,l.configure();var Y={check:V,buildOne:F,buildBuffers:H,buildEncodeBuffers:U,receiveOne:z,parseConfigure:w,decodeProtocol:B};r.exports.BUFFER_SIZE=k,r.exports.COMMON_HEADER_SIZE=M,r.exports.HEADER_SIZE=A,r.exports.LogBlockCommand=$,r.exports.MESSAGE_HEADER_BYTE=C,r.exports.MESSAGE_TOP_CHAR=O,r.exports.Messages=W,r.exports.default=Y}),parcelRequire.register("b3D3y",function(r,i){r.exports=parcelRequire("aZgSt")}),parcelRequire.register("aZgSt",function(r,i){var n=r.exports=parcelRequire("eBz1e");function s(r,i,s){return"function"==typeof i?(s=i,i=new n.Root):i||(i=new n.Root),i.load(r,s)}function a(r,i){return i||(i=new n.Root),i.loadSync(r)}n.build="light",n.load=s,n.loadSync=a,n.encoder=parcelRequire("lPaTT"),n.decoder=parcelRequire("gMZPL"),n.verifier=parcelRequire("fy57h"),n.converter=parcelRequire("lTYyc"),n.ReflectionObject=parcelRequire("hH6YY"),n.Namespace=parcelRequire("gMk2L"),n.Root=parcelRequire("8FZEM"),n.Enum=parcelRequire("h7nED"),n.Type=parcelRequire("gexVP"),n.Field=parcelRequire("5jxQS"),n.OneOf=parcelRequire("3XqRZ"),n.MapField=parcelRequire("0UDCv"),n.Service=parcelRequire("fPJWC"),n.Method=parcelRequire("5K2t0"),n.Message=parcelRequire("hJamA"),n.wrappers=parcelRequire("3fcYL"),n.types=parcelRequire("a2ADZ"),n.util=parcelRequire("8rMOR"),n.ReflectionObject._configure(n.Root),n.Namespace._configure(n.Type,n.Service,n.Enum),n.Root._configure(n.Type),n.Field._configure(n.Type)}),parcelRequire.register("eBz1e",function(r,i){var n=r.exports;function s(){n.util._configure(),n.Writer._configure(n.BufferWriter),n.Reader._configure(n.BufferReader)}n.build="minimal",n.Writer=parcelRequire("iczXS"),n.BufferWriter=parcelRequire("2mNXF"),n.Reader=parcelRequire("4ynb4"),n.BufferReader=parcelRequire("20Q1T"),n.util=parcelRequire("4o0TN"),n.rpc=parcelRequire("4jAjr"),n.roots=parcelRequire("aOCzj"),n.configure=s,s()}),parcelRequire.register("iczXS",function(r,i){r.exports=c;var n,s=parcelRequire("4o0TN"),a=s.LongBits,o=s.base64,d=s.utf8;function f(r,i,n){this.fn=r,this.len=i,this.next=void 0,this.val=n}function l(){}function u(r){this.head=r.head,this.tail=r.tail,this.len=r.len,this.next=r.states}function c(){this.len=0,this.head=new f(l,0,0),this.tail=this.head,this.states=null}var p=function(){return s.Buffer?function(){return(c.create=function(){return new n})()}:function(){return new c}};function h(r,i,n){i[n]=255&r}function g(r,i,n){for(;r>127;)i[n++]=127&r|128,r>>>=7;i[n]=r}function m(r,i){this.len=r,this.next=void 0,this.val=i}function v(r,i,n){for(;r.hi;)i[n++]=127&r.lo|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)i[n++]=127&r.lo|128,r.lo=r.lo>>>7;i[n++]=r.lo}function _(r,i,n){i[n]=255&r,i[n+1]=r>>>8&255,i[n+2]=r>>>16&255,i[n+3]=r>>>24}c.create=p(),c.alloc=function(r){return new s.Array(r)},s.Array!==Array&&(c.alloc=s.pool(c.alloc,s.Array.prototype.subarray)),c.prototype._push=function(r,i,n){return this.tail=this.tail.next=new f(r,i,n),this.len+=i,this},m.prototype=Object.create(f.prototype),m.prototype.fn=g,c.prototype.uint32=function(r){return this.len+=(this.tail=this.tail.next=new m((r>>>=0)<128?1:r<16384?2:r<2097152?3:r<268435456?4:5,r)).len,this},c.prototype.int32=function(r){return r<0?this._push(v,10,a.fromNumber(r)):this.uint32(r)},c.prototype.sint32=function(r){return this.uint32((r<<1^r>>31)>>>0)},c.prototype.uint64=function(r){var i=a.from(r);return this._push(v,i.length(),i)},c.prototype.int64=c.prototype.uint64,c.prototype.sint64=function(r){var i=a.from(r).zzEncode();return this._push(v,i.length(),i)},c.prototype.bool=function(r){return this._push(h,1,r?1:0)},c.prototype.fixed32=function(r){return this._push(_,4,r>>>0)},c.prototype.sfixed32=c.prototype.fixed32,c.prototype.fixed64=function(r){var i=a.from(r);return this._push(_,4,i.lo)._push(_,4,i.hi)},c.prototype.sfixed64=c.prototype.fixed64,c.prototype.float=function(r){return this._push(s.float.writeFloatLE,4,r)},c.prototype.double=function(r){return this._push(s.float.writeDoubleLE,8,r)};var b=s.Array.prototype.set?function(r,i,n){i.set(r,n)}:function(r,i,n){for(var s=0;s>>0;if(!i)return this._push(h,1,0);if(s.isString(r)){var n=c.alloc(i=o.length(r));o.decode(r,n,0),r=n}return this.uint32(i)._push(b,i,r)},c.prototype.string=function(r){var i=d.length(r);return i?this.uint32(i)._push(d.write,i,r):this._push(h,1,0)},c.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new f(l,0,0),this.len=0,this},c.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new f(l,0,0),this.len=0),this},c.prototype.ldelim=function(){var r=this.head,i=this.tail,n=this.len;return this.reset().uint32(n),n&&(this.tail.next=r.next,this.tail=i,this.len+=n),this},c.prototype.finish=function(){for(var r=this.head.next,i=this.constructor.alloc(this.len),n=0;r;)r.fn(r.val,i,n),n+=r.len,r=r.next;return i},c._configure=function(r){n=r,c.create=p(),n._configure()}}),parcelRequire.register("4o0TN",function(r,i){var n=r.exports;function s(r,i,n){for(var s=Object.keys(i),a=0;a0)},n.Buffer=function(){try{var r=n.inquire("buffer").Buffer;return r.prototype.utf8Write?r:null}catch(r){return null}}(),n._Buffer_from=null,n._Buffer_allocUnsafe=null,n.newBuffer=function(r){return"number"==typeof r?n.Buffer?n._Buffer_allocUnsafe(r):new n.Array(r):n.Buffer?n._Buffer_from(r):"undefined"==typeof Uint8Array?r:new Uint8Array(r)},n.Array="undefined"!=typeof Uint8Array?Uint8Array:Array,n.Long=n.global.dcodeIO&&n.global.dcodeIO.Long||n.global.Long||n.inquire("long"),n.key2Re=/^true|false|0|1$/,n.key32Re=/^-?(?:0|[1-9][0-9]*)$/,n.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,n.longToHash=function(r){return r?n.LongBits.from(r).toHash():n.LongBits.zeroHash},n.longFromHash=function(r,i){var s=n.LongBits.fromHash(r);return n.Long?n.Long.fromBits(s.lo,s.hi,i):s.toNumber(!!i)},n.merge=s,n.lcFirst=function(r){return r.charAt(0).toLowerCase()+r.substring(1)},n.newError=a,n.ProtocolError=a("ProtocolError"),n.oneOfGetter=function(r){for(var i={},n=0;n-1;--n)if(1===i[r[n]]&&void 0!==this[r[n]]&&null!==this[r[n]])return r[n]}},n.oneOfSetter=function(r){return function(i){for(var n=0;n1&&"="===r.charAt(i);)++n;return Math.ceil(3*r.length)/4-n};for(var s=Array(64),a=Array(123),o=0;o<64;)a[s[o]=o<26?o+65:o<52?o+71:o<62?o-4:o-59|43]=o++;n.encode=function(r,i,n){for(var a,o=null,d=[],f=0,l=0;i>2],a=(3&u)<<4,l=1;break;case 1:d[f++]=s[a|u>>4],a=(15&u)<<2,l=2;break;case 2:d[f++]=s[a|u>>6],d[f++]=s[63&u],l=0}f>8191&&((o||(o=[])).push(String.fromCharCode.apply(String,d)),f=0)}return(l&&(d[f++]=s[a],d[f++]=61,1===l&&(d[f++]=61)),o)?(f&&o.push(String.fromCharCode.apply(String,d.slice(0,f))),o.join("")):String.fromCharCode.apply(String,d.slice(0,f))};var d="invalid encoding";n.decode=function(r,i,n){for(var s,o=n,f=0,l=0;l1)break;if(void 0===(u=a[u]))throw Error(d);switch(f){case 0:s=u,f=1;break;case 1:i[n++]=s<<2|(48&u)>>4,s=u,f=2;break;case 2:i[n++]=(15&s)<<4|(60&u)>>2,s=u,f=3;break;case 3:i[n++]=(3&s)<<6|u,f=0}}if(1===f)throw Error(d);return n-o},n.test=function(r){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(r)}}),parcelRequire.register("6PPVb",function(r,i){function n(){this._listeners={}}r.exports=n,n.prototype.on=function(r,i,n){return(this._listeners[r]||(this._listeners[r]=[])).push({fn:i,ctx:n||this}),this},n.prototype.off=function(r,i){if(void 0===r)this._listeners={};else if(void 0===i)this._listeners[r]=[];else for(var n=this._listeners[r],s=0;s0?0:2147483648,n,s);else if(isNaN(i))r(2143289344,n,s);else if(i>34028234663852886e22)r((a<<31|2139095040)>>>0,n,s);else if(i<11754943508222875e-54)r((a<<31|Math.round(i/1401298464324817e-60))>>>0,n,s);else{var o=Math.floor(Math.log(i)/Math.LN2),d=8388607&Math.round(i*Math.pow(2,-o)*8388608);r((a<<31|o+127<<23|d)>>>0,n,s)}}function n(r,i,n){var s=r(i,n),a=(s>>31)*2+1,o=s>>>23&255,d=8388607&s;return 255===o?d?NaN:a*(1/0):0===o?1401298464324817e-60*a*d:a*Math.pow(2,o-150)*(d+8388608)}r.writeFloatLE=i.bind(null,s),r.writeFloatBE=i.bind(null,a),r.readFloatLE=n.bind(null,o),r.readFloatBE=n.bind(null,d)}(),"undefined"!=typeof Float64Array?function(){var i=new Float64Array([-0]),n=new Uint8Array(i.buffer),s=128===n[7];function a(r,s,a){i[0]=r,s[a]=n[0],s[a+1]=n[1],s[a+2]=n[2],s[a+3]=n[3],s[a+4]=n[4],s[a+5]=n[5],s[a+6]=n[6],s[a+7]=n[7]}function o(r,s,a){i[0]=r,s[a]=n[7],s[a+1]=n[6],s[a+2]=n[5],s[a+3]=n[4],s[a+4]=n[3],s[a+5]=n[2],s[a+6]=n[1],s[a+7]=n[0]}function d(r,s){return n[0]=r[s],n[1]=r[s+1],n[2]=r[s+2],n[3]=r[s+3],n[4]=r[s+4],n[5]=r[s+5],n[6]=r[s+6],n[7]=r[s+7],i[0]}function f(r,s){return n[7]=r[s],n[6]=r[s+1],n[5]=r[s+2],n[4]=r[s+3],n[3]=r[s+4],n[2]=r[s+5],n[1]=r[s+6],n[0]=r[s+7],i[0]}r.writeDoubleLE=s?a:o,r.writeDoubleBE=s?o:a,r.readDoubleLE=s?d:f,r.readDoubleBE=s?f:d}():function(){function i(r,i,n,s,a,o){var d,f=s<0?1:0;if(f&&(s=-s),0===s)r(0,a,o+i),r(1/s>0?0:2147483648,a,o+n);else if(isNaN(s))r(0,a,o+i),r(2146959360,a,o+n);else if(s>17976931348623157e292)r(0,a,o+i),r((f<<31|2146435072)>>>0,a,o+n);else if(s<22250738585072014e-324)r((d=s/5e-324)>>>0,a,o+i),r((f<<31|d/4294967296)>>>0,a,o+n);else{var l=Math.floor(Math.log(s)/Math.LN2);1024===l&&(l=1023),r(4503599627370496*(d=s*Math.pow(2,-l))>>>0,a,o+i),r((f<<31|l+1023<<20|1048576*d&1048575)>>>0,a,o+n)}}function n(r,i,n,s,a){var o=r(s,a+i),d=r(s,a+n),f=(d>>31)*2+1,l=d>>>20&2047,u=4294967296*(1048575&d)+o;return 2047===l?u?NaN:f*(1/0):0===l?5e-324*f*u:f*Math.pow(2,l-1075)*(u+4503599627370496)}r.writeDoubleLE=i.bind(null,s,0,4),r.writeDoubleBE=i.bind(null,a,4,0),r.readDoubleLE=n.bind(null,o,0,4),r.readDoubleBE=n.bind(null,d,4,0)}(),r}function s(r,i,n){i[n]=255&r,i[n+1]=r>>>8&255,i[n+2]=r>>>16&255,i[n+3]=r>>>24}function a(r,i,n){i[n]=r>>>24,i[n+1]=r>>>16&255,i[n+2]=r>>>8&255,i[n+3]=255&r}function o(r,i){return(r[i]|r[i+1]<<8|r[i+2]<<16|r[i+3]<<24)>>>0}function d(r,i){return(r[i]<<24|r[i+1]<<16|r[i+2]<<8|r[i+3])>>>0}r.exports=n(n)}),parcelRequire.register("h5eRL",function(module,exports){function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}module.exports=inquire}),parcelRequire.register("2QO2m",function(r,i){var n=r.exports;n.length=function(r){for(var i=0,n=0,s=0;s191&&s<224?o[d++]=(31&s)<<6|63&r[i++]:s>239&&s<365?(s=((7&s)<<18|(63&r[i++])<<12|(63&r[i++])<<6|63&r[i++])-65536,o[d++]=55296+(s>>10),o[d++]=56320+(1023&s)):o[d++]=(15&s)<<12|(63&r[i++])<<6|63&r[i++],d>8191&&((a||(a=[])).push(String.fromCharCode.apply(String,o)),d=0);return a?(d&&a.push(String.fromCharCode.apply(String,o.slice(0,d))),a.join("")):String.fromCharCode.apply(String,o.slice(0,d))},n.write=function(r,i,n){for(var s,a,o=n,d=0;d>6|192:((64512&s)==55296&&(64512&(a=r.charCodeAt(d+1)))==56320?(s=65536+((1023&s)<<10)+(1023&a),++d,i[n++]=s>>18|240,i[n++]=s>>12&63|128):i[n++]=s>>12|224,i[n++]=s>>6&63|128),i[n++]=63&s|128);return n-o}}),parcelRequire.register("9Kq4z",function(r,i){function n(r,i,n){var s=n||8192,a=s>>>1,o=null,d=s;return function(n){if(n<1||n>a)return r(n);d+n>s&&(o=r(s),d=0);var f=i.call(o,d,d+=n);return 7&d&&(d=(7|d)+1),f}}r.exports=n}),parcelRequire.register("bf71D",function(r,i){r.exports=s;var n=parcelRequire("4o0TN");function s(r,i){this.lo=r>>>0,this.hi=i>>>0}var a=s.zero=new s(0,0);a.toNumber=function(){return 0},a.zzEncode=a.zzDecode=function(){return this},a.length=function(){return 1};var o=s.zeroHash="\x00\x00\x00\x00\x00\x00\x00\x00";s.fromNumber=function(r){if(0===r)return a;var i=r<0;i&&(r=-r);var n=r>>>0,o=(r-n)/4294967296>>>0;return i&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new s(n,o)},s.from=function(r){if("number"==typeof r)return s.fromNumber(r);if(n.isString(r)){if(!n.Long)return s.fromNumber(parseInt(r,10));r=n.Long.fromString(r)}return r.low||r.high?new s(r.low>>>0,r.high>>>0):a},s.prototype.toNumber=function(r){if(!r&&this.hi>>>31){var i=~this.lo+1>>>0,n=~this.hi>>>0;return i||(n=n+1>>>0),-(i+4294967296*n)}return this.lo+4294967296*this.hi},s.prototype.toLong=function(r){return n.Long?new n.Long(0|this.lo,0|this.hi,!!r):{low:0|this.lo,high:0|this.hi,unsigned:!!r}};var d=String.prototype.charCodeAt;s.fromHash=function(r){return r===o?a:new s((d.call(r,0)|d.call(r,1)<<8|d.call(r,2)<<16|d.call(r,3)<<24)>>>0,(d.call(r,4)|d.call(r,5)<<8|d.call(r,6)<<16|d.call(r,7)<<24)>>>0)},s.prototype.toHash=function(){return String.fromCharCode(255&this.lo,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,255&this.hi,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},s.prototype.zzEncode=function(){var r=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^r)>>>0,this.lo=(this.lo<<1^r)>>>0,this},s.prototype.zzDecode=function(){var r=-(1&this.lo);return this.lo=((this.lo>>>1|this.hi<<31)^r)>>>0,this.hi=(this.hi>>>1^r)>>>0,this},s.prototype.length=function(){var r=this.lo,i=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return 0===n?0===i?r<16384?r<128?1:2:r<2097152?3:4:i<16384?i<128?5:6:i<2097152?7:8:n<128?9:10}}),parcelRequire.register("2mNXF",function(r,i){r.exports=a;var n=parcelRequire("iczXS");(a.prototype=Object.create(n.prototype)).constructor=a;var s=parcelRequire("4o0TN");function a(){n.call(this)}function o(r,i,n){r.length<40?s.utf8.write(r,i,n):i.utf8Write?i.utf8Write(r,n):i.write(r,n)}a._configure=function(){a.alloc=s._Buffer_allocUnsafe,a.writeBytesBuffer=s.Buffer&&s.Buffer.prototype instanceof Uint8Array&&"set"===s.Buffer.prototype.set.name?function(r,i,n){i.set(r,n)}:function(r,i,n){if(r.copy)r.copy(i,n,0,r.length);else for(var s=0;s>>0;return this.uint32(i),i&&this._push(a.writeBytesBuffer,i,r),this},a.prototype.string=function(r){var i=s.Buffer.byteLength(r);return this.uint32(i),i&&this._push(o,i,r),this},a._configure()}),parcelRequire.register("4ynb4",function(r,i){r.exports=f;var n,s=parcelRequire("4o0TN"),a=s.LongBits,o=s.utf8;function d(r,i){return RangeError("index out of range: "+r.pos+" + "+(i||1)+" > "+r.len)}function f(r){this.buf=r,this.pos=0,this.len=r.length}var l="undefined"!=typeof Uint8Array?function(r){if(r instanceof Uint8Array||Array.isArray(r))return new f(r);throw Error("illegal buffer")}:function(r){if(Array.isArray(r))return new f(r);throw Error("illegal buffer")},u=function(){return s.Buffer?function(r){return(f.create=function(r){return s.Buffer.isBuffer(r)?new n(r):l(r)})(r)}:l};function c(){var r=new a(0,0),i=0;if(this.len-this.pos>4){for(;i<4;++i)if(r.lo=(r.lo|(127&this.buf[this.pos])<<7*i)>>>0,this.buf[this.pos++]<128)return r;if(r.lo=(r.lo|(127&this.buf[this.pos])<<28)>>>0,r.hi=(r.hi|(127&this.buf[this.pos])>>4)>>>0,this.buf[this.pos++]<128)return r;i=0}else{for(;i<3;++i){if(this.pos>=this.len)throw d(this);if(r.lo=(r.lo|(127&this.buf[this.pos])<<7*i)>>>0,this.buf[this.pos++]<128)return r}return r.lo=(r.lo|(127&this.buf[this.pos++])<<7*i)>>>0,r}if(this.len-this.pos>4){for(;i<5;++i)if(r.hi=(r.hi|(127&this.buf[this.pos])<<7*i+3)>>>0,this.buf[this.pos++]<128)return r}else for(;i<5;++i){if(this.pos>=this.len)throw d(this);if(r.hi=(r.hi|(127&this.buf[this.pos])<<7*i+3)>>>0,this.buf[this.pos++]<128)return r}throw Error("invalid varint encoding")}function p(r,i){return(r[i-4]|r[i-3]<<8|r[i-2]<<16|r[i-1]<<24)>>>0}function h(){if(this.pos+8>this.len)throw d(this,8);return new a(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}f.create=u(),f.prototype._slice=s.Array.prototype.subarray||s.Array.prototype.slice,f.prototype.uint32=function(){var r=4294967295;return function(){if(r=(127&this.buf[this.pos])>>>0,this.buf[this.pos++]<128||(r=(r|(127&this.buf[this.pos])<<7)>>>0,this.buf[this.pos++]<128)||(r=(r|(127&this.buf[this.pos])<<14)>>>0,this.buf[this.pos++]<128)||(r=(r|(127&this.buf[this.pos])<<21)>>>0,this.buf[this.pos++]<128)||(r=(r|(15&this.buf[this.pos])<<28)>>>0,this.buf[this.pos++]<128))return r;if((this.pos+=5)>this.len)throw this.pos=this.len,d(this,10);return r}}(),f.prototype.int32=function(){return 0|this.uint32()},f.prototype.sint32=function(){var r=this.uint32();return r>>>1^-(1&r)|0},f.prototype.bool=function(){return 0!==this.uint32()},f.prototype.fixed32=function(){if(this.pos+4>this.len)throw d(this,4);return p(this.buf,this.pos+=4)},f.prototype.sfixed32=function(){if(this.pos+4>this.len)throw d(this,4);return 0|p(this.buf,this.pos+=4)},f.prototype.float=function(){if(this.pos+4>this.len)throw d(this,4);var r=s.float.readFloatLE(this.buf,this.pos);return this.pos+=4,r},f.prototype.double=function(){if(this.pos+8>this.len)throw d(this,4);var r=s.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,r},f.prototype.bytes=function(){var r=this.uint32(),i=this.pos,n=this.pos+r;if(n>this.len)throw d(this,r);return(this.pos+=r,Array.isArray(this.buf))?this.buf.slice(i,n):i===n?new this.buf.constructor(0):this._slice.call(this.buf,i,n)},f.prototype.string=function(){var r=this.bytes();return o.read(r,0,r.length)},f.prototype.skip=function(r){if("number"==typeof r){if(this.pos+r>this.len)throw d(this,r);this.pos+=r}else do if(this.pos>=this.len)throw d(this);while(128&this.buf[this.pos++])return this},f.prototype.skipType=function(r){switch(r){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;4!=(r=7&this.uint32());)this.skipType(r);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+r+" at offset "+this.pos)}return this},f._configure=function(r){n=r,f.create=u(),n._configure();var i=s.Long?"toLong":"toNumber";s.merge(f.prototype,{int64:function(){return c.call(this)[i](!1)},uint64:function(){return c.call(this)[i](!0)},sint64:function(){return c.call(this).zzDecode()[i](!1)},fixed64:function(){return h.call(this)[i](!0)},sfixed64:function(){return h.call(this)[i](!1)}})}}),parcelRequire.register("20Q1T",function(r,i){r.exports=a;var n=parcelRequire("4ynb4");(a.prototype=Object.create(n.prototype)).constructor=a;var s=parcelRequire("4o0TN");function a(r){n.call(this,r)}a._configure=function(){s.Buffer&&(a.prototype._slice=s.Buffer.prototype.slice)},a.prototype.string=function(){var r=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+r,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+r,this.len))},a._configure()}),parcelRequire.register("4jAjr",function(r,i){r.exports.Service=parcelRequire("iswUz")}),parcelRequire.register("iswUz",function(r,i){r.exports=s;var n=parcelRequire("4o0TN");function s(r,i,s){if("function"!=typeof r)throw TypeError("rpcImpl must be a function");n.EventEmitter.call(this),this.rpcImpl=r,this.requestDelimited=!!i,this.responseDelimited=!!s}(s.prototype=Object.create(n.EventEmitter.prototype)).constructor=s,s.prototype.rpcCall=function r(i,s,a,o,d){if(!o)throw TypeError("request must be specified");var f=this;if(!d)return n.asPromise(r,f,i,s,a,o);if(!f.rpcImpl){setTimeout(function(){d(Error("already ended"))},0);return}try{return f.rpcImpl(i,s[f.requestDelimited?"encodeDelimited":"encode"](o).finish(),function(r,n){if(r)return f.emit("error",r,i),d(r);if(null===n){f.end(!0);return}if(!(n instanceof a))try{n=a[f.responseDelimited?"decodeDelimited":"decode"](n)}catch(r){return f.emit("error",r,i),d(r)}return f.emit("data",n,i),d(null,n)})}catch(r){f.emit("error",r,i),setTimeout(function(){d(r)},0);return}},s.prototype.end=function(r){return this.rpcImpl&&(r||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}}),parcelRequire.register("aOCzj",function(r,i){r.exports={}}),parcelRequire.register("lPaTT",function(r,i){r.exports=d;var n=parcelRequire("h7nED"),s=parcelRequire("a2ADZ"),a=parcelRequire("8rMOR");function o(r,i,n,s){return i.resolvedType.group?r("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",n,s,(i.id<<3|3)>>>0,(i.id<<3|4)>>>0):r("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",n,s,(i.id<<3|2)>>>0)}function d(r){for(var i,d,f=a.codegen(["m","w"],r.name+"$encode")("if(!w)")("w=Writer.create()"),l=r.fieldsArray.slice().sort(a.compareFieldsById),i=0;i>>0,8|s.mapKey[u.keyType],u.keyType),void 0===h?f("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",c,d):f(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|h,p,d),f("}")("}")):u.repeated?(f("if(%s!=null&&%s.length){",d,d),u.packed&&void 0!==s.packed[p]?f("w.uint32(%i).fork()",(u.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",d)("w.%s(%s[i])",p,d)("w.ldelim()"):(f("for(var i=0;i<%s.length;++i)",d),void 0===h?o(f,u,c,d+"[i]"):f("w.uint32(%i).%s(%s[i])",(u.id<<3|h)>>>0,p,d)),f("}")):(u.optional&&f("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",d,u.name),void 0===h?o(f,u,c,d):f("w.uint32(%i).%s(%s)",(u.id<<3|h)>>>0,p,d))}return f("return w")}}),parcelRequire.register("h7nED",function(r,i){r.exports=o;var n=parcelRequire("hH6YY");((o.prototype=Object.create(n.prototype)).constructor=o).className="Enum";var s=parcelRequire("gMk2L"),a=parcelRequire("8rMOR");function o(r,i,s,a,o){if(n.call(this,r,s),i&&"object"!=typeof i)throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=a,this.comments=o||{},this.reserved=void 0,i)for(var d=Object.keys(i),f=0;f0)r[a]=s(r[a]||{},i,n);else{var o=r[a];o&&(n=[].concat(o).concat(n)),r[a]=n}return r}if("object"!=typeof r)throw TypeError("dst must be an object");if(!i)throw TypeError("path must be specified");return s(r,i=i.split("."),n)},Object.defineProperty(a,"decorateRoot",{get:function(){return o.decorated||(o.decorated=new(parcelRequire("8FZEM")))}})}),parcelRequire.register("6OhfU",function(r,i){function n(r,i){"string"==typeof r&&(i=r,r=void 0);var s=[];function a(r){if("string"!=typeof r){var i=o();if(n.verbose&&console.log("codegen: "+i),i="return "+i,r){for(var d=Object.keys(r),f=Array(d.length+1),l=Array(d.length),u=0;u0&&".."!==i[o-1]?i.splice(--o,2):n?i.splice(o,1):++o:"."===i[o]?i.splice(o,1):++o;return a+i.join("/")};n.resolve=function(r,i,n){return(n||(i=a(i)),s(i))?i:(n||(r=a(r)),(r=r.replace(/(?:\/|^)[^/]+$/,"")).length?a(r+"/"+i):i)}}),parcelRequire.register("gexVP",function(r,i){r.exports=b;var n=parcelRequire("gMk2L");((b.prototype=Object.create(n.prototype)).constructor=b).className="Type";var s=parcelRequire("h7nED"),a=parcelRequire("3XqRZ"),o=parcelRequire("5jxQS"),d=parcelRequire("0UDCv"),f=parcelRequire("fPJWC"),l=parcelRequire("hJamA"),u=parcelRequire("4ynb4"),c=parcelRequire("iczXS"),p=parcelRequire("8rMOR"),h=parcelRequire("lPaTT"),g=parcelRequire("gMZPL"),m=parcelRequire("fy57h"),v=parcelRequire("lTYyc"),_=parcelRequire("3fcYL");function b(r,i){n.call(this,r,i),this.fields={},this.oneofs=void 0,this.extensions=void 0,this.reserved=void 0,this.group=void 0,this._fieldsById=null,this._fieldsArray=null,this._oneofsArray=null,this._ctor=null}function T(r){return r._fieldsById=r._fieldsArray=r._oneofsArray=null,delete r.encode,delete r.decode,delete r.verify,r}Object.defineProperties(b.prototype,{fieldsById:{get:function(){if(this._fieldsById)return this._fieldsById;this._fieldsById={};for(var r=Object.keys(this.fields),i=0;ii)return!0}return!1},c.isReservedName=function(r,i){if(r){for(var n=0;n0;){var s=r.shift();if(n.nested&&n.nested[s]){if(!((n=n.nested[s])instanceof c))throw Error("path conflicts with non-namespace objects")}else n.add(n=new c(s))}return i&&n.addJSON(i),n},c.prototype.resolveAll=function(){for(var r=this.nestedArray,i=0;i-1)return s}else if(s instanceof c&&(s=s.lookup(r.slice(1),i,!0)))return s}else for(var a=0;a-1&&this.oneof.splice(i,1),r.partOf=null,this},o.prototype.onAdd=function(r){n.prototype.onAdd.call(this,r);for(var i=this,s=0;s>>3){");for(var d=0;d>>3){")("case 1: k=r.%s(); break",f.keyType)("case 2:"),void 0===s.basic[l]?i("value=types[%i].decode(r,r.uint32())",d):i("value=r.%s()",l),i("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),i(void 0!==s.long[f.keyType]?'%s[typeof k==="object"?util.longToHash(k):k]=value':"%s[k]=value",u)):f.repeated?(i("if(!(%s&&%s.length))",u,u)("%s=[]",u),void 0!==s.packed[l]&&i("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0",a,a);break;case"int32":case"sint32":case"sfixed32":r("m%s=d%s|0",a,a);break;case"uint64":l=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":r("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",a,a,l)('else if(typeof d%s==="string")',a)("m%s=parseInt(d%s,10)",a,a)('else if(typeof d%s==="number")',a)("m%s=d%s",a,a)('else if(typeof d%s==="object")',a)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",a,a,a,l?"true":"");break;case"bytes":r('if(typeof d%s==="string")',a)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",a,a,a)("else if(d%s.length)",a)("m%s=d%s",a,a);break;case"string":r("m%s=String(d%s)",a,a);break;case"bool":r("m%s=Boolean(d%s)",a,a)}}return r}function d(r,i,n,a){if(i.resolvedType)i.resolvedType instanceof s?r("d%s=o.enums===String?types[%i].values[m%s]:m%s",a,n,a,a):r("d%s=types[%i].toObject(m%s,o)",a,n,a);else{var o=!1;switch(i.type){case"double":case"float":r("d%s=o.json&&!isFinite(m%s)?String(m%s):m%s",a,a,a,a);break;case"uint64":o=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":r('if(typeof m%s==="number")',a)("d%s=o.longs===String?String(m%s):m%s",a,a,a)("else")("d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s",a,a,a,a,o?"true":"",a);break;case"bytes":r("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",a,a,a,a,a);break;default:r("d%s=m%s",a,a)}}return r}n.fromObject=function(r){var i=r.fieldsArray,n=a.codegen(["d"],r.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!i.length)return n("return new this.ctor");n("var m=new this.ctor");for(var d=0;d-1){var n=r.substring(i);if(n in a)return n}return null}function h(r,i){try{if(u.isString(i)&&"{"===i.charAt(0)&&(i=JSON.parse(i)),u.isString(i)){s.filename=r;var a,o=s(i,d,n),p=0;if(o.imports)for(;p-1)){if(d.files.push(r),r in a){f?h(r,a[r]):(++m,setTimeout(function(){--m,h(r,a[r])}));return}if(f){var n;try{n=u.fs.readFileSync(r).toString("utf8")}catch(r){i||l(r);return}h(r,n)}else++m,d.fetch(r,function(n,s){if(--m,o){if(n){i?m||l(null,d):l(n);return}h(r,s)}})}}var m=0;u.isString(i)&&(i=[i]);for(var v,_=0;_-1&&this.deferred.splice(i,1)}}}else if(r instanceof f)h.test(r.name)&&delete r.parent[r.name];else if(r instanceof o){for(var n=0;n>>=0,(a=0<=r&&r<256)&&(s=d[r]))?s:(n=u(r,(0|r)<0?-1:0,!0),a&&(d[r]=n),n):(r|=0,(a=-128<=r&&r<128)&&(s=o[r]))?s:(n=u(r,r<0?-1:0,!1),a&&(o[r]=n),n)}function l(r,i){if(isNaN(r))return i?T:b;if(i){if(r<0)return T;if(r>=m)return O}else{if(r<=-v)return C;if(r+1>=v)return I}return r<0?l(-r,i).neg():u(r%g|0,r/g|0,i)}function u(r,i,n){return new s(r,i,n)}s.fromInt=f,s.fromNumber=l,s.fromBits=u;var c=Math.pow;function p(r,i,n){if(0===r.length)throw Error("empty string");if("NaN"===r||"Infinity"===r||"+Infinity"===r||"-Infinity"===r)return b;if("number"==typeof i?(n=i,i=!1):i=!!i,(n=n||10)<2||360)throw Error("interior hyphen");if(0===s)return p(r.substring(1),i,n).neg();for(var s,a=l(c(n,8)),o=b,d=0;d>>0:this.low},A.toNumber=function(){return this.unsigned?(this.high>>>0)*g+(this.low>>>0):this.high*g+(this.low>>>0)},A.toString=function(r){if((r=r||10)<2||36>>0).toString(r);if((o=f).isZero())return u+d;for(;u.length<6;)u="0"+u;d=""+u+d}},A.getHighBits=function(){return this.high},A.getHighBitsUnsigned=function(){return this.high>>>0},A.getLowBits=function(){return this.low},A.getLowBitsUnsigned=function(){return this.low>>>0},A.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var r=0!=this.high?this.high:this.low,i=31;i>0&&(r&1<=0},A.isOdd=function(){return(1&this.low)==1},A.isEven=function(){return(1&this.low)==0},A.equals=function(r){return a(r)||(r=h(r)),(this.unsigned===r.unsigned||this.high>>>31!=1||r.high>>>31!=1)&&this.high===r.high&&this.low===r.low},A.eq=A.equals,A.notEquals=function(r){return!this.eq(r)},A.neq=A.notEquals,A.ne=A.notEquals,A.lessThan=function(r){return 0>this.comp(r)},A.lt=A.lessThan,A.lessThanOrEqual=function(r){return 0>=this.comp(r)},A.lte=A.lessThanOrEqual,A.le=A.lessThanOrEqual,A.greaterThan=function(r){return this.comp(r)>0},A.gt=A.greaterThan,A.greaterThanOrEqual=function(r){return this.comp(r)>=0},A.gte=A.greaterThanOrEqual,A.ge=A.greaterThanOrEqual,A.compare=function(r){if(a(r)||(r=h(r)),this.eq(r))return 0;var i=this.isNegative(),n=r.isNegative();return i&&!n?-1:!i&&n?1:this.unsigned?r.high>>>0>this.high>>>0||r.high===this.high&&r.low>>>0>this.low>>>0?-1:1:this.sub(r).isNegative()?-1:1},A.comp=A.compare,A.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(E)},A.neg=A.negate,A.add=function(r){a(r)||(r=h(r));var i,n,s=this.high>>>16,o=65535&this.high,d=this.low>>>16,f=65535&this.low,l=r.high>>>16,c=65535&r.high,p=r.low>>>16,g=65535&r.low,m=0,v=0;return i=0+((n=0+(f+g))>>>16),n&=65535,i+=d+p,v+=i>>>16,i&=65535,v+=o+c,m+=v>>>16,v&=65535,m+=s+l,u(i<<16|n,(m&=65535)<<16|v,this.unsigned)},A.subtract=function(r){return a(r)||(r=h(r)),this.add(r.neg())},A.sub=A.subtract,A.multiply=function(r){if(this.isZero())return b;if(a(r)||(r=h(r)),n)return u(n.mul(this.low,this.high,r.low,r.high),n.get_high(),this.unsigned);if(r.isZero())return b;if(this.eq(C))return r.isOdd()?C:b;if(r.eq(C))return this.isOdd()?C:b;if(this.isNegative())return r.isNegative()?this.neg().mul(r.neg()):this.neg().mul(r).neg();if(r.isNegative())return this.mul(r.neg()).neg();if(this.lt(_)&&r.lt(_))return l(this.toNumber()*r.toNumber(),this.unsigned);var i,s,o=this.high>>>16,d=65535&this.high,f=this.low>>>16,c=65535&this.low,p=r.high>>>16,g=65535&r.high,m=r.low>>>16,v=65535&r.low,T=0,E=0;return i=0+((s=0+c*v)>>>16),s&=65535,i+=f*v,E+=i>>>16,i&=65535,i+=c*m,E+=i>>>16,i&=65535,E+=d*v,T+=E>>>16,E&=65535,E+=f*m,T+=E>>>16,E&=65535,E+=c*g,T+=E>>>16,E&=65535,T+=o*v+d*m+f*g+c*p,u(i<<16|s,(T&=65535)<<16|E,this.unsigned)},A.mul=A.multiply,A.divide=function(r){if(a(r)||(r=h(r)),r.isZero())throw Error("division by zero");if(n){var i,s,o;return this.unsigned||-2147483648!==this.high||-1!==r.low||-1!==r.high?u((this.unsigned?n.div_u:n.div_s)(this.low,this.high,r.low,r.high),n.get_high(),this.unsigned):this}if(this.isZero())return this.unsigned?T:b;if(this.unsigned){if(r.unsigned||(r=r.toUnsigned()),r.gt(this))return T;if(r.gt(this.shru(1)))return w;o=T}else{if(this.eq(C))return r.eq(E)||r.eq(S)?C:r.eq(C)?E:(i=this.shr(1).div(r).shl(1)).eq(b)?r.isNegative()?E:S:(s=this.sub(r.mul(i)),o=i.add(s.div(r)));if(r.eq(C))return this.unsigned?T:b;if(this.isNegative())return r.isNegative()?this.neg().div(r.neg()):this.neg().div(r).neg();if(r.isNegative())return this.div(r.neg()).neg();o=b}for(s=this;s.gte(r);){for(var d=Math.ceil(Math.log(i=Math.max(1,Math.floor(s.toNumber()/r.toNumber())))/Math.LN2),f=d<=48?1:c(2,d-48),p=l(i),g=p.mul(r);g.isNegative()||g.gt(s);)i-=f,g=(p=l(i,this.unsigned)).mul(r);p.isZero()&&(p=E),o=o.add(p),s=s.sub(g)}return o},A.div=A.divide,A.modulo=function(r){return(a(r)||(r=h(r)),n)?u((this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,r.low,r.high),n.get_high(),this.unsigned):this.sub(this.div(r).mul(r))},A.mod=A.modulo,A.rem=A.modulo,A.not=function(){return u(~this.low,~this.high,this.unsigned)},A.and=function(r){return a(r)||(r=h(r)),u(this.low&r.low,this.high&r.high,this.unsigned)},A.or=function(r){return a(r)||(r=h(r)),u(this.low|r.low,this.high|r.high,this.unsigned)},A.xor=function(r){return a(r)||(r=h(r)),u(this.low^r.low,this.high^r.high,this.unsigned)},A.shiftLeft=function(r){return(a(r)&&(r=r.toInt()),0==(r&=63))?this:r<32?u(this.low<>>32-r,this.unsigned):u(0,this.low<>>r|this.high<<32-r,this.high>>r,this.unsigned):u(this.high>>r-32,this.high>=0?0:-1,this.unsigned)},A.shr=A.shiftRight,A.shiftRightUnsigned=function(r){if(a(r)&&(r=r.toInt()),0==(r&=63))return this;var i=this.high;return r<32?u(this.low>>>r|i<<32-r,i>>>r,this.unsigned):32===r?u(i,0,this.unsigned):u(i>>>r-32,0,this.unsigned)},A.shru=A.shiftRightUnsigned,A.shr_u=A.shiftRightUnsigned,A.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},A.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},A.toBytes=function(r){return r?this.toBytesLE():this.toBytesBE()},A.toBytesLE=function(){var r=this.high,i=this.low;return[255&i,i>>>8&255,i>>>16&255,i>>>24,255&r,r>>>8&255,r>>>16&255,r>>>24]},A.toBytesBE=function(){var r=this.high,i=this.low;return[r>>>24,r>>>16&255,r>>>8&255,255&r,i>>>24,i>>>16&255,i>>>8&255,255&i]},s.fromBytes=function(r,i,n){return n?s.fromBytesLE(r,i):s.fromBytesBE(r,i)},s.fromBytesLE=function(r,i){return new s(r[0]|r[1]<<8|r[2]<<16|r[3]<<24,r[4]|r[5]<<8|r[6]<<16|r[7]<<24,i)},s.fromBytesBE=function(r,i){return new s(r[4]<<24|r[5]<<16|r[6]<<8|r[7],r[0]<<24|r[1]<<16|r[2]<<8|r[3],i)}}),parcelRequire.register("2kkR6",function(r,i){!function(i,n){"function"==typeof define&&define.amd?define(["long"],n):r&&r.exports?r.exports=function(){var r;try{r=parcelRequire("kjZyY")}catch(r){}return n(r)}():(i.dcodeIO=i.dcodeIO||{}).ByteBuffer=n(i.dcodeIO.Long)}(this,function(r){var i=function(r,n,a){if(void 0===r&&(r=i.DEFAULT_CAPACITY),void 0===n&&(n=i.DEFAULT_ENDIAN),void 0===a&&(a=i.DEFAULT_NOASSERT),!a){if((r|=0)<0)throw RangeError("Illegal capacity");n=!!n,a=!!a}this.buffer=0===r?s:new ArrayBuffer(r),this.view=0===r?null:new Uint8Array(this.buffer),this.offset=0,this.markedOffset=-1,this.limit=r,this.littleEndian=n,this.noAssert=a};i.VERSION="5.0.1",i.LITTLE_ENDIAN=!0,i.BIG_ENDIAN=!1,i.DEFAULT_CAPACITY=16,i.DEFAULT_ENDIAN=i.BIG_ENDIAN,i.DEFAULT_NOASSERT=!1,i.Long=r||null;var n=i.prototype;n.__isByteBuffer__,Object.defineProperty(n,"__isByteBuffer__",{value:!0,enumerable:!1,configurable:!1});var s=new ArrayBuffer(0),a=String.fromCharCode;function o(r){var i=0;return function(){return i1024&&(i.push(a.apply(String,r)),r.length=0),Array.prototype.push.apply(r,arguments)}}function f(r,i,n,s,a){var o,d,f=8*a-s-1,l=(1<>1,c=-7,p=n?a-1:0,h=n?-1:1,g=r[i+p];for(p+=h,o=g&(1<<-c)-1,g>>=-c,c+=f;c>0;o=256*o+r[i+p],p+=h,c-=8);for(d=o&(1<<-c)-1,o>>=-c,c+=s;c>0;d=256*d+r[i+p],p+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return d?NaN:(g?-1:1)*(1/0);d+=Math.pow(2,s),o-=u}return(g?-1:1)*d*Math.pow(2,o-s)}function l(r,i,n,s,a,o){var d,f,l,u=8*o-a-1,c=(1<>1,h=23===a?5960464477539062e-23:0,g=s?0:o-1,m=s?1:-1,v=i<0||0===i&&1/i<0?1:0;for(isNaN(i=Math.abs(i))||i===1/0?(f=isNaN(i)?1:0,d=c):(d=Math.floor(Math.log(i)/Math.LN2),i*(l=Math.pow(2,-d))<1&&(d--,l*=2),d+p>=1?i+=h/l:i+=h*Math.pow(2,1-p),i*l>=2&&(d++,l/=2),d+p>=c?(f=0,d=c):d+p>=1?(f=(i*l-1)*Math.pow(2,a),d+=p):(f=i*Math.pow(2,p-1)*Math.pow(2,a),d=0));a>=8;r[n+g]=255&f,g+=m,f/=256,a-=8);for(d=d<0;r[n+g]=255&d,g+=m,d/=256,u-=8);r[n+g-m]|=128*v}i.accessor=function(){return Uint8Array},i.allocate=function(r,n,s){return new i(r,n,s)},i.concat=function(r,n,s,a){("boolean"==typeof n||"string"!=typeof n)&&(a=s,s=n,n=void 0);for(var o,d=0,f=0,l=r.length;f0&&(d+=o);if(0===d)return new i(0,s,a);var u,c=new i(d,s,a);for(f=0;f0&&(d.buffer=r.buffer,d.offset=r.byteOffset,d.limit=r.byteOffset+r.byteLength,d.view=new Uint8Array(r.buffer));else if(r instanceof ArrayBuffer)d=new i(0,a,o),r.byteLength>0&&(d.buffer=r,d.offset=0,d.limit=r.byteLength,d.view=r.byteLength>0?new Uint8Array(r):null);else if("[object Array]"===Object.prototype.toString.call(r)){(d=new i(r.length,a,o)).limit=r.length;for(var d,f=0;f>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var s,a=i,o=r.length,d=o>>3,f=0;for(i+=this.writeVarint32(o,i);d--;)s=1&!!r[f++]|(1&!!r[f++])<<1|(1&!!r[f++])<<2|(1&!!r[f++])<<3|(1&!!r[f++])<<4|(1&!!r[f++])<<5|(1&!!r[f++])<<6|(1&!!r[f++])<<7,this.writeByte(s,i++);if(f>3,d=0,f=[];for(r+=s.length;o--;)n=this.readByte(r++),f[d++]=!!(1&n),f[d++]=!!(2&n),f[d++]=!!(4&n),f[d++]=!!(8&n),f[d++]=!!(16&n),f[d++]=!!(32&n),f[d++]=!!(64&n),f[d++]=!!(128&n);if(d>l++&1)}return i&&(this.offset=r),f},n.readBytes=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+r>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+"+r+") <= "+this.buffer.byteLength)}var s=this.slice(i,i+r);return n&&(this.offset+=r),s},n.writeBytes=n.append,n.writeInt8=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=1;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=1,this.view[i]=r,n&&(this.offset+=1),this},n.writeByte=n.writeInt8,n.readInt8=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n=this.view[r];return(128&n)==128&&(n=-(255-n+1)),i&&(this.offset+=1),n},n.readByte=n.readInt8,n.writeUint8=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=1;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=1,this.view[i]=r,n&&(this.offset+=1),this},n.writeUInt8=n.writeUint8,n.readUint8=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n=this.view[r];return i&&(this.offset+=1),n},n.readUInt8=n.readUint8,n.writeInt16=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=2;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=2,this.littleEndian?(this.view[i+1]=(65280&r)>>>8,this.view[i]=255&r):(this.view[i]=(65280&r)>>>8,this.view[i+1]=255&r),n&&(this.offset+=2),this},n.writeShort=n.writeInt16,n.readInt16=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+2) <= "+this.buffer.byteLength)}var n=0;return(32768&(n=this.littleEndian?this.view[r]|this.view[r+1]<<8:this.view[r]<<8|this.view[r+1]))==32768&&(n=-(65535-n+1)),i&&(this.offset+=2),n},n.readShort=n.readInt16,n.writeUint16=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=2;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=2,this.littleEndian?(this.view[i+1]=(65280&r)>>>8,this.view[i]=255&r):(this.view[i]=(65280&r)>>>8,this.view[i+1]=255&r),n&&(this.offset+=2),this},n.writeUInt16=n.writeUint16,n.readUint16=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+2) <= "+this.buffer.byteLength)}var n=0;return n=this.littleEndian?this.view[r]|this.view[r+1]<<8:this.view[r]<<8|this.view[r+1],i&&(this.offset+=2),n},n.readUInt16=n.readUint16,n.writeInt32=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=4;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=4,this.littleEndian?(this.view[i+3]=r>>>24&255,this.view[i+2]=r>>>16&255,this.view[i+1]=r>>>8&255,this.view[i]=255&r):(this.view[i]=r>>>24&255,this.view[i+1]=r>>>16&255,this.view[i+2]=r>>>8&255,this.view[i+3]=255&r),n&&(this.offset+=4),this},n.writeInt=n.writeInt32,n.readInt32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var n=0;return n=(this.littleEndian?(this.view[r+2]<<16|this.view[r+1]<<8|this.view[r])+(this.view[r+3]<<24>>>0):(this.view[r+1]<<16|this.view[r+2]<<8|this.view[r+3])+(this.view[r]<<24>>>0))|0,i&&(this.offset+=4),n},n.readInt=n.readInt32,n.writeUint32=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=4;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=4,this.littleEndian?(this.view[i+3]=r>>>24&255,this.view[i+2]=r>>>16&255,this.view[i+1]=r>>>8&255,this.view[i]=255&r):(this.view[i]=r>>>24&255,this.view[i+1]=r>>>16&255,this.view[i+2]=r>>>8&255,this.view[i+3]=255&r),n&&(this.offset+=4),this},n.writeUInt32=n.writeUint32,n.readUint32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var n=0;return n=this.littleEndian?(this.view[r+2]<<16|this.view[r+1]<<8|this.view[r])+(this.view[r+3]<<24>>>0):(this.view[r+1]<<16|this.view[r+2]<<8|this.view[r+3])+(this.view[r]<<24>>>0),i&&(this.offset+=4),n},n.readUInt32=n.readUint32,r&&(n.writeInt64=function(i,n){var s=void 0===n;if(s&&(n=this.offset),!this.noAssert){if("number"==typeof i)i=r.fromNumber(i);else if("string"==typeof i)i=r.fromString(i);else if(!(i&&i instanceof r))throw TypeError("Illegal value: "+i+" (not an integer or Long)");if("number"!=typeof n||n%1!=0)throw TypeError("Illegal offset: "+n+" (not an integer)");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}"number"==typeof i?i=r.fromNumber(i):"string"==typeof i&&(i=r.fromString(i)),n+=8;var a=this.buffer.byteLength;n>a&&this.resize((a*=2)>n?a:n),n-=8;var o=i.low,d=i.high;return this.littleEndian?(this.view[n+3]=o>>>24&255,this.view[n+2]=o>>>16&255,this.view[n+1]=o>>>8&255,this.view[n]=255&o,n+=4,this.view[n+3]=d>>>24&255,this.view[n+2]=d>>>16&255,this.view[n+1]=d>>>8&255,this.view[n]=255&d):(this.view[n]=d>>>24&255,this.view[n+1]=d>>>16&255,this.view[n+2]=d>>>8&255,this.view[n+3]=255&d,n+=4,this.view[n]=o>>>24&255,this.view[n+1]=o>>>16&255,this.view[n+2]=o>>>8&255,this.view[n+3]=255&o),s&&(this.offset+=8),this},n.writeLong=n.writeInt64,n.readInt64=function(i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+8) <= "+this.buffer.byteLength)}var s=0,a=0;this.littleEndian?(s=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0),i+=4,a=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0)):(a=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0),i+=4,s=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0));var o=new r(s,a,!1);return n&&(this.offset+=8),o},n.readLong=n.readInt64,n.writeUint64=function(i,n){var s=void 0===n;if(s&&(n=this.offset),!this.noAssert){if("number"==typeof i)i=r.fromNumber(i);else if("string"==typeof i)i=r.fromString(i);else if(!(i&&i instanceof r))throw TypeError("Illegal value: "+i+" (not an integer or Long)");if("number"!=typeof n||n%1!=0)throw TypeError("Illegal offset: "+n+" (not an integer)");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}"number"==typeof i?i=r.fromNumber(i):"string"==typeof i&&(i=r.fromString(i)),n+=8;var a=this.buffer.byteLength;n>a&&this.resize((a*=2)>n?a:n),n-=8;var o=i.low,d=i.high;return this.littleEndian?(this.view[n+3]=o>>>24&255,this.view[n+2]=o>>>16&255,this.view[n+1]=o>>>8&255,this.view[n]=255&o,n+=4,this.view[n+3]=d>>>24&255,this.view[n+2]=d>>>16&255,this.view[n+1]=d>>>8&255,this.view[n]=255&d):(this.view[n]=d>>>24&255,this.view[n+1]=d>>>16&255,this.view[n+2]=d>>>8&255,this.view[n+3]=255&d,n+=4,this.view[n]=o>>>24&255,this.view[n+1]=o>>>16&255,this.view[n+2]=o>>>8&255,this.view[n+3]=255&o),s&&(this.offset+=8),this},n.writeUInt64=n.writeUint64,n.readUint64=function(i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+8) <= "+this.buffer.byteLength)}var s=0,a=0;this.littleEndian?(s=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0),i+=4,a=(this.view[i+2]<<16|this.view[i+1]<<8|this.view[i])+(this.view[i+3]<<24>>>0)):(a=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0),i+=4,s=(this.view[i+1]<<16|this.view[i+2]<<8|this.view[i+3])+(this.view[i]<<24>>>0));var o=new r(s,a,!0);return n&&(this.offset+=8),o},n.readUInt64=n.readUint64),n.writeFloat32=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r)throw TypeError("Illegal value: "+r+" (not a number)");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=4;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=4,l(this.view,r,i,this.littleEndian,23,4),n&&(this.offset+=4),this},n.writeFloat=n.writeFloat32,n.readFloat32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var n=f(this.view,r,this.littleEndian,23,4);return i&&(this.offset+=4),n},n.readFloat=n.readFloat32,n.writeFloat64=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof r)throw TypeError("Illegal value: "+r+" (not a number)");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=8;var s=this.buffer.byteLength;return i>s&&this.resize((s*=2)>i?s:i),i-=8,l(this.view,r,i,this.littleEndian,52,8),n&&(this.offset+=8),this},n.writeDouble=n.writeFloat64,n.readFloat64=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+8) <= "+this.buffer.byteLength)}var n=f(this.view,r,this.littleEndian,52,8);return i&&(this.offset+=8),n},n.readDouble=n.readFloat64,i.MAX_VARINT32_BYTES=5,i.calculateVarint32=function(r){return(r>>>=0)<128?1:r<16384?2:r<2097152?3:r<268435456?4:5},i.zigZagEncode32=function(r){return((r|=0)<<1^r>>31)>>>0},i.zigZagDecode32=function(r){return r>>>1^-(1&r)|0},n.writeVarint32=function(r,n){var s=void 0===n;if(s&&(n=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal offset: "+n+" (not an integer)");if((n>>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}var a,o=i.calculateVarint32(r);n+=o;var d=this.buffer.byteLength;for(n>d&&this.resize((d*=2)>n?d:n),n-=o,r>>>=0;r>=128;)a=127&r|128,this.view[n++]=a,r>>>=7;return(this.view[n++]=r,s)?(this.offset=n,this):o},n.writeVarint32ZigZag=function(r,n){return this.writeVarint32(i.zigZagEncode32(r),n)},n.readVarint32=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n,s=0,a=0;do{if(!this.noAssert&&r>this.limit){var o=Error("Truncated");throw o.truncated=!0,o}n=this.view[r++],s<5&&(a|=(127&n)<<7*s),++s}while((128&n)!=0)return(a|=0,i)?(this.offset=r,a):{value:a,length:s}},n.readVarint32ZigZag=function(r){var n=this.readVarint32(r);return"object"==typeof n?n.value=i.zigZagDecode32(n.value):n=i.zigZagDecode32(n),n},r&&(i.MAX_VARINT64_BYTES=10,i.calculateVarint64=function(i){"number"==typeof i?i=r.fromNumber(i):"string"==typeof i&&(i=r.fromString(i));var n=i.toInt()>>>0,s=i.shiftRightUnsigned(28).toInt()>>>0,a=i.shiftRightUnsigned(56).toInt()>>>0;return 0!=a?a<128?9:10:0==s?n<16384?n<128?1:2:n<2097152?3:4:s<16384?s<128?5:6:s<2097152?7:8},i.zigZagEncode64=function(i){return"number"==typeof i?i=r.fromNumber(i,!1):"string"==typeof i?i=r.fromString(i,!1):!1!==i.unsigned&&(i=i.toSigned()),i.shiftLeft(1).xor(i.shiftRight(63)).toUnsigned()},i.zigZagDecode64=function(i){return"number"==typeof i?i=r.fromNumber(i,!1):"string"==typeof i?i=r.fromString(i,!1):!1!==i.unsigned&&(i=i.toSigned()),i.shiftRightUnsigned(1).xor(i.and(r.ONE).toSigned().negate()).toSigned()},n.writeVarint64=function(n,s){var a=void 0===s;if(a&&(s=this.offset),!this.noAssert){if("number"==typeof n)n=r.fromNumber(n);else if("string"==typeof n)n=r.fromString(n);else if(!(n&&n instanceof r))throw TypeError("Illegal value: "+n+" (not an integer or Long)");if("number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}"number"==typeof n?n=r.fromNumber(n,!1):"string"==typeof n?n=r.fromString(n,!1):!1!==n.unsigned&&(n=n.toSigned());var o=i.calculateVarint64(n),d=n.toInt()>>>0,f=n.shiftRightUnsigned(28).toInt()>>>0,l=n.shiftRightUnsigned(56).toInt()>>>0;s+=o;var u=this.buffer.byteLength;switch(s>u&&this.resize((u*=2)>s?u:s),s-=o,o){case 10:this.view[s+9]=l>>>7&1;case 9:this.view[s+8]=9!==o?128|l:127&l;case 8:this.view[s+7]=8!==o?f>>>21|128:f>>>21&127;case 7:this.view[s+6]=7!==o?f>>>14|128:f>>>14&127;case 6:this.view[s+5]=6!==o?f>>>7|128:f>>>7&127;case 5:this.view[s+4]=5!==o?128|f:127&f;case 4:this.view[s+3]=4!==o?d>>>21|128:d>>>21&127;case 3:this.view[s+2]=3!==o?d>>>14|128:d>>>14&127;case 2:this.view[s+1]=2!==o?d>>>7|128:d>>>7&127;case 1:this.view[s]=1!==o?128|d:127&d}return a?(this.offset+=o,this):o},n.writeVarint64ZigZag=function(r,n){return this.writeVarint64(i.zigZagEncode64(r),n)},n.readVarint64=function(i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+1) <= "+this.buffer.byteLength)}var s=i,a=0,o=0,d=0,f=0;if(a=127&(f=this.view[i++]),128&f&&(a|=(127&(f=this.view[i++]))<<7,(128&f||this.noAssert&&void 0===f)&&(a|=(127&(f=this.view[i++]))<<14,(128&f||this.noAssert&&void 0===f)&&(a|=(127&(f=this.view[i++]))<<21,(128&f||this.noAssert&&void 0===f)&&(o=127&(f=this.view[i++]),(128&f||this.noAssert&&void 0===f)&&(o|=(127&(f=this.view[i++]))<<7,(128&f||this.noAssert&&void 0===f)&&(o|=(127&(f=this.view[i++]))<<14,(128&f||this.noAssert&&void 0===f)&&(o|=(127&(f=this.view[i++]))<<21,(128&f||this.noAssert&&void 0===f)&&(d=127&(f=this.view[i++]),(128&f||this.noAssert&&void 0===f)&&(d|=(127&(f=this.view[i++]))<<7,128&f||this.noAssert&&void 0===f))))))))))throw Error("Buffer overrun");var l=r.fromBits(a|o<<28,o>>>4|d<<24,!1);return n?(this.offset=i,l):{value:l,length:i-s}},n.readVarint64ZigZag=function(n){var s=this.readVarint64(n);return s&&s.value instanceof r?s.value=i.zigZagDecode64(s.value):s=i.zigZagDecode64(s),s}),n.writeCString=function(r,i){var n=void 0===i;n&&(i=this.offset);var s,a=r.length;if(!this.noAssert){if("string"!=typeof r)throw TypeError("Illegal str: Not a string");for(s=0;s>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}i+=(a=c.calculateUTF16asUTF8(o(r))[1])+1;var d=this.buffer.byteLength;return(i>d&&this.resize((d*=2)>i?d:i),i-=a+1,c.encodeUTF16toUTF8(o(r),(function(r){this.view[i++]=r}).bind(this)),this.view[i++]=0,n)?(this.offset=i,this):a},n.readCString=function(r){var i=void 0===r;if(i&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var n,s=r,a=-1;return(c.decodeUTF8toUTF16((function(){if(0===a)return null;if(r>=this.limit)throw RangeError("Illegal range: Truncated data, "+r+" < "+this.limit);return 0===(a=this.view[r++])?null:a}).bind(this),n=d(),!0),i)?(this.offset=r,n()):{string:n(),length:r-s}},n.writeIString=function(r,i){var n=void 0===i;if(n&&(i=this.offset),!this.noAssert){if("string"!=typeof r)throw TypeError("Illegal str: Not a string");if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var s,a=i;i+=4+(s=c.calculateUTF16asUTF8(o(r),this.noAssert)[1]);var d=this.buffer.byteLength;if(i>d&&this.resize((d*=2)>i?d:i),i-=4+s,this.littleEndian?(this.view[i+3]=s>>>24&255,this.view[i+2]=s>>>16&255,this.view[i+1]=s>>>8&255,this.view[i]=255&s):(this.view[i]=s>>>24&255,this.view[i+1]=s>>>16&255,this.view[i+2]=s>>>8&255,this.view[i+3]=255&s),i+=4,c.encodeUTF16toUTF8(o(r),(function(r){this.view[i++]=r}).bind(this)),i!==a+4+s)throw RangeError("Illegal range: Truncated data, "+i+" == "+(i+4+s));return n?(this.offset=i,this):i-a},n.readIString=function(r){var n=void 0===r;if(n&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+4) <= "+this.buffer.byteLength)}var s=r,a=this.readUint32(r),o=this.readUTF8String(a,i.METRICS_BYTES,r+=4);return(r+=o.length,n)?(this.offset=r,o.string):{string:o.string,length:r-s}},i.METRICS_CHARS="c",i.METRICS_BYTES="b",n.writeUTF8String=function(r,i){var n,s=void 0===i;if(s&&(i=this.offset),!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: "+i+" (not an integer)");if((i>>>=0)<0||i+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+i+" (+0) <= "+this.buffer.byteLength)}var a=i;i+=n=c.calculateUTF16asUTF8(o(r))[1];var d=this.buffer.byteLength;return(i>d&&this.resize((d*=2)>i?d:i),i-=n,c.encodeUTF16toUTF8(o(r),(function(r){this.view[i++]=r}).bind(this)),s)?(this.offset=i,this):i-a},n.writeString=n.writeUTF8String,i.calculateUTF8Chars=function(r){return c.calculateUTF16asUTF8(o(r))[0]},i.calculateUTF8Bytes=function(r){return c.calculateUTF16asUTF8(o(r))[1]},i.calculateString=i.calculateUTF8Bytes,n.readUTF8String=function(r,n,s){"number"==typeof n&&(s=n,n=void 0);var a=void 0===s;if(a&&(s=this.offset),void 0===n&&(n=i.METRICS_CHARS),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal length: "+r+" (not an integer)");if(r|=0,"number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}var o,f=0,l=s;if(n===i.METRICS_CHARS){if(o=d(),c.decodeUTF8((function(){return f>>=0)<0||s+r>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+"+r+") <= "+this.buffer.byteLength)}var u=s+r;if(c.decodeUTF8toUTF16((function(){return s>>=0)<0||n+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+n+" (+0) <= "+this.buffer.byteLength)}var a,d,f=n;a=c.calculateUTF16asUTF8(o(r),this.noAssert)[1],n+=(d=i.calculateVarint32(a))+a;var l=this.buffer.byteLength;if(n>l&&this.resize((l*=2)>n?l:n),n-=d+a,n+=this.writeVarint32(a,n),c.encodeUTF16toUTF8(o(r),(function(r){this.view[n++]=r}).bind(this)),n!==f+a+d)throw RangeError("Illegal range: Truncated data, "+n+" == "+(n+a+d));return s?(this.offset=n,this):n-f},n.readVString=function(r){var n=void 0===r;if(n&&(r=this.offset),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal offset: "+r+" (not an integer)");if((r>>>=0)<0||r+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+1) <= "+this.buffer.byteLength)}var s=r,a=this.readVarint32(r),o=this.readUTF8String(a.value,i.METRICS_BYTES,r+=a.length);return(r+=o.length,n)?(this.offset=r,o.string):{string:o.string,length:r-s}},n.append=function(r,n,s){("number"==typeof n||"string"!=typeof n)&&(s=n,n=void 0);var a=void 0===s;if(a&&(s=this.offset),!this.noAssert){if("number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}r instanceof i||(r=i.wrap(r,n));var o=r.limit-r.offset;if(o<=0)return this;s+=o;var d=this.buffer.byteLength;return s>d&&this.resize((d*=2)>s?d:s),s-=o,this.view.set(r.view.subarray(r.offset,r.limit),s),r.offset+=o,a&&(this.offset+=o),this},n.appendTo=function(r,i){return r.append(this,i),this},n.assert=function(r){return this.noAssert=!r,this},n.capacity=function(){return this.buffer.byteLength},n.clear=function(){return this.offset=0,this.limit=this.buffer.byteLength,this.markedOffset=-1,this},n.clone=function(r){var n=new i(0,this.littleEndian,this.noAssert);return r?(n.buffer=new ArrayBuffer(this.buffer.byteLength),n.view=new Uint8Array(n.buffer)):(n.buffer=this.buffer,n.view=this.view),n.offset=this.offset,n.markedOffset=this.markedOffset,n.limit=this.limit,n},n.compact=function(r,i){if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}if(0===r&&i===this.buffer.byteLength)return this;var n=i-r;if(0===n)return this.buffer=s,this.view=null,this.markedOffset>=0&&(this.markedOffset-=r),this.offset=0,this.limit=0,this;var a=new ArrayBuffer(n),o=new Uint8Array(a);return o.set(this.view.subarray(r,i)),this.buffer=a,this.view=o,this.markedOffset>=0&&(this.markedOffset-=r),this.offset=0,this.limit=n,this},n.copy=function(r,n){if(void 0===r&&(r=this.offset),void 0===n&&(n=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal end: Not an integer");if(n>>>=0,r<0||r>n||n>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+n+" <= "+this.buffer.byteLength)}if(r===n)return new i(0,this.littleEndian,this.noAssert);var s=n-r,a=new i(s,this.littleEndian,this.noAssert);return a.offset=0,a.limit=s,a.markedOffset>=0&&(a.markedOffset-=r),this.copyTo(a,0,r,n),a},n.copyTo=function(r,n,s,a){if(!this.noAssert&&!i.isByteBuffer(r))throw TypeError("Illegal target: Not a ByteBuffer");if(n=(d=void 0===n)?r.offset:0|n,s=(o=void 0===s)?this.offset:0|s,a=void 0===a?this.limit:0|a,n<0||n>r.buffer.byteLength)throw RangeError("Illegal target range: 0 <= "+n+" <= "+r.buffer.byteLength);if(s<0||a>this.buffer.byteLength)throw RangeError("Illegal source range: 0 <= "+s+" <= "+this.buffer.byteLength);var o,d,f=a-s;return 0===f?r:(r.ensureCapacity(n+f),r.view.set(this.view.subarray(s,a),n),o&&(this.offset+=f),d&&(r.offset+=f),this)},n.ensureCapacity=function(r){var i=this.buffer.byteLength;return ir?i:r):this},n.fill=function(r,i,n){var s=void 0===i;if(s&&(i=this.offset),"string"==typeof r&&r.length>0&&(r=r.charCodeAt(0)),void 0===i&&(i=this.offset),void 0===n&&(n=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal value: "+r+" (not an integer)");if(r|=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal begin: Not an integer");if(i>>>=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal end: Not an integer");if(n>>>=0,i<0||i>n||n>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+i+" <= "+n+" <= "+this.buffer.byteLength)}if(i>=n)return this;for(;i>>=0)<0||r+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+r+" (+0) <= "+this.buffer.byteLength)}return this.markedOffset=r,this},n.order=function(r){if(!this.noAssert&&"boolean"!=typeof r)throw TypeError("Illegal littleEndian: Not a boolean");return this.littleEndian=!!r,this},n.LE=function(r){return this.littleEndian=void 0===r||!!r,this},n.BE=function(r){return this.littleEndian=void 0!==r&&!r,this},n.prepend=function(r,n,s){("number"==typeof n||"string"!=typeof n)&&(s=n,n=void 0);var a=void 0===s;if(a&&(s=this.offset),!this.noAssert){if("number"!=typeof s||s%1!=0)throw TypeError("Illegal offset: "+s+" (not an integer)");if((s>>>=0)<0||s+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+s+" (+0) <= "+this.buffer.byteLength)}r instanceof i||(r=i.wrap(r,n));var o=r.limit-r.offset;if(o<=0)return this;var d=o-s;if(d>0){var f=new ArrayBuffer(this.buffer.byteLength+d),l=new Uint8Array(f);l.set(this.view.subarray(s,this.buffer.byteLength),o),this.buffer=f,this.view=l,this.offset+=d,this.markedOffset>=0&&(this.markedOffset+=d),this.limit+=d,s+=d}else new Uint8Array(this.buffer);return this.view.set(r.view.subarray(r.offset,r.limit),s-o),r.offset=r.limit,a&&(this.offset-=o),this},n.prependTo=function(r,i){return r.prepend(this,i),this},n.printDebug=function(r){"function"!=typeof r&&(r=console.log.bind(console)),r(this.toString()+"\n-------------------------------------------------------------------\n"+this.toDebug(!0))},n.remaining=function(){return this.limit-this.offset},n.reset=function(){return this.markedOffset>=0?(this.offset=this.markedOffset,this.markedOffset=-1):this.offset=0,this},n.resize=function(r){if(!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal capacity: "+r+" (not an integer)");if((r|=0)<0)throw RangeError("Illegal capacity: 0 <= "+r)}if(this.buffer.byteLength>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}return r===i||Array.prototype.reverse.call(this.view.subarray(r,i)),this},n.skip=function(r){if(!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal length: "+r+" (not an integer)");r|=0}var i=this.offset+r;if(!this.noAssert&&(i<0||i>this.buffer.byteLength))throw RangeError("Illegal length: 0 <= "+this.offset+" + "+r+" <= "+this.buffer.byteLength);return this.offset=i,this},n.slice=function(r,i){if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}var n=this.clone();return n.offset=r,n.limit=i,n},n.toBuffer=function(r){var i=this.offset,n=this.limit;if(!this.noAssert){if("number"!=typeof i||i%1!=0)throw TypeError("Illegal offset: Not an integer");if(i>>>=0,"number"!=typeof n||n%1!=0)throw TypeError("Illegal limit: Not an integer");if(n>>>=0,i<0||i>n||n>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+i+" <= "+n+" <= "+this.buffer.byteLength)}if(!r&&0===i&&n===this.buffer.byteLength)return this.buffer;if(i===n)return s;var a=new ArrayBuffer(n-i);return new Uint8Array(a).set(new Uint8Array(this.buffer).subarray(i,n),0),a},n.toArrayBuffer=n.toBuffer,n.toString=function(r,i,n){if(void 0===r)return"ByteBufferAB(offset="+this.offset+",markedOffset="+this.markedOffset+",limit="+this.limit+",capacity="+this.capacity()+")";switch("number"==typeof r&&(n=i=r="utf8"),r){case"utf8":return this.toUTF8(i,n);case"base64":return this.toBase64(i,n);case"hex":return this.toHex(i,n);case"binary":return this.toBinary(i,n);case"debug":return this.toDebug();case"columns":return this.toColumns();default:throw Error("Unsupported encoding: "+r)}};var u=function(){for(var r={},i=[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47],n=[],s=0,a=i.length;s>2&63]),a=(3&s)<<4,null!==(s=r())?(n(i[((a|=s>>4&15)|s>>4&15)&63]),a=(15&s)<<2,null!==(s=r())?(n(i[(a|s>>6&3)&63]),n(i[63&s])):(n(i[63&a]),n(61))):(n(i[63&a]),n(61),n(61))},r.decode=function(r,i){var s,a,o;function d(r){throw Error("Illegal character code: "+r)}for(;null!==(s=r());)if(void 0===(a=n[s])&&d(s),null!==(s=r())&&(void 0===(o=n[s])&&d(s),i(a<<2>>>0|(48&o)>>4),null!==(s=r()))){if(void 0===(a=n[s])){if(61===s)break;d(s)}if(i((15&o)<<4>>>0|(60&a)>>2),null!==(s=r())){if(void 0===(o=n[s])){if(61===s)break;d(s)}i((3&a)<<6>>>0|o)}}},r.test=function(r){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(r)},r}();n.toBase64=function(r,i){var n;if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),i|=0,(r|=0)<0||i>this.capacity||r>i)throw RangeError("begin, end");return u.encode((function(){return rthis.capacity()||r>i)throw RangeError("begin, end");if(r===i)return"";for(var n=[],s=[];r=1024&&(s.push(String.fromCharCode.apply(String,n)),n=[]);return s.join("")+String.fromCharCode.apply(String,n)},i.fromBinary=function(r,n){if("string"!=typeof r)throw TypeError("str");for(var s,a=0,o=r.length,d=new i(o,n);a255)throw RangeError("illegal char code: "+s);d.view[a++]=s}return d.limit=o,d},n.toDebug=function(r){for(var i,n=-1,s=this.buffer.byteLength,a="",o="",d="";n32&&i<127?String.fromCharCode(i):".")),++n,r&&n>0&&n%16==0&&n!==s){for(;a.length<51;)a+=" ";d+=a+o+"\n",a=o=""}n===this.offset&&n===this.limit?a+=n===this.markedOffset?"!":"|":n===this.offset?a+=n===this.markedOffset?"[":"<":n===this.limit?a+=n===this.markedOffset?"]":">":a+=n===this.markedOffset?"'":r||0!==n&&n!==s?" ":""}if(r&&" "!==a){for(;a.length<51;)a+=" ";d+=a+o+"\n"}return r?d:a},i.fromDebug=function(r,n,s){for(var a,o,d=r.length,f=new i((d+1)/3|0,n,s),l=0,u=0,c=!1,p=!1,h=!1,g=!1,m=!1;l":if(!s){if(g){m=!0;break}g=!0}f.limit=u,c=!1;break;case"'":if(!s){if(h){m=!0;break}h=!0}f.markedOffset=u,c=!1;break;case" ":c=!1;break;default:if(!s&&c){m=!0;break}if(o=parseInt(a+r.charAt(l++),16),!s&&(isNaN(o)||o<0||o>255))throw TypeError("Illegal str: Not a debug encoded string");f.view[u++]=o,c=!0}if(m)throw TypeError("Illegal str: Invalid symbol at "+l)}if(!s){if(!p||!g)throw TypeError("Illegal str: Missing offset or limit");if(u>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}for(var n,s=Array(i-r);r255))throw TypeError("Illegal str: Contains non-hex characters");d.view[l++]=a}return d.limit=l,d};var c=function(){var r={};return r.MAX_CODEPOINT=1114111,r.encodeUTF8=function(r,i){var n=null;for("number"==typeof r&&(n=r,r=function(){return null});null!==n||null!==(n=r());)n<128?i(127&n):(n<2048?i(n>>6&31|192):(n<65536?i(n>>12&15|224):(i(n>>18&7|240),i(n>>12&63|128)),i(n>>6&63|128)),i(63&n|128)),n=null},r.decodeUTF8=function(r,i){for(var n,s,a,o,d=function(r){var i=Error((r=r.slice(0,r.indexOf(null))).toString());throw i.name="TruncatedError",i.bytes=r,i};null!==(n=r());)if((128&n)==0)i(n);else if((224&n)==192)null===(s=r())&&d([n,s]),i((31&n)<<6|63&s);else if((240&n)==224)(null===(s=r())||null===(a=r()))&&d([n,s,a]),i((15&n)<<12|(63&s)<<6|63&a);else if((248&n)==240)(null===(s=r())||null===(a=r())||null===(o=r()))&&d([n,s,a,o]),i((7&n)<<18|(63&s)<<12|(63&a)<<6|63&o);else throw RangeError("Illegal starting byte: "+n)},r.UTF16toUTF8=function(r,i){for(var n,s=null;null!==(n=null!==s?s:r());){if(n>=55296&&n<=57343&&null!==(s=r())&&s>=56320&&s<=57343){i((n-55296)*1024+s-56320+65536),s=null;continue}i(n)}null!==s&&i(s)},r.UTF8toUTF16=function(r,i){var n=null;for("number"==typeof r&&(n=r,r=function(){return null});null!==n||null!==(n=r());)n<=65535?i(n):(i(((n-=65536)>>10)+55296),i(n%1024+56320)),n=null},r.encodeUTF16toUTF8=function(i,n){r.UTF16toUTF8(i,function(i){r.encodeUTF8(i,n)})},r.decodeUTF8toUTF16=function(i,n){r.decodeUTF8(i,function(i){r.UTF8toUTF16(i,n)})},r.calculateCodePoint=function(r){return r<128?1:r<2048?2:r<65536?3:4},r.calculateUTF8=function(r){for(var i,n=0;null!==(i=r());)n+=i<128?1:i<2048?2:i<65536?3:4;return n},r.calculateUTF16asUTF8=function(i){var n=0,s=0;return r.UTF16toUTF8(i,function(r){++n,s+=r<128?1:r<2048?2:r<65536?3:4}),[n,s]},r}();return n.toUTF8=function(r,i){var n;if(void 0===r&&(r=this.offset),void 0===i&&(i=this.limit),!this.noAssert){if("number"!=typeof r||r%1!=0)throw TypeError("Illegal begin: Not an integer");if(r>>>=0,"number"!=typeof i||i%1!=0)throw TypeError("Illegal end: Not an integer");if(i>>>=0,r<0||r>i||i>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+r+" <= "+i+" <= "+this.buffer.byteLength)}try{c.decodeUTF8toUTF16((function(){return r>>=0,(f=0<=r&&r<256)&&(o=s[r]))?o:(a=d(r,(0|r)<0?-1:0,!0),f&&(s[r]=a),a):(r|=0,(f=-128<=r&&r<128)&&(o=n[r]))?o:(a=d(r,r<0?-1:0,!1),f&&(n[r]=a),a)}function o(r,i){if(isNaN(r)||!isFinite(r))return i?v:m;if(i){if(r<0)return v;if(r>=p)return w}else{if(r<=-h)return S;if(r+1>=h)return E}return r<0?o(-r,i).neg():d(r%c|0,r/c|0,i)}function d(i,n,s){return new r(i,n,s)}r.fromInt=a,r.fromNumber=o,r.fromBits=d;var f=Math.pow;function l(r,i,n){if(0===r.length)throw Error("empty string");if("NaN"===r||"Infinity"===r||"+Infinity"===r||"-Infinity"===r)return m;if("number"==typeof i?(n=i,i=!1):i=!!i,(n=n||10)<2||360)throw Error("interior hyphen");if(0===s)return l(r.substring(1),i,n).neg();for(var s,a=o(f(n,8)),d=m,u=0;u>>0:this.low},I.toNumber=function(){return this.unsigned?(this.high>>>0)*c+(this.low>>>0):this.high*c+(this.low>>>0)},I.toString=function(r){if((r=r||10)<2||36>>0).toString(r);if((d=u).isZero())return c+l;for(;c.length<6;)c="0"+c;l=""+c+l}},I.getHighBits=function(){return this.high},I.getHighBitsUnsigned=function(){return this.high>>>0},I.getLowBits=function(){return this.low},I.getLowBitsUnsigned=function(){return this.low>>>0},I.getNumBitsAbs=function(){if(this.isNegative())return this.eq(S)?64:this.neg().getNumBitsAbs();for(var r=0!=this.high?this.high:this.low,i=31;i>0&&(r&1<=0},I.isOdd=function(){return(1&this.low)==1},I.isEven=function(){return(1&this.low)==0},I.equals=function(r){return i(r)||(r=u(r)),(this.unsigned===r.unsigned||this.high>>>31!=1||r.high>>>31!=1)&&this.high===r.high&&this.low===r.low},I.eq=I.equals,I.notEquals=function(r){return!this.eq(r)},I.neq=I.notEquals,I.lessThan=function(r){return 0>this.comp(r)},I.lt=I.lessThan,I.lessThanOrEqual=function(r){return 0>=this.comp(r)},I.lte=I.lessThanOrEqual,I.greaterThan=function(r){return this.comp(r)>0},I.gt=I.greaterThan,I.greaterThanOrEqual=function(r){return this.comp(r)>=0},I.gte=I.greaterThanOrEqual,I.compare=function(r){if(i(r)||(r=u(r)),this.eq(r))return 0;var n=this.isNegative(),s=r.isNegative();return n&&!s?-1:!n&&s?1:this.unsigned?r.high>>>0>this.high>>>0||r.high===this.high&&r.low>>>0>this.low>>>0?-1:1:this.sub(r).isNegative()?-1:1},I.comp=I.compare,I.negate=function(){return!this.unsigned&&this.eq(S)?S:this.not().add(_)},I.neg=I.negate,I.add=function(r){i(r)||(r=u(r));var n,s,a=this.high>>>16,o=65535&this.high,f=this.low>>>16,l=65535&this.low,c=r.high>>>16,p=65535&r.high,h=r.low>>>16,g=65535&r.low,m=0,v=0;return n=0+((s=0+(l+g))>>>16),s&=65535,n+=f+h,v+=n>>>16,n&=65535,v+=o+p,m+=v>>>16,v&=65535,m+=a+c,d(n<<16|s,(m&=65535)<<16|v,this.unsigned)},I.subtract=function(r){return i(r)||(r=u(r)),this.add(r.neg())},I.sub=I.subtract,I.multiply=function(r){if(this.isZero()||(i(r)||(r=u(r)),r.isZero()))return m;if(this.eq(S))return r.isOdd()?S:m;if(r.eq(S))return this.isOdd()?S:m;if(this.isNegative())return r.isNegative()?this.neg().mul(r.neg()):this.neg().mul(r).neg();if(r.isNegative())return this.mul(r.neg()).neg();if(this.lt(g)&&r.lt(g))return o(this.toNumber()*r.toNumber(),this.unsigned);var n,s,a=this.high>>>16,f=65535&this.high,l=this.low>>>16,c=65535&this.low,p=r.high>>>16,h=65535&r.high,v=r.low>>>16,_=65535&r.low,b=0,T=0;return n=0+((s=0+c*_)>>>16),s&=65535,n+=l*_,T+=n>>>16,n&=65535,n+=c*v,T+=n>>>16,n&=65535,T+=f*_,b+=T>>>16,T&=65535,T+=l*v,b+=T>>>16,T&=65535,T+=c*h,b+=T>>>16,T&=65535,b+=a*_+f*v+l*h+c*p,d(n<<16|s,(b&=65535)<<16|T,this.unsigned)},I.mul=I.multiply,I.divide=function(r){if(i(r)||(r=u(r)),r.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?v:m;if(this.unsigned){if(r.unsigned||(r=r.toUnsigned()),r.gt(this))return v;if(r.gt(this.shru(1)))return b;a=v}else{if(this.eq(S)){var n,s,a;return r.eq(_)||r.eq(T)?S:r.eq(S)?_:(n=this.shr(1).div(r).shl(1)).eq(m)?r.isNegative()?_:T:(s=this.sub(r.mul(n)),a=n.add(s.div(r)))}if(r.eq(S))return this.unsigned?v:m;if(this.isNegative())return r.isNegative()?this.neg().div(r.neg()):this.neg().div(r).neg();if(r.isNegative())return this.div(r.neg()).neg();a=m}for(s=this;s.gte(r);){for(var d=Math.ceil(Math.log(n=Math.max(1,Math.floor(s.toNumber()/r.toNumber())))/Math.LN2),l=d<=48?1:f(2,d-48),c=o(n),p=c.mul(r);p.isNegative()||p.gt(s);)n-=l,p=(c=o(n,this.unsigned)).mul(r);c.isZero()&&(c=_),a=a.add(c),s=s.sub(p)}return a},I.div=I.divide,I.modulo=function(r){return i(r)||(r=u(r)),this.sub(this.div(r).mul(r))},I.mod=I.modulo,I.not=function(){return d(~this.low,~this.high,this.unsigned)},I.and=function(r){return i(r)||(r=u(r)),d(this.low&r.low,this.high&r.high,this.unsigned)},I.or=function(r){return i(r)||(r=u(r)),d(this.low|r.low,this.high|r.high,this.unsigned)},I.xor=function(r){return i(r)||(r=u(r)),d(this.low^r.low,this.high^r.high,this.unsigned)},I.shiftLeft=function(r){return(i(r)&&(r=r.toInt()),0==(r&=63))?this:r<32?d(this.low<>>32-r,this.unsigned):d(0,this.low<>>r|this.high<<32-r,this.high>>r,this.unsigned):d(this.high>>r-32,this.high>=0?0:-1,this.unsigned)},I.shr=I.shiftRight,I.shiftRightUnsigned=function(r){if(i(r)&&(r=r.toInt()),0==(r&=63))return this;var n=this.high;return r<32?d(this.low>>>r|n<<32-r,n>>>r,this.unsigned):32===r?d(n,0,this.unsigned):d(n>>>r-32,0,this.unsigned)},I.shru=I.shiftRightUnsigned,I.toSigned=function(){return this.unsigned?d(this.low,this.high,!1):this},I.toUnsigned=function(){return this.unsigned?this:d(this.low,this.high,!0)},I.toBytes=function(r){return r?this.toBytesLE():this.toBytesBE()},I.toBytesLE=function(){var r=this.high,i=this.low;return[255&i,i>>>8&255,i>>>16&255,i>>>24&255,255&r,r>>>8&255,r>>>16&255,r>>>24&255]},I.toBytesBE=function(){var r=this.high,i=this.low;return[r>>>24&255,r>>>16&255,r>>>8&255,255&r,i>>>24&255,i>>>16&255,i>>>8&255,255&i]},r})}),parcelRequire.register("gGMcW",function(r,i){r.exports=import("./"+parcelRequire("dRo73").resolve("2HNdK")).then(()=>parcelRequire("6oS5p"))});var $37578c5600331006$exports={};Object.defineProperty($37578c5600331006$exports,"__esModule",{value:!0});var $ce1f303d0aa8ec51$exports={},$awmEs=parcelRequire("awmEs"),$ce1f303d0aa8ec51$require$Buffer=$awmEs.Buffer;Object.defineProperty($ce1f303d0aa8ec51$exports,"__esModule",{value:!0});var $f3bb2747c7b09053$exports={},$9kaCP=parcelRequire("9kaCP"),$85PoE=parcelRequire("85PoE"),$5d67c366f11253ea$exports={},$aW7Y5=parcelRequire("aW7Y5"),$85PoE=parcelRequire("85PoE"),$5d67c366f11253ea$require$MAX_LENGTH=$85PoE.MAX_LENGTH,$5d67c366f11253ea$require$MAX_SAFE_INTEGER=$85PoE.MAX_SAFE_INTEGER,$9kaCP=parcelRequire("9kaCP"),$5d67c366f11253ea$require$re=$9kaCP.safeRe,$5d67c366f11253ea$require$t=$9kaCP.t,$2404c71d37817e19$exports={};const $2404c71d37817e19$var$looseOption=Object.freeze({loose:!0}),$2404c71d37817e19$var$emptyOpts=Object.freeze({}),$2404c71d37817e19$var$parseOptions=r=>r?"object"!=typeof r?$2404c71d37817e19$var$looseOption:r:$2404c71d37817e19$var$emptyOpts;$2404c71d37817e19$exports=$2404c71d37817e19$var$parseOptions;var $2dfbf56026e52c8c$exports={};const $2dfbf56026e52c8c$var$numeric=/^[0-9]+$/,$2dfbf56026e52c8c$var$compareIdentifiers=(r,i)=>{let n=$2dfbf56026e52c8c$var$numeric.test(r),s=$2dfbf56026e52c8c$var$numeric.test(i);return n&&s&&(r=+r,i=+i),r===i?0:n&&!s?-1:s&&!n?1:r$2dfbf56026e52c8c$var$compareIdentifiers(i,r);$2dfbf56026e52c8c$exports={compareIdentifiers:$2dfbf56026e52c8c$var$compareIdentifiers,rcompareIdentifiers:$2dfbf56026e52c8c$var$rcompareIdentifiers};var $5d67c366f11253ea$require$compareIdentifiers=$2dfbf56026e52c8c$exports.compareIdentifiers;class $5d67c366f11253ea$var$SemVer{constructor(r,i){if(i=$2404c71d37817e19$exports(i),r instanceof $5d67c366f11253ea$var$SemVer){if(!!i.loose===r.loose&&!!i.includePrerelease===r.includePrerelease)return r;r=r.version}else if("string"!=typeof r)throw TypeError(`Invalid version. Must be a string. Got type "${typeof r}".`);if(r.length>$5d67c366f11253ea$require$MAX_LENGTH)throw TypeError(`version is longer than ${$5d67c366f11253ea$require$MAX_LENGTH} characters`);$aW7Y5("SemVer",r,i),this.options=i,this.loose=!!i.loose,this.includePrerelease=!!i.includePrerelease;let n=r.trim().match(i.loose?$5d67c366f11253ea$require$re[$5d67c366f11253ea$require$t.LOOSE]:$5d67c366f11253ea$require$re[$5d67c366f11253ea$require$t.FULL]);if(!n)throw TypeError(`Invalid Version: ${r}`);if(this.raw=r,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>$5d67c366f11253ea$require$MAX_SAFE_INTEGER||this.major<0)throw TypeError("Invalid major version");if(this.minor>$5d67c366f11253ea$require$MAX_SAFE_INTEGER||this.minor<0)throw TypeError("Invalid minor version");if(this.patch>$5d67c366f11253ea$require$MAX_SAFE_INTEGER||this.patch<0)throw TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(r=>{if(/^[0-9]+$/.test(r)){let i=+r;if(i>=0&&i<$5d67c366f11253ea$require$MAX_SAFE_INTEGER)return i}return r}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(r){if($aW7Y5("SemVer.compare",this.version,this.options,r),!(r instanceof $5d67c366f11253ea$var$SemVer)){if("string"==typeof r&&r===this.version)return 0;r=new $5d67c366f11253ea$var$SemVer(r,this.options)}return r.version===this.version?0:this.compareMain(r)||this.comparePre(r)}compareMain(r){return r instanceof $5d67c366f11253ea$var$SemVer||(r=new $5d67c366f11253ea$var$SemVer(r,this.options)),$5d67c366f11253ea$require$compareIdentifiers(this.major,r.major)||$5d67c366f11253ea$require$compareIdentifiers(this.minor,r.minor)||$5d67c366f11253ea$require$compareIdentifiers(this.patch,r.patch)}comparePre(r){if(r instanceof $5d67c366f11253ea$var$SemVer||(r=new $5d67c366f11253ea$var$SemVer(r,this.options)),this.prerelease.length&&!r.prerelease.length)return -1;if(!this.prerelease.length&&r.prerelease.length)return 1;if(!this.prerelease.length&&!r.prerelease.length)return 0;let i=0;do{let n=this.prerelease[i],s=r.prerelease[i];if($aW7Y5("prerelease compare",i,n,s),void 0===n&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===n)return -1;if(n===s)continue;else return $5d67c366f11253ea$require$compareIdentifiers(n,s)}while(++i)}compareBuild(r){r instanceof $5d67c366f11253ea$var$SemVer||(r=new $5d67c366f11253ea$var$SemVer(r,this.options));let i=0;do{let n=this.build[i],s=r.build[i];if($aW7Y5("prerelease compare",i,n,s),void 0===n&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===n)return -1;if(n===s)continue;else return $5d67c366f11253ea$require$compareIdentifiers(n,s)}while(++i)}inc(r,i,n){switch(r){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",i,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",i,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",i,n),this.inc("pre",i,n);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",i,n),this.inc("pre",i,n);break;case"major":(0!==this.minor||0!==this.patch||0===this.prerelease.length)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(0!==this.patch||0===this.prerelease.length)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{let r=Number(n)?1:0;if(!i&&!1===n)throw Error("invalid increment argument: identifier is empty");if(0===this.prerelease.length)this.prerelease=[r];else{let s=this.prerelease.length;for(;--s>=0;)"number"==typeof this.prerelease[s]&&(this.prerelease[s]++,s=-2);if(-1===s){if(i===this.prerelease.join(".")&&!1===n)throw Error("invalid increment argument: identifier already exists");this.prerelease.push(r)}}if(i){let s=[i,r];!1===n&&(s=[i]),0===$5d67c366f11253ea$require$compareIdentifiers(this.prerelease[0],i)?isNaN(this.prerelease[1])&&(this.prerelease=s):this.prerelease=s}break}default:throw Error(`invalid increment argument: ${r}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}$5d67c366f11253ea$exports=$5d67c366f11253ea$var$SemVer;var $2365cabe1405e41d$exports={};const $2365cabe1405e41d$var$parse=(r,i,n=!1)=>{if(r instanceof $5d67c366f11253ea$exports)return r;try{return new $5d67c366f11253ea$exports(r,i)}catch(r){if(!n)return null;throw r}};$2365cabe1405e41d$exports=$2365cabe1405e41d$var$parse;var $db1a24152bcbff38$exports={};const $db1a24152bcbff38$var$valid=(r,i)=>{let n=$2365cabe1405e41d$exports(r,i);return n?n.version:null};$db1a24152bcbff38$exports=$db1a24152bcbff38$var$valid;var $5ab1ebf1c7653375$exports={};const $5ab1ebf1c7653375$var$clean=(r,i)=>{let n=$2365cabe1405e41d$exports(r.trim().replace(/^[=v]+/,""),i);return n?n.version:null};$5ab1ebf1c7653375$exports=$5ab1ebf1c7653375$var$clean;var $410676b06cd48254$exports={};const $410676b06cd48254$var$inc=(r,i,n,s,a)=>{"string"==typeof n&&(a=s,s=n,n=void 0);try{return new $5d67c366f11253ea$exports(r instanceof $5d67c366f11253ea$exports?r.version:r,n).inc(i,s,a).version}catch(r){return null}};$410676b06cd48254$exports=$410676b06cd48254$var$inc;var $1fa0b4a78a9c3100$exports={};const $1fa0b4a78a9c3100$var$diff=(r,i)=>{let n=$2365cabe1405e41d$exports(r,null,!0),s=$2365cabe1405e41d$exports(i,null,!0),a=n.compare(s);if(0===a)return null;let o=a>0,d=o?n:s,f=o?s:n,l=!!d.prerelease.length,u=!!f.prerelease.length;if(u&&!l)return f.patch||f.minor?d.patch?"patch":d.minor?"minor":"major":"major";let c=l?"pre":"";return n.major!==s.major?c+"major":n.minor!==s.minor?c+"minor":n.patch!==s.patch?c+"patch":"prerelease"};$1fa0b4a78a9c3100$exports=$1fa0b4a78a9c3100$var$diff;var $d9e91b148724d7ba$exports={};const $d9e91b148724d7ba$var$major=(r,i)=>new $5d67c366f11253ea$exports(r,i).major;$d9e91b148724d7ba$exports=$d9e91b148724d7ba$var$major;var $88beef4f36bb99dc$exports={};const $88beef4f36bb99dc$var$minor=(r,i)=>new $5d67c366f11253ea$exports(r,i).minor;$88beef4f36bb99dc$exports=$88beef4f36bb99dc$var$minor;var $fbc38baee3ec52af$exports={};const $fbc38baee3ec52af$var$patch=(r,i)=>new $5d67c366f11253ea$exports(r,i).patch;$fbc38baee3ec52af$exports=$fbc38baee3ec52af$var$patch;var $ec64f7ad8d61d626$exports={};const $ec64f7ad8d61d626$var$prerelease=(r,i)=>{let n=$2365cabe1405e41d$exports(r,i);return n&&n.prerelease.length?n.prerelease:null};$ec64f7ad8d61d626$exports=$ec64f7ad8d61d626$var$prerelease;var $be8c6448e7d4b283$exports={};const $be8c6448e7d4b283$var$compare=(r,i,n)=>new $5d67c366f11253ea$exports(r,n).compare(new $5d67c366f11253ea$exports(i,n));$be8c6448e7d4b283$exports=$be8c6448e7d4b283$var$compare;var $d53fa55eda60e3c4$exports={};const $d53fa55eda60e3c4$var$rcompare=(r,i,n)=>$be8c6448e7d4b283$exports(i,r,n);$d53fa55eda60e3c4$exports=$d53fa55eda60e3c4$var$rcompare;var $8c9639966becf13f$exports={};const $8c9639966becf13f$var$compareLoose=(r,i)=>$be8c6448e7d4b283$exports(r,i,!0);$8c9639966becf13f$exports=$8c9639966becf13f$var$compareLoose;var $9c3f14a67e2b7b05$exports={};const $9c3f14a67e2b7b05$var$compareBuild=(r,i,n)=>{let s=new $5d67c366f11253ea$exports(r,n),a=new $5d67c366f11253ea$exports(i,n);return s.compare(a)||s.compareBuild(a)};$9c3f14a67e2b7b05$exports=$9c3f14a67e2b7b05$var$compareBuild;var $10e9ef24aa7dc37d$exports={};const $10e9ef24aa7dc37d$var$sort=(r,i)=>r.sort((r,n)=>$9c3f14a67e2b7b05$exports(r,n,i));$10e9ef24aa7dc37d$exports=$10e9ef24aa7dc37d$var$sort;var $c310560cb4f36b70$exports={};const $c310560cb4f36b70$var$rsort=(r,i)=>r.sort((r,n)=>$9c3f14a67e2b7b05$exports(n,r,i));$c310560cb4f36b70$exports=$c310560cb4f36b70$var$rsort;var $0716672aeeeb00b7$exports={};const $0716672aeeeb00b7$var$gt=(r,i,n)=>$be8c6448e7d4b283$exports(r,i,n)>0;$0716672aeeeb00b7$exports=$0716672aeeeb00b7$var$gt;var $6bef60a1f9ea49cc$exports={};const $6bef60a1f9ea49cc$var$lt=(r,i,n)=>0>$be8c6448e7d4b283$exports(r,i,n);$6bef60a1f9ea49cc$exports=$6bef60a1f9ea49cc$var$lt;var $9a774071cdb8a22b$exports={};const $9a774071cdb8a22b$var$eq=(r,i,n)=>0===$be8c6448e7d4b283$exports(r,i,n);$9a774071cdb8a22b$exports=$9a774071cdb8a22b$var$eq;var $d1d9bbe2c9634018$exports={};const $d1d9bbe2c9634018$var$neq=(r,i,n)=>0!==$be8c6448e7d4b283$exports(r,i,n);$d1d9bbe2c9634018$exports=$d1d9bbe2c9634018$var$neq;var $2b877d0256c5541e$exports={};const $2b877d0256c5541e$var$gte=(r,i,n)=>$be8c6448e7d4b283$exports(r,i,n)>=0;$2b877d0256c5541e$exports=$2b877d0256c5541e$var$gte;var $278c58909ad7ced2$exports={};const $278c58909ad7ced2$var$lte=(r,i,n)=>0>=$be8c6448e7d4b283$exports(r,i,n);$278c58909ad7ced2$exports=$278c58909ad7ced2$var$lte;var $e52ecc8579498688$exports={};const $e52ecc8579498688$var$cmp=(r,i,n,s)=>{switch(i){case"===":return"object"==typeof r&&(r=r.version),"object"==typeof n&&(n=n.version),r===n;case"!==":return"object"==typeof r&&(r=r.version),"object"==typeof n&&(n=n.version),r!==n;case"":case"=":case"==":return $9a774071cdb8a22b$exports(r,n,s);case"!=":return $d1d9bbe2c9634018$exports(r,n,s);case">":return $0716672aeeeb00b7$exports(r,n,s);case">=":return $2b877d0256c5541e$exports(r,n,s);case"<":return $6bef60a1f9ea49cc$exports(r,n,s);case"<=":return $278c58909ad7ced2$exports(r,n,s);default:throw TypeError(`Invalid operator: ${i}`)}};$e52ecc8579498688$exports=$e52ecc8579498688$var$cmp;var $5d8cdd4724630ca5$exports={},$9kaCP=parcelRequire("9kaCP"),$5d8cdd4724630ca5$require$re=$9kaCP.safeRe,$5d8cdd4724630ca5$require$t=$9kaCP.t;const $5d8cdd4724630ca5$var$coerce=(r,i)=>{if(r instanceof $5d67c366f11253ea$exports)return r;if("number"==typeof r&&(r=String(r)),"string"!=typeof r)return null;let n=null;if((i=i||{}).rtl){let i;for(;(i=$5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCERTL].exec(r))&&(!n||n.index+n[0].length!==r.length);)n&&i.index+i[0].length===n.index+n[0].length||(n=i),$5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;$5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCERTL].lastIndex=-1}else n=r.match($5d8cdd4724630ca5$require$re[$5d8cdd4724630ca5$require$t.COERCE]);return null===n?null:$2365cabe1405e41d$exports(`${n[2]}.${n[3]||"0"}.${n[4]||"0"}`,i)};$5d8cdd4724630ca5$exports=$5d8cdd4724630ca5$var$coerce;var $811acfa69967f2ec$exports={};const $811acfa69967f2ec$var$ANY=Symbol("SemVer ANY");class $811acfa69967f2ec$var$Comparator{static get ANY(){return $811acfa69967f2ec$var$ANY}constructor(r,i){if(i=$2404c71d37817e19$exports(i),r instanceof $811acfa69967f2ec$var$Comparator){if(!!i.loose===r.loose)return r;r=r.value}$aW7Y5("comparator",r=r.trim().split(/\s+/).join(" "),i),this.options=i,this.loose=!!i.loose,this.parse(r),this.semver===$811acfa69967f2ec$var$ANY?this.value="":this.value=this.operator+this.semver.version,$aW7Y5("comp",this)}parse(r){let i=this.options.loose?$811acfa69967f2ec$require$re[$811acfa69967f2ec$require$t.COMPARATORLOOSE]:$811acfa69967f2ec$require$re[$811acfa69967f2ec$require$t.COMPARATOR],n=r.match(i);if(!n)throw TypeError(`Invalid comparator: ${r}`);this.operator=void 0!==n[1]?n[1]:"","="===this.operator&&(this.operator=""),n[2]?this.semver=new $5d67c366f11253ea$exports(n[2],this.options.loose):this.semver=$811acfa69967f2ec$var$ANY}toString(){return this.value}test(r){if($aW7Y5("Comparator.test",r,this.options.loose),this.semver===$811acfa69967f2ec$var$ANY||r===$811acfa69967f2ec$var$ANY)return!0;if("string"==typeof r)try{r=new $5d67c366f11253ea$exports(r,this.options)}catch(r){return!1}return $e52ecc8579498688$exports(r,this.operator,this.semver,this.options)}intersects(r,i){if(!(r instanceof $811acfa69967f2ec$var$Comparator))throw TypeError("a Comparator is required");return""===this.operator?""===this.value||new $4577f00308fa375e$exports(r.value,i).test(this.value):""===r.operator?""===r.value||new $4577f00308fa375e$exports(this.value,i).test(r.semver):!((i=$2404c71d37817e19$exports(i)).includePrerelease&&("<0.0.0-0"===this.value||"<0.0.0-0"===r.value)||!i.includePrerelease&&(this.value.startsWith("<0.0.0")||r.value.startsWith("<0.0.0")))&&!!(this.operator.startsWith(">")&&r.operator.startsWith(">")||this.operator.startsWith("<")&&r.operator.startsWith("<")||this.semver.version===r.semver.version&&this.operator.includes("=")&&r.operator.includes("=")||$e52ecc8579498688$exports(this.semver,"<",r.semver,i)&&this.operator.startsWith(">")&&r.operator.startsWith("<")||$e52ecc8579498688$exports(this.semver,">",r.semver,i)&&this.operator.startsWith("<")&&r.operator.startsWith(">"))}}$811acfa69967f2ec$exports=$811acfa69967f2ec$var$Comparator;var $9kaCP=parcelRequire("9kaCP"),$811acfa69967f2ec$require$re=$9kaCP.safeRe,$811acfa69967f2ec$require$t=$9kaCP.t,$aW7Y5=parcelRequire("aW7Y5"),$4577f00308fa375e$exports={};class $4577f00308fa375e$var$Range{constructor(r,i){if(i=$2404c71d37817e19$exports(i),r instanceof $4577f00308fa375e$var$Range){if(!!i.loose===r.loose&&!!i.includePrerelease===r.includePrerelease)return r;return new $4577f00308fa375e$var$Range(r.raw,i)}if(r instanceof $811acfa69967f2ec$exports)return this.raw=r.value,this.set=[[r]],this.format(),this;if(this.options=i,this.loose=!!i.loose,this.includePrerelease=!!i.includePrerelease,this.raw=r.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(r=>this.parseRange(r.trim())).filter(r=>r.length),!this.set.length)throw TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let r=this.set[0];if(this.set=this.set.filter(r=>!$4577f00308fa375e$var$isNullSet(r[0])),0===this.set.length)this.set=[r];else if(this.set.length>1){for(let r of this.set)if(1===r.length&&$4577f00308fa375e$var$isAny(r[0])){this.set=[r];break}}}this.format()}format(){return this.range=this.set.map(r=>r.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(r){let i=(this.options.includePrerelease&&$4577f00308fa375e$require$FLAG_INCLUDE_PRERELEASE)|(this.options.loose&&$4577f00308fa375e$require$FLAG_LOOSE),n=i+":"+r,s=$4577f00308fa375e$var$cache.get(n);if(s)return s;let a=this.options.loose,o=a?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.HYPHENRANGELOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.HYPHENRANGE];$aW7Y5("hyphen replace",r=r.replace(o,$4577f00308fa375e$var$hyphenReplace(this.options.includePrerelease))),$aW7Y5("comparator trim",r=r.replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.COMPARATORTRIM],$4577f00308fa375e$require$comparatorTrimReplace)),$aW7Y5("tilde trim",r=r.replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.TILDETRIM],$4577f00308fa375e$require$tildeTrimReplace)),$aW7Y5("caret trim",r=r.replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.CARETTRIM],$4577f00308fa375e$require$caretTrimReplace));let d=r.split(" ").map(r=>$4577f00308fa375e$var$parseComparator(r,this.options)).join(" ").split(/\s+/).map(r=>$4577f00308fa375e$var$replaceGTE0(r,this.options));a&&(d=d.filter(r=>($aW7Y5("loose invalid filter",r,this.options),!!r.match($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.COMPARATORLOOSE])))),$aW7Y5("range list",d);let f=new Map,l=d.map(r=>new $811acfa69967f2ec$exports(r,this.options));for(let r of l){if($4577f00308fa375e$var$isNullSet(r))return[r];f.set(r.value,r)}f.size>1&&f.has("")&&f.delete("");let u=[...f.values()];return $4577f00308fa375e$var$cache.set(n,u),u}intersects(r,i){if(!(r instanceof $4577f00308fa375e$var$Range))throw TypeError("a Range is required");return this.set.some(n=>$4577f00308fa375e$var$isSatisfiable(n,i)&&r.set.some(r=>$4577f00308fa375e$var$isSatisfiable(r,i)&&n.every(n=>r.every(r=>n.intersects(r,i)))))}test(r){if(!r)return!1;if("string"==typeof r)try{r=new $5d67c366f11253ea$exports(r,this.options)}catch(r){return!1}for(let i=0;i0)for(var n=0,s=arguments.length;n1)n=i;else if(this.head)s=this.head.next,n=this.head.value;else throw TypeError("Reduce of empty list with no initial value");for(var a=0;null!==s;a++)n=r(n,s.value,a),s=s.next;return n},$cccfe4fb1cd75a09$var$Yallist.prototype.reduceReverse=function(r,i){var n,s=this.tail;if(arguments.length>1)n=i;else if(this.tail)s=this.tail.prev,n=this.tail.value;else throw TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;null!==s;a--)n=r(n,s.value,a),s=s.prev;return n},$cccfe4fb1cd75a09$var$Yallist.prototype.toArray=function(){for(var r=Array(this.length),i=0,n=this.head;null!==n;i++)r[i]=n.value,n=n.next;return r},$cccfe4fb1cd75a09$var$Yallist.prototype.toArrayReverse=function(){for(var r=Array(this.length),i=0,n=this.tail;null!==n;i++)r[i]=n.value,n=n.prev;return r},$cccfe4fb1cd75a09$var$Yallist.prototype.slice=function(r,i){(i=i||this.length)<0&&(i+=this.length),(r=r||0)<0&&(r+=this.length);var n=new $cccfe4fb1cd75a09$var$Yallist;if(ithis.length&&(i=this.length);for(var s=0,a=this.head;null!==a&&sthis.length&&(i=this.length);for(var s=this.length,a=this.tail;null!==a&&s>i;s--)a=a.prev;for(;null!==a&&s>r;s--,a=a.prev)n.push(a.value);return n},$cccfe4fb1cd75a09$var$Yallist.prototype.splice=function(r,i,...n){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var s=0,a=this.head;null!==a&&s1;class $563379c921497b8a$var$LRUCache{constructor(r){if("number"==typeof r&&(r={max:r}),r||(r={}),r.max&&("number"!=typeof r.max||r.max<0))throw TypeError("max must be a non-negative number");this[$563379c921497b8a$var$MAX]=r.max||1/0;let i=r.length||$563379c921497b8a$var$naiveLength;if(this[$563379c921497b8a$var$LENGTH_CALCULATOR]="function"!=typeof i?$563379c921497b8a$var$naiveLength:i,this[$563379c921497b8a$var$ALLOW_STALE]=r.stale||!1,r.maxAge&&"number"!=typeof r.maxAge)throw TypeError("maxAge must be a number");this[$563379c921497b8a$var$MAX_AGE]=r.maxAge||0,this[$563379c921497b8a$var$DISPOSE]=r.dispose,this[$563379c921497b8a$var$NO_DISPOSE_ON_SET]=r.noDisposeOnSet||!1,this[$563379c921497b8a$var$UPDATE_AGE_ON_GET]=r.updateAgeOnGet||!1,this.reset()}set max(r){if("number"!=typeof r||r<0)throw TypeError("max must be a non-negative number");this[$563379c921497b8a$var$MAX]=r||1/0,$563379c921497b8a$var$trim(this)}get max(){return this[$563379c921497b8a$var$MAX]}set allowStale(r){this[$563379c921497b8a$var$ALLOW_STALE]=!!r}get allowStale(){return this[$563379c921497b8a$var$ALLOW_STALE]}set maxAge(r){if("number"!=typeof r)throw TypeError("maxAge must be a non-negative number");this[$563379c921497b8a$var$MAX_AGE]=r,$563379c921497b8a$var$trim(this)}get maxAge(){return this[$563379c921497b8a$var$MAX_AGE]}set lengthCalculator(r){"function"!=typeof r&&(r=$563379c921497b8a$var$naiveLength),r!==this[$563379c921497b8a$var$LENGTH_CALCULATOR]&&(this[$563379c921497b8a$var$LENGTH_CALCULATOR]=r,this[$563379c921497b8a$var$LENGTH]=0,this[$563379c921497b8a$var$LRU_LIST].forEach(r=>{r.length=this[$563379c921497b8a$var$LENGTH_CALCULATOR](r.value,r.key),this[$563379c921497b8a$var$LENGTH]+=r.length})),$563379c921497b8a$var$trim(this)}get lengthCalculator(){return this[$563379c921497b8a$var$LENGTH_CALCULATOR]}get length(){return this[$563379c921497b8a$var$LENGTH]}get itemCount(){return this[$563379c921497b8a$var$LRU_LIST].length}rforEach(r,i){i=i||this;for(let n=this[$563379c921497b8a$var$LRU_LIST].tail;null!==n;){let s=n.prev;$563379c921497b8a$var$forEachStep(this,r,n,i),n=s}}forEach(r,i){i=i||this;for(let n=this[$563379c921497b8a$var$LRU_LIST].head;null!==n;){let s=n.next;$563379c921497b8a$var$forEachStep(this,r,n,i),n=s}}keys(){return this[$563379c921497b8a$var$LRU_LIST].toArray().map(r=>r.key)}values(){return this[$563379c921497b8a$var$LRU_LIST].toArray().map(r=>r.value)}reset(){this[$563379c921497b8a$var$DISPOSE]&&this[$563379c921497b8a$var$LRU_LIST]&&this[$563379c921497b8a$var$LRU_LIST].length&&this[$563379c921497b8a$var$LRU_LIST].forEach(r=>this[$563379c921497b8a$var$DISPOSE](r.key,r.value)),this[$563379c921497b8a$var$CACHE]=new Map,this[$563379c921497b8a$var$LRU_LIST]=new $cccfe4fb1cd75a09$exports,this[$563379c921497b8a$var$LENGTH]=0}dump(){return this[$563379c921497b8a$var$LRU_LIST].map(r=>!$563379c921497b8a$var$isStale(this,r)&&{k:r.key,v:r.value,e:r.now+(r.maxAge||0)}).toArray().filter(r=>r)}dumpLru(){return this[$563379c921497b8a$var$LRU_LIST]}set(r,i,n){if((n=n||this[$563379c921497b8a$var$MAX_AGE])&&"number"!=typeof n)throw TypeError("maxAge must be a number");let s=n?Date.now():0,a=this[$563379c921497b8a$var$LENGTH_CALCULATOR](i,r);if(this[$563379c921497b8a$var$CACHE].has(r)){if(a>this[$563379c921497b8a$var$MAX])return $563379c921497b8a$var$del(this,this[$563379c921497b8a$var$CACHE].get(r)),!1;let o=this[$563379c921497b8a$var$CACHE].get(r),d=o.value;return this[$563379c921497b8a$var$DISPOSE]&&!this[$563379c921497b8a$var$NO_DISPOSE_ON_SET]&&this[$563379c921497b8a$var$DISPOSE](r,d.value),d.now=s,d.maxAge=n,d.value=i,this[$563379c921497b8a$var$LENGTH]+=a-d.length,d.length=a,this.get(r),$563379c921497b8a$var$trim(this),!0}let o=new $563379c921497b8a$var$Entry(r,i,a,s,n);return o.length>this[$563379c921497b8a$var$MAX]?(this[$563379c921497b8a$var$DISPOSE]&&this[$563379c921497b8a$var$DISPOSE](r,i),!1):(this[$563379c921497b8a$var$LENGTH]+=o.length,this[$563379c921497b8a$var$LRU_LIST].unshift(o),this[$563379c921497b8a$var$CACHE].set(r,this[$563379c921497b8a$var$LRU_LIST].head),$563379c921497b8a$var$trim(this),!0)}has(r){if(!this[$563379c921497b8a$var$CACHE].has(r))return!1;let i=this[$563379c921497b8a$var$CACHE].get(r).value;return!$563379c921497b8a$var$isStale(this,i)}get(r){return $563379c921497b8a$var$get(this,r,!0)}peek(r){return $563379c921497b8a$var$get(this,r,!1)}pop(){let r=this[$563379c921497b8a$var$LRU_LIST].tail;return r?($563379c921497b8a$var$del(this,r),r.value):null}del(r){$563379c921497b8a$var$del(this,this[$563379c921497b8a$var$CACHE].get(r))}load(r){this.reset();let i=Date.now();for(let n=r.length-1;n>=0;n--){let s=r[n],a=s.e||0;if(0===a)this.set(s.k,s.v);else{let r=a-i;r>0&&this.set(s.k,s.v,r)}}}prune(){this[$563379c921497b8a$var$CACHE].forEach((r,i)=>$563379c921497b8a$var$get(this,i,!1))}}const $563379c921497b8a$var$get=(r,i,n)=>{let s=r[$563379c921497b8a$var$CACHE].get(i);if(s){let i=s.value;if($563379c921497b8a$var$isStale(r,i)){if($563379c921497b8a$var$del(r,s),!r[$563379c921497b8a$var$ALLOW_STALE])return}else n&&(r[$563379c921497b8a$var$UPDATE_AGE_ON_GET]&&(s.value.now=Date.now()),r[$563379c921497b8a$var$LRU_LIST].unshiftNode(s));return i.value}},$563379c921497b8a$var$isStale=(r,i)=>{if(!i||!i.maxAge&&!r[$563379c921497b8a$var$MAX_AGE])return!1;let n=Date.now()-i.now;return i.maxAge?n>i.maxAge:r[$563379c921497b8a$var$MAX_AGE]&&n>r[$563379c921497b8a$var$MAX_AGE]},$563379c921497b8a$var$trim=r=>{if(r[$563379c921497b8a$var$LENGTH]>r[$563379c921497b8a$var$MAX])for(let i=r[$563379c921497b8a$var$LRU_LIST].tail;r[$563379c921497b8a$var$LENGTH]>r[$563379c921497b8a$var$MAX]&&null!==i;){let n=i.prev;$563379c921497b8a$var$del(r,i),i=n}},$563379c921497b8a$var$del=(r,i)=>{if(i){let n=i.value;r[$563379c921497b8a$var$DISPOSE]&&r[$563379c921497b8a$var$DISPOSE](n.key,n.value),r[$563379c921497b8a$var$LENGTH]-=n.length,r[$563379c921497b8a$var$CACHE].delete(n.key),r[$563379c921497b8a$var$LRU_LIST].removeNode(i)}};class $563379c921497b8a$var$Entry{constructor(r,i,n,s,a){this.key=r,this.value=i,this.length=n,this.now=s,this.maxAge=a||0}}const $563379c921497b8a$var$forEachStep=(r,i,n,s)=>{let a=n.value;$563379c921497b8a$var$isStale(r,a)&&($563379c921497b8a$var$del(r,n),r[$563379c921497b8a$var$ALLOW_STALE]||(a=void 0)),a&&i.call(s,a.value,a.key,r)};$563379c921497b8a$exports=$563379c921497b8a$var$LRUCache;const $4577f00308fa375e$var$cache=new $563379c921497b8a$exports({max:1e3});var $aW7Y5=parcelRequire("aW7Y5"),$9kaCP=parcelRequire("9kaCP"),$4577f00308fa375e$require$re=$9kaCP.safeRe,$4577f00308fa375e$require$t=$9kaCP.t,$4577f00308fa375e$require$comparatorTrimReplace=$9kaCP.comparatorTrimReplace,$4577f00308fa375e$require$tildeTrimReplace=$9kaCP.tildeTrimReplace,$4577f00308fa375e$require$caretTrimReplace=$9kaCP.caretTrimReplace,$85PoE=parcelRequire("85PoE"),$4577f00308fa375e$require$FLAG_INCLUDE_PRERELEASE=$85PoE.FLAG_INCLUDE_PRERELEASE,$4577f00308fa375e$require$FLAG_LOOSE=$85PoE.FLAG_LOOSE;const $4577f00308fa375e$var$isNullSet=r=>"<0.0.0-0"===r.value,$4577f00308fa375e$var$isAny=r=>""===r.value,$4577f00308fa375e$var$isSatisfiable=(r,i)=>{let n=!0,s=r.slice(),a=s.pop();for(;n&&s.length;)n=s.every(r=>a.intersects(r,i)),a=s.pop();return n},$4577f00308fa375e$var$parseComparator=(r,i)=>($aW7Y5("comp",r,i),r=$4577f00308fa375e$var$replaceCarets(r,i),$aW7Y5("caret",r),r=$4577f00308fa375e$var$replaceTildes(r,i),$aW7Y5("tildes",r),r=$4577f00308fa375e$var$replaceXRanges(r,i),$aW7Y5("xrange",r),r=$4577f00308fa375e$var$replaceStars(r,i),$aW7Y5("stars",r),r),$4577f00308fa375e$var$isX=r=>!r||"x"===r.toLowerCase()||"*"===r,$4577f00308fa375e$var$replaceTildes=(r,i)=>r.trim().split(/\s+/).map(r=>$4577f00308fa375e$var$replaceTilde(r,i)).join(" "),$4577f00308fa375e$var$replaceTilde=(r,i)=>{let n=i.loose?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.TILDELOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.TILDE];return r.replace(n,(i,n,s,a,o)=>{let d;return $aW7Y5("tilde",r,i,n,s,a,o),$4577f00308fa375e$var$isX(n)?d="":$4577f00308fa375e$var$isX(s)?d=`>=${n}.0.0 <${+n+1}.0.0-0`:$4577f00308fa375e$var$isX(a)?d=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:o?($aW7Y5("replaceTilde pr",o),d=`>=${n}.${s}.${a}-${o} <${n}.${+s+1}.0-0`):d=`>=${n}.${s}.${a} <${n}.${+s+1}.0-0`,$aW7Y5("tilde return",d),d})},$4577f00308fa375e$var$replaceCarets=(r,i)=>r.trim().split(/\s+/).map(r=>$4577f00308fa375e$var$replaceCaret(r,i)).join(" "),$4577f00308fa375e$var$replaceCaret=(r,i)=>{$aW7Y5("caret",r,i);let n=i.loose?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.CARETLOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.CARET],s=i.includePrerelease?"-0":"";return r.replace(n,(i,n,a,o,d)=>{let f;return $aW7Y5("caret",r,i,n,a,o,d),$4577f00308fa375e$var$isX(n)?f="":$4577f00308fa375e$var$isX(a)?f=`>=${n}.0.0${s} <${+n+1}.0.0-0`:$4577f00308fa375e$var$isX(o)?f="0"===n?`>=${n}.${a}.0${s} <${n}.${+a+1}.0-0`:`>=${n}.${a}.0${s} <${+n+1}.0.0-0`:d?($aW7Y5("replaceCaret pr",d),f="0"===n?"0"===a?`>=${n}.${a}.${o}-${d} <${n}.${a}.${+o+1}-0`:`>=${n}.${a}.${o}-${d} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${o}-${d} <${+n+1}.0.0-0`):($aW7Y5("no pr"),f="0"===n?"0"===a?`>=${n}.${a}.${o}${s} <${n}.${a}.${+o+1}-0`:`>=${n}.${a}.${o}${s} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${o} <${+n+1}.0.0-0`),$aW7Y5("caret return",f),f})},$4577f00308fa375e$var$replaceXRanges=(r,i)=>($aW7Y5("replaceXRanges",r,i),r.split(/\s+/).map(r=>$4577f00308fa375e$var$replaceXRange(r,i)).join(" ")),$4577f00308fa375e$var$replaceXRange=(r,i)=>{r=r.trim();let n=i.loose?$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.XRANGELOOSE]:$4577f00308fa375e$require$re[$4577f00308fa375e$require$t.XRANGE];return r.replace(n,(n,s,a,o,d,f)=>{$aW7Y5("xRange",r,n,s,a,o,d,f);let l=$4577f00308fa375e$var$isX(a),u=l||$4577f00308fa375e$var$isX(o),c=u||$4577f00308fa375e$var$isX(d),p=c;return"="===s&&p&&(s=""),f=i.includePrerelease?"-0":"",l?n=">"===s||"<"===s?"<0.0.0-0":"*":s&&p?(u&&(o=0),d=0,">"===s?(s=">=",u?(a=+a+1,o=0):o=+o+1,d=0):"<="===s&&(s="<",u?a=+a+1:o=+o+1),"<"===s&&(f="-0"),n=`${s+a}.${o}.${d}${f}`):u?n=`>=${a}.0.0${f} <${+a+1}.0.0-0`:c&&(n=`>=${a}.${o}.0${f} <${a}.${+o+1}.0-0`),$aW7Y5("xRange return",n),n})},$4577f00308fa375e$var$replaceStars=(r,i)=>($aW7Y5("replaceStars",r,i),r.trim().replace($4577f00308fa375e$require$re[$4577f00308fa375e$require$t.STAR],"")),$4577f00308fa375e$var$replaceGTE0=(r,i)=>($aW7Y5("replaceGTE0",r,i),r.trim().replace($4577f00308fa375e$require$re[i.includePrerelease?$4577f00308fa375e$require$t.GTE0PRE:$4577f00308fa375e$require$t.GTE0],"")),$4577f00308fa375e$var$hyphenReplace=r=>(i,n,s,a,o,d,f,l,u,c,p,h,g)=>(n=$4577f00308fa375e$var$isX(s)?"":$4577f00308fa375e$var$isX(a)?`>=${s}.0.0${r?"-0":""}`:$4577f00308fa375e$var$isX(o)?`>=${s}.${a}.0${r?"-0":""}`:d?`>=${n}`:`>=${n}${r?"-0":""}`,`${n} ${l=$4577f00308fa375e$var$isX(u)?"":$4577f00308fa375e$var$isX(c)?`<${+u+1}.0.0-0`:$4577f00308fa375e$var$isX(p)?`<${u}.${+c+1}.0-0`:h?`<=${u}.${c}.${p}-${h}`:r?`<${u}.${c}.${+p+1}-0`:`<=${l}`}`.trim()),$4577f00308fa375e$var$testSet=(r,i,n)=>{for(let n=0;n0){let s=r[n].semver;if(s.major===i.major&&s.minor===i.minor&&s.patch===i.patch)return!0}return!1}return!0};var $cb90bdc22f10fcf7$exports={};const $cb90bdc22f10fcf7$var$satisfies=(r,i,n)=>{try{i=new $4577f00308fa375e$exports(i,n)}catch(r){return!1}return i.test(r)};$cb90bdc22f10fcf7$exports=$cb90bdc22f10fcf7$var$satisfies;var $14d64aa0eb5c855b$exports={};const $14d64aa0eb5c855b$var$toComparators=(r,i)=>new $4577f00308fa375e$exports(r,i).set.map(r=>r.map(r=>r.value).join(" ").trim().split(" "));$14d64aa0eb5c855b$exports=$14d64aa0eb5c855b$var$toComparators;var $4c69ba97938a7bf5$exports={};const $4c69ba97938a7bf5$var$maxSatisfying=(r,i,n)=>{let s=null,a=null,o=null;try{o=new $4577f00308fa375e$exports(i,n)}catch(r){return null}return r.forEach(r=>{o.test(r)&&(!s||-1===a.compare(r))&&(s=r,a=new $5d67c366f11253ea$exports(s,n))}),s};$4c69ba97938a7bf5$exports=$4c69ba97938a7bf5$var$maxSatisfying;var $cffd1991a3ccb43c$exports={};const $cffd1991a3ccb43c$var$minSatisfying=(r,i,n)=>{let s=null,a=null,o=null;try{o=new $4577f00308fa375e$exports(i,n)}catch(r){return null}return r.forEach(r=>{o.test(r)&&(!s||1===a.compare(r))&&(s=r,a=new $5d67c366f11253ea$exports(s,n))}),s};$cffd1991a3ccb43c$exports=$cffd1991a3ccb43c$var$minSatisfying;var $764705632cd4f711$exports={};const $764705632cd4f711$var$minVersion=(r,i)=>{r=new $4577f00308fa375e$exports(r,i);let n=new $5d67c366f11253ea$exports("0.0.0");if(r.test(n)||(n=new $5d67c366f11253ea$exports("0.0.0-0"),r.test(n)))return n;n=null;for(let i=0;i{let i=new $5d67c366f11253ea$exports(r.semver.version);switch(r.operator){case">":0===i.prerelease.length?i.patch++:i.prerelease.push(0),i.raw=i.format();case"":case">=":(!a||$0716672aeeeb00b7$exports(i,a))&&(a=i);break;case"<":case"<=":break;default:throw Error(`Unexpected operation: ${r.operator}`)}}),a&&(!n||$0716672aeeeb00b7$exports(n,a))&&(n=a)}return n&&r.test(n)?n:null};$764705632cd4f711$exports=$764705632cd4f711$var$minVersion;var $c0f0cafd6c67ed17$exports={};const $c0f0cafd6c67ed17$var$validRange=(r,i)=>{try{return new $4577f00308fa375e$exports(r,i).range||"*"}catch(r){return null}};$c0f0cafd6c67ed17$exports=$c0f0cafd6c67ed17$var$validRange;var $0aacc91285ca0f4e$exports={};const{ANY:$0aacc91285ca0f4e$var$ANY}=$811acfa69967f2ec$exports,$0aacc91285ca0f4e$var$outside=(r,i,n,s)=>{let a,o,d,f,l;switch(r=new $5d67c366f11253ea$exports(r,s),i=new $4577f00308fa375e$exports(i,s),n){case">":a=$0716672aeeeb00b7$exports,o=$278c58909ad7ced2$exports,d=$6bef60a1f9ea49cc$exports,f=">",l=">=";break;case"<":a=$6bef60a1f9ea49cc$exports,o=$2b877d0256c5541e$exports,d=$0716672aeeeb00b7$exports,f="<",l="<=";break;default:throw TypeError('Must provide a hilo val of "<" or ">"')}if($cb90bdc22f10fcf7$exports(r,i,s))return!1;for(let n=0;n{r.semver===$0aacc91285ca0f4e$var$ANY&&(r=new $811acfa69967f2ec$exports(">=0.0.0")),c=c||r,p=p||r,a(r.semver,c.semver,s)?c=r:d(r.semver,p.semver,s)&&(p=r)}),c.operator===f||c.operator===l||(!p.operator||p.operator===f)&&o(r,p.semver)||p.operator===l&&d(r,p.semver))return!1}return!0};$0aacc91285ca0f4e$exports=$0aacc91285ca0f4e$var$outside;var $b648a67118de5a94$exports={};const $b648a67118de5a94$var$gtr=(r,i,n)=>$0aacc91285ca0f4e$exports(r,i,">",n);$b648a67118de5a94$exports=$b648a67118de5a94$var$gtr;var $076a97b4fe0d43db$exports={};const $076a97b4fe0d43db$var$ltr=(r,i,n)=>$0aacc91285ca0f4e$exports(r,i,"<",n);$076a97b4fe0d43db$exports=$076a97b4fe0d43db$var$ltr;var $c7c26e7fe125b318$exports={};const $c7c26e7fe125b318$var$intersects=(r,i,n)=>(r=new $4577f00308fa375e$exports(r,n),i=new $4577f00308fa375e$exports(i,n),r.intersects(i,n));$c7c26e7fe125b318$exports=$c7c26e7fe125b318$var$intersects;var $4ae56996e8e4ebeb$exports={};$4ae56996e8e4ebeb$exports=(r,i,n)=>{let s=[],a=null,o=null,d=r.sort((r,i)=>$be8c6448e7d4b283$exports(r,i,n));for(let r of d){let d=$cb90bdc22f10fcf7$exports(r,i,n);d?(o=r,a||(a=r)):(o&&s.push([a,o]),o=null,a=null)}a&&s.push([a,null]);let f=[];for(let[r,i]of s)r===i?f.push(r):i||r!==d[0]?i?r===d[0]?f.push(`<=${i}`):f.push(`${r} - ${i}`):f.push(`>=${r}`):f.push("*");let l=f.join(" || "),u="string"==typeof i.raw?i.raw:String(i);return l.length{if(r===i)return!0;r=new $4577f00308fa375e$exports(r,n),i=new $4577f00308fa375e$exports(i,n);let s=!1;t:for(let a of r.set){for(let r of i.set){let i=$87ec2da5a4aa08b0$var$simpleSubset(a,r,n);if(s=s||null!==i,i)continue t}if(s)return!1}return!0},$87ec2da5a4aa08b0$var$minimumVersionWithPreRelease=[new $811acfa69967f2ec$exports(">=0.0.0-0")],$87ec2da5a4aa08b0$var$minimumVersion=[new $811acfa69967f2ec$exports(">=0.0.0")],$87ec2da5a4aa08b0$var$simpleSubset=(r,i,n)=>{let s,a,o,d,f,l,u;if(r===i)return!0;if(1===r.length&&r[0].semver===$87ec2da5a4aa08b0$var$ANY){if(1===i.length&&i[0].semver===$87ec2da5a4aa08b0$var$ANY)return!0;r=n.includePrerelease?$87ec2da5a4aa08b0$var$minimumVersionWithPreRelease:$87ec2da5a4aa08b0$var$minimumVersion}if(1===i.length&&i[0].semver===$87ec2da5a4aa08b0$var$ANY){if(n.includePrerelease)return!0;i=$87ec2da5a4aa08b0$var$minimumVersion}let c=new Set;for(let i of r)">"===i.operator||">="===i.operator?s=$87ec2da5a4aa08b0$var$higherGT(s,i,n):"<"===i.operator||"<="===i.operator?a=$87ec2da5a4aa08b0$var$lowerLT(a,i,n):c.add(i.semver);if(c.size>1||s&&a&&((o=$be8c6448e7d4b283$exports(s.semver,a.semver,n))>0||0===o&&(">="!==s.operator||"<="!==a.operator)))return null;for(let r of c){if(s&&!$cb90bdc22f10fcf7$exports(r,String(s),n)||a&&!$cb90bdc22f10fcf7$exports(r,String(a),n))return null;for(let s of i)if(!$cb90bdc22f10fcf7$exports(r,String(s),n))return!1;return!0}let p=!!a&&!n.includePrerelease&&!!a.semver.prerelease.length&&a.semver,h=!!s&&!n.includePrerelease&&!!s.semver.prerelease.length&&s.semver;for(let r of(p&&1===p.prerelease.length&&"<"===a.operator&&0===p.prerelease[0]&&(p=!1),i)){if(u=u||">"===r.operator||">="===r.operator,l=l||"<"===r.operator||"<="===r.operator,s){if(h&&r.semver.prerelease&&r.semver.prerelease.length&&r.semver.major===h.major&&r.semver.minor===h.minor&&r.semver.patch===h.patch&&(h=!1),">"===r.operator||">="===r.operator){if((d=$87ec2da5a4aa08b0$var$higherGT(s,r,n))===r&&d!==s)return!1}else if(">="===s.operator&&!$cb90bdc22f10fcf7$exports(s.semver,String(r),n))return!1}if(a){if(p&&r.semver.prerelease&&r.semver.prerelease.length&&r.semver.major===p.major&&r.semver.minor===p.minor&&r.semver.patch===p.patch&&(p=!1),"<"===r.operator||"<="===r.operator){if((f=$87ec2da5a4aa08b0$var$lowerLT(a,r,n))===r&&f!==a)return!1}else if("<="===a.operator&&!$cb90bdc22f10fcf7$exports(a.semver,String(r),n))return!1}if(!r.operator&&(a||s)&&0!==o)return!1}return(!s||!l||!!a||0===o)&&(!a||!u||!!s||0===o)&&!h&&!p},$87ec2da5a4aa08b0$var$higherGT=(r,i,n)=>{if(!r)return i;let s=$be8c6448e7d4b283$exports(r.semver,i.semver,n);return s>0?r:s<0?i:">"===i.operator&&">="===r.operator?i:r},$87ec2da5a4aa08b0$var$lowerLT=(r,i,n)=>{if(!r)return i;let s=$be8c6448e7d4b283$exports(r.semver,i.semver,n);return s<0?r:s>0?i:"<"===i.operator&&"<="===r.operator?i:r};$87ec2da5a4aa08b0$exports=$87ec2da5a4aa08b0$var$subset,$f3bb2747c7b09053$exports={parse:$2365cabe1405e41d$exports,valid:$db1a24152bcbff38$exports,clean:$5ab1ebf1c7653375$exports,inc:$410676b06cd48254$exports,diff:$1fa0b4a78a9c3100$exports,major:$d9e91b148724d7ba$exports,minor:$88beef4f36bb99dc$exports,patch:$fbc38baee3ec52af$exports,prerelease:$ec64f7ad8d61d626$exports,compare:$be8c6448e7d4b283$exports,rcompare:$d53fa55eda60e3c4$exports,compareLoose:$8c9639966becf13f$exports,compareBuild:$9c3f14a67e2b7b05$exports,sort:$10e9ef24aa7dc37d$exports,rsort:$c310560cb4f36b70$exports,gt:$0716672aeeeb00b7$exports,lt:$6bef60a1f9ea49cc$exports,eq:$9a774071cdb8a22b$exports,neq:$d1d9bbe2c9634018$exports,gte:$2b877d0256c5541e$exports,lte:$278c58909ad7ced2$exports,cmp:$e52ecc8579498688$exports,coerce:$5d8cdd4724630ca5$exports,Comparator:$811acfa69967f2ec$exports,Range:$4577f00308fa375e$exports,satisfies:$cb90bdc22f10fcf7$exports,toComparators:$14d64aa0eb5c855b$exports,maxSatisfying:$4c69ba97938a7bf5$exports,minSatisfying:$cffd1991a3ccb43c$exports,minVersion:$764705632cd4f711$exports,validRange:$c0f0cafd6c67ed17$exports,outside:$0aacc91285ca0f4e$exports,gtr:$b648a67118de5a94$exports,ltr:$076a97b4fe0d43db$exports,intersects:$c7c26e7fe125b318$exports,simplifyRange:$4ae56996e8e4ebeb$exports,subset:$87ec2da5a4aa08b0$exports,SemVer:$5d67c366f11253ea$exports,re:$9kaCP.re,src:$9kaCP.src,tokens:$9kaCP.t,SEMVER_SPEC_VERSION:$85PoE.SEMVER_SPEC_VERSION,RELEASE_TYPES:$85PoE.RELEASE_TYPES,compareIdentifiers:$2dfbf56026e52c8c$exports.compareIdentifiers,rcompareIdentifiers:$2dfbf56026e52c8c$exports.rcompareIdentifiers};var $3FhS8=parcelRequire("3FhS8"),$4ce02f68f14348c9$exports={};function $7da4ba9e886ae2f3$export$2e2bcd8739ae039(r,i){return function(){return r.apply(i,arguments)}}$parcel$defineInteropFlag($4ce02f68f14348c9$exports),$parcel$export($4ce02f68f14348c9$exports,"Axios",()=>$4ce02f68f14348c9$export$1c00760e9e5a4e95),$parcel$export($4ce02f68f14348c9$exports,"AxiosError",()=>$4ce02f68f14348c9$export$c1fbed17c2f6a328),$parcel$export($4ce02f68f14348c9$exports,"CanceledError",()=>$4ce02f68f14348c9$export$1ab0c6b20d94fa14),$parcel$export($4ce02f68f14348c9$exports,"isCancel",()=>$4ce02f68f14348c9$export$3b22524397b493c6),$parcel$export($4ce02f68f14348c9$exports,"CancelToken",()=>$4ce02f68f14348c9$export$fd08e3cb425f0d61),$parcel$export($4ce02f68f14348c9$exports,"VERSION",()=>$4ce02f68f14348c9$export$a4ad2735b021c132),$parcel$export($4ce02f68f14348c9$exports,"all",()=>$4ce02f68f14348c9$export$84bf76cd7afc7469),$parcel$export($4ce02f68f14348c9$exports,"Cancel",()=>$4ce02f68f14348c9$export$848c9b7ead0df967),$parcel$export($4ce02f68f14348c9$exports,"isAxiosError",()=>$4ce02f68f14348c9$export$fbafdbe06a5b5a9a),$parcel$export($4ce02f68f14348c9$exports,"spread",()=>$4ce02f68f14348c9$export$3ae0fd4797ed47c8),$parcel$export($4ce02f68f14348c9$exports,"toFormData",()=>$4ce02f68f14348c9$export$10ae0d317ea97f8b),$parcel$export($4ce02f68f14348c9$exports,"AxiosHeaders",()=>$4ce02f68f14348c9$export$4e7d6ff0f3e6520),$parcel$export($4ce02f68f14348c9$exports,"HttpStatusCode",()=>$4ce02f68f14348c9$export$a972f69c851492b3),$parcel$export($4ce02f68f14348c9$exports,"formToJSON",()=>$4ce02f68f14348c9$export$86d7c59254d6a2c9),$parcel$export($4ce02f68f14348c9$exports,"getAdapter",()=>$4ce02f68f14348c9$export$17ddc20a97d669e2),$parcel$export($4ce02f68f14348c9$exports,"mergeConfig",()=>$4ce02f68f14348c9$export$7ec1ebcfa9d8bd6a),$parcel$export($4ce02f68f14348c9$exports,"default",()=>$34471abae050a418$export$2e2bcd8739ae039);var $9Mq5w=parcelRequire("9Mq5w");const{toString:$fb599b4a944ac204$var$toString}=Object.prototype,{getPrototypeOf:$fb599b4a944ac204$var$getPrototypeOf}=Object,{iterator:$fb599b4a944ac204$var$iterator,toStringTag:$fb599b4a944ac204$var$toStringTag}=Symbol,$fb599b4a944ac204$var$kindOf=(r=Object.create(null),r=>{let i=$fb599b4a944ac204$var$toString.call(r);return r[i]||(r[i]=i.slice(8,-1).toLowerCase())}),$fb599b4a944ac204$var$kindOfTest=r=>(r=r.toLowerCase(),i=>$fb599b4a944ac204$var$kindOf(i)===r),$fb599b4a944ac204$var$typeOfTest=r=>i=>typeof i===r,{isArray:$fb599b4a944ac204$var$isArray}=Array,$fb599b4a944ac204$var$isUndefined=$fb599b4a944ac204$var$typeOfTest("undefined");function $fb599b4a944ac204$var$isBuffer(r){return null!==r&&!$fb599b4a944ac204$var$isUndefined(r)&&null!==r.constructor&&!$fb599b4a944ac204$var$isUndefined(r.constructor)&&$fb599b4a944ac204$var$isFunction(r.constructor.isBuffer)&&r.constructor.isBuffer(r)}const $fb599b4a944ac204$var$isArrayBuffer=$fb599b4a944ac204$var$kindOfTest("ArrayBuffer");function $fb599b4a944ac204$var$isArrayBufferView(r){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(r):r&&r.buffer&&$fb599b4a944ac204$var$isArrayBuffer(r.buffer)}const $fb599b4a944ac204$var$isString=$fb599b4a944ac204$var$typeOfTest("string"),$fb599b4a944ac204$var$isFunction=$fb599b4a944ac204$var$typeOfTest("function"),$fb599b4a944ac204$var$isNumber=$fb599b4a944ac204$var$typeOfTest("number"),$fb599b4a944ac204$var$isObject=r=>null!==r&&"object"==typeof r,$fb599b4a944ac204$var$isBoolean=r=>!0===r||!1===r,$fb599b4a944ac204$var$isPlainObject=r=>{if("object"!==$fb599b4a944ac204$var$kindOf(r))return!1;let i=$fb599b4a944ac204$var$getPrototypeOf(r);return(null===i||i===Object.prototype||null===Object.getPrototypeOf(i))&&!($fb599b4a944ac204$var$toStringTag in r)&&!($fb599b4a944ac204$var$iterator in r)},$fb599b4a944ac204$var$isEmptyObject=r=>{if(!$fb599b4a944ac204$var$isObject(r)||$fb599b4a944ac204$var$isBuffer(r))return!1;try{return 0===Object.keys(r).length&&Object.getPrototypeOf(r)===Object.prototype}catch(r){return!1}},$fb599b4a944ac204$var$isDate=$fb599b4a944ac204$var$kindOfTest("Date"),$fb599b4a944ac204$var$isFile=$fb599b4a944ac204$var$kindOfTest("File"),$fb599b4a944ac204$var$isReactNativeBlob=r=>!!(r&&void 0!==r.uri),$fb599b4a944ac204$var$isReactNative=r=>r&&void 0!==r.getParts,$fb599b4a944ac204$var$isBlob=$fb599b4a944ac204$var$kindOfTest("Blob"),$fb599b4a944ac204$var$isFileList=$fb599b4a944ac204$var$kindOfTest("FileList"),$fb599b4a944ac204$var$isStream=r=>$fb599b4a944ac204$var$isObject(r)&&$fb599b4a944ac204$var$isFunction(r.pipe);function $fb599b4a944ac204$var$getGlobal(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==$parcel$global?$parcel$global:{}}const $fb599b4a944ac204$var$G=$fb599b4a944ac204$var$getGlobal(),$fb599b4a944ac204$var$FormDataCtor=void 0!==$fb599b4a944ac204$var$G.FormData?$fb599b4a944ac204$var$G.FormData:void 0,$fb599b4a944ac204$var$isFormData=r=>{let i;return r&&($fb599b4a944ac204$var$FormDataCtor&&r instanceof $fb599b4a944ac204$var$FormDataCtor||$fb599b4a944ac204$var$isFunction(r.append)&&("formdata"===(i=$fb599b4a944ac204$var$kindOf(r))||"object"===i&&$fb599b4a944ac204$var$isFunction(r.toString)&&"[object FormData]"===r.toString()))},$fb599b4a944ac204$var$isURLSearchParams=$fb599b4a944ac204$var$kindOfTest("URLSearchParams"),[$fb599b4a944ac204$var$isReadableStream,$fb599b4a944ac204$var$isRequest,$fb599b4a944ac204$var$isResponse,$fb599b4a944ac204$var$isHeaders]=["ReadableStream","Request","Response","Headers"].map($fb599b4a944ac204$var$kindOfTest),$fb599b4a944ac204$var$trim=r=>r.trim?r.trim():r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function $fb599b4a944ac204$var$forEach(r,i,{allOwnKeys:n=!1}={}){let s,a;if(null!=r){if("object"!=typeof r&&(r=[r]),$fb599b4a944ac204$var$isArray(r))for(s=0,a=r.length;s0;)if(i===(n=s[a]).toLowerCase())return n;return null}const $fb599b4a944ac204$var$_global="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:$parcel$global,$fb599b4a944ac204$var$isContextDefined=r=>!$fb599b4a944ac204$var$isUndefined(r)&&r!==$fb599b4a944ac204$var$_global;function $fb599b4a944ac204$var$merge(){let{caseless:r,skipUndefined:i}=$fb599b4a944ac204$var$isContextDefined(this)&&this||{},n={},s=(s,a)=>{if("__proto__"===a||"constructor"===a||"prototype"===a)return;let o=r&&$fb599b4a944ac204$var$findKey(n,a)||a;$fb599b4a944ac204$var$isPlainObject(n[o])&&$fb599b4a944ac204$var$isPlainObject(s)?n[o]=$fb599b4a944ac204$var$merge(n[o],s):$fb599b4a944ac204$var$isPlainObject(s)?n[o]=$fb599b4a944ac204$var$merge({},s):$fb599b4a944ac204$var$isArray(s)?n[o]=s.slice():i&&$fb599b4a944ac204$var$isUndefined(s)||(n[o]=s)};for(let r=0,i=arguments.length;r($fb599b4a944ac204$var$forEach(i,(i,s)=>{n&&$fb599b4a944ac204$var$isFunction(i)?Object.defineProperty(r,s,{value:$7da4ba9e886ae2f3$export$2e2bcd8739ae039(i,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(r,s,{value:i,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:s}),r),$fb599b4a944ac204$var$stripBOM=r=>(65279===r.charCodeAt(0)&&(r=r.slice(1)),r),$fb599b4a944ac204$var$inherits=(r,i,n,s)=>{r.prototype=Object.create(i.prototype,s),Object.defineProperty(r.prototype,"constructor",{value:r,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(r,"super",{value:i.prototype}),n&&Object.assign(r.prototype,n)},$fb599b4a944ac204$var$toFlatObject=(r,i,n,s)=>{let a,o,d;let f={};if(i=i||{},null==r)return i;do{for(o=(a=Object.getOwnPropertyNames(r)).length;o-- >0;)d=a[o],(!s||s(d,r,i))&&!f[d]&&(i[d]=r[d],f[d]=!0);r=!1!==n&&$fb599b4a944ac204$var$getPrototypeOf(r)}while(r&&(!n||n(r,i))&&r!==Object.prototype)return i},$fb599b4a944ac204$var$endsWith=(r,i,n)=>{r=String(r),(void 0===n||n>r.length)&&(n=r.length),n-=i.length;let s=r.indexOf(i,n);return -1!==s&&s===n},$fb599b4a944ac204$var$toArray=r=>{if(!r)return null;if($fb599b4a944ac204$var$isArray(r))return r;let i=r.length;if(!$fb599b4a944ac204$var$isNumber(i))return null;let n=Array(i);for(;i-- >0;)n[i]=r[i];return n},$fb599b4a944ac204$var$isTypedArray=(i="undefined"!=typeof Uint8Array&&$fb599b4a944ac204$var$getPrototypeOf(Uint8Array),r=>i&&r instanceof i),$fb599b4a944ac204$var$forEachEntry=(r,i)=>{let n;let s=r&&r[$fb599b4a944ac204$var$iterator],a=s.call(r);for(;(n=a.next())&&!n.done;){let s=n.value;i.call(r,s[0],s[1])}},$fb599b4a944ac204$var$matchAll=(r,i)=>{let n;let s=[];for(;null!==(n=r.exec(i));)s.push(n);return s},$fb599b4a944ac204$var$isHTMLForm=$fb599b4a944ac204$var$kindOfTest("HTMLFormElement"),$fb599b4a944ac204$var$toCamelCase=r=>r.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,i,n){return i.toUpperCase()+n}),$fb599b4a944ac204$var$hasOwnProperty=(({hasOwnProperty:r})=>(i,n)=>r.call(i,n))(Object.prototype),$fb599b4a944ac204$var$isRegExp=$fb599b4a944ac204$var$kindOfTest("RegExp"),$fb599b4a944ac204$var$reduceDescriptors=(r,i)=>{let n=Object.getOwnPropertyDescriptors(r),s={};$fb599b4a944ac204$var$forEach(n,(n,a)=>{let o;!1!==(o=i(n,a,r))&&(s[a]=o||n)}),Object.defineProperties(r,s)},$fb599b4a944ac204$var$freezeMethods=r=>{$fb599b4a944ac204$var$reduceDescriptors(r,(i,n)=>{if($fb599b4a944ac204$var$isFunction(r)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;let s=r[n];if($fb599b4a944ac204$var$isFunction(s)){if(i.enumerable=!1,"writable"in i){i.writable=!1;return}i.set||(i.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},$fb599b4a944ac204$var$toObjectSet=(r,i)=>{let n={},s=r=>{r.forEach(r=>{n[r]=!0})};return s($fb599b4a944ac204$var$isArray(r)?r:String(r).split(i)),n},$fb599b4a944ac204$var$noop=()=>{},$fb599b4a944ac204$var$toFiniteNumber=(r,i)=>null!=r&&Number.isFinite(r=+r)?r:i;function $fb599b4a944ac204$var$isSpecCompliantForm(r){return!!(r&&$fb599b4a944ac204$var$isFunction(r.append)&&"FormData"===r[$fb599b4a944ac204$var$toStringTag]&&r[$fb599b4a944ac204$var$iterator])}const $fb599b4a944ac204$var$toJSONObject=r=>{let i=Array(10),n=(r,s)=>{if($fb599b4a944ac204$var$isObject(r)){if(i.indexOf(r)>=0)return;if($fb599b4a944ac204$var$isBuffer(r))return r;if(!("toJSON"in r)){i[s]=r;let a=$fb599b4a944ac204$var$isArray(r)?[]:{};return $fb599b4a944ac204$var$forEach(r,(r,i)=>{let o=n(r,s+1);$fb599b4a944ac204$var$isUndefined(o)||(a[i]=o)}),i[s]=void 0,a}}return r};return n(r,0)},$fb599b4a944ac204$var$isAsyncFn=$fb599b4a944ac204$var$kindOfTest("AsyncFunction"),$fb599b4a944ac204$var$isThenable=r=>r&&($fb599b4a944ac204$var$isObject(r)||$fb599b4a944ac204$var$isFunction(r))&&$fb599b4a944ac204$var$isFunction(r.then)&&$fb599b4a944ac204$var$isFunction(r.catch),$fb599b4a944ac204$var$_setImmediate=((r,i)=>{var n,s;return r?setImmediate:i?(n=`axios@${Math.random()}`,s=[],$fb599b4a944ac204$var$_global.addEventListener("message",({source:r,data:i})=>{r===$fb599b4a944ac204$var$_global&&i===n&&s.length&&s.shift()()},!1),r=>{s.push(r),$fb599b4a944ac204$var$_global.postMessage(n,"*")}):r=>setTimeout(r)})("function"==typeof setImmediate,$fb599b4a944ac204$var$isFunction($fb599b4a944ac204$var$_global.postMessage)),$fb599b4a944ac204$var$asap="undefined"!=typeof queueMicrotask?queueMicrotask.bind($fb599b4a944ac204$var$_global):void 0!==$9Mq5w&&$9Mq5w.nextTick||$fb599b4a944ac204$var$_setImmediate,$fb599b4a944ac204$var$isIterable=r=>null!=r&&$fb599b4a944ac204$var$isFunction(r[$fb599b4a944ac204$var$iterator]);var $fb599b4a944ac204$export$2e2bcd8739ae039={isArray:$fb599b4a944ac204$var$isArray,isArrayBuffer:$fb599b4a944ac204$var$isArrayBuffer,isBuffer:$fb599b4a944ac204$var$isBuffer,isFormData:$fb599b4a944ac204$var$isFormData,isArrayBufferView:$fb599b4a944ac204$var$isArrayBufferView,isString:$fb599b4a944ac204$var$isString,isNumber:$fb599b4a944ac204$var$isNumber,isBoolean:$fb599b4a944ac204$var$isBoolean,isObject:$fb599b4a944ac204$var$isObject,isPlainObject:$fb599b4a944ac204$var$isPlainObject,isEmptyObject:$fb599b4a944ac204$var$isEmptyObject,isReadableStream:$fb599b4a944ac204$var$isReadableStream,isRequest:$fb599b4a944ac204$var$isRequest,isResponse:$fb599b4a944ac204$var$isResponse,isHeaders:$fb599b4a944ac204$var$isHeaders,isUndefined:$fb599b4a944ac204$var$isUndefined,isDate:$fb599b4a944ac204$var$isDate,isFile:$fb599b4a944ac204$var$isFile,isReactNativeBlob:$fb599b4a944ac204$var$isReactNativeBlob,isReactNative:$fb599b4a944ac204$var$isReactNative,isBlob:$fb599b4a944ac204$var$isBlob,isRegExp:$fb599b4a944ac204$var$isRegExp,isFunction:$fb599b4a944ac204$var$isFunction,isStream:$fb599b4a944ac204$var$isStream,isURLSearchParams:$fb599b4a944ac204$var$isURLSearchParams,isTypedArray:$fb599b4a944ac204$var$isTypedArray,isFileList:$fb599b4a944ac204$var$isFileList,forEach:$fb599b4a944ac204$var$forEach,merge:$fb599b4a944ac204$var$merge,extend:$fb599b4a944ac204$var$extend,trim:$fb599b4a944ac204$var$trim,stripBOM:$fb599b4a944ac204$var$stripBOM,inherits:$fb599b4a944ac204$var$inherits,toFlatObject:$fb599b4a944ac204$var$toFlatObject,kindOf:$fb599b4a944ac204$var$kindOf,kindOfTest:$fb599b4a944ac204$var$kindOfTest,endsWith:$fb599b4a944ac204$var$endsWith,toArray:$fb599b4a944ac204$var$toArray,forEachEntry:$fb599b4a944ac204$var$forEachEntry,matchAll:$fb599b4a944ac204$var$matchAll,isHTMLForm:$fb599b4a944ac204$var$isHTMLForm,hasOwnProperty:$fb599b4a944ac204$var$hasOwnProperty,hasOwnProp:$fb599b4a944ac204$var$hasOwnProperty,reduceDescriptors:$fb599b4a944ac204$var$reduceDescriptors,freezeMethods:$fb599b4a944ac204$var$freezeMethods,toObjectSet:$fb599b4a944ac204$var$toObjectSet,toCamelCase:$fb599b4a944ac204$var$toCamelCase,noop:$fb599b4a944ac204$var$noop,toFiniteNumber:$fb599b4a944ac204$var$toFiniteNumber,findKey:$fb599b4a944ac204$var$findKey,global:$fb599b4a944ac204$var$_global,isContextDefined:$fb599b4a944ac204$var$isContextDefined,isSpecCompliantForm:$fb599b4a944ac204$var$isSpecCompliantForm,toJSONObject:$fb599b4a944ac204$var$toJSONObject,isAsyncFn:$fb599b4a944ac204$var$isAsyncFn,isThenable:$fb599b4a944ac204$var$isThenable,setImmediate:$fb599b4a944ac204$var$_setImmediate,asap:$fb599b4a944ac204$var$asap,isIterable:$fb599b4a944ac204$var$isIterable};class $76f2b00474519cdb$var$AxiosError extends Error{static from(r,i,n,s,a,o){let d=new $76f2b00474519cdb$var$AxiosError(r.message,i||r.code,n,s,a);return d.cause=r,d.name=r.name,null!=r.status&&null==d.status&&(d.status=r.status),o&&Object.assign(d,o),d}constructor(r,i,n,s,a){super(r),Object.defineProperty(this,"message",{value:r,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,i&&(this.code=i),n&&(this.config=n),s&&(this.request=s),a&&(this.response=a,this.status=a.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:$fb599b4a944ac204$export$2e2bcd8739ae039.toJSONObject(this.config),code:this.code,status:this.status}}}$76f2b00474519cdb$var$AxiosError.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",$76f2b00474519cdb$var$AxiosError.ERR_BAD_OPTION="ERR_BAD_OPTION",$76f2b00474519cdb$var$AxiosError.ECONNABORTED="ECONNABORTED",$76f2b00474519cdb$var$AxiosError.ETIMEDOUT="ETIMEDOUT",$76f2b00474519cdb$var$AxiosError.ERR_NETWORK="ERR_NETWORK",$76f2b00474519cdb$var$AxiosError.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",$76f2b00474519cdb$var$AxiosError.ERR_DEPRECATED="ERR_DEPRECATED",$76f2b00474519cdb$var$AxiosError.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",$76f2b00474519cdb$var$AxiosError.ERR_BAD_REQUEST="ERR_BAD_REQUEST",$76f2b00474519cdb$var$AxiosError.ERR_CANCELED="ERR_CANCELED",$76f2b00474519cdb$var$AxiosError.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",$76f2b00474519cdb$var$AxiosError.ERR_INVALID_URL="ERR_INVALID_URL";var $76f2b00474519cdb$export$2e2bcd8739ae039=$76f2b00474519cdb$var$AxiosError,$ddd5bc0d8b7abeaf$export$2e2bcd8739ae039=null,$awmEs=parcelRequire("awmEs"),$2252ac2b38ec6071$require$Buffer=$awmEs.Buffer;function $2252ac2b38ec6071$var$isVisitable(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)}function $2252ac2b38ec6071$var$removeBrackets(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.endsWith(r,"[]")?r.slice(0,-2):r}function $2252ac2b38ec6071$var$renderKey(r,i,n){return r?r.concat(i).map(function(r,i){return r=$2252ac2b38ec6071$var$removeBrackets(r),!n&&i?"["+r+"]":r}).join(n?".":""):i}function $2252ac2b38ec6071$var$isFlatArray(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)&&!r.some($2252ac2b38ec6071$var$isVisitable)}const $2252ac2b38ec6071$var$predicates=$fb599b4a944ac204$export$2e2bcd8739ae039.toFlatObject($fb599b4a944ac204$export$2e2bcd8739ae039,{},null,function(r){return/^is[A-Z]/.test(r)});function $2252ac2b38ec6071$var$toFormData(r,i,n){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r))throw TypeError("target must be an object");i=i||new($ddd5bc0d8b7abeaf$export$2e2bcd8739ae039||FormData),n=$fb599b4a944ac204$export$2e2bcd8739ae039.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(r,i){return!$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i[r])});let s=n.metaTokens,a=n.visitor||c,o=n.dots,d=n.indexes,f=n.Blob||"undefined"!=typeof Blob&&Blob,l=f&&$fb599b4a944ac204$export$2e2bcd8739ae039.isSpecCompliantForm(i);if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(a))throw TypeError("visitor must be a function");function u(r){if(null===r)return"";if($fb599b4a944ac204$export$2e2bcd8739ae039.isDate(r))return r.toISOString();if($fb599b4a944ac204$export$2e2bcd8739ae039.isBoolean(r))return r.toString();if(!l&&$fb599b4a944ac204$export$2e2bcd8739ae039.isBlob(r))throw new $76f2b00474519cdb$export$2e2bcd8739ae039("Blob is not supported. Use a Buffer instead.");return $fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBuffer(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isTypedArray(r)?l&&"function"==typeof Blob?new Blob([r]):$2252ac2b38ec6071$require$Buffer.from(r):r}function c(r,n,a){let f=r;if($fb599b4a944ac204$export$2e2bcd8739ae039.isReactNative(i)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isReactNativeBlob(r))return i.append($2252ac2b38ec6071$var$renderKey(a,n,o),u(r)),!1;if(r&&!a&&"object"==typeof r){if($fb599b4a944ac204$export$2e2bcd8739ae039.endsWith(n,"{}"))n=s?n:n.slice(0,-2),r=JSON.stringify(r);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)&&$2252ac2b38ec6071$var$isFlatArray(r)||($fb599b4a944ac204$export$2e2bcd8739ae039.isFileList(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.endsWith(n,"[]"))&&(f=$fb599b4a944ac204$export$2e2bcd8739ae039.toArray(r)))return n=$2252ac2b38ec6071$var$removeBrackets(n),f.forEach(function(r,s){$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)||null===r||i.append(!0===d?$2252ac2b38ec6071$var$renderKey([n],s,o):null===d?n:n+"[]",u(r))}),!1}return!!$2252ac2b38ec6071$var$isVisitable(r)||(i.append($2252ac2b38ec6071$var$renderKey(a,n,o),u(r)),!1)}let p=[],h=Object.assign($2252ac2b38ec6071$var$predicates,{defaultVisitor:c,convertValue:u,isVisitable:$2252ac2b38ec6071$var$isVisitable});function g(r,n){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)){if(-1!==p.indexOf(r))throw Error("Circular reference detected in "+n.join("."));p.push(r),$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(r,function(r,s){let o=!($fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)||null===r)&&a.call(i,r,$fb599b4a944ac204$export$2e2bcd8739ae039.isString(s)?s.trim():s,n,h);!0===o&&g(r,n?n.concat(s):[s])}),p.pop()}}if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r))throw TypeError("data must be an object");return g(r),i}var $2252ac2b38ec6071$export$2e2bcd8739ae039=$2252ac2b38ec6071$var$toFormData;function $95e4c2c63cfa77bd$var$encode(r){let i={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\x00"};return encodeURIComponent(r).replace(/[!'()~]|%20|%00/g,function(r){return i[r]})}function $95e4c2c63cfa77bd$var$AxiosURLSearchParams(r,i){this._pairs=[],r&&$2252ac2b38ec6071$export$2e2bcd8739ae039(r,this,i)}const $95e4c2c63cfa77bd$var$prototype=$95e4c2c63cfa77bd$var$AxiosURLSearchParams.prototype;$95e4c2c63cfa77bd$var$prototype.append=function(r,i){this._pairs.push([r,i])},$95e4c2c63cfa77bd$var$prototype.toString=function(r){let i=r?function(i){return r.call(this,i,$95e4c2c63cfa77bd$var$encode)}:$95e4c2c63cfa77bd$var$encode;return this._pairs.map(function(r){return i(r[0])+"="+i(r[1])},"").join("&")};var $95e4c2c63cfa77bd$export$2e2bcd8739ae039=$95e4c2c63cfa77bd$var$AxiosURLSearchParams;function $0e0708b3cec051bf$var$encode(r){return encodeURIComponent(r).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function $0e0708b3cec051bf$export$2e2bcd8739ae039(r,i,n){let s;if(!i)return r;let a=n&&n.encode||$0e0708b3cec051bf$var$encode,o=$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(n)?{serialize:n}:n,d=o&&o.serialize;if(s=d?d(i,o):$fb599b4a944ac204$export$2e2bcd8739ae039.isURLSearchParams(i)?i.toString():new $95e4c2c63cfa77bd$export$2e2bcd8739ae039(i,o).toString(a)){let i=r.indexOf("#");-1!==i&&(r=r.slice(0,i)),r+=(-1===r.indexOf("?")?"?":"&")+s}return r}class $c58847d54497e792$var$InterceptorManager{constructor(){this.handlers=[]}use(r,i,n){return this.handlers.push({fulfilled:r,rejected:i,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(r){this.handlers[r]&&(this.handlers[r]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(r){$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(this.handlers,function(i){null!==i&&r(i)})}}var $c58847d54497e792$export$2e2bcd8739ae039=$c58847d54497e792$var$InterceptorManager,$8d926c432395d4f2$export$2e2bcd8739ae039={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},$502cc6ac337e531c$export$2e2bcd8739ae039="undefined"!=typeof URLSearchParams?URLSearchParams:$95e4c2c63cfa77bd$export$2e2bcd8739ae039,$575bed01da1a662f$export$2e2bcd8739ae039="undefined"!=typeof FormData?FormData:null,$d399f9494934204f$export$2e2bcd8739ae039="undefined"!=typeof Blob?Blob:null,$ca76dbabf240ea5a$export$2e2bcd8739ae039={isBrowser:!0,classes:{URLSearchParams:$502cc6ac337e531c$export$2e2bcd8739ae039,FormData:$575bed01da1a662f$export$2e2bcd8739ae039,Blob:$d399f9494934204f$export$2e2bcd8739ae039},protocols:["http","https","file","blob","url","data"]},$0741e44c7cc90f6e$exports={};$parcel$export($0741e44c7cc90f6e$exports,"hasBrowserEnv",()=>$0741e44c7cc90f6e$export$c4996c4b7b93b0bf),$parcel$export($0741e44c7cc90f6e$exports,"navigator",()=>$0741e44c7cc90f6e$export$ec7c8efa7f5790ae),$parcel$export($0741e44c7cc90f6e$exports,"hasStandardBrowserEnv",()=>$0741e44c7cc90f6e$export$c0bcc9250309d66),$parcel$export($0741e44c7cc90f6e$exports,"hasStandardBrowserWebWorkerEnv",()=>$0741e44c7cc90f6e$export$c81692cf5af97dac),$parcel$export($0741e44c7cc90f6e$exports,"origin",()=>$0741e44c7cc90f6e$export$f710a83a91838a36);const $0741e44c7cc90f6e$export$c4996c4b7b93b0bf="undefined"!=typeof window&&"undefined"!=typeof document,$0741e44c7cc90f6e$export$ec7c8efa7f5790ae="object"==typeof navigator&&navigator||void 0,$0741e44c7cc90f6e$export$c0bcc9250309d66=$0741e44c7cc90f6e$export$c4996c4b7b93b0bf&&(!$0741e44c7cc90f6e$export$ec7c8efa7f5790ae||0>["ReactNative","NativeScript","NS"].indexOf($0741e44c7cc90f6e$export$ec7c8efa7f5790ae.product)),$0741e44c7cc90f6e$export$c81692cf5af97dac="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,$0741e44c7cc90f6e$export$f710a83a91838a36=$0741e44c7cc90f6e$export$c4996c4b7b93b0bf&&window.location.href||"http://localhost";var $e50a782fe1bbe96e$export$2e2bcd8739ae039={...$0741e44c7cc90f6e$exports,...$ca76dbabf240ea5a$export$2e2bcd8739ae039};function $351e06f00328b44e$export$2e2bcd8739ae039(r,i){return $2252ac2b38ec6071$export$2e2bcd8739ae039(r,new $e50a782fe1bbe96e$export$2e2bcd8739ae039.classes.URLSearchParams,{visitor:function(r,i,n,s){return $e50a782fe1bbe96e$export$2e2bcd8739ae039.isNode&&$fb599b4a944ac204$export$2e2bcd8739ae039.isBuffer(r)?(this.append(i,r.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)},...i})}function $46103cbe9839965f$var$parsePropPath(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.matchAll(/\w+|\[(\w*)]/g,r).map(r=>"[]"===r[0]?"":r[1]||r[0])}function $46103cbe9839965f$var$arrayToObject(r){let i,n;let s={},a=Object.keys(r),o=a.length;for(i=0;i=r.length;if(o=!o&&$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(s)?s.length:o,f)return $fb599b4a944ac204$export$2e2bcd8739ae039.hasOwnProp(s,o)?s[o]=[s[o],n]:s[o]=n,!d;s[o]&&$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(s[o])||(s[o]=[]);let l=i(r,n,s[o],a);return l&&$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(s[o])&&(s[o]=$46103cbe9839965f$var$arrayToObject(s[o])),!d}if($fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(r)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(r.entries)){let n={};return $fb599b4a944ac204$export$2e2bcd8739ae039.forEachEntry(r,(r,s)=>{i($46103cbe9839965f$var$parsePropPath(r),s,n,0)}),n}return null}var $46103cbe9839965f$export$2e2bcd8739ae039=$46103cbe9839965f$var$formDataToJSON;function $7463d8cabcd159e8$var$stringifySafely(r,i,n){if($fb599b4a944ac204$export$2e2bcd8739ae039.isString(r))try{return(i||JSON.parse)(r),$fb599b4a944ac204$export$2e2bcd8739ae039.trim(r)}catch(r){if("SyntaxError"!==r.name)throw r}return(n||JSON.stringify)(r)}const $7463d8cabcd159e8$var$defaults={transitional:$8d926c432395d4f2$export$2e2bcd8739ae039,adapter:["xhr","http","fetch"],transformRequest:[function(r,i){let n;let s=i.getContentType()||"",a=s.indexOf("application/json")>-1,o=$fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r);o&&$fb599b4a944ac204$export$2e2bcd8739ae039.isHTMLForm(r)&&(r=new FormData(r));let d=$fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(r);if(d)return a?JSON.stringify($46103cbe9839965f$export$2e2bcd8739ae039(r)):r;if($fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBuffer(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isBuffer(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isStream(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isFile(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isBlob(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isReadableStream(r))return r;if($fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBufferView(r))return r.buffer;if($fb599b4a944ac204$export$2e2bcd8739ae039.isURLSearchParams(r))return i.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),r.toString();if(o){if(s.indexOf("application/x-www-form-urlencoded")>-1)return $351e06f00328b44e$export$2e2bcd8739ae039(r,this.formSerializer).toString();if((n=$fb599b4a944ac204$export$2e2bcd8739ae039.isFileList(r))||s.indexOf("multipart/form-data")>-1){let i=this.env&&this.env.FormData;return $2252ac2b38ec6071$export$2e2bcd8739ae039(n?{"files[]":r}:r,i&&new i,this.formSerializer)}}return o||a?(i.setContentType("application/json",!1),$7463d8cabcd159e8$var$stringifySafely(r)):r}],transformResponse:[function(r){let i=this.transitional||$7463d8cabcd159e8$var$defaults.transitional,n=i&&i.forcedJSONParsing,s="json"===this.responseType;if($fb599b4a944ac204$export$2e2bcd8739ae039.isResponse(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isReadableStream(r))return r;if(r&&$fb599b4a944ac204$export$2e2bcd8739ae039.isString(r)&&(n&&!this.responseType||s)){let n=i&&i.silentJSONParsing,a=!n&&s;try{return JSON.parse(r,this.parseReviver)}catch(r){if(a){if("SyntaxError"===r.name)throw $76f2b00474519cdb$export$2e2bcd8739ae039.from(r,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_RESPONSE,this,null,this.response);throw r}}}return r}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:$e50a782fe1bbe96e$export$2e2bcd8739ae039.classes.FormData,Blob:$e50a782fe1bbe96e$export$2e2bcd8739ae039.classes.Blob},validateStatus:function(r){return r>=200&&r<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(["delete","get","head","post","put","patch"],r=>{$7463d8cabcd159e8$var$defaults.headers[r]={}});var $7463d8cabcd159e8$export$2e2bcd8739ae039=$7463d8cabcd159e8$var$defaults;const $60e0d03be99adf09$var$ignoreDuplicateOf=$fb599b4a944ac204$export$2e2bcd8739ae039.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);var $60e0d03be99adf09$export$2e2bcd8739ae039=r=>{let i,n,s;let a={};return r&&r.split("\n").forEach(function(r){s=r.indexOf(":"),i=r.substring(0,s).trim().toLowerCase(),n=r.substring(s+1).trim(),!i||a[i]&&$60e0d03be99adf09$var$ignoreDuplicateOf[i]||("set-cookie"===i?a[i]?a[i].push(n):a[i]=[n]:a[i]=a[i]?a[i]+", "+n:n)}),a};const $0b0f695da095f026$var$$internals=Symbol("internals"),$0b0f695da095f026$var$isValidHeaderValue=r=>!/[\r\n]/.test(r);function $0b0f695da095f026$var$assertValidHeaderValue(r,i){if(!1!==r&&null!=r){if($fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)){r.forEach(r=>$0b0f695da095f026$var$assertValidHeaderValue(r,i));return}if(!$0b0f695da095f026$var$isValidHeaderValue(String(r)))throw Error(`Invalid character in header content ["${i}"]`)}}function $0b0f695da095f026$var$normalizeHeader(r){return r&&String(r).trim().toLowerCase()}function $0b0f695da095f026$var$stripTrailingCRLF(r){let i=r.length;for(;i>0;){let n=r.charCodeAt(i-1);if(10!==n&&13!==n)break;i-=1}return i===r.length?r:r.slice(0,i)}function $0b0f695da095f026$var$normalizeValue(r){return!1===r||null==r?r:$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r.map($0b0f695da095f026$var$normalizeValue):$0b0f695da095f026$var$stripTrailingCRLF(String(r))}function $0b0f695da095f026$var$parseTokens(r){let i;let n=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;for(;i=s.exec(r);)n[i[1]]=i[2];return n}const $0b0f695da095f026$var$isValidHeaderName=r=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(r.trim());function $0b0f695da095f026$var$matchHeaderValue(r,i,n,s,a){if($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(s))return s.call(this,i,n);if(a&&(i=n),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(i)){if($fb599b4a944ac204$export$2e2bcd8739ae039.isString(s))return -1!==i.indexOf(s);if($fb599b4a944ac204$export$2e2bcd8739ae039.isRegExp(s))return s.test(i)}}function $0b0f695da095f026$var$formatHeader(r){return r.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(r,i,n)=>i.toUpperCase()+n)}function $0b0f695da095f026$var$buildAccessors(r,i){let n=$fb599b4a944ac204$export$2e2bcd8739ae039.toCamelCase(" "+i);["get","set","has"].forEach(s=>{Object.defineProperty(r,s+n,{value:function(r,n,a){return this[s].call(this,i,r,n,a)},configurable:!0})})}class $0b0f695da095f026$var$AxiosHeaders{constructor(r){r&&this.set(r)}set(r,i,n){let s=this;function a(r,i,n){let a=$0b0f695da095f026$var$normalizeHeader(i);if(!a)throw Error("header name must be a non-empty string");let o=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(s,a);o&&void 0!==s[o]&&!0!==n&&(void 0!==n||!1===s[o])||($0b0f695da095f026$var$assertValidHeaderValue(r,i),s[o||i]=$0b0f695da095f026$var$normalizeValue(r))}let o=(r,i)=>$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(r,(r,n)=>a(r,n,i));if($fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(r)||r instanceof this.constructor)o(r,i);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isString(r)&&(r=r.trim())&&!$0b0f695da095f026$var$isValidHeaderName(r))o($60e0d03be99adf09$export$2e2bcd8739ae039(r),i);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isIterable(r)){let n={},s,a;for(let i of r){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(i))throw TypeError("Object iterator must return a key-value pair");n[a=i[0]]=(s=n[a])?$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(s)?[...s,i[1]]:[s,i[1]]:i[1]}o(n,i)}else null!=r&&a(i,r,n);return this}get(r,i){if(r=$0b0f695da095f026$var$normalizeHeader(r)){let n=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(this,r);if(n){let r=this[n];if(!i)return r;if(!0===i)return $0b0f695da095f026$var$parseTokens(r);if($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(i))return i.call(this,r,n);if($fb599b4a944ac204$export$2e2bcd8739ae039.isRegExp(i))return i.exec(r);throw TypeError("parser must be boolean|regexp|function")}}}has(r,i){if(r=$0b0f695da095f026$var$normalizeHeader(r)){let n=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(this,r);return!!(n&&void 0!==this[n]&&(!i||$0b0f695da095f026$var$matchHeaderValue(this,this[n],n,i)))}return!1}delete(r,i){let n=this,s=!1;function a(r){if(r=$0b0f695da095f026$var$normalizeHeader(r)){let a=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(n,r);a&&(!i||$0b0f695da095f026$var$matchHeaderValue(n,n[a],a,i))&&(delete n[a],s=!0)}}return $fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r.forEach(a):a(r),s}clear(r){let i=Object.keys(this),n=i.length,s=!1;for(;n--;){let a=i[n];(!r||$0b0f695da095f026$var$matchHeaderValue(this,this[a],a,r,!0))&&(delete this[a],s=!0)}return s}normalize(r){let i=this,n={};return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(this,(s,a)=>{let o=$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(n,a);if(o){i[o]=$0b0f695da095f026$var$normalizeValue(s),delete i[a];return}let d=r?$0b0f695da095f026$var$formatHeader(a):String(a).trim();d!==a&&delete i[a],i[d]=$0b0f695da095f026$var$normalizeValue(s),n[d]=!0}),this}concat(...r){return this.constructor.concat(this,...r)}toJSON(r){let i=Object.create(null);return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(this,(n,s)=>{null!=n&&!1!==n&&(i[s]=r&&$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(n)?n.join(", "):n)}),i}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([r,i])=>r+": "+i).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(r){return r instanceof this?r:new this(r)}static concat(r,...i){let n=new this(r);return i.forEach(r=>n.set(r)),n}static accessor(r){let i=this[$0b0f695da095f026$var$$internals]=this[$0b0f695da095f026$var$$internals]={accessors:{}},n=i.accessors,s=this.prototype;function a(r){let i=$0b0f695da095f026$var$normalizeHeader(r);n[i]||($0b0f695da095f026$var$buildAccessors(s,r),n[i]=!0)}return $fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r.forEach(a):a(r),this}}$0b0f695da095f026$var$AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),$fb599b4a944ac204$export$2e2bcd8739ae039.reduceDescriptors($0b0f695da095f026$var$AxiosHeaders.prototype,({value:r},i)=>{let n=i[0].toUpperCase()+i.slice(1);return{get:()=>r,set(r){this[n]=r}}}),$fb599b4a944ac204$export$2e2bcd8739ae039.freezeMethods($0b0f695da095f026$var$AxiosHeaders);var $0b0f695da095f026$export$2e2bcd8739ae039=$0b0f695da095f026$var$AxiosHeaders;function $7393d1b654eed49e$export$2e2bcd8739ae039(r,i){let n=this||$7463d8cabcd159e8$export$2e2bcd8739ae039,s=i||n,a=$0b0f695da095f026$export$2e2bcd8739ae039.from(s.headers),o=s.data;return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(r,function(r){o=r.call(n,o,a.normalize(),i?i.status:void 0)}),a.normalize(),o}function $3ce83a3b4ea5cd0b$export$2e2bcd8739ae039(r){return!!(r&&r.__CANCEL__)}class $c0eaa8e11eba5040$var$CanceledError extends $76f2b00474519cdb$export$2e2bcd8739ae039{constructor(r,i,n){super(null==r?"canceled":r,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_CANCELED,i,n),this.name="CanceledError",this.__CANCEL__=!0}}var $c0eaa8e11eba5040$export$2e2bcd8739ae039=$c0eaa8e11eba5040$var$CanceledError;function $5b3c479423bad418$export$2e2bcd8739ae039(r,i,n){let s=n.config.validateStatus;!n.status||!s||s(n.status)?r(n):i(new $76f2b00474519cdb$export$2e2bcd8739ae039("Request failed with status code "+n.status,[$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_REQUEST,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function $c2e1cb1ec72c8735$export$2e2bcd8739ae039(r){let i=/^([-+\w]{1,25})(:?\/\/|:)/.exec(r);return i&&i[1]||""}function $262858656c789692$var$speedometer(r,i){let n;r=r||10;let s=Array(r),a=Array(r),o=0,d=0;return i=void 0!==i?i:1e3,function(f){let l=Date.now(),u=a[d];n||(n=l),s[o]=f,a[o]=l;let c=d,p=0;for(;c!==o;)p+=s[c++],c%=r;if((o=(o+1)%r)===d&&(d=(d+1)%r),l-n{a=o,n=null,s&&(clearTimeout(s),s=null),r(...i)},f=(...r)=>{let i=Date.now(),f=i-a;f>=o?d(r,i):(n=r,s||(s=setTimeout(()=>{s=null,d(n)},o-f)))},l=()=>n&&d(n);return[f,l]}var $1aacf4884c5a00ea$export$2e2bcd8739ae039=$1aacf4884c5a00ea$var$throttle;const $7e4925c7fdfe1077$export$c1b28109d46c3592=(r,i,n=3)=>{let s=0,a=$262858656c789692$export$2e2bcd8739ae039(50,250);return $1aacf4884c5a00ea$export$2e2bcd8739ae039(n=>{let o=n.loaded,d=n.lengthComputable?n.total:void 0,f=o-s,l=a(f),u=o<=d;s=o;let c={loaded:o,total:d,progress:d?o/d:void 0,bytes:f,rate:l||void 0,estimated:l&&d&&u?(d-o)/l:void 0,event:n,lengthComputable:null!=d,[i?"download":"upload"]:!0};r(c)},n)},$7e4925c7fdfe1077$export$d9fadd12586c18d6=(r,i)=>{let n=null!=r;return[s=>i[0]({lengthComputable:n,total:r,loaded:s}),i[1]]},$7e4925c7fdfe1077$export$5d35863c355a22a9=r=>(...i)=>$fb599b4a944ac204$export$2e2bcd8739ae039.asap(()=>r(...i));var $68654f2da10185e1$export$2e2bcd8739ae039=$e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv?(n=new URL($e50a782fe1bbe96e$export$2e2bcd8739ae039.origin),s=$e50a782fe1bbe96e$export$2e2bcd8739ae039.navigator&&/(msie|trident)/i.test($e50a782fe1bbe96e$export$2e2bcd8739ae039.navigator.userAgent),r=>(r=new URL(r,$e50a782fe1bbe96e$export$2e2bcd8739ae039.origin),n.protocol===r.protocol&&n.host===r.host&&(s||n.port===r.port))):()=>!0,$dc5154632f7b7df2$export$2e2bcd8739ae039=$e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv?{write(r,i,n,s,a,o,d){if("undefined"==typeof document)return;let f=[`${r}=${encodeURIComponent(i)}`];$fb599b4a944ac204$export$2e2bcd8739ae039.isNumber(n)&&f.push(`expires=${new Date(n).toUTCString()}`),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(s)&&f.push(`path=${s}`),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(a)&&f.push(`domain=${a}`),!0===o&&f.push("secure"),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(d)&&f.push(`SameSite=${d}`),document.cookie=f.join("; ")},read(r){if("undefined"==typeof document)return null;let i=document.cookie.match(RegExp("(?:^|; )"+r+"=([^;]*)"));return i?decodeURIComponent(i[1]):null},remove(r){this.write(r,"",Date.now()-864e5,"/")}}:{write(){},read:()=>null,remove(){}};function $0be41eb6f9312247$export$2e2bcd8739ae039(r){return"string"==typeof r&&/^([a-z][a-z\d+\-.]*:)?\/\//i.test(r)}function $fad511fc1878cf7e$export$2e2bcd8739ae039(r,i){return i?r.replace(/\/?\/$/,"")+"/"+i.replace(/^\/+/,""):r}function $c95ec4256bc8e455$export$2e2bcd8739ae039(r,i,n){let s=!$0be41eb6f9312247$export$2e2bcd8739ae039(i);return r&&(s||!1==n)?$fad511fc1878cf7e$export$2e2bcd8739ae039(r,i):i}const $bef108e337cae1ac$var$headersToObject=r=>r instanceof $0b0f695da095f026$export$2e2bcd8739ae039?{...r}:r;function $bef108e337cae1ac$export$2e2bcd8739ae039(r,i){i=i||{};let n={};function s(r,i,n,s){return $fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(r)&&$fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.merge.call({caseless:s},r,i):$fb599b4a944ac204$export$2e2bcd8739ae039.isPlainObject(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.merge({},i):$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(i)?i.slice():i}function a(r,i,n,a){return $fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)?void 0:s(void 0,r,n,a):s(r,i,n,a)}function o(r,i){if(!$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i))return s(void 0,i)}function d(r,i){return $fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(i)?$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(r)?void 0:s(void 0,r):s(void 0,i)}function f(n,a,o){return o in i?s(n,a):o in r?s(void 0,n):void 0}let l={url:o,method:o,data:o,baseURL:d,transformRequest:d,transformResponse:d,paramsSerializer:d,timeout:d,timeoutMessage:d,withCredentials:d,withXSRFToken:d,adapter:d,responseType:d,xsrfCookieName:d,xsrfHeaderName:d,onUploadProgress:d,onDownloadProgress:d,decompress:d,maxContentLength:d,maxBodyLength:d,beforeRedirect:d,transport:d,httpAgent:d,httpsAgent:d,cancelToken:d,socketPath:d,responseEncoding:d,validateStatus:f,headers:(r,i,n)=>a($bef108e337cae1ac$var$headersToObject(r),$bef108e337cae1ac$var$headersToObject(i),n,!0)};return $fb599b4a944ac204$export$2e2bcd8739ae039.forEach(Object.keys({...r,...i}),function(s){if("__proto__"===s||"constructor"===s||"prototype"===s)return;let o=$fb599b4a944ac204$export$2e2bcd8739ae039.hasOwnProp(l,s)?l[s]:a,d=o(r[s],i[s],s);$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(d)&&o!==f||(n[s]=d)}),n}var $d3e897c397a73e07$export$2e2bcd8739ae039=r=>{let i=$bef108e337cae1ac$export$2e2bcd8739ae039({},r),{data:n,withXSRFToken:s,xsrfHeaderName:a,xsrfCookieName:o,headers:d,auth:f}=i;if(i.headers=d=$0b0f695da095f026$export$2e2bcd8739ae039.from(d),i.url=$0e0708b3cec051bf$export$2e2bcd8739ae039($c95ec4256bc8e455$export$2e2bcd8739ae039(i.baseURL,i.url,i.allowAbsoluteUrls),r.params,r.paramsSerializer),f&&d.set("Authorization","Basic "+btoa((f.username||"")+":"+(f.password?unescape(encodeURIComponent(f.password)):""))),$fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(n)){if($e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv||$e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserWebWorkerEnv)d.setContentType(void 0);else if($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(n.getHeaders)){let r=n.getHeaders(),i=["content-type","content-length"];Object.entries(r).forEach(([r,n])=>{i.includes(r.toLowerCase())&&d.set(r,n)})}}if($e50a782fe1bbe96e$export$2e2bcd8739ae039.hasStandardBrowserEnv&&(s&&$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(s)&&(s=s(i)),s||!1!==s&&$68654f2da10185e1$export$2e2bcd8739ae039(i.url))){let r=a&&o&&$dc5154632f7b7df2$export$2e2bcd8739ae039.read(o);r&&d.set(a,r)}return i};const $a3c2bb216d98e61a$var$isXHRAdapterSupported="undefined"!=typeof XMLHttpRequest;var $a3c2bb216d98e61a$export$2e2bcd8739ae039=$a3c2bb216d98e61a$var$isXHRAdapterSupported&&function(r){return new Promise(function(i,n){let s,a,o,d,f;let l=$d3e897c397a73e07$export$2e2bcd8739ae039(r),u=l.data,c=$0b0f695da095f026$export$2e2bcd8739ae039.from(l.headers).normalize(),{responseType:p,onUploadProgress:h,onDownloadProgress:g}=l;function m(){d&&d(),f&&f(),l.cancelToken&&l.cancelToken.unsubscribe(s),l.signal&&l.signal.removeEventListener("abort",s)}let v=new XMLHttpRequest;function _(){if(!v)return;let s=$0b0f695da095f026$export$2e2bcd8739ae039.from("getAllResponseHeaders"in v&&v.getAllResponseHeaders()),a=p&&"text"!==p&&"json"!==p?v.response:v.responseText,o={data:a,status:v.status,statusText:v.statusText,headers:s,config:r,request:v};$5b3c479423bad418$export$2e2bcd8739ae039(function(r){i(r),m()},function(r){n(r),m()},o),v=null}v.open(l.method.toUpperCase(),l.url,!0),v.timeout=l.timeout,"onloadend"in v?v.onloadend=_:v.onreadystatechange=function(){v&&4===v.readyState&&(0!==v.status||v.responseURL&&0===v.responseURL.indexOf("file:"))&&setTimeout(_)},v.onabort=function(){v&&(n(new $76f2b00474519cdb$export$2e2bcd8739ae039("Request aborted",$76f2b00474519cdb$export$2e2bcd8739ae039.ECONNABORTED,r,v)),v=null)},v.onerror=function(i){let s=i&&i.message?i.message:"Network Error",a=new $76f2b00474519cdb$export$2e2bcd8739ae039(s,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_NETWORK,r,v);a.event=i||null,n(a),v=null},v.ontimeout=function(){let i=l.timeout?"timeout of "+l.timeout+"ms exceeded":"timeout exceeded",s=l.transitional||$8d926c432395d4f2$export$2e2bcd8739ae039;l.timeoutErrorMessage&&(i=l.timeoutErrorMessage),n(new $76f2b00474519cdb$export$2e2bcd8739ae039(i,s.clarifyTimeoutError?$76f2b00474519cdb$export$2e2bcd8739ae039.ETIMEDOUT:$76f2b00474519cdb$export$2e2bcd8739ae039.ECONNABORTED,r,v)),v=null},void 0===u&&c.setContentType(null),"setRequestHeader"in v&&$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(c.toJSON(),function(r,i){v.setRequestHeader(i,r)}),$fb599b4a944ac204$export$2e2bcd8739ae039.isUndefined(l.withCredentials)||(v.withCredentials=!!l.withCredentials),p&&"json"!==p&&(v.responseType=l.responseType),g&&([o,f]=$7e4925c7fdfe1077$export$c1b28109d46c3592(g,!0),v.addEventListener("progress",o)),h&&v.upload&&([a,d]=$7e4925c7fdfe1077$export$c1b28109d46c3592(h),v.upload.addEventListener("progress",a),v.upload.addEventListener("loadend",d)),(l.cancelToken||l.signal)&&(s=i=>{v&&(n(!i||i.type?new $c0eaa8e11eba5040$export$2e2bcd8739ae039(null,r,v):i),v.abort(),v=null)},l.cancelToken&&l.cancelToken.subscribe(s),l.signal&&(l.signal.aborted?s():l.signal.addEventListener("abort",s)));let b=$c2e1cb1ec72c8735$export$2e2bcd8739ae039(l.url);if(b&&-1===$e50a782fe1bbe96e$export$2e2bcd8739ae039.protocols.indexOf(b)){n(new $76f2b00474519cdb$export$2e2bcd8739ae039("Unsupported protocol "+b+":",$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_REQUEST,r));return}v.send(u||null)})};const $8c5d20687d884370$var$composeSignals=(r,i)=>{let{length:n}=r=r?r.filter(Boolean):[];if(i||n){let n,s=new AbortController,a=function(r){if(!n){n=!0,d();let i=r instanceof Error?r:this.reason;s.abort(i instanceof $76f2b00474519cdb$export$2e2bcd8739ae039?i:new $c0eaa8e11eba5040$export$2e2bcd8739ae039(i instanceof Error?i.message:i))}},o=i&&setTimeout(()=>{o=null,a(new $76f2b00474519cdb$export$2e2bcd8739ae039(`timeout of ${i}ms exceeded`,$76f2b00474519cdb$export$2e2bcd8739ae039.ETIMEDOUT))},i),d=()=>{r&&(o&&clearTimeout(o),o=null,r.forEach(r=>{r.unsubscribe?r.unsubscribe(a):r.removeEventListener("abort",a)}),r=null)};r.forEach(r=>r.addEventListener("abort",a));let{signal:f}=s;return f.unsubscribe=()=>$fb599b4a944ac204$export$2e2bcd8739ae039.asap(d),f}};var $8c5d20687d884370$export$2e2bcd8739ae039=$8c5d20687d884370$var$composeSignals;const $1a4710d75d892f0d$export$71b051935044bd5d=function*(r,i){let n,s=r.byteLength;if(!i||s{let a;let o=$1a4710d75d892f0d$export$f9f241124ee3198e(r,i),d=0,f=r=>{!a&&(a=!0,s&&s(r))};return new ReadableStream({async pull(r){try{let{done:i,value:s}=await o.next();if(i){f(),r.close();return}let a=s.byteLength;if(n){let r=d+=a;n(r)}r.enqueue(new Uint8Array(s))}catch(r){throw f(r),r}},cancel:r=>(f(r),o.return())},{highWaterMark:2})},$d4c762493e739428$var$DEFAULT_CHUNK_SIZE=65536,{isFunction:$d4c762493e739428$var$isFunction}=$fb599b4a944ac204$export$2e2bcd8739ae039,$d4c762493e739428$var$globalFetchAPI=(({Request:r,Response:i})=>({Request:r,Response:i}))($fb599b4a944ac204$export$2e2bcd8739ae039.global),{ReadableStream:$d4c762493e739428$var$ReadableStream,TextEncoder:$d4c762493e739428$var$TextEncoder}=$fb599b4a944ac204$export$2e2bcd8739ae039.global,$d4c762493e739428$var$test=(r,...i)=>{try{return!!r(...i)}catch(r){return!1}},$d4c762493e739428$var$factory=r=>{var i;r=$fb599b4a944ac204$export$2e2bcd8739ae039.merge.call({skipUndefined:!0},$d4c762493e739428$var$globalFetchAPI,r);let{fetch:n,Request:s,Response:a}=r,o=n?$d4c762493e739428$var$isFunction(n):"function"==typeof fetch,d=$d4c762493e739428$var$isFunction(s),f=$d4c762493e739428$var$isFunction(a);if(!o)return!1;let l=o&&$d4c762493e739428$var$isFunction($d4c762493e739428$var$ReadableStream),u=o&&("function"==typeof $d4c762493e739428$var$TextEncoder?(i=new $d4c762493e739428$var$TextEncoder,r=>i.encode(r)):async r=>new Uint8Array(await new s(r).arrayBuffer())),c=d&&l&&$d4c762493e739428$var$test(()=>{let r=!1,i=new $d4c762493e739428$var$ReadableStream,n=new s($e50a782fe1bbe96e$export$2e2bcd8739ae039.origin,{body:i,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type");return i.cancel(),r&&!n}),p=f&&l&&$d4c762493e739428$var$test(()=>$fb599b4a944ac204$export$2e2bcd8739ae039.isReadableStream(new a("").body)),h={stream:p&&(r=>r.body)};o&&(()=>{["text","arrayBuffer","blob","formData","stream"].forEach(r=>{h[r]||(h[r]=(i,n)=>{let s=i&&i[r];if(s)return s.call(i);throw new $76f2b00474519cdb$export$2e2bcd8739ae039(`Response type '${r}' is not supported`,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_NOT_SUPPORT,n)})})})();let g=async r=>{if(null==r)return 0;if($fb599b4a944ac204$export$2e2bcd8739ae039.isBlob(r))return r.size;if($fb599b4a944ac204$export$2e2bcd8739ae039.isSpecCompliantForm(r)){let i=new s($e50a782fe1bbe96e$export$2e2bcd8739ae039.origin,{method:"POST",body:r});return(await i.arrayBuffer()).byteLength}return $fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBufferView(r)||$fb599b4a944ac204$export$2e2bcd8739ae039.isArrayBuffer(r)?r.byteLength:($fb599b4a944ac204$export$2e2bcd8739ae039.isURLSearchParams(r)&&(r+=""),$fb599b4a944ac204$export$2e2bcd8739ae039.isString(r))?(await u(r)).byteLength:void 0},m=async(r,i)=>{let n=$fb599b4a944ac204$export$2e2bcd8739ae039.toFiniteNumber(r.getContentLength());return null==n?g(i):n};return async r=>{let i,{url:o,method:f,data:l,signal:u,cancelToken:g,timeout:v,onDownloadProgress:_,onUploadProgress:b,responseType:T,headers:E,withCredentials:w="same-origin",fetchOptions:S}=$d3e897c397a73e07$export$2e2bcd8739ae039(r),I=n||fetch;T=T?(T+"").toLowerCase():"text";let O=$8c5d20687d884370$export$2e2bcd8739ae039([u,g&&g.toAbortSignal()],v),C=null,A=O&&O.unsubscribe&&(()=>{O.unsubscribe()});try{if(b&&c&&"get"!==f&&"head"!==f&&0!==(i=await m(E,l))){let r,n=new s(o,{method:"POST",body:l,duplex:"half"});if($fb599b4a944ac204$export$2e2bcd8739ae039.isFormData(l)&&(r=n.headers.get("content-type"))&&E.setContentType(r),n.body){let[r,s]=$7e4925c7fdfe1077$export$d9fadd12586c18d6(i,$7e4925c7fdfe1077$export$c1b28109d46c3592($7e4925c7fdfe1077$export$5d35863c355a22a9(b)));l=$1a4710d75d892f0d$export$b0119225647bd83(n.body,$d4c762493e739428$var$DEFAULT_CHUNK_SIZE,r,s)}}$fb599b4a944ac204$export$2e2bcd8739ae039.isString(w)||(w=w?"include":"omit");let n=d&&"credentials"in s.prototype,u={...S,signal:O,method:f.toUpperCase(),headers:E.normalize().toJSON(),body:l,duplex:"half",credentials:n?w:void 0};C=d&&new s(o,u);let g=await (d?I(C,S):I(o,u)),v=p&&("stream"===T||"response"===T);if(p&&(_||v&&A)){let r={};["status","statusText","headers"].forEach(i=>{r[i]=g[i]});let i=$fb599b4a944ac204$export$2e2bcd8739ae039.toFiniteNumber(g.headers.get("content-length")),[n,s]=_&&$7e4925c7fdfe1077$export$d9fadd12586c18d6(i,$7e4925c7fdfe1077$export$c1b28109d46c3592($7e4925c7fdfe1077$export$5d35863c355a22a9(_),!0))||[];g=new a($1a4710d75d892f0d$export$b0119225647bd83(g.body,$d4c762493e739428$var$DEFAULT_CHUNK_SIZE,n,()=>{s&&s(),A&&A()}),r)}T=T||"text";let k=await h[$fb599b4a944ac204$export$2e2bcd8739ae039.findKey(h,T)||"text"](g,r);return!v&&A&&A(),await new Promise((i,n)=>{$5b3c479423bad418$export$2e2bcd8739ae039(i,n,{data:k,headers:$0b0f695da095f026$export$2e2bcd8739ae039.from(g.headers),status:g.status,statusText:g.statusText,config:r,request:C})})}catch(i){if(A&&A(),i&&"TypeError"===i.name&&/Load failed|fetch/i.test(i.message))throw Object.assign(new $76f2b00474519cdb$export$2e2bcd8739ae039("Network Error",$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_NETWORK,r,C,i&&i.response),{cause:i.cause||i});throw $76f2b00474519cdb$export$2e2bcd8739ae039.from(i,i&&i.code,r,C,i&&i.response)}}},$d4c762493e739428$var$seedCache=new Map,$d4c762493e739428$export$3105c6651375d4fa=r=>{let i=r&&r.env||{},{fetch:n,Request:s,Response:a}=i,o=[s,a,n],d=o.length,f,l,u=$d4c762493e739428$var$seedCache;for(;d--;)f=o[d],void 0===(l=u.get(f))&&u.set(f,l=d?new Map:$d4c762493e739428$var$factory(i)),u=l;return l};$d4c762493e739428$export$3105c6651375d4fa();const $50c55ec2566e79cc$var$knownAdapters={http:$ddd5bc0d8b7abeaf$export$2e2bcd8739ae039,xhr:$a3c2bb216d98e61a$export$2e2bcd8739ae039,fetch:{get:$d4c762493e739428$export$3105c6651375d4fa}};$fb599b4a944ac204$export$2e2bcd8739ae039.forEach($50c55ec2566e79cc$var$knownAdapters,(r,i)=>{if(r){try{Object.defineProperty(r,"name",{value:i})}catch(r){}Object.defineProperty(r,"adapterName",{value:i})}});const $50c55ec2566e79cc$var$renderReason=r=>`- ${r}`,$50c55ec2566e79cc$var$isResolvedHandle=r=>$fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(r)||null===r||!1===r;function $50c55ec2566e79cc$var$getAdapter(r,i){let n,s;r=$fb599b4a944ac204$export$2e2bcd8739ae039.isArray(r)?r:[r];let{length:a}=r,o={};for(let d=0;d`adapter ${r} `+(!1===i?"is not supported by the environment":"is not available in the build")),i=a?r.length>1?"since :\n"+r.map($50c55ec2566e79cc$var$renderReason).join("\n"):" "+$50c55ec2566e79cc$var$renderReason(r[0]):"as no adapter specified";throw new $76f2b00474519cdb$export$2e2bcd8739ae039("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return s}var $50c55ec2566e79cc$export$2e2bcd8739ae039={getAdapter:$50c55ec2566e79cc$var$getAdapter,adapters:$50c55ec2566e79cc$var$knownAdapters};function $39518e4eed54dac4$var$throwIfCancellationRequested(r){if(r.cancelToken&&r.cancelToken.throwIfRequested(),r.signal&&r.signal.aborted)throw new $c0eaa8e11eba5040$export$2e2bcd8739ae039(null,r)}function $39518e4eed54dac4$export$2e2bcd8739ae039(r){$39518e4eed54dac4$var$throwIfCancellationRequested(r),r.headers=$0b0f695da095f026$export$2e2bcd8739ae039.from(r.headers),r.data=$7393d1b654eed49e$export$2e2bcd8739ae039.call(r,r.transformRequest),-1!==["post","put","patch"].indexOf(r.method)&&r.headers.setContentType("application/x-www-form-urlencoded",!1);let i=$50c55ec2566e79cc$export$2e2bcd8739ae039.getAdapter(r.adapter||$7463d8cabcd159e8$export$2e2bcd8739ae039.adapter,r);return i(r).then(function(i){return $39518e4eed54dac4$var$throwIfCancellationRequested(r),i.data=$7393d1b654eed49e$export$2e2bcd8739ae039.call(r,r.transformResponse,i),i.headers=$0b0f695da095f026$export$2e2bcd8739ae039.from(i.headers),i},function(i){return!$3ce83a3b4ea5cd0b$export$2e2bcd8739ae039(i)&&($39518e4eed54dac4$var$throwIfCancellationRequested(r),i&&i.response&&(i.response.data=$7393d1b654eed49e$export$2e2bcd8739ae039.call(r,r.transformResponse,i.response),i.response.headers=$0b0f695da095f026$export$2e2bcd8739ae039.from(i.response.headers))),Promise.reject(i)})}const $6c7f63a22949b466$export$a4ad2735b021c132="1.15.0",$1ec0f94678dc2418$var$validators={};["object","boolean","number","function","string","symbol"].forEach((r,i)=>{$1ec0f94678dc2418$var$validators[r]=function(n){return typeof n===r||"a"+(i<1?"n ":" ")+r}});const $1ec0f94678dc2418$var$deprecatedWarnings={};function $1ec0f94678dc2418$var$assertOptions(r,i,n){if("object"!=typeof r)throw new $76f2b00474519cdb$export$2e2bcd8739ae039("options must be an object",$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_OPTION_VALUE);let s=Object.keys(r),a=s.length;for(;a-- >0;){let o=s[a],d=i[o];if(d){let i=r[o],n=void 0===i||d(i,o,r);if(!0!==n)throw new $76f2b00474519cdb$export$2e2bcd8739ae039("option "+o+" must be "+n,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new $76f2b00474519cdb$export$2e2bcd8739ae039("Unknown option "+o,$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_BAD_OPTION)}}$1ec0f94678dc2418$var$validators.transitional=function(r,i,n){function s(r,i){return"[Axios v"+$6c7f63a22949b466$export$a4ad2735b021c132+"] Transitional option '"+r+"'"+i+(n?". "+n:"")}return(n,a,o)=>{if(!1===r)throw new $76f2b00474519cdb$export$2e2bcd8739ae039(s(a," has been removed"+(i?" in "+i:"")),$76f2b00474519cdb$export$2e2bcd8739ae039.ERR_DEPRECATED);return i&&!$1ec0f94678dc2418$var$deprecatedWarnings[a]&&($1ec0f94678dc2418$var$deprecatedWarnings[a]=!0,console.warn(s(a," has been deprecated since v"+i+" and will be removed in the near future"))),!r||r(n,a,o)}},$1ec0f94678dc2418$var$validators.spelling=function(r){return(i,n)=>(console.warn(`${n} is likely a misspelling of ${r}`),!0)};var $1ec0f94678dc2418$export$2e2bcd8739ae039={assertOptions:$1ec0f94678dc2418$var$assertOptions,validators:$1ec0f94678dc2418$var$validators};const $12a85eb9e10282e4$var$validators=$1ec0f94678dc2418$export$2e2bcd8739ae039.validators;class $12a85eb9e10282e4$var$Axios{constructor(r){this.defaults=r||{},this.interceptors={request:new $c58847d54497e792$export$2e2bcd8739ae039,response:new $c58847d54497e792$export$2e2bcd8739ae039}}async request(r,i){try{return await this._request(r,i)}catch(r){if(r instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=Error();let n=(()=>{if(!i.stack)return"";let r=i.stack.indexOf("\n");return -1===r?"":i.stack.slice(r+1)})();try{if(r.stack){if(n){let i=n.indexOf("\n"),s=-1===i?-1:n.indexOf("\n",i+1),a=-1===s?"":n.slice(s+1);String(r.stack).endsWith(a)||(r.stack+="\n"+n)}}else r.stack=n}catch(r){}}throw r}}_request(r,i){let n,s;"string"==typeof r?(i=i||{}).url=r:i=r||{},i=$bef108e337cae1ac$export$2e2bcd8739ae039(this.defaults,i);let{transitional:a,paramsSerializer:o,headers:d}=i;void 0!==a&&$1ec0f94678dc2418$export$2e2bcd8739ae039.assertOptions(a,{silentJSONParsing:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean),forcedJSONParsing:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean),clarifyTimeoutError:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean),legacyInterceptorReqResOrdering:$12a85eb9e10282e4$var$validators.transitional($12a85eb9e10282e4$var$validators.boolean)},!1),null!=o&&($fb599b4a944ac204$export$2e2bcd8739ae039.isFunction(o)?i.paramsSerializer={serialize:o}:$1ec0f94678dc2418$export$2e2bcd8739ae039.assertOptions(o,{encode:$12a85eb9e10282e4$var$validators.function,serialize:$12a85eb9e10282e4$var$validators.function},!0)),void 0!==i.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?i.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:i.allowAbsoluteUrls=!0),$1ec0f94678dc2418$export$2e2bcd8739ae039.assertOptions(i,{baseUrl:$12a85eb9e10282e4$var$validators.spelling("baseURL"),withXsrfToken:$12a85eb9e10282e4$var$validators.spelling("withXSRFToken")},!0),i.method=(i.method||this.defaults.method||"get").toLowerCase();let f=d&&$fb599b4a944ac204$export$2e2bcd8739ae039.merge(d.common,d[i.method]);d&&$fb599b4a944ac204$export$2e2bcd8739ae039.forEach(["delete","get","head","post","put","patch","common"],r=>{delete d[r]}),i.headers=$0b0f695da095f026$export$2e2bcd8739ae039.concat(f,d);let l=[],u=!0;this.interceptors.request.forEach(function(r){if("function"==typeof r.runWhen&&!1===r.runWhen(i))return;u=u&&r.synchronous;let n=i.transitional||$8d926c432395d4f2$export$2e2bcd8739ae039,s=n&&n.legacyInterceptorReqResOrdering;s?l.unshift(r.fulfilled,r.rejected):l.push(r.fulfilled,r.rejected)});let c=[];this.interceptors.response.forEach(function(r){c.push(r.fulfilled,r.rejected)});let p=0;if(!u){let r=[$39518e4eed54dac4$export$2e2bcd8739ae039.bind(this),void 0];for(r.unshift(...l),r.push(...c),s=r.length,n=Promise.resolve(i);p{if(!n._listeners)return;let i=n._listeners.length;for(;i-- >0;)n._listeners[i](r);n._listeners=null}),this.promise.then=r=>{let i;let s=new Promise(r=>{n.subscribe(r),i=r}).then(r);return s.cancel=function(){n.unsubscribe(i)},s},r(function(r,s,a){n.reason||(n.reason=new $c0eaa8e11eba5040$export$2e2bcd8739ae039(r,s,a),i(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(r){if(this.reason){r(this.reason);return}this._listeners?this._listeners.push(r):this._listeners=[r]}unsubscribe(r){if(!this._listeners)return;let i=this._listeners.indexOf(r);-1!==i&&this._listeners.splice(i,1)}toAbortSignal(){let r=new AbortController,i=i=>{r.abort(i)};return this.subscribe(i),r.signal.unsubscribe=()=>this.unsubscribe(i),r.signal}static source(){let r;let i=new $ddf58ab6eba80d2f$var$CancelToken(function(i){r=i});return{token:i,cancel:r}}}var $ddf58ab6eba80d2f$export$2e2bcd8739ae039=$ddf58ab6eba80d2f$var$CancelToken;function $69015d689f130999$export$2e2bcd8739ae039(r){return function(i){return r.apply(null,i)}}function $286e7366ba6a9033$export$2e2bcd8739ae039(r){return $fb599b4a944ac204$export$2e2bcd8739ae039.isObject(r)&&!0===r.isAxiosError}const $92baf5657ceb9e03$var$HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries($92baf5657ceb9e03$var$HttpStatusCode).forEach(([r,i])=>{$92baf5657ceb9e03$var$HttpStatusCode[i]=r});var $92baf5657ceb9e03$export$2e2bcd8739ae039=$92baf5657ceb9e03$var$HttpStatusCode;function $34471abae050a418$var$createInstance(r){let i=new $12a85eb9e10282e4$export$2e2bcd8739ae039(r),n=$7da4ba9e886ae2f3$export$2e2bcd8739ae039($12a85eb9e10282e4$export$2e2bcd8739ae039.prototype.request,i);return $fb599b4a944ac204$export$2e2bcd8739ae039.extend(n,$12a85eb9e10282e4$export$2e2bcd8739ae039.prototype,i,{allOwnKeys:!0}),$fb599b4a944ac204$export$2e2bcd8739ae039.extend(n,i,null,{allOwnKeys:!0}),n.create=function(i){return $34471abae050a418$var$createInstance($bef108e337cae1ac$export$2e2bcd8739ae039(r,i))},n}const $34471abae050a418$var$axios=$34471abae050a418$var$createInstance($7463d8cabcd159e8$export$2e2bcd8739ae039);$34471abae050a418$var$axios.Axios=$12a85eb9e10282e4$export$2e2bcd8739ae039,$34471abae050a418$var$axios.CanceledError=$c0eaa8e11eba5040$export$2e2bcd8739ae039,$34471abae050a418$var$axios.CancelToken=$ddf58ab6eba80d2f$export$2e2bcd8739ae039,$34471abae050a418$var$axios.isCancel=$3ce83a3b4ea5cd0b$export$2e2bcd8739ae039,$34471abae050a418$var$axios.VERSION=$6c7f63a22949b466$export$a4ad2735b021c132,$34471abae050a418$var$axios.toFormData=$2252ac2b38ec6071$export$2e2bcd8739ae039,$34471abae050a418$var$axios.AxiosError=$76f2b00474519cdb$export$2e2bcd8739ae039,$34471abae050a418$var$axios.Cancel=$34471abae050a418$var$axios.CanceledError,$34471abae050a418$var$axios.all=function(r){return Promise.all(r)},$34471abae050a418$var$axios.spread=$69015d689f130999$export$2e2bcd8739ae039,$34471abae050a418$var$axios.isAxiosError=$286e7366ba6a9033$export$2e2bcd8739ae039,$34471abae050a418$var$axios.mergeConfig=$bef108e337cae1ac$export$2e2bcd8739ae039,$34471abae050a418$var$axios.AxiosHeaders=$0b0f695da095f026$export$2e2bcd8739ae039,$34471abae050a418$var$axios.formToJSON=r=>$46103cbe9839965f$export$2e2bcd8739ae039($fb599b4a944ac204$export$2e2bcd8739ae039.isHTMLForm(r)?new FormData(r):r),$34471abae050a418$var$axios.getAdapter=$50c55ec2566e79cc$export$2e2bcd8739ae039.getAdapter,$34471abae050a418$var$axios.HttpStatusCode=$92baf5657ceb9e03$export$2e2bcd8739ae039,$34471abae050a418$var$axios.default=$34471abae050a418$var$axios;var $34471abae050a418$export$2e2bcd8739ae039=$34471abae050a418$var$axios;const{Axios:$4ce02f68f14348c9$export$1c00760e9e5a4e95,AxiosError:$4ce02f68f14348c9$export$c1fbed17c2f6a328,CanceledError:$4ce02f68f14348c9$export$1ab0c6b20d94fa14,isCancel:$4ce02f68f14348c9$export$3b22524397b493c6,CancelToken:$4ce02f68f14348c9$export$fd08e3cb425f0d61,VERSION:$4ce02f68f14348c9$export$a4ad2735b021c132,all:$4ce02f68f14348c9$export$84bf76cd7afc7469,Cancel:$4ce02f68f14348c9$export$848c9b7ead0df967,isAxiosError:$4ce02f68f14348c9$export$fbafdbe06a5b5a9a,spread:$4ce02f68f14348c9$export$3ae0fd4797ed47c8,toFormData:$4ce02f68f14348c9$export$10ae0d317ea97f8b,AxiosHeaders:$4ce02f68f14348c9$export$4e7d6ff0f3e6520,HttpStatusCode:$4ce02f68f14348c9$export$a972f69c851492b3,formToJSON:$4ce02f68f14348c9$export$86d7c59254d6a2c9,getAdapter:$4ce02f68f14348c9$export$17ddc20a97d669e2,mergeConfig:$4ce02f68f14348c9$export$7ec1ebcfa9d8bd6a}=$34471abae050a418$export$2e2bcd8739ae039;var $7U5sq=parcelRequire("7U5sq"),$5xch2=parcelRequire("5xch2"),$2kkR6=parcelRequire("2kkR6"),$eb25ad002e4befa3$exports={};!function(r){var i,n=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,s=Math.ceil,a=Math.floor,o="[BigNumber Error] ",d=o+"Number primitive has more than 15 significant digits: ",f=1e14,l=14,u=9007199254740991,c=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],p=1e7,h=1e9;function g(r){var i,S,I,O=z.prototype={constructor:z,toString:null,valueOf:null},C=new z(1),A=20,k=4,M=-7,D=21,P=-1e7,N=1e7,q=!1,B=1,L=0,F={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xa0",suffix:""},U="0123456789abcdefghijklmnopqrstuvwxyz",H=!0;function z(r,i){var s,o,f,c,p,h,g,m,v=this;if(!(v instanceof z))return new z(r,i);if(null==i){if(r&&!0===r._isBigNumber){v.s=r.s,!r.c||r.e>N?v.c=v.e=null:r.e=10;p/=10,c++);c>N?v.c=v.e=null:(v.e=c,v.c=[r]);return}m=String(r)}else{if(!n.test(m=String(r)))return I(v,m,h);v.s=45==m.charCodeAt(0)?(m=m.slice(1),-1):1}(c=m.indexOf("."))>-1&&(m=m.replace(".","")),(p=m.search(/e/i))>0?(c<0&&(c=p),c+=+m.slice(p+1),m=m.substring(0,p)):c<0&&(c=m.length)}else{if(b(i,2,U.length,"Base"),10==i&&H)return W(v=new z(r),A+v.e+1,k);if(m=String(r),h="number"==typeof r){if(0*r!=0)return I(v,m,h,i);if(v.s=1/r<0?(m=m.slice(1),-1):1,z.DEBUG&&m.replace(/^0\.0*|\./,"").length>15)throw Error(d+r)}else v.s=45===m.charCodeAt(0)?(m=m.slice(1),-1):1;for(s=U.slice(0,i),c=p=0,g=m.length;ps.indexOf(o=m.charAt(p))){if("."==o){if(p>c){c=g;continue}}else if(!f&&(m==m.toUpperCase()&&(m=m.toLowerCase())||m==m.toLowerCase()&&(m=m.toUpperCase()))){f=!0,p=-1,c=0;continue}return I(v,String(r),h,i)}h=!1,(c=(m=S(m,i,10,v.s)).indexOf("."))>-1?m=m.replace(".",""):c=m.length}for(p=0;48===m.charCodeAt(p);p++);for(g=m.length;48===m.charCodeAt(--g););if(m=m.slice(p,++g)){if(g-=p,h&&z.DEBUG&&g>15&&(r>u||r!==a(r)))throw Error(d+v.s*r);if((c=c-p-1)>N)v.c=v.e=null;else if(c=D)?E(l,d):w(l,d,"0");else if(o=(r=W(new z(r),i,n)).e,f=(l=v(r.c)).length,1==s||2==s&&(i<=o||o<=M)){for(;ff){if(--i>0)for(l+=".";i--;l+="0");}else if((i+=o-f)>0)for(o+1==f&&(l+=".");i--;l+="0");return r.s<0&&a?"-"+l:l}function K(r,i){for(var n,s=1,a=new z(r[0]);s=10;a/=10,s++);return(n=s+n*l-1)>N?r.c=r.e=null:n=10;h/=10,d++);if((u=i-d)<0)u+=l,p=i,v=(g=_[m=0])/b[d-p-1]%10|0;else if((m=s((u+1)/l))>=_.length){if(o){for(;_.length<=m;_.push(0));g=v=0,d=1,u%=l,p=u-l+1}else break r}else{for(d=1,g=h=_[m];h>=10;h/=10,d++);u%=l,v=(p=u-l+d)<0?0:g/b[d-p-1]%10|0}if(o=o||i<0||null!=_[m+1]||(p<0?g:g%b[d-p-1]),o=n<4?(v||o)&&(0==n||n==(r.s<0?3:2)):v>5||5==v&&(4==n||o||6==n&&(u>0?p>0?g/b[d-p]:0:_[m-1])%10&1||n==(r.s<0?8:7)),i<1||!_[0])return _.length=0,o?(i-=r.e+1,_[0]=b[(l-i%l)%l],r.e=-i||0):_[0]=r.e=0,r;if(0==u?(_.length=m,h=1,m--):(_.length=m+1,h=b[l-u],_[m]=p>0?a(g/b[d-p]%b[p])*h:0),o)for(;;)if(0==m){for(u=1,p=_[0];p>=10;p/=10,u++);for(p=_[0]+=h,h=1;p>=10;p/=10,h++);u!=h&&(r.e++,_[0]==f&&(_[0]=1));break}else{if(_[m]+=h,_[m]!=f)break;_[m--]=0,h=1}for(u=_.length;0===_[--u];_.pop());}r.e>N?r.c=r.e=null:r.e=D?E(i,n):w(i,n,"0"),r.s<0?"-"+i:i)}return z.clone=g,z.ROUND_UP=0,z.ROUND_DOWN=1,z.ROUND_CEIL=2,z.ROUND_FLOOR=3,z.ROUND_HALF_UP=4,z.ROUND_HALF_DOWN=5,z.ROUND_HALF_EVEN=6,z.ROUND_HALF_CEIL=7,z.ROUND_HALF_FLOOR=8,z.EUCLID=9,z.config=z.set=function(r){var i,n;if(null!=r){if("object"==typeof r){if(r.hasOwnProperty(i="DECIMAL_PLACES")&&(b(n=r[i],0,h,i),A=n),r.hasOwnProperty(i="ROUNDING_MODE")&&(b(n=r[i],0,8,i),k=n),r.hasOwnProperty(i="EXPONENTIAL_AT")&&((n=r[i])&&n.pop?(b(n[0],-h,0,i),b(n[1],0,h,i),M=n[0],D=n[1]):(b(n,-h,h,i),M=-(D=n<0?-n:n))),r.hasOwnProperty(i="RANGE")){if((n=r[i])&&n.pop)b(n[0],-h,-1,i),b(n[1],1,h,i),P=n[0],N=n[1];else if(b(n,-h,h,i),n)P=-(N=n<0?-n:n);else throw Error(o+i+" cannot be zero: "+n)}if(r.hasOwnProperty(i="CRYPTO")){if(!!(n=r[i])===n){if(n){if("undefined"!=typeof crypto&&crypto&&(crypto.getRandomValues||crypto.randomBytes))q=n;else throw q=!n,Error(o+"crypto unavailable")}else q=n}else throw Error(o+i+" not true or false: "+n)}if(r.hasOwnProperty(i="MODULO_MODE")&&(b(n=r[i],0,9,i),B=n),r.hasOwnProperty(i="POW_PRECISION")&&(b(n=r[i],0,h,i),L=n),r.hasOwnProperty(i="FORMAT")){if("object"==typeof(n=r[i]))F=n;else throw Error(o+i+" not an object: "+n)}if(r.hasOwnProperty(i="ALPHABET")){if("string"!=typeof(n=r[i])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(o+i+" invalid: "+n);H="0123456789"==n.slice(0,10),U=n}}else throw Error(o+"Object expected: "+r)}return{DECIMAL_PLACES:A,ROUNDING_MODE:k,EXPONENTIAL_AT:[M,D],RANGE:[P,N],CRYPTO:q,MODULO_MODE:B,POW_PRECISION:L,FORMAT:F,ALPHABET:U}},z.isBigNumber=function(r){if(!r||!0!==r._isBigNumber)return!1;if(!z.DEBUG)return!0;var i,n,s=r.c,d=r.e,u=r.s;r:if("[object Array]"==({}).toString.call(s)){if((1===u||-1===u)&&d>=-h&&d<=h&&d===a(d)){if(0===s[0]){if(0===d&&1===s.length)return!0;break r}if((i=(d+1)%l)<1&&(i+=l),String(s[0]).length==i){for(i=0;i=f||n!==a(n))break r;if(0!==n)return!0}}}else if(null===s&&null===d&&(null===u||1===u||-1===u))return!0;throw Error(o+"Invalid BigNumber: "+r)},z.maximum=z.max=function(){return K(arguments,O.lt)},z.minimum=z.min=function(){return K(arguments,O.gt)},z.random=function(){var r=9007199254740992,i=9007199254740992*Math.random()&2097151?function(){return a(Math.random()*r)}:function(){return(1073741824*Math.random()|0)*8388608+(8388608*Math.random()|0)};return function(r){var n,d,f,u,p,g=0,m=[],v=new z(C);if(null==r?r=A:b(r,0,h),u=s(r/l),q){if(crypto.getRandomValues){for(n=crypto.getRandomValues(new Uint32Array(u*=2));g>>11))>=9e15?(d=crypto.getRandomValues(new Uint32Array(2)),n[g]=d[0],n[g+1]=d[1]):(m.push(p%1e14),g+=2);g=u/2}else if(crypto.randomBytes){for(n=crypto.randomBytes(u*=7);g=9e15?crypto.randomBytes(7).copy(n,g):(m.push(p%1e14),g+=7);g=u/7}else throw q=!1,Error(o+"crypto unavailable")}if(!q)for(;g=10;p/=10,g++);gn-1&&(null==d[a+1]&&(d[a+1]=0),d[a+1]+=d[a]/n|0,d[a]%=n)}return d.reverse()}return function(s,a,o,d,f){var l,u,c,p,h,g,m,_,b=s.indexOf("."),T=A,E=k;for(b>=0&&(p=L,L=0,s=s.replace(".",""),g=(_=new z(a)).pow(s.length-b),L=p,_.c=n(w(v(g.c),g.e,"0"),10,o,r),_.e=_.c.length),c=p=(m=n(s,a,o,f?(l=U,r):(l=r,U))).length;0==m[--p];m.pop());if(!m[0])return l.charAt(0);if(b<0?--c:(g.c=m,g.e=c,g.s=d,m=(g=i(g,_,T,E,o)).c,h=g.r,c=g.e),b=m[u=c+T+1],p=o/2,h=h||u<0||null!=m[u+1],h=E<4?(null!=b||h)&&(0==E||E==(g.s<0?3:2)):b>p||b==p&&(4==E||h||6==E&&1&m[u-1]||E==(g.s<0?8:7)),u<1||!m[0])s=h?w(l.charAt(1),-T,l.charAt(0)):l.charAt(0);else{if(m.length=u,h)for(--o;++m[--u]>o;)m[u]=0,u||(++c,m=[1].concat(m));for(p=m.length;!m[--p];);for(b=0,s="";b<=p;s+=l.charAt(m[b++]));s=w(s,c,l.charAt(0))}return s}}(),i=function(){function r(r,i,n){var s,a,o,d,f=0,l=r.length,u=i%p,c=i/p|0;for(r=r.slice();l--;)s=c*(o=r[l]%p)+(d=r[l]/p|0)*u,f=((a=u*o+s%p*p+f)/n|0)+(s/p|0)+c*d,r[l]=a%n;return f&&(r=[f].concat(r)),r}function i(r,i,n,s){var a,o;if(n!=s)o=n>s?1:-1;else for(a=o=0;ai[a]?1:-1;break}return o}function n(r,i,n,s){for(var a=0;n--;)r[n]-=a,a=r[n]1;r.splice(0,1));}return function(s,o,d,u,c){var p,h,g,v,_,b,T,E,w,S,I,O,C,A,k,M,D,P=s.s==o.s?1:-1,N=s.c,q=o.c;if(!N||!N[0]||!q||!q[0])return new z(s.s&&o.s&&(N?!q||N[0]!=q[0]:q)?N&&0==N[0]||!q?0*P:P/0:NaN);for(w=(E=new z(P)).c=[],P=d+(h=s.e-o.e)+1,c||(c=f,h=m(s.e/l)-m(o.e/l),P=P/l|0),g=0;q[g]==(N[g]||0);g++);if(q[g]>(N[g]||0)&&h--,P<0)w.push(1),v=!0;else{for(A=N.length,M=q.length,g=0,P+=2,(_=a(c/(q[0]+1)))>1&&(q=r(q,_,c),N=r(N,_,c),M=q.length,A=N.length),C=M,I=(S=N.slice(0,M)).length;I=c/2&&k++;do{if(_=0,(p=i(q,S,M,I))<0){if(O=S[0],M!=I&&(O=O*c+(S[1]||0)),(_=a(O/k))>1)for(_>=c&&(_=c-1),T=(b=r(q,_,c)).length,I=S.length;1==i(b,S,T,I);)_--,n(b,Mi(q,S,M,I);)_++,n(S,M=10;P/=10,g++);W(E,d+(E.e=g+h*l-1)+1,u,v)}else E.e=h,E.r=+v;return E}}(),I=function(){var r=/^(-?)0([xbo])(?=\w[\w.]*$)/i,i=/^([^.]+)\.$/,n=/^\.([^.]+)$/,s=/^-?(Infinity|NaN)$/,a=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(d,f,l,u){var c,p=l?f:f.replace(a,"");if(s.test(p))d.s=isNaN(p)?null:p<0?-1:1;else{if(!l&&(p=p.replace(r,function(r,i,n){return c="x"==(n=n.toLowerCase())?16:"b"==n?2:8,u&&u!=c?r:i}),u&&(c=u,p=p.replace(i,"$1").replace(n,"0.$1")),f!=p))return new z(p,c);if(z.DEBUG)throw Error(o+"Not a"+(u?" base "+u:"")+" number: "+f);d.s=null}d.c=d.e=null}}(),O.absoluteValue=O.abs=function(){var r=new z(this);return r.s<0&&(r.s=1),r},O.comparedTo=function(r,i){return _(this,new z(r,i))},O.decimalPlaces=O.dp=function(r,i){var n,s,a,o=this;if(null!=r)return b(r,0,h),null==i?i=k:b(i,0,8),W(new z(o),r+o.e+1,i);if(!(n=o.c))return null;if(s=((a=n.length-1)-m(this.e/l))*l,a=n[a])for(;a%10==0;a/=10,s--);return s<0&&(s=0),s},O.dividedBy=O.div=function(r,n){return i(this,new z(r,n),A,k)},O.dividedToIntegerBy=O.idiv=function(r,n){return i(this,new z(r,n),0,1)},O.exponentiatedBy=O.pow=function(r,i){var n,d,f,u,c,p,h,g,m,v=this;if((r=new z(r)).c&&!r.isInteger())throw Error(o+"Exponent not an integer: "+$(r));if(null!=i&&(i=new z(i)),p=r.e>14,!v.c||!v.c[0]||1==v.c[0]&&!v.e&&1==v.c.length||!r.c||!r.c[0])return m=new z(Math.pow(+$(v),p?r.s*(2-T(r)):+$(r))),i?m.mod(i):m;if(h=r.s<0,i){if(i.c?!i.c[0]:!i.s)return new z(NaN);(d=!h&&v.isInteger()&&i.isInteger())&&(v=v.mod(i))}else{if(r.e>9&&(v.e>0||v.e<-1||(0==v.e?v.c[0]>1||p&&v.c[1]>=24e7:v.c[0]<8e13||p&&v.c[0]<=9999975e7)))return u=v.s<0&&T(r)?-0:0,v.e>-1&&(u=1/u),new z(h?1/u:u);L&&(u=s(L/l+2))}for(p?(n=new z(.5),h&&(r.s=1),g=T(r)):g=(f=Math.abs(+$(r)))%2,m=new z(C);;){if(g){if(!(m=m.times(v)).c)break;u?m.c.length>u&&(m.c.length=u):d&&(m=m.mod(i))}if(f){if(0===(f=a(f/2)))break;g=f%2}else if(W(r=r.times(n),r.e+1,1),r.e>14)g=T(r);else{if(0==(f=+$(r)))break;g=f%2}v=v.times(v),u?v.c&&v.c.length>u&&(v.c.length=u):d&&(v=v.mod(i))}return d?m:(h&&(m=C.div(m)),i?m.mod(i):u?W(m,L,k,c):m)},O.integerValue=function(r){var i=new z(this);return null==r?r=k:b(r,0,8),W(i,i.e+1,r)},O.isEqualTo=O.eq=function(r,i){return 0===_(this,new z(r,i))},O.isFinite=function(){return!!this.c},O.isGreaterThan=O.gt=function(r,i){return _(this,new z(r,i))>0},O.isGreaterThanOrEqualTo=O.gte=function(r,i){return 1===(i=_(this,new z(r,i)))||0===i},O.isInteger=function(){return!!this.c&&m(this.e/l)>this.c.length-2},O.isLessThan=O.lt=function(r,i){return 0>_(this,new z(r,i))},O.isLessThanOrEqualTo=O.lte=function(r,i){return -1===(i=_(this,new z(r,i)))||0===i},O.isNaN=function(){return!this.s},O.isNegative=function(){return this.s<0},O.isPositive=function(){return this.s>0},O.isZero=function(){return!!this.c&&0==this.c[0]},O.minus=function(r,i){var n,s,a,o,d=this,u=d.s;if(i=(r=new z(r,i)).s,!u||!i)return new z(NaN);if(u!=i)return r.s=-i,d.plus(r);var c=d.e/l,p=r.e/l,h=d.c,g=r.c;if(!c||!p){if(!h||!g)return h?(r.s=-i,r):new z(g?d:NaN);if(!h[0]||!g[0])return g[0]?(r.s=-i,r):new z(h[0]?d:3==k?-0:0)}if(c=m(c),p=m(p),h=h.slice(),u=c-p){for((o=u<0)?(u=-u,a=h):(p=c,a=g),a.reverse(),i=u;i--;a.push(0));a.reverse()}else for(s=(o=(u=h.length)<(i=g.length))?u:i,u=i=0;i0)for(;i--;h[n++]=0);for(i=f-1;s>u;){if(h[--s]=0;){for(n=0,_=O[a]%w,b=O[a]/w|0,d=c,o=a+d;o>a;)u=b*(h=I[--d]%w)+(g=I[d]/w|0)*_,n=((h=_*h+u%w*w+T[o]+n)/E|0)+(u/w|0)+b*g,T[o--]=h%E;T[o]=n}return n?++s:T.splice(0,1),V(r,T,s)},O.negated=function(){var r=new z(this);return r.s=-r.s||null,r},O.plus=function(r,i){var n,s=this,a=s.s;if(i=(r=new z(r,i)).s,!a||!i)return new z(NaN);if(a!=i)return r.s=-i,s.minus(r);var o=s.e/l,d=r.e/l,u=s.c,c=r.c;if(!o||!d){if(!u||!c)return new z(a/0);if(!u[0]||!c[0])return c[0]?r:new z(u[0]?s:0*a)}if(o=m(o),d=m(d),u=u.slice(),a=o-d){for(a>0?(d=o,n=c):(a=-a,n=u),n.reverse();a--;n.push(0));n.reverse()}for((a=u.length)-(i=c.length)<0&&(n=c,c=u,u=n,i=a),a=0;i;)a=(u[--i]=u[i]+c[i]+a)/f|0,u[i]=f===u[i]?0:u[i]%f;return a&&(u=[a].concat(u),++d),V(r,u,d)},O.precision=O.sd=function(r,i){var n,s,a,o=this;if(null!=r&&!!r!==r)return b(r,1,h),null==i?i=k:b(i,0,8),W(new z(o),r,i);if(!(n=o.c))return null;if(s=(a=n.length-1)*l+1,a=n[a]){for(;a%10==0;a/=10,s--);for(a=n[0];a>=10;a/=10,s++);}return r&&o.e+1>s&&(s=o.e+1),s},O.shiftedBy=function(r){return b(r,-u,u),this.times("1e"+r)},O.squareRoot=O.sqrt=function(){var r,n,s,a,o,d=this,f=d.c,l=d.s,u=d.e,c=A+4,p=new z("0.5");if(1!==l||!f||!f[0])return new z(!l||l<0&&(!f||f[0])?NaN:f?d:1/0);if(0==(l=Math.sqrt(+$(d)))||l==1/0?(((n=v(f)).length+u)%2==0&&(n+="0"),l=Math.sqrt(+n),u=m((u+1)/2)-(u<0||u%2),n=l==1/0?"5e"+u:(n=l.toExponential()).slice(0,n.indexOf("e")+1)+u,s=new z(n)):s=new z(l+""),s.c[0]){for((l=(u=s.e)+c)<3&&(l=0);;)if(o=s,s=p.times(o.plus(i(d,o,c,1))),v(o.c).slice(0,l)===(n=v(s.c)).slice(0,l)){if(s.e0&&v>0){for(d=v%l||l,p=m.substr(0,d);d0&&(p+=c+m.slice(d)),g&&(p="-"+p)}s=h?p+(n.decimalSeparator||"")+((u=+n.fractionGroupSize)?h.replace(RegExp("\\d{"+u+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):h):p}return(n.prefix||"")+s+(n.suffix||"")},O.toFraction=function(r){var n,s,a,d,f,u,p,h,g,m,_,b,T=this,E=T.c;if(null!=r&&(!(p=new z(r)).isInteger()&&(p.c||1!==p.s)||p.lt(C)))throw Error(o+"Argument "+(p.isInteger()?"out of range: ":"not an integer: ")+$(p));if(!E)return new z(T);for(n=new z(C),g=s=new z(C),a=h=new z(C),b=v(E),f=n.e=b.length-T.e-1,n.c[0]=c[(u=f%l)<0?l+u:u],r=!r||p.comparedTo(n)>0?f>0?n:g:p,u=N,N=1/0,p=new z(b),h.c[0]=0;m=i(p,n,0,1),1!=(d=s.plus(m.times(a))).comparedTo(r);)s=a,a=d,g=h.plus(m.times(d=g)),h=d,n=p.minus(m.times(d=n)),p=d;return d=i(r.minus(s),a,0,1),h=h.plus(d.times(g)),s=s.plus(d.times(a)),h.s=g.s=T.s,f*=2,_=1>i(g,a,f,k).minus(T).abs().comparedTo(i(h,s,f,k).minus(T).abs())?[g,a]:[h,s],N=u,_},O.toNumber=function(){return+$(this)},O.toPrecision=function(r,i){return null!=r&&b(r,1,h),G(this,r,i,2)},O.toString=function(r){var i,n=this,s=n.s,a=n.e;return null===a?s?(i="Infinity",s<0&&(i="-"+i)):i="NaN":(null==r?i=a<=M||a>=D?E(v(n.c),a):w(v(n.c),a,"0"):10===r&&H?i=w(v((n=W(new z(n),A+a+1,k)).c),n.e,"0"):(b(r,2,U.length,"Base"),i=S(w(v(n.c),a,"0"),10,r,s,!0)),s<0&&n.c[0]&&(i="-"+i)),i},O.valueOf=O.toJSON=function(){return $(this)},O._isBigNumber=!0,null!=r&&z.set(r),z}function m(r){var i=0|r;return r>0||r===i?i:i-1}function v(r){for(var i,n,s=1,a=r.length,o=r[0]+"";su^n?1:-1;for(d=0,f=(l=a.length)<(u=o.length)?l:u;do[d]^n?1:-1;return l==u?0:l>u^n?1:-1}function b(r,i,n,s){if(rn||r!==a(r))throw Error(o+(s||"Argument")+("number"==typeof r?rn?" out of range: ":" not an integer: ":" not a primitive number: ")+String(r))}function T(r){var i=r.c.length-1;return m(r.e/l)==i&&r.c[i]%2!=0}function E(r,i){return(r.length>1?r.charAt(0)+"."+r.slice(1):r)+(i<0?"e":"e+")+i}function w(r,i,n){var s,a;if(i<0){for(a=n+".";++i;a+=n);r=a+r}else if(s=r.length,++i>s){for(a=n,i-=s;--i;a+=n);r+=a}else ir instanceof Uint8Array,$bb5e1fcd97588e49$var$u8=r=>new Uint8Array(r.buffer,r.byteOffset,r.byteLength);$bb5e1fcd97588e49$exports.u8=$bb5e1fcd97588e49$var$u8;const $bb5e1fcd97588e49$var$u32=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4));$bb5e1fcd97588e49$exports.u32=$bb5e1fcd97588e49$var$u32;const $bb5e1fcd97588e49$var$createView=r=>new DataView(r.buffer,r.byteOffset,r.byteLength);$bb5e1fcd97588e49$exports.createView=$bb5e1fcd97588e49$var$createView;const $bb5e1fcd97588e49$var$rotr=(r,i)=>r<<32-i|r>>>i;if($bb5e1fcd97588e49$exports.rotr=$bb5e1fcd97588e49$var$rotr,$bb5e1fcd97588e49$exports.isLE=68===new Uint8Array(new Uint32Array([287454020]).buffer)[0],!$bb5e1fcd97588e49$exports.isLE)throw Error("Non little-endian hardware is not supported");const $bb5e1fcd97588e49$var$hexes=Array.from({length:256},(r,i)=>i.toString(16).padStart(2,"0"));function $bb5e1fcd97588e49$var$bytesToHex(r){if(!$bb5e1fcd97588e49$var$u8a(r))throw Error("Uint8Array expected");let i="";for(let n=0;n{};async function $bb5e1fcd97588e49$var$asyncLoop(r,i,n){let s=Date.now();for(let a=0;a=0&&rr+i.length,0)),n=0;return r.forEach(r=>{if(!$bb5e1fcd97588e49$var$u8a(r))throw Error("Uint8Array expected");i.set(r,n),n+=r.length}),i}$bb5e1fcd97588e49$exports.nextTick=$bb5e1fcd97588e49$var$nextTick,$bb5e1fcd97588e49$exports.asyncLoop=$bb5e1fcd97588e49$var$asyncLoop,$bb5e1fcd97588e49$exports.utf8ToBytes=$bb5e1fcd97588e49$var$utf8ToBytes,$bb5e1fcd97588e49$exports.toBytes=$bb5e1fcd97588e49$var$toBytes,$bb5e1fcd97588e49$exports.concatBytes=$bb5e1fcd97588e49$var$concatBytes;class $bb5e1fcd97588e49$var$Hash{clone(){return this._cloneInto()}}$bb5e1fcd97588e49$exports.Hash=$bb5e1fcd97588e49$var$Hash;const $bb5e1fcd97588e49$var$isPlainObject=r=>"[object Object]"===Object.prototype.toString.call(r)&&r.constructor===Object;function $bb5e1fcd97588e49$var$checkOpts(r,i){if(void 0!==i&&("object"!=typeof i||!$bb5e1fcd97588e49$var$isPlainObject(i)))throw Error("Options should be object or undefined");let n=Object.assign(r,i);return n}function $bb5e1fcd97588e49$var$wrapConstructor(r){let i=i=>r().update($bb5e1fcd97588e49$var$toBytes(i)).digest(),n=r();return i.outputLen=n.outputLen,i.blockLen=n.blockLen,i.create=()=>r(),i}function $bb5e1fcd97588e49$var$wrapConstructorWithOpts(r){let i=(i,n)=>r(n).update($bb5e1fcd97588e49$var$toBytes(i)).digest(),n=r({});return i.outputLen=n.outputLen,i.blockLen=n.blockLen,i.create=i=>r(i),i}function $bb5e1fcd97588e49$var$wrapXOFConstructorWithOpts(r){let i=(i,n)=>r(n).update($bb5e1fcd97588e49$var$toBytes(i)).digest(),n=r({});return i.outputLen=n.outputLen,i.blockLen=n.blockLen,i.create=i=>r(i),i}function $bb5e1fcd97588e49$var$randomBytes(r=32){if($3f20760d98ab1126$exports.crypto&&"function"==typeof $3f20760d98ab1126$exports.crypto.getRandomValues)return $3f20760d98ab1126$exports.crypto.getRandomValues(new Uint8Array(r));throw Error("crypto.getRandomValues must be defined")}$bb5e1fcd97588e49$exports.checkOpts=$bb5e1fcd97588e49$var$checkOpts,$bb5e1fcd97588e49$exports.wrapConstructor=$bb5e1fcd97588e49$var$wrapConstructor,$bb5e1fcd97588e49$exports.wrapConstructorWithOpts=$bb5e1fcd97588e49$var$wrapConstructorWithOpts,$bb5e1fcd97588e49$exports.wrapXOFConstructorWithOpts=$bb5e1fcd97588e49$var$wrapXOFConstructorWithOpts,$bb5e1fcd97588e49$exports.randomBytes=$bb5e1fcd97588e49$var$randomBytes;var $1304429e902731e7$exports={};Object.defineProperty($1304429e902731e7$exports,"__esModule",{value:!0}),$1304429e902731e7$exports.blake2s=$1304429e902731e7$exports.compress=$1304429e902731e7$exports.IV=void 0;var $9a4b3b889de6afac$exports={};Object.defineProperty($9a4b3b889de6afac$exports,"__esModule",{value:!0}),$9a4b3b889de6afac$exports.BLAKE2=$9a4b3b889de6afac$exports.SIGMA=void 0;var $a240473818576109$exports={};function $a240473818576109$var$number(r){if(!Number.isSafeInteger(r)||r<0)throw Error(`Wrong positive integer: ${r}`)}function $a240473818576109$var$bool(r){if("boolean"!=typeof r)throw Error(`Expected boolean, not ${r}`)}function $a240473818576109$var$bytes(r,...i){if(!(r instanceof Uint8Array))throw Error("Expected Uint8Array");if(i.length>0&&!i.includes(r.length))throw Error(`Expected Uint8Array of length ${i}, not of length=${r.length}`)}function $a240473818576109$var$hash(r){if("function"!=typeof r||"function"!=typeof r.create)throw Error("Hash should be wrapped by utils.wrapConstructor");$a240473818576109$var$number(r.outputLen),$a240473818576109$var$number(r.blockLen)}function $a240473818576109$var$exists(r,i=!0){if(r.destroyed)throw Error("Hash instance has been destroyed");if(i&&r.finished)throw Error("Hash#digest() has already been called")}function $a240473818576109$var$output(r,i){$a240473818576109$var$bytes(r);let n=i.outputLen;if(r.lengths)throw Error("outputLen bigger than keyLen");if(void 0!==n.key&&(n.key.length<1||n.key.length>s))throw Error(`key must be up 1..${s} byte long or undefined`);if(void 0!==n.salt&&n.salt.length!==a)throw Error(`salt must be ${a} byte long or undefined`);if(void 0!==n.personalization&&n.personalization.length!==o)throw Error(`personalization must be ${o} byte long or undefined`);this.buffer32=(0,$bb5e1fcd97588e49$exports.u32)(this.buffer=new Uint8Array(r))}update(r){$a240473818576109$exports.default.exists(this);let{blockLen:i,buffer:n,buffer32:s}=this;r=(0,$bb5e1fcd97588e49$exports.toBytes)(r);let a=r.length,o=r.byteOffset,d=r.buffer;for(let f=0;fs[i]=r)}digest(){let{buffer:r,outputLen:i}=this;this.digestInto(r);let n=r.slice(0,i);return this.destroy(),n}_cloneInto(r){let{buffer:i,length:n,finished:s,destroyed:a,outputLen:o,pos:d}=this;return r||(r=new this.constructor({dkLen:o})),r.set(...this.get()),r.length=n,r.finished=s,r.destroyed=a,r.outputLen=o,r.buffer.set(i),r.pos=d,r}}$9a4b3b889de6afac$exports.BLAKE2=$9a4b3b889de6afac$var$BLAKE2;var $c886d2710269b158$exports={};Object.defineProperty($c886d2710269b158$exports,"__esModule",{value:!0}),$c886d2710269b158$exports.add=$c886d2710269b158$exports.toBig=$c886d2710269b158$exports.split=$c886d2710269b158$exports.fromBig=void 0;const $c886d2710269b158$var$U32_MASK64=BigInt(4294967296-1),$c886d2710269b158$var$_32n=BigInt(32);function $c886d2710269b158$var$fromBig(r,i=!1){return i?{h:Number(r&$c886d2710269b158$var$U32_MASK64),l:Number(r>>$c886d2710269b158$var$_32n&$c886d2710269b158$var$U32_MASK64)}:{h:0|Number(r>>$c886d2710269b158$var$_32n&$c886d2710269b158$var$U32_MASK64),l:0|Number(r&$c886d2710269b158$var$U32_MASK64)}}function $c886d2710269b158$var$split(r,i=!1){let n=new Uint32Array(r.length),s=new Uint32Array(r.length);for(let a=0;aBigInt(r>>>0)<<$c886d2710269b158$var$_32n|BigInt(i>>>0);$c886d2710269b158$exports.toBig=$c886d2710269b158$var$toBig;const $c886d2710269b158$var$shrSH=(r,i,n)=>r>>>n,$c886d2710269b158$var$shrSL=(r,i,n)=>r<<32-n|i>>>n,$c886d2710269b158$var$rotrSH=(r,i,n)=>r>>>n|i<<32-n,$c886d2710269b158$var$rotrSL=(r,i,n)=>r<<32-n|i>>>n,$c886d2710269b158$var$rotrBH=(r,i,n)=>r<<64-n|i>>>n-32,$c886d2710269b158$var$rotrBL=(r,i,n)=>r>>>n-32|i<<64-n,$c886d2710269b158$var$rotr32H=(r,i)=>i,$c886d2710269b158$var$rotr32L=(r,i)=>r,$c886d2710269b158$var$rotlSH=(r,i,n)=>r<>>32-n,$c886d2710269b158$var$rotlSL=(r,i,n)=>i<>>32-n,$c886d2710269b158$var$rotlBH=(r,i,n)=>i<>>64-n,$c886d2710269b158$var$rotlBL=(r,i,n)=>r<>>64-n;function $c886d2710269b158$var$add(r,i,n,s){let a=(i>>>0)+(s>>>0);return{h:r+n+(a/4294967296|0)|0,l:0|a}}$c886d2710269b158$exports.add=$c886d2710269b158$var$add;const $c886d2710269b158$var$add3L=(r,i,n)=>(r>>>0)+(i>>>0)+(n>>>0),$c886d2710269b158$var$add3H=(r,i,n,s)=>i+n+s+(r/4294967296|0)|0,$c886d2710269b158$var$add4L=(r,i,n,s)=>(r>>>0)+(i>>>0)+(n>>>0)+(s>>>0),$c886d2710269b158$var$add4H=(r,i,n,s,a)=>i+n+s+a+(r/4294967296|0)|0,$c886d2710269b158$var$add5L=(r,i,n,s,a)=>(r>>>0)+(i>>>0)+(n>>>0)+(s>>>0)+(a>>>0),$c886d2710269b158$var$add5H=(r,i,n,s,a,o)=>i+n+s+a+o+(r/4294967296|0)|0,$c886d2710269b158$var$u64={fromBig:$c886d2710269b158$var$fromBig,split:$c886d2710269b158$var$split,toBig:$c886d2710269b158$exports.toBig,shrSH:$c886d2710269b158$var$shrSH,shrSL:$c886d2710269b158$var$shrSL,rotrSH:$c886d2710269b158$var$rotrSH,rotrSL:$c886d2710269b158$var$rotrSL,rotrBH:$c886d2710269b158$var$rotrBH,rotrBL:$c886d2710269b158$var$rotrBL,rotr32H:$c886d2710269b158$var$rotr32H,rotr32L:$c886d2710269b158$var$rotr32L,rotlSH:$c886d2710269b158$var$rotlSH,rotlSL:$c886d2710269b158$var$rotlSL,rotlBH:$c886d2710269b158$var$rotlBH,rotlBL:$c886d2710269b158$var$rotlBL,add:$c886d2710269b158$var$add,add3L:$c886d2710269b158$var$add3L,add3H:$c886d2710269b158$var$add3H,add4L:$c886d2710269b158$var$add4L,add4H:$c886d2710269b158$var$add4H,add5H:$c886d2710269b158$var$add5H,add5L:$c886d2710269b158$var$add5L};function $1304429e902731e7$var$G1(r,i,n,s,a){return r=r+i+a|0,n=n+(s=(0,$bb5e1fcd97588e49$exports.rotr)(s^r,16))|0,{a:r,b:i=(0,$bb5e1fcd97588e49$exports.rotr)(i^n,12),c:n,d:s}}function $1304429e902731e7$var$G2(r,i,n,s,a){return r=r+i+a|0,n=n+(s=(0,$bb5e1fcd97588e49$exports.rotr)(s^r,8))|0,{a:r,b:i=(0,$bb5e1fcd97588e49$exports.rotr)(i^n,7),c:n,d:s}}function $1304429e902731e7$var$compress(r,i,n,s,a,o,d,f,l,u,c,p,h,g,m,v,_,b,T,E){let w=0;for(let S=0;Snew $1304429e902731e7$var$BLAKE2s(r));var $91294e775a6684d7$exports={};Object.defineProperty($91294e775a6684d7$exports,"__esModule",{value:!0}),$91294e775a6684d7$exports.sha224=$91294e775a6684d7$exports.sha256=void 0;var $3dfc5518afabab7c$exports={};function $3dfc5518afabab7c$var$setBigUint64(r,i,n,s){if("function"==typeof r.setBigUint64)return r.setBigUint64(i,n,s);let a=BigInt(32),o=BigInt(4294967295),d=Number(n>>a&o),f=Number(n&o),l=s?4:0,u=s?0:4;r.setUint32(i+l,d,s),r.setUint32(i+u,f,s)}Object.defineProperty($3dfc5518afabab7c$exports,"__esModule",{value:!0}),$3dfc5518afabab7c$exports.SHA2=void 0;class $3dfc5518afabab7c$var$SHA2 extends $bb5e1fcd97588e49$exports.Hash{constructor(r,i,n,s){super(),this.blockLen=r,this.outputLen=i,this.padOffset=n,this.isLE=s,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(r),this.view=(0,$bb5e1fcd97588e49$exports.createView)(this.buffer)}update(r){$a240473818576109$exports.default.exists(this);let{view:i,buffer:n,blockLen:s}=this;r=(0,$bb5e1fcd97588e49$exports.toBytes)(r);let a=r.length;for(let o=0;os-o&&(this.process(n,0),o=0);for(let r=o;ru.length)throw Error("_sha2: outputLen bigger than state");for(let r=0;rr&i^~r&n,$91294e775a6684d7$var$Maj=(r,i,n)=>r&i^r&n^i&n,$91294e775a6684d7$var$SHA256_K=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),$91294e775a6684d7$var$IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),$91294e775a6684d7$var$SHA256_W=new Uint32Array(64);class $91294e775a6684d7$var$SHA256 extends $3dfc5518afabab7c$exports.SHA2{constructor(){super(64,32,8,!1),this.A=0|$91294e775a6684d7$var$IV[0],this.B=0|$91294e775a6684d7$var$IV[1],this.C=0|$91294e775a6684d7$var$IV[2],this.D=0|$91294e775a6684d7$var$IV[3],this.E=0|$91294e775a6684d7$var$IV[4],this.F=0|$91294e775a6684d7$var$IV[5],this.G=0|$91294e775a6684d7$var$IV[6],this.H=0|$91294e775a6684d7$var$IV[7]}get(){let{A:r,B:i,C:n,D:s,E:a,F:o,G:d,H:f}=this;return[r,i,n,s,a,o,d,f]}set(r,i,n,s,a,o,d,f){this.A=0|r,this.B=0|i,this.C=0|n,this.D=0|s,this.E=0|a,this.F=0|o,this.G=0|d,this.H=0|f}process(r,i){for(let n=0;n<16;n++,i+=4)$91294e775a6684d7$var$SHA256_W[n]=r.getUint32(i,!1);for(let r=16;r<64;r++){let i=$91294e775a6684d7$var$SHA256_W[r-15],n=$91294e775a6684d7$var$SHA256_W[r-2],s=(0,$bb5e1fcd97588e49$exports.rotr)(i,7)^(0,$bb5e1fcd97588e49$exports.rotr)(i,18)^i>>>3,a=(0,$bb5e1fcd97588e49$exports.rotr)(n,17)^(0,$bb5e1fcd97588e49$exports.rotr)(n,19)^n>>>10;$91294e775a6684d7$var$SHA256_W[r]=a+$91294e775a6684d7$var$SHA256_W[r-7]+s+$91294e775a6684d7$var$SHA256_W[r-16]|0}let{A:n,B:s,C:a,D:o,E:d,F:f,G:l,H:u}=this;for(let r=0;r<64;r++){let i=(0,$bb5e1fcd97588e49$exports.rotr)(d,6)^(0,$bb5e1fcd97588e49$exports.rotr)(d,11)^(0,$bb5e1fcd97588e49$exports.rotr)(d,25),c=u+i+$91294e775a6684d7$var$Chi(d,f,l)+$91294e775a6684d7$var$SHA256_K[r]+$91294e775a6684d7$var$SHA256_W[r]|0,p=(0,$bb5e1fcd97588e49$exports.rotr)(n,2)^(0,$bb5e1fcd97588e49$exports.rotr)(n,13)^(0,$bb5e1fcd97588e49$exports.rotr)(n,22),h=p+$91294e775a6684d7$var$Maj(n,s,a)|0;u=l,l=f,f=d,d=o+c|0,o=a,a=s,s=n,n=c+h|0}n=n+this.A|0,s=s+this.B|0,a=a+this.C|0,o=o+this.D|0,d=d+this.E|0,f=f+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,s,a,o,d,f,l,u)}roundClean(){$91294e775a6684d7$var$SHA256_W.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}}class $91294e775a6684d7$var$SHA224 extends $91294e775a6684d7$var$SHA256{constructor(){super(),this.A=-1056596264,this.B=914150663,this.C=812702999,this.D=-150054599,this.E=-4191439,this.F=1750603025,this.G=1694076839,this.H=-1090891868,this.outputLen=28}}$91294e775a6684d7$exports.sha256=(0,$bb5e1fcd97588e49$exports.wrapConstructor)(()=>new $91294e775a6684d7$var$SHA256),$91294e775a6684d7$exports.sha224=(0,$bb5e1fcd97588e49$exports.wrapConstructor)(()=>new $91294e775a6684d7$var$SHA224);var $b37c4403146d31a9$exports={},$awmEs=parcelRequire("awmEs"),$b37c4403146d31a9$require$Buffer=$awmEs.Buffer,$9Mq5w=parcelRequire("9Mq5w");!function(r){$b37c4403146d31a9$exports=r()}(function(){return(function r(i,n,s){function a(d,f){if(!n[d]){if(!i[d]){var l=void 0;if(!f&&l)return l(d,!0);if(o)return o(d,!0);var u=Error("Cannot find module '"+d+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[d]={exports:{}};i[d][0].call(c.exports,function(r){return a(i[d][1][r]||r)},c,c.exports,r,i,n,s)}return n[d].exports}for(var o=void 0,d=0;d>2,f=(3&i)<<4|n>>4,l=1>6:64,u=2>4,n=(15&d)<<4|(f=o.indexOf(r.charAt(u++)))>>2,s=(3&f)<<6|(l=o.indexOf(r.charAt(u++))),h[c++]=i,64!==f&&(h[c++]=n),64!==l&&(h[c++]=s);return h}},{"./support":30,"./utils":32}],2:[function(r,i,n){var s=r("./external"),a=r("./stream/DataWorker"),o=r("./stream/Crc32Probe"),d=r("./stream/DataLengthProbe");function f(r,i,n,s,a){this.compressedSize=r,this.uncompressedSize=i,this.crc32=n,this.compression=s,this.compressedContent=a}f.prototype={getContentWorker:function(){var r=new a(s.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new d("data_length")),i=this;return r.on("end",function(){if(this.streamInfo.data_length!==i.uncompressedSize)throw Error("Bug : uncompressed data size mismatch")}),r},getCompressedWorker:function(){return new a(s.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},f.createWorkerFrom=function(r,i,n){return r.pipe(new o).pipe(new d("uncompressedSize")).pipe(i.compressWorker(n)).pipe(new d("compressedSize")).withStreamInfo("compression",i)},i.exports=f},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(r,i,n){var s=r("./stream/GenericWorker");n.STORE={magic:"\x00\x00",compressWorker:function(){return new s("STORE compression")},uncompressWorker:function(){return new s("STORE decompression")}},n.DEFLATE=r("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(r,i,n){var s=r("./utils"),a=function(){for(var r,i=[],n=0;n<256;n++){r=n;for(var s=0;s<8;s++)r=1&r?3988292384^r>>>1:r>>>1;i[n]=r}return i}();i.exports=function(r,i){return void 0!==r&&r.length?"string"!==s.getTypeOf(r)?function(r,i,n,s){var o=a,d=s+n;r^=-1;for(var f=s;f>>8^o[255&(r^i[f])];return -1^r}(0|i,r,r.length,0):function(r,i,n,s){var o=a,d=s+n;r^=-1;for(var f=s;f>>8^o[255&(r^i.charCodeAt(f))];return -1^r}(0|i,r,r.length,0):0}},{"./utils":32}],5:[function(r,i,n){n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(r,i,n){var s=null;s="undefined"!=typeof Promise?Promise:r("lie"),i.exports={Promise:s}},{lie:37}],7:[function(r,i,n){var s="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,a=r("pako"),o=r("./utils"),d=r("./stream/GenericWorker"),f=s?"uint8array":"array";function l(r,i){d.call(this,"FlateWorker/"+r),this._pako=null,this._pakoAction=r,this._pakoOptions=i,this.meta={}}n.magic="\b\x00",o.inherits(l,d),l.prototype.processChunk=function(r){this.meta=r.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(f,r.data),!1)},l.prototype.flush=function(){d.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){d.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new a[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var r=this;this._pako.onData=function(i){r.push({data:i,meta:r.meta})}},n.compressWorker=function(r){return new l("Deflate",r)},n.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(r,i,n){function s(r,i){var n,s="";for(n=0;n>>=8;return s}function a(r,i,n,a,d,c){var p,h,g=r.file,m=r.compression,v=c!==f.utf8encode,_=o.transformTo("string",c(g.name)),b=o.transformTo("string",f.utf8encode(g.name)),T=g.comment,E=o.transformTo("string",c(T)),w=o.transformTo("string",f.utf8encode(T)),S=b.length!==g.name.length,I=w.length!==T.length,O="",C="",A="",k=g.dir,M=g.date,D={crc32:0,compressedSize:0,uncompressedSize:0};i&&!n||(D.crc32=r.crc32,D.compressedSize=r.compressedSize,D.uncompressedSize=r.uncompressedSize);var P=0;i&&(P|=8),!v&&(S||I)&&(P|=2048);var N=0,q=0;k&&(N|=16),"UNIX"===d?(q=798,N|=function(r,i){var n=r;return r||(n=i?16893:33204),(65535&n)<<16}(g.unixPermissions,k)):(q=20,N|=function(r){return 63&(r||0)}(g.dosPermissions)),p=(M.getUTCHours()<<6|M.getUTCMinutes())<<5|M.getUTCSeconds()/2,h=(M.getUTCFullYear()-1980<<4|M.getUTCMonth()+1)<<5|M.getUTCDate(),S&&(C=s(1,1)+s(l(_),4)+b,O+="up"+s(C.length,2)+C),I&&(A=s(1,1)+s(l(E),4)+w,O+="uc"+s(A.length,2)+A);var B="";return B+="\n\x00"+s(P,2)+m.magic+s(p,2)+s(h,2)+s(D.crc32,4)+s(D.compressedSize,4)+s(D.uncompressedSize,4)+s(_.length,2)+s(O.length,2),{fileRecord:u.LOCAL_FILE_HEADER+B+_+O,dirRecord:u.CENTRAL_FILE_HEADER+s(q,2)+B+s(E.length,2)+"\x00\x00\x00\x00"+s(N,4)+s(a,4)+_+O+E}}var o=r("../utils"),d=r("../stream/GenericWorker"),f=r("../utf8"),l=r("../crc32"),u=r("../signature");function c(r,i,n,s){d.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=i,this.zipPlatform=n,this.encodeFileName=s,this.streamFiles=r,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(c,d),c.prototype.push=function(r){var i=r.meta.percent||0,n=this.entriesCount,s=this._sources.length;this.accumulate?this.contentBuffer.push(r):(this.bytesWritten+=r.data.length,d.prototype.push.call(this,{data:r.data,meta:{currentFile:this.currentFile,percent:n?(i+100*(n-s-1))/n:100}}))},c.prototype.openedSource=function(r){this.currentSourceOffset=this.bytesWritten,this.currentFile=r.file.name;var i=this.streamFiles&&!r.file.dir;if(i){var n=a(r,i,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:n.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(r){this.accumulate=!1;var i=this.streamFiles&&!r.file.dir,n=a(r,i,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),i)this.push({data:function(r){return u.DATA_DESCRIPTOR+s(r.crc32,4)+s(r.compressedSize,4)+s(r.uncompressedSize,4)}(r),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var r=this.bytesWritten,i=0;i=this.index;i--)n=(n<<8)+this.byteAt(i);return this.index+=r,n},readString:function(r){return s.transformTo("string",this.readData(r))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var r=this.readInt(4);return new Date(Date.UTC(1980+(r>>25&127),(r>>21&15)-1,r>>16&31,r>>11&31,r>>5&63,(31&r)<<1))}},i.exports=a},{"../utils":32}],19:[function(r,i,n){var s=r("./Uint8ArrayReader");function a(r){s.call(this,r)}r("../utils").inherits(a,s),a.prototype.readData=function(r){this.checkOffset(r);var i=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,i},i.exports=a},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(r,i,n){var s=r("./DataReader");function a(r){s.call(this,r)}r("../utils").inherits(a,s),a.prototype.byteAt=function(r){return this.data.charCodeAt(this.zero+r)},a.prototype.lastIndexOfSignature=function(r){return this.data.lastIndexOf(r)-this.zero},a.prototype.readAndCheckSignature=function(r){return r===this.readData(4)},a.prototype.readData=function(r){this.checkOffset(r);var i=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,i},i.exports=a},{"../utils":32,"./DataReader":18}],21:[function(r,i,n){var s=r("./ArrayReader");function a(r){s.call(this,r)}r("../utils").inherits(a,s),a.prototype.readData=function(r){if(this.checkOffset(r),0===r)return new Uint8Array(0);var i=this.data.subarray(this.zero+this.index,this.zero+this.index+r);return this.index+=r,i},i.exports=a},{"../utils":32,"./ArrayReader":17}],22:[function(r,i,n){var s=r("../utils"),a=r("../support"),o=r("./ArrayReader"),d=r("./StringReader"),f=r("./NodeBufferReader"),l=r("./Uint8ArrayReader");i.exports=function(r){var i=s.getTypeOf(r);return s.checkSupport(i),"string"!==i||a.uint8array?"nodebuffer"===i?new f(r):a.uint8array?new l(s.transformTo("uint8array",r)):new o(s.transformTo("array",r)):new d(r)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(r,i,n){n.LOCAL_FILE_HEADER="PK\x03\x04",n.CENTRAL_FILE_HEADER="PK\x01\x02",n.CENTRAL_DIRECTORY_END="PK\x05\x06",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x06\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK\x06\x06",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(r,i,n){var s=r("./GenericWorker"),a=r("../utils");function o(r){s.call(this,"ConvertWorker to "+r),this.destType=r}a.inherits(o,s),o.prototype.processChunk=function(r){this.push({data:a.transformTo(this.destType,r.data),meta:r.meta})},i.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(r,i,n){var s=r("./GenericWorker"),a=r("../crc32");function o(){s.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}r("../utils").inherits(o,s),o.prototype.processChunk=function(r){this.streamInfo.crc32=a(r.data,this.streamInfo.crc32||0),this.push(r)},i.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(r,i,n){var s=r("../utils"),a=r("./GenericWorker");function o(r){a.call(this,"DataLengthProbe for "+r),this.propName=r,this.withStreamInfo(r,0)}s.inherits(o,a),o.prototype.processChunk=function(r){if(r){var i=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=i+r.data.length}a.prototype.processChunk.call(this,r)},i.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(r,i,n){var s=r("../utils"),a=r("./GenericWorker");function o(r){a.call(this,"DataWorker");var i=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,r.then(function(r){i.dataIsReady=!0,i.data=r,i.max=r&&r.length||0,i.type=s.getTypeOf(r),i.isPaused||i._tickAndRepeat()},function(r){i.error(r)})}s.inherits(o,a),o.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!a.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,s.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(s.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var r=null,i=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":r=this.data.substring(this.index,i);break;case"uint8array":r=this.data.subarray(this.index,i);break;case"array":case"nodebuffer":r=this.data.slice(this.index,i)}return this.index=i,this.push({data:r,meta:{percent:this.max?this.index/this.max*100:0}})},i.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(r,i,n){function s(r){this.name=r||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}s.prototype={push:function(r){this.emit("data",r)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(r){this.emit("error",r)}return!0},error:function(r){return!this.isFinished&&(this.isPaused?this.generatedError=r:(this.isFinished=!0,this.emit("error",r),this.previous&&this.previous.error(r),this.cleanUp()),!0)},on:function(r,i){return this._listeners[r].push(i),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(r,i){if(this._listeners[r])for(var n=0;n "+r:r}},i.exports=s},{}],29:[function(r,i,n){var s=r("../utils"),a=r("./ConvertWorker"),o=r("./GenericWorker"),d=r("../base64"),f=r("../support"),l=r("../external"),u=null;if(f.nodestream)try{u=r("../nodejs/NodejsStreamOutputAdapter")}catch(r){}function c(r,i){return new l.Promise(function(n,a){var o=[],f=r._internalType,l=r._outputType,u=r._mimeType;r.on("data",function(r,n){o.push(r),i&&i(n)}).on("error",function(r){o=[],a(r)}).on("end",function(){try{var r=function(r,i,n){switch(r){case"blob":return s.newBlob(s.transformTo("arraybuffer",i),n);case"base64":return d.encode(i);default:return s.transformTo(r,i)}}(l,function(r,i){var n,s=0,a=null,o=0;for(n=0;n>>6:(n<65536?i[d++]=224|n>>>12:(i[d++]=240|n>>>18,i[d++]=128|n>>>12&63),i[d++]=128|n>>>6&63),i[d++]=128|63&n);return i}(r)},n.utf8decode=function(r){return a.nodebuffer?s.transformTo("nodebuffer",r).toString("utf-8"):function(r){var i,n,a,o,d=r.length,l=Array(2*d);for(i=n=0;i>10&1023,l[n++]=56320|1023&a)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),s.applyFromCharCode(l)}(r=s.transformTo(a.uint8array?"uint8array":"array",r))},s.inherits(u,d),u.prototype.processChunk=function(r){var i=s.transformTo(a.uint8array?"uint8array":"array",r.data);if(this.leftOver&&this.leftOver.length){if(a.uint8array){var o=i;(i=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),i.set(o,this.leftOver.length)}else i=this.leftOver.concat(i);this.leftOver=null}var d=function(r,i){var n;for((i=i||r.length)>r.length&&(i=r.length),n=i-1;0<=n&&128==(192&r[n]);)n--;return n<0?i:0===n?i:n+f[r[n]]>i?n:i}(i),l=i;d!==i.length&&(a.uint8array?(l=i.subarray(0,d),this.leftOver=i.subarray(d,i.length)):(l=i.slice(0,d),this.leftOver=i.slice(d,i.length))),this.push({data:n.utf8decode(l),meta:r.meta})},u.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=u,s.inherits(c,d),c.prototype.processChunk=function(r){this.push({data:n.utf8encode(r.data),meta:r.meta})},n.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(r,i,n){var s=r("./support"),a=r("./base64"),o=r("./nodejsUtils"),d=r("./external");function f(r){return r}function l(r,i){for(var n=0;n>8;this.dir=!!(16&this.externalFileAttributes),0==r&&(this.dosPermissions=63&this.externalFileAttributes),3==r&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var r=s(this.extraFields[1].value);this.uncompressedSize===a.MAX_VALUE_32BITS&&(this.uncompressedSize=r.readInt(8)),this.compressedSize===a.MAX_VALUE_32BITS&&(this.compressedSize=r.readInt(8)),this.localHeaderOffset===a.MAX_VALUE_32BITS&&(this.localHeaderOffset=r.readInt(8)),this.diskNumberStart===a.MAX_VALUE_32BITS&&(this.diskNumberStart=r.readInt(4))}},readExtraFields:function(r){var i,n,s,a=r.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});r.index+4>>6:(n<65536?i[d++]=224|n>>>12:(i[d++]=240|n>>>18,i[d++]=128|n>>>12&63),i[d++]=128|n>>>6&63),i[d++]=128|63&n);return i},n.buf2binstring=function(r){return l(r,r.length)},n.binstring2buf=function(r){for(var i=new s.Buf8(r.length),n=0,a=i.length;n>10&1023,u[s++]=56320|1023&a)}return l(u,s)},n.utf8border=function(r,i){var n;for((i=i||r.length)>r.length&&(i=r.length),n=i-1;0<=n&&128==(192&r[n]);)n--;return n<0?i:0===n?i:n+d[r[n]]>i?n:i}},{"./common":41}],43:[function(r,i,n){i.exports=function(r,i,n,s){for(var a=65535&r|0,o=r>>>16&65535|0,d=0;0!==n;){for(n-=d=2e3>>1:r>>>1;i[n]=r}return i}();i.exports=function(r,i,n,a){var o=s,d=a+n;r^=-1;for(var f=a;f>>8^o[255&(r^i[f])];return -1^r}},{}],46:[function(r,i,n){var s,a=r("../utils/common"),o=r("./trees"),d=r("./adler32"),f=r("./crc32"),l=r("./messages"),u=0,c=4,p=0,h=-2,g=-1,m=4,v=2,_=8,b=9,T=286,E=30,w=19,S=573,I=15,O=3,C=258,A=262,k=42,M=113,D=1,P=2,N=3,q=4;function B(r,i){return r.msg=l[i],i}function L(r){return(r<<1)-(4r.avail_out&&(n=r.avail_out),0!==n&&(a.arraySet(r.output,i.pending_buf,i.pending_out,n,r.next_out),r.next_out+=n,i.pending_out+=n,r.total_out+=n,r.avail_out-=n,i.pending-=n,0===i.pending&&(i.pending_out=0))}function H(r,i){o._tr_flush_block(r,0<=r.block_start?r.block_start:-1,r.strstart-r.block_start,i),r.block_start=r.strstart,U(r.strm)}function z(r,i){r.pending_buf[r.pending++]=i}function G(r,i){r.pending_buf[r.pending++]=i>>>8&255,r.pending_buf[r.pending++]=255&i}function K(r,i){var n,s,a=r.max_chain_length,o=r.strstart,d=r.prev_length,f=r.nice_match,l=r.strstart>r.w_size-A?r.strstart-(r.w_size-A):0,u=r.window,c=r.w_mask,p=r.prev,h=r.strstart+C,g=u[o+d-1],m=u[o+d];r.prev_length>=r.good_match&&(a>>=2),f>r.lookahead&&(f=r.lookahead);do if(u[(n=i)+d]===m&&u[n+d-1]===g&&u[n]===u[o]&&u[++n]===u[o+1]){o+=2,n++;do;while(u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&u[++o]===u[++n]&&ol&&0!=--a)return d<=r.lookahead?d:r.lookahead}function V(r){var i,n,s,o,l,u,c,p,h,g,m=r.w_size;do{if(o=r.window_size-r.lookahead-r.strstart,r.strstart>=m+(m-A)){for(a.arraySet(r.window,r.window,m,m,0),r.match_start-=m,r.strstart-=m,r.block_start-=m,i=n=r.hash_size;s=r.head[--i],r.head[i]=m<=s?s-m:0,--n;);for(i=n=m;s=r.prev[--i],r.prev[i]=m<=s?s-m:0,--n;);o+=m}if(0===r.strm.avail_in)break;if(u=r.strm,c=r.window,p=r.strstart+r.lookahead,h=o,g=void 0,g=u.avail_in,h=O)for(l=r.strstart-r.insert,r.ins_h=r.window[l],r.ins_h=(r.ins_h<=O&&(r.ins_h=(r.ins_h<=O){if(s=o._tr_tally(r,r.strstart-r.match_start,r.match_length-O),r.lookahead-=r.match_length,r.match_length<=r.max_lazy_match&&r.lookahead>=O){for(r.match_length--;r.strstart++,r.ins_h=(r.ins_h<=O&&(r.ins_h=(r.ins_h<=O&&r.match_length<=r.prev_length){for(a=r.strstart+r.lookahead-O,s=o._tr_tally(r,r.strstart-1-r.prev_match,r.prev_length-O),r.lookahead-=r.prev_length-1,r.prev_length-=2;++r.strstart<=a&&(r.ins_h=(r.ins_h<r.pending_buf_size-5&&(n=r.pending_buf_size-5);;){if(r.lookahead<=1){if(V(r),0===r.lookahead&&i===u)return D;if(0===r.lookahead)break}r.strstart+=r.lookahead,r.lookahead=0;var s=r.block_start+n;if((0===r.strstart||r.strstart>=s)&&(r.lookahead=r.strstart-s,r.strstart=s,H(r,!1),0===r.strm.avail_out)||r.strstart-r.block_start>=r.w_size-A&&(H(r,!1),0===r.strm.avail_out))return D}return r.insert=0,i===c?(H(r,!0),0===r.strm.avail_out?N:q):(r.strstart>r.block_start&&(H(r,!1),r.strm.avail_out),D)}),new Y(4,4,8,4,W),new Y(4,5,16,8,W),new Y(4,6,32,32,W),new Y(4,4,16,16,$),new Y(8,16,32,32,$),new Y(8,16,128,128,$),new Y(8,32,128,256,$),new Y(32,128,258,1024,$),new Y(32,258,258,4096,$)],n.deflateInit=function(r,i){return Q(r,i,_,15,8,0)},n.deflateInit2=Q,n.deflateReset=J,n.deflateResetKeep=X,n.deflateSetHeader=function(r,i){return r&&r.state?2!==r.state.wrap?h:(r.state.gzhead=i,p):h},n.deflate=function(r,i){var n,a,d,l;if(!r||!r.state||5>8&255),z(a,a.gzhead.time>>16&255),z(a,a.gzhead.time>>24&255),z(a,9===a.level?2:2<=a.strategy||a.level<2?4:0),z(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(z(a,255&a.gzhead.extra.length),z(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(r.adler=f(r.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69):(z(a,0),z(a,0),z(a,0),z(a,0),z(a,0),z(a,9===a.level?2:2<=a.strategy||a.level<2?4:0),z(a,3),a.status=M);else{var g=_+(a.w_bits-8<<4)<<8;g|=(2<=a.strategy||a.level<2?0:a.level<6?1:6===a.level?2:3)<<6,0!==a.strstart&&(g|=32),g+=31-g%31,a.status=M,G(a,g),0!==a.strstart&&(G(a,r.adler>>>16),G(a,65535&r.adler)),r.adler=1}}if(69===a.status){if(a.gzhead.extra){for(d=a.pending;a.gzindex<(65535&a.gzhead.extra.length)&&(a.pending!==a.pending_buf_size||(a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),U(r),d=a.pending,a.pending!==a.pending_buf_size));)z(a,255&a.gzhead.extra[a.gzindex]),a.gzindex++;a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),a.gzindex===a.gzhead.extra.length&&(a.gzindex=0,a.status=73)}else a.status=73}if(73===a.status){if(a.gzhead.name){d=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),U(r),d=a.pending,a.pending===a.pending_buf_size)){l=1;break}l=a.gzindexd&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),0===l&&(a.gzindex=0,a.status=91)}else a.status=91}if(91===a.status){if(a.gzhead.comment){d=a.pending;do{if(a.pending===a.pending_buf_size&&(a.gzhead.hcrc&&a.pending>d&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),U(r),d=a.pending,a.pending===a.pending_buf_size)){l=1;break}l=a.gzindexd&&(r.adler=f(r.adler,a.pending_buf,a.pending-d,d)),0===l&&(a.status=103)}else a.status=103}if(103===a.status&&(a.gzhead.hcrc?(a.pending+2>a.pending_buf_size&&U(r),a.pending+2<=a.pending_buf_size&&(z(a,255&r.adler),z(a,r.adler>>8&255),r.adler=0,a.status=M)):a.status=M),0!==a.pending){if(U(r),0===r.avail_out)return a.last_flush=-1,p}else if(0===r.avail_in&&L(i)<=L(n)&&i!==c)return B(r,-5);if(666===a.status&&0!==r.avail_in)return B(r,-5);if(0!==r.avail_in||0!==a.lookahead||i!==u&&666!==a.status){var m=2===a.strategy?function(r,i){for(var n;;){if(0===r.lookahead&&(V(r),0===r.lookahead)){if(i===u)return D;break}if(r.match_length=0,n=o._tr_tally(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++,n&&(H(r,!1),0===r.strm.avail_out))return D}return r.insert=0,i===c?(H(r,!0),0===r.strm.avail_out?N:q):r.last_lit&&(H(r,!1),0===r.strm.avail_out)?D:P}(a,i):3===a.strategy?function(r,i){for(var n,s,a,d,f=r.window;;){if(r.lookahead<=C){if(V(r),r.lookahead<=C&&i===u)return D;if(0===r.lookahead)break}if(r.match_length=0,r.lookahead>=O&&0r.lookahead&&(r.match_length=r.lookahead)}if(r.match_length>=O?(n=o._tr_tally(r,1,r.match_length-O),r.lookahead-=r.match_length,r.strstart+=r.match_length,r.match_length=0):(n=o._tr_tally(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++),n&&(H(r,!1),0===r.strm.avail_out))return D}return r.insert=0,i===c?(H(r,!0),0===r.strm.avail_out?N:q):r.last_lit&&(H(r,!1),0===r.strm.avail_out)?D:P}(a,i):s[a.level].func(a,i);if(m!==N&&m!==q||(a.status=666),m===D||m===N)return 0===r.avail_out&&(a.last_flush=-1),p;if(m===P&&(1===i?o._tr_align(a):5!==i&&(o._tr_stored_block(a,0,0,!1),3===i&&(F(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),U(r),0===r.avail_out))return a.last_flush=-1,p}return i!==c?p:a.wrap<=0?1:(2===a.wrap?(z(a,255&r.adler),z(a,r.adler>>8&255),z(a,r.adler>>16&255),z(a,r.adler>>24&255),z(a,255&r.total_in),z(a,r.total_in>>8&255),z(a,r.total_in>>16&255),z(a,r.total_in>>24&255)):(G(a,r.adler>>>16),G(a,65535&r.adler)),U(r),0=n.w_size&&(0===f&&(F(n.head),n.strstart=0,n.block_start=0,n.insert=0),g=new a.Buf8(n.w_size),a.arraySet(g,i,m-n.w_size,n.w_size,0),i=g,m=n.w_size),l=r.avail_in,u=r.next_in,c=r.input,r.avail_in=m,r.next_in=0,r.input=i,V(n);n.lookahead>=O;){for(s=n.strstart,o=n.lookahead-(O-1);n.ins_h=(n.ins_h<>>=w=E>>>24,m-=w,0==(w=E>>>16&255))k[o++]=65535&E;else{if(!(16&w)){if(0==(64&w)){E=v[(65535&E)+(g&(1<>>=w,m-=w),m<15&&(g+=A[s++]<>>=w=E>>>24,m-=w,!(16&(w=E>>>16&255))){if(0==(64&w)){E=_[(65535&E)+(g&(1<>>=w,m-=w,(w=o-d)>3,g&=(1<<(m-=S<<3))-1,r.next_in=s,r.next_out=o,r.avail_in=s>>24&255)+(r>>>8&65280)+((65280&r)<<8)+((255&r)<<24)}function _(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function b(r){var i;return r&&r.state?(i=r.state,r.total_in=r.total_out=i.total=0,r.msg="",i.wrap&&(r.adler=1&i.wrap),i.mode=h,i.last=0,i.havedict=0,i.dmax=32768,i.head=null,i.hold=0,i.bits=0,i.lencode=i.lendyn=new s.Buf32(g),i.distcode=i.distdyn=new s.Buf32(m),i.sane=1,i.back=-1,c):p}function T(r){var i;return r&&r.state?((i=r.state).wsize=0,i.whave=0,i.wnext=0,b(r)):p}function E(r,i){var n,s;return r&&r.state?(s=r.state,i<0?(n=0,i=-i):(n=1+(i>>4),i<48&&(i&=15)),i&&(i<8||15=d.wsize?(s.arraySet(d.window,i,n-d.wsize,d.wsize,0),d.wnext=0,d.whave=d.wsize):(a<(o=d.wsize-d.wnext)&&(o=a),s.arraySet(d.window,i,n-a,o,d.wnext),(a-=o)?(s.arraySet(d.window,i,n-a,a,0),d.wnext=a,d.whave=d.wsize):(d.wnext+=o,d.wnext===d.wsize&&(d.wnext=0),d.whave>>8&255,n.check=o(n.check,V,2,0),S=w=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&w)<<8)+(w>>8))%31){r.msg="incorrect header check",n.mode=30;break}if(8!=(15&w)){r.msg="unknown compression method",n.mode=30;break}if(S-=4,U=8+(15&(w>>>=4)),0===n.wbits)n.wbits=U;else if(U>n.wbits){r.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(V[0]=255&w,V[1]=w>>>8&255,n.check=o(n.check,V,2,0)),S=w=0,n.mode=3;case 3:for(;S<32;){if(0===T)break i;T--,w+=g[_++]<>>8&255,V[2]=w>>>16&255,V[3]=w>>>24&255,n.check=o(n.check,V,4,0)),S=w=0,n.mode=4;case 4:for(;S<16;){if(0===T)break i;T--,w+=g[_++]<>8),512&n.flags&&(V[0]=255&w,V[1]=w>>>8&255,n.check=o(n.check,V,2,0)),S=w=0,n.mode=5;case 5:if(1024&n.flags){for(;S<16;){if(0===T)break i;T--,w+=g[_++]<>>8&255,n.check=o(n.check,V,2,0)),S=w=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(T<(k=n.length)&&(k=T),k&&(n.head&&(U=n.head.extra_len-n.length,n.head.extra||(n.head.extra=Array(n.head.extra_len)),s.arraySet(n.head.extra,g,_,k,U)),512&n.flags&&(n.check=o(n.check,g,k,_)),T-=k,_+=k,n.length-=k),n.length))break i;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===T)break i;for(k=0;U=g[_+k++],n.head&&U&&n.length<65536&&(n.head.name+=String.fromCharCode(U)),U&&k>9&1,n.head.done=!0),r.adler=n.check=0,n.mode=12;break;case 10:for(;S<32;){if(0===T)break i;T--,w+=g[_++]<>>=7&S,S-=7&S,n.mode=27;break}for(;S<3;){if(0===T)break i;T--,w+=g[_++]<>>=1)){case 0:n.mode=14;break;case 1:if(C(n),n.mode=20,6!==i)break;w>>>=2,S-=2;break i;case 2:n.mode=17;break;case 3:r.msg="invalid block type",n.mode=30}w>>>=2,S-=2;break;case 14:for(w>>>=7&S,S-=7&S;S<32;){if(0===T)break i;T--,w+=g[_++]<>>16^65535)){r.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&w,S=w=0,n.mode=15,6===i)break i;case 15:n.mode=16;case 16:if(k=n.length){if(T>>=5,S-=5,n.ndist=1+(31&w),w>>>=5,S-=5,n.ncode=4+(15&w),w>>>=4,S-=4,286>>=3,S-=3}for(;n.have<19;)n.lens[W[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,z={bits:n.lenbits},H=f(0,n.lens,0,19,n.lencode,0,n.work,z),n.lenbits=z.bits,H){r.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,q=65535&K,!((P=K>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>>=P,S-=P,n.lens[n.have++]=q;else{if(16===q){for(G=P+2;S>>=P,S-=P,0===n.have){r.msg="invalid bit length repeat",n.mode=30;break}U=n.lens[n.have-1],k=3+(3&w),w>>>=2,S-=2}else if(17===q){for(G=P+3;S>>=P)),w>>>=3,S-=3}else{for(G=P+7;S>>=P)),w>>>=7,S-=7}if(n.have+k>n.nlen+n.ndist){r.msg="invalid bit length repeat",n.mode=30;break}for(;k--;)n.lens[n.have++]=U}}if(30===n.mode)break;if(0===n.lens[256]){r.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,z={bits:n.lenbits},H=f(l,n.lens,0,n.nlen,n.lencode,0,n.work,z),n.lenbits=z.bits,H){r.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,z={bits:n.distbits},H=f(u,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,z),n.distbits=z.bits,H){r.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===i)break i;case 20:n.mode=21;case 21:if(6<=T&&258<=E){r.next_out=b,r.avail_out=E,r.next_in=_,r.avail_in=T,n.hold=w,n.bits=S,d(r,O),b=r.next_out,m=r.output,E=r.avail_out,_=r.next_in,g=r.input,T=r.avail_in,w=n.hold,S=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;N=(K=n.lencode[w&(1<>>16&255,q=65535&K,!((P=K>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>B)])>>>16&255,q=65535&K,!(B+(P=K>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>>=B,S-=B,n.back+=B}if(w>>>=P,S-=P,n.back+=P,n.length=q,0===N){n.mode=26;break}if(32&N){n.back=-1,n.mode=12;break}if(64&N){r.msg="invalid literal/length code",n.mode=30;break}n.extra=15&N,n.mode=22;case 22:if(n.extra){for(G=n.extra;S>>=n.extra,S-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;N=(K=n.distcode[w&(1<>>16&255,q=65535&K,!((P=K>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>B)])>>>16&255,q=65535&K,!(B+(P=K>>>24)<=S);){if(0===T)break i;T--,w+=g[_++]<>>=B,S-=B,n.back+=B}if(w>>>=P,S-=P,n.back+=P,64&N){r.msg="invalid distance code",n.mode=30;break}n.offset=q,n.extra=15&N,n.mode=24;case 24:if(n.extra){for(G=n.extra;S>>=n.extra,S-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){r.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===E)break i;if(k=O-E,n.offset>k){if((k=n.offset-k)>n.whave&&n.sane){r.msg="invalid distance too far back",n.mode=30;break}M=k>n.wnext?(k-=n.wnext,n.wsize-k):n.wnext-k,k>n.length&&(k=n.length),D=n.window}else D=m,M=b-n.offset,k=n.length;for(ET?(w=z[G+p[C]],L[F+p[C]]):(w=96,0),g=1<>P)+(m-=g)]=E<<24|w<<16|S|0,0!==m;);for(g=1<>=1;if(0!==g?(B&=g-1,B+=g):B=0,C++,0==--U[O]){if(O===k)break;O=i[n+p[C]]}if(M>>7)]}function z(r,i){r.pending_buf[r.pending++]=255&i,r.pending_buf[r.pending++]=i>>>8&255}function G(r,i,n){r.bi_valid>v-n?(r.bi_buf|=i<>v-r.bi_valid,r.bi_valid+=n-v):(r.bi_buf|=i<>>=1,n<<=1,0<--i;);return n>>>1}function W(r,i,n){var s,a,o=Array(m+1),d=0;for(s=1;s<=m;s++)o[s]=d=d+n[s-1]<<1;for(a=0;a<=i;a++){var f=r[2*a+1];0!==f&&(r[2*a]=V(o[f]++,f))}}function $(r){var i;for(i=0;i>1;1<=n;n--)X(r,o,n);for(a=l;n=r.heap[1],r.heap[1]=r.heap[r.heap_len--],X(r,o,1),s=r.heap[1],r.heap[--r.heap_max]=n,r.heap[--r.heap_max]=s,o[2*a]=o[2*n]+o[2*s],r.depth[a]=(r.depth[n]>=r.depth[s]?r.depth[n]:r.depth[s])+1,o[2*n+1]=o[2*s+1]=a,r.heap[1]=a++,X(r,o,1),2<=r.heap_len;);r.heap[--r.heap_max]=r.heap[1],function(r,i){var n,s,a,o,d,f,l=i.dyn_tree,u=i.max_code,c=i.stat_desc.static_tree,p=i.stat_desc.has_stree,h=i.stat_desc.extra_bits,v=i.stat_desc.extra_base,_=i.stat_desc.max_length,b=0;for(o=0;o<=m;o++)r.bl_count[o]=0;for(l[2*r.heap[r.heap_max]+1]=0,n=r.heap_max+1;n>=7;s>>=1)if(1&n&&0!==r.dyn_ltree[2*i])return a;if(0!==r.dyn_ltree[18]||0!==r.dyn_ltree[20]||0!==r.dyn_ltree[26])return o;for(i=32;i>>3,(f=r.static_len+3+7>>>3)<=d&&(d=f)):d=f=n+5,n+4<=d&&-1!==i?en(r,i,n,s):4===r.strategy||f===d?(G(r,2+(s?1:0),3),J(r,A,k)):(G(r,4+(s?1:0),3),function(r,i,n,s){var a;for(G(r,i-257,5),G(r,n-1,5),G(r,s-4,4),a=0;a>>8&255,r.pending_buf[r.d_buf+2*r.last_lit+1]=255&i,r.pending_buf[r.l_buf+r.last_lit]=255&n,r.last_lit++,0===i?r.dyn_ltree[2*n]++:(r.matches++,i--,r.dyn_ltree[2*(D[n]+u+1)]++,r.dyn_dtree[2*H(i)]++),r.last_lit===r.lit_bufsize-1},n._tr_align=function(r){G(r,2,3),K(r,b,A),function(r){16===r.bi_valid?(z(r,r.bi_buf),r.bi_buf=0,r.bi_valid=0):8<=r.bi_valid&&(r.pending_buf[r.pending++]=255&r.bi_buf,r.bi_buf>>=8,r.bi_valid-=8)}(r)}},{"../utils/common":41}],53:[function(r,i,n){i.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(r,i,n){(function(r){!function(r,i){if(!r.setImmediate){var n,s,a,o,d=1,f={},l=!1,u=r.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(r);c=c&&c.setTimeout?c:r,n="[object process]"===({}).toString.call(r.process)?function(r){$9Mq5w.nextTick(function(){h(r)})}:!function(){if(r.postMessage&&!r.importScripts){var i=!0,n=r.onmessage;return r.onmessage=function(){i=!1},r.postMessage("","*"),r.onmessage=n,i}}()?r.MessageChannel?((a=new MessageChannel).port1.onmessage=function(r){h(r.data)},function(r){a.port2.postMessage(r)}):u&&"onreadystatechange"in u.createElement("script")?(s=u.documentElement,function(r){var i=u.createElement("script");i.onreadystatechange=function(){h(r),i.onreadystatechange=null,s.removeChild(i),i=null},s.appendChild(i)}):function(r){setTimeout(h,0,r)}:(o="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",g,!1):r.attachEvent("onmessage",g),function(i){r.postMessage(o+i,"*")}),c.setImmediate=function(r){"function"!=typeof r&&(r=Function(""+r));for(var i=Array(arguments.length-1),s=0;s>$2be1c3a1d39d0a84$var$_7n)*$2be1c3a1d39d0a84$var$_0x71n)%$2be1c3a1d39d0a84$var$_256n)&$2be1c3a1d39d0a84$var$_2n&&(t^=$2be1c3a1d39d0a84$var$_1n<<($2be1c3a1d39d0a84$var$_1n<n>32?$c886d2710269b158$exports.default.rotlBH(r,i,n):$c886d2710269b158$exports.default.rotlSH(r,i,n),$2be1c3a1d39d0a84$var$rotlL=(r,i,n)=>n>32?$c886d2710269b158$exports.default.rotlBL(r,i,n):$c886d2710269b158$exports.default.rotlSL(r,i,n);function $2be1c3a1d39d0a84$var$keccakP(r,i=24){let n=new Uint32Array(10);for(let s=24-i;s<24;s++){for(let i=0;i<10;i++)n[i]=r[i]^r[i+10]^r[i+20]^r[i+30]^r[i+40];for(let i=0;i<10;i+=2){let s=(i+8)%10,a=(i+2)%10,o=n[a],d=n[a+1],f=$2be1c3a1d39d0a84$var$rotlH(o,d,1)^n[s],l=$2be1c3a1d39d0a84$var$rotlL(o,d,1)^n[s+1];for(let n=0;n<50;n+=10)r[i+n]^=f,r[i+n+1]^=l}let i=r[2],a=r[3];for(let n=0;n<24;n++){let s=$2be1c3a1d39d0a84$var$SHA3_ROTL[n],o=$2be1c3a1d39d0a84$var$rotlH(i,a,s),d=$2be1c3a1d39d0a84$var$rotlL(i,a,s),f=$2be1c3a1d39d0a84$var$SHA3_PI[n];i=r[f],a=r[f+1],r[f]=o,r[f+1]=d}for(let i=0;i<50;i+=10){for(let s=0;s<10;s++)n[s]=r[i+s];for(let s=0;s<10;s++)r[i+s]^=~n[(s+2)%10]&n[(s+4)%10]}r[0]^=$2be1c3a1d39d0a84$var$SHA3_IOTA_H[s],r[1]^=$2be1c3a1d39d0a84$var$SHA3_IOTA_L[s]}n.fill(0)}$2be1c3a1d39d0a84$exports.keccakP=$2be1c3a1d39d0a84$var$keccakP;class $2be1c3a1d39d0a84$var$Keccak extends $bb5e1fcd97588e49$exports.Hash{constructor(r,i,n,s=!1,a=24){if(super(),this.blockLen=r,this.suffix=i,this.outputLen=n,this.enableXOF=s,this.rounds=a,this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,$a240473818576109$exports.default.number(n),0>=this.blockLen||this.blockLen>=200)throw Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200),this.state32=(0,$bb5e1fcd97588e49$exports.u32)(this.state)}keccak(){$2be1c3a1d39d0a84$var$keccakP(this.state32,this.rounds),this.posOut=0,this.pos=0}update(r){$a240473818576109$exports.default.exists(this);let{blockLen:i,state:n}=this;r=(0,$bb5e1fcd97588e49$exports.toBytes)(r);let s=r.length;for(let a=0;a=n&&this.keccak();let o=Math.min(n-this.posOut,a-s);r.set(i.subarray(this.posOut,this.posOut+o),s),this.posOut+=o,s+=o}return r}xofInto(r){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(r)}xof(r){return $a240473818576109$exports.default.number(r),this.xofInto(new Uint8Array(r))}digestInto(r){if($a240473818576109$exports.default.output(r,this),this.finished)throw Error("digest() was already called");return this.writeInto(r),this.destroy(),r}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,this.state.fill(0)}_cloneInto(r){let{blockLen:i,suffix:n,outputLen:s,rounds:a,enableXOF:o}=this;return r||(r=new $2be1c3a1d39d0a84$var$Keccak(i,n,s,o,a)),r.state32.set(this.state32),r.pos=this.pos,r.posOut=this.posOut,r.finished=this.finished,r.rounds=a,r.suffix=n,r.outputLen=s,r.enableXOF=o,r.destroyed=this.destroyed,r}}$2be1c3a1d39d0a84$exports.Keccak=$2be1c3a1d39d0a84$var$Keccak;const $2be1c3a1d39d0a84$var$gen=(r,i,n)=>(0,$bb5e1fcd97588e49$exports.wrapConstructor)(()=>new $2be1c3a1d39d0a84$var$Keccak(i,r,n));$2be1c3a1d39d0a84$exports.sha3_224=$2be1c3a1d39d0a84$var$gen(6,144,28),$2be1c3a1d39d0a84$exports.sha3_256=$2be1c3a1d39d0a84$var$gen(6,136,32),$2be1c3a1d39d0a84$exports.sha3_384=$2be1c3a1d39d0a84$var$gen(6,104,48),$2be1c3a1d39d0a84$exports.sha3_512=$2be1c3a1d39d0a84$var$gen(6,72,64),$2be1c3a1d39d0a84$exports.keccak_224=$2be1c3a1d39d0a84$var$gen(1,144,28),$2be1c3a1d39d0a84$exports.keccak_256=$2be1c3a1d39d0a84$var$gen(1,136,32),$2be1c3a1d39d0a84$exports.keccak_384=$2be1c3a1d39d0a84$var$gen(1,104,48),$2be1c3a1d39d0a84$exports.keccak_512=$2be1c3a1d39d0a84$var$gen(1,72,64);const $2be1c3a1d39d0a84$var$genShake=(r,i,n)=>(0,$bb5e1fcd97588e49$exports.wrapXOFConstructorWithOpts)((s={})=>new $2be1c3a1d39d0a84$var$Keccak(i,r,void 0===s.dkLen?n:s.dkLen,!0));$2be1c3a1d39d0a84$exports.shake128=$2be1c3a1d39d0a84$var$genShake(31,168,16),$2be1c3a1d39d0a84$exports.shake256=$2be1c3a1d39d0a84$var$genShake(31,136,32);var $692be64e687bb0ca$exports={};Object.defineProperty($692be64e687bb0ca$exports,"__esModule",{value:!0}),$692be64e687bb0ca$exports.blake2b=void 0;const $692be64e687bb0ca$var$IV=new Uint32Array([4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225]),$692be64e687bb0ca$var$BUF=new Uint32Array(32);function $692be64e687bb0ca$var$G1(r,i,n,s,a,o){let d=a[o],f=a[o+1],l=$692be64e687bb0ca$var$BUF[2*r],u=$692be64e687bb0ca$var$BUF[2*r+1],c=$692be64e687bb0ca$var$BUF[2*i],p=$692be64e687bb0ca$var$BUF[2*i+1],h=$692be64e687bb0ca$var$BUF[2*n],g=$692be64e687bb0ca$var$BUF[2*n+1],m=$692be64e687bb0ca$var$BUF[2*s],v=$692be64e687bb0ca$var$BUF[2*s+1],_=$c886d2710269b158$exports.default.add3L(l,c,d);u=$c886d2710269b158$exports.default.add3H(_,u,p,f),l=0|_,({Dh:v,Dl:m}={Dh:v^u,Dl:m^l}),({Dh:v,Dl:m}={Dh:$c886d2710269b158$exports.default.rotr32H(v,m),Dl:$c886d2710269b158$exports.default.rotr32L(v,m)}),({h:g,l:h}=$c886d2710269b158$exports.default.add(g,h,v,m)),({Bh:p,Bl:c}={Bh:p^g,Bl:c^h}),({Bh:p,Bl:c}={Bh:$c886d2710269b158$exports.default.rotrSH(p,c,24),Bl:$c886d2710269b158$exports.default.rotrSL(p,c,24)}),$692be64e687bb0ca$var$BUF[2*r]=l,$692be64e687bb0ca$var$BUF[2*r+1]=u,$692be64e687bb0ca$var$BUF[2*i]=c,$692be64e687bb0ca$var$BUF[2*i+1]=p,$692be64e687bb0ca$var$BUF[2*n]=h,$692be64e687bb0ca$var$BUF[2*n+1]=g,$692be64e687bb0ca$var$BUF[2*s]=m,$692be64e687bb0ca$var$BUF[2*s+1]=v}function $692be64e687bb0ca$var$G2(r,i,n,s,a,o){let d=a[o],f=a[o+1],l=$692be64e687bb0ca$var$BUF[2*r],u=$692be64e687bb0ca$var$BUF[2*r+1],c=$692be64e687bb0ca$var$BUF[2*i],p=$692be64e687bb0ca$var$BUF[2*i+1],h=$692be64e687bb0ca$var$BUF[2*n],g=$692be64e687bb0ca$var$BUF[2*n+1],m=$692be64e687bb0ca$var$BUF[2*s],v=$692be64e687bb0ca$var$BUF[2*s+1],_=$c886d2710269b158$exports.default.add3L(l,c,d);u=$c886d2710269b158$exports.default.add3H(_,u,p,f),l=0|_,({Dh:v,Dl:m}={Dh:v^u,Dl:m^l}),({Dh:v,Dl:m}={Dh:$c886d2710269b158$exports.default.rotrSH(v,m,16),Dl:$c886d2710269b158$exports.default.rotrSL(v,m,16)}),({h:g,l:h}=$c886d2710269b158$exports.default.add(g,h,v,m)),({Bh:p,Bl:c}={Bh:p^g,Bl:c^h}),({Bh:p,Bl:c}={Bh:$c886d2710269b158$exports.default.rotrBH(p,c,63),Bl:$c886d2710269b158$exports.default.rotrBL(p,c,63)}),$692be64e687bb0ca$var$BUF[2*r]=l,$692be64e687bb0ca$var$BUF[2*r+1]=u,$692be64e687bb0ca$var$BUF[2*i]=c,$692be64e687bb0ca$var$BUF[2*i+1]=p,$692be64e687bb0ca$var$BUF[2*n]=h,$692be64e687bb0ca$var$BUF[2*n+1]=g,$692be64e687bb0ca$var$BUF[2*s]=m,$692be64e687bb0ca$var$BUF[2*s+1]=v}class $692be64e687bb0ca$var$BLAKE2b extends $9a4b3b889de6afac$exports.BLAKE2{constructor(r={}){super(128,void 0===r.dkLen?64:r.dkLen,r,64,16,16),this.v0l=0|$692be64e687bb0ca$var$IV[0],this.v0h=0|$692be64e687bb0ca$var$IV[1],this.v1l=0|$692be64e687bb0ca$var$IV[2],this.v1h=0|$692be64e687bb0ca$var$IV[3],this.v2l=0|$692be64e687bb0ca$var$IV[4],this.v2h=0|$692be64e687bb0ca$var$IV[5],this.v3l=0|$692be64e687bb0ca$var$IV[6],this.v3h=0|$692be64e687bb0ca$var$IV[7],this.v4l=0|$692be64e687bb0ca$var$IV[8],this.v4h=0|$692be64e687bb0ca$var$IV[9],this.v5l=0|$692be64e687bb0ca$var$IV[10],this.v5h=0|$692be64e687bb0ca$var$IV[11],this.v6l=0|$692be64e687bb0ca$var$IV[12],this.v6h=0|$692be64e687bb0ca$var$IV[13],this.v7l=0|$692be64e687bb0ca$var$IV[14],this.v7h=0|$692be64e687bb0ca$var$IV[15];let i=r.key?r.key.length:0;if(this.v0l^=this.outputLen|i<<8|16842752,r.salt){let i=(0,$bb5e1fcd97588e49$exports.u32)((0,$bb5e1fcd97588e49$exports.toBytes)(r.salt));this.v4l^=i[0],this.v4h^=i[1],this.v5l^=i[2],this.v5h^=i[3]}if(r.personalization){let i=(0,$bb5e1fcd97588e49$exports.u32)((0,$bb5e1fcd97588e49$exports.toBytes)(r.personalization));this.v6l^=i[0],this.v6h^=i[1],this.v7l^=i[2],this.v7h^=i[3]}if(r.key){let i=new Uint8Array(this.blockLen);i.set((0,$bb5e1fcd97588e49$exports.toBytes)(r.key)),this.update(i)}}get(){let{v0l:r,v0h:i,v1l:n,v1h:s,v2l:a,v2h:o,v3l:d,v3h:f,v4l:l,v4h:u,v5l:c,v5h:p,v6l:h,v6h:g,v7l:m,v7h:v}=this;return[r,i,n,s,a,o,d,f,l,u,c,p,h,g,m,v]}set(r,i,n,s,a,o,d,f,l,u,c,p,h,g,m,v){this.v0l=0|r,this.v0h=0|i,this.v1l=0|n,this.v1h=0|s,this.v2l=0|a,this.v2h=0|o,this.v3l=0|d,this.v3h=0|f,this.v4l=0|l,this.v4h=0|u,this.v5l=0|c,this.v5h=0|p,this.v6l=0|h,this.v6h=0|g,this.v7l=0|m,this.v7h=0|v}compress(r,i,n){this.get().forEach((r,i)=>$692be64e687bb0ca$var$BUF[i]=r),$692be64e687bb0ca$var$BUF.set($692be64e687bb0ca$var$IV,16);let{h:s,l:a}=$c886d2710269b158$exports.default.fromBig(BigInt(this.length));$692be64e687bb0ca$var$BUF[24]=$692be64e687bb0ca$var$IV[8]^a,$692be64e687bb0ca$var$BUF[25]=$692be64e687bb0ca$var$IV[9]^s,n&&($692be64e687bb0ca$var$BUF[28]=~$692be64e687bb0ca$var$BUF[28],$692be64e687bb0ca$var$BUF[29]=~$692be64e687bb0ca$var$BUF[29]);let o=0,d=$9a4b3b889de6afac$exports.SIGMA;for(let n=0;n<12;n++)$692be64e687bb0ca$var$G1(0,4,8,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(0,4,8,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(1,5,9,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(1,5,9,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(2,6,10,14,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(2,6,10,14,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(3,7,11,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(3,7,11,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(0,5,10,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(0,5,10,15,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(1,6,11,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(1,6,11,12,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(2,7,8,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(2,7,8,13,r,i+2*d[o++]),$692be64e687bb0ca$var$G1(3,4,9,14,r,i+2*d[o++]),$692be64e687bb0ca$var$G2(3,4,9,14,r,i+2*d[o++]);this.v0l^=$692be64e687bb0ca$var$BUF[0]^$692be64e687bb0ca$var$BUF[16],this.v0h^=$692be64e687bb0ca$var$BUF[1]^$692be64e687bb0ca$var$BUF[17],this.v1l^=$692be64e687bb0ca$var$BUF[2]^$692be64e687bb0ca$var$BUF[18],this.v1h^=$692be64e687bb0ca$var$BUF[3]^$692be64e687bb0ca$var$BUF[19],this.v2l^=$692be64e687bb0ca$var$BUF[4]^$692be64e687bb0ca$var$BUF[20],this.v2h^=$692be64e687bb0ca$var$BUF[5]^$692be64e687bb0ca$var$BUF[21],this.v3l^=$692be64e687bb0ca$var$BUF[6]^$692be64e687bb0ca$var$BUF[22],this.v3h^=$692be64e687bb0ca$var$BUF[7]^$692be64e687bb0ca$var$BUF[23],this.v4l^=$692be64e687bb0ca$var$BUF[8]^$692be64e687bb0ca$var$BUF[24],this.v4h^=$692be64e687bb0ca$var$BUF[9]^$692be64e687bb0ca$var$BUF[25],this.v5l^=$692be64e687bb0ca$var$BUF[10]^$692be64e687bb0ca$var$BUF[26],this.v5h^=$692be64e687bb0ca$var$BUF[11]^$692be64e687bb0ca$var$BUF[27],this.v6l^=$692be64e687bb0ca$var$BUF[12]^$692be64e687bb0ca$var$BUF[28],this.v6h^=$692be64e687bb0ca$var$BUF[13]^$692be64e687bb0ca$var$BUF[29],this.v7l^=$692be64e687bb0ca$var$BUF[14]^$692be64e687bb0ca$var$BUF[30],this.v7h^=$692be64e687bb0ca$var$BUF[15]^$692be64e687bb0ca$var$BUF[31],$692be64e687bb0ca$var$BUF.fill(0)}destroy(){this.destroyed=!0,this.buffer32.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}$692be64e687bb0ca$exports.blake2b=(0,$bb5e1fcd97588e49$exports.wrapConstructorWithOpts)(r=>new $692be64e687bb0ca$var$BLAKE2b(r));var $awmEs=parcelRequire("awmEs");function $ce1f303d0aa8ec51$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $ce1f303d0aa8ec51$var$semver__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($f3bb2747c7b09053$exports),$ce1f303d0aa8ec51$var$axios__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($4ce02f68f14348c9$exports),$ce1f303d0aa8ec51$var$ByteBuffer__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($2kkR6),$ce1f303d0aa8ec51$var$BigNumber__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($eb25ad002e4befa3$exports),$ce1f303d0aa8ec51$var$JSZip__default=$ce1f303d0aa8ec51$var$_interopDefaultLegacy($b37c4403146d31a9$exports);function $ce1f303d0aa8ec51$var$__rest(r,i){var n={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&0>i.indexOf(s)&&(n[s]=r[s]);if(null!=r&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,s=Object.getOwnPropertySymbols(r);ai.indexOf(s[a])&&Object.prototype.propertyIsEnumerable.call(r,s[a])&&(n[s[a]]=r[s[a]]);return n}function $ce1f303d0aa8ec51$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function $ce1f303d0aa8ec51$var$__values(r){var i="function"==typeof Symbol&&Symbol.iterator,n=i&&r[i],s=0;if(n)return n.call(r);if(r&&"number"==typeof r.length)return{next:function(){return r&&s>=r.length&&(r=void 0),{value:r&&r[s++],done:!r}}};throw TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")}function $ce1f303d0aa8ec51$var$__asyncValues(r){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var i,n=r[Symbol.asyncIterator];return n?n.call(r):(r=$ce1f303d0aa8ec51$var$__values(r),i={},s("next"),s("throw"),s("return"),i[Symbol.asyncIterator]=function(){return this},i);function s(n){i[n]=r[n]&&function(i){return new Promise(function(s,o){a(s,o,(i=r[n](i)).done,i.value)})}}function a(r,i,n,s){Promise.resolve(s).then(function(i){r({value:i,done:n})},i)}}"function"==typeof SuppressedError&&SuppressedError;const $ce1f303d0aa8ec51$var$callbackManager=new Map,$ce1f303d0aa8ec51$var$generateCallbackId=()=>`callback_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,$ce1f303d0aa8ec51$var$registerCallback=(r,i)=>{$ce1f303d0aa8ec51$var$callbackManager.set(r,i)},$ce1f303d0aa8ec51$var$executeCallback=(r,...i)=>{let n=$ce1f303d0aa8ec51$var$callbackManager.get(r);n&&n(...i)},$ce1f303d0aa8ec51$var$cleanupCallback=r=>{$ce1f303d0aa8ec51$var$callbackManager.delete(r)},$ce1f303d0aa8ec51$var$inject=({call:r,cancel:i,dispose:n,eventEmitter:s,init:a,updateSettings:o,switchTransport:d,uiResponse:f})=>{let l=Object.assign({on:(r,i)=>{s.on(r,i)},emit:()=>{},off:(r,i)=>{s.removeListener(r,i)},removeAllListeners:r=>{s.removeAllListeners(r)},init:a,call:r,dispose:n,uiResponse:f,cancel:i,updateSettings:o,switchTransport:d},$ce1f303d0aa8ec51$var$createCoreApi(r));return l},$ce1f303d0aa8ec51$var$createCoreApi=r=>({getLogs:()=>r({method:"getLogs"}),searchDevices:()=>r({method:"searchDevices"}),getFeatures:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getFeatures"})),getOnekeyFeatures:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getOnekeyFeatures"})),checkFirmwareRelease:i=>r({connectId:i,method:"checkFirmwareRelease"}),checkBLEFirmwareRelease:i=>r({connectId:i,method:"checkBLEFirmwareRelease"}),checkBridgeStatus:()=>r({method:"checkBridgeStatus"}),checkBridgeRelease:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"checkBridgeRelease"})),checkBootloaderRelease:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"checkBootloaderRelease"})),checkAllFirmwareRelease:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"checkAllFirmwareRelease"})),checkFirmwareTypeAvailable:i=>r(Object.assign(Object.assign({},i),{method:"checkFirmwareTypeAvailable"})),cipherKeyValue:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cipherKeyValue"})),testInitializeDeviceDuration:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"testInitializeDeviceDuration"})),deviceBackup:i=>r({connectId:i,method:"deviceBackup"}),deviceChangePin:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceChangePin"})),deviceFlags:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceFlags"})),deviceRebootToBoardloader:i=>r({connectId:i,method:"deviceRebootToBoardloader"}),deviceRebootToBootloader:i=>r({connectId:i,method:"deviceRebootToBootloader"}),deviceRecovery:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceRecovery"})),deviceReset:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceReset"})),deviceSettings:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceSettings"})),deviceUpdateReboot:i=>r({connectId:i,method:"deviceUpdateReboot"}),deviceUploadResource:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceUploadResource"})),deviceSupportFeatures:i=>r({connectId:i,method:"deviceSupportFeatures"}),deviceVerify:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceVerify"})),deviceWipe:i=>r({connectId:i,method:"deviceWipe"}),deviceFullyUploadResource:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceFullyUploadResource"})),deviceUpdateBootloader:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceUpdateBootloader"})),getPassphraseState:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getPassphraseState"})),deviceCancel:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceCancel"})),deviceLock:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"deviceLock"})),deviceUnlock:(i,n)=>r(Object.assign(Object.assign({},n),{useEmptyPassphrase:!0,connectId:i,method:"deviceUnlock"})),getNextU2FCounter:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"getNextU2FCounter"})),setU2FCounter:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"setU2FCounter"})),allNetworkGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"allNetworkGetAddress"})),allNetworkGetAddressByLoop:(i,n,s)=>{let{onLoopItemResponse:a,onAllItemsResponse:o}=s,d=$ce1f303d0aa8ec51$var$__rest(s,["onLoopItemResponse","onAllItemsResponse"]),f=$ce1f303d0aa8ec51$var$generateCallbackId();$ce1f303d0aa8ec51$var$registerCallback(f,a);let l=$ce1f303d0aa8ec51$var$generateCallbackId();return $ce1f303d0aa8ec51$var$registerCallback(l,(r,i)=>{null==o||o(r,i),$ce1f303d0aa8ec51$var$cleanupCallback(l),$ce1f303d0aa8ec51$var$cleanupCallback(f)}),r(Object.assign(Object.assign({},d),{connectId:i,deviceId:n,method:"allNetworkGetAddressByLoop",callbackId:f,callbackIdFinish:l}))},evmGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmGetAddress"})),evmGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmGetPublicKey"})),evmSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignMessage"})),evmSignMessageEIP712:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignMessageEIP712"})),evmSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignTransaction"})),evmSignTypedData:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmSignTypedData"})),evmVerifyMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"evmVerifyMessage"})),btcGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcGetAddress"})),btcGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcGetPublicKey"})),btcSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcSignMessage"})),btcSignPsbt:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcSignPsbt"})),btcSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcSignTransaction"})),btcVerifyMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"btcVerifyMessage"})),starcoinGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinGetAddress"})),starcoinGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinGetPublicKey"})),starcoinSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinSignMessage"})),starcoinSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinSignTransaction"})),starcoinVerifyMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"starcoinVerifyMessage"})),nemGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nemGetAddress"})),nemSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nemSignTransaction"})),solGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solGetAddress"})),solSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solSignTransaction"})),solSignOffchainMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solSignOffchainMessage"})),solSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"solSignMessage"})),stellarGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"stellarGetAddress"})),stellarSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"stellarSignTransaction"})),firmwareUpdate:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"firmwareUpdate"})),firmwareUpdateV2:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"firmwareUpdateV2"})),firmwareUpdateV3:(i,n)=>r(Object.assign(Object.assign({},n),{connectId:i,method:"firmwareUpdateV3"})),promptWebDeviceAccess:i=>r(Object.assign(Object.assign({},i),{method:"promptWebDeviceAccess"})),tronGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tronGetAddress"})),tronSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tronSignMessage"})),tronSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tronSignTransaction"})),confluxGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxGetAddress"})),confluxSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxSignMessage"})),confluxSignMessageCIP23:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxSignMessageCIP23"})),confluxSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"confluxSignTransaction"})),nearGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nearGetAddress"})),nearSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nearSignTransaction"})),aptosGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosGetAddress"})),aptosGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosGetPublicKey"})),aptosSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosSignMessage"})),aptosSignInMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosSignInMessage"})),aptosSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"aptosSignTransaction"})),algoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"algoGetAddress"})),algoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"algoSignTransaction"})),cosmosGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cosmosGetAddress"})),cosmosGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cosmosGetPublicKey"})),cosmosSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cosmosSignTransaction"})),xrpGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"xrpGetAddress"})),xrpSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"xrpSignTransaction"})),suiGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiGetAddress"})),suiGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiGetPublicKey"})),suiSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiSignMessage"})),suiSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"suiSignTransaction"})),cardanoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoGetAddress"})),cardanoGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoGetPublicKey"})),cardanoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoSignTransaction"})),cardanoSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"cardanoSignMessage"})),filecoinGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"filecoinGetAddress"})),filecoinSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"filecoinSignTransaction"})),polkadotGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"polkadotGetAddress"})),polkadotSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"polkadotSignTransaction"})),kaspaGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"kaspaGetAddress"})),kaspaSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"kaspaSignTransaction"})),nexaGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nexaGetAddress"})),nexaSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nexaSignTransaction"})),nostrGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrGetPublicKey"})),nostrSignEvent:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrSignEvent"})),nostrEncryptMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrEncryptMessage"})),nostrDecryptMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrDecryptMessage"})),nostrSignSchnorr:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nostrSignSchnorr"})),lnurlAuth:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"lnurlAuth"})),nervosGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nervosGetAddress"})),nervosSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"nervosSignTransaction"})),dnxGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"dnxGetAddress"})),dnxSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"dnxSignTransaction"})),tonGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tonGetAddress"})),tonSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tonSignMessage"})),tonSignProof:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"tonSignProof"})),scdoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"scdoGetAddress"})),scdoSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"scdoSignMessage"})),scdoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"scdoSignTransaction"})),alephiumGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"alephiumGetAddress"})),alephiumSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"alephiumSignMessage"})),alephiumSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"alephiumSignTransaction"})),benfenGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenGetAddress"})),benfenGetPublicKey:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenGetPublicKey"})),benfenSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenSignTransaction"})),benfenSignMessage:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"benfenSignMessage"})),neoGetAddress:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"neoGetAddress"})),neoSignTransaction:(i,n,s)=>r(Object.assign(Object.assign({},s),{connectId:i,deviceId:n,method:"neoSignTransaction"}))}),$ce1f303d0aa8ec51$var$lowLevelInject=({call:r,cancel:i,dispose:n,eventEmitter:s,init:a,uiResponse:o,updateSettings:d,switchTransport:f,addHardwareGlobalEventListener:l})=>{let u=Object.assign({addHardwareGlobalEventListener:l,removeAllListeners:r=>{s.removeAllListeners(r)},init:a,call:r,dispose:n,uiResponse:o,cancel:i,updateSettings:d,switchTransport:f,emit:()=>{}},$ce1f303d0aa8ec51$var$createCoreApi(r));return u};var $ce1f303d0aa8ec51$var$events={exports:{}},$ce1f303d0aa8ec51$var$R="object"==typeof Reflect?Reflect:null,$ce1f303d0aa8ec51$var$ReflectApply=$ce1f303d0aa8ec51$var$R&&"function"==typeof $ce1f303d0aa8ec51$var$R.apply?$ce1f303d0aa8ec51$var$R.apply:function(r,i,n){return Function.prototype.apply.call(r,i,n)};function $ce1f303d0aa8ec51$var$ProcessEmitWarning(r){console&&console.warn&&console.warn(r)}$ce1f303d0aa8ec51$var$ReflectOwnKeys=$ce1f303d0aa8ec51$var$R&&"function"==typeof $ce1f303d0aa8ec51$var$R.ownKeys?$ce1f303d0aa8ec51$var$R.ownKeys:Object.getOwnPropertySymbols?function(r){return Object.getOwnPropertyNames(r).concat(Object.getOwnPropertySymbols(r))}:function(r){return Object.getOwnPropertyNames(r)};var $ce1f303d0aa8ec51$var$NumberIsNaN=Number.isNaN||function(r){return r!=r};function $ce1f303d0aa8ec51$var$EventEmitter(){$ce1f303d0aa8ec51$var$EventEmitter.init.call(this)}$ce1f303d0aa8ec51$var$events.exports=$ce1f303d0aa8ec51$var$EventEmitter,$ce1f303d0aa8ec51$var$events.exports.once=$ce1f303d0aa8ec51$var$once,$ce1f303d0aa8ec51$var$EventEmitter.EventEmitter=$ce1f303d0aa8ec51$var$EventEmitter,$ce1f303d0aa8ec51$var$EventEmitter.prototype._events=void 0,$ce1f303d0aa8ec51$var$EventEmitter.prototype._eventsCount=0,$ce1f303d0aa8ec51$var$EventEmitter.prototype._maxListeners=void 0;var $ce1f303d0aa8ec51$var$defaultMaxListeners=10;function $ce1f303d0aa8ec51$var$checkListener(r){if("function"!=typeof r)throw TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}function $ce1f303d0aa8ec51$var$_getMaxListeners(r){return void 0===r._maxListeners?$ce1f303d0aa8ec51$var$EventEmitter.defaultMaxListeners:r._maxListeners}function $ce1f303d0aa8ec51$var$_addListener(r,i,n,s){if($ce1f303d0aa8ec51$var$checkListener(n),void 0===(o=r._events)?(o=r._events=Object.create(null),r._eventsCount=0):(void 0!==o.newListener&&(r.emit("newListener",i,n.listener?n.listener:n),o=r._events),d=o[i]),void 0===d)d=o[i]=n,++r._eventsCount;else if("function"==typeof d?d=o[i]=s?[n,d]:[d,n]:s?d.unshift(n):d.push(n),(a=$ce1f303d0aa8ec51$var$_getMaxListeners(r))>0&&d.length>a&&!d.warned){d.warned=!0;var a,o,d,f=Error("Possible EventEmitter memory leak detected. "+d.length+" "+String(i)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=r,f.type=i,f.count=d.length,$ce1f303d0aa8ec51$var$ProcessEmitWarning(f)}return r}function $ce1f303d0aa8ec51$var$onceWrapper(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function $ce1f303d0aa8ec51$var$_onceWrap(r,i,n){var s={fired:!1,wrapFn:void 0,target:r,type:i,listener:n},a=$ce1f303d0aa8ec51$var$onceWrapper.bind(s);return a.listener=n,s.wrapFn=a,a}function $ce1f303d0aa8ec51$var$_listeners(r,i,n){var s=r._events;if(void 0===s)return[];var a=s[i];return void 0===a?[]:"function"==typeof a?n?[a.listener||a]:[a]:n?$ce1f303d0aa8ec51$var$unwrapListeners(a):$ce1f303d0aa8ec51$var$arrayClone(a,a.length)}function $ce1f303d0aa8ec51$var$listenerCount(r){var i=this._events;if(void 0!==i){var n=i[r];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function $ce1f303d0aa8ec51$var$arrayClone(r,i){for(var n=Array(i),s=0;s0&&(o=i[0]),o instanceof Error)throw o;var o,d=Error("Unhandled error."+(o?" ("+o.message+")":""));throw d.context=o,d}var f=a[r];if(void 0===f)return!1;if("function"==typeof f)$ce1f303d0aa8ec51$var$ReflectApply(f,this,i);else for(var l=f.length,u=$ce1f303d0aa8ec51$var$arrayClone(f,l),n=0;n=0;o--)if(n[o]===i||n[o].listener===i){d=n[o].listener,a=o;break}if(a<0)return this;0===a?n.shift():$ce1f303d0aa8ec51$var$spliceOne(n,a),1===n.length&&(s[r]=n[0]),void 0!==s.removeListener&&this.emit("removeListener",r,d||i)}return this},$ce1f303d0aa8ec51$var$EventEmitter.prototype.off=$ce1f303d0aa8ec51$var$EventEmitter.prototype.removeListener,$ce1f303d0aa8ec51$var$EventEmitter.prototype.removeAllListeners=function(r){var i,n,s;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0==arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[r]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[r]),this;if(0==arguments.length){var a,o=Object.keys(n);for(s=0;s=0;s--)this.removeListener(r,i[s]);return this},$ce1f303d0aa8ec51$var$EventEmitter.prototype.listeners=function(r){return $ce1f303d0aa8ec51$var$_listeners(this,r,!0)},$ce1f303d0aa8ec51$var$EventEmitter.prototype.rawListeners=function(r){return $ce1f303d0aa8ec51$var$_listeners(this,r,!1)},$ce1f303d0aa8ec51$var$EventEmitter.listenerCount=function(r,i){return"function"==typeof r.listenerCount?r.listenerCount(i):$ce1f303d0aa8ec51$var$listenerCount.call(r,i)},$ce1f303d0aa8ec51$var$EventEmitter.prototype.listenerCount=$ce1f303d0aa8ec51$var$listenerCount,$ce1f303d0aa8ec51$var$EventEmitter.prototype.eventNames=function(){return this._eventsCount>0?$ce1f303d0aa8ec51$var$ReflectOwnKeys(this._events):[]};const $ce1f303d0aa8ec51$var$eventEmitter=new $ce1f303d0aa8ec51$var$events.exports,$ce1f303d0aa8ec51$var$topLevelInject=()=>{let r;let i=i=>r?r.call(i):Promise.resolve(void 0),n=Object.assign(Object.assign({on:(r,i)=>{$ce1f303d0aa8ec51$var$eventEmitter.on(r,i)},emit:(r,...i)=>{$ce1f303d0aa8ec51$var$eventEmitter.emit(r,...i)},off:(r,i)=>{$ce1f303d0aa8ec51$var$eventEmitter.emit(r,i)},init:(i,n)=>{var s;return null!==(s=null==(r=n)?void 0:r.init(i))&&void 0!==s?s:Promise.resolve(!1)},call:i},$ce1f303d0aa8ec51$var$createCoreApi(i)),{removeAllListeners:i=>{$ce1f303d0aa8ec51$var$eventEmitter.removeAllListeners(i),null==r||r.removeAllListeners(i)},dispose:()=>null==r?void 0:r.dispose(),uiResponse:i=>null==r?void 0:r.uiResponse(i),cancel:i=>null==r?void 0:r.cancel(i),updateSettings:i=>{var n;return null!==(n=null==r?void 0:r.updateSettings(i))&&void 0!==n?n:Promise.resolve(!1)},switchTransport:i=>{var n;return null!==(n=null==r?void 0:r.switchTransport(i))&&void 0!==n?n:Promise.resolve({success:!1})}});return n},$ce1f303d0aa8ec51$var$LOG_EVENT="LOG_EVENT",$ce1f303d0aa8ec51$var$LOG={OUTPUT:"log-output"},$ce1f303d0aa8ec51$var$createLogMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$LOG_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$MAX_ENTRIES=500;class $ce1f303d0aa8ec51$var$Log$g{constructor(r,i){this.prefix=r,this.enabled=i,this.messages=[]}addMessage(r,i,...n){this.messages.push({level:r,prefix:i,message:n,timestamp:new Date().getTime()}),this.messages.length>$ce1f303d0aa8ec51$var$MAX_ENTRIES&&this.messages.shift()}log(...r){this.addMessage("log",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.log(this.prefix,...r)}error(...r){this.addMessage("error",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.error(this.prefix,...r)}warn(...r){this.addMessage("warn",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.warn(this.prefix,...r)}debug(...r){this.addMessage("debug",this.prefix,...r),$ce1f303d0aa8ec51$var$sendLogMessage(this.prefix,...r),this.enabled&&console.log(this.prefix,...r)}}const $ce1f303d0aa8ec51$var$_logs={},$ce1f303d0aa8ec51$var$initLog=(r,i)=>{let n=new $ce1f303d0aa8ec51$var$Log$g(r,!!i);return $ce1f303d0aa8ec51$var$_logs[r]=n,n},$ce1f303d0aa8ec51$var$enableLog=r=>{Object.keys($ce1f303d0aa8ec51$var$_logs).forEach(i=>{$ce1f303d0aa8ec51$var$_logs[i].enabled=!!r})},$ce1f303d0aa8ec51$var$getLog=()=>{let r=[];return Object.keys($ce1f303d0aa8ec51$var$_logs).forEach(i=>{r=r.concat($ce1f303d0aa8ec51$var$_logs[i].messages)}),r.sort((r,i)=>r.timestamp-i.timestamp),r},$ce1f303d0aa8ec51$var$setLoggerPostMessage=r=>{$ce1f303d0aa8ec51$var$postMessage$1=r},$ce1f303d0aa8ec51$var$serializeLog=(...r)=>r.map(r=>"string"==typeof r||"number"==typeof r||"boolean"==typeof r||void 0===r?r:"object"==typeof r?JSON.stringify(r,$ce1f303d0aa8ec51$var$getCircularReplacer()):r),$ce1f303d0aa8ec51$var$getCircularReplacer=()=>{let r=new WeakSet;return(i,n)=>{if("object"==typeof n&&null!==n){if(r.has(n))return;r.add(n)}return n}},$ce1f303d0aa8ec51$var$sendLogMessage=(r,...i)=>{null==$ce1f303d0aa8ec51$var$postMessage$1||$ce1f303d0aa8ec51$var$postMessage$1($ce1f303d0aa8ec51$var$createLogMessage($ce1f303d0aa8ec51$var$LOG.OUTPUT,$ce1f303d0aa8ec51$var$serializeLog(r,...i)))};$ce1f303d0aa8ec51$exports.LoggerNames=void 0,function(r){r.Core="@onekey/hd-core",r.Transport="Transport",r.Device="Device",r.DeviceCommands="DeviceCommands",r.DeviceConnector="DeviceConnector",r.DeviceList="DeviceList",r.DevicePool="DevicePool",r.HdCommonConnectSdk="@onekey/common-connect-sdk",r.HdBleSdk="@onekey/hd-ble-sdk",r.HdTransportHttp="@onekey/hd-transport-http",r.HdTransportLowLevel="@onekey/hd-transport-lowlevel",r.HdBleTransport="@onekey/hd-ble-transport",r.HdWebBleTransport="@onekey/hd-web-ble-transport",r.HdTransportWebUsb="@onekey/hd-transport-webusb",r.HdTransportNodeUsb="@onekey/hd-transport-node-usb",r.Connect="@onekey/connect",r.Iframe="IFrame",r.SendMessage="[SendMessage]",r.Method="[Method]"}($ce1f303d0aa8ec51$exports.LoggerNames||($ce1f303d0aa8ec51$exports.LoggerNames={}));const $ce1f303d0aa8ec51$var$LoggerMap={[$ce1f303d0aa8ec51$exports.LoggerNames.Core]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Core),[$ce1f303d0aa8ec51$exports.LoggerNames.Transport]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Transport),[$ce1f303d0aa8ec51$exports.LoggerNames.Device]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Device),[$ce1f303d0aa8ec51$exports.LoggerNames.DeviceCommands]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DeviceCommands),[$ce1f303d0aa8ec51$exports.LoggerNames.DeviceConnector]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DeviceConnector),[$ce1f303d0aa8ec51$exports.LoggerNames.DeviceList]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DeviceList),[$ce1f303d0aa8ec51$exports.LoggerNames.DevicePool]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.DevicePool),[$ce1f303d0aa8ec51$exports.LoggerNames.HdBleSdk]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdBleSdk),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportHttp]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportHttp),[$ce1f303d0aa8ec51$exports.LoggerNames.HdBleTransport]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdBleTransport),[$ce1f303d0aa8ec51$exports.LoggerNames.HdWebBleTransport]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdWebBleTransport),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportLowLevel]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportLowLevel),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportWebUsb]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportWebUsb),[$ce1f303d0aa8ec51$exports.LoggerNames.HdTransportNodeUsb]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportNodeUsb),[$ce1f303d0aa8ec51$exports.LoggerNames.Connect]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Connect),[$ce1f303d0aa8ec51$exports.LoggerNames.Iframe]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Iframe),[$ce1f303d0aa8ec51$exports.LoggerNames.SendMessage]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.SendMessage),[$ce1f303d0aa8ec51$exports.LoggerNames.Method]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Method),[$ce1f303d0aa8ec51$exports.LoggerNames.HdCommonConnectSdk]:$ce1f303d0aa8ec51$var$initLog($ce1f303d0aa8ec51$exports.LoggerNames.Method)},$ce1f303d0aa8ec51$var$getLogger=r=>$ce1f303d0aa8ec51$var$LoggerMap[r],$ce1f303d0aa8ec51$var$httpRequest$1=(r,i="text")=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n={};r.indexOf("ngrok-free.app")>-1&&(n["ngrok-skip-browser-warning"]=!0);let s=yield $ce1f303d0aa8ec51$var$axios__default.default.request({url:r,withCredentials:!1,responseType:"binary"===i?"arraybuffer":"json",headers:n});if(200==+s.status)return s.data;throw Error(`httpRequest error: ${r} ${s.statusText}`)}),$ce1f303d0aa8ec51$var$httpRequest=(r,i)=>$ce1f303d0aa8ec51$var$httpRequest$1(r,i),$ce1f303d0aa8ec51$var$getTimeStamp=()=>new Date().getTime(),$ce1f303d0aa8ec51$var$VER_NUMS=3,$ce1f303d0aa8ec51$var$versionRegex=new RegExp(/^[0-9]{1,3}(\.[0-9]{1,3}){0,2}$/),$ce1f303d0aa8ec51$var$isValidVersionString=r=>$ce1f303d0aa8ec51$var$versionRegex.test(r),$ce1f303d0aa8ec51$var$isValidVersionArray=r=>{if(!Array.isArray(r)||0===r.length||r.length>$ce1f303d0aa8ec51$var$VER_NUMS||0===r[0])return!1;for(let i=0;i{if(r.length===$ce1f303d0aa8ec51$var$VER_NUMS)return r;let i=[...r];for(let n=r.length;n<$ce1f303d0aa8ec51$var$VER_NUMS;n++)i.push(0);return i},$ce1f303d0aa8ec51$var$versionSplit=r=>$ce1f303d0aa8ec51$var$isValidVersionString(r)?r.split(".").map(r=>Number(r)):[0,0,0],$ce1f303d0aa8ec51$var$versionCompare=(r,i)=>{if("string"==typeof r&&"string"==typeof i&&r===i)return 0;let n="string"==typeof r?$ce1f303d0aa8ec51$var$versionSplit(r):r,s="string"==typeof i?$ce1f303d0aa8ec51$var$versionSplit(i):i,a=$ce1f303d0aa8ec51$var$isValidVersionArray(n),o=$ce1f303d0aa8ec51$var$isValidVersionArray(s);if(!a&&!o)return 0;if(!a&&o)return -1;if(a&&!o)return 1;let d=$ce1f303d0aa8ec51$var$normalizeVersionArray(n),f=$ce1f303d0aa8ec51$var$normalizeVersionArray(s);for(let r=0;r<$ce1f303d0aa8ec51$var$VER_NUMS;r++){if(d[r]>f[r])return 1;if(f[r]>d[r])return -1}return 0};function $ce1f303d0aa8ec51$var$patchFeatures(r){return"Features"!==r.type||r.message.major_version<1&&(r.message.major_version=1),r}const $ce1f303d0aa8ec51$var$Log$f=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);let $ce1f303d0aa8ec51$var$globalInstanceCounter=0,$ce1f303d0aa8ec51$var$sdkInstanceCounter=0;function $ce1f303d0aa8ec51$var$generateSdkInstanceId(){$ce1f303d0aa8ec51$var$sdkInstanceCounter++;let r=Date.now().toString().slice(-6);return`SDK-${$ce1f303d0aa8ec51$var$sdkInstanceCounter}-${r}`}function $ce1f303d0aa8ec51$var$generateInstanceId(r,i){$ce1f303d0aa8ec51$var$globalInstanceCounter++;let n=Date.now().toString().slice(-6),s=`${r}-${$ce1f303d0aa8ec51$var$globalInstanceCounter}-${n}`;return i?`${i}.${s}`:s}const $ce1f303d0aa8ec51$var$sdkInstances=new Map,$ce1f303d0aa8ec51$var$globalActiveRequests=new Map;function $ce1f303d0aa8ec51$var$createSdkTracingContext(){let r=$ce1f303d0aa8ec51$var$generateSdkInstanceId(),i={sdkInstanceId:r,createdAt:Date.now(),activeRequests:new Map};return $ce1f303d0aa8ec51$var$sdkInstances.set(r,i),i}function $ce1f303d0aa8ec51$var$createRequestContext(r,i,n){let s={responseID:r,sdkInstanceId:null==n?void 0:n.sdkInstanceId,methodName:i,connectId:null==n?void 0:n.connectId,deviceInstanceId:null==n?void 0:n.deviceInstanceId,commandsInstanceId:null==n?void 0:n.commandsInstanceId,parentResponseID:null==n?void 0:n.parentResponseID,startTime:Date.now(),status:"pending"};if($ce1f303d0aa8ec51$var$globalActiveRequests.set(s.responseID,s),null==n?void 0:n.sdkInstanceId){let r=$ce1f303d0aa8ec51$var$sdkInstances.get(n.sdkInstanceId);r&&r.activeRequests.set(s.responseID,s)}return s}function $ce1f303d0aa8ec51$var$updateRequestContext(r,i){let n=$ce1f303d0aa8ec51$var$globalActiveRequests.get(r);n&&Object.assign(n,i)}function $ce1f303d0aa8ec51$var$completeRequestContext(r,i){let n=$ce1f303d0aa8ec51$var$globalActiveRequests.get(r);if(n&&(n.endTime=Date.now(),n.status=i?"error":"success",i&&(n.error=i.message,$ce1f303d0aa8ec51$var$Log$f.error(`[RequestContext] [completeRequestContext] Error: ${$ce1f303d0aa8ec51$var$formatRequestContext(n)}`)),$ce1f303d0aa8ec51$var$globalActiveRequests.delete(r),n.sdkInstanceId)){let i=$ce1f303d0aa8ec51$var$sdkInstances.get(n.sdkInstanceId);i&&i.activeRequests.delete(r)}}function $ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(r){return Array.from($ce1f303d0aa8ec51$var$globalActiveRequests.values()).filter(i=>i.deviceInstanceId===r)}function $ce1f303d0aa8ec51$var$formatRequestContext(r){let i=r.endTime?r.endTime-r.startTime:Date.now()-r.startTime,n=[`[req:${r.responseID}]`,r.sdkInstanceId?`sdk=${r.sdkInstanceId}`:null,`method=${r.methodName}`,r.connectId?`connectId=${r.connectId}`:null,r.deviceInstanceId?`deviceInst=${r.deviceInstanceId}`:null,r.commandsInstanceId?`commandsInst=${r.commandsInstanceId}`:null,r.parentResponseID?`parent=${r.parentResponseID}`:null,`duration=${i}ms`,`status=${r.status}`,`error=${r.error}`].filter(Boolean);return n.join(" ")}function $ce1f303d0aa8ec51$var$cleanupSdkInstance(r){let i=$ce1f303d0aa8ec51$var$sdkInstances.get(r);if(i){for(let r of i.activeRequests.keys())$ce1f303d0aa8ec51$var$globalActiveRequests.delete(r);$ce1f303d0aa8ec51$var$sdkInstances.delete(r)}}$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode=void 0,function(r){r.bootloader="bootloader",r.normal="normal",r.notInitialized="notInitialized",r.backupMode="backupMode"}($ce1f303d0aa8ec51$exports.EOneKeyDeviceMode||($ce1f303d0aa8ec51$exports.EOneKeyDeviceMode={}));const $ce1f303d0aa8ec51$var$DeviceModelToTypes={model_mini:[$3FhS8.EDeviceType.Classic,$3FhS8.EDeviceType.Classic1s,$3FhS8.EDeviceType.ClassicPure,$3FhS8.EDeviceType.Mini],model_touch:[$3FhS8.EDeviceType.Touch,$3FhS8.EDeviceType.Pro],model_classic:[$3FhS8.EDeviceType.Classic,$3FhS8.EDeviceType.Classic1s,$3FhS8.EDeviceType.ClassicPure],model_classic1s:[$3FhS8.EDeviceType.Classic1s,$3FhS8.EDeviceType.ClassicPure]},$ce1f303d0aa8ec51$var$DeviceTypeToModels={[$3FhS8.EDeviceType.Classic]:["model_classic","model_mini"],[$3FhS8.EDeviceType.Classic1s]:["model_classic","model_mini","model_classic1s"],[$3FhS8.EDeviceType.ClassicPure]:["model_classic","model_mini","model_classic1s"],[$3FhS8.EDeviceType.Mini]:["model_mini"],[$3FhS8.EDeviceType.Touch]:["model_touch"],[$3FhS8.EDeviceType.Pro]:["model_touch"],[$3FhS8.EDeviceType.Unknown]:[]},$ce1f303d0aa8ec51$var$existCapability=(r,i)=>{var n;return null===(n=null==r?void 0:r.capabilities)||void 0===n?void 0:n.includes(i)},$ce1f303d0aa8ec51$var$getDeviceType=r=>{if(!r||"object"!=typeof r)return $3FhS8.EDeviceType.Unknown;switch(r.onekey_device_type){case"CLASSIC":return $3FhS8.EDeviceType.Classic;case"CLASSIC1S":return $3FhS8.EDeviceType.Classic1s;case"MINI":return $3FhS8.EDeviceType.Mini;case"TOUCH":return $3FhS8.EDeviceType.Touch;case"PRO":return $3FhS8.EDeviceType.Pro;case"PURE":return $3FhS8.EDeviceType.ClassicPure;default:if(!$7U5sq.isEmpty(r.onekey_serial_no))return $3FhS8.EDeviceType.Unknown}let i=$ce1f303d0aa8ec51$var$getDeviceUUID(r);if($7U5sq.isEmpty(i)&&!0===r.bootloader_mode&&"1"===r.model)return $3FhS8.EDeviceType.Classic;if($7U5sq.isEmpty(i))return $3FhS8.EDeviceType.Unknown;let n=i.slice(0,2);return"bi"===n.toLowerCase()||"cl"===n.toLowerCase()?$3FhS8.EDeviceType.Classic:"cp"===n.toLowerCase()?$3FhS8.EDeviceType.ClassicPure:"mi"===n.toLowerCase()?$3FhS8.EDeviceType.Mini:"tc"===n.toLowerCase()?$3FhS8.EDeviceType.Touch:"pr"===n.toLowerCase()?$3FhS8.EDeviceType.Pro:$3FhS8.EDeviceType.Unknown},$ce1f303d0aa8ec51$var$getDeviceTypeByBleName=r=>r?r.startsWith("BixinKey")||r.startsWith("K")?$3FhS8.EDeviceType.Classic:r.startsWith("T")||r.startsWith("Touch")?$3FhS8.EDeviceType.Touch:r.startsWith("Pro")?$3FhS8.EDeviceType.Pro:$3FhS8.EDeviceType.Unknown:$3FhS8.EDeviceType.Unknown,$ce1f303d0aa8ec51$var$getDeviceBleName=r=>null==r?null:r.onekey_ble_name||r.ble_name||null,$ce1f303d0aa8ec51$var$getDeviceUUID=r=>{let i=r.onekey_serial_no||r.onekey_serial||r.serial_no;return null!=i?i:""},$ce1f303d0aa8ec51$var$getDeviceLabel=r=>{if(!r)return null;let i=$ce1f303d0aa8ec51$var$getDeviceType(r);if(null==i)return null;if("string"==typeof r.label&&!$7U5sq.isEmpty(r.label))return r.label;let n=$ce1f303d0aa8ec51$var$getDeviceBleName(r);return $7U5sq.isEmpty(n)?i===$3FhS8.EDeviceType.ClassicPure?"OneKey Classic 1S":`OneKey ${i.charAt(0).toUpperCase()+i.slice(1)}`:n},$ce1f303d0aa8ec51$var$getMethodVersionRange=(r,i)=>{let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=i(n);if(s)return s;let a=["model_classic1s","model_classic","model_mini","model_touch"];for(let r of a)if($ce1f303d0aa8ec51$var$DeviceModelToTypes[r].includes(n)&&(s=i(r)))break;return s},$ce1f303d0aa8ec51$var$getFirmwareType=r=>{var i;return r?"OneKey Bitcoin-only"===r.fw_vendor?$3FhS8.EFirmwareType.BitcoinOnly:(null===(i=null==r?void 0:r.capabilities)||void 0===i?void 0:i.length)>0&&!$ce1f303d0aa8ec51$var$existCapability(r,$5xch2.Enum_Capability.Capability_Bitcoin_like)?$3FhS8.EFirmwareType.BitcoinOnly:$3FhS8.EFirmwareType.Universal:$3FhS8.EFirmwareType.Universal},$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion=r=>{var i,n;return r?$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_firmware_version)?null===(i=r.onekey_firmware_version)||void 0===i?void 0:i.split("."):$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_version)?null===(n=r.onekey_version)||void 0===n?void 0:n.split("."):[0,0,0]:[0,0,0]},$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion=r=>{let i=(null==r?void 0:r.onekey_ble_version)||(null==r?void 0:r.ble_ver);return i&&$ce1f303d0aa8ec51$var$semver__default.default.valid(i)&&i?i.split(".").map(Number):[0,0,0]},$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion=r=>{var i,n,s,a,o;return r?$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_boot_version)?null===(i=r.onekey_boot_version)||void 0===i?void 0:i.split("."):r.bootloader_version?$ce1f303d0aa8ec51$var$semver__default.default.valid(r.bootloader_version)?null===(o=r.bootloader_version)||void 0===o?void 0:o.split("."):[0,0,0]:r.bootloader_mode?[null!==(n=null==r?void 0:r.major_version)&&void 0!==n?n:0,null!==(s=null==r?void 0:r.minor_version)&&void 0!==s?s:0,null!==(a=null==r?void 0:r.patch_version)&&void 0!==a?a:0]:[0,0,0]:[0,0,0]},$ce1f303d0aa8ec51$var$getDeviceBoardloaderVersion=r=>{var i;return $ce1f303d0aa8ec51$var$semver__default.default.valid(null==r?void 0:r.onekey_board_version)?null===(i=null==r?void 0:r.onekey_board_version)||void 0===i?void 0:i.split("."):[0,0,0]},$ce1f303d0aa8ec51$var$HD_HARDENED=2147483648,$ce1f303d0aa8ec51$var$toHardened=r=>(r|$ce1f303d0aa8ec51$var$HD_HARDENED)>>>0,$ce1f303d0aa8ec51$var$fromHardened=r=>(r&~$ce1f303d0aa8ec51$var$HD_HARDENED)>>>0,$ce1f303d0aa8ec51$var$PATH_NOT_VALID=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Not a valid path"),$ce1f303d0aa8ec51$var$PATH_NEGATIVE_VALUES=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Path cannot contain negative values"),$ce1f303d0aa8ec51$var$getHDPath=r=>{let i=r.toLowerCase().split("/");if("m"!==i[0])throw $ce1f303d0aa8ec51$var$PATH_NOT_VALID;return i.filter(r=>"m"!==r&&""!==r).map(r=>{let i=!1;"'"===r.substr(r.length-1)&&(i=!0,r=r.substr(0,r.length-1));let n=parseInt(r);if(Number.isNaN(n))throw $ce1f303d0aa8ec51$var$PATH_NOT_VALID;if(n<0)throw $ce1f303d0aa8ec51$var$PATH_NEGATIVE_VALUES;return i&&(n=$ce1f303d0aa8ec51$var$toHardened(n)),n})},$ce1f303d0aa8ec51$var$isEqualBip44CoinType=(r,i)=>$ce1f303d0aa8ec51$var$isBip44Path(r)&&r[1]===$ce1f303d0aa8ec51$var$toHardened(i),$ce1f303d0aa8ec51$var$isBip44Path=r=>Array.isArray(r)&&r[0]===$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$isMultisigPath=r=>Array.isArray(r)&&r[0]===$ce1f303d0aa8ec51$var$toHardened(48),$ce1f303d0aa8ec51$var$isSegwitPath=r=>Array.isArray(r)&&r[0]===$ce1f303d0aa8ec51$var$toHardened(49),$ce1f303d0aa8ec51$var$isTaprootPath=r=>Array.isArray(r)&&(r[0]===$ce1f303d0aa8ec51$var$toHardened(86)||r[0]===$ce1f303d0aa8ec51$var$toHardened(10025)),$ce1f303d0aa8ec51$var$getScriptType=r=>{if(!Array.isArray(r)||r.length<1)return"SPENDADDRESS";let i=$ce1f303d0aa8ec51$var$fromHardened(r[0]);switch(i){case 48:return"SPENDMULTISIG";case 49:return"SPENDP2SHWITNESS";case 84:return"SPENDWITNESS";case 86:case 10025:return"SPENDTAPROOT";default:return"SPENDADDRESS"}},$ce1f303d0aa8ec51$var$getOutputScriptType=r=>{if(!Array.isArray(r)||r.length<1)return"PAYTOADDRESS";if(49===r[0])return"PAYTOP2SHWITNESS";let i=$ce1f303d0aa8ec51$var$fromHardened(r[0]);switch(i){case 48:return"PAYTOMULTISIG";case 49:return"PAYTOP2SHWITNESS";case 84:return"PAYTOWITNESS";case 86:case 10025:return"PAYTOTAPROOT";default:return"PAYTOADDRESS"}},$ce1f303d0aa8ec51$var$serializedPath=r=>{let i=r.map(r=>r&$ce1f303d0aa8ec51$var$HD_HARDENED?`${r&~$ce1f303d0aa8ec51$var$HD_HARDENED}'`:r).join("/");return`m/${i}`},$ce1f303d0aa8ec51$var$validatePath=(r,i=0,n=!1)=>{let s;if(!(s="string"==typeof r?$ce1f303d0aa8ec51$var$getHDPath(r):Array.isArray(r)?r.map(r=>{let i=parseInt(r);if(Number.isNaN(i))throw $ce1f303d0aa8ec51$var$PATH_NOT_VALID;if(i<0)throw $ce1f303d0aa8ec51$var$PATH_NEGATIVE_VALUES;return i}):void 0)||i>0&&s.length{let n=r.filter(r=>$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),i));return 0===n.length?"valid":n.some(r=>r.required)?"required":"outdated"},$ce1f303d0aa8ec51$var$getReleaseChangelog=(r,i)=>{let n=r.filter(r=>$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),i));return n.map(r=>r.changelog)},$ce1f303d0aa8ec51$var$findLatestRelease=r=>{let i=r[0];return r.forEach(r=>{$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),i.version.join("."))&&(i=r)}),i},$ce1f303d0aa8ec51$var$Log$e=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core),$ce1f303d0aa8ec51$var$FIRMWARE_FIELDS=["firmware","firmware-v2","firmware-v8","firmware-btc-v8"],$ce1f303d0aa8ec51$var$FIRMWARE_FIELD_TYPE_MAP={firmware:$3FhS8.EFirmwareType.Universal,"firmware-v2":$3FhS8.EFirmwareType.Universal,"firmware-v8":$3FhS8.EFirmwareType.Universal,"firmware-btc-v8":$3FhS8.EFirmwareType.BitcoinOnly};function $ce1f303d0aa8ec51$var$getFirmwareTypeFromField(r){let i=$ce1f303d0aa8ec51$var$FIRMWARE_FIELD_TYPE_MAP[r];return void 0===i?$3FhS8.EFirmwareType.Universal:i}class $ce1f303d0aa8ec51$var$DataManager{static enrichFirmwareReleaseInfo(r){if(!r||"object"!=typeof r)return{firmware:[],ble:[]};let i=Object.assign({},r);return $ce1f303d0aa8ec51$var$FIRMWARE_FIELDS.forEach(r=>{let n=i[r];if(n&&Array.isArray(n)&&0!==n.length)try{i[r]=n.map(i=>{if(!i||"object"!=typeof i||i.firmwareType)return i;let n=$ce1f303d0aa8ec51$var$getFirmwareTypeFromField(r);return Object.assign(Object.assign({},i),{firmwareType:n})})}catch(i){console.error(`Error enriching firmware field "${r}":`,i)}}),i}static load(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.settings=r,!r.fetchConfig)return;let i=r.preRelease?"https://data.onekey.so/pre-config.json":"https://data.onekey.so/config.json",n=`${i}?noCache=${$ce1f303d0aa8ec51$var$getTimeStamp()}`,s=null,a="none";if(r.configFetcher){$ce1f303d0aa8ec51$var$Log$e.debug("[DataConfig] Trying configFetcher (client-side fetcher)...");try{(s=yield r.configFetcher(n))?(a="configFetcher",$ce1f303d0aa8ec51$var$Log$e.log("[DataConfig] ConfigFetcher success")):$ce1f303d0aa8ec51$var$Log$e.debug("[DataConfig] ConfigFetcher returned null, will fallback to axios")}catch(r){$ce1f303d0aa8ec51$var$Log$e.warn("[DataConfig] ConfigFetcher error, will fallback to axios:",r)}}if(!s){$ce1f303d0aa8ec51$var$Log$e.debug("[DataConfig] Trying axios (SDK default fetcher)...");try{let r=yield $ce1f303d0aa8ec51$var$axios__default.default.get(n,{timeout:7e3});s=r.data,a="axios",$ce1f303d0aa8ec51$var$Log$e.log("[DataConfig] Axios fetch success")}catch(r){$ce1f303d0aa8ec51$var$Log$e.warn("[DataConfig] Axios fetch error:",r)}}s?($ce1f303d0aa8ec51$var$Log$e.log(`[DataConfig] Config loaded successfully via [${a}]`),this.deviceMap={[$3FhS8.EDeviceType.Classic]:this.enrichFirmwareReleaseInfo(s.classic),[$3FhS8.EDeviceType.Classic1s]:this.enrichFirmwareReleaseInfo(s.classic1s),[$3FhS8.EDeviceType.ClassicPure]:this.enrichFirmwareReleaseInfo(s.classicpure),[$3FhS8.EDeviceType.Mini]:this.enrichFirmwareReleaseInfo(s.mini),[$3FhS8.EDeviceType.Touch]:this.enrichFirmwareReleaseInfo(s.touch),[$3FhS8.EDeviceType.Pro]:this.enrichFirmwareReleaseInfo(s.pro)},this.assets={bridge:s.bridge}):$ce1f303d0aa8ec51$var$Log$e.warn("[DataConfig] All fetch methods failed, using built-in default config")})}static updateEnv(r){if(this.settings){let i=this.settings.env;this.settings=Object.assign(Object.assign({},this.settings),{env:r}),console.debug(`DataManager env updated: ${i} -> ${r}`)}}static checkAndReloadData(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$getTimeStamp()-this.lastCheckTimestamp>108e5&&(yield this.load(this.settings).then(()=>{this.lastCheckTimestamp=$ce1f303d0aa8ec51$var$getTimeStamp()}))})}static getProtobufMessages(r="latest"){return this.messages[r]}static getSettings(r){return this.settings?"string"==typeof r?this.settings[r]:this.settings:null}}$ce1f303d0aa8ec51$var$_a$1=$ce1f303d0aa8ec51$var$DataManager,$ce1f303d0aa8ec51$var$DataManager.deviceMap={[$3FhS8.EDeviceType.Classic]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Classic1s]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Mini]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Touch]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.Pro]:{firmware:[],ble:[]},[$3FhS8.EDeviceType.ClassicPure]:{firmware:[],ble:[]}},$ce1f303d0aa8ec51$var$DataManager.assets=null,$ce1f303d0aa8ec51$var$DataManager.messages={latest:$ce1f303d0aa8ec51$var$MessagesJSON,v1:$ce1f303d0aa8ec51$var$MessagesLegacyV1JSON},$ce1f303d0aa8ec51$var$DataManager.lastCheckTimestamp=0,$ce1f303d0aa8ec51$var$DataManager.getFirmwareStatus=(r,i)=>{var n,s;let a=$ce1f303d0aa8ec51$var$getDeviceType(r);if(a===$3FhS8.EDeviceType.Unknown)return"unknown";let o=$ce1f303d0aa8ec51$var$getFirmwareType(r),d=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r);if(!1===r.firmware_present)return"none";if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(a)&&r.bootloader_mode)return"unknown";let f=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),l=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[a])||void 0===n?void 0:n[f])&&void 0!==s?s:[],u=d.join(".");return l.length>0&&o!==i&&(u="0.0.0"),$ce1f303d0aa8ec51$var$getReleaseStatus(l,u)},$ce1f303d0aa8ec51$var$DataManager.getSysResourcesLatestRelease=({features:r,forcedUpdateRes:i,firmwareType:n})=>{var s,a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r),f=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r);if(d!==$3FhS8.EDeviceType.Pro&&d!==$3FhS8.EDeviceType.Touch)return;let l=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:n}),u=null!==(a=null===(s=$ce1f303d0aa8ec51$var$_a$1.deviceMap[d])||void 0===s?void 0:s[l])&&void 0!==a?a:[],c=f.join("."),p=u.filter(r=>i?!!r.resource:$ce1f303d0aa8ec51$var$semver__default.default.gt(r.version.join("."),c)&&!!r.resource);return null===(o=$ce1f303d0aa8ec51$var$findLatestRelease(p))||void 0===o?void 0:o.resource},$ce1f303d0aa8ec51$var$DataManager.getSysFullResource=(r,i)=>{var n,s,a;let o=$ce1f303d0aa8ec51$var$getDeviceType(r);if(o===$3FhS8.EDeviceType.Unknown||o!==$3FhS8.EDeviceType.Pro&&o!==$3FhS8.EDeviceType.Touch)return;let d=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),f=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[o])||void 0===n?void 0:n[d])&&void 0!==s?s:[],l=f.filter(r=>!!r.fullResource);return null===(a=$ce1f303d0aa8ec51$var$findLatestRelease(l))||void 0===a?void 0:a.fullResource},$ce1f303d0aa8ec51$var$DataManager.getBootloaderResource=(r,i)=>{var n,s,a;let o=$ce1f303d0aa8ec51$var$getDeviceType(r);if(o===$3FhS8.EDeviceType.Unknown)throw Error("Device type is unknown");if(o!==$3FhS8.EDeviceType.Pro&&o!==$3FhS8.EDeviceType.Touch)return;let d=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),f=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[o])||void 0===n?void 0:n[d])&&void 0!==s?s:[];if(0===f.length)throw Error(`Could not found bootloader resource with deviceType:${o} firmwareUpdateField:${d}`);let l=f.filter(r=>!!r.bootloaderResource);return null===(a=$ce1f303d0aa8ec51$var$findLatestRelease(l))||void 0===a?void 0:a.bootloaderResource},$ce1f303d0aa8ec51$var$DataManager.getBootloaderTargetVersion=(r,i)=>{var n,s,a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r);if(d===$3FhS8.EDeviceType.Unknown)return;let f=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),l=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[d])||void 0===n?void 0:n[f])&&void 0!==s?s:[],u=l.filter(r=>!!r.bootloaderResource);return null!==(o=null===(a=null==u?void 0:u[0])||void 0===a?void 0:a.bootloaderVersion)&&void 0!==o?o:void 0},$ce1f303d0aa8ec51$var$DataManager.getBootloaderRelatedFirmwareVersion=(r,i)=>{var n,s,a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r);if(d===$3FhS8.EDeviceType.Unknown||!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(d))return;let f=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),l=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[d])||void 0===n?void 0:n[f])&&void 0!==s?s:[],u=l.filter(r=>!!r.bootloaderRelatedFirmwareVersion);return null!==(o=null===(a=null==u?void 0:u[0])||void 0===a?void 0:a.bootloaderRelatedFirmwareVersion)&&void 0!==o?o:void 0},$ce1f303d0aa8ec51$var$DataManager.getFirmwareChangelog=(r,i)=>{var n,s;let a=$ce1f303d0aa8ec51$var$getDeviceType(r);if(a===$3FhS8.EDeviceType.Unknown)return[];let o=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r),d=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),f=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[a])||void 0===n?void 0:n[d])&&void 0!==s?s:[];if(!1===r.firmware_present||$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(a)&&r.bootloader_mode)return $ce1f303d0aa8ec51$var$getReleaseChangelog(f,"0.0.0");let l=o.join(".");return $ce1f303d0aa8ec51$var$getReleaseChangelog(f,l)},$ce1f303d0aa8ec51$var$DataManager.getFirmwareLatestRelease=(r,i)=>{var n,s;let a=$ce1f303d0aa8ec51$var$getDeviceType(r);if(a===$3FhS8.EDeviceType.Unknown)return;let o=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:"firmware",firmwareType:i}),d=null!==(s=null===(n=$ce1f303d0aa8ec51$var$_a$1.deviceMap[a])||void 0===n?void 0:n[o])&&void 0!==s?s:[],f=$ce1f303d0aa8ec51$var$findLatestRelease(d);if(!f)return f;if(!f.resource){let n=$ce1f303d0aa8ec51$var$_a$1.getSysResourcesLatestRelease({features:r,firmwareType:i});return Object.assign(Object.assign({},f),{resource:n})}return f},$ce1f303d0aa8ec51$var$DataManager.getBLEFirmwareStatus=r=>{var i,n;let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(s===$3FhS8.EDeviceType.Unknown)return"unknown";let a=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(r);if(!a)return"none";let o=null!==(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.deviceMap[s])||void 0===i?void 0:i.ble)&&void 0!==n?n:[],d=a.join(".");return $ce1f303d0aa8ec51$var$getReleaseStatus(o,d)},$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareChangelog=r=>{var i,n;let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(s===$3FhS8.EDeviceType.Unknown)return[];let a=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(r);if(!a)return[];let o=null!==(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.deviceMap[s])||void 0===i?void 0:i.ble)&&void 0!==n?n:[],d=a.join(".");return $ce1f303d0aa8ec51$var$getReleaseChangelog(o,d)},$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareLatestRelease=r=>{var i,n;let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(s===$3FhS8.EDeviceType.Unknown)return;let a=null!==(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.deviceMap[s])||void 0===i?void 0:i.ble)&&void 0!==n?n:[];return $ce1f303d0aa8ec51$var$findLatestRelease(a)},$ce1f303d0aa8ec51$var$DataManager.getTransportStatus=r=>{var i,n;let s=null===(n=null===(i=$ce1f303d0aa8ec51$var$_a$1.assets)||void 0===i?void 0:i.bridge)||void 0===n?void 0:n.version;if(!s)return"valid";let a=$ce1f303d0aa8ec51$var$semver__default.default.gte(r,s.join("."));return a?"valid":"outdated"},$ce1f303d0aa8ec51$var$DataManager.getBridgeChangelog=()=>{var r;return null===(r=$ce1f303d0aa8ec51$var$_a$1.assets)||void 0===r?void 0:r.bridge.changelog},$ce1f303d0aa8ec51$var$DataManager.isBleConnect=r=>"react-native"===r||"lowlevel"===r||"desktop-web-ble"===r,$ce1f303d0aa8ec51$var$DataManager.isDesktopWebUsb=r=>"desktop-webusb"===r,$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb=r=>"webusb"===r;const $ce1f303d0aa8ec51$var$PROTOBUF_MESSAGE_CONFIG={model_mini:[{minVersion:"3.3.0",messageVersion:"latest"},{minVersion:"0.0.1",messageVersion:"v1"},{minVersion:"0.0.0",messageVersion:"latest"}],model_touch:[{minVersion:"4.5.0",messageVersion:"latest"},{minVersion:"0.0.1",messageVersion:"v1"},{minVersion:"0.0.0",messageVersion:"latest"}]},$ce1f303d0aa8ec51$var$getSupportMessageVersion=r=>{var i;if(!r)return{messages:$ce1f303d0aa8ec51$var$DataManager.messages.latest,messageVersion:"latest"};let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),s=$ce1f303d0aa8ec51$var$getDeviceType(r),a=$ce1f303d0aa8ec51$var$PROTOBUF_MESSAGE_CONFIG[s]||$ce1f303d0aa8ec51$var$DeviceTypeToModels[s]&&$ce1f303d0aa8ec51$var$DeviceTypeToModels[s].map(r=>$ce1f303d0aa8ec51$var$PROTOBUF_MESSAGE_CONFIG[r]).find(r=>void 0!==r),o=null!==(i=null==a?void 0:a.sort((r,i)=>$ce1f303d0aa8ec51$var$semver__default.default.compare(i.minVersion,r.minVersion)))&&void 0!==i?i:[];for(let{minVersion:r,messageVersion:i}of o)if($ce1f303d0aa8ec51$var$semver__default.default.gte(n,r))return{messages:$ce1f303d0aa8ec51$var$DataManager.messages[i],messageVersion:i};return{messages:$ce1f303d0aa8ec51$var$DataManager.messages.latest,messageVersion:"latest"}},$ce1f303d0aa8ec51$var$supportInputPinOnSoftware=r=>{if(!r)return{support:!1};let i=$ce1f303d0aa8ec51$var$getDeviceType(r);if(i===$3FhS8.EDeviceType.Touch||i===$3FhS8.EDeviceType.Pro)return{support:!1};let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return{support:$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"2.3.0"),require:"2.3.0"}},$ce1f303d0aa8ec51$var$supportNewPassphrase=r=>{if(!r)return{support:!1};let i=$ce1f303d0aa8ec51$var$getDeviceType(r);if(i===$3FhS8.EDeviceType.Touch||i===$3FhS8.EDeviceType.Pro)return{support:!0};let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return{support:$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"2.4.0"),require:"2.4.0"}},$ce1f303d0aa8ec51$var$getPassphraseStateWithRefreshDeviceInfo=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var n,s,a,o,d;let{features:f,commands:l}=r,u=(null==f?void 0:f.unlocked)===!1,{passphraseState:c,newSession:p,unlockedAttachPin:h}=yield $ce1f303d0aa8ec51$var$getPassphraseState(f,l,Object.assign({},i)),g=$ce1f303d0aa8ec51$var$getDeviceType(f)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(f)===$3FhS8.EDeviceType.Pro,m=c&&(null==f?void 0:f.passphrase_protection)!==!0,v=g&&u;return(v||m)&&(yield r.getFeatures()),(null==f?void 0:f.device_id)&&r.updateInternalState(null!==(s=null===(n=r.features)||void 0===n?void 0:n.passphrase_protection)&&void 0!==s&&s,c,null!==(o=null===(a=r.features)||void 0===a?void 0:a.device_id)&&void 0!==o?o:"",p,null===(d=r.features)||void 0===d?void 0:d.session_id),{passphraseState:c,newSession:p,unlockedAttachPin:h}}),$ce1f303d0aa8ec51$var$getPassphraseState=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){if(!r)return{passphraseState:void 0,newSession:void 0,unlockedAttachPin:void 0};let s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r),a=$ce1f303d0aa8ec51$var$getDeviceType(r),o=$ce1f303d0aa8ec51$var$existCapability(r,$5xch2.Enum_Capability.Capability_AttachToPin),d=o||a===$3FhS8.EDeviceType.Pro&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s.join("."),"4.15.0");if(d){let{message:r,type:s}=yield i.typedCall("GetPassphraseState","PassphraseState",{passphrase_state:(null==n?void 0:n.onlyMainPin)?void 0:null==n?void 0:n.expectPassphraseState});if("CallMethodError"===s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Get the passphrase state error");return{passphraseState:r.passphrase_state,newSession:r.session_id,unlockedAttachPin:r.unlocked_attach_pin}}let{message:f,type:l}=yield i.typedCall("GetAddress","Address",{address_n:[$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$toHardened(1),$ce1f303d0aa8ec51$var$toHardened(0),0,0],coin_name:"Testnet",script_type:"SPENDADDRESS",show_display:!1});if("CallMethodError"===l)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Get the passphrase state error");return{passphraseState:f.address,newSession:void 0,unlockedAttachPin:void 0}}),$ce1f303d0aa8ec51$var$supportBatchPublicKey=(r,i)=>{if(!r)return!1;let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),s=$ce1f303d0aa8ec51$var$getDeviceType(r);return(null==i?void 0:i.includeNode)&&s===$3FhS8.EDeviceType.Pro?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"4.14.0"):(null==i?void 0:i.includeNode)&&s===$3FhS8.EDeviceType.Touch?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"4.11.0"):(null==i?void 0:i.includeNode)&&$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic1s.includes(s)?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"3.12.0"):(null==i?void 0:i.includeNode)&&$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(s)?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"3.10.0"):(null==i||!i.includeNode)&&(s===$3FhS8.EDeviceType.Touch||s===$3FhS8.EDeviceType.Pro?$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"3.1.0"):$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"2.6.0"))},$ce1f303d0aa8ec51$var$supportModifyHomescreen=r=>{if(!r)return{support:!1};let i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),n=$ce1f303d0aa8ec51$var$getDeviceType(r);return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(n)?{support:!0}:{support:$ce1f303d0aa8ec51$var$semver__default.default.gte(i,"3.4.0")}},$ce1f303d0aa8ec51$var$getLatestFirmwareField=r=>"bitcoinonly"===r?"firmware-btc-v8":"firmware-v8",$ce1f303d0aa8ec51$var$getFirmwareUpdateField=({features:r,updateType:i,targetVersion:n,firmwareType:s})=>{let a=$ce1f303d0aa8ec51$var$getDeviceType(r),o=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r);if("ble"===i)return"ble";let d=$ce1f303d0aa8ec51$var$getLatestFirmwareField(s);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(a))return d;if(a===$3FhS8.EDeviceType.Touch){if(n){if($ce1f303d0aa8ec51$var$semver__default.default.eq(n,"4.0.0"))return"firmware-v2";if($ce1f303d0aa8ec51$var$semver__default.default.gt(n,"4.0.0"))return d}return $ce1f303d0aa8ec51$var$semver__default.default.lt(o.join("."),"3.4.0")?"firmware":d}return a===$3FhS8.EDeviceType.Pro?d:"firmware"},$ce1f303d0aa8ec51$var$getFirmwareUpdateFieldArray=(r,i)=>{let n=$ce1f303d0aa8ec51$var$getDeviceType(r);if("ble"===i)return["ble"];if("classic"===n||"classic1s"===n||"mini"===n||"classicpure"===n)return["firmware-v8"];if("touch"===n){let i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return $ce1f303d0aa8ec51$var$semver__default.default.gt(i,"4.0.0")?["firmware-v8","firmware"]:$ce1f303d0aa8ec51$var$semver__default.default.gte(i,"4.0.0")?["firmware-v2","firmware"]:!i||$ce1f303d0aa8ec51$var$semver__default.default.lt(i,"3.0.0")?["firmware-v8","firmware-v2","firmware"]:["firmware"]}return"pro"===n?["firmware-v8"]:["firmware"]};function $ce1f303d0aa8ec51$var$fixVersion(r){let i=r.split(".");for(;i.length<3;)i.push("0");return(i=i.map(r=>$7U5sq.isNaN(parseInt(r,10))?"0":r)).join(".")}const $ce1f303d0aa8ec51$var$fixFeaturesFirmwareVersion=r=>{let i=Object.assign({},r);return i.onekey_firmware_version&&!$ce1f303d0aa8ec51$var$semver__default.default.valid(i.onekey_firmware_version)&&(i.onekey_firmware_version=$ce1f303d0aa8ec51$var$fixVersion(i.onekey_firmware_version)),i.onekey_version&&!$ce1f303d0aa8ec51$var$semver__default.default.valid(i.onekey_version)&&(i.onekey_version=$ce1f303d0aa8ec51$var$fixVersion(i.onekey_version)),i};var $c1edd194c2ff5fa7$exports={};$c1edd194c2ff5fa7$exports=JSON.parse('{"name":"@onekeyfe/hd-core","version":"1.1.26-alpha.8","description":"Core processes and APIs for communicating with OneKey hardware devices.","author":"OneKey","homepage":"https://github.com/OneKeyHQ/hardware-js-sdk#readme","license":"ISC","main":"dist/index.js","types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/OneKeyHQ/hardware-js-sdk.git"},"publishConfig":{"access":"public"},"scripts":{"dev":"rimraf dist && rollup -c ../../build/rollup.config.js -w","build":"rimraf dist && rollup -c ../../build/rollup.config.js","lint":"eslint .","lint:fix":"eslint . --fix","test":"jest"},"bugs":{"url":"https://github.com/OneKeyHQ/hardware-js-sdk/issues"},"dependencies":{"@onekeyfe/hd-shared":"1.1.26-alpha.8","@onekeyfe/hd-transport":"1.1.26-alpha.8","axios":"1.15.0","bignumber.js":"^9.0.2","bytebuffer":"^5.0.1","jszip":"^3.10.1","parse-uri":"^1.0.7","semver":"^7.3.7"},"peerDependencies":{"@noble/hashes":"^1.1.3"},"devDependencies":{"@noble/hashes":"^1.1.3","@types/parse-uri":"^1.0.0","@types/semver":"^7.3.9","@types/w3c-web-usb":"^1.0.10","@types/web-bluetooth":"^0.0.21"},"gitHead":"f8267f4b63086b9d0bd61b0a3a41912c4c197291"}');const $ce1f303d0aa8ec51$var$getSDKVersion=()=>$c1edd194c2ff5fa7$exports.version,$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN=`https://jssdk.onekey.so/${$ce1f303d0aa8ec51$var$getSDKVersion()}/`,$ce1f303d0aa8ec51$var$whitelist=[{origin:"file://"},{origin:"1key.so"},{origin:"onekey.so"},{origin:"onekeycn.com"},{origin:"onekeytest.com"},{origin:"localhost"}],$ce1f303d0aa8ec51$var$whitelistExtension=["jnmbobjmhlngoefaiojfljckilhhlhcj","acmacodkjbdgmoleebolmdjonilkdbch","mcohilncbfahbmgdjkbpemcciiolgcge"],$ce1f303d0aa8ec51$var$DEFAULT_PRIORITY=2,$ce1f303d0aa8ec51$var$initialSettings={configSrc:"./data/config.json",version:"",debug:!1,priority:$ce1f303d0aa8ec51$var$DEFAULT_PRIORITY,trustedHost:!1,connectSrc:$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN,iframeSrc:`${$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN}iframe.html`,parentOrigin:"undefined"!=typeof window&&window.location?window.location.origin:"",extension:"undefined"!=typeof chrome&&(null===($ce1f303d0aa8ec51$var$_a=null==chrome?void 0:chrome.runtime)||void 0===$ce1f303d0aa8ec51$var$_a?void 0:$ce1f303d0aa8ec51$var$_a.id)||"",supportedBrowser:"undefined"==typeof navigator||!/Trident|MSIE|Edge/.test(navigator.userAgent),env:"web",lazyLoad:!1,timestamp:new Date().getTime()},$ce1f303d0aa8ec51$var$getEnv=()=>{if("undefined"!=typeof chrome&&chrome.runtime&&void 0!==chrome.runtime.onConnect)return"webextension";if("undefined"!=typeof navigator){if("string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase())return"react-native";let r=navigator.userAgent.toLowerCase();if(r.indexOf(" electron/")>-1)return"electron"}return"web"},$ce1f303d0aa8ec51$var$corsValidator=r=>{if("string"==typeof r)return r.match(/^https:\/\/([A-Za-z0-9\-_]+\.)*onekey\.so\//)||r.match(/^https?:\/\/localhost:[58][0-9]{3}\//),r},$ce1f303d0aa8ec51$var$parseConnectSettings=(r={})=>{let i;let n=Object.assign({},$ce1f303d0aa8ec51$var$initialSettings);Object.prototype.hasOwnProperty.call(r,"debug")&&(n.debug=r.debug),r.isFrame&&(n.parentOrigin=r.parentOrigin),"string"==typeof r.connectSrc&&(n.connectSrc=r.connectSrc),"undefined"!=typeof window?i=window.ONEKEY_CONNECT_SRC:void 0!==$parcel$global&&(i=$parcel$global.ONEKEY_CONNECT_SRC),"string"==typeof i&&(n.connectSrc=$ce1f303d0aa8ec51$var$corsValidator(i),n.debug=!0);let s=n.connectSrc||$ce1f303d0aa8ec51$var$DEFAULT_DOMAIN;return n.iframeSrc=`${s}iframe.html`,r.transportReconnect&&(n.transportReconnect=r.transportReconnect),r.lazyLoad&&(n.lazyLoad=r.lazyLoad),"string"==typeof r.env?n.env=r.env:n.env=$ce1f303d0aa8ec51$var$getEnv(),r.timestamp&&(n.timestamp=r.timestamp),r.preRelease&&(n.preRelease=r.preRelease),r.fetchConfig&&(n.fetchConfig=r.fetchConfig),n};function $ce1f303d0aa8ec51$var$shouldUpdateBootloaderForClassicAndMini({currentVersion:r,bootloaderVersion:i,willUpdateFirmware:n,targetBootloaderVersion:s,bootloaderRelatedFirmwareVersion:a}){return!(s&&$ce1f303d0aa8ec51$var$semver__default.default.gte(i,s.join(".")))&&!!($ce1f303d0aa8ec51$var$semver__default.default.gte(n,a.join("."))||$ce1f303d0aa8ec51$var$semver__default.default.gte(r,a.join(".")))}function $ce1f303d0aa8ec51$var$isEnteredManuallyBoot(r,i){let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=n===$3FhS8.EDeviceType.Mini,a="firmware"===i&&n===$3FhS8.EDeviceType.Classic&&"1.8.3"===r.bootloader_version;return s||a}function $ce1f303d0aa8ec51$var$checkNeedUpdateBootForTouch(r,i){let n=$ce1f303d0aa8ec51$var$getDeviceType(r);if(!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(n))return!1;let s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),a=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(r).join("."),o=$ce1f303d0aa8ec51$var$DataManager.getBootloaderTargetVersion(r,i);return!!o&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s,"3.2.0")&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s,"4.1.0")&&$ce1f303d0aa8ec51$var$semver__default.default.lte(a,o.join("."))}function $ce1f303d0aa8ec51$var$checkNeedUpdateBootForClassicAndMini({features:r,willUpdateFirmware:i,firmwareType:n}){let s=$ce1f303d0aa8ec51$var$getDeviceType(r);if(!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(s)||!i)return!1;let a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),o=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(r).join("."),d=$ce1f303d0aa8ec51$var$DataManager.getBootloaderTargetVersion(r,n);if(d&&$ce1f303d0aa8ec51$var$semver__default.default.gte(o,d.join(".")))return!1;let f=$ce1f303d0aa8ec51$var$DataManager.getBootloaderRelatedFirmwareVersion(r,n);return!!f&&$ce1f303d0aa8ec51$var$shouldUpdateBootloaderForClassicAndMini({currentVersion:a,bootloaderVersion:o,willUpdateFirmware:i,targetBootloaderVersion:d,bootloaderRelatedFirmwareVersion:f})}const $ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE$1=16384;function $ce1f303d0aa8ec51$var$checkBootloaderLength(r){let i=new Uint8Array(r.slice(0,Math.min($ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE$1,r.byteLength))),n=$ce1f303d0aa8ec51$var$ByteBuffer__default.default.wrap(i,void 0,void 0,!0);n.LE(),n.readByte(),n.readByte(),n.readByte(),n.readByte();let s=n.readUint32();n.readUint32();let a=n.readUint32(),o=s+a;return o===r.byteLength}const $ce1f303d0aa8ec51$var$LANGUAGE_LABELS={en:"English",zh_cn:"简体中文",zh_hk:"繁體中文",ja:"日本語",ko:"한국어",fr:"Fran\xe7ais",de:"Deutsch",ru:"Russian",es:"Spanish",it:"Italiano",pt_br:"Portuguese (Brazil)"},$ce1f303d0aa8ec51$var$getLanguageConfig=r=>{let i=[];switch(r){case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Mini:i=["en","zh_cn"];break;case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.ClassicPure:i=["en","zh_cn","zh_hk","ja","pt_br","de","ko"];break;case $3FhS8.EDeviceType.Touch:case $3FhS8.EDeviceType.Pro:i=Object.keys($ce1f303d0aa8ec51$var$LANGUAGE_LABELS);break;default:i=[]}return i.map(r=>({code:r,label:$ce1f303d0aa8ec51$var$LANGUAGE_LABELS[r]}))},$ce1f303d0aa8ec51$var$getAutoLockOptions=r=>{switch(r){case $3FhS8.EDeviceType.Mini:case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.ClassicPure:return[{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:2,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];case $3FhS8.EDeviceType.Touch:case $3FhS8.EDeviceType.Pro:return[{seconds:30,minute:0,hour:0,day:0},{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:2,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:30,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];default:return[]}},$ce1f303d0aa8ec51$var$getAutoShutDownOptions=r=>{switch(r){case $3FhS8.EDeviceType.Mini:return[];case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.ClassicPure:return[{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:3,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];case $3FhS8.EDeviceType.Touch:case $3FhS8.EDeviceType.Pro:return[{seconds:0,minute:1,hour:0,day:0},{seconds:0,minute:2,hour:0,day:0},{seconds:0,minute:5,hour:0,day:0},{seconds:0,minute:10,hour:0,day:0},{seconds:0,minute:0,hour:0,day:0}];default:return[]}},$ce1f303d0aa8ec51$var$getT1Data=()=>({default:{name:"default",hex:""},original:{name:"original",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000003c000000000000000000000000000003fc000000000000000000000000000003fc000000000000000000000000000003fc000000000000000000000000000003fc0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000ff000000000000000000000000000003ffc00000000000000000000000000003ffc0000000000000000000000000000f00f0000000000000000000000000000f00f0000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000003c003c000000000000000000000000000f00f0000000000000000000000000000f00f00000000000000000000000000003ffc00000000000000000000000000003ffc00000000000000000000000000000ff000000000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},circleweb:{name:"circleweb",hex:"00486003070c08080c01c1c0380000c0007cc003fc04080c08017f801800018000f7c0033806080c08031d80180001000088400218020c0c0802018018000700008040020e0304041806018018003f0001f0400206010404180401803000f9000188e00403018604100c03c06003e180030fe00c01808e3e10080271f01f0180070f383e00c0fe7f3018041fb83c00801e880ff38060e1e3fc10080e0ee000c0f87007c0c020c0c1c610101c0780006078600300703f80c18320201803000070182003001c3b80c1816040100300007f0c6001000660c0e383f08010010007fc0660030001c043ff8319001001007cf00340030000c07f9cfe0e00100307e0c00160030000c07c84fe0e0078033e00c001e003e001c0d8c48e0c03cc0fe0018001f006ffc7f38c448e0c0e07ff00018001b80c03fc3f06669bfe7807fc000180019e3800181f062293e7c0071c00018001ffe0001809831292c1000c060007c001e0c0001808c3929481001c02007fc003806000181071bfa48100780307f0e0030020001c3038ffe8c30ff801fe00600700303ffff00c3ff8eff81801e000300e001fe071fe07381a7f00180100003f1e0010006043e7600c430018030000f9f200100040603ce007c30008060001c0c600100040600cc006c3000c0c00018083003000406007c007e3800f3800030083002001c07ffcc007fffe3ff0000200838060ffe0f1fc40071c0fe07000020047c0ffc03f800cc0061800c0300006003cfff00039c01fe00e1800c010007e00207fc00030c1fe701f38018018ffff002cc06000607f863c71fe01801fe0030033802000403c063ff0c3c0801800038021003003c0300e2311c07880180001802300103e402039e31f700fc0300000c0760013c06060e1e31e1807c0600000f966001c0031ff813ff40c07e1c00003ffc20018001f0e0333e607183fc0000601c20010000e0606222203900ff0000c00c70030007e020c662101f00e7fe00800fd803003ec0218463180600601ff90000780601f0c03f086308060060007f00003e0e0780607f886104fe0060000300001ff9fc0060c0f841079e0040000100000dc060003f807041060600c000018000058060007b807041840301f00001800007003001c1007fc3ec01831c00008000070010070100706c3c01fe07000fc0000600181c018060380c01f001c078e010060018700380c0300c01e00070c03870060018c006e1c010040330001d801fd00e001b001c7ec0100606180007000e001a001c003818c03007fc0c00030006003f003c00701040300ffc0e000300040fc3807f00e02060f0080c07000300040680c1c18180407f98380603800300060300ff00c300405f87fc0301c00300060100ce006600808183c40100e1ff000711008600380100818106018063038009f"},circuit:{name:"circuit",hex:"ffffffc18380002180001c0380f00c0000000041038000608000380701e0180000000063038000608000700e03c030400000003e038000218000e01c078060e000000000038000330001c0380f00c1b0000000000380001e000380701e0183180000001c03800000000700e03c03060c0000003703800000000e01c078060c060000006103800000001c0380f00c1803ffffffc18387ff8000380701e0183001ffffffc18387ff8000700e03c0306000000000610387ff8000e01c078060c000000000330387878001c0380f00c180000000001c038707800380701e0183038000000000038703800700e03c030606c000000000038707800e01c078060c0c6000000000038787801c0380f00c181830ffffffc00387ff80380701e018303018ffffffe00387ff80700e03c03060600c000000600387ff80e01c078060c0c0060000006003800001c0380f00c18180033ffffe600380000380701e01830300013ffffe600380000700e03c03060600003ffffe600380000e01c078060c0c02013ffffe600380001c0380f00c181807013c001e6007c000380701e01830300f813c001e600fe000700e03c03060601fc13c001e601ff000e01c078060c0c03de03c001e601ff001c0380f00c1818078f03c001e601ff00380701e01830300f0783c001e601ff00700e03c03060601e03c3c001e600ff00e01c078060c0c03c01e3c001e600fe01c0380f00c181807800f3c001e600380380701e01830300f00073c001e600000700e03c03060601e00033c001e600000e01c078060c0c03c00013c001e600001c0380f00c181807800003c001e60000380701e01830300f000003ffffe60000700e03c03060601e0c0013ffffe60000e01c078060c0c03c1f0033ffffe60001c0380f00c1818078218073ffffe6000380701e01830300f06080f0000006000700e03c03060601e06081e0000006000e01c078060c0c03c02083cffffffe001c0380f00c1818078133078ffffffc00380701e01830300f07de0f0000000000700e03c03060601e08401e0000000000e01c078060c0c03c18203c0000000001c0380f00c1818078102078100000000380701e01830300f01860f0200000000700e03c03060601e00c41e0400000000e01c078060c0c03c00783c0800078001c0380f00c181807800007810000cc00380701e01830300f00000f0200018600700e03c03060600780001e040fff0200e01c078060c03003c0003c0800018201c0380f00c1801801e00078100000860380701e3f80c00c00f000f0200000fc0700e03c63006006007801e0400000300e01c07841003003003c03c08001c0001c0380f041001801801e078100066000380701e041000c00c00f0f0200043000700e03c0630006006e079e04000c1000e01c07803e0003003b83fc08038"},starweb:{name:"starweb",hex:"01e600002f804210c218803f80001bc01f86000020f04610e31883c10000187ef1890000200e4331a1308e010000042331190ffe2003c1e010e070010ffe2623221108022000e04210c0c001180622112221880223e078040803c0f11004211144218c0222386404080cc31110047108444204022308230004104611100c5088cc46440201081188046246311008188c88844603110890c800c2462010180844888c420311f88830038446e230108c441088e33e10188810030447823e10c4421108a1e0100084180208400203e046221111000008008618060840040000222223111000180002140b104006000222112233180ffe1e830219104f1ff8023111222220f00701c1221120e01807c0111162220780058070a1210180680078111044646e0000403c80e14780c0001d888844446203e23006e0c1990110e01988884447830e201821e0c1e10601fc107888844e010c3106006041c1082104201c8888d8008410030030c1823002086006c448e030c210808030c3024042184301c44880f841e0407818e6048081f087c0443b038c2080203c1dae070180610c70351c0e061000fffe17ba0fffc003081c0e181802180e08038b36380438061006067c30030c300401f937f000070c30030fd2080186c002009daf601000d8600612110403038001004decc0200070300c221182060dffc0c063f980c07fec18186211c18818403ffffb37ffff00860c30e21120f0602000fe0e1c1fe00101834122111060c0180303861870300200c1822211180102060c007e1f800c08106006221116020f813000c738c0062078100e2211130418c0f0031ffe2003c0c608122211118830618f07fbf7f81c608304622211113070c3007f32d33f8030c383a2220191301d8600f026d903c0184603222088914c070c03606edd81b00c380ca26088998300181c4076db808e0400186644888981c010e080e7f9c0418200e0644488890070230181873860607103802444888a100e6c0107061838200d8e001c44888c3c03f0033f06183a3003f00f0c44c0486700b007c6061838f803c03984c0444841c180ec0c04083c0c0060e08488445080610008180c1c06040021804288446180620008321e1e12040011806108442100421810222e1911040610802108624200c43f10424a1490823f08c01091e24600846310838924704231884018913283818842010309243022108c4078530f807908c2220611a01811108427c07c03800708fe240c10c20c091ec43c007081b00010f0283210c2130d07c20003e0c28e00100039c210c210c70002001c504484e010003e0200c2101f000201f848c44437f003f00221211003e0033f98888442233ffe6000221110019fffa110888c2311200060e0261121c1800122310c0a2118c00043a1640923718000c62114"},stars:{name:"stars",hex:"0000000000000000000000000000000007e000000000000000000000000000000ff000000000000000000000000000001ff800000000000000200000000000043ffc00000001000000000000008000007ffe0800000380000000000001c000007ffe00000001000000000000009038007ffe0000000800000000001c00027c007ffe0000002040000000003e0000fe007ffe80000000003ff000003e0000fe007ffe2a00014021fffe00003e0000fe003ffc0080780007ffff80001c00007c001ff80028fc001fffffe00080000038000ff00002fc003ffffff000020000800007e00000fc00fffffffc02000000000000000000fc01ffc63ffe080100010000000800007803ffc63fff000000000000000000000003ffc63fff200080020000000400010007ffc63fff80000000000000000000000fffc63fffc0002008000000020004000fe00007ffc0000000000000000010001fe00000ffe0001020000000010020001fe000007fe0000000000000004000003ffc00003ff0000840000000000080003ffe07c03ff0000000000000002000003ffe07f03ff0000780000000000200007ffe07f83ff8000fc0000000001800007ffe07f83ff8000fc0000000003c00007ffe07f03ff8000fc0000000003c00007ffe07c07ff8000fc0000000001800007ffe0000fff8000780000000000000007ffe00007ff8000000008000001000007ffe00001ff800010001c000000000007ffe07e01ff8000000008000001000007ffe07f80ff8000100020000002000017ffe07fc0ff8000000000000000000043ffe07fc0ff000010004000c002000203ffe07fc0ff500008000000c000000803ffe07f80ff0480000100000004001c01ffe07e01fe0030080000000000000801ffc00001fe0030000400000004000000fe000003fc0000080000000000000000fe00000ffc00000008000000080000007e00003ff800000400000000000000003ffc63fff000000020000000080000003ffc63fff000000780000000000000009ffc63ffe000000fc0000000100000020ffc63ffc000001fe00000000000000003fc63ff0000001fe00000007800000401fffffe0000001fe0000000fc0000e0007ffff84000001fe0000000fd5401f0001fffe00000014fc0000000fc0155f00003ff0010000a0790000000fc0001f0000000000000500000000000780000e000000000040100000400000200000004000000000194000001000000000000010000000003c0000000800008000000004000000003c000000020000000000000000000000180000000080020000000001000000000000000000180800000000006000000000000080003c1c00000000006000000000000000003c0800001000000000000000000000001800000000000000000000000000000000"},bitcoin_b2:{name:"bitcoin_b2",hex:"000000000000000000000000000000000000000000000007800000000000000000000000000000fffc000000000000000000000000000fffffc00000000000000000000000003ffffff0000000000000000000000000fffffffc000000000000000000000003fffffffe000000000000000000000007ffffffff80000000000000000000000fffffffffc0000000000000000000001fffffffffe0000000000000000000007ffffffffff8000000000000000000007ffffffffff800000000000000000000fffffffffffc00000000000000000001fffffc7ffffe00000000000000000003fffff8f3ffff00000000000000000007fffff8f1ffff00000000000000000007fffff8e3ffff8000000000000000000ffffc10e3ffffc000000000000000000ffff800e3ffffc000000000000000001ffffc0003ffffe000000000000000001fffff0001ffffe000000000000000003fffff80007ffff000000000000000003fffff81803ffff000000000000000003fffff83f01ffff000000000000000003fffff03f80ffff000000000000000007fffff03fc0ffff800000000000000007fffff03fc0ffff800000000000000007fffff07fc0ffff800000000000000007ffffe07fc0ffff800000000000000007ffffe03f80ffff80000000000000000fffffe00001ffffc0000000000000000fffffe00003ffffc0000000000000000fffffc00007ffffc0000000000000000fffffc0f807ffffc00000000000000007ffffc0fe03ffff800000000000000007ffffc1ff01ffff800000000000000007ffff81ff81ffff800000000000000007ffff81ff80ffff800000000000000007fff801ff80ffff800000000000000003fff003ff81ffff000000000000000003fff000ff01ffff000000000000000003fffc000001ffff000000000000000003ffff800003ffff000000000000000001ffffc00007fffe000000000000000001ffffc7000ffffe000000000000000000ffffc71ffffffc000000000000000000ffff8f1ffffffc0000000000000000007fff8f1ffffff80000000000000000003fffce3ffffff00000000000000000003ffffe3ffffff00000000000000000001fffffffffffe00000000000000000000fffffffffffc000000000000000000007ffffffffff8000000000000000000007ffffffffff8000000000000000000001fffffffffe0000000000000000000000fffffffffc00000000000000000000007ffffffff800000000000000000000001fffffffe000000000000000000000000fffffffc0000000000000000000000003ffffff00000000000000000000000000fffffc000000000000000000000000000fffc000000000000000000000000000007800000000000000000000000000000000000000000000000"},bitcoin_shade:{name:"bitcoin_shade",hex:"00000000000002aaaa00000000000000000000000000155757600000000000000000000000002aeffef80000000000000000000000015dffffff000000000000000000000003bffbfbab80000000000000000000000ffff7f75540000000000000000000001ffe800aaaa0000000000000000000003fdc00005550000000000000000000007fb000002aa800000000000000000000ffc00000055600000000000000000001ff80007002ae00000000000000000003ff00007801fd00000000000000000007fe00007882fa80000000000000000007fc41c0f1f07f4000000000000000000ff889f8f1e0bea000000000000000001ff113fff1e15fd000000000000000001fe223ffe3c2aff000000000000000003fc440fff3c157f000000000000000003f88883fffc3ebf800000000000000007fd5103fff85f7f800000000000000007faaa23fffe3fbfc00000000000000007f55547f9ff9fdfc0000000000000000feaaa87f07fcfffc0000000000000000ff55547f01fe7dfe0000000000000000feaaa8ff00fe3efe0000000000000001fc5554fe007f5f7e0000000000000001feaaa8fe087f3efe0000000000000001fd7551fc147f1d7f0000000000000001febfe9fc00ff3aff0000000000000001fd77f3ff00ff177f0000000000000001feefebfffffe2eff0000000000000001fd5ff3fffffe1d7f0000000000000001febfe7fbfffc2aff00000000000000017d7fe7f0fff0577f0000000000000000feafeff03fe0eefe0000000000000001dd5d4fe00ff1557d0000000000000000beba0fe207f02a7a00000000000000015555dfe503f854760000000000000000aeabffc283f808ee00000000000000005757ffc143fc11de0000000000000000aaa7ffc2a3fc22be00000000000000005751fff007fc457c00000000000000006ba83ffe0ff889fc00000000000000005d540ffffff801f800000000000000003baa0ffffff003f8000000000000000037d40f7ffff007f000000000000000003fea0f1fffe00fe000000000000000001ff11e3dff800fd000000000000000000ff21e3c08001ba000000000000000000ffc3c3c00001740000000000000000007fc8c7800002ac0000000000000000003ff007800005500000000000000000003ff22780000aa00000000000000000001ffd40000055400000000000000000000ffea88800aa8000000000000000000007ffd11501d50000000000000000000003fff2aa1bfa0000000000000000000000ffffd7fff400000000000000000000007fffffffe800000000000000000000001fffffffd000000000000000000000000fffffffc0000000000000000000000001ffffff000000000000000000000000007ffffc0000000000000000000000000007ffc00000000000000"},bitcoin_b:{name:"bitcoin_b",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000003e0000000000000000000000000000003e1800000000000000000000000000007c1f00000000000000000000000000007c3e00000000000000000000000001007c3e00000000000000000000000001f07c3e00000000000000000000000003fff83c00000000000000000000000003fffc7c00000000000000000000000003fffffc00000000000000000000000001fffffc000000000000000000000000003ffffe000000000000000000000000001fffff800000000000000000000000001fffffe00000000000000000000000001ff7fff00000000000000000000000001fe07ff80000000000000000000000001fe01ffc0000000000000000000000003fe00ffe0000000000000000000000003fe007fe0000000000000000000000003fe003fe0000000000000000000000003fc003fe0000000000000000000000007fc003fe0000000000000000000000007fc003fe0000000000000000000000007fc007fe0000000000000000000000007ff00ffc000000000000000000000000fffffffc000000000000000000000000fffffff8000000000000000000000000fffffff0000000000000000000000000ffffffc0000000000000000000000001ff0fffc0000000000000000000000001ff01ffe0000000000000000000000001fe007ff0000000000000000000000001fe001ff8000000000000000000000003fe000ff8000000000000000000000003fe000ffc000000000000000000000003fc000ffc0000000000000000000000e7fc0007fc0000000000000000000001fffc000ffc0000000000000000000001fffc000ffc0000000000000000000001fffe001ffc0000000000000000000003ffffc07ff80000000000000000000000fffffffff800000000000000000000000ffffffff0000000000000000000000001fffffff0000000000000000000000001ffffffe0000000000000000000000001f3ffffc0000000000000000000000001e0ffff00000000000000000000000003e0f07800000000000000000000000003e1f00000000000000000000000000003e1f00000000000000000000000000003e1f00000000000000000000000000003c3e0000000000000000000000000000043e0000000000000000000000000000003e0000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},bitcoin_full:{name:"bitcoin_full",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e000020000000000000000000000003ff8001e000f000000000000f00000007ffe003e001f000000000000f8000000ffff003c001f030000000000f8000001fe7f803c001f1f0000000000f0000003fe5fc03c00041e000000000040000007f01fe07c00001e000000000000000007f01fe07800001e00000000000000000ff807e07fe01e3ff03fc0fe01e0ff800ff8c3f07ff03e3ff0ffc1ff81e1ffc00ff8c3f0fff83c3fe1ffc3ff83e1ffe00ff007f0fcf83c3fe3f087cfc3c3e3e00ff007f0f07c3c3c03e00f87c3c3c1e00ff187f0f03c7c7807c00f03c3c3c1e00fe1c7f0f03c787807801e03c7c3c1e00f81c7f1e03c787807801e03c783c1e00fc007e1e07c78780f801e03c78781e007f00fe1e078f8f00f801e07c78783e007f4ffe1e078f0f00f801e07878783c003f4ffc3c0f0f0f00f801e0f8f0783c001ffff83c1f0f0f807c01f0f0f0f83c000ffff03ffe0f0ffc7fe1fff0f0f07c0007ffe03ffc1e0ffc3fe0ffe0f0f0780003ff807ff81e07fc1ff07fc1f0f07800007c000fc00001f007c01e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},bitcat:{name:"bitcat",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff000000000000000000000000001e1ffff1e000000000000000000000007efffffcf80000000000000000000000e3ffffff1c0000000000000000000000c7ffffffce00000000000000000000019fffffffe60000000000000000000001bffffffff600000000000000000000013ffffffffa0000000000000000000000781fffe07c0000000000000000000000e10fffc41c0000000000000000000000e00fffc01e0000000000000000000001f00fcfe03e0000000000000000000001fc3f83f0fe0000000000000000000001ffff83ffff0000000000000000000003ffff87ffff0000000000000000000001ffffefffff0000000000000000000003ffefefefff0000000000000000000001ffefefdfff0000000000000000000001ffefcfdffe0000000000000000000001fff7979ffe0000000000000000000000fff8383ffc00000000000000000000007ffffffff800000000000000000000003ffffffff0000000000000000000000027ffffffc00000000000000000000000783f87fc380000000000000000000000f9c00003fc0000000000000000000000f7f703fffc0000000000000000000001e7f783fffe0000000000000000000001effb87fffe0000000000000000000003effbffffff0000000000000000000003effbffffff0000000000000000000007e7f3ffffff8000000000000000000007c001ffffff800000000000000000000f00007fffffc00000000000000000000e00003fffffc00000000000000000000c01001fffffe00000000000000000001803f00fffffe00000000000000000001803fc0fffffe000000000000000000010030e07fffff000000000000000000030030707fffff000000000000000000020070303fffff000000000000000000020060303fffff000000000000000000020060703fffff80000000000000000006007fe03fffff8000000000000000000600ffc01fffff8000000000000000000600c38037ffff8000000000000000000603c0c037ffff8000000000000000000603f8e037ffff8000000000000000000601f8e037ffffbf8000000000000000060180e037ffffbfe0000000000000000301c0c0760fffbfe0000000000000000301ffc071f3ff7ff00000000000000003807f80f3f9ff7ff00000000000000001c00601f3fdfefff00000000000000000e00003f7fdfdffe00000000000000000300007f7fdf3ffe0000000000000000000000ff3fd8fffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},nyancat:{name:"nyancat",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000030000000000000000000000000000000cc000000000000000000000000000000cc0000000000000000000000000000003000000000000000000000000000000030000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffe00000000000000000000000fffffffff00000000000000000000003ff9ffffff80000000000000000000003f19bfffff80000000000000000000003f833fffff80000000000000000000003fc03fffff80000000000000000000003fc03fffff80000000000000000000003f861fffff80000000000000000000003f870f8fff80000000000000000000003f8f8f87ff80000000000000000000003f0f0e71ff83800000000000000000003e000e79ff83c00000003fffe000000f3e101e7e7f8fc00000083fffe000000f3e3c3e7e7f8fc000000ffffffffff007303e3e7f001fc000000ffffffe1ff3c3207e1e7f807fc000000ffffffe1fe1e03c1c3e7fb7ffc000000f07fffe4fe0f03c003e7fffffc000000f87fffc4ff0703c803cffffffc000000f33fffc8ff83c399861fffffff000000f33fff9cffc3c3f9ff1ff7ffdf000000e47f0780ffe0f3fbff9fe7ffcf000000c67f87e3fff0e3ffff9fe7ff8f000000e07f33fff87803ffff9f87e20f000000f0ff33fff87c03ffff9f87e20f000000fffe47fffb3f83ffff9fffffff000000fffc67fff13fc3ffff9fffffff000000fffe07fff67ff3ffff9fe78e3f000000ffff0fffc67ff3ffff9fe78e3f000000ffffffffe07ff3ffffe7e0003c000000fffffffff8ffe3ffffe7e00038000000ff134bffffce00fffff9ffffe0000000fc0001ffff0000fffff9ffffe00000000000000000003f0000000000000000000000000000003f0000000000000000000000000000003c010000000c000000000000000000003c01c000780e000000000000600600000000000000000000000000006006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000180000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},coffee:{name:"coffee",hex:"0000000000000000000000000000000000000000000000000001fff8000000000000000000000000001e00bfc0000000000000000000000000e00005f800000000000000000000000180002bff00000000000000000000000600005fffc00000000000000000000008000003fff000000000000000000000100000007ffc00000000000000000000300000000ffe000000000000000000002000000001ff000000000000000000002000000000ff8000000000000000000040000000003fc000000000000000000040000000000fe0000000000000000000400000000007f0000000000000000000400000000003f0000000000000000000600000000001f8000000000000000000600000000000f8000000000000000000600000000000780000000000000000007000000000007c000000000000000001f800000000003c00000000000000000e7c00000000003800000000000000001c7e0000000000380000000000000000707f0000000000380000000000000000c57f80000000003000000000000000018a3fe000000000300000000000000003053ff0000000006000000000000000062abffc000000004000000000000000045dffff8000000180000000000000000c3bbfffe000000600000000000000000865dfff5e00003000000000000000001ac0ffffe1ffff80000000000000000011437fffd000000000000000000000003281afffa00000000000000000000000350047ff400000000c000000000000002080e7ff800000003f00000000000000250077ffd00000017f8000000000000022a83bffa20000003fc0000000000000251003ff400000000f40000000000000209801fe880000000680000000000000314800ff40000000030000000000000032ac00ffa000000001000000000000003546007f40000000011000000000000010eb003e8800000001a00000000000001179c11f50010400008000000000000018bae16b8202080000800000000000000957f0160404480001000000000000000c8ff80be80aac0001000000000000000477ff54fd558f803600000000000000063bfff27bba00fffc000000000000000357ffff3f500007f00000000000000001abffff9aa00000000000000000000000d5ffffc40000000000000000000000406bffffe200000000000000000000000031fffff1d4000000000000000000080818bffff8fea808ab80000000000000040c5ffffc7fd5555f8000000000002010472ffffe1fffbbff000000000000000409d7ffff0ffffffe000000000000080000e3ffff87fffffc00000000000020852139ffff81fffff00000000000000003041e3fffc0ffffe000000000000000501907c7ffe03fff8000000000000000220000fafff01ffe00000000000000000004101fd5f807f80000"},flower:{name:"flower",hex:"e598b7fdffdf7dc00000000000000000fbe46fffffff1d80024000000000000054917defffff77bc0830000000000000ef68b7ffffff7ffe2020000000000000ffb65ffffffffbe641600000000000003fdd97ffffdf7dfcb6a80000000000001ff68affffffffdc2dd600000000000087eb457f7fdffff8fb8600000000000071ffa7bf7ffffef3fe740000000000003cff63ffbfdffff3fdcc000000000000ab37a5ffbfffff7fbb9c0000000000008d9d757fdfa7f0ff7d38000000000000f3e7caffd4e7effefe7007000000000077b7ea55e24bf3fbace078c0000000009c79e83ec220d7f7f9c3e780000000006effd41f388007eff393888000000000b75fed9f20080fbffe1e410000000000ebffbbe700128bfffc714200000000007dfbfef9400003febdcc2c0000000000ff7ff7be7302217efe34180000000000f3fffef80809007ff8c83000000000003dbfd760004020ffe721c000000000000007fbf9000041ff9e33800000000000c373ff408112017ef8de000000000000013c7ffaa400047f2638ff0000000000873700410000987999c3f6c000000000057bf1ac042c04fe7e1fbfc00000000014adfff0026041ffe1ffffe000000000095feff0624008003fffff8000000000133bfffe0c0031fffffff800000000000ffdfffc801981ffffff00000000000007dbfff1080300fffff0000000000000217fedc60100033fff00000000000000189fff8e480001c00000000000000000e80bf81dc00800700050100000000000008009fbd088081f0000ce00000000000410b5ffe2001607c00007000000000020637fffe6800180fe009c0000000000050fbfffef860ff807ffe00000000000885ffdffdf9796ffc00000000000000070ff3fff9fb798bffe0000000000000046fbffffff37edf7ffc0000000000000357dedffff7ff6fffffc0000000000007be7efffbffffbffffff000000000000cfbfcf7fbffbfddff3ffe000000000001c7e0fff7ffbfeefff3ff800000000007ff00ffe3ffbfffbffe37c0000000000fec008a4fffdfffe7fff7e0000000000b5001181bbfdffff8efedf8000000000580042046ffdffdfe1dff58000000000000507807ffcfffffc6ffb800000000004000420bffcfffeff3c3e0000000000120808503ffc7fffffdf00000000000030c018813ffe3ffdf7e7800000000000f7003a211ffc3ffef9f5c00000000000f80030022dfe4efd7f79600000000000000060800ffc0eef9cb5e000000000000000424403dc07f5c7ea0000000000000000d04823ad41ffc3fe0000000000000000909820b9007dc07e000000000000000192200009000f000000000000000000010060201180080000000000000000000148c000040040000000000000000000035380000400001000000000000000"},saturn:{name:"saturn",hex:"00000000000000000000007800a00300000000000000000000000703ffffc0c000000000000000028000707eaaa0f8600000000000000101010307d5011d1c30000000000000000000007aa2aaa3cf1000000000000000000401d54404045708000000000000000888086a0fe80a2b880000000000000019541017f00f059988000000000000023aaaa0000000c24b880000000000004455554000000025458800000000000080aaeae880000010a98800000000000107fd55d5000000080d900000000000023bfbbbaa0000000aab9000000000000577f7ff5540000004432000000000000aaffefeaaa88000080b210000000000555ffdff5550400009564200000000102abfefffbaa0000008b6400000000000557fdfff7750200008ac800000000000aafefffefaa0800010490800000000415dfdfffffd5510001552100000000002abffffffffaa000022a6200000000004777fffffffd50000456440000000020aefffffffffaa88008ac88000000000115fffffffff555000959100000000002abffffffffbbaa0012b22000000004457ffdffffff7f5440256440000000010affeffffffeefea804a980000000026415dfffffffdffd5009530000000008980abffffffefffba032a4400000001138157ffffffdfff7c045c88000000004e82affffffffffff808d900000000009d815dfffffdfffff010e400000000026a82bbfffffbffffc022c88000000044c50557ffffffffff80d5900000000089ca08affffffffffe212e44000000003794115ffffffffffc051c80000000044e2802bffffffffff00a3220000000089d504557ff7fffffe4056440000000112aa000afeaffffff880b910000000002554001555ffffffe010f200000000004aa80002bfffffff882ac880000000009550004577fffffe00573000000000012aa0022afffffff8808cc0000000000255400015ffffffe10159100000000004a280002bffffff882ae4000000000009a4800105fffffc0455904000000000134100000afffff0808e40400000000026910000955fff84515901800000000026a2000022bffc2028e60300000000004d520000457fe04057901c00000000008b42000022fe0008ae406a0000000000995200001fc000157101d400000000001aa200000002022bca07a800000000003642000000000557305d5000000000003a8100000000aab880eaa0000000000036518000000515c403d5c000000000003a2a600000a2af102eab0000000000003b241c007e5578c03d460000000000003a9883ff888bc200ea980000000000001d445101115e100755600000000000001a60aaaa2be1803aa3800000000000008f1604057e0c74c45c0000000000000083eaeaafe0e087ffc00000000000000060ffdffc0e0400000000000000000000"},jupiter:{name:"jupiter",hex:"0000000008907bfdb7bf2b948000000000000000041eaff7a9d5f3fa0080000000000000012cfffefefe755400800000000000080b3fff5ffff7ffbfa0400000000000008644cbddff7ffffb804000000000000000beffffffffdbb880200000000000010aa7fb7ddf5df5de1020000000000004e579eef6fbffff7be6200000000000049bf27fdfbdefffedf0100000000000010500fffffffeffff6410000000000000261fffffffffffffd8100000000000000fd71fbdf7f7fbeebc0000000000000123e72dffecdbb4b500080000000000008040a58a03ef1a76500800000000000000393941ded666b34a08000000000000000047cf35da1d74a08800000000000000000041990af81d6688000000000000800000000000ef80180400000000000000000400100c38ea0204000000000000010d0804838540f82004000000000000003f1f80002eb9fa8004000000000000007c7ffffc17ffe33c0400000000000417707fffb2fffbc66c0400000000000099c3ffffc7ffff23ff04000000000003183cffff3dfffcd0e00400000000000000a27ffefffff9ff080400000000005c095c3ff306ffffd080040000000000001000001e03ffffc000040000000000000000000024f70100000400000000000000000001f7500eff4004000000000000001037ff7f07fedea20400000000000037f7fefffff9bfbb510000000000000001b7ffffffffd642000800000000000018f83d4fd2340000c008000000000000000080005080000c0008000000000000000000000007ffd06088000000000000000003e080fa36214008000000000000000b7e1f7f7cd0b00010000000000000080b4e753fffec18b01000000000000807cc1fa0401c9affc01000000000001012123246fe03ffc40020000000000001450a77bbff800020e02000000000000081056e7f49e00e0008200000000000002079e19fff685000884000000000001008e031388ff1a1cf4040000000000000151ca2e572d6233b80000000000000000aff00ea4280cc40008000000000000002bfd4309d02008241000000000000000bdff017f03ff209c1000000000000000421af0000f276f7020000000000000080080153473ff9e522000000000000000032a6f4cfebf7fa8400000000000000020a990813bdff68040000000000000000106016fc77eb500800000000000000008c04e5fc081930100000000000000000000209f9b7f40010000000000000000000042402a30ac3200000000000000000000a028904510040000000000000000000240137194cc08000000000000000020010680a1a00010000000000000000000000028100000200000000000000000000400800000004000000000000000000000010000102080000000000000000000000010040001000000000"},einstein:{name:"einstein",hex:"fffe812fffffffffffffff8800000000f7d10057fffffffffffffe1000000000fee800a88bfffffffffffd4000000000fdfd0111fffffffffffffda000000000b2fa0003fffffffffffffe9000000000f5f70045ffffffffffffff4000000000eaec000027ffffffffffffe000000000ddf8015001ffffffffffff1080000000b2f20000023fffffffffff9c00000000cdfe0000017ffff7fffffdd800000000cafc0000002fffe07ffffef80000000020f20001101fffe00ffffff900000000e0e8000a0003ffc01fffffae0000000045f400040001ff0007ffffc740000000806800003880fe800fffefe1800000005578000d3cc0fd8733fffd50c000000022e800080420fa8f9bffffa0000000000475400013007501dfff7df12000000000a880100c80f8846bfffea82000000001b000000e41fd0027fffd841000000020b002000ea0fe830bfffe8010000000045007011fc0ffffc7ffffc010000000004008a02388ffcfaffffd8000000000005007880750ff70e7fffdc0010000000020001e1fa03faff3fefec00200000000000617c3f07fdf7ffd7c1000000000000002c80ea03fe3efbefca000000000000000effdc01ffe7dddff400000000000000299ff803fffdbbabb000000000000000175ff007fffff7dfd4000000000000000f7ff803fffffaaeea0000000000000015dff001fffff55fc1c60000000000001bfff203ffffe3abfb8400000000000017f7f405fffff747d6720000000000000dffe803ffffee82e80800000000000004ffd001fdfff951704000000000000002abe003fffffa22b800000000000000095fc0017eff7f67fc0000000008000002bfc000feffe89f2800000000000000005f80005f7fe51fd400000000000000003f00002b3fe09b8220000000000000051f4000039ff85d8500000000000000002e80000fbfc0eea800000000000000103d44001fdfc0dd34000000000000000029a0003fefe0a77800000000000000101400015ff7c0775000000000060000000aaa046afee8cd98000000000800000015545d53fd780e08000000000a000000020008097fe02248000000000400000004001695ff804000000000000c00000000081820ffc00000000000000c00000040000140ff8000000000000008000000000000029f8000000000000008000000000000007f4000000000000000000000000000001f000000000000000000000000000000170000000000000000000000000000022b0000000000000000000000000000051600000000000000000000000000002b8a0000000000000000000000000000551400000000000000000000000000002ba40000000000000000000000000057ff4000000000000000000000000000fffece00000000000000000000000001ffff9fc00000000000000"},piggy:{name:"piggy",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000c001fffe000000000000000000000003e00fffffc00000000000000000000007f03ffffff0000000000000000000000630fffffffc000000000000000000003631ffffffff000000000000000000001ff3ffffffff801000000000000000001fe7fffe7fffc0180000000000000000078fffc66fffc0780000000000000000019fffe0cfff83f8000000000000000001fffff00fff8ff0000000000000000000fffff00fff3ff00000000000000000007fffe187ff3ff00000000000000000007fffe1c3ff7fe00000000000000000007fffe3e3ffffc00000000000000000007fffc3c3fffe000000000000000000007fff8003fffc000000000000000000007fff8407fffe000000000000000000007fff8f0fffff000000000000000000007ffc0f8fffff000000000000000000007ff81f87fff3000000000000000000007fff0707fff3800000000000000000007fff000ffff3f00000000000000000007fff200ffffff80000000000000000007ffe661ffffff80000000000000000007fffe7fffffff00000000000000000003fffeffffffff00000000000000000003ffffffffffff00000000000000000003fffffffffffe00000000000000000003fffffffffff800000000000000000003ffffffffffc000000000000000000003fe3ffffff80000000000000000000001fe00fffe000000000000000000000001fcc0007e000000000000000000000001fc7c007e7c0000000000000000000001f87e003e3c0000000000000000000000f87c003e3c0000000000000000000000f83e001e3c0000000000000000000000781e001e1c0000000000000000000000700e000e1c00000000000000000000003006000e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384327c0021938007c2113e0078f800040e3e600061914007c613300030a8000c0b3e600061d16001061e200030200008192a700071d12001071838003020000811227000d15120010d1838003020000c1b226000f13160010f1c2000302000040a22600099314001099320003020000786227c008933c00108913e00fc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},honeybadger:{name:"honeybadger",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddda80000000000000000000000000150046f00000000005a80000000000004fffff8c00000000bb4c000000000002beff749b80000001e40300000000000cfa9bc5296000001f4ff080000000000be6f7eb015800f6ea9b3e600000000033bdfdf999eea7dd8ef6cc1000000000fffffff7ca9fd9afb87d2f1800000001fdffffffc4c600eff9fd1164000000017fffff7f7d9b27bfeffd00e400000002ffffffffff6edd7fe7f8022400000004fffffffffe71d7fff7d8400380000005fffff7fffdffffffbf4441408000000bffffffffffffdffffe000092c000003fbbfffffffffffffee900000080000033f7f7ffffffffff1bb210000040000067856bfffffffffc15d4000001800000cb8915fffffffff008e40001470000011ea9317fffffffe0054a0006bc0000023d18a15bffffffc0025400180000000c6a004895957fbf5000ac006000000031e400264a45656900015000c000000181580094a0aa8a521001200700000006094a012a20848a400000000c0000003800a000111040942200009010000000e0350004890009089488004820000003826b041142400080021100041000000248220c00020200011205000a1000000400880e0085008000241c20020800000680203c00088040001020780108000003000078000000082080408e00440000039000e00000111a42fd91858024000001c003800000f237ff4aa100e022000000c00f0000032020000092003051000000783a00015c20200000a20018490000001fc6001ba02030000193000e28800000000402e400101cc00088e003077fe00000080500000c0730008058018a01500000041800000e001800d28800e017e80000081f00000604580064780022aef0000004058000038038003fe000355ed000000400400000ffe0000080000ff7000000040840000020000000000000000000000792400000000000000000000000000002ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},dragon:{name:"dragon",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000003f8c000000000000000000000100000007ef0000000000000000008d848300000871f8000000000000001effffc1800007fe3ff02000000000003fff1ffce10001ff3ffee001f8000001f7fdffffe80000381a7f80003f00f9063efffd7ff881001d7eff00000783ff8dfffffdffdec1007f1df1400001effeebfdb801f7bf7080fe0dce000000ffffffff30001efd30807c0ffd0000003fffffff0000037778807c00070000000003fffbde0000edfcc06c000f0000000001fffbc600003b7c607e000800000000007dee7200000fae383b000820000000008fbc3a0000037e1f07c0017c0000000063f230000001ff8f81e002600000000007e0400000005fca81f6074400000000ffc00000000037fa80ff039e00000001ff80000000000ff3805d006200000003fc000000000007fd807f83c20000039f00000000000003ffc07e8fc00000059c00000000000001ffe1ff1f70000001f0000000000000005fffbdfe20000021c00000000000083077dffc380000002f80000000000004185ffbfbf00000001c60000000000003fbe3eff63000000001300000000000003fffbfc0400000001638000000000000503fdc00000000000e40000000000005d83ff000000000000000000000000003901f8000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},narwal:{name:"narwal",hex:"0000000000000000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000e3000000000000000000000000000003810000000000000000000000000000060180000000000000000000000000000c018000000000000000000000000000180180000000000000000000000000001801800000000000000000000000000010018000000000000000000000000000100180000000000000000000000000001800c0000000000000000000000000001800c0000000000000001e00000000001800e000000000000000fc00000000000c003ffff00000000003f800000000000e000007fe00000000063000000000000300000006000000003ce00000000000038000000c00000000618000000000000e01800038003ffc01cf000000000000180780007007f80fc71c000000000000701e0001c07c00007c78000000000000c073f03f01e0000060c000000000000180c07ff80f000011c380000000000003018000003c00003f078000000000000603800000e000801c0cc000000000000c03000001c001c0381860000000000018030000070001c060f0700000000000180700000c00008060c330000000000030070000380000007f8638000000000030030000700000001e0e18000000000030030000c00000000018180000000000300380018000080000701800000000003001c00700000fc00fe01800000000003000e00c000003ffffc018000000000030003838000001ffffc038000000000030000ff0000000fc07c0300000000000300007c000000070008030000000000018003e00000000300100600000000000180000000000000e0e00e000000000000c00000000000001f000c000000000000c00000000000000000180000000000006000000000000000003000000000000030000000000000000070000000000000180000000000000000e00000000000000c000000000000000180000000000000060000400000000003c0000000000000030000c0010000000e6000000000000001c00180018000001c3000000000000000700180030000007018000000000000001c038003000001c00c000000000000000f030007000007c0060000000000000001e3000600003c780600000000000000007f000e0003e00f0300000000000000000f000c007f0001e3000000000000000003001cffe000003e000000000000000003003ff0000000000000000000000000030060000000000000000000000000000300c000000000000000000000000000030180000000000000000000000000000187000000000000000000000000000001fe0000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},rabbit:{name:"rabbit",hex:"00000000000000000000000000000000000000000000000bf800000000000000000000000000007eaf8000000000000000000000000003e000e00000000000000000000000000e000020000000000000000000000000180000600000000000000000000000003000006000000000000000000000000060000180000000000000000000000000c000038000000000000000000000000180000e0000000000000000000000000b0000380000000000000000000000001f00007e000000000000000000000000e0000003800000000000000000000001c0000000e0000000000000000000000300000000380000000000000000000006000000000c000000000000000000000c00000000060000000000000000000008180000000200000000000000000000183c000000030000000000000000000010180000000600000000000000000000100000a015fc00000000000000000000300000ffff6000000000000000000000100000d54000000000000000000000003000007c0000000000000000000000001000000700000000000000000000000018000001e0000000000000000000000018000000380000000000000000000000080000000e00000000000000000000000c0000000300000000000000000000000700000001800000000000000000000001a0000000c00000000000000000000000e00000007000000000000000000000002000000018000000000000000000000060000000080000000000000000000000400000000c00000000000000000000006000000006000000000000000000000060000000020000000000000000000000c0000000030000000000000000000001800000b8018000000000000000000002000001ee0080000000000000000000060000030000c0000000000000000000060000060000c00000000000000000000400000c00007c0000000000000000000400000800002f0000000000000000000400000800000180000000000000000006000018000000c0000000000000000006030008000000400000000000000000030380180000006000000000000000000186c00800000060000000000000000000fc400c000000200000000000000000002030040000006000000000000000000000185600000040000000000000000000000dfe00000040000000000000000000000700000000c000000000000000000000040000000180000000000000000000000c0000060700000000000000000000000c00003ffc000000000000000000000018000030a00000000000000000000000080000100000000000000000000000000c000060000000000000000000000000070001c000000000000000000000000003fb7f00000000000000000000000000002fe80000000000000000000000000000000000000000000000"},bunny:{name:"bunny",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000002000078000000000000000000000000078000f800000000000000000000000007c000f800000000000000000000000007c001f800000000000000000000000007e0019800000000000000000000000006700318000000000000000000000000063007180000000000000000000000000610061800000000000000000000000006180c1800000000000000000000000004080c18000000000000000000000000040c1c18000000000000000000000000040c1818000000000000000000000000060c1830000000000000000000000000060c1030000000000000000000000000060c1030000000000000000000000000020c1060000000000000000000000000030c1060000000000000000000000000030410e0000000000000000000000000019ffcc000000000000000000000000003ffffc000000000000000000000000007f007e00000000000000000000000001e0000780000000000000000000000007c00001c000000000000000000000000f0000006000000000000000000000001e00000030000000000000000000000038000000180000000000000000000000700000000c000000000000000000000060000000060000000000000000000000c0000000060000000000000000000001c000000003000000000000000000000180000000030000000000000000000003800000000180000000000000000000038000000001800000000000000000000700007f8001c0000000000000000000070001f9c000c000000000000000000007000700e000c00000000000000000000f000e007800c00000000000000000000e001c003800c00000000000000000000e0030001800c00000000000000000000e0030000c00c00000000000000000000e0070000c00c00000000000000000000e0060000c00c00000000000000000000e0040001c00c00000000000000000000e00c0000c00c0000000000000000000070080000401c0000000000000000000070080000c01c00000000000000000000700c0000c01c00000000000000000000380e0000c0380000000000000000000038060000c0380000000000000000000018040000c030030000000000200000001c0400008070038006000000600000004e060000806006fc1e00000070007e1c7e07000180f88cfdfc000000d00067ffdf03800701fbf80f9c0000025801f03083c3800603fe40001fe00003cf0fc00001e1800c0f900000007e003ec7fc0000007fc0383e000000000600f800000000001ff0fbf8000000000000000000000000001fff80000000000000000000000000000000000000000000000000000000000000000000000000000"},rooster:{name:"rooster",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000bc000000000000000000000000000000fc000000000000000000000000000001fc000000000000000000000000000001f8000000000000000000000000000003fc000000000000000000000000000003ff000000000000000000000000000003ff800000000000000000000000000007ffc00000000000000000000000000007ffe00000000000000000000000000000fff00000000030000000000000000000fff800000000fe000000000000000000fff800000003ff000000000000000000fffc00000007fc000000000000000000fffe0000000fe00000000000000000007fff0000001fc00000000000000000003fff8000001ffc0000000000000000003fff800000ffff0000000000000000003fffc00003ffff8000000000000000003fffe00007ffffc000000000000000003ffffe000fffffc000000000000000007fffffc01ffffb0000000000000000007ffffffc3ffff10000000000000000007fffffffffffe18000000000000000003ffffffffffff08000000000000000003ffffffffffff08000000000000000003ffffffffffff08000000000000000001ffffffffffff00000000000000000001fffffffffffe00000000000000000000fffffffffffc00000000000000000000fffffffffffc000000000000000000007fffffffff98000000000000000000003fffffffffb0000000000000000000001ffffffffe00000000000000000000000ffffffffe000000000000000000000007fffffff6000000000000000000000003fffffff0000000000000000000000001fffffff0000000000000000000000000fffffff00000000000000000000000007fffffc00000000000000000000000001fffffc000000000000000000000000007fffec000000000000000000000000001fffc0000000000000000000000000000fffc0000000000000000000000000000ff9800000000000000000000000000007d00000000000000000000000000000078000000000000000000000000000000780000000000000000000000000000007000000000000000000000000000000070000000000000000000000000000000f0000000000000000000000000000000f0000000000000000000000000000000e0000000000000000000000000000000e0000000000000000000000000000017e000000000000000000000000000007ff000000000000000000000000000000ef000000000000000000000000000001fe000000000000000000000000000000fc0000000000000000000000000000038800000000000000000000000000000010000000000000000000000000000000000000000000000000"},genesis:{name:"genesis",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd8003f600000039e118000bc71c7000318000c00000006c311800086db6d80031e380c6fe38e06c3319cf186db6d80031b6c0c6db6d806ce2186d91cdb6d80031b7c0c6db7de06c3619edb30db6780031b600c6db60606c341b6da30db6180031b3c0c6db3dc039e471eda3e71c700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ec0000006c00000003006030006000030c0000006c0000000300003000c000030f1cf1ce6ce681cf03cd6f361ce000030d86db1b6db7836d836f6dbc36c000030d9edb1f6db6036d836c6db836c000030db6db186db6036d836c6dbc36c00001ed9ed9cf6ce601cd83cc6db61cc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c00d80030300030000c0000000000030c00180030600030000c0000e71ce78f0f1cd9cdb8739a3c73cd9c018db1b6db0d86db6db066de361b6f3001efb1b6db0d9edb6db066d8367b6e3c006c31b6db0db6db6db066d836db6f0c01c79ce6cf0f1ed9c79863983c7b6db8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000ffc03bbbbbbbbb93b3bbb00000000001f3e02aaaaaaaaab2aa22900000000001c0e02aaaaaaaaa93abbb90000000000380702aaaaaaaaa90aaaa90000000000380703bbbbbbbbbbbb3bb97fff000000380700000000000000000140010000003807039bbb9393bbb93bb940010000003fff02a2aa2a32228b22894001000000ffffc3a2bbbb13bbb933b940017f0000ffffc0a2a8aa128a8920894001417c00ffffc39bbbabbbbbbbbbb940014145c0e001c00000000000000001c001c1c76ae001c2bbbbb93ab939399140014145c0e001c2a20a0aa2a28aa2314001417c00e001c3b30bbbb3bbbbba1140017f0000e001c0a20a8aa0aaa2aa114001000000e001c0a20bbab8babab9b94001000000e001c000000000000000014001000000e001c3bb3b933b939bbbb97fff000000e001c08a8a32a2aaa20a210000000000f807c0bb3b133abba33bb10000000000ff3fc0a28a12aaaaa222a100000000007fff80bb3a3b3bab9bbba3000000000007f8000000000000000000000000000001e0000000000000000000000000000000000"},my_bank:{name:"my_bank",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f000000000000000000000000000000ffc00000000000000000000000000003fff0000000000000000000000000000ffffc000000000000000000000000003fffff00000000000000000000000001ffffffe0000000000000000000000007fffffff800000000000000000000001ffffffffe00000000000000000000007fffffffff8000000000000000000001ffffffffffe000000000000000000007fffffffffff80000000000000000001ffffffffffffe0000000000000000000000000000000000000000000000000000000000000000000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000003f8fe3f8fe00000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffffffff800000000000000000007fffffffffff800000000000000000007fffffffffff800000000000000000007fffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c078781e0007f800780381c070780003c0f87c3e0007fe007803c1c070f80003e0f83c3c0007fe007c03e1c071f00003e1f81e7800071f00fc03e1c073e00003e1f81e7800070f00fe03f1c073c00003f1f80ff000071e01fe03f1c077800003f3f80ff00007fe01ee03f9c07f000003f3f807e00007fe01cf03bdc07f000003fbf807c00007ff03cf039dc07f800003bff803c000070f03ff039fc077c00003bf7803c000070703ff838fc073c000039f7803c000070f07ff838fc071e000039e7803c00007ff0783c387c071f000039e7803c00007fe0f03c383c070f800038e7803c00007fc0f03c383c07078000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},candle:{name:"candle",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000030000000000000000000000000000000380000000000000000000000000000003c0000000000000000000000000000003c0000000000000000000000000000003e0000000000000000000000000000003e0000000000000000000000000000007e0000000000000000000000000000007f000000000000000000000000000000ff000000000000000000000000000001ff000000000000000000000000000003ff000000000000000000000000000003ff000000000000000000000000000007ff000000000000000000000000000007ff00000000000000000000000000000ffe00000000000000000000000000000ffe00000000000000000000000000001fbe00000000000000000000000000001fbe00000000000000000000000000001f3e00000000000000000000000000003f3e00000000000000000000000000003e3e00000000000000000000000000003e3f00000000000000000000000000003c3f80000000000000000000000000003c3f80000000000000000000000000003c3fc0000000000000000000000000007c3fc0000000000000000000000000007c3fc0000000000000000000000000007c1fe0000000000000000000000000003c1fe0000000000000000000000000003c0fe0000000000000000000000000003c07e0000000000000000000000000003c07e0000000000000000000000000003c03c0000000000000000000000000001e03c0000000000000000000000000001e01c0000000000000000000000000000e01800000000000000000000000000007018000000000000000000000000000070100000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe000000000000000000000000000001ff000000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000000000000000003ff800000000000000"},ancap:{name:"ancap",hex:"0000001fffffffffffffffffff8000000000001fffffffffffffffffff0000000000001fffffffffffffffffff0000000000000f0000000ffffffffffe0000000000000780000007fffffffffc0000000000000780000007fffffffffc00000000000003c0000003fffffffff800000000000003e03fffc3fffffffff800000000000001e07fffe1fffffffff000000000000000f07ffff0fff0007ff000000000000000f07800f0ffe0007fe000000000000000787800787fe000ffc000000000000000783c00787fc001ffc0000000000000003c3e003c3fc001ff80000000000000003e1e003e3f8003ff80000000000000001e0f001e1f0003ff00000000000000000f0f000f0f0007ff00000000000000000f07800f0e000ffe0000000000000000078780079e000ffc00000000000000000783c0079e001ffc000000000000000003c3e003fc001ff8000000000000000003e1e003fc003ff8000000000000000001e0f001f8003ff0000000000000000000f0f000f8007ff0000000000000000000f07800f000ffe00000000000000000007878000000ffc0000000000000000000783c000001ffc00000000000000000003c3e000001ff800000000000000000003e1e000003ff800000000000000000001e0f000003ff000000000000000000000f0f000007fe000000000000000000000f0780000ffe00000000000000000000078780000ffc0000000000000000000007c3c0001ffc0000000000000000000003c3e0001ff80000000000000000000001e1e0003ff80000000000000000000001e0f0003ff00000000000000000000000f0f0007fe00000000000000000000000f07800ffe00000000000000000000000787800ffc000000000000000000000007c3c01ffc000000000000000000000003c3e01ff8000000000000000000000001e1e03ff8000000000000000000000001e0f03ff0000000000000000000000000f0f07fe0000000000000000000000000f078ffe00000000000000000000000007878ffc00000000000000000000000007c3dffc00000000000000000000000003c3fff800000000000000000000000001e1fff800000000000000000000000001e0fff000000000000000000000000000f0ffe000000000000000000000000000f0ffe00000000000000000000000000078ffc0000000000000000000000000007cffc0000000000000000000000000003cff80000000000000000000000000001eff80000000000000000000000000001eff00000000000000000000000000000ffe00000000000000000000000000000ffe000000000000000000000000000007fc000000000000000000000000000007fc000000000000000000000000000003f8000000000000000000000000000001f800000000000000"},anonymous:{name:"anonymous",hex:"000000001f0000fffc0003e000000000000000001e30007ff80071e000000000000000001cf0003ff0007ce0000000000000000019fe001fe001fee000000000000000003bff801fc08fffe000000000000000003fffe01fc01fffe000000000000000003ffff11fe03fffe000000000000000003ffff83ff87fffe000000000000000003ffffc3ff0ffffe000000000000000003ffffe3fe1fffff000000000000000003ff07e1fe3f03ff000000000000000003fc01f0fe7c00ff000000000000000003f00070fff8003f000000000000000003e00010ffc0003f000000000000000003800000ffc0000f000000000000000003000000ffc00000000000000000000003800010ffe0007c0000000000000000038007f07fffffff0000000000000000033ffff0ffffffff000000000000000003fffff0ffffffff000000000000000003fffff0ffffffff000000000000000003fffff0ffffffff000000000000000001ffffe0ffffffff000000000000000000fffff0fffffffe000000000000000000fffff0fffffffe0000000000000000007fffe0fffffffe0000000000000000007fffe0fffffffc0000000000000000003fffc0fffffff80000000000000000011fff80ff3ffff000000000000000000187e100ff1fffe0000000000000000000800200ffce000800000000000000000081fe10ffef0008000000000000000000c8fe31ffeff80800000000000000000048ff31fffff888000000000000000000643fa1fffff090000000000000000000241ff1ffffe110000000000000000000320ff9fdffc1200000000000000000001803f8f8ff822000000000000000000019006000fe06600000000000000000000c800000380c400000000000000000000e4000200018c000000000000000000006300070003180000000000000000000031800f8006180000000000000000000038f00f801c3000000000000000000000187fe001fe60000000000000000000001c3ff83ffe60000000000000000000000c07fffffcc0000000000000000000000e03fffff9c00000000000000000000006183ffff98000000000000000000000031f001ff30000000000000000000000031fe01fe60000000000000000000000019fe03fe60000000000000000000000019ff03fcc000000000000000000000000cff07fdc0000000000000000000000004fe07ff80000000000000000000000007fe03ff00000000000000000000000003fc03ff00000000000000000000000001fc01fe00000000000000000000000000fc01fc000000000000000000000000007c03f8000000000000000000000000007e03f8000000000000000000000000003e03f0000000000000000000000000003e07e0000000000000000000000000001e07c00000000000000"},mushroom:{name:"mushroom",hex:"00000000000000000000000000000000000000000000007ff40000000000000000000000000007ffffc00000000000000000000000003ffffff8000000000000000000000000ffffffff000000000000000000000003fffe007fc0000000000000000000000ffff8001ff0000000000000000000001ffff0000ffc000000000000000000003f87f00007fe000000000000000000007f07f00007ff00000000000000000000fe07f8000fff80000000000000000001fe1ffc003fffc0000000000000000003ffbfffabffffe0000000000000000007fffffffffffff000000000000000000ffffe3ffffffff800000000000000001ffff01ffffffffc00000000000000003fffc01ffffffffc00000000000000003fff801fffff07fc00000000000000007fff003fffff01fe00000000000000007fff007fffff00ff0000000000000000ff3f83ffffff807f0000000000000000fc3fffffffffc07f0000000000000000f83ffffffffffaff8000000000000001f03fffffffffffff8000000000000001f03fffffffffffff8000000000000001f07fffffffffffffc000000000000001f0ffffffffffffffc000000000000001f1ffffd557ffffffc000000000000001fffffaaaaabfffff8000000000000000ffffd5555555ffff8000000000000000fffeaa8808aaafff00000000000000007fd550000011555c00000000000000000aaa0000000022a800000000000000000000000000000000000000000000000000000002aa00000000000000000000000000055555500000000000000000000000000aaaaaa8000000000000000000000000055555500000000000000000000000000aaaaaa8000000000000000000000000055555500000000000000000000000000aaaaaa8000000000000000000000000055555500000000000000000000000000aaaaaa80000000000000000000000001ffffffc0000000000000000000000001ffffffc0000000000000000000000001ffffffc0000000000000000000000001ffffffe0000000000000000000000001ffffffe0000000000000000000000003ffffffe0000000000000000000000003ffffffe0000000000000000000000003ffffffe0000000000000000000000003fffffff0000000000000000000000003fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000007fffffff0000000000000000000000003ffffffe0000000000000000000000001ffffffc00000000000000000000000007fffff000000000000000000000000001ffffc0000000000000000000000000003fff800000000000000000000000000007f400000000000000"},invader:{name:"invader",hex:"0000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc000000000000000003fc0000000003fc00000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc0000000000000000000003fc000003fc00000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc000000000000000003fffffffffffffc0000000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc00000000000003fffc03fffffc03fffc000000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fffffffffffffffffffffc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fffffffffffffc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000003fc03fc0000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc0000000000000000000003fffc03fffc00000000000000000000000000000000000000000000000000000000000000000000000000"},mtgox:{name:"mtgox",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000003ffc0000000000000000000000000000fffc0000000000000000000000000003c1fe000000000000000000000000000e00fe000000000000000000000000001800fe000000000000000000000000007000fc00000000000000000000000000c000fc000000000000000000000000030001fc000000000000000000000000060001f8000000000000000000000000080001f8000000000000000000000000000003f8000000000000000000000000000003f0000000000000000000000000000007f0000000000000000000000000000007e000000000000000000000000000000fc000000000000000000000000000001fc000000000000000000000000000003f8000000000000000000000000000003f0000000000000000000000000000007f000000000000000000000000000000fe00028000a2aaaa81ffff01fffe0ff1fc0005400155555543ffff87ffff07f9fc0002a002a2aaaa87ffffcfffff87fff8000540055555550fffffcfffffc3fff0000aa00aa002800f00001f0007c1ffe0000550155005000f00001e0007c1ffc0000aa82aa002800f00001e000780ffc0000554154005001f0fffde0007807f80000a2828a00a801e0fffde000780ffc0000514514005001e1fffde000781ffc0000a2aa0a00a001e1fffbe000783ffe0001415414005001e0007bc000787fff0000a0a80a00a001e0007bc000f8ffff0001405414005001f000fbe001f1fe7f8000a0282800a2a1fffff3fffff3fc3f8001405014005141fffff1ffffe7f81fc000a0202800a2a0ffffe0ffffcff01fe0014000140141403fff847fff1fe00fe000000000000000000008000000000000000000000000000000100000000000000000000000000000000000aaaa8000000000000000000000001000555500000000000000000000000020002aaa0000000000000000000000004000155400000000000000000000000000002aa8000000000000000000000000400155500000000000000000000000008002aaa000000000000000000000000140055540000000000000000000000000a02aaa8000000000000000000000000151555100000000000000000000000000aaaa800000000000000000000000000155550000000000000000000000000000aaa8000000000000000000000000000155500000000000000000000000000000aa800000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},electrum:{name:"electrum",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000fe00000000000000000000000000001ffff0000000000000000000000000007ffffc00000000000000000000000003ffffff00000000000000000000000007ffffffc000000000000000000000001ffffffff000000000000000000000003e07ffc0f80000000000000000000000f801ff003e0000000000000000000001f0f07c1e1f0000000000000000000003f3fc38ff9f8000000000000000000007e3ff01ff8fc000000000000000000007e7ffc7ffcfe00000000000000000000fe7ff83ffc7e00000000000000000001fc7ff11ffe7f00000000000000000003fcffe38ffe7f80000000000000000003fcffc7c7fe7f80000000000000000007fcff8fe3fe7fc0000000000000000007fcff8001fe7fc000000000000000000ffc7000000e7fe000000000000000000ffc000fe0007fe000000000000000001ffc067ffc403ff000000000000000001ff07cfffe7c0ff000000000000000001fc078ffff3c87f000000000000000001f8e79f97f1ce1f000000000000000003f1e33f97f98f8f800000000000000003e7f33e01f89fc7800000000000000003c7f27e00fc9fe7800000000000000003cff07f187c1ff38000000000000000039ff8ff1cfe3ff38000000000000000039ff8ff18fe3ff38000000000000000039ff8ff007e3ff38000000000000000039ff8ff1c7e3ff3800000000000000003cff87f1e7c1fe7800000000000000003cff23f1c7c9fe7800000000000000003e7f33e00f89fcf800000000000000003f1f31f97f9cf1f800000000000000001f8e79f97f1ce3f000000000000000001fc278ff7e3c87f000000000000000001ff07c7ffe7c1ff000000000000000001ffc067ffc407ff000000000000000000ffe000fe0007fe000000000000000000ffe7800003e7fe0000000000000000007fcff8ee1fe7fc0000000000000000007fcffcfe3fe7fc0000000000000000003feffc7c7fe7f80000000000000000003feffe38ffe7f80000000000000000001fe7ff11ffe7f00000000000000000000fe7ff83ffefe00000000000000000000fe7ffc3ffcfe000000000000000000007f3ff01ffcfc000000000000000000003f3fe387f9f8000000000000000000001f8f07e0e3f0000000000000000000000fc01ff007e00000000000000000000003f0fffe1fc00000000000000000000001ffffffff000000000000000000000000fffffffe0000000000000000000000003ffffff800000000000000000000000007ffffc000000000000000000000000001ffff00000000000000000000000000000fe0000000000000000000000000000000000000000000000000000000000000000000000000000000"},mycelium:{name:"mycelium",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000fffe0000000000000000000000000003f7df800000000000000000000000001f07c1f00000000000000000000000007807c03c000000000000000000000001c007c0070000000000000000000000030007c00180000000000000000000000e0007c000e0000000000000000000001c0007c0007000000000000000000000300007c0001800000000000000000000600007c0000c00000000000000000000c0000fe000060000000000000000000180000fe000030000000000000000000180003ff800030000000000000000000300007ffc0001800000000000000000060001ffff0000c00000000000000000040007ffffc0004000000000000000000c000ff01fe0006000000000000000000807ffc007ffc0200000000000000000180fff8003ffe0300000000000000000181ffe0000fff0300000000000000000101cf800003e70100000000000000000301c7800003c70180000000000000000201ffc00007ff0180000000000000000200fff0001fff00c0000000000000000600fff8003ffe00c00000000000000006007ffe00fffc00c00000000000000006003cff83fe7c00c00000000000000004003c3ffff87c00400000000000000004003c0fffe07c00400000000000000004003c07ffc07c00400000000000000004003c01ff007c00400000000000000004003c00fe007c00400000000000000004003c007e007c00400000000000000004003c007c007c00400000000000000006003c007c007c00c00000000000000006003c007c007c00c00000000000000006007c007c007c00c00000000000000002007c007c007c00c0000000000000000200fe007c00fe0180000000000000000300fe007c01ff0180000000000000000103ff807c03ff8180000000000000000107ffe07c0fffe30000000000000000019ffff07c3ffffb000000000000000000ff83fc7c7fc7fe000000000000000000fe00ff7dff01fe0000000000000000007c007ffffc007e00000000000000000070001ffff0001c000000000000000000300007ffe00018000000000000000000100001e7800030000000000000000000180001e70000300000000000000000000c0001ff000060000000000000000000060000fe0000c0000000000000000000030000fe0001800000000000000000000180003800070000000000000000000000e00000000e0000000000000000000000300000001800000000000000000000001c00000070000000000000000000000007800003e0000000000000000000000001e0001f000000000000000000000000003f01fc000000000000000000000000000fffe0000000000000000000000000000000000000000000000"},ethereum:{name:"ethereum",hex:"0000000000000000000000000000000000000000000000030000000000000000000000000000000280000000000000000000000000000007000000000000000000000000000000068000000000000000000000000000000f4000000000000000000000000000001ea000000000000000000000000000001f5000000000000000000000000000003ea000000000000000000000000000003f5000000000000000000000000000007ea80000000000000000000000000000ff540000000000000000000000000000feaa0000000000000000000000000001ff540000000000000000000000000001feaa0000000000000000000000000003ff550000000000000000000000000007feaa8000000000000000000000000007ff55400000000000000000000000000ffeaa800000000000000000000000000fff55400000000000000000000000001ffeaaa00000000000000000000000003fff55500000000000000000000000003ffeaaa80000000000000000000000007ffc55500000000000000000000000007ffa2aa8000000000000000000000000ffd40554000000000000000000000001ffaa00aa000000000000000000000001fd540055000000000000000000000003eaaa000a000000000000000000000003d5540005000000000000000000000006aaaa000080000000000000000000000d55540000000000000000000000000002aaaa0000000000000000000000000001555400000000000000000000000000002aaa0000000000000000000000000000155400000000000000000000000000040aaa00008000000000000000000000030154000100000000000000000000000380aa0002000000000000000000000001e0540015000000000000000000000000f80a002a000000000000000000000000fe0400540000000000000000000000007f0202a80000000000000000000000003fc005500000000000000000000000001ff00aa00000000000000000000000001ff855400000000000000000000000000ffeaaa000000000000000000000000007ff554000000000000000000000000007feaa8000000000000000000000000003ff550000000000000000000000000001feaa0000000000000000000000000000ff540000000000000000000000000000fea800000000000000000000000000007f5400000000000000000000000000003ea800000000000000000000000000003f5000000000000000000000000000001ea000000000000000000000000000000f4000000000000000000000000000000680000000000000000000000000000007000000000000000000000000000000028000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000"},litecoin:{name:"litecoin",hex:"00000000000000aaaa00000000000000000000000000057fff400000000000000000000000000fffffe80000000000000000000000005ffffff4000000000000000000000000fffffffa000000000000000000000005ff8001ff40000000000000000000000bfc00003fa00000000000000000000017f000011fd0000000000000000000003fc0000aa3f8000000000000000000007f00000171fc00000000000000000000fe000000fcfe000000000000000000017c001ff9707d00000000000000000002f8222aa8803e80000000000000000001f5403558001f40000000000000000003e2882ab8000f80000000000000000007c51075500007c000000000000000000fc8206ab00033a00000000000000000079040557001fbd000000000000000000f80806ee002f9e000000000000000001f0100dfe015fdf000000000000000002f0200ffe0abfef800000000000000001e0404ffe1557cf400000000000000003e0808ffc0aae0f800000000000000001e0151ffc055807400000000000000003e02a1ffcc2a007800000000000000007c5541fffc50007c00000000000000003caaa3fffc80007800000000000000007dd553fff800007c00000000000000003daaa3fff00000ba00000000000000007dd503ffc000073c00000000000000003ce80fff00002fba00000000000000007dd03fff0000573c00000000000000003d807fff0002abba00000000000000007c007ffe0005577c00000000000000003c007ffe008aaafa00000000000000007c008ffe0115547c00000000000000003e000ffe0222a07800000000000000005e010ffc0000007400000000000000003e0a9ffc000000f800000000000000001e151fffffff00f000000000000000002f7a9fffffff00f800000000000000001f7d1fffff5601f000000000000000000fbebfffeaaa01e80000000000000000179d3ffdd55603d000000000000000000bda3fffaaaa3be0000000000000000007c03ffffffc77c0000000000000000003e000000000ef80000000000000000001f0000000005f40000000000000000002f800a22022be800000000000000000017c055440457f00000000000000000000be3eaa8088fe000000000000000000005f3d550111fc000000000000000000002f8aa80003f80000000000000000000017e540000ff0000000000000000000000bf800003fa00000000000000000000005ff0001ff400000000000000000000002bff83ffe8000000000000000000000005ffffff40000000000000000000000002fffffe8000000000000000000000000057ffd5000000000000000000000000000aaaa00000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000000000000000000000"},myetherwallet:{name:"myetherwallet",hex:"000000000000007ffe0000000000000000000000000007d555e00000000000000000000000001aaaaab800000000000000000000000075455556000000000000000000000001aab2aaab800000000000000000000006557d555540000000000000000000000eaa7aaaaab0000000000000000000001f557d555558000000000000000000003b2abcaaaaac000000000000000000007354cd55555600000000000000000000f2a9ceaaaaab0000000000000000000175958001555580000000000000000002ebcb3ffcaaaac0000000000000000002e4d2ffff155540000000000000000006caeaffffcaaaa000000000000000000dd4f77ffff55550000000000000000009aa66bffffaaab0000000000000000013957e3ffffd555800000000000000001aaabc9ffffeaaa8000000000000000035553d5fffff55540000000000000000272abcafffffaaac0000000000000000365535501fff955400000000000000006eaa7eaaa7ffcaaa00000000000000004e55665541ffd55600000000000000005ca8672abaffeaaa0000000000000000dd572755797fe5560000000000000000baa7caaa9c7feaaa0000000000000000b94ff3955d3ff5550000000000000000baaffdaaaebff2ab0000000000000000f54ffdd0003ff5550000000000000000f2aff9c7fffff2ab0000000000000000e54ff8e1fffff55100000000000000008aaffaa83ffff2a70000000000000000d54ff9744ffff54f0000000000000000aaaffc7283fff2af0000000000000000d54ffd75507ff55d0000000000000000aaaffebaaa9fea9f0000000000000000d557fe395507e55a00000000000000006aa7ff1caac8eaaa00000000000000005557ff9d54f1153a00000000000000006aabffccaa6e2a7200000000000000005553fff0157e557400000000000000002aa9ffffeabcaaec00000000000000003154ffffe53d54e40000000000000000122afffff2bcaac8000000000000000014547ffff57555d800000000000000000aaa3ffffa7ea9d0000000000000000009110ffff96653900000000000000000062287fffca6aba00000000000000000045541fffed7534000000000000000000288a87ffecb2740000000000000000001151407e1939780000000000000000000a2228001a9ab000000000000000000004445500795ce0000000000000000000068aaaa7329cc000000000000000000001111153f54d8000000000000000000000a222abeaab0000000000000000000000445555e55600000000000000000000003888a9caa800000000000000000000000d1554d57000000000000000000000000322222bc0000000000000000000000000e4455e000000000000000000000000001fabf000000000000000000000000000007e000000000000000"},zcash:{name:"zcash",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f80000000000000000000000000000ffffc000000000000000000000000003fffff80000000000000000000000000ffffffe0000000000000000000000003fffffff800000000000000000000000ffffffffc00000000000000000000001fffffffff00000000000000000000003ffe001fff80000000000000000000007ff00003ffc000000000000000000000ffc00000ffe000000000000000000001ff803f003ff000000000000000000003fe003f001ff000000000000000000007fc003f000ff800000000000000000007f8003f0007fc0000000000000000000ff0003f0003fc0000000000000000000fe01fffff01fe0000000000000000001fe01fffff00ff0000000000000000001fc01fffff007f0000000000000000003f881fffff007f0000000000000000003f801fffff003f8000000000000000003f201ffffe003f801f800e001f80e01c7f401ffffe003f807fe00f007fe0e01c7f008003fc001fc0fff01f00fff0e01c7f010007f8001fc1e0f01f00f070e01c7e02000ff8001fc1e0703f81e078e01cfe04001ff0001fc1c0703b81e078e01cfe88083fe0001fc3c0783b80f000e01cfe10103fc0000fc3c00079c0fc00e01cfe20207fc0000fc3c00071c07f00fffcfe4040ff80000fc3c00071e03fc0fffcfe8880ff00001fc3c000f0e007e0fffcfe1101fe00001fc3c000e0e001f0e01cfe2223fe00001fc3c078fff00078e01c7e4407fc00001fc1c071fff1c078e01c7f0887f800001fc1e071c071c078e01c7f510ff777003f81e0f3c079e070e01c7f2a1fffff003f80ffe38038fff0e01c3f943fffff003f807fc380387fe0e01c3faabfffff007f001f87803c1f80e01c1fd53fffff007f0000000000000000001fcabfffff00ff0000000000000000000fe53fffff01fe0000000000000000000ff2803f0081fe00000000000000000007f9553f1003fc00000000000000000003fcaa3f2007fc00000000000000000003fe443f400ff800000000000000000001ff2abf003ff000000000000000000000ffc100007fe0000000000000000000007ff2a221ffc0000000000000000000003ffc000fff80000000000000000000001fffe1ffff00000000000000000000000ffffffffe000000000000000000000003fffffff8000000000000000000000001fffffff00000000000000000000000003fffffc00000000000000000000000000fffff0000000000000000000000000000fff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},dash:{name:"dash",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fffffc03fffff00ffffff8fe000fe007fffffe07fffff81ffffff8fe000fe00ffffffe1ffffff83ffffff1fc001fc00ffffffe1ffffff87ffffff1fc001fc00ffffffe3ffffff8fffffff1fc001fc0000000fe3f8003f8fe000003f8003f80000001fc7f8003f8fe000003f8003f80fff001fc7f0007f1fffffe03ffffff81ffe001fc7f0007f1ffffff07ffffff81ffe003f87f1ffff1ffffff87ffffff01ffe003f8fe1fffe0ffffff87ffffff03ffe003f8fe1fffe07fffff8fffffff00000007f0fe3fffe000003f8fe000fe00000007f1fc3fffc000007f8fe000fe007ffffff1fc001fc7ffffff1fc001fe00ffffffe1fc001fc7ffffff1fc001fc00ffffffe3f8003f8ffffffe1fc001fc00ffffffc3f8003f8ffffffc3fc003fc01ffffff03f8003f8ffffff83f8003f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},bitcoin_cash:{name:"bitcoin_cash",hex:"00003ffff00ffffffffff00ffffc000000003ffff01ffffffffff80ffffc000000003fffe03ffffffffffc07fffc000000003fffc03ffff1fffffc03fffc000000003fffc07ffe30fffffe03fffc000000003fff80fffe38ffffff01fffc000000003fff80fffe38ffffff01fffc000000003fff01fffe3803ffff80fffc000000003fff03ffff0000ffffc0fffc000000003fff03ffff0000ffffc0fffc000000003ffe03fff000007fffc07ffc000000003ffe07ffc003c07fffe07ffc000000003ffe07ffc00fe03fffe07ffc000000003ffc07ffc00ff07fffe03ffc000000003ffc0ffffe0ff07ffff03ffc000000003ffc0ffffe07e07ffff03ffc000000003ffc0ffffe07c0fffff03ffc000000003ffc0ffffe07801ffff03ffc000000003ffc0fffff00000ffff03ffc000000003ffc0fffff000007fff03ffc000000003ffc0fffff003c07fff03ffc000000003ffc0fffff03fe03fff03ffc000000003ffc0fffff83ff03fff03ffc000000003ffc0fffff81ff03fff03ffc000000003ffc0fffff81fe03fff03ffc000000003ffc0fffff81fe07fff03ffc000000003ffc0fffffc1f807fff03ffc000000003ffc07ffffc0e00fffe03ffc000000003ffe07ffffc0001fffe07ffc000000003ffe07ffffc0007fffe07ffc000000003ffe03fffe0003ffffc07ffc000000003fff03fffe0023ffffc0fffc000000003fff03fffe0061ffffc0fffc000000003fff01fffe3c71ffff80fffc000000003fff80fffffc71ffff01fffc000000003fff80fffffc71ffff01fffc000000003fffc07ffffe3ffffe03fffc000000003fffc07ffffffffffc03fffc000000003fffe03ffffffffffc07fffc000000003fffe01ffffffffff807fffc000000003ffff00ffffffffff00ffffc000000003ffff807ffffffffe01ffffc000000003ffffc03ffffffffc03ffffc000000003ffffe00ffffffff007ffffc000000003fffff007ffffffe00fffffc000000003fffff801ffffff801fffffc000000003fffffc007ffffe003fffffc000000003fffffe000ffff0007fffffc000000003ffffff0000ff0000ffffffc00000000000000000000000000000000000000000000000000000000000000000000000000038000001c000000000e00000000001fe39800001c001fe0000e00000000001ff198000018003fc0000e00000000001c7818000000007840000e00000000001c3b9f1f3f1dfc700fc7eff0000000001c739f3f7f9dfe700fe7eff0000000001ff39878739dcee000ee0e78000000001ffb9870e1ddc6e0036f0e38000000001c3b9870e1ddc6700fe7ce38000000001c3b9870e1ddc6701c61ee38000000001c3b987071ddc6781c606e38000000001ffb9fff7f9dc63fffefee38000000001ff39fbf3f1dc61fefefee380000"},bitcoin_gold:{name:"bitcoin_gold",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc000000000000000000000000000000ff80000000000000000000000000000007e00000000000000000000000000000fcf80000000000000000000000000000ff1e0000000000000000000000000000ffe78000000000000000000000000000fff9c000000000000000000000000000fffce000000000000000000000000000ffff7000000000000000000000000000ffffb800000000000000000000000000ffffdc00000000000000000000000000ffffee00000000000000000000000000c7fff700000000000000000000000000fdfffb00000000000000000000000000ff7ffb80000000000000000000000000f7bffd80000000000000000000000000f1dffec0000000000000000000000000f0fffec0000000000000000000000000fe37ffe0000000000000000000000000ffbbff60000000000000000000000000ffddff60000000000000000000000000ffcdfff00000000000000000000000001fceffb00000000000000000000000000fc6ffb3f1ffe7e1f8770e1f81f8f1fc0fc3ffb3f9ffeff3fc778e3fc7fcf1ff0fc37ff3f9fffff7fe77ce7fe7fef1ff7fc37ff3b9c71e3f0f77cef0cf1ef1e7ff837fd3f9c73c0e0f77eee00e0ef1e3ffc37fd3f9c73c0e0777fee7fe0ff1e3ffe37fd3fdc73c0e07777ee7ee0ff1e3fff37fd39dc73c0e0f777ee7ee0ef1e307f37ff39dc71e3f0f773ef0ef1ef1e707f37ff3fdc71ff7fe771e7fe7feffff07f3ffb3fdc70ff3fc771e7fc7fcffff07f6ffb3f9c707e1f8770e1f01f0fffc1ffeffb0000000000000000000000000ffedfff0000000000000000000000000fffdff60000000000000000000000000ffbbff60000000000000000000000000fe77ffe0000000000000000000000000f0effec0000000000000000000000000f1dfffc0000000000000000000000000e7bffd80000000000000000000000000ff7ffb80000000000000000000000000f9fffb0000000000000000000000000087fff600000000000000000000000000ffffee00000000000000000000000000ffffdc00000000000000000000000000ffffb800000000000000000000000000ffff7000000000000000000000000000fffce000000000000000000000000000fffbc000000000000000000000000000ffe78000000000000000000000000000ff1e0000000000000000000000000000f878000000000000000000000000000003e00000000000000000000000000000ff800000000000000000000000000000fc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},vertcoin:{name:"vertcoin",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ff00000000000000000000000000003ffff000000000000000000000000001fffffc00000000000000000000000003ffffff0000000000000000000000000fffffff8000000000000000000000003fffffffe000000000000000000000007ffffffff00000000000000000000000fffffffff80000000000000000000001fffffffff00000000000000000000003fffffffff00000000000000000000007ffffffffe00000000000000000000007ffffffffc0000000000000000000000fffffffffc0000000000000000000001fffffffff80000000000000000000001fffffffff00000000000000000000003ffffffffe00200000000000000000003ffffffffe00200000000000000000007ffffffffc00700000000000000000007ffffffff800f00000000000000000007ffffffff801f80000000000006000007ffffffff001f8000000000000600000ffffffffe003f8000004000000000000ffffffffe007f8000004000000000000ffffffffc007f81e049f83c1e0613c00ffffffff800ff83f05df8fc3f0e1fe00fe000fff001ffc61860408061821c200fc0007ff003ffc40840418040c218200f80003fe003ffc40840410040c218300ffe001fc007ffcff840410040c218300fff001fc00fff8c0040410040c218300fff800f800fff840040418040c218300fff8007001fff8600404180608218300fffc003003fff83084040c03182183007ffe002007fff81f840787e1f02183007fff000007fff80000000000000000007fff00000ffff00000000000000000003fff80001ffff00000000000000000003fffc0001fffe00000000000000000003fffe0003fffe00000000000000000001fffe0007fffc00000000000000000000ffff0007fffc00000000000000000000ffff800ffff8000000000000000000007fffc01ffff8000000000000000000003fffc03ffff0000000000000000000003fffe03fffe0000000000000000000001ffff07fffc0000000000000000000000ffff8ffff800000000000000000000007fffdffff000000000000000000000001fffffffe000000000000000000000000fffffff80000000000000000000000003fffffe00000000000000000000000000fffff8000000000000000000000000001fffe00000000000000000000000000001fe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},namecoin:{name:"namecoin",hex:"00000000000000000000000000000000000000000000000ff00000000000000000000000000000ffff0000000000000000000000000003ffffc00000000000000000000000000ffffff00000000000000000000000001ffffff80000000000000000000000007ffffffe000000000000000000000000ffffffff000000000000000000000001ffffffff800000000000000000000003ffffffffc00000000000000000000007ffffffffe00000000000000000000007ffffffffe0000000000000000000000fff87fff1f0000000000000000000000fff07ffc3f0000000000000000000001ffe03ffc3f8000000000000000000001ffe01ff83f8000000000000000000003ffe11ff87fc000000000000000000003ffc18ff87fc000000000000000000003ffc187f07fc000000000000000000007ffc1c3f07fe000000000000000000007ffc0e3f0ffe000000000000000000007ff8061f0ffe000000000000000000007ff8070e0ffe000000000000000000007ff843860ffe000000000000000000007ff061c61ffe000000000000000000007ff071c21ffe000000000000000000007ff0f8e01ffe000000000000000000007ff0f8701ffe000000000000000000007fe0fc383ffe000000000000000000003fe0fe383ffc000000000000000000003fe1fe183ffc000000000000000000003fe1ff087ffc000000000000000000003fc1ff807ffc000000000000000000001fc1ffc07ff8000000000000000000001fc3ffc0fff8000000000000000000000f87ffe1fff0000000000000000000000fffffffffe00000000000000000000007ffffffffe00000000000000000000003ffffffffc00000000000000000000001ffffffff800000000000000000000000ffffffff0000000000000000000000007ffffffe0000000000000000000000003ffffffc0000000000000000000000001ffffff800000000000000000000000007ffffe000000000000000000000000001ffff80000000000000000000000000003ffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000001c0000000000000000000000000000001800000000000000000000000000000000000000000000000fc1fcfff0f87e7e39fc0000000000001fe3f8fff1fcfefe39fc0000000000001ce739ce738de1e7399c0000000000001cee39ce731dc1c7738c00000000000018ee39ce77f9c1c7739c00000000000038ee31ce77f1c187739c00000000000039ce738e7701c18e731c00000000000039cff39c63f1f9fe671c00000000000039c7f39ce3f1f9fce73800000000000031c3e39ce1f07870e73800000000000000000000000000000000000000"},monacoin:{name:"monacoin",hex:"00000000002000000000040000000000000000000030000000000c0000000000000000000030000000000c0000000000000000000038000000001c000000000000000000003c000000003c000000000000000000007c000000003e000000000000000000007e000000007e000000000000000000007f00000000fe000000000000000000007f00000000fe00000000000000000000ff80000001ff00000000000000000000ff80000001ff00000000000000000000ffc0000003ff00000000000000000000ffe0000007ff00000000000000000001ffe0000007ff80000000000000000001fff07ffe0fff80000000000000000001ffffffffffff80000000000000000001ffffffffffff80000000000000000001ffffffffffff80000000000000000003ffffffffffffc0000000000000000003ffffffffffffc0000000000000000003ffffffffffffc0000000000000000003ffffffffffffc0000000000000000007ffffffffffffe000000000000000000ffffffffffffff000000000000000001ffffffffffffff800000000000000003ffffffffffffffc00000000000000007fff1ffffff8fffe00000000000000007ffe3ffffffc7ffe0000000000000000fffc7ffffffe3fff0000000000000001fff8ffffffff1fff8000000000000001fff1ffffffff8fff8000000000000003fff3fe7ffe7fc7ffc000000000000003ffe7fe3ffc7fe7ffc000000000000003fffffe3ffc7fffffc000000000000007ffffff0000ffffffe000000000000007ffffff0001ffffffe000000000000007ffffff8001ffffffe000000000000007ffffffcfe3ffffffe000000000000007ffffffc7e3ffffffe000000000000007ffffffe3c7ffffffe000000000000007ffffffe3cfffffffe000000000000007fffffff18fffffffe000000000000007fffffff91fffffffe000000000000003fffffff81fffffffc000000000000003fffffffc3fffffffc000000000000003fffffffc3fffffffc000000000000001fffffffe7fffffff8000000000000001fffffffeffffffff8000000000000000ffffffffffffffff00000000000000007fffffffffffffff00000000000000007ffffffffffffffe00000000000000003ffffffffffffffc00000000000000001ffffffffffffff800000000000000000ffffffffffffff0000000000000000007ffffffffffffe0000000000000000001ffffffffffff80000000000000000000ffffffffffff000000000000000000003ffffffffffc000000000000000000000ffffffffff00000000000000000000003ffffffffc00000000000000000000000ffffffff0000000000000000000000000ffffff000000000000000000000000000ffff0000000000000000000000000000000000000000000000"},doge:{name:"doge",hex:"000000000000023c0000000000000000000000000000027c0000000000000000000000000000023a0000000000000000000000000000031a0000000000000000000000000000023e0000000000000000000000000000020d00000000000000000000000000000204800000000000000000000000000002168000000000000000000000000000020b40000000000000000000000000000405800000000000000000000000000004c8d000000000000000000000000000057f25580000000000000000000000001afbcfe200000000000000001600000075757ffd000000000000000021800001aaefaffe400000000000000041e0001d5557f7ff2000000000000000027c01ceaabffaffd000000000000000411a0e755577ff7fe8000000000000004288d8aa889befffe80000000000000041552555415fdffdf40000000000000042a286aaba15ff1bfa00000000000000401541555c45f86ff5200000000000004002808aae2a6cf6fd200000000000004010815ddd9559177e40000000000000200080abbb83ac17ff40000000000000200045455f44f217ffc010000000000020062aeafee0ff8fffe0f0000000000010050555fdfc7ffffff1c00000000000100302aaabfbbbffffff0000000000001000c55557ffdfffbffc00000000000008002aaaafeebfeffffc000000000000040013d558e1fffe07fcfc000000000004202baab20bbffc07ffa000000000000244475567c17ff003ff000000000000020a4eaac8e4bfe001fefe000000000001441dd580e0ffc001ff80000000000002a0bbaa80ecffc000ff7e0000000000037577778097ffc0007f8700000000000286eeebe06fffc0007ff8000000000003015ddddfddffe4003f8c000000000002823bbeaaabffe2003f800000000000036374ff554dfffc007fc000000000000282ebffeabffffc007fc0000000000003655fffffffffd6007fc0000000000002a27ffffffffbfe007fc0000000000002547fffffffcfd6003fc0000000000001aaffffffffcdfa087fc000000000000111ffffffffd576107fc00000000000012a7fffffffeaba00ffc0000000000000557fffffffe55c00ffc0000000000000e8ffffffffeaba01ffc0000000000000d57fffffffffc401ffc0000000000000aa3ffffffff00083ffe0000000000000d43fffffffe000d7ff60000000000000aa7ffffffff00bafff70000000000000943ffffffff0157fff78000000000000aa3ffffffffc2affff7c000000000000b45ffffffffffffffd78000000000000aa9ffffffffffefffafc000000000000150ffffffffffffffd7c000000000000aaa7fffffffffffff3fe0000000000007543fffffffffffff77f0000000000006a89fffffffffffffaff0000000000005140fffffffffffff5ff000000"},digibyte:{name:"digibyte",hex:"0000000000000003c000000000000000000000000000007ffe0000000000000000000000000001ffff8000000000000000000000000007ffffe00000000000000000000000001fc003f80000000000000000000000003f0000fc0000000000000000000000007c00003e000000000000000000000000f800001f000000000000000000000001f000000f800000000000000000000003e0000007c00000000000000000000003c0000003c000000000000000000000078000cc01e0000000000000000000000f00009800f0000000000000000000000f01fffc00f0000000000000000000000e01ffff8070000000000000000000001e03ffffc078000000000000000000001c00000fe038000000000000000000001c000003e038000000000000000000001c000003e038000000000000000000003c003e03e03c000000000000000000003c003c03e03c000000000000000000003c003c03c03c000000000000000000003c007807c03c000000000000000000003c007807803c000000000000000000003c00f80f003c000000000000000000001c00f01f0038000000000000000000001c00f03e0038000000000000000000001c01f1f80038000000000000000000001e01fff00078000000000000000000000e03ff800070000000000000000000000f03fc0000f0000000000000000000000700cc0000e0000000000000000000000780000001e00000000000000000000003c0000003c00000000000000000000003e0000007c00000000000000000000001f000000f800000000000000000000000f800001f0000000000000000000000007c00003e0000000000000000000000003f0000fc0000000000000000000000001fe007f800000000000000000000000007ffffe000000000000000000000000001ffff80000000000000000000000000003ffc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180060000000000000000000000001fc3000c7f000000000000000000000019e0000063000600000000000000000038e00600c3000e06000000000000000030c63f98c6719f1f800000000000000030c66318fc330c31800000000000000061cc63318c3618730000000000000000618cc6318c34187f00000000000000006318c6330c3c30600000000000000000fe18ee63983838600000000000000000fc18ec63f0303c7c000000000000000000000c00006000000000000000000000000018000060000000000000000000000003f00003c0000000000000000000000001c0000300000000000000"},decred:{name:"decred",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffc0007ffffe0000000000000000000fffe0003fffffc0000000000000000007fff0001ffffff0000000000000000003fffc000ffffff8000000000000000001fffe0007fffffc0000000000000000007fff0001ffffff0000000000000000003fff8000ffffff0000000000000000001fffc0007fffff8000000000000000000fffe0003fffffc0000000000000000007fff8001fffffe0000000000000000003fffc000007ffe0000000000000000003fffe000001fff000000000000000000fffff000000fff000000000000000001fffff8000007ff800000000000000003fffffc000003ff80000000000000000ffffffe000001ff80000000000000001fffffff800001ffc0000000000000001fffffffc00000ffc0000000000000003fffffffe00000ffc0000000000000007ffffffff00000ffc0000000000000007ffe0000000000ffc000000000000000fff80000000000ffc000000000000000fff00000000000ffc000000000000001ffe00000000000ffc000000000000001ffc00000000000ffc000000000000001ff800000000001ffc000000000000003ff800000000001ff8000000000000003ff000000000003ff8000000000000003ff000000000007ff8000000000000003ff00000000000fff0000000000000003ff00000000001fff0000000000000003ff00000000007ffe0000000000000003ff00000ffffffffe0000000000000003ff000007fffffffc0000000000000003ff000003fffffff80000000000000003ff800001fffffff80000000000000001ff8000007ffffff00000000000000001ffc000003fffffc00000000000000001ffe000001fffff800000000000000000fff000000fffff000000000000000000fff8000007fffc0000000000000000007ffe000003fffc0000000000000000007fffff8001fffe0000000000000000003fffffc0007fff0000000000000000001fffffe0003fff8000000000000000000ffffff0001fffc000000000000000000ffffff8000fffe0000000000000000003fffffe0007fff8000000000000000001ffffff0003fffc000000000000000000ffffff8000fffe0000000000000000003fffffc0007fff00000000000000000007ffffe0003fff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},multibit:{name:"multibit",hex:"0ffc07f8e01c7ffe07ff0000000000001ff80ff9e03c7fff83ff8000000000003ff03ff9e03c7fffc0ffc000000000007fe07ff9e03c7fffe0ffc000000000007fc0fff9e03c7ffff07fe00000000000ffc1fff9e03c7ffff83ff00000000000ff83ff81e03c7ffffc1ff00000000000ff07e001e03c17fffe0ff80000000000fe0f0001e03c03ffff0ffc0000000000fe1f0001e03c00ffff87fc0000000000fc1f1fffffff803fff83fe0000000000f83f1ffffffffc0fffc3fe0000000000f87f1fffffffff07ffe1fe0000000000f07f1fffffffffc3ffe1ff0000000000f0ff00fff87fffe3fff0ff0000000000e0ff003fe001fff1fff0ff8000000000e0ff801fe0007ff1fff87f8000000000e1fffe1fe0003ff9fff87f8000000000c3ffff1fe0f81ff8fff87f8000000000c3ffff1fe1fc0ff8fffc3fc000000000c3ffff1fe1fe0ff8fffc3fc00000000087ffff1fe1fe0ff8fffc1fc00000000087ffff1fe1ff0ff8fffe1fc00000000087ffff1fe1fe0ff8fffe1fe00000000087ffff1fe0fc0ff1fffe1fe0000000008fffff1fe0f01ff1fffe1fe0000000000fffff1fe0003fe3fffe1fe0000000000fffff1fe0007fc3ffff0fe0000000000fffff1fe001ff87ffff0fe0000000000fffff1ffffffe07ffff0fe0000000000fffff1ffffffe03ffff0fe0000000000fffff1fffffffe0ffff0fe0000000000fffff1ffffffff87fff0fe0000000000fffff1e3f8c03fc7fff0fe0000000000fffff1e3f0c00fe3fff0fe0000000000fffff1e3f8c007f3fff0fe0000000000fffff1e3f8c003f1fff0fe0000000000fffff1e3f8c7c3f1fff0fe0000000000fffff1e3f8c7e1f9ffe1fe00000000087ffff1e000c7e1f9ffe1fe00000000087ffff1e000c7e1f9ffe1fe00000000087ffff1e000c7e1f9ffe1fc00000000087ffff1e1f0c7e1f9ffe1fc000000000c3ffff1e3f8c7e1f1ffc3fc000000000c3ffff1e3f8c7e1f1ffc3fc000000000c3ffff1e3f8c7c3f1ff83fc000000000e1ffe01e3f8c003f3ff87f8000000000e1ffc01e3f08007e3ff07f8000000000e0ffc03e3f0801fc7ff07f8000000000f0ff8ffffffffffc7ff0ff0000000000f0ff8ffffffffff0ffe0ff0000000000f87f8fffffffffe1ffe1ff0000000000f83f8fffffffff83ffc3fe0000000000fc3f8fffffffe007ff83fe0000000000fe1f8001e03c001fff87fc0000000000fe0f8001e03c007fff07fc0000000000ff07c001e03c07fffe0ff80000000000ff83fff9e03c7ffffc1ff80000000000ff83fff9e03c7ffff83ff000000000007fc1fff9e03c7ffff03fe000000000007fe07ff9e03c7fffe07fe000000000003ff03ff9e03c7fffc0ffc000000000001ff81ff9e03c7fff81ff8000000000000ffc0ff9e03c7ffe03ff000000000000"},reddit:{name:"reddit",hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000f80fe000000000000000000000000000ff9c7000000000000000000000000001cff8300000000000000000000000000180f830000000000000000000000000018038300000000000000000000000000380183000000000000000000000000003001cf000000000000000000000000003000fe0000000000000000000000000070007c000000000000000000000000006000000000000000000000000000000060000000000000000000000000000003f00000000000000000000000000000ffffc000000000000000000000000007fffff800000000000000000000001c1fc000fe0e000000000000000000007ffc00000fbf80000000000000000000fff0000003ffc0000000000000000001c3c0000000f0e0000000000000000001878000000078600000000000000000018e000000001c600000000000000000018c000000000c600000000000000000019c01f001e006600000000000000000019803f803f00760000000000000000001f003f807f803e0000000000000000000f003f807f803c00000000000000000007003f807f803800000000000000000007003f803f001800000000000000000007001f001f0018000000000000000000070000000000380000000000000000000700000000003800000000000000000003000000000030000000000000000000030000000000300000000000000000000180000000007000000000000000000001c00c000c00e000000000000000000000e00f003c00c0000000000000000000007007fff803c0000000000000000000007801ffe00780000000000000000000001c001e000e00000000000000000000000f0000003c000000000000000000000007e00001f8000000000000000000000001fc000fe00000000000000000000000003fffff0000000000000000000000000007fff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},hacker:{name:"hacker",hex:"00000000000000000000000000000000000000007ffffffffffffffe00000000000000004000040000200002000000000000000040000403c020000200000000000000004000041ff820000200000000000000004000043ffc20000200000000000000004000047ffe20000200000000000000004000047ffe2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff2000020000000000000000400004ffff20000200000000000000004000047ffe20000200000000000000004000047ffe20000200000000000000004000043ffc20000200000000000000004000040ff0200002000000000000000040000403c02000020000000000000000400004000020000200000000000000007ffffffffffffffe000000000000000040000400002000020000000000000000400004000020000200000000000000004000040000207f020000000000000000400004000021ffc20000000000000000400004000023ffe20000000000000000400004000023fff20000000000000000400004000027fff20000000000000000400004000027fff2000000000000000040000400002ffffa000000000000000040000400002ffffa000000000000000040000400002ffffa000000000000000040000400002ffffa0000000000000000400004000027fff20000000000000000400004000027fff20000000000000000400004000023fff20000000000000000400004000023ffe20000000000000000400004000021ffc200000000000000004000040000207f02000000000000000040000400002000020000000000000000400004000020000200000000000000007ffffffffffffffe00000000000000004000040000200002000000000000000040780403c0201e02000000000000000041ff040ff020ff82000000000000000043ff843ffc21ffc2000000000000000047ffc47ffe23ffe200000000000000004fffe47ffe27fff200000000000000004fffe4ffff27fff200000000000000005fffe4ffff27fffa00000000000000005ffff4ffff2ffffa00000000000000005ffff4ffff2ffffa00000000000000005ffff4ffff2ffffa00000000000000005ffff4ffff2ffffa00000000000000004fffe4ffff27fff200000000000000004fffe47ffe27fff2000000000000000047ffc47ffe23ffe2000000000000000043ff843ffc21ffc2000000000000000041ff041ff820ff820000000000000000407c0403c0203e020000000000000000400004000020000200000000000000007ffffffffffffffe0000000000000000000000000000000000000000"},polis:{name:"polis",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000007fe00000000e00070001c000000000007ff00000000e0007000180000080000070f00000000e00070000000000c0000070780000000e00070000000001c000007038fc733f8e1f873be3c00003e00000707bfe7f7fce3fc73ff3c00003f00000707bcf7f71ee79e73ef3c00007f000007ff3877871ee70e7387bc00007f800007ff01f7803eefff7387bc0000ff800007fe1ff783feefff7387bc0000ffc00007003e7787deeffe7387bc0001ffc000070078778e1eef007387bc0003f7e000070070f78e1ee70e7387bc0003f3f000070079f78f3ee7fe7387bc0007e3f00007003ff787fee3fc7387bc0007c1f80007001e7783cee1f87387bc000fc0f8000000000000000000000000000f80fc000000000000000000000000001f807e000000000000000000000000003f007e0007fe0003ce000000000000003f003f0007ff0003ce000000000000007e001f00070f0003c0000000000000007c001f8007078003c000000000000000fc000f8007038fe3ce3f800000000001f8000fc007079ff3ce7fc00000000001f80007e00707befbcef1c00000000003f00007e007ff387bcef1c00000000003f00003f007ff783bcefc000000000007e00001f007fe783bce7f800000000007c00001f80700783bce1fc0000000000fc00000f80700783bce03e0000000001f83fffffc0700383bcee0e0000000001f87fffffe07003cfbcef9e0000000003f07fffffe07001ff3ce7fc0000000003e0fffffff07000fe3ce3f80000000007e0fffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},carlos:{name:"carlos",hex:"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000007f80000007f000000000000000000000ffc00000fffc00000000000000000000fee00000fffc00000000000000000001fe300380fffa00000000000000000000f8180f807ff800000000000000000003ff0806f87ff000000000000000000007f88002807fd000000000000000000007ffc4000070300000000000000000000f4fe0000180000000000000000000000e0fe0000000000000000000000000001e7ff0000000000000000000000000001e7ff0000000000000000000000000001c7bf0000000000000000000000000001c09f0000000000000000000000000001d05f0000000000000000000000000001c01f1800000000000000000000000001c01e1800000000000000000000000000e01e3800000000000000000000000000cffc300000000000000000000000000047fc000000000000000000000000000007f400000000000000000000000000000fe000000000000000000000000000000fc800000000000000000000000000000fc800000000000000000000000000000781e0000000000000000000000000000007e000000000000000000000000000000fe000000000000000000000000000003fc00000000000000000000000000000ff800000000000000000000000000008ff0000000000000000000000000000107e0000000000000000000000000000003e0000000000000000000000000000007c000000000000000000000000000000fc000000000000000000000000000001f8000000000000000000000000000003f0000000000000000000000000000183f0000000000000000000000000000103f0000000000000000000000000000407f000000000000000000000000000040ee000000000000000000000000000040e00000000000000000000000000000c1c60000000000000000000000000000c39c0000000000000000000000000000e73c0000000000000000000000000000e73c0000000000000000000000000000e6780000000000000000000000000000ee780000000000000000000000000000ec780000000000000000000000000001fc780000000000000000000000000003f8700000000000000000000000000003f8700000000000000000000000000002f8700000000000000000000000000003f8700000000000000000000000000001f0200000000000000000000000000001f0000000000000000000000000000001d0000000000000000000000000000001f0000000000000000000"},xrc:{name:"xrc",hex:"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc000000000000000000000000000003ff00000000000000000000000000000fff80000000000000000000000000001fff80000000000000000000000000007f8fc038000000000000000000000000fe07c0fe000000000000000000000001fc03c3ff800000000000000000000001f803cfffc00000000000000000000003f003ff83c00000000000000000000003e007fe01e00000000000000000000007c007fc00f0000000000000000000000f800ff800f0000000000000000000000f801ff080e0000000000000000000000f001ff3c3e0000000000000000000001f003fffffe0000000000000000000001f043fffffc0000000000000000000007f0e7fffff8000000000000000000000ff1fffffff0000000000000000000003fffffffffe0000000000000000000007fffffffffe000000000000000000000fffffffffff000000000000000000001fffffffffff800000000000000000001fffffffffffc00000000000000000003f83fffe0fffe00000000000000000003f00fffc03fff00000000000000000007e007ff801fff00000000000000000007c703ff180fff8000000000000000000fcf83ff3e0fff8000000000000000000f9cc1fe6307ffc000000000000000000f9861fec107ffc000000000000000001f9861fec107ffc000000000000000001f98c1fe6307ffc000000000000000001f8fc3fe7e0fffe000000000000000001fc783073c0fffe000000000000000001fe00603001fffe000000000000000001ff00e03803fffe000000000000000001ff81f03e0ffffe000000000000000001fe7ff87ff3fffe000000000000000000fc0ffcffc1fffe000000000000000000fcc3ffff18fffc000000000000000000fcf87fc07cfffc0000000000000000007e78000439fff80000000000000000007f223c7c91fff80000000000000000003f0e793dc3fff00000000000000000001fff3399fffff00000000000000000001fff87c3ffffe00000000000000000000fffffffffffc000000000000000000007ffffffffff8000000000000000000001ffffffffff0000000000000000000000fffffffffc00000000000000000000003ffffffff0000000000000000000000007ffffff800000000000000000000000003ffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}),$ce1f303d0aa8ec51$var$getTouchData=()=>({"wallpaper-1":{name:"wallpaper-1",hex:"77616c6c70617065722d312e706e67"},"wallpaper-2":{name:"wallpaper-2",hex:"77616c6c70617065722d322e706e67"},"wallpaper-3":{name:"wallpaper-3",hex:"77616c6c70617065722d332e706e67"},"wallpaper-4":{name:"wallpaper-4",hex:"77616c6c70617065722d342e706e67"}}),$ce1f303d0aa8ec51$var$getProData=()=>({"wallpaper-1":{name:"wallpaper-1",hex:"77616c6c70617065722d312e6a7067"},"wallpaper-2":{name:"wallpaper-2",hex:"77616c6c70617065722d322e6a7067"},"wallpaper-3":{name:"wallpaper-3",hex:"77616c6c70617065722d332e6a7067"},"wallpaper-4":{name:"wallpaper-4",hex:"77616c6c70617065722d342e6a7067"},"wallpaper-5":{name:"wallpaper-5",hex:"77616c6c70617065722d352e6a7067"},"wallpaper-6":{name:"wallpaper-6",hex:"77616c6c70617065722d362e6a7067"},"wallpaper-7":{name:"wallpaper-7",hex:"77616c6c70617065722d372e6a7067"}}),$ce1f303d0aa8ec51$var$getHomeScreenHex=(r,i)=>{var n,s;let a;switch(r){case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.Mini:case $3FhS8.EDeviceType.ClassicPure:a=$ce1f303d0aa8ec51$var$getT1Data();break;case $3FhS8.EDeviceType.Touch:a=$ce1f303d0aa8ec51$var$getTouchData();break;case $3FhS8.EDeviceType.Pro:a=$ce1f303d0aa8ec51$var$getProData();break;default:a={}}return null!==(s=null===(n=a[i])||void 0===n?void 0:n.hex)&&void 0!==s?s:""},$ce1f303d0aa8ec51$var$getHomeScreenDefaultList=r=>{let i;let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");switch(n){case $3FhS8.EDeviceType.Classic:case $3FhS8.EDeviceType.Classic1s:case $3FhS8.EDeviceType.Mini:case $3FhS8.EDeviceType.ClassicPure:i=$ce1f303d0aa8ec51$var$getT1Data();break;case $3FhS8.EDeviceType.Touch:i=$ce1f303d0aa8ec51$var$getTouchData();break;case $3FhS8.EDeviceType.Pro:i=$ce1f303d0aa8ec51$var$semver__default.default.gte(s,"4.10.0")?$ce1f303d0aa8ec51$var$getProData():Object.keys($ce1f303d0aa8ec51$var$getProData()).slice(0,4).reduce((r,i)=>(r[i]=$ce1f303d0aa8ec51$var$getProData()[i],r),{});break;default:i={}}return Object.keys(i)},$ce1f303d0aa8ec51$var$getHomeScreenSize=({deviceType:r,homeScreenType:i,thumbnail:n})=>{let s={touch:{thumbnail:{Nft:{width:238,height:238},WallPaper:{width:144,height:240}},full:{width:480,height:800}},pro:{thumbnail:{Nft:{width:226,height:226,radius:40},WallPaper:{width:144,height:240,radius:40}},full:{width:480,height:800}}}[r];if(s)return n?s.thumbnail[i]:s.full},$ce1f303d0aa8ec51$var$isBleConnect=r=>"react-native"===r||"lowlevel"===r,$ce1f303d0aa8ec51$var$wait=r=>new Promise(i=>{setTimeout(i,r)}),$ce1f303d0aa8ec51$var$findDefectiveBatchDevice=r=>{if(!r)return;let{onekey_serial:i,se_ver:n}=r;if(!i)return;let s=+i.slice(5);if(!Number.isNaN(s))return s>=21032200001&&s<=21032201500&&"1.1.0.2"===n},$ce1f303d0aa8ec51$var$getDefectiveDeviceInfo=r=>{if(!$ce1f303d0aa8ec51$var$findDefectiveBatchDevice(r))return null;let i=$ce1f303d0aa8ec51$var$getDeviceUUID(r),n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=r.se_ver;return{serialNo:i,seVersion:s,deviceType:n||"Unknown"}},$ce1f303d0aa8ec51$var$CORE_EVENT="CORE_EVENT",$ce1f303d0aa8ec51$var$parseMessage=r=>{let{data:i}=r,n={event:i.event,type:i.type,payload:i.payload};return"number"==typeof r.id&&(n.id=r.id),"boolean"==typeof n.success&&(n.success=i.success),n},$ce1f303d0aa8ec51$var$createErrorMessage=r=>{let i={error:r.message,code:r.code};return r instanceof $3FhS8.HardwareError&&(i={error:r.message,code:r.errorCode}),{success:!1,payload:i}},$ce1f303d0aa8ec51$var$UI_EVENT="UI_EVENT",$ce1f303d0aa8ec51$var$UI_REQUEST={REQUEST_PIN:"ui-request_pin",INVALID_PIN:"ui-invalid_pin",REQUEST_BUTTON:"ui-button",REQUEST_PASSPHRASE:"ui-request_passphrase",REQUEST_PASSPHRASE_ON_DEVICE:"ui-request_passphrase_on_device",REQUEST_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:"ui-request_select_device_in_bootloader_for_web_device",REQUEST_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:"ui-request_select_device_for_switch_firmware_web_device",CLOSE_UI_WINDOW:"ui-close_window",CLOSE_UI_PIN_WINDOW:"ui-close_pin_window",DEVICE_PROGRESS:"ui-device_progress",BLUETOOTH_PERMISSION:"ui-bluetooth_permission",BLUETOOTH_UNSUPPORTED:"ui-bluetooth_unsupported",BLUETOOTH_POWERED_OFF:"ui-bluetooth_powered_off",BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE:"ui-bluetooth_characteristic_notify_change_failure",LOCATION_PERMISSION:"ui-location_permission",LOCATION_SERVICE_PERMISSION:"ui-location_service_permission",FIRMWARE_PROCESSING:"ui-firmware-processing",FIRMWARE_PROGRESS:"ui-firmware-progress",FIRMWARE_TIP:"ui-firmware-tip",PREVIOUS_ADDRESS_RESULT:"ui-previous_address_result",WEB_DEVICE_PROMPT_ACCESS_PERMISSION:"ui-web_device_prompt_access_permission",BOOTLOADER:"ui-device_bootloader_mode",NOT_IN_BOOTLOADER:"ui-device_not_in_bootloader_mode",REQUIRE_MODE:"ui-device_require_mode",NOT_INITIALIZE:"ui-device_not_initialized",SEEDLESS:"ui-device_seedless",FIRMWARE_OLD:"ui-device_firmware_old",FIRMWARE_NOT_SUPPORTED:"ui-device_firmware_unsupported",FIRMWARE_NOT_COMPATIBLE:"ui-device_firmware_not_compatible",FIRMWARE_NOT_INSTALLED:"ui-device_firmware_not_installed",NOT_USE_ONEKEY_DEVICE:"ui-device_please_use_onekey_device"};$ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage=void 0,function(r){r.CheckLatestUiResource="CheckLatestUiResource",r.StartDownloadFirmware="StartDownloadFirmware",r.FinishDownloadFirmware="FinishDownloadFirmware",r.DownloadLatestUiResource="DownloadLatestUiResource",r.DownloadFirmware="DownloadFirmware",r.DownloadBleFirmware="DownloadBleFirmware",r.DownloadLatestBootloaderResource="DownloadLatestBootloaderResource",r.DownloadLatestUiResourceSuccess="DownloadLatestUiResourceSuccess",r.DownloadFirmwareSuccess="DownloadFirmwareSuccess",r.DownloadBleFirmwareSuccess="DownloadBleFirmwareSuccess",r.DownloadLatestBootloaderResourceSuccess="DownloadLatestBootloaderResourceSuccess",r.AutoRebootToBootloader="AutoRebootToBootloader",r.GoToBootloaderSuccess="GoToBootloaderSuccess",r.SelectDeviceInBootloaderForWebDevice="SelectDeviceInBootloaderForWebDevice",r.SwitchFirmwareReconnectDevice="SwitchFirmwareReconnectDevice",r.ConfirmOnDevice="ConfirmOnDevice",r.FirmwareEraseSuccess="FirmwareEraseSuccess",r.StartTransferData="StartTransferData",r.InstallingFirmware="InstallingFirmware",r.UpdateBootloader="UpdateBootloader",r.UpdateBootloaderSuccess="UpdateBootloaderSuccess",r.UpdateSysResource="UpdateSysResource",r.UpdateSysResourceSuccess="UpdateSysResourceSuccess",r.FirmwareUpdating="FirmwareUpdating",r.FirmwareUpdateCompleted="FirmwareUpdateCompleted"}($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage||($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage={}));const $ce1f303d0aa8ec51$var$createUiMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$UI_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$IFRAME={INIT:"iframe-init",INIT_BRIDGE:"iframe-init-bridge",CALL:"iframe-call",CANCEL:"iframe-cancel",SWITCH_TRANSPORT:"iframe-switch-transport",CALLBACK:"iframe-callback"},$ce1f303d0aa8ec51$var$createIFrameMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$UI_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$RESPONSE_EVENT="RESPONSE_EVENT",$ce1f303d0aa8ec51$var$createResponseMessage=(r,i,n)=>({event:$ce1f303d0aa8ec51$var$RESPONSE_EVENT,type:$ce1f303d0aa8ec51$var$RESPONSE_EVENT,id:r,success:i,payload:i?n:$3FhS8.serializeError(n)}),$ce1f303d0aa8ec51$var$UI_RESPONSE={RECEIVE_PIN:"ui-receive_pin",RECEIVE_PASSPHRASE:"ui-receive_passphrase",SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:"ui-receive_select-device-in-bootloader-for-web-device",SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:"ui-receive_select-device-for-switch-firmware-web-device"},$ce1f303d0aa8ec51$var$createUiResponse=(r,i)=>({event:$ce1f303d0aa8ec51$var$UI_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$DEVICE_EVENT="DEVICE_EVENT",$ce1f303d0aa8ec51$var$DEVICE={CONNECT:"device-connect",CONNECT_UNACQUIRED:"device-connect_unacquired",DISCONNECT:"device-disconnect",CHANGED:"device-changed",ACQUIRE:"device-acquire",RELEASE:"device-release",ACQUIRED:"device-acquired",RELEASED:"device-released",USED_ELSEWHERE:"device-used_elsewhere",UNREADABLE:"unreadable-device",LOADING:"device-loading",BUTTON:"button",PIN:"pin",PASSPHRASE:"passphrase",PASSPHRASE_ON_DEVICE:"passphrase_on_device",WORD:"word",SUPPORT_FEATURES:"support_features",SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:"select_device_in_bootloader_for_web_device",SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:"select_device_for_switch_firmware_web_device",FEATURES:"features"},$ce1f303d0aa8ec51$var$createDeviceMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$DEVICE_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$FIRMWARE_EVENT="FIRMWARE_EVENT",$ce1f303d0aa8ec51$var$FIRMWARE={RELEASE_INFO:"firmware-release-info",BLE_RELEASE_INFO:"ble-firmware-release-info"},$ce1f303d0aa8ec51$var$createFirmwareMessage=(r,i)=>({event:$ce1f303d0aa8ec51$var$FIRMWARE_EVENT,type:r,payload:i}),$ce1f303d0aa8ec51$var$LogBlockEvent=new Set([$ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PIN,$ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PASSPHRASE]),$ce1f303d0aa8ec51$var$Log$d=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.DevicePool),$ce1f303d0aa8ec51$var$getDiff=(r,i)=>{let n=i.filter(i=>void 0===r.find(r=>r.path===i.path)),s=r.filter(r=>void 0===i.find(i=>i.path===r.path)),a=i.filter(i=>{let n=r.find(r=>r.path===i.path);return!!n&&n.session!==i.session}),o=a.filter(r=>"string"==typeof r.session),d=a.filter(r=>"string"!=typeof r.session),f=i.filter(i=>{let n=r.find(r=>r.path===i.path);return!!n&&n.debugSession!==i.debugSession}),l=a.filter(r=>"string"==typeof r.debugSession),u=a.filter(r=>"string"!=typeof r.debugSession),c=n.length+s.length+a.length+f.length>0;return{connected:n,disconnected:s,changedSessions:a,acquired:o,released:d,changedDebugSessions:f,debugAcquired:l,debugReleased:u,didUpdate:c,descriptors:i}};class $ce1f303d0aa8ec51$var$DevicePool extends $ce1f303d0aa8ec51$var$events.exports{static setConnector(r){this.connector=r}static getDevices(r,i,n){var s,a,o,d,f,l,u;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let c={},p=[];if(i){let s=this.devicesCache[i];if(s){let a=r.find(r=>r.path===s.originalDescriptor.path);if(a)return s.updateDescriptor(a,!0),c[i]=s,p.push(s),yield this._checkDevicePool(n),{devices:c,deviceList:p};$ce1f303d0aa8ec51$var$Log$d.debug("found device in cache, but path is different: ",i)}}try{for(s=!0,a=$ce1f303d0aa8ec51$var$__asyncValues(r);!(d=(o=yield a.next()).done);s=!0){u=o.value,s=!1;let r=u,i=yield this._createDevice(r,n);if(i.features){let n=$ce1f303d0aa8ec51$var$getDeviceUUID(i.features);if(this.devicesCache[n]){let i=this.devicesCache[n];i.updateDescriptor(r,!0)}this.devicesCache[n]=i,c[n]=i}p.push(i)}}catch(r){f={error:r}}finally{try{!s&&!d&&(l=a.return)&&(yield l.call(a))}finally{if(f)throw f.error}}return yield this._checkDevicePool(n),{devices:c,deviceList:p}})}static clearDeviceCache(r){r&&delete this.devicesCache[r]}static _createDevice(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=this.getDeviceByPath(r.path);return n||((n=$ce1f303d0aa8ec51$var$Device.fromDescriptor(r)).deviceConnector=this.connector,yield n.connect(),yield n.initialize(i),yield n.release()),n})}static _checkDevicePool(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){yield this._sendConnectMessage(r),this._sendDisconnectMessage()})}static _sendConnectMessage(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){for(let i=this.connectedPool.length-1;i>=0;i--){let n=this.connectedPool[i],s=yield this._createDevice(n,r);$ce1f303d0aa8ec51$var$Log$d.debug("emit DEVICE.CONNECT: ",null==s?void 0:s.features),this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.CONNECT,s),this.connectedPool.splice(i,1)}})}static _sendDisconnectMessage(){for(let r=this.disconnectPool.length-1;r>=0;r--){let i=this.connectedPool[r],n=(null==i?void 0:i.path)?this.getDeviceByPath(i.path):null;n&&this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,n),this.disconnectPool.splice(r,1)}}static reportDeviceChange(r){let i=$ce1f303d0aa8ec51$var$getDiff(this.current||[],r);this.upcoming=r,this.current=this.upcoming,$ce1f303d0aa8ec51$var$Log$d.debug("device pool -> current: ",this.current),$ce1f303d0aa8ec51$var$Log$d.debug("device pool -> upcomming: ",this.upcoming),$ce1f303d0aa8ec51$var$Log$d.debug("DeviceCache.reportDeviceChange diff: ",i),i.didUpdate&&(i.connected.forEach(r=>{let i=this.getDeviceByPath(r.path);if(!i){this._addConnectedDeviceToPool(r);return}$ce1f303d0aa8ec51$var$Log$d.debug("emit DEVICE.CONNECT: ",i.features),this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.CONNECT,i)}),i.disconnected.forEach(r=>{this._removeDeviceFromConnectedPool(r.path);let i=this.getDeviceByPath(r.path);if(!i){this._addDisconnectedDeviceToPool(r);return}$ce1f303d0aa8ec51$var$Log$d.debug("emit DEVICE.DISCONNECT: ",i.features),this.emitter.emit($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,i)}))}static getDeviceByPath(r){return Object.values(this.devicesCache).find(i=>i.originalDescriptor.path===r)}static _addConnectedDeviceToPool(r){let i=this.connectedPool.findIndex(i=>i.path===r.path);if(i>-1){this.connectedPool.splice(i,1,r);return}this.connectedPool.push(r)}static _removeDeviceFromConnectedPool(r){let i=this.connectedPool.findIndex(i=>i.path===r);i>-1&&this.connectedPool.splice(i,1)}static _addDisconnectedDeviceToPool(r){let i=this.disconnectPool.findIndex(i=>i.path===r.path);if(i>-1){this.disconnectPool.splice(i,1,r);return}this.disconnectPool.push(r)}static resetState(){this.current=null,this.upcoming=[],this.connectedPool=[],this.disconnectPool=[],this.devicesCache={},this.emitter.removeAllListeners(),$ce1f303d0aa8ec51$var$Log$d.debug("DevicePool state has been reset")}}$ce1f303d0aa8ec51$var$DevicePool.current=null,$ce1f303d0aa8ec51$var$DevicePool.upcoming=[],$ce1f303d0aa8ec51$var$DevicePool.connectedPool=[],$ce1f303d0aa8ec51$var$DevicePool.disconnectPool=[],$ce1f303d0aa8ec51$var$DevicePool.devicesCache={},$ce1f303d0aa8ec51$var$DevicePool.emitter=new $ce1f303d0aa8ec51$var$events.exports;const $ce1f303d0aa8ec51$var$Log$c=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Transport),$ce1f303d0aa8ec51$var$BleLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdBleTransport),$ce1f303d0aa8ec51$var$HttpLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportHttp),$ce1f303d0aa8ec51$var$LowLevelLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportLowLevel),$ce1f303d0aa8ec51$var$NodeUsbLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportNodeUsb),$ce1f303d0aa8ec51$var$WebBleLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdWebBleTransport),$ce1f303d0aa8ec51$var$WebUsbLogger=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdTransportWebUsb);class $ce1f303d0aa8ec51$var$TransportManager{static load(){$ce1f303d0aa8ec51$var$Log$c.debug("transport manager load"),this.defaultMessages=$ce1f303d0aa8ec51$var$DataManager.getProtobufMessages(),this.currentMessages=this.defaultMessages,this.messageVersion="latest"}static configure(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$Log$c.debug("Initializing transports",r),"react-native"===r)this.reactNativeInit?$ce1f303d0aa8ec51$var$Log$c.debug("React Native Do Not Initializing transports"):(yield this.transport.init($ce1f303d0aa8ec51$var$BleLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter),this.reactNativeInit=!0);else if("node-usb"===r)yield this.transport.init($ce1f303d0aa8ec51$var$NodeUsbLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter);else if("lowlevel"===r){if(!this.plugin)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured,"Lowlevel transport must have plugin");yield this.transport.init($ce1f303d0aa8ec51$var$LowLevelLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter,this.plugin)}else"desktop-web-ble"===r?yield this.transport.init($ce1f303d0aa8ec51$var$WebBleLogger,$ce1f303d0aa8ec51$var$DevicePool.emitter):"webusb"===r||"desktop-webusb"===r?yield this.transport.init($ce1f303d0aa8ec51$var$WebUsbLogger):yield this.transport.init($ce1f303d0aa8ec51$var$HttpLogger);$ce1f303d0aa8ec51$var$Log$c.debug("Configuring transports"),yield this.transport.configure(JSON.stringify(this.defaultMessages)),$ce1f303d0aa8ec51$var$Log$c.debug("Configuring transports done")}catch(r){if($ce1f303d0aa8ec51$var$Log$c.debug("Initializing transports error: ",r),"ECONNABORTED"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError)}})}static reconfigure(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log$c.debug("Begin reconfiguring transports");let{messageVersion:i,messages:n}=$ce1f303d0aa8ec51$var$getSupportMessageVersion(r);if(this.currentMessages!==n&&n){$ce1f303d0aa8ec51$var$Log$c.debug(`Reconfiguring transports version:${i}`);try{yield this.transport.configure(JSON.stringify(n)),this.currentMessages=n,this.messageVersion=i}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportInvalidProtobuf,`Transport_InvalidProtobuf: ${r.message}`)}}})}static setTransport(r,i){let n=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");"react-native"===n?this.transport=new r({scanTimeout:3e3}):this.transport=new r,i&&(this.plugin=i,$ce1f303d0aa8ec51$var$Log$c.debug("set transport plugin: ",this.plugin)),$ce1f303d0aa8ec51$var$Log$c.debug("set transport: ",this.transport.name,this.transport.version,this.transport.configured)}static getTransport(){return this.transport}static getDefaultMessages(){return this.defaultMessages}static getCurrentMessages(){return this.currentMessages}static getMessageVersion(){return this.messageVersion}}$ce1f303d0aa8ec51$var$TransportManager.reactNativeInit=!1,$ce1f303d0aa8ec51$var$TransportManager.messageVersion="latest",$ce1f303d0aa8ec51$var$TransportManager.plugin=null;const $ce1f303d0aa8ec51$var$assertType=(r,i)=>{let n=Array.isArray(i)?i:i.split("|");if(!n.includes(r.type))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ResponseUnexpectTypeError,`assertType: Response of unexpected type: ${r.type}. Should be ${i}`)},$ce1f303d0aa8ec51$var$cancelDeviceInPrompt=(r,i=!0)=>{var n;let s=r.hasDeviceAcquire()?r.mainId:void 0;if(!s)return Promise.resolve({success:!1,error:$3FhS8.HardwareErrorCode.RuntimeError,payload:{message:"Device disconnected or acquired by someone else"}});let a=null===(n=r.commands)||void 0===n?void 0:n.transport;return i?null==a?void 0:a.call(s,"Cancel",{}).then(()=>({success:!0,error:null,payload:{message:"Cancel request sent"}})).catch(r=>({success:!1,error:r.errorCode,payload:{message:r.message}})):null==a?void 0:a.post(s,"Cancel",{}).then(()=>({success:!0,error:$3FhS8.HardwareErrorCode.RuntimeError,payload:{message:"Cancel request sent"}}))},$ce1f303d0aa8ec51$var$cancelDeviceWithInitialize=r=>{var i;let n=r.hasDeviceAcquire()?r.mainId:void 0;if(!n)return Promise.resolve({success:!1,error:$3FhS8.HardwareErrorCode.RuntimeError,payload:{message:"Device disconnected or acquired by someone else"}});let s=null===(i=r.commands)||void 0===i?void 0:i.transport;return null==s?void 0:s.call(n,"Initialize",{}).then(()=>({success:!0,error:null,payload:{message:"Cancel request sent"}})).catch(r=>({success:!1,error:r.errorCode,payload:{message:r.message}}))},$ce1f303d0aa8ec51$var$Log$b=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.DeviceCommands),$ce1f303d0aa8ec51$var$LogCore=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);class $ce1f303d0aa8ec51$var$DeviceCommands{constructor(r,i){this.device=r,this.mainId=i,this.transport=$ce1f303d0aa8ec51$var$TransportManager.getTransport(),this.disposed=!1,this.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("DeviceCommands",r.sdkInstanceId),$ce1f303d0aa8ec51$var$Log$b.debug(`[DeviceCommands] Created: ${this.instanceId}, device: ${this.device.instanceId}`)}dispose(r){var i,n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.disposed=!0,yield null===(n=(i=this.transport).cancel)||void 0===n?void 0:n.call(i)})}checkDisposed(){if(this.disposed)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"DeviceCommands already disposed")}cancelDeviceOnOneKeyDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{name:r}=this.transport;if("HttpTransport"!==r)return $ce1f303d0aa8ec51$var$cancelDeviceWithInitialize(this.device);try{yield this.device.acquire(),yield $ce1f303d0aa8ec51$var$cancelDeviceWithInitialize(this.device)}catch(r){}})}cancelDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{name:r}=this.transport;if("HttpTransport"!==r)return $ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1);try{yield this.device.acquire(),yield $ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1)}catch(r){}})}cancel(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.disposed&&(this.dispose(!0),this.callPromise))try{yield Promise.all([new Promise((r,i)=>setTimeout(()=>i(Error("cancel timeout")),1e4)),(yield this.callPromise)])}catch(r){this.callPromise=void 0}})}call(r,i={}){var n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log$b.debug("[DeviceCommands] [call] Sending",r);try{let n=this.transport.call(this.mainId,r,i);this.callPromise=n;let s=yield n;return"Failure"===s.type?$ce1f303d0aa8ec51$var$LogCore.debug("[DeviceCommands] [call] Received",s.type,s.message):$ce1f303d0aa8ec51$var$LogCore.debug("[DeviceCommands] [call] Received",s.type),s}catch(s){if($ce1f303d0aa8ec51$var$LogCore.debug("[DeviceCommands] [call] Received error",s),s.errorCode===$3FhS8.HardwareErrorCode.BleDeviceBondError)return{type:"BleDeviceBondError",message:{error:null==s?void 0:s.message}};let r=null===(n=null==s?void 0:s.response)||void 0===n?void 0:n.data,i=null==r?void 0:r.error;if(!i&&r&&"string"==typeof r)try{let n=JSON.parse(r);i=null==n?void 0:n.error}catch(r){}if(r&&$ce1f303d0aa8ec51$var$Log$b.debug("error response",r),"device disconnected during action"===i)return{type:"BridgeDeviceDisconnected",message:{error:i}};if(i&&-1!==i.indexOf("Request failed with status code"))return{type:"CallMethodError",message:{error:null!=r?r:""}};throw s}})}typedCall(r,i,n){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.disposed)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"typedCall: DeviceCommands already disposed");try{let i=["ButtonAck","PinMatrixAck","PassphraseAck","Cancel","BixinPinInputOnDevice"];!i.includes(r)&&n&&$ce1f303d0aa8ec51$var$Log$b.debug("[DeviceCommands] [typedCall] Sending payload",r,n)}catch(r){}let s=yield this._commonCall(r,n);try{$ce1f303d0aa8ec51$var$assertType(s,i)}catch(r){if($ce1f303d0aa8ec51$var$Log$b.debug("DeviceCommands typedcall error: ",r),r instanceof $3FhS8.HardwareError){if(r.errorCode===$3FhS8.HardwareErrorCode.ResponseUnexpectTypeError){if(r.message.indexOf("BridgeNetworkError")>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNetworkError);if(r.message.indexOf("BleDeviceBondError")>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleDeviceBondError);if(r.message.indexOf("BridgeDeviceDisconnected")>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeDeviceDisconnected);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ResponseUnexpectTypeError)}}else throw r}return s})}_commonCall(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=yield this.call(r,i);return this._filterCommonTypes(n,r)})}_filterCommonTypes(r,i){try{"react-native"===$ce1f303d0aa8ec51$var$DataManager.getSettings("env")?$ce1f303d0aa8ec51$var$Log$b.debug("_filterCommonTypes: ",JSON.stringify(r)):$ce1f303d0aa8ec51$var$Log$b.debug("_filterCommonTypes: ",r)}catch(r){}if(this.device.clearCancelableAction(),"Failure"===r.type){let{code:n,message:s}=r.message,a=null;if("Failure_FirmwareError"!==n||s||(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareError)),"Failure_ActionCancelled"===n&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ActionCancelled)),"Failure_PinInvalid"===n&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PinInvalid,s)),"Failure_PinCancelled"===n&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PinCancelled)),"Failure_DataError"===n&&("Please confirm the BlindSign enabled"===s&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlindSignDisabled)),"File already exists"===s&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FileAlreadyExists)),(null==s?void 0:s.includes("bytes overflow"))&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DataOverload)),null==s?void 0:s.includes("Too many inputs"))){let r=s.match(/\((.+?)\)/);a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TooManyInputs,void 0,{count:null==r?void 0:r[1]})}return("Failure_ProcessError"===n&&((null==s?void 0:s.includes("Bootloader file verify failed"))||(null==s?void 0:s.includes("verify failed"))?a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareVerificationFailed,s):(null==s?void 0:s.includes("Firmware downgrade not allowed"))&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareDowngradeNotAllowed,s))),"Failure_UnexpectedMessage"===n&&("PassphraseAck"===i?a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.UnexpectPassphrase):"Not in Signing mode"===s&&(a=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NotInSigningMode))),a)?Promise.reject(a):Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`${n||"Failure_UnknownCode"},${s||"no error message"}`))}if("Features"===r.type)return Promise.resolve($ce1f303d0aa8ec51$var$patchFeatures(r));if("ButtonRequest"===r.type){let i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(i)?this.device.setCancelableAction(()=>this.cancelDeviceOnOneKeyDevice()):this.device.setCancelableAction(()=>this.cancelDevice()),"ButtonRequest_PassphraseEntry"===r.message.code?this.device.emit($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE_ON_DEVICE,this.device):this.device.emit($ce1f303d0aa8ec51$var$DEVICE.BUTTON,this.device,r.message),this._commonCall("ButtonAck",{})}if(r.type,"PinMatrixRequest"===r.type)return this._promptPin(r.message.type).then(r=>"@@ONEKEY_INPUT_PIN_IN_DEVICE"===r?(this.device.setCancelableAction(()=>this.cancelDeviceOnOneKeyDevice()),this._commonCall("BixinPinInputOnDevice").finally(()=>{this.device.clearCancelableAction()})):this._commonCall("PinMatrixAck",{pin:r}),r=>Promise.reject(r));if("PassphraseRequest"===r.type){let i=r.message.exists_attach_pin_user;return this._promptPassphrase({existsAttachPinUser:i}).then(r=>{let{passphrase:n,passphraseOnDevice:s,attachPinOnDevice:a}=r;return a&&i?this._commonCall("PassphraseAck",{on_device_attach_pin:!0}):s?this._commonCall("PassphraseAck",{on_device:!0}):this._commonCall("PassphraseAck",{passphrase:n})})}return r.type,r.type,Promise.resolve(r)}_promptPin(r){return new Promise((i,n)=>{let s=r=>$ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1).then(r=>{let i=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled,`${$ce1f303d0aa8ec51$var$DEVICE.PIN} canceled`);if(r){let{payload:s}=r||{};n(i||Error(null==s?void 0:s.message))}else n(i)}).catch(r=>{n(r)}),a=this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.PIN);if($ce1f303d0aa8ec51$var$Log$b.debug(`[${this.instanceId}] _promptPin called`,{responseID:this.currentResponseID,deviceInstanceId:this.device.instanceId,listenerCount:a}),a>0)this.device.setCancelableAction(s),this.device.emit($ce1f303d0aa8ec51$var$DEVICE.PIN,this.device,r,(r,n)=>{this.device.clearCancelableAction(),r?s():i(n)});else{let r=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(this.device.instanceId),i={commandsInstanceId:this.instanceId,deviceInstanceId:this.device.instanceId,currentResponseID:this.currentResponseID,listenerCount:a,activeRequests:r.map($ce1f303d0aa8ec51$var$formatRequestContext)};$ce1f303d0aa8ec51$var$LogCore.error("[DeviceCommands] [call] PIN callback not configured, cancelling request",Object.assign({},i)),n($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`_promptPin: PIN callback not configured: ${JSON.stringify(i)}`))}})}_promptPassphrase(r){return new Promise((i,n)=>{let s=r=>$ce1f303d0aa8ec51$var$cancelDeviceInPrompt(this.device,!1).then(r=>{let i=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled,`${$ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE} canceled`);if(r){let{payload:s}=r||{};n(i||Error(null==s?void 0:s.message))}else n(i)}).catch(r=>{n(r)});this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE)>0?(this.device.setCancelableAction(s),this.device.emit($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,this.device,r,(r,n)=>{this.device.clearCancelableAction(),n?s():i(r)})):($ce1f303d0aa8ec51$var$LogCore.error("[DeviceCommands] [call] Passphrase callback not configured, cancelling request"),n($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"_promptPassphrase: Passphrase callback not configured")))})}}const $ce1f303d0aa8ec51$var$parseRunOptions=r=>(r||(r={}),r),$ce1f303d0aa8ec51$var$Log$a=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Device),$ce1f303d0aa8ec51$var$deviceSessionCache={};function $ce1f303d0aa8ec51$var$preloadSessionCache(r,i,n){let s=`${r}@${i}`;$ce1f303d0aa8ec51$var$deviceSessionCache[s]=n}class $ce1f303d0aa8ec51$var$Device extends $ce1f303d0aa8ec51$var$events.exports{constructor(r,i){super(),this.deviceConnector=null,this.deviceAcquired=!1,this.features=void 0,this.featuresNeedsReload=!1,this.externalState=[],this.unavailableCapabilities={},this.instance=0,this.internalState=[],this.needReloadDevice=!1,this.keepSession=!1,this.passphraseState=void 0,this.originalDescriptor=r,this.sdkInstanceId=i,this.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("Device",this.sdkInstanceId),this.createdAt=Date.now(),$ce1f303d0aa8ec51$var$Log$a.debug(`[Device] Created: ${this.instanceId}${this.sdkInstanceId?` for SDK: ${this.sdkInstanceId}`:""}`)}static fromDescriptor(r,i){let n=Object.assign({},r);return new $ce1f303d0aa8ec51$var$Device(n,i)}toMessageObject(){var r;if(this.isUnacquired()||!this.features)return null;let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=$ce1f303d0aa8ec51$var$getDeviceType(this.features),s=$ce1f303d0aa8ec51$var$getDeviceBleName(this.features),a=$ce1f303d0aa8ec51$var$getDeviceLabel(this.features);return{connectId:$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)?this.mainId||null:$ce1f303d0aa8ec51$var$getDeviceUUID(this.features),uuid:$ce1f303d0aa8ec51$var$getDeviceUUID(this.features),commType:this.originalDescriptor.commType,sdkInstanceId:this.sdkInstanceId,instanceId:this.instanceId,createdAt:this.createdAt,deviceType:n,deviceId:this.features.device_id||null,path:null===(r=this.originalDescriptor)||void 0===r?void 0:r.path,bleName:s,name:s||a||`OneKey ${null==n?void 0:n.toUpperCase()}`,label:a||"OneKey",mode:this.getMode(),features:this.features,firmwareVersion:this.getFirmwareVersion(),bleFirmwareVersion:this.getBLEFirmwareVersion(),unavailableCapabilities:this.unavailableCapabilities}}connect(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return new Promise((i,n)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)){try{yield this.acquire(),i(!0)}catch(r){n(r)}return}if(!this.mainId||!this.isUsedHere()&&this.originalDescriptor){try{yield this.acquire(),i(!0)}catch(r){n(r)}return}if(this.isUsedHere()){i(!0);return}i(!1)}))}acquire(){var r,i,n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a)?"id":"session";try{if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(a)){let n=yield null===(r=this.deviceConnector)||void 0===r?void 0:r.acquire(this.originalDescriptor.id);this.mainId=null!==(i=n.uuid)&&void 0!==i?i:"",$ce1f303d0aa8ec51$var$Log$a.debug("Expected uuid:",this.mainId)}else this.mainId=yield null===(n=this.deviceConnector)||void 0===n?void 0:n.acquire(this.originalDescriptor.path,this.originalDescriptor.session),$ce1f303d0aa8ec51$var$Log$a.debug("Expected session id:",this.mainId);this.deviceAcquired=!0,this.updateDescriptor({[o]:this.mainId}),this.commands&&(yield this.commands.dispose(!1)),this.commands=new $ce1f303d0aa8ec51$var$DeviceCommands(this,null!==(s=this.mainId)&&void 0!==s?s:"")}catch(r){if(this.runPromise)this.runPromise.reject(r);else throw r;this.runPromise=null}})}release(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if(this.isUsedHere()&&!this.keepSession&&this.mainId||this.mainId&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)){if(this.pendingCallbackPromise)try{$ce1f303d0aa8ec51$var$Log$a.debug("Waiting for callback tasks to complete before releasing device (in release method)"),yield this.pendingCallbackPromise.promise}catch(r){$ce1f303d0aa8ec51$var$Log$a.error("Error waiting for callback tasks in release method:",r)}if(this.commands&&(this.commands.dispose(!1),this.commands.callPromise))try{yield this.commands.callPromise}catch(r){this.commands.callPromise=void 0}try{yield null===(r=this.deviceConnector)||void 0===r?void 0:r.release(this.mainId,!1),this.updateDescriptor({session:null})}catch(r){$ce1f303d0aa8ec51$var$Log$a.error("[Device] release error: ",r)}finally{this.needReloadDevice=!0}}this.deviceAcquired=!1})}getCommands(){return this.commands}generateStateKey(r,i){return i?`${r}@${i}`:r}getInternalState(r){var i,n;$ce1f303d0aa8ec51$var$Log$a.debug("getInternalState session cache: ",$ce1f303d0aa8ec51$var$deviceSessionCache),$ce1f303d0aa8ec51$var$Log$a.debug("getInternalState session param: ",`device_id: ${r}`,`features.device_id: ${null===(i=this.features)||void 0===i?void 0:i.device_id}`,`passphraseState: ${this.passphraseState}`);let s=r||(null===(n=this.features)||void 0===n?void 0:n.device_id);if(!s||!this.passphraseState)return;let a=this.generateStateKey(s,this.passphraseState);return $ce1f303d0aa8ec51$var$deviceSessionCache[a]}updateInternalState(r,i,n,s=null,a=null){$ce1f303d0aa8ec51$var$Log$a.debug("updateInternalState session param: ",`device_id: ${n}`,`enablePassphrase: ${r}`,`passphraseState: ${i}`,`sessionId: ${s}`,`featuresSessionId: ${a}`),r&&(s?$ce1f303d0aa8ec51$var$deviceSessionCache[this.generateStateKey(n,i)]=s:a&&($ce1f303d0aa8ec51$var$deviceSessionCache[this.generateStateKey(n,i)]=a));let o=`${n}`;$ce1f303d0aa8ec51$var$deviceSessionCache[o]&&delete $ce1f303d0aa8ec51$var$deviceSessionCache[o],$ce1f303d0aa8ec51$var$Log$a.debug("updateInternalState session cache: ",$ce1f303d0aa8ec51$var$deviceSessionCache)}setInternalState(r,i){var n,s;if($ce1f303d0aa8ec51$var$Log$a.debug("setInternalState session param: ",`state: ${r}`,`initSession: ${i}`,`device_id: ${null===(n=this.features)||void 0===n?void 0:n.device_id}`,`passphraseState: ${this.passphraseState}`),!this.features||!this.passphraseState&&!i)return;let a=null===(s=this.features)||void 0===s?void 0:s.device_id;if(!a)return;let o=this.generateStateKey(a,this.passphraseState);r&&($ce1f303d0aa8ec51$var$deviceSessionCache[o]=r),$ce1f303d0aa8ec51$var$Log$a.debug("setInternalState done session cache: ",$ce1f303d0aa8ec51$var$deviceSessionCache)}clearInternalState(r){var i;$ce1f303d0aa8ec51$var$Log$a.debug("clearInternalState param: ",r);let n=r||(null===(i=this.features)||void 0===i?void 0:i.device_id);if(!n)return;let s=`${n}`;if(delete $ce1f303d0aa8ec51$var$deviceSessionCache[s],this.passphraseState){let r=this.generateStateKey(n,this.passphraseState);delete $ce1f303d0aa8ec51$var$deviceSessionCache[r]}}initialize(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.passphraseState=null==r?void 0:r.passphraseState,(null==r?void 0:r.initSession)&&this.clearInternalState(null==r?void 0:r.deviceId);let i=this.getInternalState(null==r?void 0:r.deviceId),n={};i&&(n.session_id=i),(null==r?void 0:r.deriveCardano)&&(n.derive_cardano=!0),n.passphrase_state=null==r?void 0:r.passphraseState,n.is_contains_attach=!0,$ce1f303d0aa8ec51$var$Log$a.debug("Initialize device begin:",{deviceId:null==r?void 0:r.deviceId,passphraseState:null==r?void 0:r.passphraseState,initSession:null==r?void 0:r.initSession,InitializePayload:n});try{let{message:i}=yield Promise.race([this.commands.typedCall("Initialize","Features",n),new Promise((r,i)=>{setTimeout(()=>{i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed))},25e3)})]);$ce1f303d0aa8ec51$var$Log$a.debug("Initialize device end: ",i),this._updateFeatures(i,null==r?void 0:r.initSession),yield $ce1f303d0aa8ec51$var$TransportManager.reconfigure(this.features)}catch(r){throw $ce1f303d0aa8ec51$var$Log$a.error("Initialization failed:",r),r}})}getFeatures(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{message:r}=yield this.commands.typedCall("GetFeatures","Features",{});this._updateFeatures(r)})}_updateFeatures(r,i){var n;this.features&&this.features.session_id&&!r.session_id&&(r.session_id=this.features.session_id),this.features&&this.features.device_id&&r.session_id&&this.setInternalState(r.session_id,i),r.unlocked=null===(n=r.unlocked)||void 0===n||n,r=$ce1f303d0aa8ec51$var$fixFeaturesFirmwareVersion(r),this.features=r,this.featuresNeedsReload=!1,this.emit($ce1f303d0aa8ec51$var$DEVICE.FEATURES,this,r)}updateDescriptor(r,i=!1){let n=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(n))return;let s=this.originalDescriptor.session,a=r.session;s!==a&&(this.originalDescriptor.session=a),i&&(this.originalDescriptor=r)}updateFromCache(r){this.mainId=r.mainId,this.commands=r.commands,this.updateDescriptor(r.originalDescriptor,!0),r.features&&this._updateFeatures(r.features)}run(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return this.runPromise&&(yield this.interruptionFromOutside(),$ce1f303d0aa8ec51$var$Log$a.debug("[Device] run error:","Device is running, but will cancel previous operate")),i=$ce1f303d0aa8ec51$var$parseRunOptions(i),this.runPromise=$3FhS8.createDeferred(this._runInner.bind(this,r,i)),this.runPromise.promise})}_runInner(r,i){var n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.isUsedHere()||this.commands.disposed){let n=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if("react-native"!==n){try{yield this.acquire()}catch(r){return this.runPromise=null,Promise.reject(r)}try{r&&(yield this.initialize(i))}catch(r){if(this.runPromise=null,r instanceof $3FhS8.HardwareError)return Promise.reject(r);return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed,`Initialize failed: ${r.message}, code: ${r.code}`))}}else"react-native"===n&&this.commands&&(this.commands.disposed=!1)}if(i.keepSession&&(this.keepSession=!0),r)try{yield r()}catch(r){this.runPromise&&this.runPromise.reject(r),r instanceof $3FhS8.HardwareError&&$3FhS8.ERROR_CODES_REQUIRE_RELEASE.includes(r.errorCode)&&($3FhS8.ERROR_CODES_REQUIRE_DISCONNECT.includes(r.errorCode)&&(yield null===(n=this.deviceConnector)||void 0===n?void 0:n.disconnect(this.mainId)),yield this.release(),$ce1f303d0aa8ec51$var$Log$a.debug(`error code ${r.errorCode} release device, mainId: ${this.mainId}`)),this.runPromise=null;return}(this.keepSession||"boolean"==typeof i.keepSession)&&!1!==i.keepSession||(this.keepSession=!1,yield this.release(),$ce1f303d0aa8ec51$var$Log$a.debug("release device, mainId: ",this.mainId)),this.runPromise&&this.runPromise.resolve(),this.runPromise=null})}interruptionFromOutside(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.commands&&(yield this.commands.dispose(!1)),this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInterruptedFromOutside))})}interruptionFromUser(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInterruptedFromUser);yield null===(r=this.cancelableAction)||void 0===r?void 0:r.call(this,n),yield null===(i=this.commands)||void 0===i?void 0:i.cancel(),this.runPromise&&(this.runPromise.reject(n),this.runPromise=null)})}setCancelableAction(r){this.cancelableAction=i=>r(i).catch(r=>{$ce1f303d0aa8ec51$var$Log$a.debug("cancelableAction error",r)}).finally(()=>{this.clearCancelableAction()})}clearCancelableAction(){this.cancelableAction=void 0}getMode(){var r,i,n;return(null===(r=this.features)||void 0===r?void 0:r.bootloader_mode)?$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.bootloader:(null===(i=this.features)||void 0===i?void 0:i.initialized)?(null===(n=this.features)||void 0===n?void 0:n.no_backup)?$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.backupMode:$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.normal:$ce1f303d0aa8ec51$exports.EOneKeyDeviceMode.notInitialized}getFirmwareVersion(){return this.features?$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.features):null}getBLEFirmwareVersion(){return this.features?$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(this.features):null}isUsed(){return"string"==typeof this.originalDescriptor.session}hasDeviceAcquire(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return $ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)?this.deviceAcquired:this.isUsed()&&this.deviceAcquired}isUsedHere(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return!$ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)&&this.isUsed()&&this.originalDescriptor.session===this.mainId}isUsedElsewhere(){return this.isUsed()&&!this.isUsedHere()}isBootloader(){return this.features&&!!this.features.bootloader_mode}isInitialized(){return this.features&&!!this.features.initialized}isSeedless(){return this.features&&!!this.features.no_backup}isUnacquired(){return void 0===this.features}hasUnexpectedMode(r,i){if(this.features){if(this.isBootloader()&&!r.includes($ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER))return $ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER;if(!this.isInitialized()&&!r.includes($ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE))return $ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE;if(this.isSeedless()&&!r.includes($ce1f303d0aa8ec51$var$UI_REQUEST.SEEDLESS))return $ce1f303d0aa8ec51$var$UI_REQUEST.SEEDLESS;if(!this.isBootloader()&&i.includes($ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER))return $ce1f303d0aa8ec51$var$UI_REQUEST.NOT_IN_BOOTLOADER}return null}hasUsePassphrase(){var r;let i=$ce1f303d0aa8ec51$var$getDeviceType(this.features)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(this.features)===$3FhS8.EDeviceType.Pro,n=i&&(null===(r=this.features)||void 0===r?void 0:r.unlocked)===!1;return this.features&&(!!this.features.passphrase_protection||n)}checkDeviceId(r){return!!this.features&&this.features.device_id===r}lockDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.commands.typedCall("LockDevice","Success",{});return r.message})}supportUnlockVersionRange(){return{pro:{min:"4.15.0"}}}unlockDevice(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=null===(r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.features))||void 0===r?void 0:r.join("."),n=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.features,r=>this.supportUnlockVersionRange()[r]),s=$ce1f303d0aa8ec51$var$existCapability(this.features,$5xch2.Enum_Capability.Capability_AttachToPin),a=s||n&&$ce1f303d0aa8ec51$var$semver__default.default.gte(i,n.min);if(a){let r=yield this.commands.typedCall("UnLockDevice","UnLockDeviceResponse");if(this.features)return this.features.unlocked=null==r.message.unlocked?null:r.message.unlocked,this.features.unlocked_attach_pin=null==r.message.unlocked_attach_pin?void 0:r.message.unlocked_attach_pin,this.features.passphrase_protection=null==r.message.passphrase_protection?null:r.message.passphrase_protection,Promise.resolve(this.features);let i=yield this.commands.typedCall("GetFeatures","Features");return this._updateFeatures(i.message),Promise.resolve(i.message)}let{type:o}=yield this.commands.typedCall("GetAddress","Address",{address_n:[$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$toHardened(1),$ce1f303d0aa8ec51$var$toHardened(0),0,0],coin_name:"Testnet",script_type:"SPENDADDRESS",show_display:!1});if("CallMethodError"===o)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"unlock device error");let d=yield this.commands.typedCall("GetFeatures","Features");return this._updateFeatures(d.message),Promise.resolve(d.message)})}checkPassphraseStateSafety(r,i,n){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.features)return!1;let{passphraseState:s,unlockedAttachPin:a}=yield $ce1f303d0aa8ec51$var$getPassphraseStateWithRefreshDeviceInfo(this,{expectPassphraseState:r,onlyMainPin:i});if(n)return!0;let o=a&&i,d=a&&r&&r!==s;if($ce1f303d0aa8ec51$var$Log$a.debug("Check passphrase state safety: ",{passphraseState:r,newPassphraseState:s,unlockedAttachPin:a,useEmptyPassphrase:i}),o||d){try{yield this.lockDevice()}catch(r){}return this.clearInternalState(),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceCheckUnlockTypeError))}return!r||r===s||(this.clearInternalState(),!1)})}}class $ce1f303d0aa8ec51$var$DeviceList extends $ce1f303d0aa8ec51$var$events.exports{constructor(){super(...arguments),this.devices={}}getDeviceLists(r,i){var n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let a=yield null===(n=this.connector)||void 0===n?void 0:n.enumerate(),o=null!==(s=null==a?void 0:a.descriptors)&&void 0!==s?s:[];this.devices={};let{deviceList:d,devices:f}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(o,r,i);return this.devices=f,d})}allDevices(){return Object.keys(this.devices).map(r=>this.devices[r])}getDevice(r){return this.devices[r]}}const $ce1f303d0aa8ec51$var$getFirmwareReleaseInfo=(r,i)=>{let n=$ce1f303d0aa8ec51$var$DataManager.getFirmwareStatus(r,i),s=$ce1f303d0aa8ec51$var$DataManager.getFirmwareChangelog(r,i),a=$ce1f303d0aa8ec51$var$DataManager.getFirmwareLatestRelease(r,i),o=!!r.bootloader_mode;return{status:n,changelog:s,release:a,bootloaderMode:o}},$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo=r=>{let i=$ce1f303d0aa8ec51$var$DataManager.getBLEFirmwareStatus(r),n=$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareChangelog(r),s=$ce1f303d0aa8ec51$var$DataManager.getBleFirmwareLatestRelease(r),a=!!r.bootloader_mode;return{status:i,changelog:n,release:s,bootloaderMode:a}},$ce1f303d0aa8ec51$var$getBootloaderReleaseInfo=({features:r,willUpdateFirmwareVersion:i,firmwareType:n})=>{let s=$ce1f303d0aa8ec51$var$DataManager.getFirmwareLatestRelease(r,n),a=[null==s?void 0:s.bootloaderChangelog].filter(r=>null!=r&&"object"==typeof r&&Object.prototype.hasOwnProperty.call(r,"zh-CN")&&Object.prototype.hasOwnProperty.call(r,"en-US")),o=!!r.bootloader_mode,d=!1,f=$ce1f303d0aa8ec51$var$getDeviceType(r);return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(f)?d=!!$ce1f303d0aa8ec51$var$checkNeedUpdateBootForClassicAndMini({features:r,willUpdateFirmware:i,firmwareType:n}):$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(f)&&(d=$ce1f303d0aa8ec51$var$checkNeedUpdateBootForTouch(r,n)),{status:d?"outdated":"valid",changelog:a,release:s,bootloaderMode:o,shouldUpdate:d}},$ce1f303d0aa8ec51$var$Log$9=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$BaseMethod{constructor(r){this.shouldEnsureConnected=!0,this.checkDeviceId=!1,this.useDevicePassphraseState=!0,this.skipForceUpdateCheck=!1,this.strictCheckDeviceSupport=!1,this.postPreviousAddressMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.PREVIOUS_ADDRESS_RESULT,{device:this.device.toMessageObject(),data:r}))};let{payload:i}=r;this.name=i.method,this.payload=i,this.responseID=r.id||0,this.connectId=i.connectId||"",this.deviceId=i.deviceId||"",this.useDevice=!0,this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[]}getVersionRange(){return{}}setContext(r){this.sdkInstanceId=r.sdkInstanceId,this.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("Method",this.sdkInstanceId),$ce1f303d0aa8ec51$var$Log$9.debug(`[BaseMethod] Created: ${this.instanceId}, method: ${this.name}, SDK: ${this.sdkInstanceId}`)}setDevice(r){var i,n;this.device=r,!r.sdkInstanceId&&this.sdkInstanceId&&(r.sdkInstanceId=this.sdkInstanceId,r.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("Device",this.sdkInstanceId)),this.requestContext&&(this.requestContext.deviceInstanceId=r.instanceId,this.requestContext.commandsInstanceId=null===(i=r.commands)||void 0===i?void 0:i.instanceId,this.requestContext.sdkInstanceId=this.sdkInstanceId),r.commands&&this.sdkInstanceId&&(r.commands.instanceId=$ce1f303d0aa8ec51$var$generateInstanceId("DeviceCommands",this.sdkInstanceId)),r.commands&&(r.commands.currentResponseID=this.responseID),$ce1f303d0aa8ec51$var$Log$9.debug(`[${this.instanceId}] setDevice: ${r.instanceId}, commands: ${null===(n=r.commands)||void 0===n?void 0:n.instanceId}`)}checkFirmwareRelease(){if(!this.device||!this.device.features)return;let r=$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features),i=$ce1f303d0aa8ec51$var$getFirmwareReleaseInfo(this.device.features,r);this.postMessage($ce1f303d0aa8ec51$var$createFirmwareMessage($ce1f303d0aa8ec51$var$FIRMWARE.RELEASE_INFO,Object.assign(Object.assign({},i),{device:this.device.toMessageObject()})));let n=$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo(this.device.features);this.postMessage($ce1f303d0aa8ec51$var$createFirmwareMessage($ce1f303d0aa8ec51$var$FIRMWARE.BLE_RELEASE_INFO,Object.assign(Object.assign({},n),{device:this.device.toMessageObject()})))}checkDeviceSupportFeature(){if(!this.device||!this.device.features)return;let r=$ce1f303d0aa8ec51$var$supportInputPinOnSoftware(this.device.features),i=$ce1f303d0aa8ec51$var$supportModifyHomescreen(this.device.features);this.postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.SUPPORT_FEATURES,{inputPinOnSoftware:r,modifyHomescreen:i,device:this.device.toMessageObject()}))}checkFeatureVersionLimit(r,i,n){var s;if(!r())return;let a=null===(s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features))||void 0===s?void 0:s.join("."),o=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.device.features,r=>i()[r]);if(!o){if(null==n?void 0:n.strictCheckDeviceSupport)throw $3FhS8.createDeviceNotSupportMethodError(this.name,$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features));return}if($ce1f303d0aa8ec51$var$semver__default.default.valid(a)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(a,o.min))throw $3FhS8.createNeedUpgradeFirmwareHardwareError({currentVersion:a,requireVersion:o.min,methodName:this.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features)})}checkSafetyLevelOnTestNet(){var r,i,n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let s=!1;"evmSignTransaction"===this.name&&[3,4,5,420,11155111].includes(Number(null===(i=null===(r=this.payload)||void 0===r?void 0:r.transaction)||void 0===i?void 0:i.chainId))&&(s=!0),s&&(null===(n=this.device.features)||void 0===n?void 0:n.safety_checks)==="Strict"&&($ce1f303d0aa8ec51$var$Log$9.debug("will change safety_checks level"),yield this.device.commands.typedCall("ApplySettings","Success",{safety_checks:"PromptTemporarily"}))})}dispose(){}}class $ce1f303d0aa8ec51$var$TestInitializeDeviceDuration extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=Date.now();yield this.device.commands.typedCall("Initialize","Features");let i=Date.now(),n=i-r;return Promise.resolve(n)})}}class $ce1f303d0aa8ec51$var$SearchDevices extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i,n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){yield $ce1f303d0aa8ec51$var$TransportManager.configure();let a=yield null===(r=this.connector)||void 0===r?void 0:r.enumerate(),o=null!==(i=null==a?void 0:a.descriptors)&&void 0!==i?i:[],d=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(d)){let r=[],i=new Set;for(let a of o){let o=null===(n=a.id)||void 0===n?void 0:n.toLowerCase();i.has(o)||(i.add(o),r.push(Object.assign(Object.assign({},a),{connectId:a.id,deviceType:$ce1f303d0aa8ec51$var$getDeviceTypeByBleName(null!==(s=a.name)&&void 0!==s?s:"")})))}return r}let{deviceList:f}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(o);return f.map(r=>r.toMessageObject())})}}class $ce1f303d0aa8ec51$var$GetFeatures extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;return(null===(r=this.payload)||void 0===r?void 0:r.detectBootloaderDevice)&&(null===(i=this.device.features)||void 0===i?void 0:i.bootloader_mode)?Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceDetectInBootloaderMode)):Promise.resolve(this.device.features)}}class $ce1f303d0aa8ec51$var$GetOnekeyFeatures extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{message:r}=yield this.device.commands.typedCall("OnekeyGetFeatures","OnekeyFeatures");return r.onekey_firmware_version&&!$ce1f303d0aa8ec51$var$semver__default.default.valid(r.onekey_firmware_version)&&(r.onekey_firmware_version=$ce1f303d0aa8ec51$var$fixVersion(r.onekey_firmware_version)),Promise.resolve(r)})}}class $ce1f303d0aa8ec51$var$GetPassphraseState extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed));let{passphraseState:r}=yield $ce1f303d0aa8ec51$var$getPassphraseStateWithRefreshDeviceInfo(this.device),{features:i}=this.device;return i&&!0===i.passphrase_protection?Promise.resolve(r):Promise.resolve(void 0)})}}class $ce1f303d0aa8ec51$var$GetLogs extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}serializeLog({level:r,prefix:i,message:n,timestamp:s}){let a=new Date(s).toISOString(),o=n.map(r=>"object"==typeof r?JSON.stringify(r):String(r)).join(" ");return`[${a}] ${r.toUpperCase()} ${i}: ${o}`}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=$ce1f303d0aa8ec51$var$getLog().map(r=>this.serializeLog(r));return Promise.resolve(r)})}}class $ce1f303d0aa8ec51$var$CheckFirmwareRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r;let i=this.payload;if(this.device.features){let n=$ce1f303d0aa8ec51$var$getFirmwareType(this.device.features),s=null!==(r=i.firmwareType)&&void 0!==r?r:n,a=$ce1f303d0aa8ec51$var$getFirmwareReleaseInfo(this.device.features,s);return Promise.resolve(a)}return Promise.resolve(null)}}class $ce1f303d0aa8ec51$var$CheckBLEFirmwareRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){if(this.device.features){let r=$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo(this.device.features);return Promise.resolve(r)}return Promise.resolve(null)}}class $ce1f303d0aa8ec51$var$CheckBridgeStatus extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{$ce1f303d0aa8ec51$var$axios__default.default.request({url:"http://localhost:21320",method:"POST",withCredentials:!1,timeout:3e3}).then(()=>r(!0)).catch(n=>{"ECONNABORTED"===n.code?i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError)):r(!1)})})})}}const $ce1f303d0aa8ec51$var$REQUIRED_BRIDGE_VERSION="2.2.0",$ce1f303d0aa8ec51$var$TOUCH_NEED_UPDATE_BRIDGE_VERSION="4.3.0",$ce1f303d0aa8ec51$var$CLASSIC_MINI_NEED_UPDATE_BRIDGE_VERSION="3.1.0";function $ce1f303d0aa8ec51$var$getBridgeReleaseInfo({deviceType:r,currentFirmwareVersion:i,willUpdateFirmwareVersion:n}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let{data:s}=yield $ce1f303d0aa8ec51$var$axios__default.default.request({url:"http://localhost:21320",method:"POST",withCredentials:!1,timeout:3e3}),{version:a="0.0.0"}=s,o=$ce1f303d0aa8ec51$var$semver__default.default.lt(a,$ce1f303d0aa8ec51$var$REQUIRED_BRIDGE_VERSION),d=!1;$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(r)&&(n&&$ce1f303d0aa8ec51$var$semver__default.default.gte(n,$ce1f303d0aa8ec51$var$TOUCH_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0),$ce1f303d0aa8ec51$var$semver__default.default.gte(i,$ce1f303d0aa8ec51$var$TOUCH_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0)),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(r)&&(n&&$ce1f303d0aa8ec51$var$semver__default.default.gte(n,$ce1f303d0aa8ec51$var$CLASSIC_MINI_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0),$ce1f303d0aa8ec51$var$semver__default.default.gte(i,$ce1f303d0aa8ec51$var$CLASSIC_MINI_NEED_UPDATE_BRIDGE_VERSION)&&o&&(d=!0));let f=$ce1f303d0aa8ec51$var$DataManager.getBridgeChangelog();return{shouldUpdate:d,status:d?"outdated":"valid",releaseVersion:$ce1f303d0aa8ec51$var$REQUIRED_BRIDGE_VERSION,changelog:f}}catch(r){if("ECONNABORTED"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNotInstalled)}})}class $ce1f303d0aa8ec51$var$CheckBridgeRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)return null;let{willUpdateFirmwareVersion:r}=this.payload,{features:i}=this.device,n=$ce1f303d0aa8ec51$var$getDeviceType(i),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(i).join(".");return $ce1f303d0aa8ec51$var$getBridgeReleaseInfo({deviceType:n,currentFirmwareVersion:s,willUpdateFirmwareVersion:r})})}}class $ce1f303d0aa8ec51$var$CheckBootloaderRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)return null;let{features:i}=this.device,n=this.payload,s=$ce1f303d0aa8ec51$var$getFirmwareType(i),a=null!==(r=n.firmwareType)&&void 0!==r?r:s,o=$ce1f303d0aa8ec51$var$getBootloaderReleaseInfo({features:i,willUpdateFirmwareVersion:n.willUpdateFirmwareVersion,firmwareType:a});return Promise.resolve(o)})}}class $ce1f303d0aa8ec51$var$CheckAllFirmwareRelease extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{features:n}=this.device,{checkBridgeRelease:s,firmwareType:a}=this.payload;if(!n)return Promise.resolve(null);let o=$ce1f303d0aa8ec51$var$getFirmwareType(n),d=null!=a?a:o,f=$ce1f303d0aa8ec51$var$getFirmwareReleaseInfo(n,d),l=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(n).join("."),u=null===(i=null===(r=f.release)||void 0===r?void 0:r.version)||void 0===i?void 0:i.join("."),c=$ce1f303d0aa8ec51$var$getDeviceType(n),p=null;s&&("required"===f.status||"outdated"===f.status)&&(p=yield $ce1f303d0aa8ec51$var$getBridgeReleaseInfo({deviceType:c,currentFirmwareVersion:l,willUpdateFirmwareVersion:u}));let h=$ce1f303d0aa8ec51$var$getBootloaderReleaseInfo({features:n,willUpdateFirmwareVersion:u,firmwareType:d}),g=$ce1f303d0aa8ec51$var$getBleFirmwareReleaseInfo(n);return{firmware:f,bootloader:h,ble:g,bridge:p?{shouldUpdate:p.shouldUpdate,status:p.shouldUpdate?"outdated":"valid",changelog:p.changelog,release:p.releaseVersion}:void 0,features:n}})}}class $ce1f303d0aa8ec51$var$CheckFirmwareTypeAvailable extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;let n=this.payload,{deviceType:s,firmwareType:a}=n;if(s===$3FhS8.EDeviceType.Unknown)return Promise.resolve(void 0);let o=$ce1f303d0aa8ec51$var$getLatestFirmwareField(a),d=null!==(i=null===(r=$ce1f303d0aa8ec51$var$DataManager.deviceMap[s])||void 0===r?void 0:r[o])&&void 0!==i?i:[],f=$ce1f303d0aa8ec51$var$findLatestRelease(d);return Promise.resolve(f)}}class $ce1f303d0aa8ec51$var$DeviceBackup extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("BackupDevice","Success");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$hasHexPrefix=r=>"0x"===r.slice(0,2).toLowerCase(),$ce1f303d0aa8ec51$var$stripHexPrefix=r=>$ce1f303d0aa8ec51$var$hasHexPrefix(r)?r.slice(2):r,$ce1f303d0aa8ec51$var$addHexPrefix=r=>$ce1f303d0aa8ec51$var$hasHexPrefix(r)?r:`0x${r}`,$ce1f303d0aa8ec51$var$isHexString=(r,i)=>"string"==typeof r&&!!r.match(/^(0x|0X)?[0-9A-Fa-f]*$/)&&(!i||r.length===2+2*i),$ce1f303d0aa8ec51$var$stripHexStartZeroes=r=>{for(;/^00/.test(r);)r=r.slice(2);return r},$ce1f303d0aa8ec51$var$modifyValues=(r,i)=>Object.fromEntries(Object.entries(r).map(([r,n])=>[r,i(n,r)])),$ce1f303d0aa8ec51$var$formatAnyHex=r=>{if("string"==typeof r){let i=$ce1f303d0aa8ec51$var$stripHexPrefix(r);return i.length%2!=0&&(i=`0${i}`),i}return Array.isArray(r)?r.map($ce1f303d0aa8ec51$var$formatAnyHex):"object"==typeof r?$ce1f303d0aa8ec51$var$modifyValues(r,r=>$ce1f303d0aa8ec51$var$formatAnyHex(r)):r},$ce1f303d0aa8ec51$var$hexes=Array.from({length:256},(r,i)=>i.toString(16).padStart(2,"0"));function $ce1f303d0aa8ec51$var$bytesToHex(r){if(!(r instanceof Uint8Array))throw Error("Uint8Array expected");let i="";for(let n=0;n$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,r),$ce1f303d0aa8ec51$var$invalidResponse=r=>$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,r),$ce1f303d0aa8ec51$var$validateParams=(r,i)=>{i.forEach(i=>{let n=Object.prototype.hasOwnProperty.call(r,i.name);if(!n&&i.required)throw $ce1f303d0aa8ec51$var$invalidParameter(`Missing required parameter: ${i.name}`);let s=r[i.name];if(s&&i.type)switch(i.type){case"array":if(Array.isArray(s)){if(!i.allowEmpty&&s.length<1)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter "${i.name}" is empty.`)}else throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`);break;case"uint":if("string"!=typeof s&&"number"!=typeof s)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] has invalid type. "string|number" expected.`);if("number"==typeof s&&!Number.isSafeInteger(s)||!/^(?:[1-9]\d*|\d)$/.test(s.toString().replace(/^-/,i.allowNegative?"":"-")))throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] has invalid value "${s}". Integer representation expected.`);break;case"bigNumber":if("string"!=typeof s)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [string].`);try{let r=new $ce1f303d0aa8ec51$var$BigNumber__default.default(s);if(r.toFixed(0)!==s)throw Error("")}catch(r){throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`)}break;case"buffer":{if(null==s)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [buffer].`);let r=void 0!==$ce1f303d0aa8ec51$require$Buffer&&"function"==typeof $ce1f303d0aa8ec51$require$Buffer.isBuffer&&$ce1f303d0aa8ec51$require$Buffer.isBuffer(s),n=s.constructor&&"function"==typeof s.constructor.isBuffer&&s.constructor.isBuffer(s),a="undefined"!=typeof ArrayBuffer&&s instanceof ArrayBuffer,o="undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(s);if(!r&&!n&&!a&&!o)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [buffer].`);break}case"hexString":if("string"!=typeof s||!$ce1f303d0aa8ec51$var$isHexString($ce1f303d0aa8ec51$var$addHexPrefix(s)))throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`);break;default:if(typeof s!==i.type)throw $ce1f303d0aa8ec51$var$invalidParameter(`Parameter [${i.name}] is of type invalid and should be [${i.type}].`)}})};function $ce1f303d0aa8ec51$var$validateResult(r,i,n){if(Array.isArray(r)){if((null==n?void 0:n.expectedLength)!==null&&r.length!==(null==n?void 0:n.expectedLength))throw $ce1f303d0aa8ec51$var$invalidResponse(`Expected array length of ${null==n?void 0:n.expectedLength}, but got ${r.length}`);r.forEach((r,n)=>{i.forEach(i=>{if(null==r[i])throw $ce1f303d0aa8ec51$var$invalidResponse(`Field '${i}' in array item at index ${n} is null`)})})}else if("object"==typeof r&&null!==r)i.forEach(i=>{if(null==r[i])throw $ce1f303d0aa8ec51$var$invalidResponse(`Field '${i}' in object is null`)});else throw $ce1f303d0aa8ec51$var$invalidResponse("Result is neither an array nor a valid object")}class $ce1f303d0aa8ec51$var$DeviceChangePin extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"remove",type:"boolean"}]),this.params={remove:this.payload.remove}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ChangePin","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceFlags extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"flags",type:"number"}]),this.params={flags:this.payload.flags}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ApplyFlags","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceRebootToBootloader extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}getVersionRange(){return{classic:{min:"2.1.11"},mini:{min:"2.1.11"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("RebootToBootloader","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceRebootToBoardloader extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}getVersionRange(){return{classic:{min:"2.1.11"},mini:{min:"2.1.11"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("BixinOutMessageSE","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceRecovery extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"wordCount",type:"number"},{name:"passphraseProtection",type:"boolean"},{name:"pinProtection",type:"boolean"},{name:"language",type:"string"},{name:"label",type:"string"},{name:"enforceWordlist",type:"boolean"},{name:"type",type:"object"},{name:"u2fCounter",type:"number"},{name:"dryRun",type:"boolean"}]),this.params={word_count:this.payload.wordCount,passphrase_protection:this.payload.passphraseProtection,pin_protection:this.payload.pinProtection,language:this.payload.language,label:this.payload.label,enforce_wordlist:this.payload.enforceWordlist,type:this.payload.type,u2f_counter:this.payload.u2fCounter||Math.floor(Date.now()/1e3),dry_run:this.payload.dryRun}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("RecoveryDevice","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceReset extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"displayRandom",type:"boolean"},{name:"strength",type:"number"},{name:"passphraseProtection",type:"boolean"},{name:"pinProtection",type:"boolean"},{name:"language",type:"string"},{name:"label",type:"string"},{name:"u2fCounter",type:"number"},{name:"skipBackup",type:"boolean"},{name:"noBackup",type:"boolean"},{name:"backupType"}]),this.params={display_random:this.payload.displayRandom,strength:this.payload.strength||256,passphrase_protection:this.payload.passphraseProtection,pin_protection:this.payload.pinProtection,language:this.payload.language,label:this.payload.label,u2f_counter:this.payload.u2fCounter||Math.floor(Date.now()/1e3),skip_backup:this.payload.skipBackup,no_backup:this.payload.noBackup,backup_type:this.payload.backupType}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ResetDevice","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceSettings extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"language",type:"string"},{name:"label",type:"string"},{name:"usePassphrase",type:"boolean"},{name:"homescreen",type:"string"},{name:"passphraseSource",type:"number"},{name:"autoLockDelayMs",type:"number"},{name:"displayRotation",type:"number"},{name:"passphraseAlwaysOnDevice",type:"boolean"},{name:"safetyChecks",type:"number"},{name:"experimentalFeatures",type:"boolean"},{name:"autoShutdownDelayMs",type:"number"},{name:"changeBrightness",type:"boolean"},{name:"hapticFeedback",type:"boolean"}]),this.params=Object.assign(Object.assign({language:this.payload.language,label:this.payload.label,use_passphrase:this.payload.usePassphrase,homescreen:this.payload.homescreen,_passphrase_source:this.payload.passphraseSource,auto_lock_delay_ms:this.payload.autoLockDelayMs,display_rotation:this.payload.displayRotation,passphrase_always_on_device:this.payload.passphraseAlwaysOnDevice,safety_checks:this.payload.safetyChecks,experimental_features:this.payload.experimentalFeatures,auto_shutdown_delay_ms:this.payload.autoShutdownDelayMs},this.payload.changeBrightness?{change_brightness:this.payload.changeBrightness}:void 0),{haptic_feedback:this.payload.hapticFeedback})}getVersionRange(){return this.payload.usePassphrase?{model_mini:{min:"2.4.0"}}:{}}run(){var r,i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.device.commands.typedCall("ApplySettings","Success",Object.assign({},this.params));return r.message}catch(o){if(null===(r=o.message)||void 0===r?void 0:r.toLowerCase().includes("no setting provided"))return Promise.reject($3FhS8.TypedError($3FhS8.HardwareErrorCode.DeviceSettingsNotProvided,o.message));if(null===(i=o.message)||void 0===i?void 0:i.includes("all support ISO_639-1 language keys include")){let r=null===(a=null===(s=null===(n=o.message)||void 0===n?void 0:n.replace("all support ISO_639-1 language keys include",""))||void 0===s?void 0:s.trim())||void 0===a?void 0:a.split(" "),i=r.reduce((r,i)=>{let n=null==$ce1f303d0aa8ec51$var$LANGUAGE_LABELS?void 0:$ce1f303d0aa8ec51$var$LANGUAGE_LABELS[i];return n&&r.push(n),r},[]);return Promise.reject($3FhS8.TypedError($3FhS8.HardwareErrorCode.DeviceSettingsLanguageNotSupport,o.message,{languages:i.join(", ")}))}throw o}})}}class $ce1f303d0aa8ec51$var$DeviceUpdateReboot extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("DeviceBackToBoot","Success");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$safeThrowError=r=>{var i;if(r instanceof $3FhS8.HardwareError)throw r;if("ERR_NETWORK"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNotInstalled);if("ECONNABORTED"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeTimeoutError);if("ERR_BAD_REQUEST"===r.code)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BridgeNetworkError);{let n=null!==(i=null==r?void 0:r.message)&&void 0!==i?i:String(r),s=(null==r?void 0:r.name)?`${r.name}: `:"";throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.UnknownError,`${s}${n}`)}};class $ce1f303d0aa8ec51$var$DeviceUploadResource extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.paramsData={data:new Uint8Array,thumbnailData:new Uint8Array,blurData:new Uint8Array},this.uploadProgress={totalBytes:0,uploadedBytes:0,currentFile:"main"},this.processResourceRequest=r=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i;if("Success"===r.type){let i={message:r.message.message};i.applyScreen=!0;let n=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join("."),s=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);return s===$3FhS8.EDeviceType.Pro&&$ce1f303d0aa8ec51$var$semver__default.default.gte(n,"4.17.0")&&(i.applyScreen=!1),i}let{offset:n,data_length:s}=r.message,{data:a,thumbnailData:o,blurData:d}=this.paramsData;if(void 0===n)throw Error("offset is undefined");switch(r.type){case"ResourceRequest":i=a;break;case"BlurRequest":i=d;break;case"ZoomRequest":i=o;break;default:throw Error("Invalid request type")}let f=this.getDataChunk(i,n,s),l=$1304429e902731e7$exports.blake2s(f);this.updateProgress(f.byteLength,r.type);let u={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(f),hash:$bb5e1fcd97588e49$exports.bytesToHex(l)},c=yield this.device.commands.typedCall("ResourceAck",["ResourceRequest","ZoomRequest","BlurRequest","Success"],u);return this.processResourceRequest(c)})}getVersionRange(){return{model_touch:{min:"3.2.0"}}}checkUploadNFTSupport(){let r=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join(".");if(!$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(r))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"Device Not Support Upload NFT");if($ce1f303d0aa8ec51$var$semver__default.default.lt(i,"4.1.0"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,"Device firmware version is too low, please update to 4.1.0",{current:i,require:"4.1.0"})}init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"suffix",type:"string",required:!0},{name:"dataHex",type:"string",required:!0},{name:"thumbnailDataHex",type:"string",required:!0},{name:"blurDataHex",type:"hexString",required:!0},{name:"resType",type:"number",required:!0},{name:"nftMetaData",type:"string"},{name:"fileNameNoExt",type:"string"}]);let{suffix:r,dataHex:i,thumbnailDataHex:n,blurDataHex:s,resType:a,nftMetaData:o}=this.payload;this.paramsData={data:new Uint8Array($ce1f303d0aa8ec51$var$hexToBytes(i)),thumbnailData:new Uint8Array($ce1f303d0aa8ec51$var$hexToBytes(n)),blurData:new Uint8Array($ce1f303d0aa8ec51$var$hexToBytes(s))},this.uploadProgress.totalBytes=this.paramsData.data.byteLength+this.paramsData.thumbnailData.byteLength+this.paramsData.blurData.byteLength,this.uploadProgress.uploadedBytes=0;let d=$bb5e1fcd97588e49$exports.bytesToHex($1304429e902731e7$exports.blake2s(this.payload.dataHex)).slice(0,8),f=$7U5sq.isEmpty(this.payload.fileNameNoExt)?`${0===a?"wp":"nft"}-${d}-${Math.floor(Date.now()/1e3)}`:this.payload.fileNameNoExt;this.params={extension:r,data_length:this.paramsData.data.byteLength,zoom_data_length:this.paramsData.thumbnailData.byteLength,blur_data_length:this.paramsData.blurData.byteLength,res_type:a,nft_meta_data:o,file_name_no_ext:f}}getDataChunk(r,i,n){let s=Math.min(i+n,r.byteLength);return r.subarray(i,s)}updateProgress(r,i){this.uploadProgress.uploadedBytes+=r,"ResourceRequest"===i?this.uploadProgress.currentFile="main":"ZoomRequest"===i?this.uploadProgress.currentFile="thumbnail":this.uploadProgress.currentFile="blur",this.uploadProgress.uploadedBytes,this.uploadProgress.totalBytes}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.payload.resType===$5xch2.Messages.ResourceType.Nft&&this.checkUploadNFTSupport();let r=yield this.device.commands.typedCall("ResourceUpload",["ResourceRequest","ZoomRequest","BlurRequest","Success"],this.params);return this.processResourceRequest(r)})}}class $ce1f303d0aa8ec51$var$DeviceSupportFeatures extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){if(!this.device.features)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Device not initialized"));let r=$ce1f303d0aa8ec51$var$supportInputPinOnSoftware(this.device.features),i=$ce1f303d0aa8ec51$var$supportModifyHomescreen(this.device.features);return Promise.resolve({inputPinOnSoftware:r,modifyHomescreen:i,device:this.device.toMessageObject()})}}class $ce1f303d0aa8ec51$var$DeviceVerify extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"dataHex",type:"hexString"}]),this.params={data:$ce1f303d0aa8ec51$var$formatAnyHex(this.payload.dataHex)}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(i)){let i=yield this.device.commands.typedCall("BixinVerifyDeviceRequest","BixinVerifyDeviceAck",Object.assign(Object.assign({},this.params),{data:$bb5e1fcd97588e49$exports.bytesToHex($91294e775a6684d7$exports.sha256(this.params.data))}));r=i.message}else{let i=yield this.device.commands.typedCall("SESignMessage","SEMessageSignature",{message:this.params.data}),n=yield this.device.commands.typedCall("ReadSEPublicCert","SEPublicCert");r={cert:n.message.public_cert,signature:i.message.signature}}return($ce1f303d0aa8ec51$var$validateResult(r,["cert","signature"]),r)?Promise.resolve(r):Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Device not support verify"))})}}class $ce1f303d0aa8ec51$var$DeviceWipe extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("WipeDevice","Success");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$getBinary=({features:r,updateType:i,version:n,isUpdateBootloader:s,firmwareType:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let o;let d=$ce1f303d0aa8ec51$var$getInfo({features:r,updateType:i,targetVersion:null==n?void 0:n.join("."),firmwareType:a});if(!d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"no firmware found for this device");if(n&&!$ce1f303d0aa8ec51$var$semver__default.default.eq(d.version.join("."),n.join("."))){let i="touch"===$ce1f303d0aa8ec51$var$getDeviceType(r)&&!r.onekey_version;if(!i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"firmware version mismatch")}let f="ble"===i?d.webUpdate:s?d.bootloaderResource:d.url;try{o=yield $ce1f303d0aa8ec51$var$httpRequest(f,"binary")}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Method_FirmwareUpdate_DownloadFailed")}return Object.assign(Object.assign({},d),{binary:o})}),$ce1f303d0aa8ec51$var$getSysResourceBinary=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let i;try{i=yield $ce1f303d0aa8ec51$var$httpRequest(r,"binary")}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Method_FirmwareUpdate_DownloadFailed")}return{binary:i}}),$ce1f303d0aa8ec51$var$getInfo=({features:r,updateType:i,targetVersion:n,firmwareType:s})=>{var a,o;let d=$ce1f303d0aa8ec51$var$getDeviceType(r);if("unknown"===d)return null;let{deviceMap:f}=$ce1f303d0aa8ec51$var$DataManager,l=$ce1f303d0aa8ec51$var$getFirmwareUpdateField({features:r,updateType:i,targetVersion:n,firmwareType:s}),u=null!==(o=null===(a=null==f?void 0:f[d])||void 0===a?void 0:a[l])&&void 0!==o?o:[];return $ce1f303d0aa8ec51$var$findLatestRelease(u)},$ce1f303d0aa8ec51$var$NEW_BOOT_UPRATE_FIRMWARE_VERSION="2.4.5",$ce1f303d0aa8ec51$var$SESSION_ERROR$1="session not found",$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM$1="Firmware install confirmed",$ce1f303d0aa8ec51$var$Log$8=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method),$ce1f303d0aa8ec51$var$isDeviceDisconnectedError$1=r=>{let i=r instanceof Error?r.message:String(null!=r?r:"");return i.includes("device was disconnected")||i.includes("transferIn")||i.includes("USBDevice")},$ce1f303d0aa8ec51$var$postConfirmationMessage=r=>{var i;(null===(i=r.features)||void 0===i?void 0:i.firmware_present)&&r.emit($ce1f303d0aa8ec51$var$DEVICE.BUTTON,r,{code:"ButtonRequest_FirmwareUpdate"})},$ce1f303d0aa8ec51$var$postProgressMessage=(r,i,n,s)=>{s($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROGRESS,{device:r.toMessageObject(),progress:i,progressType:n}))},$ce1f303d0aa8ec51$var$postProcessingMessage=(r,i)=>{i($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROCESSING,{type:r}))},$ce1f303d0aa8ec51$var$postProgressTip=(r,i,n)=>{n($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:r.toMessageObject(),data:{message:i}}))},$ce1f303d0aa8ec51$var$waitBleInstall=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){"ble"===r&&(yield $ce1f303d0aa8ec51$var$wait(1e4))}),$ce1f303d0aa8ec51$var$uploadFirmware=(r,i,n,s,{payload:a,rebootOnSuccess:o},d)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var f,l;let u=$ce1f303d0aa8ec51$var$getDeviceType(s.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(u)){let o;$ce1f303d0aa8ec51$var$postConfirmationMessage(s),$ce1f303d0aa8ec51$var$postProgressTip(s,"ConfirmOnDevice",n);let u="firmware"===r;if(u&&!d){let r=yield i("GetFeatures","Features",{}),o=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(r.message).join("."),d=$ce1f303d0aa8ec51$var$semver__default.default.gte(o,"2.1.0");if($ce1f303d0aa8ec51$var$Log$8.debug("supportUpgradeFileHeader:",d),d){let r=1024;if(a.byteLength0&&$ce1f303d0aa8ec51$var$postProgressMessage(s,Math.round(r/d*100),"transferData",n),"CallMethodError"===(f=yield i("FirmwareUpload",["FirmwareRequest","Success"],{payload:l})).type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"upload firmware error")}return $ce1f303d0aa8ec51$var$postProgressMessage(s,100,"transferData",n),yield $ce1f303d0aa8ec51$var$waitBleInstall(r),f.message}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"uploadFirmware: unknown device model")}),$ce1f303d0aa8ec51$var$newTouchUpdateProcess=(r,i,n,{payload:s},a=!0)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var o,d,f,l,u;let c;let p=n.getCommands().typedCall.bind(n.getCommands());$ce1f303d0aa8ec51$var$postProgressTip(n,"StartTransferData",i);let h=`0:${"ble"===r?"ble-":""}firmware.bin`,g=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),m=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(g)?16:128,v=1024*m,_=Math.ceil(s.byteLength/v),b=0;for(let r=0;r<_;r++){let a=r*v,o=Math.min(a+v,s.byteLength),d=o-a,f=s.slice(a,o),l=0===r,u=Math.round((r+1)/_*100),c=yield $ce1f303d0aa8ec51$var$emmcFileWriteWithRetry(n,h,d,b,f,l,u);b+=c.message.processed_byte,$ce1f303d0aa8ec51$var$postProgressMessage(n,u,"transferData",i)}$ce1f303d0aa8ec51$var$postConfirmationMessage(n),$ce1f303d0aa8ec51$var$postProgressTip(n,"ConfirmOnDevice",i),$ce1f303d0aa8ec51$var$postProgressTip(n,"InstallingFirmware",i),p=n.getCommands().typedCall.bind(n.getCommands());try{c=yield p("FirmwareUpdateEmmc","Success",{path:h,reboot_on_success:a})}catch(r){if($ce1f303d0aa8ec51$var$isDeviceDisconnectedError$1(r))$ce1f303d0aa8ec51$var$Log$8.log("Rebooting device"),c={type:"Success",message:{message:$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM$1}};else throw r}if("Success"===c.type&&(null===(o=null==c?void 0:c.message)||void 0===o?void 0:o.message)===$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM$1){let r=12e4,i=Date.now(),s=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(g);for(;Date.now()-i{setTimeout(()=>{i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed))},3e3)})])}catch(r){$ce1f303d0aa8ec51$var$Log$8.log("catch Bluetooth error when device is restarting: ",r)}else{let r=yield null===(f=n.deviceConnector)||void 0===f?void 0:f.enumerate(),i=null!==(l=null==r?void 0:r.descriptors)&&void 0!==l?l:[],{deviceList:s}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(i,n.originalDescriptor.id);1===s.length&&(n.updateFromCache(s[0]),yield n.acquire(),n.commands.disposed=!1,n.getCommands().mainId=null!==(u=n.mainId)&&void 0!==u?u:"")}let r=n.getCommands().typedCall.bind(n.getCommands());yield r("GetFeatures","Features",{}),$ce1f303d0aa8ec51$var$DevicePool.resetState();break}catch(r){console.error("Device reconnect failed: ",r),$ce1f303d0aa8ec51$var$Log$8.error("Device reconnect failed:",r),yield $ce1f303d0aa8ec51$var$wait(1e3)}}return c}),$ce1f303d0aa8ec51$var$emmcFileWriteWithRetry=(r,i,n,s,a,o,d)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var f,l,u,c,p,h,g,m,v;let _=()=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var f;let l=r.getCommands().typedCall.bind(r.getCommands()),u=yield l("EmmcFileWrite","EmmcFile",{file:{path:i,len:n,offset:s,data:a},overwrite:o,append:0!==s,ui_percentage:d});if("EmmcFile"!==u.type){if("CallMethodError"===u.type&&(null!==(f=u.message.error)&&void 0!==f?f:"").indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR$1)>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,$ce1f303d0aa8ec51$var$SESSION_ERROR$1);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error")}return u}),b=10;for(;b>0;)try{let r=yield _();return r}catch(n){if($ce1f303d0aa8ec51$var$Log$8.error("emmcWrite error: ",n),0==--b)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error");let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(i))yield $ce1f303d0aa8ec51$var$wait(3e3),yield null===(f=r.deviceConnector)||void 0===f?void 0:f.acquire(r.originalDescriptor.id,null,!0),yield r.initialize();else if((null===(l=null==n?void 0:n.message)||void 0===l?void 0:l.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR$1))>-1||(null===(c=null===(u=null==n?void 0:n.response)||void 0===u?void 0:u.data)||void 0===c?void 0:c.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR$1))>-1){let i=yield null===(p=r.deviceConnector)||void 0===p?void 0:p.enumerate(),n=null!==(h=null==i?void 0:i.descriptors)&&void 0!==h?h:[],{deviceList:s}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(n,void 0);1===s.length&&(null===(m=null===(g=s[0])||void 0===g?void 0:g.features)||void 0===m?void 0:m.bootloader_mode)&&(r.updateFromCache(s[0]),yield r.acquire(),r.getCommands().mainId=null!==(v=r.mainId)&&void 0!==v?v:"")}yield $ce1f303d0aa8ec51$var$wait(3e3)}}),$ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE=16384,$ce1f303d0aa8ec51$var$processResourceRequest=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){if("Success"===i.type)return i.message;let{offset:s,data_length:a}=i.message;if(void 0===s)throw Error("offset is undefined");let o=new Uint8Array(n.slice(s,Math.min(s+a,n.byteLength))),d=$1304429e902731e7$exports.blake2s(o),f={data_chunk:$ce1f303d0aa8ec51$var$bytesToHex(o),hash:$ce1f303d0aa8ec51$var$bytesToHex(d)},l=yield r("ResourceAck",["ResourceRequest","Success"],Object.assign({},f));return $ce1f303d0aa8ec51$var$processResourceRequest(r,l,n)}),$ce1f303d0aa8ec51$var$updateResource=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a=new Uint8Array(n.slice(0,Math.min($ce1f303d0aa8ec51$var$INIT_DATA_CHUNK_SIZE,n.byteLength))),o=$1304429e902731e7$exports.blake2s(a),d=yield r("ResourceUpdate",["ResourceRequest","Success"],{file_name:i,data_length:n.byteLength,initial_data_chunk:$ce1f303d0aa8ec51$var$bytesToHex(a),hash:$ce1f303d0aa8ec51$var$bytesToHex(o)});return null==s||s(),$ce1f303d0aa8ec51$var$processResourceRequest(r,d,n)}),$ce1f303d0aa8ec51$var$updateResources=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateSysResource",i);let a=yield $ce1f303d0aa8ec51$var$JSZip__default.default.loadAsync(s),o=Object.entries(a.files),d=0,f=100/o.length;for(let[s,a]of o){let o=s.split("/").pop();if(!a.dir&&-1===s.indexOf("__MACOSX")&&o){let i=yield a.async("arraybuffer");yield $ce1f303d0aa8ec51$var$updateResource(r,o,i)}$ce1f303d0aa8ec51$var$postProgressMessage(n,Math.floor(d+=f),"installingFirmware",i)}return $ce1f303d0aa8ec51$var$postProgressMessage(n,100,"installingFirmware",i),$ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateSysResourceSuccess",i),!0}),$ce1f303d0aa8ec51$var$updateBootloader=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return $ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateBootloader",i),$ce1f303d0aa8ec51$var$postProgressMessage(n,Math.floor(0),"installingFirmware",i),yield $ce1f303d0aa8ec51$var$updateResource(r,"bootloader.bin",s,()=>{$ce1f303d0aa8ec51$var$postProcessingMessage("resource",i)}),$ce1f303d0aa8ec51$var$postProgressMessage(n,Math.floor(100),"installingFirmware",i),$ce1f303d0aa8ec51$var$postProgressTip(n,"UpdateBootloaderSuccess",i),!0});class $ce1f303d0aa8ec51$var$DeviceFullyUploadResource extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))}}init(){this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}isSupportResourceUpdate(r,i){if("firmware"!==i)return!1;let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=n===$3FhS8.EDeviceType.Touch||n===$3FhS8.EDeviceType.Pro,a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return s&&$ce1f303d0aa8ec51$var$semver__default.default.gte(a,"3.4.0")}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:i}=this,{features:n}=i,s=this.payload,a=$ce1f303d0aa8ec51$var$getFirmwareType(n),o=null!==(r=s.firmwareType)&&void 0!==r?r:a;if(!(null==n?void 0:n.bootloader_mode)&&n&&n){let{binary:r}=this.payload;if(!r){this.postTipMessage("CheckLatestUiResource");let i=$ce1f303d0aa8ec51$var$DataManager.getSysFullResource(n,o);if(i){this.postTipMessage("DownloadLatestUiResource");let n=yield $ce1f303d0aa8ec51$var$getSysResourceBinary(i);this.postTipMessage("DownloadLatestUiResourceSuccess"),n&&(r=n.binary)}}yield $ce1f303d0aa8ec51$var$updateResources(this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,i,r)}})}}const $ce1f303d0aa8ec51$var$Log$7=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method),$ce1f303d0aa8ec51$var$SESSION_ERROR="session not found",$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM="Firmware install confirmed",$ce1f303d0aa8ec51$var$isDeviceDisconnectedError=r=>{let i=r instanceof Error?r.message:String(null!=r?r:"");return i.includes("device was disconnected")||i.includes("transferIn")||i.includes("USBDevice")};class $ce1f303d0aa8ec51$var$FirmwareUpdateBaseMethod extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))},this.postProcessingMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROCESSING,{type:r}))},this.postProgressMessage=(r,i)=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_PROGRESS,{device:this.device.toMessageObject(),progress:r,progressType:i}))}}init(){}run(){return Promise.resolve()}isBleReconnect(){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");return this.payload.connectId&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)}_promptDeviceInBootloaderForWebDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE)>0&&this.device.emit($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,this.device,(n,s)=>{n?i(n):r(s)})})})}_promptDeviceForSwitchFirmwareWebDevice(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE)>0&&this.device.emit($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,this.device,(n,s)=>{n?i(n):r(s)})})})}checkDeviceToBootloader(r){var i,n;let s;this.checkPromise=$3FhS8.createDeferred();let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=r&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a);$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] isBleReconnect: ",o);let d=!0,f=0,l=$ce1f303d0aa8ec51$var$getDeviceType(null===(i=this===null||void 0===this?void 0:this.device)||void 0===i?void 0:i.features)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(null===(n=this===null||void 0===this?void 0:this.device)||void 0===n?void 0:n.features)===$3FhS8.EDeviceType.Pro,u=setInterval(()=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n,a,c;if(f+=1,$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] isFirstCheck: ",d),l&&d&&(d=!1,$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] wait 3000ms"),yield $ce1f303d0aa8ec51$var$wait(3e3)),f>4&&$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb($ce1f303d0aa8ec51$var$DataManager.getSettings("env"))&&!this.payload.skipWebDevicePrompt){clearInterval(u),clearTimeout(s);try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);let i=yield this._promptDeviceInBootloaderForWebDevice();i&&(yield this._checkDeviceInBootloaderMode(r,u,s))}catch(r){$ce1f303d0aa8ec51$var$Log$7.log("FirmwareUpdateBaseMethod [checkDeviceToBootloader] _promptDeviceInBootloaderForWebDevice failed: ",r),null===(i=this.checkPromise)||void 0===i||i.reject(r)}return}if(o)try{yield null===(n=this.device.deviceConnector)||void 0===n?void 0:n.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize(),(null===(a=this.device.features)||void 0===a?void 0:a.bootloader_mode)&&(clearInterval(u),null===(c=this.checkPromise)||void 0===c||c.resolve(!0))}catch(r){$ce1f303d0aa8ec51$var$Log$7.log("catch Bluetooth error when device is restarting: ",r)}else yield this._checkDeviceInBootloaderMode(r,u,s)}),o?3e3:2e3);s=setTimeout(()=>{this.checkPromise&&(clearInterval(u),this.checkPromise.reject(Error()))},3e4)}_checkDeviceInBootloaderMode(r,i,n){var s,a,o,d,f;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let l=yield null===(s=this.device.deviceConnector)||void 0===s?void 0:s.enumerate(),u=null!==(a=null==l?void 0:l.descriptors)&&void 0!==a?a:[],{deviceList:c}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(u,r);return 1===c.length&&null!==(d=null===(o=c[0])||void 0===o?void 0:o.features)&&void 0!==d&&!!d.bootloader_mode&&(this.device.updateFromCache(c[0]),this.device.commands.disposed=!1,i&&clearInterval(i),n&&clearTimeout(n),null===(f=this.checkPromise)||void 0===f||f.resolve(!0),!0)})}enterBootloaderMode(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands());if(this.device.features&&!this.device.features.bootloader_mode){let n=$ce1f303d0aa8ec51$var$getDeviceUUID(this.device.features),s=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.AutoRebootToBootloader);let a=yield i("DeviceBackToBoot","Success");if("CallMethodError"===a.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.GoToBootloaderSuccess),this.checkDeviceToBootloader(this.payload.connectId),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(s)&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(n),delete $ce1f303d0aa8ec51$var$DevicePool.devicesCache[""],yield null===(r=this.checkPromise)||void 0===r?void 0:r.promise,this.checkPromise=null;let o=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(s);return yield $ce1f303d0aa8ec51$var$wait(o?3e3:1500),yield this.device.acquire(),!0}catch(r){if(r instanceof $3FhS8.HardwareError)return Promise.reject(r);return console.log("auto go to bootloader mode failed: ",r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure))}}})}startEmmcFirmwareUpdate({path:r}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i;let n=this.device.getCommands().typedCall.bind(this.device.getCommands());try{i=yield n("FirmwareUpdateEmmc","Success",{path:r,reboot_on_success:!0})}catch(r){if($ce1f303d0aa8ec51$var$isDeviceDisconnectedError(r))$ce1f303d0aa8ec51$var$Log$7.log("Rebooting device"),i={type:"Success",message:{message:$ce1f303d0aa8ec51$var$FIRMWARE_UPDATE_CONFIRM}};else throw r}if("Success"!==i.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareError,"firmware update error");this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.FirmwareUpdating)})}createUpdatesFolderIfNotExists(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands());yield i("EmmcDirMake","Success",{path:r})})}emmcCommonUpdateProcess({payload:r,filePath:i,processedSize:n,totalSize:s}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!i.startsWith("0:"))throw Error("filePath must start with 0:");let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a)?16:128,d=1024*o,f=Math.ceil(r.byteLength/d),l=0,u=0;for(let a=0;a$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var d;let f=this.device.getCommands().typedCall.bind(this.device.getCommands()),l=yield f("EmmcFileWrite","EmmcFile",{file:{path:r,len:i,offset:n,data:s},overwrite:a,append:0!==n,ui_percentage:o});if("EmmcFile"!==l.type){if("CallMethodError"===l.type&&(null!==(d=l.message.error)&&void 0!==d?d:"").indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR)>-1)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,$ce1f303d0aa8ec51$var$SESSION_ERROR);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error")}return l}),_=10;for(;_>0;)try{let r=yield v();return r}catch(i){if($ce1f303d0aa8ec51$var$Log$7.error("emmcWrite error: ",i),0==--_)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.EmmcFileWriteFirmwareError,"transfer data error");let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(r))yield $ce1f303d0aa8ec51$var$wait(3e3),yield null===(d=this.device.deviceConnector)||void 0===d?void 0:d.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize();else if((null===(f=null==i?void 0:i.message)||void 0===f?void 0:f.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR))>-1||(null===(u=null===(l=null==i?void 0:i.response)||void 0===l?void 0:l.data)||void 0===u?void 0:u.indexOf($ce1f303d0aa8ec51$var$SESSION_ERROR))>-1){let r=yield null===(c=this.device.deviceConnector)||void 0===c?void 0:c.enumerate(),i=null!==(p=null==r?void 0:r.descriptors)&&void 0!==p?p:[],{deviceList:n}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(i,void 0);1===n.length&&(null===(g=null===(h=n[0])||void 0===h?void 0:h.features)||void 0===g?void 0:g.bootloader_mode)&&(this.device.updateFromCache(n[0]),yield this.device.acquire(),this.device.getCommands().mainId=null!==(m=this.device.mainId)&&void 0!==m?m:"")}yield $ce1f303d0aa8ec51$var$wait(2e3)}})}reboot(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands());try{let n=yield i("Reboot","Success",{reboot_type:r});return n.message}catch(r){if(r instanceof Error&&(r.message.includes("device was disconnected")||r.message.includes("transferIn")||r.message.includes("USBDevice")))return{message:"Device rebooted successfully"};throw r}})}}class $ce1f303d0aa8ec51$var$DeviceUpdateBootloader extends $ce1f303d0aa8ec51$var$FirmwareUpdateBaseMethod{init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}updateBootloaderWithEmmcFileWrite(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r="0:boot/bootloader.bin";return this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.StartTransferData),yield this.emmcCommonUpdateProcess({payload:i,filePath:r}),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.ConfirmOnDevice),yield this.reboot($5xch2.RebootType.Normal),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.UpdateBootloaderSuccess),!0})}updateTouchBootloader({device:r,features:i,firmwareType:n}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{binary:s}=this.payload;if(!s){this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.CheckLatestUiResource);let r=i?$ce1f303d0aa8ec51$var$DataManager.getBootloaderResource(i,n):null;if(r){this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.DownloadLatestBootloaderResource);let i=yield $ce1f303d0aa8ec51$var$getSysResourceBinary(r);this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.DownloadLatestBootloaderResourceSuccess),i&&(s=i.binary)}}if(!$ce1f303d0aa8ec51$var$checkBootloaderLength(s))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CheckDownloadFileError);return i&&i.bootloader_mode?(this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.UpdateBootloader),this.updateBootloaderWithEmmcFileWrite(r,s)):i&&!i.bootloader_mode?(yield $ce1f303d0aa8ec51$var$updateBootloader(this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,r,s),Promise.resolve(!0)):void 0})}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:i}=this,{features:n}=i,s=this.payload,a=$ce1f303d0aa8ec51$var$getDeviceType(n),o=$ce1f303d0aa8ec51$var$getFirmwareType(n),d=null!==(r=s.firmwareType)&&void 0!==r?r:o;return $ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(a)?this.updateTouchBootloader({device:i,features:n,firmwareType:d}):Promise.resolve(!0)})}}class $ce1f303d0aa8ec51$var$DeviceLock extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("LockDevice","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$DeviceUnlock extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return this.device.unlockDevice()})}}class $ce1f303d0aa8ec51$var$DeviceCancel extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("Cancel","Success");return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$SetU2FCounter extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1,this.params={u2f_counter:this.payload.u2f_counter}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("SetU2FCounter","Success",this.params);return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$GetNextU2FCounter extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevicePassphraseState=!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("GetNextU2FCounter","NextU2FCounter");return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$Log$6=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$FirmwareUpdate extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))}}init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0;let{payload:r}=this;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"version",type:"array"},{name:"binary",type:"buffer"},{name:"updateType",type:"string",required:!0},{name:"rebootOnSuccess",type:"boolean"}]),this.params={updateType:r.updateType},"version"in r&&(this.params=Object.assign(Object.assign({},this.params),{version:r.version})),"binary"in r&&(this.params=Object.assign(Object.assign({},this.params),{binary:r.binary}))}checkDeviceToBootloader(r){this.checkPromise=$3FhS8.createDeferred();let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=r&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i);$ce1f303d0aa8ec51$var$Log$6.log("FirmwareUpdate [checkDeviceToBootloader] isBleReconnect: ",n);let s=setInterval(()=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,a,o,d,f,l,u,c;if(n)try{yield null===(i=this.device.deviceConnector)||void 0===i?void 0:i.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize(),(null===(a=this.device.features)||void 0===a?void 0:a.bootloader_mode)&&(clearInterval(s),null===(o=this.checkPromise)||void 0===o||o.resolve(!0))}catch(r){$ce1f303d0aa8ec51$var$Log$6.log("catch Bluetooth error when device is restarting: ",r)}else{let i=yield null===(d=this.device.deviceConnector)||void 0===d?void 0:d.enumerate(),n=null!==(f=null==i?void 0:i.descriptors)&&void 0!==f?f:[],{deviceList:a}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(n,r);1===a.length&&(null===(u=null===(l=a[0])||void 0===l?void 0:l.features)||void 0===u?void 0:u.bootloader_mode)&&(this.device.updateFromCache(a[0]),this.device.commands.disposed=!1,clearInterval(s),null===(c=this.checkPromise)||void 0===c||c.resolve(!0))}}),n?3e3:2e3);setTimeout(()=>{this.checkPromise&&(clearInterval(s),this.checkPromise.reject(Error()))},3e4)}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n;let{device:s,params:a}=this,{features:o,commands:d}=s,f=$ce1f303d0aa8ec51$var$getDeviceType(o);if(!(null==o?void 0:o.bootloader_mode)&&o){let i=$ce1f303d0aa8ec51$var$getDeviceUUID(o);if($ce1f303d0aa8ec51$var$isEnteredManuallyBoot(o,a.updateType))return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));try{this.postTipMessage("AutoRebootToBootloader");let n=yield d.typedCall("DeviceBackToBoot","Success");if("CallMethodError"===n.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);this.postTipMessage("GoToBootloaderSuccess"),this.checkDeviceToBootloader(this.payload.connectId),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(f)&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(i),delete $ce1f303d0aa8ec51$var$DevicePool.devicesCache[""],yield null===(r=this.checkPromise)||void 0===r?void 0:r.promise,this.checkPromise=null;let s=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(f);yield $ce1f303d0aa8ec51$var$wait(s?3e3:1500)}catch(r){if(r instanceof $3FhS8.HardwareError)return Promise.reject(r);return $ce1f303d0aa8ec51$var$Log$6.log("auto go to bootloader mode failed: ",r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure))}}try{if(a.binary)n=this.params.binary;else{if(!s.features)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"no features found for this device");this.postTipMessage("DownloadFirmware");let r=yield $ce1f303d0aa8ec51$var$getBinary({features:s.features,version:a.version,updateType:a.updateType,firmwareType:$3FhS8.EFirmwareType.Universal});n=r.binary,this.postTipMessage("DownloadFirmwareSuccess")}}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,null!==(i=r.message)&&void 0!==i?i:r)}yield this.device.acquire();let l=yield $ce1f303d0aa8ec51$var$uploadFirmware(a.updateType,this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,s,{payload:n,rebootOnSuccess:this.payload.rebootOnSuccess},!1);return this.connectId&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(this.connectId),l})}}const $ce1f303d0aa8ec51$var$Log$5=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$FirmwareUpdateV2 extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.postTipMessage=r=>{this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.FIRMWARE_TIP,{device:this.device.toMessageObject(),data:{message:r}}))}}init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0;let{payload:r}=this;if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"version",type:"array"},{name:"binary",type:"buffer"},{name:"forcedUpdateRes",type:"boolean"},{name:"platform",type:"string",required:!0},{name:"firmwareType",type:"string"}]),!r.updateType)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"updateType is required");this.params={updateType:r.updateType,forcedUpdateRes:r.forcedUpdateRes,isUpdateBootloader:r.isUpdateBootloader},"version"in r&&(this.params=Object.assign(Object.assign({},this.params),{version:r.version,firmwareType:r.firmwareType})),"binary"in r&&(this.params=Object.assign(Object.assign({},this.params),{binary:r.binary}))}_promptDeviceInBootloaderForWebDevice({device:r}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return new Promise((r,i)=>{this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE)>0&&this.device.emit($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,this.device,(n,s)=>{n?i(n):r(s)})})})}checkDeviceToBootloader(r){var i,n;let s;this.checkPromise=$3FhS8.createDeferred();let a=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),o=r&&$ce1f303d0aa8ec51$var$DataManager.isBleConnect(a);$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] isBleReconnect: ",o);let d=!0,f=0,l=$ce1f303d0aa8ec51$var$getDeviceType(null===(i=this===null||void 0===this?void 0:this.device)||void 0===i?void 0:i.features)===$3FhS8.EDeviceType.Touch||$ce1f303d0aa8ec51$var$getDeviceType(null===(n=this===null||void 0===this?void 0:this.device)||void 0===n?void 0:n.features)===$3FhS8.EDeviceType.Pro,u=setInterval(()=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n,a,c;if(f+=1,$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] isFirstCheck: ",d),l&&d&&(d=!1,$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] wait 3000ms"),yield $ce1f303d0aa8ec51$var$wait(3e3)),f>4&&$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb($ce1f303d0aa8ec51$var$DataManager.getSettings("env"))&&!this.payload.skipWebDevicePrompt){clearInterval(u),clearTimeout(s);try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);let i=yield this._promptDeviceInBootloaderForWebDevice({device:this.device});i&&(yield this._checkDeviceInBootloaderMode(r,u,s))}catch(r){$ce1f303d0aa8ec51$var$Log$5.log("FirmwareUpdateV2 [checkDeviceToBootloader] promptDeviceInBootloaderForWebDevice failed: ",r),null===(i=this.checkPromise)||void 0===i||i.reject(r)}return}if(o)try{yield null===(n=this.device.deviceConnector)||void 0===n?void 0:n.acquire(this.device.originalDescriptor.id,null,!0),yield this.device.initialize(),(null===(a=this.device.features)||void 0===a?void 0:a.bootloader_mode)&&(clearInterval(u),null===(c=this.checkPromise)||void 0===c||c.resolve(!0))}catch(r){$ce1f303d0aa8ec51$var$Log$5.log("catch Bluetooth error when device is restarting: ",r)}else yield this._checkDeviceInBootloaderMode(r,u,s)}),o?3e3:2e3);s=setTimeout(()=>{this.checkPromise&&(clearInterval(u),this.checkPromise.reject(Error()))},3e4)}_checkDeviceInBootloaderMode(r,i,n){var s,a,o,d,f;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let l=yield null===(s=this.device.deviceConnector)||void 0===s?void 0:s.enumerate(),u=null!==(a=null==l?void 0:l.descriptors)&&void 0!==a?a:[],{deviceList:c}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(u,r);return 1===c.length&&null!==(d=null===(o=c[0])||void 0===o?void 0:o.features)&&void 0!==d&&!!d.bootloader_mode&&(this.device.updateFromCache(c[0]),this.device.commands.disposed=!1,i&&clearInterval(i),n&&clearTimeout(n),null===(f=this.checkPromise)||void 0===f||f.resolve(!0),!0)})}isEnteredManuallyBoot(r){let i=$ce1f303d0aa8ec51$var$getDeviceType(r),n=i===$3FhS8.EDeviceType.Mini,s="firmware"===this.params.updateType&&i===$3FhS8.EDeviceType.Classic&&"1.8.3"===r.bootloader_version;return n||s}isSupportResourceUpdate(r,i){if("firmware"!==i)return!1;let n=$ce1f303d0aa8ec51$var$getDeviceType(r),s=n===$3FhS8.EDeviceType.Touch||n===$3FhS8.EDeviceType.Pro,a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join(".");return s&&$ce1f303d0aa8ec51$var$semver__default.default.gte(a,"3.2.0")}checkVersionForCopyTouchResource(r,i){var n;if(!r)return;let s=$ce1f303d0aa8ec51$var$getDeviceType(r),a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r).join("."),o=null===(n=this.params.version)||void 0===n?void 0:n.join("."),{updateType:d}=this.params,f=$ce1f303d0aa8ec51$var$getInfo({features:r,updateType:d,firmwareType:i});if(!f)return;let{fullResourceRange:l}=f;if(!l)return;let[u,c]=l;if(s===$3FhS8.EDeviceType.Touch&&"firmware"===d&&o&&$ce1f303d0aa8ec51$var$semver__default.default.lt(a,u)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(o,c)&&"desktop"!==this.payload.platform)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.UseDesktopToUpdateFirmware)}run(){var r,i,n,s,a,o,d,f,l;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let u;let{device:c,params:p}=this,{features:h,commands:g}=c,m=$ce1f303d0aa8ec51$var$getDeviceType(h),v=$ce1f303d0aa8ec51$var$getFirmwareType(c.features),_=null!==(r=p.firmwareType)&&void 0!==r?r:v;if(this.checkVersionForCopyTouchResource(h,_),!(null==h?void 0:h.bootloader_mode)&&h){let r=$ce1f303d0aa8ec51$var$getDeviceUUID(h);if(this.isEnteredManuallyBoot(h))return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));if(h&&this.isSupportResourceUpdate(h,p.updateType)){this.postTipMessage("CheckLatestUiResource");let r=$ce1f303d0aa8ec51$var$DataManager.getSysResourcesLatestRelease({features:h,forcedUpdateRes:p.forcedUpdateRes,firmwareType:_});if(r){this.postTipMessage("DownloadLatestUiResource");let i=yield $ce1f303d0aa8ec51$var$getSysResourceBinary(r);this.postTipMessage("DownloadLatestUiResourceSuccess"),i&&(yield $ce1f303d0aa8ec51$var$updateResources(this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,c,i.binary))}}null===(n=null===(i=this.device)||void 0===i?void 0:i.commands)||void 0===n||n.checkDisposed();try{this.postTipMessage("AutoRebootToBootloader");let i=yield g.typedCall("DeviceBackToBoot","Success");if("CallMethodError"===i.type)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure);this.postTipMessage("GoToBootloaderSuccess"),this.checkDeviceToBootloader(this.payload.connectId),$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic.includes(m)&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(r),delete $ce1f303d0aa8ec51$var$DevicePool.devicesCache[""],yield null===(s=this.checkPromise)||void 0===s?void 0:s.promise,this.checkPromise=null,null===(o=null===(a=this.device)||void 0===a?void 0:a.commands)||void 0===o||o.checkDisposed();let n=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(m);yield $ce1f303d0aa8ec51$var$wait(n?3e3:1500)}catch(r){if(r instanceof $3FhS8.HardwareError)return Promise.reject(r);return console.log("auto go to bootloader mode failed: ",r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateAutoEnterBootFailure))}}try{if(p.binary)u=this.params.binary;else{if(!c.features)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"no features found for this device");this.postTipMessage("DownloadFirmware");let r=yield $ce1f303d0aa8ec51$var$getBinary({features:c.features,version:p.version,updateType:p.updateType,isUpdateBootloader:p.isUpdateBootloader,firmwareType:_});u=r.binary,this.postTipMessage("DownloadFirmwareSuccess")}}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,null!==(d=r.message)&&void 0!==d?d:r)}null===(l=null===(f=this.device)||void 0===f?void 0:f.commands)||void 0===l||l.checkDisposed(),yield this.device.acquire();let b=yield $ce1f303d0aa8ec51$var$uploadFirmware(p.updateType,this.device.getCommands().typedCall.bind(this.device.getCommands()),this.postMessage,c,{payload:u,rebootOnSuccess:!0},p.isUpdateBootloader);return this.connectId&&$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(this.connectId),b})}}const $ce1f303d0aa8ec51$var$Log$4=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method),$ce1f303d0aa8ec51$var$MIN_UPDATE_V3_BOOTLOADER_VERSION="2.8.0";class $ce1f303d0aa8ec51$var$FirmwareUpdateV3 extends $ce1f303d0aa8ec51$var$FirmwareUpdateBaseMethod{constructor(){super(...arguments),this.checkPromise=null,this.isSwitchFirmware=!1}init(){this.allowDeviceMode=[$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.requireDeviceMode=[],this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0;let{payload:r}=this;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"bleVersion",type:"array"},{name:"bleBinary",type:"buffer"},{name:"firmwareVersion",type:"array"},{name:"firmwareBinary",type:"buffer"},{name:"resourceBinary",type:"buffer"},{name:"forcedUpdateRes",type:"boolean"},{name:"bootloaderVersion",type:"array"},{name:"bootloaderBinary",type:"buffer"},{name:"firmwareType",type:"string"},{name:"platform",type:"string"}]),this.params={bleBinary:r.bleBinary,firmwareBinary:r.firmwareBinary,forcedUpdateRes:r.forcedUpdateRes,bleVersion:r.bleVersion,bootloaderVersion:r.bootloaderVersion,bootloaderBinary:r.bootloaderBinary,firmwareVersion:r.firmwareVersion,resourceBinary:r.resourceBinary,firmwareType:r.firmwareType,platform:r.platform}}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:n}=this,{features:s}=n,a=$ce1f303d0aa8ec51$var$getDeviceType(s),o=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(s).join(".");if(this.validateDeviceAndVersion(a,o),!s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Device features not available");let d=$ce1f303d0aa8ec51$var$getFirmwareType(s),f=null!==(r=this.params.firmwareType)&&void 0!==r?r:d;this.isSwitchFirmware=f!==d;let l=null,u=[],c=null;try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.StartDownloadFirmware),l=yield this.prepareResourceBinary(f),u=yield this.prepareFirmwareAndBleBinary(f),c=yield this.prepareBootloaderBinary(f),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.FinishDownloadFirmware)}catch(r){throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,null!==(i=r.message)&&void 0!==i?i:r)}if(!c&&0===u.length)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareUpdateDownloadFailed,"No firmware to update");yield this.enterBootloaderMode();let p=yield this.executeUpdate({resourceBinary:l,fwBinaryMap:u,bootloaderBinary:c});return p})}validateDeviceAndVersion(r,i){if(r===$3FhS8.EDeviceType.Unknown)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"unknown device type");if(r!==$3FhS8.EDeviceType.Pro)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"only pro device is supported");if($ce1f303d0aa8ec51$var$semver__default.default.lt(i,$ce1f303d0aa8ec51$var$MIN_UPDATE_V3_BOOTLOADER_VERSION))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"bootloader version needs to be updated")}prepareResourceBinary(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.params.resourceBinary)return this.params.resourceBinary;let{features:i}=this.device;if(!i)return null;let n=$ce1f303d0aa8ec51$var$DataManager.getSysResourcesLatestRelease({features:i,forcedUpdateRes:this.params.forcedUpdateRes,firmwareType:r});if(n){let r=(yield $ce1f303d0aa8ec51$var$getSysResourceBinary(n)).binary;return r}return $ce1f303d0aa8ec51$var$Log$4.warn("No resource url found"),null})}prepareBootloaderBinary(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(this.params.bootloaderBinary)return this.params.bootloaderBinary;let{features:i}=this.device;if(!i)return null;if(this.params.bootloaderVersion){let n=$ce1f303d0aa8ec51$var$DataManager.getBootloaderResource(i,r);if(n){let r=(yield $ce1f303d0aa8ec51$var$getSysResourceBinary(n)).binary;return r}}return null})}prepareFirmwareAndBleBinary(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=[];if(this.params.firmwareBinary)i.push({fileName:"firmware.bin",binary:this.params.firmwareBinary});else if(this.params.firmwareVersion){let{features:n}=this.device;if(n){let s=(yield $ce1f303d0aa8ec51$var$getBinary({features:n,version:this.params.firmwareVersion,updateType:"firmware",isUpdateBootloader:!1,firmwareType:r})).binary;i.push({fileName:"firmware.bin",binary:s})}}if(this.params.bleBinary)i.push({fileName:"ble-firmware.bin",binary:this.params.bleBinary});else if(this.params.bleVersion){let{features:n}=this.device;if(n){let s=yield $ce1f303d0aa8ec51$var$getBinary({features:n,version:this.params.bleVersion,updateType:"ble",firmwareType:r});i.push({fileName:"ble-firmware.bin",binary:s.binary})}}return i})}executeUpdate({resourceBinary:r,fwBinaryMap:i,bootloaderBinary:n}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let s=0,a=0;for(let n of(r&&(s+=r.byteLength),i))s+=n.binary.byteLength;if(n&&(s+=n.byteLength),this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.StartTransferData),r){let i=yield $ce1f303d0aa8ec51$var$JSZip__default.default.loadAsync(r),n=Object.entries(i.files);for(let[r,i]of n){let n=r.split("/").pop();if(!i.dir&&-1===r.indexOf("__MACOSX")&&n){let r=yield i.async("arraybuffer");a=yield this.emmcCommonUpdateProcess({payload:r,filePath:`0:res/${n}`,processedSize:a,totalSize:s})}}}for(let r of(n&&(a=yield this.emmcCommonUpdateProcess({payload:n,filePath:"0:boot/bootloader.bin",processedSize:a,totalSize:s})),yield this.createUpdatesFolderIfNotExists("0:updates/"),i))r&&(a=yield this.emmcCommonUpdateProcess({payload:r.binary,filePath:`0:updates/${r.fileName}`,processedSize:a,totalSize:s}));try{this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.ConfirmOnDevice),yield this.startEmmcFirmwareUpdate({path:"0:updates"})}catch(r){if($ce1f303d0aa8ec51$var$Log$4.error("triggerFirmwareUpdateEmmc error: ",r),null==r?void 0:r.errorCode){let i=[$3FhS8.HardwareErrorCode.ActionCancelled,$3FhS8.HardwareErrorCode.CallQueueActionCancelled,$3FhS8.HardwareErrorCode.FirmwareVerificationFailed,$3FhS8.HardwareErrorCode.BleDeviceNotBonded,$3FhS8.HardwareErrorCode.BleServiceNotFound,$3FhS8.HardwareErrorCode.BlePoweredOff,$3FhS8.HardwareErrorCode.BleUnsupported,$3FhS8.HardwareErrorCode.BlePermissionError,$3FhS8.HardwareErrorCode.BleLocationError,$3FhS8.HardwareErrorCode.BleDeviceBondError,$3FhS8.HardwareErrorCode.BleCharacteristicNotifyError,$3FhS8.HardwareErrorCode.BleTimeoutError,$3FhS8.HardwareErrorCode.BleWriteCharacteristicError,$3FhS8.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission];if(i.includes(r.errorCode))throw r}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.FirmwareError,(null==r?void 0:r.message)||"Firmware update failed")}yield $3FhS8.wait(1500),this.postProcessingMessage("firmware"),this.postProgressMessage(0,"installingFirmware");let o=Date.now(),d=3e5,f=0,l=3;for(;;){if(Date.now()-o>d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Firmware update process timeout after 5 minutes");try{let r=this.device.getCommands().typedCall.bind(this.device.getCommands()),i=3e3,n=yield Promise.race([r("GetFeatures","Features",{}),new Promise((r,n)=>{setTimeout(()=>n($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNotResponse,"GetFeatures timeout",{method:"GetFeatures",timeoutMs:i})),i)})]);f=0;let s=n.message,a=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion(s).join("."),o=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(s).join("."),d=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(s).join(".");if("0.0.0"!==d)return this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.FirmwareUpdateCompleted),$ce1f303d0aa8ec51$var$DevicePool.resetState(),{bootloaderVersion:a,bleVersion:o,firmwareVersion:d};yield $3FhS8.wait(1e3)}catch(n){$ce1f303d0aa8ec51$var$Log$4.log("getFeatures error",n);let r=!0,i=this.extractUpdateModeProgress(n);if(null!==i?(f=0,this.postProgressMessage(i,"installingFirmware"),yield $3FhS8.wait(1e3),r=!1):this.isGetFeaturesTimeoutError(n)?(f+=1)<=l&&(yield $3FhS8.wait(1e3),r=!1):f=0,r){yield $3FhS8.wait(1e3);let r=this.isBleReconnect()&&(this.params.bleBinary||this.params.bleVersion)?18e4:6e4;f=0,yield this.waitForDeviceReconnect(r)}}}})}extractUpdateModeProgress(r){let i=this.normalizeErrorMessage(r);if(!i)return null;let n=i.match(/Update mode\s*(\d+)/i);if(!n)return null;let s=parseInt(n[1],10);return Number.isNaN(s)?null:s}isGetFeaturesTimeoutError(r){var i;return r instanceof $3FhS8.HardwareError&&r.errorCode===$3FhS8.HardwareErrorCode.CallMethodNotResponse&&(null===(i=r.params)||void 0===i?void 0:i.method)==="GetFeatures"}normalizeErrorMessage(r){if(!r)return"";if("string"==typeof r)return r;if("object"==typeof r){let{message:i}=r;if("string"==typeof i)return i;if(null!=i)return String(i)}return""}canPromptWebUsbSwitchFirmwareReconnect(){return!!this.isSwitchFirmware&&$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb($ce1f303d0aa8ec51$var$DataManager.getSettings("env"))&&!this.payload.skipWebDevicePrompt&&this.device.listenerCount($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE)>0}waitForDeviceReconnect(r){var i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let o=Date.now(),d=this.isBleReconnect(),f=0;for(;Date.now()-o{setTimeout(()=>{i($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceInitializeFailed))},3e3)})]);return}catch(r){$ce1f303d0aa8ec51$var$Log$4.log("catch Bluetooth error when device is restarting: ",r)}else{let r=yield null===(n=this.device.deviceConnector)||void 0===n?void 0:n.enumerate(),i=null!==(s=null==r?void 0:r.descriptors)&&void 0!==s?s:[],o=this.canPromptWebUsbSwitchFirmwareReconnect();if(o){if((f+=1)>4){this.postTipMessage($ce1f303d0aa8ec51$exports.FirmwareUpdateTipMessage.SwitchFirmwareReconnectDevice);try{yield this._promptDeviceForSwitchFirmwareWebDevice()}catch(r){$ce1f303d0aa8ec51$var$Log$4.log("WebUSB re-authorization failed: ",r)}f=0}}else f=0;let{deviceList:d}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(i,this.connectId);if(1===d.length){this.device.updateFromCache(d[0]),yield this.device.acquire(),this.device.commands.disposed=!1,this.device.getCommands().mainId=null!==(a=this.device.mainId)&&void 0!==a?a:"";return}}yield $3FhS8.wait(1e3)}catch(r){console.error("Device reconnect failed: ",r),$ce1f303d0aa8ec51$var$Log$4.error("Device reconnect failed:",r),yield $3FhS8.wait(1e3)}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound,`Device not reconnected within ${r/1e3}s`)})}}const $ce1f303d0aa8ec51$var$Log$3=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Method);class $ce1f303d0aa8ec51$var$PromptWebDeviceAccess extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.useDevice=!1,this.useDevicePassphraseState=!1,this.skipForceUpdateCheck=!0}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{deviceSerialNumberFromUI:n}=this.payload;yield $ce1f303d0aa8ec51$var$TransportManager.configure();let s="webusb"===$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if(!s)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Not webusb environment"));try{let a,o;if(n)o=[{path:n,device:{serialNumber:n},debug:!0}];else{if(!(a=yield null===(r=this.connector)||void 0===r?void 0:r.promptDeviceAccess()))return yield Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.WebDevicePromptAccessError));s&&(o=[{path:null!==(i=a.serialNumber)&&void 0!==i?i:"",device:a,debug:!0}])}let{deviceList:d}=yield $ce1f303d0aa8ec51$var$DevicePool.getDevices(o);if(d.length>0)return{device:d[0].toMessageObject()};return{device:null}}catch(r){return $ce1f303d0aa8ec51$var$Log$3.debug(r),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Please select the device to connect"))}})}}class $ce1f303d0aa8ec51$var$CipherKeyValue extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{let i=$ce1f303d0aa8ec51$var$validatePath(r.path);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"key",type:"string"},{name:"value",type:"hexString"},{name:"encrypt",type:"boolean"},{name:"askOnEncrypt",type:"boolean"},{name:"askOnDecrypt",type:"boolean"},{name:"iv",type:"hexString"}]),this.params.push({address_n:i,key:r.key,value:$ce1f303d0aa8ec51$var$formatAnyHex(r.value),encrypt:r.encrypt,ask_on_encrypt:r.askOnEncrypt,ask_on_decrypt:r.askOnDecrypt,iv:$ce1f303d0aa8ec51$var$formatAnyHex(r.iv)})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;iObject.assign({coin:i},r)},evm:{methodName:"evmGetAddress",getParams:(r,i)=>{let n;let{path:s,showOnOneKey:a}=r;return i&&(n=parseInt(i)),{chainId:n,path:s,showOnOneKey:a}}},sol:{methodName:"solGetAddress"},algo:{methodName:"algoGetAddress"},near:{methodName:"nearGetAddress"},stc:{methodName:"starcoinGetAddress"},cfx:{methodName:"confluxGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r;return{chainId:parseInt(null!=i?i:"1029"),path:n,showOnOneKey:s}}},tron:{methodName:"tronGetAddress"},aptos:{methodName:"aptosGetAddress"},xrp:{methodName:"xrpGetAddress"},cosmos:{methodName:"cosmosGetPublicKey",getParams:r=>{let{path:i,prefix:n,showOnOneKey:s}=r;return{hrp:n,path:i,showOnOneKey:s}}},ada:{methodName:"cardanoGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r,a="string"==typeof n?`${n}/0/0`:$ce1f303d0aa8ec51$var$serializedPath([...n,0,0]),o="string"==typeof n?`${n}/2/0`:$ce1f303d0aa8ec51$var$serializedPath([...n,2,0]),d=1;return i&&(d=i===$ce1f303d0aa8ec51$var$Mainnet?1:0),{addressParameters:{addressType:$5xch2.Messages.CardanoAddressType.BASE,path:a,stakingPath:o},protocolMagic:764824073,networkId:d,derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,showOnOneKey:s,address:"",isCheck:!1}}},sui:{methodName:"suiGetAddress"},benfen:{methodName:"benfenGetAddress"},fil:{methodName:"filecoinGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r,a=!1;return i&&(a=i!==$ce1f303d0aa8ec51$var$Mainnet),{isTestnet:a,path:n,showOnOneKey:s}}},dot:{methodName:"polkadotGetAddress",getParams:(r,i)=>{let{path:n,prefix:s,showOnOneKey:a}=r;if(!s||!i)throw Error("Invalid params");return{prefix:parseInt(s),network:i,path:n,showOnOneKey:a}}},kaspa:{methodName:"kaspaGetAddress",getParams:r=>{let{path:i,prefix:n,showOnOneKey:s,useTweak:a}=r;return{scheme:"schnorr",prefix:n,path:i,showOnOneKey:s,useTweak:a}}},nexa:{methodName:"nexaGetAddress",getParams:r=>{let{path:i,prefix:n,showOnOneKey:s}=r;return{scheme:"Schnorr",prefix:n,path:i,showOnOneKey:s}}},dynex:{methodName:"dnxGetAddress"},nervos:{methodName:"nervosGetAddress",getParams:(r,i)=>{let{path:n,showOnOneKey:s}=r;return{network:i,path:n,showOnOneKey:s}}},scdo:{methodName:"scdoGetAddress"},ton:{methodName:"tonGetAddress"},alph:{methodName:"alephiumGetAddress"},nostr:{methodName:"nostrGetPublicKey"},neo:{methodName:"neoGetAddress"},stellar:{methodName:"stellarGetAddress"}};class $ce1f303d0aa8ec51$var$AllNetworkGetAddressBase extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.abortController=null}init(){var r,i;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"bundle",type:"array"}]),null===(i=null===(r=this.payload)||void 0===r?void 0:r.bundle)||void 0===i||i.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"network",type:"string",required:!0},{name:"chainName",type:"string"},{name:"showOnOneKey",type:"boolean"}])})}generateMethodName({network:r,payload:i,originalIndex:n}){var s,a;let{name:o,coin:d}=$ce1f303d0aa8ec51$var$networkAliases[r]||{name:r,coin:null==i?void 0:i.chainName},f=$ce1f303d0aa8ec51$var$networkConfigMap[o];if(!f)throw Error(`Unsupported network: ${r}`);return{methodName:f.methodName,params:Object.assign(Object.assign({},null!==(a=null===(s=null==f?void 0:f.getParams)||void 0===s?void 0:s.call(f,i,d,f.methodName))&&void 0!==a?a:i),{originPayload:i}),_originRequestParams:i,_originalIndex:n}}callMethod(r,i,n){var s,a,o;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let d;let f=$ce1f303d0aa8ec51$var$findMethod({event:$ce1f303d0aa8ec51$var$IFRAME.CALL,type:$ce1f303d0aa8ec51$var$IFRAME.CALL,payload:Object.assign({connectId:this.payload.connectId,deviceId:this.payload.deviceId,method:r},i)});f.connector=this.connector,f.postMessage=this.postMessage,this.context&&(null===(s=f.setContext)||void 0===s||s.call(f,this.context)),f.requestContext=$ce1f303d0aa8ec51$var$createRequestContext(f.responseID,r,{sdkInstanceId:this.sdkInstanceId,connectId:this.payload.connectId,parentResponseID:this.responseID});let l=()=>{var r;null===(r=this.abortController)||void 0===r||r.abort($3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.RepeatUnlocking])},u=(...[r,i])=>{"ButtonRequest_PinEntry"===i.code||"ButtonRequest_AttachPin"===i.code?l():$ce1f303d0aa8ec51$var$onDeviceButtonHandler(r,i)};try{f.init(),null===(a=f.setDevice)||void 0===a||a.call(f,this.device),f.context=this.context,f.requestContext&&this.device&&$ce1f303d0aa8ec51$var$updateRequestContext(f.requestContext.responseID,{deviceInstanceId:this.device.instanceId,commandsInstanceId:null===(o=this.device.commands)||void 0===o?void 0:o.instanceId}),this.device.on($ce1f303d0aa8ec51$var$DEVICE.BUTTON,u),this.device.on($ce1f303d0aa8ec51$var$DEVICE.PIN,l),this.device.on($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,l),$ce1f303d0aa8ec51$var$preCheckDeviceSupport(this.device,f);let r=yield f.run();if(!Array.isArray(r)||0===r.length)throw Error("No response");d=r.map((r,s)=>Object.assign(Object.assign({},i.bundle[s]._originRequestParams),{success:!0,payload:Object.assign(Object.assign({},r),{rootFingerprint:n})})),f.requestContext&&$ce1f303d0aa8ec51$var$completeRequestContext(f.requestContext.responseID)}catch(n){let r=$ce1f303d0aa8ec51$var$handleSkippableHardwareError(n,this.device,f);if(r)d=i.bundle.map(i=>Object.assign(Object.assign({},i._originRequestParams),{success:!1,payload:{error:r.message,code:r.errorCode,params:r.params,connectId:f.connectId,deviceId:f.deviceId}}));else throw n;f.requestContext&&$ce1f303d0aa8ec51$var$completeRequestContext(f.requestContext.responseID,n instanceof Error?n:Error(String(n)))}finally{this.device.off($ce1f303d0aa8ec51$var$DEVICE.BUTTON,u),this.device.off($ce1f303d0aa8ec51$var$DEVICE.PIN,l),this.device.off($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,l)}return d})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("GetPublicKey","PublicKey",{address_n:[$ce1f303d0aa8ec51$var$toHardened(44),$ce1f303d0aa8ec51$var$toHardened(1),$ce1f303d0aa8ec51$var$toHardened(0)],coin_name:"Testnet",script_type:"SPENDADDRESS",show_display:!1});if(this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.CLOSE_UI_PIN_WINDOW)),null==r.message.root_fingerprint)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter);return this.abortController=new AbortController,this.getAllNetworkAddress(r.message.root_fingerprint).catch(r=>{if(r instanceof $3FhS8.HardwareError&&r.errorCode===$3FhS8.HardwareErrorCode.RepeatUnlocking)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RepeatUnlocking,r.message);throw r})})}}function $ce1f303d0aa8ec51$var$preCheckDeviceSupport(r,i){let n=$ce1f303d0aa8ec51$var$getMethodVersionRange(r.features,r=>i.getVersionRange()[r]),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(r.features).join(".");if(n&&$ce1f303d0aa8ec51$var$semver__default.default.valid(n.min)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(s,n.min))throw $3FhS8.ERRORS.createNeedUpgradeFirmwareHardwareError({currentVersion:s,requireVersion:n.min,methodName:i.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(r.features)});if(i.strictCheckDeviceSupport&&!n)throw $3FhS8.ERRORS.createDeviceNotSupportMethodError(i.name,$ce1f303d0aa8ec51$var$getFirmwareType(r.features))}function $ce1f303d0aa8ec51$var$handleSkippableHardwareError(r,i,n){var s,a,o,d,f,l;let u;if(r instanceof $3FhS8.HardwareError&&r.errorCode!==$3FhS8.HardwareErrorCode.RuntimeError){let{errorCode:i}=r;i===$3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware?u=r:i===$3FhS8.HardwareErrorCode.DeviceNotSupportMethod&&(u=r)}else if((null===(s=r.message)||void 0===s?void 0:s.includes("Failure_UnexpectedMessage"))||(null===(a=r.message)||void 0===a?void 0:a.includes("Failure_UnknownMessage"))){let r=$ce1f303d0aa8ec51$var$getMethodVersionRange(i.features,r=>n.getVersionRange()[r]),s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(i.features).join(".");u=r&&$ce1f303d0aa8ec51$var$semver__default.default.valid(r.min)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(s,r.min)?$3FhS8.ERRORS.createNeedUpgradeFirmwareHardwareError({currentVersion:s,requireVersion:r.min,methodName:n.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(i.features)}):$3FhS8.ERRORS.createDeviceNotSupportMethodError(n.name,$ce1f303d0aa8ec51$var$getFirmwareType(i.features))}else((null===(d=null===(o=r.message)||void 0===o?void 0:o.toLowerCase())||void 0===d?void 0:d.includes("forbidden key path"))||(null===(l=null===(f=r.message)||void 0===f?void 0:f.toLowerCase())||void 0===l?void 0:l.includes("invalid path")))&&(u=$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,r.message));return u}class $ce1f303d0aa8ec51$var$AllNetworkGetAddress extends $ce1f303d0aa8ec51$var$AllNetworkGetAddressBase{getAllNetworkAddress(r){var i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let o=[],d={},{bundle:f}=this.payload,l=f.map((r,i)=>this.generateMethodName({network:r.network,payload:r,originalIndex:i})).reduce((r,i)=>(r[i.methodName]||(r[i.methodName]=[]),r[i.methodName].push(i),r),{}),u=0;for(let[o,f]of Object.entries(l)){let l={bundle:f.map(r=>Object.assign({},r.params))};if(null===(i=this.abortController)||void 0===i?void 0:i.signal.aborted)throw Error($3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.RepeatUnlocking]);let c=yield this.callMethod(o,l,r);if(null===(n=this.abortController)||void 0===n?void 0:n.signal.aborted)throw Error($3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.RepeatUnlocking]);for(let r=0;r1){let r=Math.round((u+1)/this.payload.bundle.length*100);this.postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.DEVICE_PROGRESS,{progress:r}))}u++}for(let r=0;r{let n;if(i){let r=i.toLowerCase();n=$ce1f303d0aa8ec51$var$bitcoin.find(i=>i.name.toLowerCase()===r||i.label.toLowerCase()===r)}else if(r){let i=$ce1f303d0aa8ec51$var$fromHardened(r[1]);n=$ce1f303d0aa8ec51$var$bitcoin.find(r=>r.slip44===i)}if(!n){if(i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`Invalid coin name: ${i}`);if(r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`Invalid path: ${r[0]}`);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter)}return n},$ce1f303d0aa8ec51$var$getCoinAndScriptType=(r,i,n)=>{let s=$ce1f303d0aa8ec51$var$getCoinInfo(r,i).name,a=n;void 0===a&&(a=$ce1f303d0aa8ec51$var$isMultisigPath(r));let o=$ce1f303d0aa8ec51$var$getScriptType(r);return"SPENDMULTISIG"!==o||a||(o="SPENDADDRESS"),{coinName:s,scriptType:null!=o?o:"SPENDADDRESS"}};function $ce1f303d0aa8ec51$var$isCoinNameInList(r,i){for(let n=0;n{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,1);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"coin",type:"string"},{name:"showOnOneKey",type:"boolean"},{name:"multisig",type:"object"},{name:"scriptType",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{multisig:a,coin:o}=r,{scriptType:d}=r;d||"SPENDMULTISIG"!==(d=$ce1f303d0aa8ec51$var$getScriptType(n))||a||(d="SPENDADDRESS");let f=$ce1f303d0aa8ec51$var$getCoinInfo(n,o).name;this.params.push({address_n:n,show_display:s,coin_name:f,multisig:a,script_type:d||"SPENDADDRESS"})})}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange(this.params.map(r=>r.coin_name))}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;ir.address_n.length<3);if(d)throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.ForbiddenKeyPath,"Path length must be greater than 3");let f=$ce1f303d0aa8ec51$var$supportBatchPublicKey(r.features,a);if(!f)throw $3FhS8.createDeviceNotSupportMethodError("BatchGetPublickeys",$ce1f303d0aa8ec51$var$getFirmwareType(r.features));let l=i.find(r=>!$ce1f303d0aa8ec51$var$isEqualBip44CoinType(r.address_n,s));if((null==a?void 0:a.ignoreCoinType)===!1&&l)throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.ForbiddenKeyPath);let u=10,c=$ce1f303d0aa8ec51$var$getDeviceType(r.features);$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(c)?u=10:$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(c)&&(u=20);let p={public_keys:[],hd_nodes:[]},h=$ce1f303d0aa8ec51$var$splitArray(i,u);for(let i of h){let s=yield r.commands.typedCall("BatchGetPublickeys","EcdsaPublicKeys",{paths:i,ecdsa_curve_name:n,include_node:null!==(o=null==a?void 0:a.includeNode)&&void 0!==o&&o});if("EcdsaPublicKeys"!==s.type)throw $3FhS8.createDeviceNotSupportMethodError("BatchGetPublickeys",$ce1f303d0aa8ec51$var$getFirmwareType(r.features));p.root_fingerprint=s.message.root_fingerprint,p.public_keys.push(...s.message.public_keys),p.hd_nodes.push(...s.message.hd_nodes)}if(p.hd_nodes.length!==i.length&&(null==a?void 0:a.includeNode))throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"BatchGetPublickeys failed, hd_nodes length not match");if(p.public_keys.length!==i.length&&!(null==a?void 0:a.includeNode))throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"BatchGetPublickeys failed, public_keys length not match");return p})}const $ce1f303d0aa8ec51$var$VERSION_BYTES={XPUB:76067358,YPUB:77429938,ZPUB:78792518};function $ce1f303d0aa8ec51$var$getVersionBytes(r,i){if("bitcoin"===r.toLowerCase())switch(i){case"SPENDADDRESS":case"SPENDMULTISIG":default:return $ce1f303d0aa8ec51$var$VERSION_BYTES.XPUB;case"SPENDP2SHWITNESS":return $ce1f303d0aa8ec51$var$VERSION_BYTES.YPUB;case"SPENDWITNESS":return $ce1f303d0aa8ec51$var$VERSION_BYTES.ZPUB}else if("litecoin"===r.toLowerCase())switch(i){case"SPENDADDRESS":case"SPENDMULTISIG":return 27108450;case"SPENDP2SHWITNESS":return 28471030;case"SPENDWITNESS":return 78792518}else if("dogecoin"===r.toLowerCase()){if("SPENDADDRESS"===i)return 49990397;if("SPENDMULTISIG"===i)return 76067358}}function $ce1f303d0aa8ec51$var$base58Check(r){let i=$91294e775a6684d7$exports.sha256($91294e775a6684d7$exports.sha256(new Uint8Array(r))).slice(0,4),n=$ce1f303d0aa8ec51$require$Buffer.concat([new Uint8Array(r),new Uint8Array(i)]),s="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",a="",o=BigInt(`0x${n.toString("hex")}`),d=BigInt(58);for(;o>0;){let r=Number(o%d);o/=d,a=s[r]+a}for(let r=0;r{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,1);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"coin",type:"string"},{name:"showOnOneKey",type:"boolean"},{name:"scriptType",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{multisig:a,coin:o}=r,{scriptType:d}=r;d||"SPENDMULTISIG"!==(d=$ce1f303d0aa8ec51$var$getScriptType(n))||a||(d="SPENDADDRESS");let f=$ce1f303d0aa8ec51$var$getCoinInfo(n,o).name;this.params.push({address_n:n,show_display:s,coin_name:f,script_type:d||"SPENDADDRESS"})})}isBtcNetwork(r){return"Testnet"===r.coin_name||"Bitcoin"===r.coin_name}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange(this.params.map(r=>r.coin_name))}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];try{let i=this.params.some(r=>r.show_display);if(i||!this.hasBundle)throw Error("Goto getPublickey");for(let r of this.params){let i=$ce1f303d0aa8ec51$var$getVersionBytes(r.coin_name,r.script_type);if(!i)throw Error(`Invalid coinName, not support generate xpub for scriptType: ${r.script_type}`)}let n=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"secp256k1",0,{includeNode:!0,ignoreCoinType:!0});if(!(null==n?void 0:n.hd_nodes)||this.params.length!==n.hd_nodes.length)throw Error("Invalid response from Publickeys");for(let i=0;i/*)`}r.push({path:o,node:a,xpub:d,root_fingerprint:f,xpubSegwit:l})}}catch(i){if(i instanceof $3FhS8.HardwareError){let{errorCode:r}=i;if(r===$3FhS8.HardwareErrorCode.PinCancelled||r===$3FhS8.HardwareErrorCode.ActionCancelled||r===$3FhS8.HardwareErrorCode.ResponseUnexpectTypeError||r===$3FhS8.HardwareErrorCode.PinInvalid)throw i}r=[];for(let i=0;i/*)`}r.push(a)}}return $ce1f303d0aa8ec51$var$validateResult(r,["xpub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?r:r[0])})}}class $ce1f303d0aa8ec51$var$BTCSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"coin",type:"string"},{name:"noScriptType",type:"boolean"},{name:"dAppSignType",type:"string"}]);let{path:r,messageHex:i,coin:n,noScriptType:s,dAppSignType:a}=this.payload,o=s,d=!1,f=$ce1f303d0aa8ec51$var$validatePath(r),{coinName:l,scriptType:u}=$ce1f303d0aa8ec51$var$getCoinAndScriptType(f,n,!1),c=u;"ecdsa"===a||"bip322-simple"===a?"ecdsa"===a?o=!0:(d=!0,o=!1):c=u,this.params={address_n:f,message:$ce1f303d0aa8ec51$var$formatAnyHex(i),coin_name:l,script_type:c,no_script_type:o,is_bip322_simple:d}}getVersionRange(){return this.payload.dAppSignType?{pro:{min:"4.9.3"}}:$ce1f303d0aa8ec51$var$getBitcoinForkVersionRange([this.params.coin_name])}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("SignMessage","MessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$BTCSignPsbt extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"psbt",type:"hexString",required:!0},{name:"coin",type:"string"}]);let{psbt:r,coin:i}=this.payload,n=$ce1f303d0aa8ec51$var$getCoinInfo(void 0,i);this.params={psbt:$ce1f303d0aa8ec51$var$formatAnyHex(r),coin_name:n.name}}getVersionRange(){return{pro:{min:"4.9.3"},model_classic1s:{min:"3.10.1"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.device.commands.typedCall("SignPsbt","SignedPsbt",Object.assign({},this.params));return r.message}catch(n){let{message:r}=n,i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if(r.includes("PSBT parse failed")&&(i===$3FhS8.EDeviceType.Classic1s||i===$3FhS8.EDeviceType.ClassicPure))throw $3FhS8.TypedError($3FhS8.HardwareErrorCode.BTCPsbtTooManyUtxos,"PSBT too many utxos",{count:5});throw n}})}}const $ce1f303d0aa8ec51$var$requestPrevTxInfo$1=({typedCall:r,txRequest:{request_type:i,details:n},refTxs:s})=>{let{tx_hash:a}=n;if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: unknown details.tx_hash");let o=s[a.toLowerCase()];if(!o)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown tx: ${a}`);if("TXINPUT"===i){if(!o.bin_outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXINPUT: ${a}`);return r("TxAckPrevInput","TxRequest",{tx:{input:o.inputs[n.request_index]}})}if("TXOUTPUT"===i){if(!o.bin_outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXOUTPUT: ${a}`);return r("TxAckPrevOutput","TxRequest",{tx:{output:o.bin_outputs[n.request_index]}})}if("TXORIGINPUT"===i){if(!o.outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXORIGINPUT: ${a}`);return r("TxAckInput","TxRequest",{tx:{input:o.inputs[n.request_index]}})}if("TXORIGOUTPUT"===i){if(!o.outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown TXORIGOUTPUT: ${a}`);return r("TxAckOutput","TxRequest",{tx:{output:o.outputs[n.request_index]}})}if("TXEXTRADATA"===i){if("number"!=typeof n.extra_data_len)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_len");if("number"!=typeof n.extra_data_offset)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_offset");if("string"!=typeof o.extra_data)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: No extra data for transaction ${o.hash}`);let i=o.extra_data,s=n.extra_data_len,a=n.extra_data_offset,d=i.substring(2*a,(a+s)*2);return r("TxAckPrevExtraData","TxRequest",{tx:{extra_data_chunk:d}})}if("TXMETA"===i){let i=o.extra_data,n={version:o.version,lock_time:o.lock_time,inputs_count:o.inputs.length,outputs_count:o.outputs?o.outputs.length:o.bin_outputs.length,timestamp:o.timestamp,version_group_id:o.version_group_id,expiry:o.expiry,branch_id:o.branch_id,extra_data_len:i?i.length/2:void 0};return r("TxAckPrevMeta","TxRequest",{tx:n})}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Unknown request type: ${i}`)},$ce1f303d0aa8ec51$var$requestSignedTxInfo$1=({typedCall:r,txRequest:{request_type:i,details:n},inputs:s,outputs:a})=>{if("TXINPUT"===i)return r("TxAckInput","TxRequest",{tx:{input:s[n.request_index]}});if("TXOUTPUT"===i)return r("TxAckOutput","TxRequest",{tx:{output:a[n.request_index]}});if("TXMETA"===i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXMETA from signed transaction");if("TXEXTRADATA"===i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXEXTRADATA from signed transaction");throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestSignedTxInfo: Unknown request type: ${i}`)},$ce1f303d0aa8ec51$var$requestTxAck$1=r=>{let{tx_hash:i}=r.txRequest.details;return i?$ce1f303d0aa8ec51$var$requestPrevTxInfo$1(r):$ce1f303d0aa8ec51$var$requestSignedTxInfo$1(r)},$ce1f303d0aa8ec51$var$saveTxSignatures$1=(r,i,n)=>{if(!n)return;let{signature_index:s,signature:a,serialized_tx:o}=n;if(o&&r.push(o),"number"==typeof s){if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"saveTxSignatures: Unexpected null in trezor:TxRequestSerialized signature.");i[s]=a}},$ce1f303d0aa8ec51$var$processTxRequest$2=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{typedCall:i,txRequest:n,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f}=r;if($ce1f303d0aa8ec51$var$saveTxSignatures$1(d,f,n.serialized),"TXFINISHED"===n.request_type)return Promise.resolve({signatures:f,serializedTx:d.join("")});let{message:l}=yield $ce1f303d0aa8ec51$var$requestTxAck$1(r);return $ce1f303d0aa8ec51$var$processTxRequest$2({typedCall:i,txRequest:l,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f})});var $ce1f303d0aa8ec51$var$signtx=(r,i,n,s,a,o)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d={};s.forEach(r=>{d[r.hash.toLowerCase()]=r});let{message:f}=yield r("SignTx","TxRequest",Object.assign(Object.assign({},a),{inputs_count:i.length,outputs_count:n.length,coin_name:o}));return $ce1f303d0aa8ec51$var$processTxRequest$2({typedCall:r,txRequest:f,refTxs:d,inputs:i,outputs:n,serializedTx:[],signatures:[]})});const $ce1f303d0aa8ec51$var$requestPrevTxInfo=({txRequest:{request_type:r,details:i},refTxs:n})=>{let{tx_hash:s}=i;if(!s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: unknown details.tx_hash");let a=n[s.toLowerCase()];if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Requested unknown tx: ${s}`);if(!a.bin_outputs)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: bin_outputs not set tx: ${s}`);if("TXINPUT"===r)return{inputs:[a.inputs[i.request_index]]};if("TXOUTPUT"===r)return{bin_outputs:[a.bin_outputs[i.request_index]]};if("TXEXTRADATA"===r){if("number"!=typeof i.extra_data_len)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_len");if("number"!=typeof i.extra_data_offset)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestPrevTxInfo: Missing extra_data_offset");if("string"!=typeof a.extra_data)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: No extra data for transaction ${a.hash}`);let r=a.extra_data,n=i.extra_data_len,s=i.extra_data_offset,o=r.substring(2*s,(s+n)*2);return{extra_data:o}}if("TXMETA"===r){let r=a.extra_data,i={version:a.version,lock_time:a.lock_time,inputs_cnt:a.inputs.length,outputs_cnt:a.bin_outputs.length,timestamp:a.timestamp,version_group_id:a.version_group_id,expiry:a.expiry,branch_id:a.branch_id};return"string"==typeof r&&0!==r.length?Object.assign(Object.assign({},i),{extra_data_len:r.length/2}):i}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestPrevTxInfo: Unknown request type: ${r}`)},$ce1f303d0aa8ec51$var$requestSignedTxInfo=({txRequest:{request_type:r,details:i},inputs:n,outputs:s})=>{if("TXINPUT"===r)return{inputs:[n[i.request_index]]};if("TXOUTPUT"===r)return{outputs:[s[i.request_index]]};if("TXMETA"===r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXMETA from signed transaction");if("TXEXTRADATA"===r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"requestSignedTxInfo: Cannot read TXEXTRADATA from signed transaction");throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`requestSignedTxInfo: Unknown request type: ${r}`)},$ce1f303d0aa8ec51$var$requestTxAck=r=>{let{tx_hash:i}=r.txRequest.details;return i?$ce1f303d0aa8ec51$var$requestPrevTxInfo(r):$ce1f303d0aa8ec51$var$requestSignedTxInfo(r)},$ce1f303d0aa8ec51$var$saveTxSignatures=(r,i,n)=>{if(!n)return;let{signature_index:s,signature:a,serialized_tx:o}=n;if(o&&r.push(o),"number"==typeof s){if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"saveTxSignatures: Unexpected null in oneKey:TxRequestSerialized signature.");i[s]=a}},$ce1f303d0aa8ec51$var$processTxRequest$1=r=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{typedCall:i,txRequest:n,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f}=r;if($ce1f303d0aa8ec51$var$saveTxSignatures(d,f,n.serialized),"TXFINISHED"===n.request_type)return Promise.resolve({signatures:f,serializedTx:d.join("")});let l=$ce1f303d0aa8ec51$var$requestTxAck(r),{message:u}=yield i("TxAck","TxRequest",{tx:l});return $ce1f303d0aa8ec51$var$processTxRequest$1({typedCall:i,txRequest:u,refTxs:s,inputs:a,outputs:o,serializedTx:d,signatures:f})});var $ce1f303d0aa8ec51$var$signtxLegacy=(r,i,n,s,a,o)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d={};s.forEach(r=>{d[r.hash.toLowerCase()]=r});let{message:f}=yield r("SignTx","TxRequest",Object.assign(Object.assign({},a),{inputs_count:i.length,outputs_count:n.length,coin_name:o}));return $ce1f303d0aa8ec51$var$processTxRequest$1({typedCall:r,txRequest:f,refTxs:d,inputs:i,outputs:n,serializedTx:[],signatures:[]})});class $ce1f303d0aa8ec51$var$BTCSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"coin",type:"string",required:!0},{name:"inputs",type:"array",required:!0},{name:"outputs",type:"array",required:!0},{name:"refTxs",type:"array",required:!0,allowEmpty:!0},{name:"locktime",type:"number"},{name:"version",type:"number"},{name:"expiry",type:"number"},{name:"overwintered",type:"boolean"},{name:"versionGroupId",type:"number"},{name:"branchId",type:"number"},{name:"timestamp",type:"number"}]),this.payload.refTxs.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"hash",type:"hexString",required:!0},{name:"inputs",type:"array",required:!0},{name:"bin_outputs",type:"array",required:!Array.isArray(r.outputs)},{name:"outputs",type:"array"},{name:"version",type:"number",required:!0},{name:"lock_time",type:"number",required:!0},{name:"extra_data",type:"string"},{name:"timestamp",type:"number"},{name:"version_group_id",type:"number"}])}),this.payload.inputs.forEach(r=>{$ce1f303d0aa8ec51$var$validatePath(r.address_n);let i=$ce1f303d0aa8ec51$var$isSegwitPath(r.address_n);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"hexString",required:!0},{name:"prev_index",type:"number",required:!0},{name:"script_type",type:"string"},{name:"amount",type:"string",required:i},{name:"sequence",type:"number"},{name:"multisig",type:"object"}])}),this.payload.outputs.forEach(r=>{if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"address_n",type:"array"},{name:"address",type:"string"},{name:"amount",type:"string"},{name:"op_return_data",type:"string"},{name:"multisig",type:"object"}]),Object.prototype.hasOwnProperty.call(r,"address_n")&&Object.prototype.hasOwnProperty.call(r,"address"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Cannot use address and address_n in one output");if(r.address_n){let i=$ce1f303d0aa8ec51$var$getOutputScriptType(r.address_n);if(r.script_type!==i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`Output change script_type should be set to ${i}`)}});let{inputs:r,outputs:i,refTxs:n,account:s,coin:a}=this.payload,o=$ce1f303d0aa8ec51$var$getCoinInfo(void 0,a).name;this.params={inputs:r,outputs:i,refTxs:n,addresses:s?s.addresses:void 0,options:{lock_time:this.payload.locktime,timestamp:this.payload.timestamp,version:this.payload.version,expiry:this.payload.expiry,overwintered:this.payload.overwintered,version_group_id:this.payload.versionGroupId,branch_id:this.payload.branchId},coinName:o}}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange([this.params.coinName])}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:r,params:i}=this,n=r.unavailableCapabilities.replaceTransaction,{refTxs:s}=i,a=n?$ce1f303d0aa8ec51$var$signtxLegacy:$ce1f303d0aa8ec51$var$signtx,o=yield a(r.commands.typedCall.bind(r.commands),i.inputs,i.outputs,s,i.options,i.coinName);return o})}}class $ce1f303d0aa8ec51$var$BTCVerifyMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"address",type:"string",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"signature",type:"hexString",required:!0},{name:"coin",type:"string",required:!0}]);let{coin:r}=this.payload,{address:i,messageHex:n,signature:s}=$ce1f303d0aa8ec51$var$formatAnyHex(this.payload),a=$ce1f303d0aa8ec51$var$getCoinInfo(void 0,r).name;this.params={address:i,message:n,signature:s,coin_name:a}}getVersionRange(){return $ce1f303d0aa8ec51$var$getBitcoinForkVersionRange([this.params.coin_name])}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("VerifyMessage","Success",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$ConfluxGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i,n;let s=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"chainId",type:"number"},{name:"showOnOneKey",type:"boolean"}]);let a=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:s,chain_id:null!==(n=r.chainId)&&void 0!==n?n:1029,show_display:a})})}getVersionRange(){return{model_mini:{min:"2.4.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{if(!r)return["",""];let n=r.slice(0,i),s=r.slice(i);return[n,s]};class $ce1f303d0aa8ec51$var$ConfluxSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.addressN=[],this.processTxRequest=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!r.data_length){let i=r.signature_v,n=r.signature_r,s=r.signature_s;if(null==i||null==n||null==s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,"sign transaction failed");return Promise.resolve({v:`0x${i.toString(16)}`,r:`0x${n}`,s:`0x${s}`})}let[n,s]=$ce1f303d0aa8ec51$var$cutString(i,2*r.data_length),a=yield this.device.commands.typedCall("ConfluxTxAck","ConfluxTxRequest",{data_chunk:n});return this.processTxRequest(a.message,s)}),this.evmSignTx=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{to:n,value:s,gasPrice:a,gasLimit:o,nonce:d,data:f,chainId:l,epochHeight:u,storageLimit:c}=i,p=null==f?0:f.length/2,[h,g]=$ce1f303d0aa8ec51$var$cutString(f,2048),m={address_n:r,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),gas_price:$ce1f303d0aa8ec51$var$stripHexStartZeroes(a),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(o),to:n,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(s),epoch_height:$ce1f303d0aa8ec51$var$stripHexStartZeroes(u),storage_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(c),chain_id:l};0!==p&&(m=Object.assign(Object.assign({},m),{data_length:p,data_initial_chunk:h}));let v=yield this.device.commands.typedCall("ConfluxSignTx","ConfluxTxRequest",m);return this.processTxRequest(v.message,g)})}init(){this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload;this.addressN=$ce1f303d0aa8ec51$var$validatePath(r,3);let n=i,s=[{name:"to",type:"hexString",required:!0},{name:"value",type:"hexString",required:!0},{name:"gasLimit",type:"hexString",required:!0},{name:"gasPrice",type:"hexString",required:!0},{name:"nonce",type:"hexString",required:!0},{name:"epochHeight",type:"hexString",required:!0},{name:"storageLimit",type:"hexString",required:!0},{name:"chainId",type:"number",required:!0},{name:"data",type:"hexString"}];$ce1f303d0aa8ec51$var$validateParams(n,s),this.formattedTx=$ce1f303d0aa8ec51$var$formatAnyHex(n)}getVersionRange(){return{model_mini:{min:"2.4.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{addressN:r,formattedTx:i}=this;if(null==i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"ConfluxSignTransaction: format tx error");let n=yield this.evmSignTx(r,i);return Promise.resolve(n)})}}function $ce1f303d0aa8ec51$var$getAddressLegacyV1({typedCall:r,param:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return r("EthereumGetAddress","EthereumAddress",{address_n:i.address_n,show_display:i.show_display,chain_id:i.chain_id})})}function $ce1f303d0aa8ec51$var$getAddress({typedCall:r,param:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return r("EthereumGetAddressOneKey","EthereumAddressOneKey",Object.assign({},i))})}class $ce1f303d0aa8ec51$var$EvmGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"chainId",type:"number"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,chain_id:r.chainId})})}getEvmAddress(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$getAddressLegacyV1({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r}):$ce1f303d0aa8ec51$var$getAddress({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i!!r.showOnOneKey),this.useBatch=!this.confirmShowOnOneKey&&this.hasBundle&&this.payload.useBatch;let s=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(s,[{name:"bundle",type:"array"}]),this.params=[],s.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"chainId",type:"number"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,chain_id:r.chainId})})}getEvmPublicKey(r){return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$getPublicKeyLegacyV1({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r}):$ce1f303d0aa8ec51$var$getPublicKey({typedCall:this.device.commands.typedCall.bind(this.device.commands),param:r})}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=[];if(this.useBatch&&$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features))try{let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"secp256k1",60,{includeNode:!1,ignoreCoinType:!0}),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r,publicKey:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),yield Promise.resolve(i)}catch(r){}for(let r=0;r$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let o;if(!i.data_length){let r=i.signature_v,n=i.signature_r,a=i.signature_s,o="authorization_signatures"in i?i.authorization_signatures:void 0;if(null==r||null==n||null==a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"processTxRequest: Unexpected request");s&&r<=1&&(r+=2*s+35);let d={v:`0x${r.toString(16)}`,r:`0x${n}`,s:`0x${a}`};return o&&o.length>0&&(d.authorizationSignatures=o.map(r=>({yParity:r.y_parity,r:r.r,s:r.s}))),Promise.resolve(d)}let[d,f]=$ce1f303d0aa8ec51$var$cutString(n,2*i.data_length);return o=a?yield r("EthereumTxAck","EthereumTxRequest",{data_chunk:d}):yield r("EthereumTxAckOneKey","EthereumTxRequestOneKey",{data_chunk:d}),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:o.message,data:f,chainId:s,supportTrezor:a})}),$ce1f303d0aa8ec51$var$evmSignTx=({typedCall:r,addressN:i,tx:n,supportTrezor:s})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a;let{to:o,value:d,gasPrice:f,gasLimit:l,nonce:u,data:c,chainId:p,txType:h}=n,g=null==c?0:c.length/2,[m,v]=$ce1f303d0aa8ec51$var$cutString(c,2048),_={address_n:i,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(u),gas_price:$ce1f303d0aa8ec51$var$stripHexStartZeroes(f),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(l),to:o,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),chain_id:p};return 0!==g&&(_=Object.assign(Object.assign({},_),{data_length:g,data_initial_chunk:m})),null!==h&&(_=Object.assign(Object.assign({},_),{tx_type:h})),a=s?yield r("EthereumSignTx","EthereumTxRequest",_):yield r("EthereumSignTxOneKey","EthereumTxRequestOneKey",_),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:a.message,data:v,chainId:p,supportTrezor:s})}),$ce1f303d0aa8ec51$var$evmSignTxEip1559=({typedCall:r,addressN:i,tx:n,supportTrezor:s})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a;let{to:o,value:d,gasLimit:f,nonce:l,data:u,chainId:c,maxFeePerGas:p,maxPriorityFeePerGas:h,accessList:g}=n,m=null==u?0:u.length/2,[v,_]=$ce1f303d0aa8ec51$var$cutString(u,2048),b={address_n:i,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(l),max_gas_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(p),max_priority_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(h),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(f),to:o,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),data_length:m,data_initial_chunk:v,chain_id:c,access_list:(g||[]).map(r=>({address:r.address,storage_keys:r.storageKeys}))};return a=s?yield r("EthereumSignTxEIP1559","EthereumTxRequest",b):yield r("EthereumSignTxEIP1559OneKey","EthereumTxRequestOneKey",b),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:a.message,data:_,supportTrezor:s})}),$ce1f303d0aa8ec51$var$evmSignTxEip7702=({typedCall:r,addressN:i,tx:n,supportTrezor:s})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a;let{to:o,value:d,gasLimit:f,nonce:l,data:u,chainId:c,maxFeePerGas:p,maxPriorityFeePerGas:h,accessList:g,authorizationList:m}=n,v=null==u?0:u.length/2,[_,b]=$ce1f303d0aa8ec51$var$cutString(u,2048),T={address_n:i,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(l),max_gas_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(p),max_priority_fee:$ce1f303d0aa8ec51$var$stripHexStartZeroes(h),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes(f),to:o,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes(d),data_length:v,data_initial_chunk:_,chain_id:c,access_list:(g||[]).map(r=>({address:r.address,storage_keys:r.storageKeys})),authorization_list:m.map(r=>({address_n:r.addressN||[],chain_id:r.chainId,address:$ce1f303d0aa8ec51$var$addHexPrefix(r.address),nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes(r.nonce),signature:void 0!==r.yParity&&r.r&&r.s?{y_parity:r.yParity,r:r.r,s:r.s}:void 0}))};if(s)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"EIP7702 not supported by Trezor");return a=yield r("EthereumSignTxEIP7702OneKey","EthereumTxRequestOneKey",T),$ce1f303d0aa8ec51$var$processTxRequest({typedCall:r,request:a.message,data:b,supportTrezor:s})}),$ce1f303d0aa8ec51$var$signTransaction$1=({typedCall:r,isEIP1559:i,isEIP7702:n,addressN:s,tx:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return n?$ce1f303d0aa8ec51$var$evmSignTxEip7702({typedCall:r,addressN:s,tx:a}):i?$ce1f303d0aa8ec51$var$evmSignTxEip1559({typedCall:r,addressN:s,tx:a}):$ce1f303d0aa8ec51$var$evmSignTx({typedCall:r,addressN:s,tx:a})}),$ce1f303d0aa8ec51$var$signTransaction=({typedCall:r,isEIP1559:i,isEIP7702:n,addressN:s,tx:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return n?$ce1f303d0aa8ec51$var$evmSignTxEip7702({typedCall:r,addressN:s,tx:a,supportTrezor:!0}):i?$ce1f303d0aa8ec51$var$evmSignTxEip1559({typedCall:r,addressN:s,tx:a,supportTrezor:!0}):$ce1f303d0aa8ec51$var$evmSignTx({typedCall:r,addressN:s,tx:a,supportTrezor:!0})});class $ce1f303d0aa8ec51$var$EVMSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.addressN=[],this.isEIP1559=!1,this.isEIP7702=!1}hasEIP7702Features(r){let i=r.authorizationList;return!!(i&&Array.isArray(i)&&i.length>0)}hasEIP1559Features(r){return!!(r.maxFeePerGas&&r.maxPriorityFeePerGas)}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload;this.addressN=$ce1f303d0aa8ec51$var$validatePath(r,3);let n=i;this.isEIP7702=this.hasEIP7702Features(n),this.isEIP1559=this.hasEIP1559Features(n)&&!this.isEIP7702;let s=[{name:"to",type:"hexString",required:!0},{name:"value",type:"hexString",required:!0},{name:"gasLimit",type:"hexString",required:!0},{name:"nonce",type:"hexString",required:!0},{name:"chainId",type:"number",required:!0},{name:"data",type:"hexString"}];this.isEIP7702?(s.push({name:"maxFeePerGas",type:"hexString",required:!0}),s.push({name:"maxPriorityFeePerGas",type:"hexString",required:!0}),s.push({name:"authorizationList",type:"array",required:!0})):this.isEIP1559?(s.push({name:"maxFeePerGas",type:"hexString",required:!0}),s.push({name:"maxPriorityFeePerGas",type:"hexString",required:!0})):(s.push({name:"gasPrice",type:"hexString",required:!0}),s.push({name:"txType",type:"number"})),$ce1f303d0aa8ec51$var$validateParams(n,s),this.formattedTx=$ce1f303d0aa8ec51$var$formatAnyHex(n)}getVersionRange(){return this.isEIP7702?{model_classic1s:{min:"3.13.0"},pro:{min:"4.16.0"}}:this.isEIP1559?{model_mini:{min:"2.1.11"}}:{model_mini:{min:"1.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{addressN:r,isEIP1559:i,isEIP7702:n,formattedTx:s}=this;if(null==s)throw $3FhS8.ERRORS.TypedError("Runtime","formattedTx is not set");return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$signTransaction({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,tx:s,isEIP1559:i,isEIP7702:n}):$ce1f303d0aa8ec51$var$signTransaction$1({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,tx:s,isEIP1559:i,isEIP7702:n})})}}const $ce1f303d0aa8ec51$var$signTypedHash$1=({typedCall:r,addressN:i,device:n,chainId:s,domainHash:a,messageHash:o})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d=$ce1f303d0aa8ec51$var$getDeviceType(n.features);if(d===$3FhS8.EDeviceType.Touch||d===$3FhS8.EDeviceType.Pro){let r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(n.features).join("."),i="4.2.0";if($ce1f303d0aa8ec51$var$semver__default.default.lt(r,i))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,`Device firmware version is too low, please update to ${i}`,{current:r,require:i})}return r("EthereumSignTypedHash","EthereumTypedDataSignature",{address_n:i,domain_separator_hash:null!=a?a:"",message_hash:o,chain_id:s})}),$ce1f303d0aa8ec51$var$signTypedHash=({typedCall:r,addressN:i,device:n,chainId:s,domainHash:a,messageHash:o})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let d=$ce1f303d0aa8ec51$var$getDeviceType(n.features);if(d===$3FhS8.EDeviceType.Touch||d===$3FhS8.EDeviceType.Pro){let r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(n.features).join("."),i="4.2.0";if($ce1f303d0aa8ec51$var$semver__default.default.lt(r,i))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,`Device firmware version is too low, please update to ${i}`,{current:r,require:i})}return r("EthereumSignTypedHashOneKey","EthereumTypedDataSignatureOneKey",{address_n:i,domain_separator_hash:null!=a?a:"",message_hash:o,chain_id:s})}),$ce1f303d0aa8ec51$var$signTypedData$1=({typedCall:r,addressN:i,data:n,metamaskV4Compat:s,chainId:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{primaryType:o}=n,d=yield r("EthereumSignTypedData",["EthereumTypedDataStructRequest","EthereumTypedDataValueRequest","EthereumTypedDataSignature","EthereumGnosisSafeTxRequest"],{address_n:i,primary_type:o,metamask_v4_compat:s,chain_id:a});return d}),$ce1f303d0aa8ec51$var$signTypedData=({typedCall:r,addressN:i,data:n,metamaskV4Compat:s,chainId:a})=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let{primaryType:o}=n;return r("EthereumSignTypedDataOneKey",["EthereumTypedDataStructRequestOneKey","EthereumTypedDataValueRequestOneKey","EthereumTypedDataSignatureOneKey","EthereumGnosisSafeTxRequest"],{address_n:i,primary_type:o,metamask_v4_compat:s,chain_id:a})}),$ce1f303d0aa8ec51$var$twosComplement=(r,i)=>{if(i<1||i>32)throw $3FhS8.ERRORS.TypedError("Runtime","Int byte size must be between 1 and 32 (8 and 256 bits)");let n=new $ce1f303d0aa8ec51$var$BigNumber__default.default(2).exponentiatedBy(8*i-1).negated(),s=n.negated().minus(1),a=new $ce1f303d0aa8ec51$var$BigNumber__default.default(r);if(a.isGreaterThan(s)||a.isLessThan(n))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Overflow when trying to convert number ${r.toString()} into ${i} bytes`);return a.isPositive()?a:a.minus(n).minus(n)},$ce1f303d0aa8ec51$var$intToHex=(r,i,n)=>{let s=new $ce1f303d0aa8ec51$var$BigNumber__default.default(r);if(n&&(s=$ce1f303d0aa8ec51$var$twosComplement(s,i)),s.isNegative())throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Cannot convert negative number to unsigned interger: ${r.toString()}`);let a=s.toString(16),o=2*i;if(a.length>o)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Overflow when trying to convert number ${r.toString()} into ${i} bytes`);return a.padStart(2*i,"0")},$ce1f303d0aa8ec51$var$paramTypeArray=new RegExp(/^(.*)\[([0-9]*)\]$/),$ce1f303d0aa8ec51$var$paramTypeBytes=new RegExp(/^bytes([0-9]*)$/),$ce1f303d0aa8ec51$var$paramTypeNumber=new RegExp(/^(u?int)([0-9]*)$/),$ce1f303d0aa8ec51$var$parseArrayType=r=>{let i=$ce1f303d0aa8ec51$var$paramTypeArray.exec(r);if(null===i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`typename ${r} could not be parsed as an EIP-712 array`);let[n,s,a]=i;return{entryTypeName:s,arraySize:parseInt(a,10)||null}},$ce1f303d0aa8ec51$var$encodeData=(r,i)=>{if($ce1f303d0aa8ec51$var$paramTypeBytes.test(r)||"address"===r)return $ce1f303d0aa8ec51$var$formatAnyHex(i);if("string"===r)return $ce1f303d0aa8ec51$require$Buffer.from(i,"utf-8").toString("hex");let n=$ce1f303d0aa8ec51$var$paramTypeNumber.exec(r);if(n){let[r,s,a]=n,o=Math.ceil(parseInt(a,10)/8);return $ce1f303d0aa8ec51$var$intToHex(i,o,"int"===s)}if("bool"===r)return i?"01":"00";throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Unsupported data type for direct field encoding: ${r}`)},$ce1f303d0aa8ec51$var$paramTypesMap={string:$5xch2.EthereumDataType.STRING,bool:$5xch2.EthereumDataType.BOOL,address:$5xch2.EthereumDataType.ADDRESS},$ce1f303d0aa8ec51$var$getFieldType=(r,i)=>{let n=$ce1f303d0aa8ec51$var$paramTypeArray.exec(r);if(n){let[r,s,a]=n,o=$ce1f303d0aa8ec51$var$getFieldType(s,i);return{data_type:$5xch2.EthereumDataType.ARRAY,size:parseInt(a,10)||void 0,entry_type:o}}let s=$ce1f303d0aa8ec51$var$paramTypeNumber.exec(r);if(s){let[r,i,n]=s;return{data_type:"uint"===i?$5xch2.EthereumDataType.UINT:$5xch2.EthereumDataType.INT,size:Math.floor(parseInt(n,10)/8)}}let a=$ce1f303d0aa8ec51$var$paramTypeBytes.exec(r);if(a){let[r,i]=a;return{data_type:$5xch2.EthereumDataType.BYTES,size:parseInt(i,10)||void 0}}let o=$ce1f303d0aa8ec51$var$paramTypesMap[r];if(o)return{data_type:o};if(r in i)return{data_type:$5xch2.EthereumDataType.STRUCT,size:i[r].length,struct_name:r};throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`No type definition specified: ${r}`)},$ce1f303d0aa8ec51$var$MINI_MAX_STRUCT_FIELDS=16,$ce1f303d0aa8ec51$var$MINI_MAX_ACCESS_PATH_DEPTH=6,$ce1f303d0aa8ec51$var$MINI_MAX_CUSTOM_DEP_STRUCTS=8,$ce1f303d0aa8ec51$var$MINI_MAX_NAME_LENGTH=63,$ce1f303d0aa8ec51$var$MINI_MAX_DYNAMIC_VALUE_BYTES=1536,$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_TYPE_FIELDS=24,$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_ELEMENTS=24;class $ce1f303d0aa8ec51$var$EVMSignTypedData extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"metamaskV4Compat",type:"boolean"},{name:"data",type:"object"},{name:"domainHash",type:"hexString"},{name:"messageHash",type:"hexString"},{name:"chainId",type:"number"}]);let{path:r,data:i,metamaskV4Compat:n,domainHash:s,messageHash:a,chainId:o}=this.payload,d=$ce1f303d0aa8ec51$var$validatePath(r,3);if(this.params={addressN:d,metamaskV4Compat:n,data:i,chainId:o},s){if(this.params.domainHash=$ce1f303d0aa8ec51$var$formatAnyHex(s),a)this.params.messageHash=$ce1f303d0aa8ec51$var$formatAnyHex(a);else if(i&&(!i.primaryType||"EIP712Domain"!==i.primaryType))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"message_hash should only be empty when data.primaryType=EIP712Domain")}}handleSignTypedData({typedCall:r,signData:i,response:n,supportTrezor:s}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{types:a,primaryType:o,domain:d,message:f}=i;for(;"EthereumTypedDataStructRequest"===n.type||"EthereumTypedDataStructRequestOneKey"===n.type;){let{name:i}=n.message,o=a[i];if(void 0===o)throw $3FhS8.ERRORS.TypedError("Runtime",`Type ${i} was not defined in types object`);let d={members:o.map(({name:r,type:i})=>({name:r,type:$ce1f303d0aa8ec51$var$getFieldType(i,a)}))};n=s?yield r("EthereumTypedDataStructAck",["EthereumTypedDataStructRequest","EthereumTypedDataValueRequest","EthereumTypedDataSignature"],d):yield r("EthereumTypedDataStructAckOneKey",["EthereumTypedDataStructRequestOneKey","EthereumTypedDataValueRequestOneKey","EthereumTypedDataSignatureOneKey"],d)}for(;"EthereumTypedDataValueRequest"===n.type||"EthereumTypedDataValueRequestOneKey"===n.type;){let i,l,u;let{member_path:c}=n.message,[p,...h]=c;switch(p){case 0:i=d,l="EIP712Domain";break;case 1:i=f,l=o;break;default:throw $3FhS8.ERRORS.TypedError("Runtime","Root index can only be 0 or 1")}for(let r of h)if(Array.isArray(i))l=$ce1f303d0aa8ec51$var$parseArrayType(l).entryTypeName,i=i[r];else if("object"==typeof i&&null!==i){let n=a[l][r];l=n.type,i=i[n.name]}u=Array.isArray(i)?$ce1f303d0aa8ec51$var$encodeData("uint16",i.length):$ce1f303d0aa8ec51$var$encodeData(l,i),n=s?yield r("EthereumTypedDataValueAck",["EthereumTypedDataValueRequest","EthereumTypedDataSignature"],{value:u}):yield r("EthereumTypedDataValueAckOneKey",["EthereumTypedDataValueRequestOneKey","EthereumTypedDataSignatureOneKey"],{value:u})}if("EthereumGnosisSafeTxRequest"===n.type){let{data:i}=this.params,s={to:i.message.to,value:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.value).toString(16)),data:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(i.message.data)),operation:parseInt(i.message.operation),safeTxGas:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.safeTxGas).toString(16)),baseGas:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.baseGas).toString(16)),gasPrice:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.gasPrice).toString(16)),gasToken:i.message.gasToken,refundReceiver:i.message.refundReceiver,nonce:$ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i.message.nonce).toString(16)),chain_id:$ce1f303d0aa8ec51$var$parseChainId(i.domain.chainId),verifyingContract:i.domain.verifyingContract};n=yield r("EthereumGnosisSafeTxAck",["EthereumTypedDataSignature","EthereumTypedDataSignatureOneKey"],s)}if("EthereumTypedDataSignature"!==n.type&&"EthereumTypedDataSignatureOneKey"!==n.type)throw $3FhS8.ERRORS.TypedError("Runtime","Unexpected response type");let{address:l,signature:u}=n.message;return{address:l,signature:u}})}signTypedData(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let{addressN:i,data:n,metamaskV4Compat:s,chainId:a}=this.params,o=!1;return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?(o=!0,r=yield $ce1f303d0aa8ec51$var$signTypedData$1({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:i,data:n,metamaskV4Compat:s,chainId:a})):(o=!1,r=yield $ce1f303d0aa8ec51$var$signTypedData({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:i,data:n,metamaskV4Compat:s,chainId:a})),this.handleSignTypedData({typedCall:this.device.commands.typedCall.bind(this.device.commands),signData:n,response:r,supportTrezor:o})})}signTypedHash({typedCall:r,addressN:i,chainId:n,domainHash:s,messageHash:a}){if(!s)throw $3FhS8.ERRORS.TypedError("Runtime","domainHash is required");return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$signTypedHash$1({typedCall:r,addressN:i,domainHash:s,messageHash:a,chainId:n,device:this.device}):$ce1f303d0aa8ec51$var$signTypedHash({typedCall:r,addressN:i,domainHash:s,messageHash:a,chainId:n,device:this.device})}getVersionRange(){return{model_mini:{min:"2.1.9"}}}hasBiggerData(r){let i=$7U5sq.get(r.message,"data",void 0);if(!i)return!1;let n=1024,s=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join("."),a=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),o="4.4.0",d=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic1s.includes(a)||$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(a)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(s,o);d&&(n=1536);let f=i.startsWith("0x")?2:0;return(i.length-f)/2>n}hasNestedArrays(r){if(!r)return!1;if(Array.isArray(r)){for(let i of r)if(Array.isArray(i)||"object"==typeof i&&null!==i&&this.hasNestedArrays(i))return!0}else if("object"==typeof r&&null!==r){for(let i in r)if(this.hasNestedArrays(r[i]))return!0}return!1}hasClassicFamilyTypedDataFormatViolations(r){if(!(null==r?void 0:r.types)||!r.primaryType)return!1;let i=r=>/\[[0-9]*\]$/.test(r),n=r=>/^bytes(\d*)$/.test(r),s=i=>i in r.types;if(Object.values(r.types).some(r=>r.length>$ce1f303d0aa8ec51$var$MINI_MAX_STRUCT_FIELDS)||Object.entries(r.types).some(([r,i])=>r.length>$ce1f303d0aa8ec51$var$MINI_MAX_NAME_LENGTH||i.some(r=>r.name.length>$ce1f303d0aa8ec51$var$MINI_MAX_NAME_LENGTH)))return!0;let a=Object.values(r.types).reduce((r,n)=>r+n.filter(r=>i(r.type)).length,0);if(a>$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_TYPE_FIELDS)return!0;let o=(n,a)=>{if(i(n)){let{entryTypeName:r}=$ce1f303d0aa8ec51$var$parseArrayType(n);return 1+o(r,a)}if(!s(n))return 1;if(a.has(n))return $ce1f303d0aa8ec51$var$MINI_MAX_ACCESS_PATH_DEPTH+1;a.add(n);let d=r.types[n].reduce((r,{type:i})=>{let n=1+o(i,a);return Math.max(r,n)},1);return a.delete(n),d},d=1+Math.max(o("EIP712Domain",new Set),o(r.primaryType,new Set));if(d>$ce1f303d0aa8ec51$var$MINI_MAX_ACCESS_PATH_DEPTH)return!0;let f=new Set,l=(n,a)=>{if(i(n)){let{entryTypeName:r}=$ce1f303d0aa8ec51$var$parseArrayType(n);l(r,a);return}!s(n)||a.has(n)||(a.add(n),"EIP712Domain"!==n&&n!==r.primaryType&&f.add(n),r.types[n].forEach(({type:r})=>l(r,a)),a.delete(n))};if(l("EIP712Domain",new Set),l(r.primaryType,new Set),f.size>$ce1f303d0aa8ec51$var$MINI_MAX_CUSTOM_DEP_STRUCTS)return!0;let u=(r,i)=>{if("string"===r)return"string"==typeof i?$ce1f303d0aa8ec51$require$Buffer.byteLength(i,"utf8"):0;if(n(r)&&"string"==typeof i){let r=i.startsWith("0x")?2:0;return(i.length-r)/2}return 0},c=(n,a)=>{if(null==a)return!1;if(i(n)){if(!Array.isArray(a))return!1;let{entryTypeName:r}=$ce1f303d0aa8ec51$var$parseArrayType(n),o=s(r),d=!o&&!i(r);return a.length>$ce1f303d0aa8ec51$var$MINI_MAX_ARRAY_ELEMENTS&&(!!d||!!this.params.metamaskV4Compat&&!!o)||a.some(i=>c(r,i))}return u(n,a)>$ce1f303d0aa8ec51$var$MINI_MAX_DYNAMIC_VALUE_BYTES||!!("object"==typeof a&&s(n))&&r.types[n].some(({name:r,type:i})=>c(i,a[r]))};return c("EIP712Domain",r.domain)||c(r.primaryType,r.message)}supportSignTyped(){let r=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(r)){let r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join("."),i="2.2.0";if($ce1f303d0aa8ec51$var$semver__default.default.lt(r,i))return!1}return!0}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!this.device.features)throw $3FhS8.ERRORS.TypedError("Device_InitializeFailed","Device initialization failed. Please try again.");let{addressN:r,chainId:i}=this.params,n=$ce1f303d0aa8ec51$var$existCapability(this.device.features,$5xch2.Enum_Capability.Capability_EthereumTypedData),s=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features);if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(s)&&(!n||this.hasClassicFamilyTypedDataFormatViolations(this.params.data))){let n;$ce1f303d0aa8ec51$var$validateParams(this.params,[{name:"domainHash",type:"hexString",required:!0},{name:"messageHash",type:"hexString",required:!0}]);let{domainHash:s,messageHash:a}=this.params;return Promise.resolve((n=this.supportSignTyped()?yield this.signTypedHash({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,domainHash:s,messageHash:a,chainId:i}):yield this.device.commands.typedCall("EthereumSignMessageEIP712","EthereumMessageSignature",{address_n:r,domain_hash:null!=s?s:"",message_hash:null!=a?a:""})).message)}if(this.hasNestedArrays(this.params.data)||this.hasBiggerData(this.params.data)){$ce1f303d0aa8ec51$var$validateParams(this.params,[{name:"domainHash",type:"hexString",required:!0},{name:"messageHash",type:"hexString",required:!0}]);let{domainHash:n,messageHash:s}=this.params;if(!n)throw $3FhS8.ERRORS.TypedError("Runtime","domainHash is required");let a=yield this.signTypedHash({typedCall:this.device.commands.typedCall.bind(this.device.commands),addressN:r,domainHash:n,messageHash:s,chainId:i});return Promise.resolve(a.message)}return this.signTypedData()})}}function $ce1f303d0aa8ec51$var$verifyMessageLegacyV1({typedCall:r,params:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=yield r("EthereumVerifyMessage","Success",{signature:i.signature,message:i.message,address:i.address,chain_id:i.chain_id});return Promise.resolve(n.message)})}function $ce1f303d0aa8ec51$var$verifyMessage({typedCall:r,params:i}){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=yield r("EthereumVerifyMessageOneKey","Success",Object.assign({},i));return Promise.resolve(n.message)})}class $ce1f303d0aa8ec51$var$EVMSignMessage$1 extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"address",type:"string",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"signature",type:"hexString",required:!0},{name:"chainId",type:"number"}]);let{address:r,messageHex:i,signature:n}=$ce1f303d0aa8ec51$var$formatAnyHex(this.payload);this.params={address:r,message:i,signature:n,chain_id:this.payload.chainId}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){return"v1"===$ce1f303d0aa8ec51$var$TransportManager.getMessageVersion()?$ce1f303d0aa8ec51$var$verifyMessageLegacyV1({typedCall:this.device.commands.typedCall.bind(this.device.commands),params:this.params}):$ce1f303d0aa8ec51$var$verifyMessage({typedCall:this.device.commands.typedCall.bind(this.device.commands),params:this.params})})}}class $ce1f303d0aa8ec51$var$StarcoinGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"network",type:"number"},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,network:r.network||$ce1f303d0aa8ec51$var$MAINNET,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var n;return{address_n:i,network:r.version>>24&255,timestamp:r.timeStamp,fee:r.fee,deadline:null!==(n=r.deadline)&&void 0!==n?n:0,signer:i?void 0:r.signer}},this.transferMessage=r=>{let i=r.mosaics?r.mosaics.map(r=>({namespace:r.mosaicId.namespaceId,mosaic:r.mosaicId.name,quantity:r.quantity})):void 0;return{recipient:r.recipient,amount:r.amount,payload:r.message?r.message.payload:void 0,public_key:r.message&&2===r.message.type?r.message.publicKey:void 0,mosaics:i}},this.importanceTransferMessage=r=>({mode:this.NEM_IMPORTANCE_TRANSFER_MODES[r.importanceTransfer.mode],public_key:r.importanceTransfer.publicKey}),this.aggregateModificationMessage=r=>{let i=r.modifications?r.modifications.map(r=>({type:this.NEM_AGGREGATE_MODIFICATION_TYPES[r.modificationType],public_key:r.cosignatoryAccount})):void 0;return{modifications:i,relative_change:r.minCosignatories.relativeChange}},this.provisionNamespaceMessage=r=>{var i,n,s;return{namespace:null!==(i=r.newPart)&&void 0!==i?i:"",parent:r.parent||void 0,sink:null!==(n=r.rentalFeeSink)&&void 0!==n?n:"",fee:null!==(s=r.rentalFee)&&void 0!==s?s:0}},this.mosaicCreationMessage=r=>{var i,n;let{levy:s}=r.mosaicDefinition,a={namespace:r.mosaicDefinition.id.namespaceId,mosaic:r.mosaicDefinition.id.name,levy:s&&s.type?this.NEM_MOSAIC_LEVY_TYPES[s.type]:void 0,fee:s&&s.fee,levy_address:s&&s.recipient,levy_namespace:s&&s.mosaicId&&s.mosaicId.namespaceId,levy_mosaic:s&&s.mosaicId&&s.mosaicId.name,description:r.mosaicDefinition.description},{properties:o}=r.mosaicDefinition;return Array.isArray(o)&&o.forEach(r=>{let{name:i,value:n}=r;switch(i){case"divisibility":a.divisibility=parseInt(n);break;case"initialSupply":a.supply=parseInt(n);break;case"supplyMutable":a.mutable_supply="true"===n;break;case"transferable":a.transferable="true"===n}}),{definition:a,sink:null!==(i=r.creationFeeSink)&&void 0!==i?i:"",fee:null!==(n=r.creationFee)&&void 0!==n?n:0}},this.supplyChangeMessage=r=>{var i;return{namespace:r.mosaicId.namespaceId,mosaic:r.mosaicId.name,type:this.NEM_SUPPLY_CHANGE_TYPES[r.supplyType],delta:null!==(i=r.delta)&&void 0!==i?i:0}},this.parseTx=(r,i)=>{let n=r,s={transaction:this.getCommon(r,i),transfer:void 0,importance_transfer:void 0,aggregate_modification:void 0,provision_namespace:void 0,mosaic_creation:void 0,supply_change:void 0};switch((r.type===$ce1f303d0aa8ec51$var$NEM_COSIGNING||r.type===$ce1f303d0aa8ec51$var$NEM_MULTISIG||r.type===$ce1f303d0aa8ec51$var$NEM_MULTISIG_SIGNATURE)&&(s.cosigning=r.type===$ce1f303d0aa8ec51$var$NEM_COSIGNING||r.type===$ce1f303d0aa8ec51$var$NEM_MULTISIG_SIGNATURE,n=r.otherTrans,s.multisig=this.getCommon(n)),n.type){case $ce1f303d0aa8ec51$var$NEM_TRANSFER:s.transfer=this.transferMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_IMPORTANCE_TRANSFER:s.importance_transfer=this.importanceTransferMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_AGGREGATE_MODIFICATION:s.aggregate_modification=this.aggregateModificationMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_PROVISION_NAMESPACE:s.provision_namespace=this.provisionNamespaceMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_MOSAIC_CREATION:s.mosaic_creation=this.mosaicCreationMessage(n);break;case $ce1f303d0aa8ec51$var$NEM_SUPPLY_CHANGE:s.supply_change=this.supplyChangeMessage(n);break;default:throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Unknown transaction type")}return s}}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params=this.parseTx(i,n)}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("NEMSignTx","NEMSignedTx",Object.assign({},this.params));return Promise.resolve(r)})}}class $ce1f303d0aa8ec51$var$SolGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{let i=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"extraInfo",type:"object"}]),this.params.push(Object.assign({address_n:i,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(r.rawTx)},r.extraInfo?{extra_info:r.extraInfo}:void 0))})}getVersionRange(){return this.existsVersionedTx()?{model_mini:{min:"3.1.0"},model_touch:{min:"4.3.0"}}:{classic:{min:"2.1.9"},mini:{min:"2.1.9"}}}isVersionedTx(r){if(0===r.length)return!1;try{let i=r.startsWith("0x")?r.slice(2):r,n=parseInt(i[0],16).toString(2);return"1"===n[0]}catch(r){return!1}}existsVersionedTx(){for(let r=0;r{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i,n;switch(r.type){case"createAccount":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"destination",type:"string",required:!0},{name:"startingBalance",type:"bigNumber",required:!0}]),{type:"StellarCreateAccountOp",source_account:r.source,new_account:r.destination,starting_balance:r.startingBalance};case"payment":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"destination",type:"string",required:!0},{name:"amount",type:"bigNumber",required:!0},{name:"asset",required:!0}]),{type:"StellarPaymentOp",source_account:r.source,destination_account:r.destination,asset:r.asset,amount:r.amount};case"pathPayment":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"destAmount",type:"bigNumber",required:!0}]),{type:"StellarPathPaymentOp",source_account:r.source,send_asset:r.sendAsset,send_max:r.sendMax,destination_account:r.destination,destination_asset:r.destAsset,destination_amount:r.destAmount,paths:r.path};case"createPassiveOffer":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"amount",type:"bigNumber",required:!0}]),{type:"StellarCreatePassiveOfferOp",source_account:r.source,buying_asset:r.buying,selling_asset:r.selling,amount:r.amount,price_n:r.price.n,price_d:r.price.d};case"manageOffer":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"amount",type:"bigNumber",required:!0}]),{type:"StellarManageOfferOp",source_account:r.source,buying_asset:r.buying,selling_asset:r.selling,amount:r.amount,offer_id:r.offerId,price_n:r.price.n,price_d:r.price.d};case"setOptions":{let i=r.signer?{signer_type:r.signer.type,signer_key:r.signer.key,signer_weight:r.signer.weight}:void 0;return Object.assign({type:"StellarSetOptionsOp",source_account:r.source,clear_flags:r.clearFlags,set_flags:r.setFlags,master_weight:r.masterWeight,low_threshold:r.lowThreshold,medium_threshold:r.medThreshold,high_threshold:r.highThreshold,home_domain:r.homeDomain,inflation_destination_account:r.inflationDest},i)}case"changeTrust":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"limit",type:"bigNumber"}]),{type:"StellarChangeTrustOp",source_account:r.source,asset:r.line,limit:r.limit};case"allowTrust":return{type:"StellarAllowTrustOp",source_account:r.source,trusted_account:r.trustor,asset_type:r.assetType,asset_code:r.assetCode,is_authorized:r.authorize?1:0};case"accountMerge":return{type:"StellarAccountMergeOp",source_account:r.source,destination_account:r.destination};case"manageData":return{type:"StellarManageDataOp",source_account:r.source,key:r.name,value:r.value};case"bumpSequence":return{type:"StellarBumpSequenceOp",source_account:r.source,bump_to:r.bumpTo};case"invokeHostFunctionOneKey":{let s=null!==(i=r.callArgsXDRHex)&&void 0!==i?i:"",a=null!==(n=r.sorobanAuthXDRHex)&&void 0!==n?n:"";if(!this.sorobanState)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"sorobanState not initialized");return this.sorobanState.callArgs=s,this.sorobanState.callArgsSent=Math.min(s.length,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS),this.sorobanState.auth=a,this.sorobanState.authSent=Math.min(a.length,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS),{type:"StellarInvokeHostFunctionOp",source_account:r.source,contract_address:r.contract,function_name:r.functionName,call_args_xdr_size:s.length/2,call_args_xdr_initial_chunk:s.slice(0,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS),soroban_auth_xdr_size:a.length/2,soroban_auth_xdr_initial_chunk:a.slice(0,$ce1f303d0aa8ec51$var$SOROBAN_CHUNK_HEX_CHARS)}}case"pathPaymentStrictReceive":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"sendMax",type:"bigNumber",required:!0}]),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"destAmount",type:"bigNumber",required:!0}]),{type:"StellarPathPaymentStrictReceiveOp",source_account:r.source,send_asset:r.sendAsset,send_max:r.sendMax,destination_account:r.destination,destination_asset:r.destAsset,destination_amount:r.destAmount,paths:r.path};case"pathPaymentStrictSend":return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"sendAmount",type:"bigNumber",required:!0}]),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"destMin",type:"bigNumber",required:!0}]),{type:"StellarPathPaymentStrictSendOp",source_account:r.source,send_asset:r.sendAsset,send_amount:r.sendAmount,destination_account:r.destination,destination_asset:r.destAsset,destination_min:r.destMin,paths:r.path};default:return{}}},this.processTxRequest=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){switch(r.type){case"StellarSignedTx":return r.message;case"StellarSorobanDataRequest":{let s;if(!this.sorobanState)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"sorobanState not initialized");let a=r.message.type,o=2*r.message.data_length;switch(a){case"CALL":{let{callArgs:r,callArgsSent:i}=this.sorobanState;s=r.slice(i,i+o),this.sorobanState.callArgsSent+=s.length;break}case"AUTH":{let{auth:r,authSent:i}=this.sorobanState;s=r.slice(i,i+o),this.sorobanState.authSent+=s.length;break}case"EXT":{let{ext:r,extSent:i}=this.sorobanState;s=r.slice(i,i+o),this.sorobanState.extSent+=s.length;break}default:throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`unknown soroban request type: ${a}`)}let d=yield this.device.commands.typedCall("StellarSorobanDataAck",["StellarSorobanDataRequest","StellarSignedTx"],{data_xdr:s});return this.processTxRequest(d,i,n)}case"StellarTxOpRequest":{let r=i[n],{type:s}=r,a=$ce1f303d0aa8ec51$var$__rest(r,["type"]),o=yield this.device.commands.typedCall(s,["StellarTxOpRequest","StellarSorobanDataRequest","StellarSignedTx"],a);return this.processTxRequest(o,i,n+1)}default:throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`unexpected response type: ${r.type}`)}})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"networkPassphrase",type:"string",required:!0},{name:"transaction",type:"object",required:!0}]);let{transaction:r,networkPassphrase:i}=this.payload;if(!r.timebounds)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"timebounds is required");let n=$ce1f303d0aa8ec51$var$validatePath(this.payload.path,3),s=r.operations.some(r=>"invokeHostFunctionOneKey"===r.type);if(s){if(1!==r.operations.length)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Soroban transactions must contain exactly one operation");if(!r.sorobanDataXDR)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"sorobanDataXDR is required for Soroban transactions");this.sorobanState={callArgs:"",callArgsSent:0,auth:"",authSent:0,ext:r.sorobanDataXDR,extSent:0}}this.params=Object.assign({address_n:n,network_passphrase:i,source_account:r.source,fee:r.fee,sequence_number:r.sequence,num_operations:r.operations.length,memo_type:$5xch2.StellarMemoType.NONE,timebounds_start:r.timebounds.minTime,timebounds_end:r.timebounds.maxTime},this.sorobanState?{soroban_data_size:this.sorobanState.ext.length/2}:{}),r.memo&&(this.params.memo_type=r.memo.type,this.params.memo_text=r.memo.text,this.params.memo_id=r.memo.id,this.params.memo_hash=r.memo.hash),r.operations.forEach(r=>{let i=this.parseOperation(r);i&&this.operations.push(i)})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("StellarSignTx","StellarTxOpRequest",Object.assign({},this.params));return this.processTxRequest(r,this.operations,0)})}}class $ce1f303d0aa8ec51$var$TronGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.5.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;ithis.params.message_type===$5xch2.TronMessageType.V2,()=>this.getMessageV2VersionRange(),{strictCheckDeviceSupport:!0});let r=yield this.device.commands.typedCall("TronSignMessage","TronMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$TronSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{parseTx(r,i){var n;let s={address_n:i,data:r.data,timestamp:r.timestamp,fee_limit:r.feeLimit,ref_block_bytes:r.refBlockBytes,ref_block_hash:r.refBlockHash,expiration:r.expiration,contract:{}};return r.contract&&(r.contract.transferContract&&(s.contract={transfer_contract:{to_address:r.contract.transferContract.toAddress,amount:r.contract.transferContract.amount}}),r.contract.triggerSmartContract&&(s.contract={trigger_smart_contract:{contract_address:r.contract.triggerSmartContract.contractAddress,call_value:r.contract.triggerSmartContract.callValue,data:r.contract.triggerSmartContract.data,call_token_value:r.contract.triggerSmartContract.callTokenValue,asset_id:r.contract.triggerSmartContract.assetId}}),r.contract.freezeBalanceV2Contract&&(s.contract={freeze_balance_v2_contract:{frozen_balance:r.contract.freezeBalanceV2Contract.frozenBalance,resource:r.contract.freezeBalanceV2Contract.resource}}),r.contract.unfreezeBalanceV2Contract&&(s.contract={unfreeze_balance_v2_contract:{unfreeze_balance:r.contract.unfreezeBalanceV2Contract.unfreezeBalance,resource:r.contract.unfreezeBalanceV2Contract.resource}}),r.contract.delegateResourceContract&&(s.contract={delegate_resource_contract:{resource:r.contract.delegateResourceContract.resource,balance:r.contract.delegateResourceContract.balance,receiver_address:r.contract.delegateResourceContract.receiverAddress,lock:r.contract.delegateResourceContract.lock,lock_period:r.contract.delegateResourceContract.lockPeriod}}),r.contract.unDelegateResourceContract&&(s.contract={undelegate_resource_contract:{resource:r.contract.unDelegateResourceContract.resource,balance:r.contract.unDelegateResourceContract.balance,receiver_address:r.contract.unDelegateResourceContract.receiverAddress}}),r.contract.withdrawExpireUnfreezeContract&&(s.contract={withdraw_expire_unfreeze_contract:{}}),r.contract.withdrawBalanceContract&&(s.contract={withdraw_balance_contract:{owner_address:r.contract.withdrawBalanceContract.ownerAddress}}),r.contract.voteWitnessContract&&(s.contract={vote_witness_contract:{votes:null===(n=r.contract.voteWitnessContract.votes)||void 0===n?void 0:n.map(r=>({vote_address:r.voteAddress,vote_count:r.voteCount})),support:r.contract.voteWitnessContract.support}}),r.contract.cancelAllUnfreezeV2Contract&&(s.contract={cancel_all_unfreeze_v2_contract:{}})),s}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"transaction",type:"object",required:!0}]);let{path:r,transaction:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);$ce1f303d0aa8ec51$var$validateParams(i,[{name:"refBlockBytes",type:"hexString",required:!0},{name:"refBlockHash",type:"hexString",required:!0},{name:"expiration",type:"number",required:!0},{name:"timestamp",type:"number",required:!0},{name:"contract",type:"object",required:!0}]),this.params=this.parseTx($ce1f303d0aa8ec51$var$formatAnyHex(i),n)}getVersionRange(){return{model_mini:{min:"2.5.0"}}}getFixDataTypeVersionRange(){return{pro:{min:"4.13.0"},touch:{min:"4.12.0"},model_classic1s:{min:"3.12.0"}}}checkFixDataTypeSupportVoteWitnessError(){let{data:r}=this.payload,{cancel_all_unfreeze_v2_contract:i,vote_witness_contract:n}=this.params.contract;this.checkFeatureVersionLimit(()=>!$7U5sq.isEmpty(r)||!!i||!!n,()=>this.getFixDataTypeVersionRange())}supportDelegateResourceLockPeriodVersionRange(){return{pro:{min:"4.15.0"},touch:{min:"4.12.0"},model_classic1s:{min:"3.13.0"}}}checkSupportDelegateContractLockPeriod(){let{delegate_resource_contract:r}=this.params.contract;this.checkFeatureVersionLimit(()=>!!r&&void 0!==r.lock_period&&null!==r.lock_period,()=>this.supportDelegateResourceLockPeriodVersionRange())}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFixDataTypeSupportVoteWitnessError(),this.checkSupportDelegateContractLockPeriod();let r=yield this.device.commands.typedCall("TronSignTx","TronSignedTx",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$NearGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.5.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i!!r.showOnOneKey)),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"bundle",type:"array"}]),this.params=[],n.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}publicKeyToAddress(r){let i=$2be1c3a1d39d0a84$exports.sha3_256.create();return i.update($ce1f303d0aa8ec51$var$hexToBytes(r)),i.update("\x00"),`0x${$bb5e1fcd97588e49$exports.bytesToHex(i.digest())}`}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){var r,i,n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let s=$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features),a=[];if(s){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",637);for(let s=0;s$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n;let s=yield this.device.commands.typedCall("AptosGetAddress","AptosAddress",r),a={path:$ce1f303d0aa8ec51$var$serializedPath(r.address_n),address:null!==(n=null===(i=s.message.address)||void 0===i?void 0:i.toLowerCase())&&void 0!==n?n:""};return this.shouldConfirm&&this.postPreviousAddressMessage(a),a})));return $ce1f303d0aa8ec51$var$validateResult(a,["address"],{expectedLength:this.params.length}),this.hasBundle?a:a[0]})}}class $ce1f303d0aa8ec51$var$AptosGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",637),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r,publicKey:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$AptosSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"transactionType",type:"number",required:!1}]);let{path:r,rawTx:i,transactionType:n}=this.payload,s=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:s,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i),tx_type:n}}getVersionRange(){return{model_mini:{min:"2.6.0"}}}getWithDataVersionRange(){return{pro:{min:"4.14.0"},model_classic1s:{min:"3.12.0"},classic:{min:"3.10.0"}}}checkWithDataError(){let{transactionType:r}=this.payload;this.checkFeatureVersionLimit(()=>1===r,()=>this.getWithDataVersionRange())}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkWithDataError();let r=yield this.device.commands.typedCall("AptosSignTx","AptosSignedTx",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$AptosSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"payload",type:"object",required:!0}]);let{path:r,payload:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);$ce1f303d0aa8ec51$var$validateParams(i,[{name:"address",type:"string"},{name:"chainId",type:"string"},{name:"application",type:"string"},{name:"nonce",type:"string",required:!0},{name:"message",type:"string",required:!0}]),this.params={address_n:n,payload:{address:i.address,chain_id:i.chainId,application:i.application,nonce:i.nonce,message:i.message}}}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r="APTOS\n";this.params.payload.address&&(r+=`address: ${this.params.payload.address} +`),this.params.payload.application&&(r+=`application: ${this.params.payload.application} +`),this.params.payload.chain_id&&(r+=`chainId: ${this.params.payload.chain_id} +`),r+=`message: ${this.params.payload.message} +nonce: ${this.params.payload.nonce}`;let i=yield this.device.commands.typedCall("AptosSignMessage","AptosMessageSignature",Object.assign({},this.params)),{address:n,signature:s}=i.message;return Promise.resolve({path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n),address:n,signature:s,fullMessage:r})})}}class $ce1f303d0aa8ec51$var$AptosSignInMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"payload",type:"string",required:!0}]);let{path:r,payload:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,siwa_payload:i}}getVersionRange(){return{pro:{min:"4.16.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("AptosSignSIWAMessage","AptosMessageSignature",Object.assign({},this.params)),{address:i,signature:n}=r.message;return Promise.resolve({path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n),address:i,signature:n})})}}class $ce1f303d0aa8ec51$var$AlgoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"hrp",type:"string"},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{hrp:a}=r;this.params.push({address_n:n,hrp:a,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"4.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i,n;let s=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"curve",type:"string"},{name:"showOnOneKey",type:"boolean"}]);let a=null===(i=r.showOnOneKey)||void 0===i||i,o=null!==(n=r.curve)&&void 0!==n?n:"secp256k1";if("secp256k1"!==o)throw Error("Curve name is not supported");this.params.push({address_n:s,curve:o,show_display:a})})}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"4.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,this.params[0].curve,118),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r,publicKey:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$CosmosSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0}]);let{path:r,rawTx:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i)}}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"4.0.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.device.commands.typedCall("CosmosSignTx","CosmosSignedTx",Object.assign({},this.params)),{signature:i}=r.message;return{path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n),signature:i}}catch(i){let{message:r}=i;if(r.includes("Failure_DataError,Json parse failed")||r.includes("Failure_DataError,Invalid message"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CosmosInvalidJsonMessage,r);throw i}})}}class $ce1f303d0aa8ec51$var$XrpGetAddress$1 extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1,this.shouldConfirm=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};this.shouldConfirm=!!this.hasBundle&&this.payload.bundle.some(r=>!!r.showOnOneKey),$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"2.9.0"}}}run(){var r,i,n,s;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let a=[];for(let o=0;o!!r.showOnOneKey)),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"bundle",type:"array"}]),this.params=[],n.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features),s=[];if(n){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",784);for(let n=0;n$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var i,n;let s=yield this.device.commands.typedCall("SuiGetAddress","SuiAddress",r),a={path:$ce1f303d0aa8ec51$var$serializedPath(r.address_n),address:null!==(n=null===(i=s.message.address)||void 0===i?void 0:i.toLowerCase())&&void 0!==n?n:""};return this.shouldConfirm&&this.postPreviousAddressMessage(a),a})));return $ce1f303d0aa8ec51$var$validateResult(s,["address"],{expectedLength:this.params.length}),this.hasBundle?s:s[0]})}}class $ce1f303d0aa8ec51$var$SuiGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",784),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),publicKey:r,pub:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$SuiSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0}]);let{path:r,messageHex:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i)}}getVersionRange(){return{model_mini:{min:"3.4.0"},model_touch:{min:"4.6.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("SuiSignMessage","SuiMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$SuiSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.chunkByteSize=1024,this.processTxRequest=(r,i,n,s=0)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if("SuiSignedTx"===i.type)return i.message;let{data_length:a}=i.message;if(!a)return i.message;let o=n.subarray(s,s+a),d=s+o.length,f={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(o)},l=yield r("SuiTxAck",["SuiSignedTx","SuiTxRequest"],Object.assign({},f));return this.processTxRequest(r,l,n,d)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0}]);let{path:r,rawTx:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i)}}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}supportChunkTransfer(){let r=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),i=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features).join(".");if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_mini.includes(r)){if($ce1f303d0aa8ec51$var$semver__default.default.valid(i))return $ce1f303d0aa8ec51$var$semver__default.default.gte(i,"3.7.0")}else if($ce1f303d0aa8ec51$var$DeviceModelToTypes.model_touch.includes(r)&&$ce1f303d0aa8ec51$var$semver__default.default.valid(i))return $ce1f303d0aa8ec51$var$semver__default.default.gte(i,"4.8.0");return!1}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=this.device.getCommands().typedCall.bind(this.device.getCommands()),n=0;this.supportChunkTransfer()&&(n=this.chunkByteSize,r=$ce1f303d0aa8ec51$require$Buffer.from(this.params.raw_tx,"hex"),this.params={address_n:this.params.address_n,raw_tx:"",data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(r.subarray(0,this.chunkByteSize)),data_length:r.length});let s=yield i("SuiSignTx",["SuiSignedTx","SuiTxRequest"],Object.assign({},this.params));return this.processTxRequest(i,s,r,n)})}}const $ce1f303d0aa8ec51$var$validateAddressParameters=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"addressType",type:"number",required:!0},{name:"stakingKeyHash",type:"string"},{name:"paymentScriptHash",type:"string"},{name:"stakingScriptHash",type:"string"}]),r.path&&$ce1f303d0aa8ec51$var$validatePath(r.path),r.stakingPath&&$ce1f303d0aa8ec51$var$validatePath(r.stakingPath),r.certificatePointer&&$ce1f303d0aa8ec51$var$validateParams(r.certificatePointer,[{name:"blockIndex",type:"number",required:!0},{name:"txIndex",type:"number",required:!0},{name:"certificateIndex",type:"number",required:!0}])},$ce1f303d0aa8ec51$var$addressParametersToProto=r=>{let i,n=[];r.path&&(n=$ce1f303d0aa8ec51$var$validatePath(r.path,3));let s=[];return r.stakingPath&&(s=$ce1f303d0aa8ec51$var$validatePath(r.stakingPath,3)),r.certificatePointer&&(i={block_index:r.certificatePointer.blockIndex,tx_index:r.certificatePointer.txIndex,certificate_index:r.certificatePointer.certificateIndex}),{address_type:r.addressType,address_n:n,address_n_staking:s,staking_key_hash:r.stakingKeyHash,certificate_pointer:i,script_payment_hash:r.paymentScriptHash,script_staking_hash:r.stakingScriptHash}},$ce1f303d0aa8ec51$var$addressParametersFromProto=r=>{let i;return r.certificate_pointer&&(i={blockIndex:r.certificate_pointer.block_index,txIndex:r.certificate_pointer.tx_index,certificateIndex:r.certificate_pointer.certificate_index}),{addressType:r.address_type,path:r.address_n,stakingPath:r.address_n_staking,stakingKeyHash:r.staking_key_hash,certificatePointer:i}},$ce1f303d0aa8ec51$var$modifyAddressParametersForBackwardsCompatibility=r=>{if(r.address_type===$5xch2.Messages.CardanoAddressType.REWARD){let{address_n:i,address_n_staking:n}=r;if(i.length>0&&n.length>0)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Only stakingPath is allowed for CardanoAddressType.REWARD");return i.length>0&&(n=i,i=[]),Object.assign(Object.assign({},r),{address_n:i,address_n_staking:n})}return r};class $ce1f303d0aa8ec51$var$CardanoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{init(){var r,i,n;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle),this.isCheck=this.hasBundle?!!(null===(i=this.payload)||void 0===i?void 0:i.bundle.every(r=>!!r.isCheck)):!!(null===(n=this.payload)||void 0===n?void 0:n.isCheck);let s=this.hasBundle?this.payload:{bundle:[this.payload]};this.params=s.bundle.map(r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"addressParameters",type:"object",required:!0},{name:"networkId",type:"number",required:!0},{name:"protocolMagic",type:"number",required:!0},{name:"derivationType",type:"number"},{name:"address",type:"string"},{name:"showOnOneKey",type:"boolean"}]),$ce1f303d0aa8ec51$var$validateAddressParameters(r.addressParameters),{address_parameters:$ce1f303d0aa8ec51$var$addressParametersToProto(r.addressParameters),address:r.address,protocol_magic:r.protocolMagic,network_id:r.networkId,derivation_type:void 0!==r.derivationType?r.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,show_display:"boolean"!=typeof r.showOnOneKey||!!r.showOnOneKey}))}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.1.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i of this.params){let n,s;let{address_parameters:a,protocol_magic:o,network_id:d,derivation_type:f,show_display:l}=i,u=yield this.device.commands.typedCall("CardanoGetAddress","CardanoAddress",{address_parameters:a,protocol_magic:o,network_id:d,derivation_type:f,show_display:l});if(a.address_type===$5xch2.Messages.CardanoAddressType.BASE&&!this.isCheck){let r=yield this.device.commands.typedCall("CardanoGetPublicKey","CardanoPublicKey",{address_n:a.address_n.slice(0,3),derivation_type:f,show_display:!1});n=r.message.xpub;let i=yield this.device.commands.typedCall("CardanoGetAddress","CardanoAddress",{address_parameters:{address_type:$5xch2.Messages.CardanoAddressType.REWARD,address_n:[],address_n_staking:a.address_n_staking},protocol_magic:o,network_id:d,derivation_type:f,show_display:!1});s=i.message.address}let c=$ce1f303d0aa8ec51$var$serializedPath(i.address_parameters.address_n);r.push({addressParameters:$ce1f303d0aa8ec51$var$addressParametersFromProto(i.address_parameters),protocolMagic:i.protocol_magic,networkId:i.network_id,serializedPath:c,serializedStakingPath:$ce1f303d0aa8ec51$var$serializedPath(i.address_parameters.address_n_staking),address:u.message.address,xpub:n,stakeAddress:s}),this.postPreviousAddressMessage({path:c,address:u.message.address})}return $ce1f303d0aa8ec51$var$validateResult(r,["serializedPath","serializedStakingPath","address"],{expectedLength:this.params.length}),this.hasBundle?r:r[0]})}}class $ce1f303d0aa8ec51$var$CardanoGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=i.bundle.map(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"derivationType",type:"number"},{name:"showOnOneKey",type:"boolean"}]);let i=$ce1f303d0aa8ec51$var$validatePath(r.path,3);return{address_n:i,derivation_type:void 0!==r.derivationType?r.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,show_display:"boolean"==typeof r.showOnOneKey&&r.showOnOneKey}})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.1.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[],i=this.device.getCommands();for(let n=0;n($ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"string",required:!0},{name:"prev_index",type:"number",required:!0}]),{input:{prev_hash:r.prev_hash,prev_index:r.prev_index},path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0}),$ce1f303d0aa8ec51$var$transformCollateralInput=r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"string",required:!0},{name:"prev_index",type:"number",required:!0}]),{collateralInput:{prev_hash:r.prev_hash,prev_index:r.prev_index},path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0}),$ce1f303d0aa8ec51$var$transformReferenceInput=r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"prev_hash",type:"string",required:!0},{name:"prev_index",type:"number",required:!0}]),{prev_hash:r.prev_hash,prev_index:r.prev_index}),$ce1f303d0aa8ec51$var$validateTokens=r=>{r.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"assetNameBytes",type:"string",required:!0},{name:"amount",type:"uint"},{name:"mintAmount",type:"uint",allowNegative:!0}])})},$ce1f303d0aa8ec51$var$validateTokenBundle=r=>{r.forEach(r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"policyId",type:"string",required:!0},{name:"tokenAmounts",type:"array",required:!0}]),$ce1f303d0aa8ec51$var$validateTokens(r.tokenAmounts)})},$ce1f303d0aa8ec51$var$tokenBundleToProto=r=>($ce1f303d0aa8ec51$var$validateTokenBundle(r),r.map(r=>({policyId:r.policyId,tokens:$ce1f303d0aa8ec51$var$tokenAmountsToProto(r.tokenAmounts)}))),$ce1f303d0aa8ec51$var$tokenAmountsToProto=r=>r.map(r=>({asset_name_bytes:r.assetNameBytes,amount:r.amount,mint_amount:r.mintAmount})),$ce1f303d0aa8ec51$var$hexStringByteLength=r=>r.length/2,$ce1f303d0aa8ec51$var$sendChunkedHexString=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let a=0;for(;a{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"address",type:"string"},{name:"amount",type:"uint",required:!0},{name:"tokenBundle",type:"array",allowEmpty:!0},{name:"datumHash",type:"string"},{name:"format",type:"number"},{name:"inlineDatum",type:"string"},{name:"referenceScript",type:"string"}]);let i={output:{amount:r.amount,asset_groups_count:0,datum_hash:r.datumHash,format:r.format,inline_datum_size:r.inlineDatum?$ce1f303d0aa8ec51$var$hexStringByteLength(r.inlineDatum):void 0,reference_script_size:r.referenceScript?$ce1f303d0aa8ec51$var$hexStringByteLength(r.referenceScript):void 0},inlineDatum:r.inlineDatum,referenceScript:r.referenceScript};return r.addressParameters?($ce1f303d0aa8ec51$var$validateAddressParameters(r.addressParameters),i.output.address_parameters=$ce1f303d0aa8ec51$var$addressParametersToProto(r.addressParameters)):i.output.address=r.address,r.tokenBundle?(i.tokenBundle=$ce1f303d0aa8ec51$var$tokenBundleToProto(r.tokenBundle),i.output.asset_groups_count=i.tokenBundle.length):i.output.asset_groups_count=0,i},$ce1f303d0aa8ec51$var$sendOutput=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n=2048,{output:s,tokenBundle:a,inlineDatum:o,referenceScript:d}=i;if(yield r("CardanoTxOutput","CardanoTxItemAck",s),a)for(let i of a)for(let n of(yield r("CardanoAssetGroup","CardanoTxItemAck",{policy_id:i.policyId,tokens_count:i.tokens.length}),i.tokens))yield r("CardanoToken","CardanoTxItemAck",n);o&&(yield $ce1f303d0aa8ec51$var$sendChunkedHexString(r,o,n,"CardanoTxInlineDatumChunk")),d&&(yield $ce1f303d0aa8ec51$var$sendChunkedHexString(r,d,n,"CardanoTxReferenceScriptChunk"))}),$ce1f303d0aa8ec51$var$ipv4AddressToHex=r=>$ce1f303d0aa8ec51$require$Buffer.from(r.split(".").map(r=>parseInt(r,10))).toString("hex"),$ce1f303d0aa8ec51$var$ipv6AddressToHex=r=>r.split(":").join(""),$ce1f303d0aa8ec51$var$validatePoolMargin=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"numerator",type:"string",required:!0},{name:"denominator",type:"string",required:!0}])},$ce1f303d0aa8ec51$var$validatePoolMetadata=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"url",type:"string",required:!0},{name:"hash",type:"string",required:!0}])},$ce1f303d0aa8ec51$var$validatePoolRelay=r=>{if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"type",type:"number",required:!0}]),r.type===$5xch2.Messages.CardanoPoolRelayType.SINGLE_HOST_IP){let i=[{name:"port",type:"number",required:!0}];if(r.ipv4Address&&i.push({name:"ipv4Address",type:"string",required:!1}),r.ipv6Address&&i.push({name:"ipv6Address",type:"string",required:!1}),$ce1f303d0aa8ec51$var$validateParams(r,i),!r.ipv4Address&&!r.ipv6Address)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Either ipv4Address or ipv6Address must be supplied")}else r.type===$5xch2.Messages.CardanoPoolRelayType.SINGLE_HOST_NAME?$ce1f303d0aa8ec51$var$validateParams(r,[{name:"hostName",type:"string",required:!0},{name:"port",type:"number",required:!0}]):r.type===$5xch2.Messages.CardanoPoolRelayType.MULTIPLE_HOST_NAME&&$ce1f303d0aa8ec51$var$validateParams(r,[{name:"hostName",type:"string",required:!0}])},$ce1f303d0aa8ec51$var$validatePoolOwners=r=>{r.forEach(r=>{if(r.stakingKeyHash&&$ce1f303d0aa8ec51$var$validateParams(r,[{name:"stakingKeyHash",type:"string",required:!r.stakingKeyPath}]),r.stakingKeyPath&&$ce1f303d0aa8ec51$var$validatePath(r.stakingKeyPath,5),!r.stakingKeyHash&&!r.stakingKeyPath)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Either stakingKeyHash or stakingKeyPath must be supplied")});let i=r.filter(r=>!!r.stakingKeyPath).length;if(1!==i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"Exactly one pool owner must be given as a path")},$ce1f303d0aa8ec51$var$validatePoolParameters=r=>{$ce1f303d0aa8ec51$var$validateParams(r,[{name:"poolId",type:"string",required:!0},{name:"vrfKeyHash",type:"string",required:!0},{name:"pledge",type:"string",required:!0},{name:"cost",type:"string",required:!0},{name:"margin",type:"object",required:!0},{name:"rewardAccount",type:"string",required:!0},{name:"owners",type:"array",required:!0},{name:"relays",type:"array",required:!0,allowEmpty:!0},{name:"metadata",type:"object"}]),$ce1f303d0aa8ec51$var$validatePoolMargin(r.margin),$ce1f303d0aa8ec51$var$validatePoolOwners(r.owners),r.relays.forEach($ce1f303d0aa8ec51$var$validatePoolRelay),r.metadata&&$ce1f303d0aa8ec51$var$validatePoolMetadata(r.metadata)},$ce1f303d0aa8ec51$var$transformPoolParameters=r=>r?($ce1f303d0aa8ec51$var$validatePoolParameters(r),{poolParameters:{pool_id:r.poolId,vrf_key_hash:r.vrfKeyHash,pledge:r.pledge,cost:r.cost,margin_numerator:r.margin.numerator,margin_denominator:r.margin.denominator,reward_account:r.rewardAccount,metadata:r.metadata,owners_count:r.owners.length,relays_count:r.relays.length},poolOwners:r.owners.map(r=>({staking_key_hash:r.stakingKeyHash,staking_key_path:r.stakingKeyPath?$ce1f303d0aa8ec51$var$validatePath(r.stakingKeyPath,5):void 0})),poolRelays:r.relays.map(r=>({type:r.type,ipv4_address:r.ipv4Address?$ce1f303d0aa8ec51$var$ipv4AddressToHex(r.ipv4Address):void 0,ipv6_address:r.ipv6Address?$ce1f303d0aa8ec51$var$ipv6AddressToHex(r.ipv6Address):void 0,host_name:r.hostName,port:r.port}))}):{poolParameters:void 0,poolOwners:[],poolRelays:[]},$ce1f303d0aa8ec51$var$transformDRep=r=>{if(r){if($ce1f303d0aa8ec51$var$validateParams(r,[{name:"type",type:"number",required:!0},{name:"keyHash",type:"string"},{name:"scriptHash",type:"string"}]),r.type===$5xch2.Messages.CardanoDRepType.KEY_HASH&&!r.keyHash)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"key_hash must be supplied for key_hash type");if(r.type===$5xch2.Messages.CardanoDRepType.SCRIPT_HASH&&!r.scriptHash)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,"script_hash must be supplied for script_hash type");return{type:r.type,key_hash:r.keyHash,script_hash:r.scriptHash}}},$ce1f303d0aa8ec51$var$transformCertificate=r=>{let i=[{name:"type",type:"number",required:!0}];r.type!==$5xch2.Messages.CardanoCertificateType.STAKE_POOL_REGISTRATION&&(i.push({name:"scriptHash",type:"string"}),i.push({name:"keyHash",type:"string"})),r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DELEGATION&&i.push({name:"pool",type:"string",required:!0}),r.type===$5xch2.Messages.CardanoCertificateType.STAKE_POOL_REGISTRATION&&i.push({name:"poolParameters",type:"object",required:!0}),(r.type===$5xch2.Messages.CardanoCertificateType.STAKE_REGISTRATION_CONWAY||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY)&&i.push({name:"deposit",required:!0}),r.type===$5xch2.Messages.CardanoCertificateType.VOTE_DELEGATION&&i.push({name:"dRep",type:"object",required:!0}),$ce1f303d0aa8ec51$var$validateParams(r,i);let{poolParameters:n,poolOwners:s,poolRelays:a}=$ce1f303d0aa8ec51$var$transformPoolParameters(r.poolParameters),o=$ce1f303d0aa8ec51$var$transformDRep(r.dRep);return{certificate:{type:r.type,path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0,script_hash:r.scriptHash,key_hash:r.keyHash,pool:r.pool,pool_parameters:n,deposit:r.deposit,drep:o},poolOwners:s,poolRelays:a}},$ce1f303d0aa8ec51$var$MAX_DELEGATION_COUNT=32,$ce1f303d0aa8ec51$var$transformDelegation=r=>(r.votingPublicKey&&(console.warn("Please use votePublicKey instead of votingPublicKey."),r.votePublicKey=r.votingPublicKey),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"votingPublicKey",type:"string",required:!0},{name:"weight",type:"uint",required:!0}]),{vote_public_key:r.votePublicKey,weight:r.weight}),$ce1f303d0aa8ec51$var$transformCvoteRegistrationParameters=r=>{var i;r.votingPublicKey&&(console.warn("Please use votePublicKey instead of votingPublicKey."),r.votePublicKey=r.votingPublicKey),r.rewardAddressParameters&&(console.warn("Please use paymentAddressParameters instead of rewardAddressParameters."),r.paymentAddressParameters=r.rewardAddressParameters),$ce1f303d0aa8ec51$var$validateParams(r,[{name:"votePublicKey",type:"string"},{name:"stakingPath",required:!0},{name:"nonce",type:"uint",required:!0},{name:"format",type:"number"},{name:"delegations",type:"array",allowEmpty:!0},{name:"votingPurpose",type:"uint"},{name:"paymentAddress",type:"string"}]);let{paymentAddressParameters:n}=r;$ce1f303d0aa8ec51$var$validateAddressParameters(n);let{delegations:s}=r;if(s&&s.length>$ce1f303d0aa8ec51$var$MAX_DELEGATION_COUNT)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodInvalidParameter,`At most ${$ce1f303d0aa8ec51$var$MAX_DELEGATION_COUNT} delegations are allowed in a governance registration`);return{vote_public_key:r.votePublicKey,staking_path:$ce1f303d0aa8ec51$var$validatePath(r.stakingPath,3),payment_address_parameters:n?$ce1f303d0aa8ec51$var$addressParametersToProto(n):void 0,nonce:r.nonce,format:r.format,delegations:null!==(i=null==s?void 0:s.map($ce1f303d0aa8ec51$var$transformDelegation))&&void 0!==i?i:[],voting_purpose:r.votingPurpose,payment_address:r.paymentAddress}},$ce1f303d0aa8ec51$var$transformAuxiliaryData=r=>{let i;return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"hash",type:"string"}]),r.cVoteRegistrationParameters&&(i=$ce1f303d0aa8ec51$var$transformCvoteRegistrationParameters(r.cVoteRegistrationParameters)),{hash:r.hash,cvote_registration_parameters:i}},$ce1f303d0aa8ec51$var$modifyAuxiliaryDataForBackwardsCompatibility=r=>{let{cvote_registration_parameters:i}=r;return(null==i?void 0:i.payment_address_parameters)?(i.payment_address_parameters=$ce1f303d0aa8ec51$var$modifyAddressParametersForBackwardsCompatibility(i.payment_address_parameters),Object.assign(Object.assign({},r),{cvote_registration_parameters:i})):r},$ce1f303d0aa8ec51$var$gatherWitnessPaths=(r,i,n,s,a,o,d)=>{let f=new Map;function l(r){let i=JSON.stringify(r);f.set(i,r)}return d!==$5xch2.Messages.CardanoTxSigningMode.MULTISIG_TRANSACTION&&(r.forEach(({path:r})=>{r&&l(r)}),i.forEach(({certificate:r,poolOwners:i})=>{r.path&&(r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DELEGATION||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DEREGISTRATION)&&l(r.path),i.forEach(r=>{r.staking_key_path&&l(r.staking_key_path)})}),n.forEach(({path:r})=>{r&&l(r)})),d===$5xch2.Messages.CardanoTxSigningMode.PLUTUS_TRANSACTION&&s.forEach(({path:r})=>{r&&l(r)}),a.forEach(({key_path:r})=>{r&&l(r)}),o.forEach(r=>{l(r)}),Array.from(f.values())};class $ce1f303d0aa8ec51$var$CardanoSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasConway=()=>{var r,i;let n=this.payload;if(!0===n.tagCborSets||(null===(r=n.auxiliaryData)||void 0===r?void 0:r.cVoteRegistrationParameters)!=null)return!0;for(let r of null!==(i=n.certificates)&&void 0!==i?i:[])if(null!=r.dRep||null!=r.deposit||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_REGISTRATION_CONWAY||r.type===$5xch2.Messages.CardanoCertificateType.STAKE_DEREGISTRATION_CONWAY||r.type===$5xch2.Messages.CardanoCertificateType.VOTE_DELEGATION)return!0;return!1},this.supportConwayVersionRange=()=>({pro:{min:"4.12.0"},touch:{min:"4.10.0"},classic:{min:"3.10.0"}}),this.checkSupportConway=()=>{var r;if(!this.hasConway())return;let i=null===(r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features))||void 0===r?void 0:r.join("."),n=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.device.features,r=>this.supportConwayVersionRange()[r]);if(n&&(!$ce1f303d0aa8ec51$var$semver__default.default.valid(i)||$ce1f303d0aa8ec51$var$semver__default.default.lt(i,n.min)))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNeedUpgradeFirmware,`Device firmware version is too low, please update to ${n.min}`,{current:i,require:n.min})}}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.1.0"}}}init(){var r;let i;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let{payload:n}=this;n.auxiliaryData&&n.auxiliaryData.governanceRegistrationParameters&&(console.warn("Please use cVoteRegistrationParameters instead of governanceRegistrationParameters."),n.auxiliaryData.cVoteRegistrationParameters=n.auxiliaryData.governanceRegistrationParameters),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"signingMode",type:"number",required:!0},{name:"inputs",type:"array",required:!0},{name:"outputs",type:"array",required:!0,allowEmpty:!0},{name:"fee",type:"uint",required:!0},{name:"ttl",type:"uint"},{name:"certificates",type:"array",allowEmpty:!0},{name:"withdrawals",type:"array",allowEmpty:!0},{name:"mint",type:"array",allowEmpty:!0},{name:"validityIntervalStart",type:"uint"},{name:"scriptDataHash",type:"string"},{name:"collateralInputs",type:"array",allowEmpty:!0},{name:"requiredSigners",type:"array",allowEmpty:!0},{name:"totalCollateral",type:"uint"},{name:"referenceInputs",type:"array",allowEmpty:!0},{name:"protocolMagic",type:"number",required:!0},{name:"networkId",type:"number",required:!0},{name:"additionalWitnessRequests",type:"array",allowEmpty:!0},{name:"derivationType",type:"number"},{name:"includeNetworkId",type:"boolean"},{name:"chunkify",type:"boolean"},{name:"tagCborSets",type:"boolean"}]);let s=n.inputs.map($ce1f303d0aa8ec51$var$transformInput),a=n.outputs.map($ce1f303d0aa8ec51$var$transformOutput),o=[];n.certificates&&(o=n.certificates.map($ce1f303d0aa8ec51$var$transformCertificate));let d=[];n.withdrawals&&(d=n.withdrawals.map(r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"amount",type:"uint",required:!0},{name:"scriptHash",type:"string"},{name:"keyHash",type:"string"}]),{path:r.path?$ce1f303d0aa8ec51$var$validatePath(r.path,5):void 0,amount:r.amount,script_hash:r.scriptHash,key_hash:r.keyHash})));let f=[];n.mint&&(f=$ce1f303d0aa8ec51$var$tokenBundleToProto(n.mint)),n.auxiliaryData&&(i=$ce1f303d0aa8ec51$var$transformAuxiliaryData(n.auxiliaryData));let l=[];n.additionalWitnessRequests&&(l=n.additionalWitnessRequests.map(r=>$ce1f303d0aa8ec51$var$validatePath(r,3)));let u=[];n.collateralInputs&&(u=n.collateralInputs.map($ce1f303d0aa8ec51$var$transformCollateralInput));let c=[];n.requiredSigners&&(c=n.requiredSigners.map(r=>($ce1f303d0aa8ec51$var$validateParams(r,[{name:"keyHash",type:"string"}]),{key_path:r.keyPath?$ce1f303d0aa8ec51$var$validatePath(r.keyPath,3):void 0,key_hash:r.keyHash})));let p=n.collateralReturn?$ce1f303d0aa8ec51$var$transformOutput(n.collateralReturn):void 0,h=[];n.referenceInputs&&(h=n.referenceInputs.map($ce1f303d0aa8ec51$var$transformReferenceInput)),this.params={signingMode:n.signingMode,inputsWithPath:s,outputsWithData:a,fee:n.fee,ttl:n.ttl,certificatesWithPoolOwnersAndRelays:o,withdrawals:d,mint:f,auxiliaryData:i,validityIntervalStart:n.validityIntervalStart,scriptDataHash:n.scriptDataHash,collateralInputsWithPath:u,requiredSigners:c,collateralReturnWithData:p,totalCollateral:n.totalCollateral,referenceInputs:h,protocolMagic:n.protocolMagic,networkId:n.networkId,witnessPaths:$ce1f303d0aa8ec51$var$gatherWitnessPaths(s,o,d,u,c,l,n.signingMode),additionalWitnessRequests:l,derivationType:void 0!==n.derivationType?n.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,includeNetworkId:n.includeNetworkId,chunkify:n.chunkify,tagCborSets:n.tagCborSets}}signTx(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=this.device.getCommands().typedCall.bind(this.device.getCommands()),n=!!this.params.auxiliaryData,s={signing_mode:this.params.signingMode,protocol_magic:this.params.protocolMagic,network_id:this.params.networkId,inputs_count:this.params.inputsWithPath.length,outputs_count:this.params.outputsWithData.length,fee:this.params.fee,ttl:this.params.ttl,certificates_count:this.params.certificatesWithPoolOwnersAndRelays.length,withdrawals_count:this.params.withdrawals.length,has_auxiliary_data:n,validity_interval_start:this.params.validityIntervalStart,witness_requests_count:this.params.witnessPaths.length,minting_asset_groups_count:this.params.mint.length,script_data_hash:this.params.scriptDataHash,collateral_inputs_count:this.params.collateralInputsWithPath.length,required_signers_count:this.params.requiredSigners.length,has_collateral_return:null!=this.params.collateralReturnWithData,total_collateral:this.params.totalCollateral,reference_inputs_count:this.params.referenceInputs.length,derivation_type:this.params.derivationType,include_network_id:this.params.includeNetworkId,chunkify:this.params.chunkify,tag_cbor_sets:this.params.tagCborSets};for(let{input:r}of(yield i("CardanoSignTxInit","CardanoTxItemAck",s),this.params.inputsWithPath))yield i("CardanoTxInput","CardanoTxItemAck",r);for(let r of this.params.outputsWithData)yield $ce1f303d0aa8ec51$var$sendOutput(i,r);for(let{certificate:r,poolOwners:n,poolRelays:s}of this.params.certificatesWithPoolOwnersAndRelays){for(let s of(yield i("CardanoTxCertificate","CardanoTxItemAck",r),n))yield i("CardanoPoolOwner","CardanoTxItemAck",s);for(let r of s)yield i("CardanoPoolRelayParameters","CardanoTxItemAck",r)}for(let r of this.params.withdrawals)yield i("CardanoTxWithdrawal","CardanoTxItemAck",r);if(this.params.auxiliaryData){let{catalyst_registration_parameters:n}=this.params.auxiliaryData;n&&(this.params.auxiliaryData=$ce1f303d0aa8ec51$var$modifyAuxiliaryDataForBackwardsCompatibility(this.params.auxiliaryData));let{message:s}=yield i("CardanoTxAuxiliaryData","CardanoTxAuxiliaryDataSupplement",this.params.auxiliaryData),a=$5xch2.Messages.CardanoTxAuxiliaryDataSupplementType[s.type];a!==$5xch2.Messages.CardanoTxAuxiliaryDataSupplementType.NONE&&(r={type:a,auxiliaryDataHash:s.auxiliary_data_hash,cVoteRegistrationSignature:s.cvote_registration_signature,catalystSignature:s.cvote_registration_signature,governanceSignature:s.cvote_registration_signature}),yield i("CardanoTxHostAck","CardanoTxItemAck")}if(this.params.mint.length>0)for(let r of(yield i("CardanoTxMint","CardanoTxItemAck",{asset_groups_count:this.params.mint.length}),this.params.mint))for(let n of(yield i("CardanoAssetGroup","CardanoTxItemAck",{policy_id:r.policyId,tokens_count:r.tokens.length}),r.tokens))yield i("CardanoToken","CardanoTxItemAck",n);for(let{collateralInput:r}of this.params.collateralInputsWithPath)yield i("CardanoTxCollateralInput","CardanoTxItemAck",r);for(let r of this.params.requiredSigners)yield i("CardanoTxRequiredSigner","CardanoTxItemAck",r);for(let r of(this.params.collateralReturnWithData&&(yield $ce1f303d0aa8ec51$var$sendOutput(i,this.params.collateralReturnWithData)),this.params.referenceInputs))yield i("CardanoTxReferenceInput","CardanoTxItemAck",r);let a=[];for(let r of this.params.witnessPaths){let{message:n}=yield i("CardanoTxWitnessRequest","CardanoTxWitnessResponse",{path:r});a.push({type:$5xch2.Messages.CardanoTxWitnessType[n.type],pubKey:n.pub_key,signature:n.signature,chainCode:n.chain_code})}let{message:o}=yield i("CardanoTxHostAck","CardanoTxBodyHash");return yield i("CardanoTxHostAck","CardanoSignTxFinished"),{hash:o.tx_hash,witnesses:a,auxiliaryDataSupplement:r}})}run(){return this.checkSupportConway(),this.signTx()}}class $ce1f303d0aa8ec51$var$CardanoSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE];let{payload:r}=this;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",type:"string",required:!0},{name:"message",type:"string",required:!0},{name:"derivationType",type:"number"},{name:"networkId",type:"number",required:!0},{name:"addressType",type:"number"},{name:"protocolMagic",type:"number"}]);let i=$ce1f303d0aa8ec51$var$validatePath(r.path,3);this.params={address_n:i,message:r.message,derivation_type:void 0!==r.derivationType?r.derivationType:$5xch2.Messages.CardanoDerivationType.ICARUS,network_id:r.networkId,address_type:r.addressType,protocol_magic:r.protocolMagic}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}getAddressTypeVersionRange(){return{pro:{min:"4.9.3"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFeatureVersionLimit(()=>null!==this.params.address_type&&void 0!==this.params.address_type,()=>this.getAddressTypeVersionRange());let r=yield this.device.commands.typedCall("CardanoSignMessage","CardanoMessageSignature",this.params);return r.message})}}class $ce1f303d0aa8ec51$var$FilecoinGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"isTestnet",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,testnet:r.isTestnet})})}getVersionRange(){return{model_mini:{min:"2.10.0"},model_touch:{min:"3.5.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"prefix",required:!0},{name:"network",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i,{prefix:a,network:o}=r;this.params.push({address_n:n,prefix:a,network:$ce1f303d0aa8ec51$var$parseNetwork(o),show_display:s})})}getVersionRange(){let r=this.params.map(r=>r.network);return $ce1f303d0aa8ec51$var$getPolkadotVersionRangeWithBundle(r)}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"prefix",type:"string"},{name:"scheme",type:"string"},{name:"useTweak",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,prefix:r.prefix,scheme:r.scheme,use_tweak:r.useTweak})})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}getUseTweakVersionRange(){return{pro:{min:"4.14.0"},model_classic1s:{min:"3.12.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFeatureVersionLimit(()=>this.params.some(r=>!1===r.use_tweak),()=>this.getUseTweakVersionRange(),{strictCheckDeviceSupport:!0});let r=[];for(let i=0;ir+i.length,0),this}toBuffer(){return this.concat()}concat(){return $awmEs.Buffer.concat(this.bufs,this.bufLen)}write(r){if(!$ce1f303d0aa8ec51$var$isBuffer(r))throw Error("BufferWriter.write: Invalid type");return this.bufs.push(r),this.bufLen+=r.length,this}writeReverse(r){if(!$ce1f303d0aa8ec51$var$isBuffer(r))throw Error("BufferWriter.write: Invalid type");return this.bufs.push(r.reverse()),this.bufLen+=r.length,this}writeVarBytes(r){if(!$ce1f303d0aa8ec51$var$isBuffer(r))throw Error("BufferWriter.write: Invalid type");return this.writeUInt64LE(new $ce1f303d0aa8ec51$var$BigNumber__default.default(r.length)),this.write(r),this}writeUInt8(r){let i=$awmEs.Buffer.alloc(1);return i.writeUInt8(r,0),this.write(i),this}writeUInt16BE(r){let i=$awmEs.Buffer.alloc(2);return i.writeUInt16BE(r,0),this.write(i),this}writeUInt16LE(r){let i=$awmEs.Buffer.alloc(2);return i.writeUInt16LE(r,0),this.write(i),this}writeUInt32BE(r){let i=$awmEs.Buffer.alloc(4);return i.writeUInt32BE(r,0),this.write(i),this}writeInt32LE(r){let i=$awmEs.Buffer.alloc(4);return i.writeInt32LE(r,0),this.write(i),this}writeUInt32LE(r){let i=$awmEs.Buffer.alloc(4);return i.writeUInt32LE(r,0),this.write(i),this}writeUInt64BEBN(r){let i=$ce1f303d0aa8ec51$var$bigNumberToBuffer(r,{size:8});return this.write(i),this}writeUInt64LE(r){let i=$ce1f303d0aa8ec51$var$bigNumberToBuffer(r,{size:8});return this.writeReverse(i),this}writeVarintNum(r){let i=$ce1f303d0aa8ec51$var$BufferWriter.varintBufNum(r);return this.write(i),this}writeVarintBN(r){let i=$ce1f303d0aa8ec51$var$BufferWriter.varintBufBN(r);return this.write(i),this}static varintBufNum(r){let i;return r<253?(i=$awmEs.Buffer.alloc(1)).writeUInt8(r,0):r<65536?((i=$awmEs.Buffer.alloc(3)).writeUInt8(253,0),i.writeUInt16LE(r,1)):r<4294967296?((i=$awmEs.Buffer.alloc(5)).writeUInt8(254,0),i.writeUInt32LE(r,1)):((i=$awmEs.Buffer.alloc(9)).writeUInt8(255,0),i.writeInt32LE(-1&r,1),i.writeUInt32LE(Math.floor(r/4294967296),5)),i}static varintBufBN(r){let i;let n=r.toNumber();if(n<253)(i=$awmEs.Buffer.alloc(1)).writeUInt8(n,0);else if(n<65536)(i=$awmEs.Buffer.alloc(3)).writeUInt8(253,0),i.writeUInt16LE(n,1);else if(n<4294967296)(i=$awmEs.Buffer.alloc(5)).writeUInt8(254,0),i.writeUInt32LE(n,1);else{let n=new $ce1f303d0aa8ec51$var$BufferWriter;n.writeUInt8(255),n.writeUInt64LE(r),i=n.concat()}return i}}const $ce1f303d0aa8ec51$var$TransactionSigningHashKey=$ce1f303d0aa8ec51$require$Buffer.from("TransactionSigningHash");class $ce1f303d0aa8ec51$var$HashWriter{constructor(){this.bw=new $ce1f303d0aa8ec51$var$BufferWriter,this.blake2b=$692be64e687bb0ca$exports.blake2b.create({dkLen:32,key:$ce1f303d0aa8ec51$var$TransactionSigningHashKey}),this.hash={update:r=>{this.bw.write(r),this.blake2b.update(r)},digest:()=>$ce1f303d0aa8ec51$require$Buffer.from(this.blake2b.digest())}}writeUInt8(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt8(r),this.hash.update(i.toBuffer())}writeUInt16LE(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt16LE(r),this.hash.update(i.toBuffer())}writeUInt32LE(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt32LE(r),this.hash.update(i.toBuffer())}writeUInt64LE(r){let i=new $ce1f303d0aa8ec51$var$BufferWriter;i.writeUInt64LE(new $ce1f303d0aa8ec51$var$BigNumber__default.default(r)),this.hash.update(i.toBuffer())}writeVarBytes(r){this.writeUInt64LE(r.length),this.hash.update(r)}writeHash(r){this.hash.update(r)}finalize(){return this.hash.digest()}toBuffer(){return this.bw.toBuffer()}}function $ce1f303d0aa8ec51$var$zeroHash(){return $ce1f303d0aa8ec51$require$Buffer.alloc(32)}function $ce1f303d0aa8ec51$var$zeroSubnetworkID(){return $ce1f303d0aa8ec51$require$Buffer.alloc(20)}function $ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(r){return(r&$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_ANYONECANPAY)===$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_ANYONECANPAY}function $ce1f303d0aa8ec51$var$isSighashSingle(r){return(31&r)===$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_SINGLE}function $ce1f303d0aa8ec51$var$isSighashNone(r){return(31&r)===$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_NONE}function $ce1f303d0aa8ec51$var$hashOutpoint(r,i){r.writeHash($ce1f303d0aa8ec51$require$Buffer.from(i.prevTxId,"hex")),r.writeUInt32LE(i.outputIndex)}function $ce1f303d0aa8ec51$var$getPreviousOutputsHash(r,i){if($ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(i))return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return r.inputs.forEach(r=>$ce1f303d0aa8ec51$var$hashOutpoint(n,r)),n.finalize()}function $ce1f303d0aa8ec51$var$getSequencesHash(r,i){if($ce1f303d0aa8ec51$var$isSighashSingle(i)||$ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(i)||$ce1f303d0aa8ec51$var$isSighashNone(i))return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return r.inputs.forEach(r=>n.writeUInt64LE(r.sequenceNumber)),n.finalize()}function $ce1f303d0aa8ec51$var$getSigOpCountsHash(r,i){if($ce1f303d0aa8ec51$var$isSighashAnyoneCanPay(i))return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return r.inputs.forEach(r=>n.writeUInt8(r.sigOpCount)),n.finalize()}function $ce1f303d0aa8ec51$var$hashTxOut(r,i){r.writeUInt64LE(i.satoshis),r.writeUInt16LE(0),r.writeVarBytes($ce1f303d0aa8ec51$require$Buffer.from(i.script,"hex"))}function $ce1f303d0aa8ec51$var$getOutputsHash(r,i,n){if($ce1f303d0aa8ec51$var$isSighashNone(n))return $ce1f303d0aa8ec51$var$zeroHash();if($ce1f303d0aa8ec51$var$isSighashSingle(n)){if(i>=r.outputs.length)return $ce1f303d0aa8ec51$var$zeroHash();let n=new $ce1f303d0aa8ec51$var$HashWriter;return n.finalize()}let s=new $ce1f303d0aa8ec51$var$HashWriter;return r.outputs.forEach(r=>$ce1f303d0aa8ec51$var$hashTxOut(s,r)),s.finalize()}function $ce1f303d0aa8ec51$var$serialize(r,i){var n;let s=new $ce1f303d0aa8ec51$var$HashWriter;s.writeUInt16LE(r.version),s.writeHash($ce1f303d0aa8ec51$var$getPreviousOutputsHash(r,r.sigHashType)),s.writeHash($ce1f303d0aa8ec51$var$getSequencesHash(r,r.sigHashType)),s.writeHash($ce1f303d0aa8ec51$var$getSigOpCountsHash(r,r.sigHashType));let a=r.inputs[i];return $ce1f303d0aa8ec51$var$hashOutpoint(s,a),s.writeUInt16LE(0),s.writeVarBytes($ce1f303d0aa8ec51$require$Buffer.from(a.output.script,"hex")),s.writeUInt64LE(a.output.satoshis),s.writeUInt64LE(a.sequenceNumber),s.writeUInt8(null!==(n=r.sigOpCount)&&void 0!==n?n:1),s.writeHash($ce1f303d0aa8ec51$var$getOutputsHash(r,i,r.sigHashType)),s.writeUInt64LE(r.lockTime),s.writeHash($ce1f303d0aa8ec51$var$zeroSubnetworkID()),s.writeUInt64LE(0),s.writeHash($ce1f303d0aa8ec51$var$zeroHash()),s.writeUInt8(r.sigHashType),{hash:s.finalize(),raw:s.toBuffer()}}class $ce1f303d0aa8ec51$var$KaspaSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r,i,n,s,a;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE];let o=this.payload;$ce1f303d0aa8ec51$var$validateParams(o,[{name:"version",type:"number"},{name:"sigHashType",type:"number",required:!0},{name:"inputs",type:"array",required:!0},{name:"outputs",type:"array",required:!0},{name:"lockTime",required:!0},{name:"sigOpCount",type:"number"},{name:"subNetworkID",type:"string"},{name:"useTweak",type:"boolean"}]);let d=o.inputs.map(r=>{var i;$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",type:"string",required:!0},{name:"prevTxId",type:"string",required:!0},{name:"outputIndex",type:"number",required:!0},{name:"sequenceNumber",required:!0}]);let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);return Object.assign(Object.assign({},r),{path:n,sigOpCount:null!==(i=r.sigOpCount)&&void 0!==i?i:1})}),f=o.outputs.map(r=>{var i;return $ce1f303d0aa8ec51$var$validateParams(r,[{name:"satoshis",required:!0},{name:"script",type:"string",required:!0},{name:"scriptVersion",type:"number"}]),Object.assign(Object.assign({},r),{scriptVersion:null!==(i=r.scriptVersion)&&void 0!==i?i:0})});this.params=Object.assign(Object.assign({},o),{inputs:d,outputs:f,scheme:null!==(r=o.scheme)&&void 0!==r?r:"schnorr",prefix:null!==(i=o.prefix)&&void 0!==i?i:"kaspa",sigHashType:null!==(n=o.sigHashType)&&void 0!==n?n:$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_ALL|$ce1f303d0aa8ec51$var$SignatureType.SIGHASH_FORKID,sigOpCount:null!==(s=o.sigOpCount)&&void 0!==s?s:1,subNetworkID:null!==(a=o.subNetworkID)&&void 0!==a?a:$bb5e1fcd97588e49$exports.bytesToHex($ce1f303d0aa8ec51$var$zeroSubnetworkID()),useTweak:o.useTweak})}getVersionRange(){return{model_mini:{min:"3.0.0"},model_touch:{min:"4.3.0"}}}getUseTweakVersionRange(){return{pro:{min:"4.14.0"},model_classic1s:{min:"3.12.0"}}}processTxRequest(r,i,n,s){var a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if("KaspaSignedTx"===i.type)return s.push({index:n,signature:i.message.signature}),s;if("KaspaTxInputRequest"===i.type){s.push({index:n,signature:null!==(a=i.message.signature)&&void 0!==a?a:""});let o=i.message.request_index,{raw:d}=$ce1f303d0aa8ec51$var$serialize(this.params,o),f=this.params.inputs[o],l=yield r("KaspaTxInputAck",["KaspaTxInputRequest","KaspaSignedTx"],{address_n:f.path,raw_message:$bb5e1fcd97588e49$exports.bytesToHex(d)});return this.processTxRequest(r,l,o,s)}return s})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFeatureVersionLimit(()=>!1===this.params.useTweak,()=>this.getUseTweakVersionRange(),{strictCheckDeviceSupport:!0});let{raw:r}=$ce1f303d0aa8ec51$var$serialize(this.params,0),i=this.params.inputs[0],{device:n,params:s}=this,a=yield n.commands.typedCall("KaspaSignTx",["KaspaTxInputRequest","KaspaSignedTx"],{address_n:i.path,raw_message:$bb5e1fcd97588e49$exports.bytesToHex(r),scheme:s.scheme,prefix:s.prefix,input_count:s.inputs.length,use_tweak:s.useTweak});return this.processTxRequest(n.commands.typedCall.bind(n.commands),a,0,[])})}}class $ce1f303d0aa8ec51$var$NexaGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"prefix",type:"string"},{name:"scheme",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,prefix:r.prefix,scheme:r.scheme})})}getVersionRange(){return{model_mini:{min:"3.2.0"},model_touch:{min:"4.4.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i($ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",type:"string",required:!0},{name:"message",type:"string",required:!0},{name:"prefix",type:"string",required:!0}]),r)),this.params=r}getVersionRange(){return{model_mini:{min:"3.2.0"},model_touch:{min:"4.4.0"}}}processTxRequest(r,i,n,s){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{signature:a}=i.message;if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ResponseUnexpectTypeError,"signature is not valid");if("NexaSignedTx"===i.type)return s.push({index:n,signature:a}),s;if("NexaTxInputRequest"===i.type){s.push({index:n,signature:a});let o=i.message.request_index,d=this.params.inputs[o],f=yield r("NexaTxInputAck",["NexaTxInputRequest","NexaSignedTx"],{address_n:d.path,raw_message:d.message});return this.processTxRequest(r,f,o,s)}return s})}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{device:r,params:i}=this,n=i.inputs[0],s=yield r.commands.typedCall("NexaSignTx",["NexaTxInputRequest","NexaSignedTx"],{address_n:$ce1f303d0aa8ec51$var$validatePath(n.path,3),raw_message:n.message,prefix:n.prefix,input_count:i.inputs.length});return this.processTxRequest(r.commands.typedCall.bind(r.commands),s,0,[])})}}class $ce1f303d0aa8ec51$var$NostrGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=Object.prototype.hasOwnProperty.call(this.payload,"bundle");let r=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(r,[{name:"bundle",type:"array"}]),this.params=[],r.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,1);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_mini:{min:"3.6.0"},model_touch:{min:"4.7.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"network",type:"string"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,network:r.network})})}getVersionRange(){return{model_mini:{min:"3.7.0"},model_touch:{min:"4.9.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){var a,o;if("NervosSignedTx"===i.type){if(!(null===(a=null==i?void 0:i.message)||void 0===a?void 0:a.signature))throw Error("No signature returned");return Object.assign(Object.assign({},i.message),{path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n)})}let{data_length:d}=i.message;if(!d){if(!(null===(o=null==i?void 0:i.message)||void 0===o?void 0:o.signature))throw Error("No signature returned");return Object.assign(Object.assign({},i.message),{path:$ce1f303d0aa8ec51$var$serializedPath(this.params.address_n)})}let f=n.subarray(s,s+d),l=s+f.length,u={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(f)},c=yield r("NervosTxAck",["NervosSignedTx","NervosTxRequest"],Object.assign({},u));return this.processTxRequest(r,c,n,l)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"witnessHex",type:"hexString",required:!0},{name:"network",type:"string",required:!0}]);let{path:r,rawTx:i,witnessHex:n,network:s}=this.payload,a=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:a,raw_tx:$ce1f303d0aa8ec51$require$Buffer.from($ce1f303d0aa8ec51$var$formatAnyHex(i),"hex"),witness_buffer:$ce1f303d0aa8ec51$var$formatAnyHex(n),network:s}}getVersionRange(){return{model_mini:{min:"3.7.0"},model_touch:{min:"4.9.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=this.params.raw_tx.length,i=r,n=this.params.raw_tx,s=this.device.getCommands().typedCall.bind(this.device.getCommands()),a=yield s("NervosSignTx","NervosSignedTx",{address_n:this.params.address_n,data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(n.subarray(0,i)),data_length:r,witness_buffer:this.params.witness_buffer,network:this.params.network});return this.processTxRequest(s,a,n,i)})}}class $ce1f303d0aa8ec51$var$DnxGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{classic:{min:"3.8.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i!!r.showOnOneKey),$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"walletVersion"},{name:"isBounceable",type:"boolean"},{name:"isTestnetOnly",type:"boolean"},{name:"workchain"},{name:"walletId",type:"number"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s,wallet_version:r.walletVersion,is_bounceable:r.isBounceable,is_testnet_only:r.isTestnetOnly,workchain:r.workchain,wallet_id:r.walletId})})}getVersionRange(){return{model_touch:{min:"4.10.0"},model_classic1s:{min:"3.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if(!r.init_data_length){let i=$ce1f303d0aa8ec51$var$getDeviceType(this.device.features),n=$ce1f303d0aa8ec51$var$DeviceModelToTypes.model_classic1s.includes(i),s=null==r.signning_message;return Promise.resolve(Object.assign(Object.assign({},r),{skip_validate:n||s}))}let[n,s]=$ce1f303d0aa8ec51$var$cutString(i,2*r.init_data_length),a=yield this.device.commands.typedCall("TonTxAck","TonSignedMessage",{init_data_chunk:n});return this.processTxRequest(a.message,s)})}init(){this.strictCheckDeviceSupport=!0,this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"destination",type:"string"},{name:"jettonMasterAddress",type:"string"},{name:"jettonWalletAddress",type:"string"},{name:"tonAmount"},{name:"jettonAmount"},{name:"fwdFee"},{name:"comment",type:"string"},{name:"isRawData",type:"boolean"},{name:"mode",type:"number"},{name:"seqno",type:"number"},{name:"expireAt"},{name:"walletVersion"},{name:"walletId",type:"number"},{name:"workchain"},{name:"isBounceable",type:"boolean"},{name:"isTestnetOnly",type:"boolean"},{name:"extDestination",type:"array"},{name:"extTonAmount",type:"array"},{name:"extPayload",type:"array"},{name:"initState",type:"hexString"},{name:"signingMessageRepr",type:"hexString"}]);let{path:r}=this.payload,i=$ce1f303d0aa8ec51$var$validatePath(r,3);this.initState=$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(this.payload.initState));let n=null==this.initState?0:this.initState.length/2;this.params={address_n:i,destination:this.payload.destination,jetton_master_address:this.payload.jettonMasterAddress,jetton_wallet_address:this.payload.jettonWalletAddress,ton_amount:this.payload.tonAmount,fwd_fee:this.payload.fwdFee,comment:this.payload.comment,mode:this.payload.mode,is_raw_data:this.payload.isRawData,seqno:this.payload.seqno,expire_at:this.payload.expireAt,wallet_version:this.payload.walletVersion,wallet_id:this.payload.walletId,workchain:this.payload.workchain,is_bounceable:this.payload.isBounceable,is_testnet_only:this.payload.isTestnetOnly,ext_destination:this.payload.extDestination,ext_ton_amount:this.payload.extTonAmount,ext_payload:this.payload.extPayload,init_data_length:n,signing_message_repr:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(this.payload.signingMessageRepr))}}getVersionRange(){return{model_touch:{min:"4.10.0"},model_classic1s:{min:"3.10.0"}}}getSupportJettonAmountBytesVersionRange(){return{pro:{min:"4.10.2"},model_classic1s:{min:"3.10.0"}}}checkSupportJettonAmountBytes(){var r;let i=null===(r=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(this.device.features))||void 0===r?void 0:r.join("."),n=$ce1f303d0aa8ec51$var$getMethodVersionRange(this.device.features,r=>this.getSupportJettonAmountBytesVersionRange()[r]);return!!(!n||$ce1f303d0aa8ec51$var$semver__default.default.valid(i)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(i,n.min))}getFixCommentErrorVersionRange(){return{pro:{min:"4.10.1"},model_classic1s:{min:"3.10.0"}}}checkFixCommentError(){let{comment:r,jettonAmount:i}=this.payload;this.checkFeatureVersionLimit(()=>!$7U5sq.isEmpty(r)&&null!=i,()=>this.getFixCommentErrorVersionRange())}getFixInitStateErrorVersionRange(){return{pro:{min:"4.13.0"},model_classic1s:{min:"3.12.0"}}}checkFixInitStateError(){let{initState:r,signingMessageRepr:i}=this.payload;this.checkFeatureVersionLimit(()=>!$7U5sq.isEmpty(r)&&!$7U5sq.isEmpty(i),()=>this.getFixInitStateErrorVersionRange())}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){this.checkFixCommentError(),this.checkFixInitStateError();let{jettonAmount:i}=this.payload;i&&(this.checkSupportJettonAmountBytes()?this.params.jetton_amount_bytes=$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(new $ce1f303d0aa8ec51$var$BigNumber__default.default(i).toString(16))):this.params.jetton_amount=i);let n=null!==(r=this.initState)&&void 0!==r?r:"";if(this.initState){let[r,i]=$ce1f303d0aa8ec51$var$cutString(n,2048);this.params.init_data_initial_chunk=r,n=i}let s=this.device.getCommands().typedCall.bind(this.device.getCommands()),a=yield s("TonSignMessage","TonSignedMessage",Object.assign({},this.params));return this.processTxRequest(a.message,n)})}}class $ce1f303d0aa8ec51$var$TonSignProof extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.strictCheckDeviceSupport=!0,this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"appdomain",type:"string"},{name:"comment",type:"string"},{name:"expireAt"},{name:"walletVersion"},{name:"walletId",type:"number"},{name:"workchain"},{name:"isBounceable",type:"boolean"},{name:"isTestnetOnly",type:"boolean"}]);let{path:r}=this.payload,i=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:i,appdomain:this.payload.appdomain,comment:this.payload.comment,expire_at:this.payload.expireAt,wallet_version:this.payload.walletVersion,wallet_id:this.payload.walletId,workchain:this.payload.workchain,is_bounceable:this.payload.isBounceable,is_testnet_only:this.payload.isTestnetOnly}}getVersionRange(){return{model_touch:{min:"4.10.0"},model_classic1s:{min:"3.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("TonSignProof","TonSignedProof",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$ScdoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let{data_length:a}=i.message;if(!a)return i.message;let o=n.subarray(s,s+a),d=s+o.length,f={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(o)},l=yield r("ScdoTxAck","ScdoSignedTx",Object.assign({},f));return this.processTxRequest(r,l,n,d)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"nonce",required:!0},{name:"gasPrice",required:!0,type:"string"},{name:"gasLimit",required:!0,type:"string"},{name:"to",required:!0,type:"string"},{name:"value",required:!0,type:"string"},{name:"timestamp",required:!0,type:"string"},{name:"data",type:"hexString"},{name:"txType",type:"number"}]);let{path:r,nonce:i,gasPrice:n,gasLimit:s,to:a,value:o,timestamp:d,txType:f}=this.payload,l=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:l,nonce:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(i)),gas_price:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(n)),gas_limit:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(s)),to:a,value:$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(o)),timestamp:d?$ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(d)):void 0,tx_type:f}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.device.getCommands().typedCall.bind(this.device.getCommands()),n=null===(r=this.payload)||void 0===r?void 0:r.data,s=n&&$ce1f303d0aa8ec51$require$Buffer.from($ce1f303d0aa8ec51$var$stripHexStartZeroes($ce1f303d0aa8ec51$var$formatAnyHex(n)),"hex"),a=this.chunkByteSize;s&&s.length>0&&(this.params.data_initial_chunk=$bb5e1fcd97588e49$exports.bytesToHex(s.subarray(0,this.chunkByteSize)),this.params.data_length=s.length);let o=yield i("ScdoSignTx",["ScdoSignedTx"],Object.assign({},this.params));return this.processTxRequest(i,o,s,a)})}}class $ce1f303d0aa8ec51$var$ScdoSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0}]);let{path:r,messageHex:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i)}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("ScdoSignMessage","ScdoSignedMessage",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$AlephiumGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i,n,s;let a=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"},{name:"includePublicKey",type:"boolean"},{name:"group",type:"number"}]);let o=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push(Object.assign({address_n:a,show_display:o,include_public_key:null!==(n=r.includePublicKey)&&void 0!==n&&n},null!==r.group&&{target_group:null!==(s=r.group)&&void 0!==s?s:0}))})}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=[];for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let o;if("AlephiumSignedTx"===i.type)return i.message;let{data_length:d}=i.message;if("AlephiumTxRequest"===i.type){if(!d)return i.message;let f=n.subarray(a,a+d),l=a+f.length,u={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(f)};return o=yield r("AlephiumTxAck",["AlephiumSignedTx","AlephiumTxRequest","AlephiumBytecodeRequest"],Object.assign({},u)),this.processTxRequest(r,o,n,s,l)}if("AlephiumBytecodeRequest"===i.type){if(!(null==s?void 0:s.length))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"scriptOpt is required");let i={bytecode_data:$bb5e1fcd97588e49$exports.bytesToHex(s)};return o=yield r("AlephiumBytecodeAck",["AlephiumSignedTx","AlephiumBytecodeRequest"],Object.assign({},i)),this.processTxRequest(r,o,n,s,a)}throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,`Unknown response type: ${i.type}`)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",required:!0,type:"hexString"},{name:"scriptOpt",type:"string"}]);let{path:r}=this.payload,i=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:i,data_initial_chunk:"",data_length:0}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=this.device.getCommands().typedCall.bind(this.device.getCommands()),i=this.chunkByteSize,n=$ce1f303d0aa8ec51$require$Buffer.from(this.payload.rawTx,"hex"),s=this.payload.scriptOpt&&$ce1f303d0aa8ec51$require$Buffer.from(this.payload.scriptOpt,"hex");this.params={address_n:this.params.address_n,data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(n.subarray(0,this.chunkByteSize)),data_length:n.length};let a=yield r("AlephiumSignTx",["AlephiumSignedTx","AlephiumTxRequest","AlephiumBytecodeRequest"],Object.assign({},this.params));return this.processTxRequest(r,a,n,s,i)})}}class $ce1f303d0aa8ec51$var$AlephiumSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0},{name:"messageType",type:"string"}]);let{path:r,messageHex:i,messageType:n}=this.payload,s=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:s,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i),message_type:$ce1f303d0aa8ec51$require$Buffer.from(null!=n?n:"alephium","utf-8").toString("hex")}}getVersionRange(){return{model_touch:{min:"4.10.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("AlephiumSignMessage","AlephiumMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}const $ce1f303d0aa8ec51$var$BENFEN_ADDRESS_LENGTH=32,$ce1f303d0aa8ec51$var$PUBLIC_KEY_SIZE=32,$ce1f303d0aa8ec51$var$SIGNATURE_SCHEME_TO_FLAG={};function $ce1f303d0aa8ec51$var$normalizeBenfenAddress(r,i=!1){let n=r.toLowerCase();return!i&&n.startsWith("0x")&&(n=n.slice(2)),`0x${n.padStart(2*$ce1f303d0aa8ec51$var$BENFEN_ADDRESS_LENGTH,"0")}`.toLowerCase()}function $ce1f303d0aa8ec51$var$publicKeyToAddress(r){let i=new Uint8Array($ce1f303d0aa8ec51$var$PUBLIC_KEY_SIZE+1);return i.set([0]),i.set($bb5e1fcd97588e49$exports.hexToBytes(r),1),$ce1f303d0aa8ec51$var$normalizeBenfenAddress($bb5e1fcd97588e49$exports.bytesToHex($692be64e687bb0ca$exports.blake2b(i,{dkLen:32})).slice(0,2*$ce1f303d0aa8ec51$var$BENFEN_ADDRESS_LENGTH))}function $ce1f303d0aa8ec51$var$hex2BfcAddress(r){if(/^BFC/i.test(r))return r;let i=r.replace(/^0x/,"").padStart(64,"0").toLowerCase(),n=$91294e775a6684d7$exports.sha256(new TextEncoder().encode(i)),s=$bb5e1fcd97588e49$exports.bytesToHex(n).slice(0,4);return`BFC${i}${s}`}class $ce1f303d0aa8ec51$var$BenfenGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1,this.shouldConfirm=!1,this.strictCheckDeviceSupport=!0}init(){var r,i;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let n=this.hasBundle?this.payload:{bundle:[this.payload]};this.shouldConfirm=this.payload.showOnOneKey||(null===(i=this.payload.bundle)||void 0===i?void 0:i.some(r=>!!r.showOnOneKey)),$ce1f303d0aa8ec51$var$validateParams(n,[{name:"bundle",type:"array"}]),this.params=[],n.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){var r;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=$ce1f303d0aa8ec51$var$supportBatchPublicKey(null===(r=this.device)||void 0===r?void 0:r.features),n=[];if(i){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",728);for(let i=0;i$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=yield this.device.commands.typedCall("BenfenGetAddress","BenfenAddress",r),n={path:$ce1f303d0aa8ec51$var$serializedPath(r.address_n),address:$ce1f303d0aa8ec51$var$hex2BfcAddress(i.message.address)};return this.shouldConfirm&&this.postPreviousAddressMessage(n),n})));return $ce1f303d0aa8ec51$var$validateResult(n,["address"],{expectedLength:this.params.length}),this.hasBundle?n:n[0]})}}class $ce1f303d0aa8ec51$var$BenfenGetPublicKey extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1,this.strictCheckDeviceSupport=!0}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield $ce1f303d0aa8ec51$var$batchGetPublickeys(this.device,this.params,"ed25519",728),i=r.public_keys.map((r,i)=>({path:$ce1f303d0aa8ec51$var$serializedPath(this.params[i].address_n),pub:r}));return $ce1f303d0aa8ec51$var$validateResult(i,["pub"],{expectedLength:this.params.length}),Promise.resolve(this.hasBundle?i:i[0])})}}class $ce1f303d0aa8ec51$var$BenfenSignMessage extends $ce1f303d0aa8ec51$var$BaseMethod{init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"messageHex",type:"hexString",required:!0}]);let{path:r,messageHex:i}=this.payload,n=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params={address_n:n,message:$ce1f303d0aa8ec51$var$stripHexPrefix(i)}}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=yield this.device.commands.typedCall("BenfenSignMessage","BenfenMessageSignature",Object.assign({},this.params));return Promise.resolve(r.message)})}}class $ce1f303d0aa8ec51$var$BenfenSignTransaction extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.chunkByteSize=1024,this.processTxRequest=(r,i,n,s=0)=>$ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){if("BenfenSignedTx"===i.type)return i.message;let{data_length:a}=i.message;if(!a)return i.message;let o=n.subarray(s,s+a),d=s+o.length,f={data_chunk:$bb5e1fcd97588e49$exports.bytesToHex(new Uint8Array(o))},l=yield r("BenfenTxAck",["BenfenSignedTx","BenfenTxRequest"],Object.assign({},f));return this.processTxRequest(r,l,n,d)})}init(){this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],$ce1f303d0aa8ec51$var$validateParams(this.payload,[{name:"path",required:!0},{name:"rawTx",type:"hexString",required:!0},{name:"coinType",type:"string",required:!1}]);let{path:r,rawTx:i,coinType:n}=this.payload,s=$ce1f303d0aa8ec51$var$validatePath(r,3);this.params=Object.assign({address_n:s,raw_tx:$ce1f303d0aa8ec51$var$formatAnyHex(i)},n&&{coin_type:$ce1f303d0aa8ec51$var$formatAnyHex($ce1f303d0aa8ec51$require$Buffer.from(n).toString("hex"))})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r=this.device.getCommands().typedCall.bind(this.device.getCommands()),i=this.chunkByteSize,n=$ce1f303d0aa8ec51$require$Buffer.from(this.params.raw_tx,"hex");this.params={address_n:this.params.address_n,coin_type:this.params.coin_type,raw_tx:"",data_initial_chunk:$bb5e1fcd97588e49$exports.bytesToHex(new Uint8Array(n.buffer).subarray(0,this.chunkByteSize)),data_length:n.length};let s=yield r("BenfenSignTx",["BenfenSignedTx","BenfenTxRequest"],Object.assign({},this.params));return this.processTxRequest(r,s,n,i)})}}class $ce1f303d0aa8ec51$var$NeoGetAddress extends $ce1f303d0aa8ec51$var$BaseMethod{constructor(){super(...arguments),this.hasBundle=!1}init(){var r;this.checkDeviceId=!0,this.allowDeviceMode=[...this.allowDeviceMode,$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_INITIALIZE],this.strictCheckDeviceSupport=!0,this.hasBundle=!!(null===(r=this.payload)||void 0===r?void 0:r.bundle);let i=this.hasBundle?this.payload:{bundle:[this.payload]};$ce1f303d0aa8ec51$var$validateParams(i,[{name:"bundle",type:"array"}]),this.params=[],i.bundle.forEach(r=>{var i;let n=$ce1f303d0aa8ec51$var$validatePath(r.path,3);$ce1f303d0aa8ec51$var$validateParams(r,[{name:"path",required:!0},{name:"showOnOneKey",type:"boolean"}]);let s=null===(i=r.showOnOneKey)||void 0===i||i;this.params.push({address_n:n,show_display:s})})}getVersionRange(){return{pro:{min:"4.12.0"},model_classic1s:{min:"3.11.0"}}}run(){var r,i;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let n=[];for(let s=0;snew Promise(n=>{setTimeout(n,r,i)}),$ce1f303d0aa8ec51$var$Log$2=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.DeviceConnector);class $ce1f303d0aa8ec51$var$DeviceConnector{constructor(){this.listenTimestamp=0,this.current=null,this.upcoming=[],this.listening=!1,$ce1f303d0aa8ec51$var$TransportManager.load(),this.transport=$ce1f303d0aa8ec51$var$TransportManager.getTransport(),$ce1f303d0aa8ec51$var$DevicePool.setConnector(this)}enumerate(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let r=yield this.transport.enumerate();return this.upcoming=r,this._reportDevicesChange(),{descriptors:r}}catch(r){$ce1f303d0aa8ec51$var$safeThrowError(r)}})}listen(){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let r;let i=null!==this.current,n=this.current||[];this.listening=!0;try{if($ce1f303d0aa8ec51$var$Log$2.debug("Start listening",n),this.listenTimestamp=new Date().getTime(),r=i?yield this.transport.listen(n):yield this.transport.enumerate(),!this.listening)return;this.upcoming=r,$ce1f303d0aa8ec51$var$Log$2.debug("Listen result",r),this._reportDevicesChange(),this.listening&&this.listen()}catch(i){let r=new Date().getTime()-this.listenTimestamp;$ce1f303d0aa8ec51$var$Log$2.debug("Listen error","timestamp",r,typeof i),r>1100?(yield $ce1f303d0aa8ec51$var$resolveAfter(1e3,null),this.listening&&this.listen()):$ce1f303d0aa8ec51$var$Log$2.warn("Transport error")}})}stop(){this.listening=!1}acquire(r,i,n){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log$2.debug("acquire",r,i);let s=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");try{let a;return a=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(s)?yield this.transport.acquire({uuid:r,forceCleanRunPromise:n}):yield this.transport.acquire({path:r,previous:null!=i?i:null})}catch(r){$ce1f303d0aa8ec51$var$Log$2.error("acquire error: ",r.message),$ce1f303d0aa8ec51$var$safeThrowError(r)}})}release(r,i){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{let n=yield this.transport.release(r,i);return n}catch(r){$ce1f303d0aa8ec51$var$safeThrowError(r)}})}disconnect(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{this.transport.disconnect&&r&&(yield this.transport.disconnect(r))}catch(r){$ce1f303d0aa8ec51$var$safeThrowError(r)}})}promptDeviceAccess(){return this.transport.promptDeviceAccess?this.transport.promptDeviceAccess():Promise.resolve(null)}_reportDevicesChange(){$ce1f303d0aa8ec51$var$DevicePool.reportDeviceChange(this.upcoming)}}const $ce1f303d0aa8ec51$var$Log$1=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);class $ce1f303d0aa8ec51$var$RequestQueue{constructor(){this.requestQueue=new Map,this.pendingCallbackTasks=new Map,this.generateRequestId=r=>r&&null!=r.responseID?r.responseID:Date.now()}createTask(r){let i=this.generateRequestId(r);r&&r.responseID!==i&&(r.responseID=i);let n=new AbortController,s={id:i,method:r,abortController:n};return this.requestQueue.set(i,s),s}getTask(r){return this.requestQueue.get(r)}getAbortController(r){var i;return null===(i=this.requestQueue.get(r))||void 0===i?void 0:i.abortController}abortRequest(r){let i=this.requestQueue.get(r);return null!=i&&!!i.abortController&&($ce1f303d0aa8ec51$var$Log$1.debug(`Aborting request ${r}`),i.abortController.abort(),!0)}abortRequestsByConnectId(r){let i=0;return this.requestQueue.forEach((n,s)=>{n.abortController&&n.method.connectId===r&&(n.abortController.abort(),n.abortController=void 0,i++)}),i}abortAllRequests(){let r=0;return this.requestQueue.forEach(i=>{i.abortController&&(i.abortController.abort(),r++)}),r}getRequestTasksId(){return Array.from(this.requestQueue.keys())}resolveRequest(r,i){var n;let s=this.requestQueue.get(r);s&&(null===(n=s.callPromise)||void 0===n||n.resolve(i)),this.releaseTask(r)}rejectRequest(r,i){var n;let s=this.requestQueue.get(r);s&&(null===(n=s.callPromise)||void 0===n||n.reject(i)),this.releaseTask(r)}releaseTask(r){this.requestQueue.delete(r)}registerPendingCallbackTask(r,i){this.pendingCallbackTasks.set(r,i),i.promise.finally(()=>{$ce1f303d0aa8ec51$var$Log$1.debug(`Callback task completed for connectId: ${r}`),this.pendingCallbackTasks.delete(r)})}waitForPendingCallbackTasks(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=this.pendingCallbackTasks.get(r);i&&($ce1f303d0aa8ec51$var$Log$1.debug(`Waiting for pending callback task to complete for connectId: ${r}`),yield i.promise)})}cancelCallbackTasks(r){let i=this.pendingCallbackTasks.get(r);i&&i.resolve()}}const $ce1f303d0aa8ec51$var$getMutex=()=>{let r=Symbol(),i={};return (n=r)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){for(;i[n];)yield i[n];let r=()=>{};return i[n]=new Promise(i=>{r=i}).finally(()=>{delete i[n]}),r})},$ce1f303d0aa8ec51$var$getSynchronize=r=>{let i=null!=r?r:$ce1f303d0aa8ec51$var$getMutex();return(r,n)=>i(n).then(i=>Promise.resolve().then(r).finally(i))},$ce1f303d0aa8ec51$var$Log=$ce1f303d0aa8ec51$var$getLogger($ce1f303d0aa8ec51$exports.LoggerNames.Core);function $ce1f303d0aa8ec51$var$hasDeriveCardano(r){var i;return!!(r.name.startsWith("allNetworkGetAddress")&&r.payload&&r.payload.bundle&&r.payload.bundle.some(r=>r&&"ada"===r.network))||r.name.startsWith("cardano")||(null===(i=r.payload)||void 0===i?void 0:i.deriveCardano)}const $ce1f303d0aa8ec51$var$parseInitOptions=r=>({initSession:null==r?void 0:r.payload.initSession,passphraseState:null==r?void 0:r.payload.passphraseState,deviceId:null==r?void 0:r.payload.deviceId,deriveCardano:r&&$ce1f303d0aa8ec51$var$hasDeriveCardano(r)});let $ce1f303d0aa8ec51$var$_uiPromises=[];const $ce1f303d0aa8ec51$var$deviceCacheMap=new Map;let $ce1f303d0aa8ec51$var$pollingId=1;const $ce1f303d0aa8ec51$var$pollingState={};let $ce1f303d0aa8ec51$var$preConnectCache={passphraseState:void 0};const $ce1f303d0aa8ec51$var$toError=r=>{if(r instanceof Error)return r;if(null!=r){if("string"==typeof r)return Error(r);try{return Error(JSON.stringify(r))}catch(i){return Error(String(r))}}},$ce1f303d0aa8ec51$var$updateMethodRequestContext=(r,i)=>{r.requestContext&&$ce1f303d0aa8ec51$var$updateRequestContext(r.requestContext.responseID,i)},$ce1f303d0aa8ec51$var$completeMethodRequestContext=(r,i)=>{r.requestContext&&$ce1f303d0aa8ec51$var$completeRequestContext(r.requestContext.responseID,$ce1f303d0aa8ec51$var$toError(i))},$ce1f303d0aa8ec51$var$callAPI=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var n;let s;if(!i.id||!i.payload||i.type!==$ce1f303d0aa8ec51$var$IFRAME.CALL)return Promise.reject($3FhS8.ERRORS.TypedError("on call: message.id or message.payload is missing"));try{(s=$ce1f303d0aa8ec51$var$findMethod(i)).connector=$ce1f303d0aa8ec51$var$_connector,s.postMessage=$ce1f303d0aa8ec51$var$postMessage,null===(n=s.setContext)||void 0===n||n.call(s,r),s.requestContext=$ce1f303d0aa8ec51$var$createRequestContext(s.responseID,s.name,{sdkInstanceId:r.sdkInstanceId,connectId:s.connectId}),$ce1f303d0aa8ec51$var$Log.debug(`[${r.sdkInstanceId}] callAPI: ${$ce1f303d0aa8ec51$var$formatRequestContext(s.requestContext)}`),s.init()}catch(r){return Promise.reject(r)}if($ce1f303d0aa8ec51$var$DevicePool.emitter.on($ce1f303d0aa8ec51$var$DEVICE.CONNECT,$ce1f303d0aa8ec51$var$onDeviceConnectHandler),!s.useDevice){$ce1f303d0aa8ec51$var$updateMethodRequestContext(s,{status:"running"});try{let r=yield s.run();return $ce1f303d0aa8ec51$var$completeMethodRequestContext(s),$ce1f303d0aa8ec51$var$createResponseMessage(s.responseID,!0,r)}catch(r){return $ce1f303d0aa8ec51$var$completeMethodRequestContext(s,r),$ce1f303d0aa8ec51$var$createResponseMessage(s.responseID,!1,{error:r})}}let{requestQueue:a,methodSynchronize:o}=r,d=yield o(()=>{for(let r of a.getRequestTasksId()){let i=a.getTask(r);$ce1f303d0aa8ec51$var$Log.debug("pre request task: ",`task?.id: ${null==i?void 0:i.id}, + task?.method.connectId: ${null==i?void 0:i.method.connectId}, + task?.method.deviceId: ${null==i?void 0:i.method.deviceId}, + task?.method.name: ${null==i?void 0:i.method.name}`)}return null});return d?$ce1f303d0aa8ec51$var$createResponseMessage(s.responseID,!1,{error:d}):$ce1f303d0aa8ec51$var$onCallDevice(r,i,s)}),$ce1f303d0aa8ec51$var$waitWithTimeout=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n=new Promise((r,n)=>{setTimeout(()=>n(Error("Request timeout")),i)});return Promise.race([r,n])}),$ce1f303d0aa8ec51$var$waitForPendingPromise=(r,i)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let n=r();if(n){$ce1f303d0aa8ec51$var$Log.debug("pre pending call promise before call method, wait for it");try{yield $ce1f303d0aa8ec51$var$waitWithTimeout(n,5e3)}catch(r){}null==i||i(n),$ce1f303d0aa8ec51$var$Log.debug("pre pending call promise before call method done")}}),$ce1f303d0aa8ec51$var$onCallDevice=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var s,a,o,d;let f,l;let{requestQueue:u,getPrePendingCallPromise:c,setPrePendingCallPromise:p}=r;$ce1f303d0aa8ec51$var$updateMethodRequestContext(n,{status:"running"});let h=$ce1f303d0aa8ec51$var$preConnectCache.passphraseState!==n.payload.passphraseState;$ce1f303d0aa8ec51$var$preConnectCache={passphraseState:n.payload.passphraseState},(h||n.payload.initSession)&&($ce1f303d0aa8ec51$var$Log.debug("passphrase state change, clear device cache"),$ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(n.payload.connectId)),n.connectId&&(yield r.waitForCallbackTasks(n.connectId)),yield $ce1f303d0aa8ec51$var$waitForPendingPromise(c,p);let g=u.createTask(n);try{$ce1f303d0aa8ec51$var$pollingState[$ce1f303d0aa8ec51$var$pollingId]&&($ce1f303d0aa8ec51$var$pollingState[$ce1f303d0aa8ec51$var$pollingId]=!1),$ce1f303d0aa8ec51$var$pollingId+=1,l=yield $ce1f303d0aa8ec51$var$ensureConnected(r,n,$ce1f303d0aa8ec51$var$pollingId,null===(s=g.abortController)||void 0===s?void 0:s.signal)}catch(r){if(console.log("ensureConnected error: ",r),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r),"AbortError"===r.name||"Request aborted"===r.message)return u.releaseTask(n.responseID),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.ActionCancelled,"Request cancelled by user")});return u.releaseTask(n.responseID),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r})}if(null===(a=n.payload)||void 0===a?void 0:a.onlyConnectBleDevice)return $ce1f303d0aa8ec51$var$Log.debug("Call API - only connect ble device: ",null==l?void 0:l.mainId),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!0,null);$ce1f303d0aa8ec51$var$Log.debug("Call API - setDevice: ",l.mainId),null===(o=n.setDevice)||void 0===o||o.call(n,l),n.context=r,$ce1f303d0aa8ec51$var$updateMethodRequestContext(n,{deviceInstanceId:l.instanceId,commandsInstanceId:null===(d=l.commands)||void 0===d?void 0:d.instanceId});let m=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(l.instanceId);m.length>0&&$ce1f303d0aa8ec51$var$Log.warn(`[${n.instanceId}] Device ${l.instanceId} has ${m.length} active requests:`,m.map($ce1f303d0aa8ec51$var$formatRequestContext)),l.on($ce1f303d0aa8ec51$var$DEVICE.PIN,$ce1f303d0aa8ec51$var$onDevicePinHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.BUTTON,$ce1f303d0aa8ec51$var$onDeviceButtonHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE,i.payload.useEmptyPassphrase?$ce1f303d0aa8ec51$var$onEmptyPassphraseHandler:$ce1f303d0aa8ec51$var$onDevicePassphraseHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.PASSPHRASE_ON_DEVICE,$ce1f303d0aa8ec51$var$onEnterPassphraseOnDeviceHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.FEATURES,$ce1f303d0aa8ec51$var$onDeviceFeaturesHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,$ce1f303d0aa8ec51$var$onSelectDeviceInBootloaderForWebDeviceHandler),l.on($ce1f303d0aa8ec51$var$DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,$ce1f303d0aa8ec51$var$onSelectDeviceForSwitchFirmwareWebDeviceHandler);try{n.connectId&&(yield r.waitForCallbackTasks(n.connectId)),yield $ce1f303d0aa8ec51$var$waitForPendingPromise(c,p);let i=()=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var r,i,s,a,o;let d=$ce1f303d0aa8ec51$var$getMethodVersionRange(l.features,r=>n.getVersionRange()[r]);if(l.features){if(yield $ce1f303d0aa8ec51$var$DataManager.checkAndReloadData(),$ce1f303d0aa8ec51$var$findDefectiveBatchDevice(l.features)){let r=$ce1f303d0aa8ec51$var$getDefectiveDeviceInfo(l.features);if(r)throw $3FhS8.createDefectiveFirmwareError(r.serialNo,r.seVersion||"Unknown",r.deviceType,n.connectId,n.deviceId)}let r=$ce1f303d0aa8ec51$var$getFirmwareType(l.features),i=$ce1f303d0aa8ec51$var$DataManager.getFirmwareStatus(l.features,r),s=$ce1f303d0aa8ec51$var$DataManager.getBLEFirmwareStatus(l.features),a=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion(l.features).join("."),o=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion(l.features).join(".");if(("required"===i||"required"===s)&&!1===n.skipForceUpdateCheck){let r={firmware:a,ble:o},d=[];throw"required"===i&&d.push("firmware"),"required"===s&&d.push("ble"),$3FhS8.createNewFirmwareForceUpdateHardwareError(n.connectId,n.deviceId,d,r)}if(d){if($ce1f303d0aa8ec51$var$semver__default.default.valid(d.min)&&$ce1f303d0aa8ec51$var$semver__default.default.lt(a,d.min)){if("none"===i||"valid"===i)throw $3FhS8.createNewFirmwareUnReleaseHardwareError({currentVersion:a,requireVersion:d.min,methodName:n.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(l.features)});return Promise.reject($3FhS8.createNeedUpgradeFirmwareHardwareError({currentVersion:a,requireVersion:d.min,methodName:n.name,firmwareType:$ce1f303d0aa8ec51$var$getFirmwareType(l.features)}))}if(d.max&&$ce1f303d0aa8ec51$var$semver__default.default.valid(d.max)&&$ce1f303d0aa8ec51$var$semver__default.default.gte(a,d.max))return Promise.reject($3FhS8.createDeprecatedHardwareError(a,d.max,n.name))}else if(n.strictCheckDeviceSupport)throw $3FhS8.createDeviceNotSupportMethodError(n.name,$ce1f303d0aa8ec51$var$getFirmwareType(l.features))}let c=l.hasUnexpectedMode(n.allowDeviceMode,n.requireDeviceMode);if(c)return c===$ce1f303d0aa8ec51$var$UI_REQUEST.NOT_IN_BOOTLOADER?Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RequiredButInBootloaderMode)):c===$ce1f303d0aa8ec51$var$UI_REQUEST.BOOTLOADER?Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NotAllowInBootloaderMode)):Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceUnexpectedMode,c));if(n.deviceId&&n.checkDeviceId){let r=l.checkDeviceId(n.deviceId);if(!r)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceCheckDeviceIdError))}if(n.checkFirmwareRelease(),n.checkDeviceSupportFeature(),$ce1f303d0aa8ec51$var$_deviceList&&(yield $ce1f303d0aa8ec51$var$TransportManager.reconfigure(l.features)),$ce1f303d0aa8ec51$var$checkPassphraseEnableState(n,l.features),l.hasUsePassphrase()&&n.useDevicePassphraseState){let a=$ce1f303d0aa8ec51$var$supportNewPassphrase(l.features);if(!a.support)return Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotSupportPassphrase,`Device not support passphrase, please update to ${a.require}`,{require:a.require}));let o=yield l.checkPassphraseStateSafety(null===(r=n.payload)||void 0===r?void 0:r.passphraseState,null===(i=n.payload)||void 0===i?void 0:i.useEmptyPassphrase,null===(s=n.payload)||void 0===s?void 0:s.skipPassphraseCheck);if($ce1f303d0aa8ec51$var$checkPassphraseEnableState(n,l.features),!o)return $ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(n.payload.connectId),Promise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceCheckPassphraseStateError));$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.CLOSE_UI_PIN_WINDOW))}try{yield n.checkSafetyLevelOnTestNet()}catch(i){let r=i instanceof $3FhS8.HardwareError?i:$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"open safety check failed.");throw r}null===(o=null===(a=n.device)||void 0===a?void 0:a.commands)||void 0===o||o.checkDisposed();try{let r=yield n.run();$ce1f303d0aa8ec51$var$Log.debug("Call API - Inner Method Run: "),f=$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!0,r),u.resolveRequest(n.responseID,f),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n)}catch(r){if($ce1f303d0aa8ec51$var$Log.debug("Call API - Inner Method Run Error",r),f=$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r}),u.resolveRequest(n.responseID,f),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r),r instanceof $3FhS8.HardwareError&&$3FhS8.ERROR_CODES_REQUIRE_RELEASE.includes(r.errorCode))throw r}});$ce1f303d0aa8ec51$var$Log.debug("Call API - Device Run: ",l.mainId);let s=Object.assign({keepSession:n.payload.keepSession},$ce1f303d0aa8ec51$var$parseInitOptions(n)),a=()=>l.run(i,s);g.callPromise=$3FhS8.createDeferred(a);try{return yield g.callPromise.promise}catch(r){return $ce1f303d0aa8ec51$var$Log.debug("Device Run Error: ",r),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r),$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r})}}catch(r){f=$ce1f303d0aa8ec51$var$createResponseMessage(n.responseID,!1,{error:r}),u.rejectRequest(n.responseID,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodError,r.message)),$ce1f303d0aa8ec51$var$Log.debug("Call API - Run Error: ",r),$ce1f303d0aa8ec51$var$completeMethodRequestContext(n,r)}finally{let r=f;if(r&&n&&n.dispose(),u.releaseTask(n.responseID),$ce1f303d0aa8ec51$var$closePopup(),$ce1f303d0aa8ec51$var$cleanup(),l){let r=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance(l.instanceId);r.length>1?$ce1f303d0aa8ec51$var$Log.warn(`[${n.instanceId}] Removing listeners while ${r.length} requests are active!`,{deviceInstanceId:l.instanceId,activeRequests:r.map($ce1f303d0aa8ec51$var$formatRequestContext),pinListeners:l.listenerCount($ce1f303d0aa8ec51$var$DEVICE.PIN)}):$ce1f303d0aa8ec51$var$removeDeviceListener(l)}}});function $ce1f303d0aa8ec51$var$initDeviceList(r){return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)&&r.connectId){yield $ce1f303d0aa8ec51$var$TransportManager.configure();return}$ce1f303d0aa8ec51$var$_deviceList||($ce1f303d0aa8ec51$var$_deviceList=new $ce1f303d0aa8ec51$var$DeviceList,yield $ce1f303d0aa8ec51$var$TransportManager.configure(),$ce1f303d0aa8ec51$var$_deviceList.connector=$ce1f303d0aa8ec51$var$_connector),yield $ce1f303d0aa8ec51$var$_deviceList.getDeviceLists(r.connectId,$ce1f303d0aa8ec51$var$parseInitOptions(r))})}function $ce1f303d0aa8ec51$var$initDevice(r){var i;let n;if(!$ce1f303d0aa8ec51$var$_deviceList)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceListNotInitialized);let s=$ce1f303d0aa8ec51$var$_deviceList.allDevices();if((null===(i=r.payload)||void 0===i?void 0:i.detectBootloaderDevice)&&s.some(r=>{var i;return null===(i=r.features)||void 0===i?void 0:i.bootloader_mode}))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceDetectInBootloaderMode);if(r.connectId)n=$ce1f303d0aa8ec51$var$_deviceList.getDevice(r.connectId);else if(1===s.length)[n]=s;else if(s.length>1)throw $3FhS8.ERRORS.TypedError(["firmwareUpdateV3","firmwareUpdateV2","checkFirmwareRelease","checkBootloaderRelease","checkBLEFirmwareRelease"].includes(r.name)?$3FhS8.HardwareErrorCode.FirmwareUpdateLimitOneDevice:$3FhS8.HardwareErrorCode.SelectDevice);if(!n){let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb(r))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission);throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound)}return n.deviceConnector=$ce1f303d0aa8ec51$var$_connector,n}function $ce1f303d0aa8ec51$var$initDeviceForBle(r){let i;if(!r.connectId&&!$ce1f303d0aa8ec51$var$_deviceList)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceListNotInitialized);return r.connectId?($ce1f303d0aa8ec51$var$deviceCacheMap.has(r.connectId)?i=$ce1f303d0aa8ec51$var$deviceCacheMap.get(r.connectId):(i=$ce1f303d0aa8ec51$var$Device.fromDescriptor({id:r.connectId},r.sdkInstanceId),$ce1f303d0aa8ec51$var$deviceCacheMap.set(r.connectId,i)),i.deviceConnector=$ce1f303d0aa8ec51$var$_connector,i):$ce1f303d0aa8ec51$var$initDevice(r)}let $ce1f303d0aa8ec51$var$bleTimeoutRetry=0;function $ce1f303d0aa8ec51$var$connectDeviceForBle(r,i){var n;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){try{if(yield i.acquire(),null===(n=r.payload)||void 0===n?void 0:n.onlyConnectBleDevice)return;yield i.initialize($ce1f303d0aa8ec51$var$parseInitOptions(r))}catch(n){if(n.errorCode===$3FhS8.HardwareErrorCode.BleTimeoutError&&$ce1f303d0aa8ec51$var$bleTimeoutRetry<=5)$ce1f303d0aa8ec51$var$bleTimeoutRetry+=1,$ce1f303d0aa8ec51$var$Log.debug(`Bletooth connect timeout and will retry, retry count: ${$ce1f303d0aa8ec51$var$bleTimeoutRetry}`),yield $ce1f303d0aa8ec51$var$wait(3e3),yield $ce1f303d0aa8ec51$var$connectDeviceForBle(r,i);else throw n}})}const $ce1f303d0aa8ec51$var$ensureConnected=(r,i,n,s)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){let r=0,a=i.payload&&"number"==typeof i.payload.retryCount?i.payload.retryCount:5,o=i.payload&&i.payload.pollIntervalTime||1e3,d=i.payload&&i.payload.timeout||1e4,f=null;$ce1f303d0aa8ec51$var$Log.debug(`EnsureConnected function start, MAX_RETRY_COUNT=${a}, POLL_INTERVAL_TIME=${o} `);let l=(u=o)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){return new Promise((o,c)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){var p;let h;let g=()=>!!s&&!!s.aborted&&(f&&clearTimeout(f),c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled)),!0);if(g())return;if(!$ce1f303d0aa8ec51$var$pollingState[n]){$ce1f303d0aa8ec51$var$Log.debug("EnsureConnected function stop, polling id: ",n),c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PollingStop));return}f&&clearTimeout(f),f=setTimeout(()=>{c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.PollingTimeout))},d),r+=1,$ce1f303d0aa8ec51$var$Log.debug("EnsureConnected function try count: ",r," poll interval time: ",u);try{yield $ce1f303d0aa8ec51$var$initDeviceList(i)}catch(r){if($ce1f303d0aa8ec51$var$Log.debug("device list error: ",r),[$3FhS8.HardwareErrorCode.BridgeNotInstalled,$3FhS8.HardwareErrorCode.BridgeTimeoutError,$3FhS8.HardwareErrorCode.BridgeNeedsPermission].includes(r.errorCode)){$ce1f303d0aa8ec51$var$_deviceList=void 0,c(r);return}r.errorCode===$3FhS8.HardwareErrorCode.TransportNotConfigured&&(yield $ce1f303d0aa8ec51$var$TransportManager.configure())}if(g())return;let m=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");try{if(h=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(m)?$ce1f303d0aa8ec51$var$initDeviceForBle(i):$ce1f303d0aa8ec51$var$initDevice(i)){if(f&&clearTimeout(f),$ce1f303d0aa8ec51$var$DataManager.isBleConnect(m)){if($ce1f303d0aa8ec51$var$bleTimeoutRetry=0,g())return;yield $ce1f303d0aa8ec51$var$connectDeviceForBle(i,h)}o(h);return}}catch(r){if($ce1f303d0aa8ec51$var$Log.debug("device error: ",r),[$3FhS8.HardwareErrorCode.BleCharacteristicNotifyChangeFailure].includes(r.errorCode)&&$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE)),[$3FhS8.HardwareErrorCode.BlePoweredOff,$3FhS8.HardwareErrorCode.BleUnsupported,$3FhS8.HardwareErrorCode.BlePermissionError,$3FhS8.HardwareErrorCode.BleLocationError,$3FhS8.HardwareErrorCode.BleLocationServicesDisabled,$3FhS8.HardwareErrorCode.BleDeviceNotBonded,$3FhS8.HardwareErrorCode.BleDeviceBondError,$3FhS8.HardwareErrorCode.BleDeviceBondedCanceled,$3FhS8.HardwareErrorCode.BleCharacteristicNotifyError,$3FhS8.HardwareErrorCode.BleTimeoutError,$3FhS8.HardwareErrorCode.BleWriteCharacteristicError,$3FhS8.HardwareErrorCode.BleAlreadyConnected,$3FhS8.HardwareErrorCode.FirmwareUpdateLimitOneDevice,$3FhS8.HardwareErrorCode.SelectDevice,$3FhS8.HardwareErrorCode.DeviceDetectInBootloaderMode,$3FhS8.HardwareErrorCode.BleCharacteristicNotifyChangeFailure,$3FhS8.HardwareErrorCode.BridgeNeedsPermission].includes(r.errorCode)){c(r);return}}if(r>a){f&&clearTimeout(f),$ce1f303d0aa8ec51$var$Log.debug("EnsureConnected get to max try count, will return: ",r),!$ce1f303d0aa8ec51$var$DataManager.isBrowserWebUsb(m)||(null===(p=i.payload)||void 0===p?void 0:p.skipWebDevicePrompt)?c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound)):($ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.WEB_DEVICE_PROMPT_ACCESS_PERMISSION)),c($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission)));return}if(!g())return setTimeout(()=>o(l(1.5*u)),u)}))});return $ce1f303d0aa8ec51$var$pollingState[n]=!0,l()}),$ce1f303d0aa8ec51$var$cancel=(r,i)=>{var n,s;let{requestQueue:a,setPrePendingCallPromise:o}=r;if(i)try{a.cancelCallbackTasks(i);let r=a.getRequestTasksId();$ce1f303d0aa8ec51$var$Log.debug(`Cancel Api connect requestQueues: length:${r.length} requestIds:${r.join(",")}`);let s=[];for(let i of r){let r=a.getTask(i);if($ce1f303d0aa8ec51$var$Log.debug("Cancel Api connect task: ",r),r&&(null===(n=r.method)||void 0===n?void 0:n.device)){if(!s.includes(r.method.device)){let{device:i}=r.method;o(null==i?void 0:i.interruptionFromUser()),s.push(i)}a.rejectRequest(i,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled))}}a.abortRequestsByConnectId(i)}catch(r){$ce1f303d0aa8ec51$var$Log.error("Cancel API Error: ",r)}else{let r=$ce1f303d0aa8ec51$var$DataManager.getSettings("env");if($ce1f303d0aa8ec51$var$DataManager.isBleConnect(r)){$ce1f303d0aa8ec51$var$Log.debug("Cancel Api all _deviceList: ");let r=[];for(let i of a.getRequestTasksId()){let n=a.getTask(i);if($ce1f303d0aa8ec51$var$Log.debug("Cancel Api connect task: ",n),n&&(null===(s=n.method)||void 0===s?void 0:s.device)){if(!r.includes(n.method.device)){let{device:i}=n.method;null==i||i.interruptionFromUser(),r.push(i)}a.rejectRequest(i,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled))}}}else null==$ce1f303d0aa8ec51$var$_deviceList||$ce1f303d0aa8ec51$var$_deviceList.allDevices().forEach(r=>{$ce1f303d0aa8ec51$var$Log.debug("device: ",r," device.hasDeviceAcquire: ",r.hasDeviceAcquire()),r.hasDeviceAcquire()&&(null==r||r.interruptionFromUser())}),a.getRequestTasksId().forEach(r=>{a.rejectRequest(r,$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallQueueActionCancelled))})}$ce1f303d0aa8ec51$var$cleanup(),$ce1f303d0aa8ec51$var$closePopup()},$ce1f303d0aa8ec51$var$checkPassphraseEnableState=(r,i)=>{if(r.useDevicePassphraseState){if((null==i?void 0:i.passphrase_protection)===!0){let i=null==r.payload.passphraseState||""===r.payload.passphraseState,n=!r.payload.useEmptyPassphrase&&!r.payload.skipPassphraseCheck;if(i&&n)throw $ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(r.payload.connectId),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceOpenedPassphrase)}if((null==i?void 0:i.passphrase_protection)===!1&&r.payload.passphraseState)throw $ce1f303d0aa8ec51$var$DevicePool.clearDeviceCache(r.payload.connectId),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotOpenedPassphrase)}},$ce1f303d0aa8ec51$var$cleanup=()=>{$ce1f303d0aa8ec51$var$_uiPromises=[],$ce1f303d0aa8ec51$var$Log.debug("Cleanup...")},$ce1f303d0aa8ec51$var$removeDeviceListener=r=>{r.removeAllListeners(),$ce1f303d0aa8ec51$var$DevicePool.emitter.removeAllListeners($ce1f303d0aa8ec51$var$DEVICE.CONNECT)},$ce1f303d0aa8ec51$var$closePopup=()=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.CLOSE_UI_WINDOW))},$ce1f303d0aa8ec51$var$onDeviceConnectHandler=r=>{let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)?r:r.toMessageObject();$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.CONNECT,{device:n}))},$ce1f303d0aa8ec51$var$onDeviceDisconnectHandler=r=>{let i=$ce1f303d0aa8ec51$var$DataManager.getSettings("env"),n=$ce1f303d0aa8ec51$var$DataManager.isBleConnect(i)?r:r.toMessageObject();$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,{device:n}))},$ce1f303d0aa8ec51$var$onDevicePinHandler=(...[r,i,n])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.log("request Input PIN");let s=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PIN,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PIN,{device:r.toMessageObject(),type:i}));let a=yield s.promise;n(null,a.payload)}),$ce1f303d0aa8ec51$var$onDeviceButtonHandler=(...[r,i])=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.BUTTON,Object.assign(Object.assign({},i),{device:r.toMessageObject()}))),"ButtonRequest_PinEntry"===i.code||"ButtonRequest_AttachPin"===i.code?($ce1f303d0aa8ec51$var$Log.log("request Confirm Input PIN or Attach PIN"),$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PIN,{device:r.toMessageObject(),type:i.code}))):($ce1f303d0aa8ec51$var$Log.log("request Confirm Button"),$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_BUTTON,{device:r.toMessageObject()})))},$ce1f303d0aa8ec51$var$onDeviceFeaturesHandler=(...[r,i])=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createDeviceMessage($ce1f303d0aa8ec51$var$DEVICE.FEATURES,Object.assign({},i)))},$ce1f303d0aa8ec51$var$onDevicePassphraseHandler=(...[r,i,n])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.debug("onDevicePassphraseHandler");let s=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PASSPHRASE,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PASSPHRASE,{device:r.toMessageObject(),passphraseState:r.passphraseState,existsAttachPinUser:i.existsAttachPinUser}));let a=yield s.promise,{value:o,passphraseOnDevice:d,save:f,attachPinOnDevice:l}=a.payload;n({passphrase:o.normalize("NFKD"),passphraseOnDevice:d,attachPinOnDevice:l,cache:f})}),$ce1f303d0aa8ec51$var$onEmptyPassphraseHandler=(...[r,,i])=>{$ce1f303d0aa8ec51$var$Log.debug("onEmptyPassphraseHandler"),i({passphrase:""})},$ce1f303d0aa8ec51$var$onEnterPassphraseOnDeviceHandler=(...[r])=>{$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE,{device:r.toMessageObject(),passphraseState:r.passphraseState}))},$ce1f303d0aa8ec51$var$onSelectDeviceInBootloaderForWebDeviceHandler=(...[r,i])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.debug("onSelectDeviceInBootloaderForWebDeviceHandler");let n=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,{device:r.toMessageObject()}));let s=yield n.promise;i(null,s.payload.deviceId)}),$ce1f303d0aa8ec51$var$onSelectDeviceForSwitchFirmwareWebDeviceHandler=(...[r,i])=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){$ce1f303d0aa8ec51$var$Log.debug("onSelectDeviceForSwitchFirmwareWebDeviceHandler");let n=$ce1f303d0aa8ec51$var$createUiPromise($ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,r);$ce1f303d0aa8ec51$var$postMessage($ce1f303d0aa8ec51$var$createUiMessage($ce1f303d0aa8ec51$var$UI_REQUEST.REQUEST_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,{device:r.toMessageObject()}));let s=yield n.promise;i(null,s.payload.deviceId)}),$ce1f303d0aa8ec51$var$postMessage=r=>{$ce1f303d0aa8ec51$var$_core&&$ce1f303d0aa8ec51$var$_core.emit($ce1f303d0aa8ec51$var$CORE_EVENT,r)},$ce1f303d0aa8ec51$var$createUiPromise=(r,i)=>{let n=$3FhS8.createDeferred(r,i);return $ce1f303d0aa8ec51$var$_uiPromises.push(n),n},$ce1f303d0aa8ec51$var$findUiPromise=r=>$ce1f303d0aa8ec51$var$_uiPromises.find(i=>i.id===r),$ce1f303d0aa8ec51$var$removeUiPromise=r=>{$ce1f303d0aa8ec51$var$_uiPromises=$ce1f303d0aa8ec51$var$_uiPromises.filter(i=>i!==r)};class $ce1f303d0aa8ec51$var$Core extends $ce1f303d0aa8ec51$var$events.exports{constructor(){super(),this.requestQueue=new $ce1f303d0aa8ec51$var$RequestQueue,this.methodSynchronize=$ce1f303d0aa8ec51$var$getSynchronize(),this.tracingContext=$ce1f303d0aa8ec51$var$createSdkTracingContext(),this.sdkInstanceId=this.tracingContext.sdkInstanceId,$ce1f303d0aa8ec51$var$Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`)}getCoreContext(){return{sdkInstanceId:this.sdkInstanceId,tracingContext:this.tracingContext,requestQueue:this.requestQueue,methodSynchronize:this.methodSynchronize,getPrePendingCallPromise:()=>this.prePendingCallPromise,setPrePendingCallPromise:r=>{this.prePendingCallPromise=r},registerCallbackTask:(r,i)=>{this.requestQueue.registerPendingCallbackTask(r,i)},waitForCallbackTasks:r=>this.requestQueue.waitForPendingCallbackTasks(r),cancelCallbackTasks:r=>this.requestQueue.cancelCallbackTasks(r)}}handleMessage(r){var i,n,s,a;return $ce1f303d0aa8ec51$var$__awaiter(this,void 0,void 0,function*(){switch(r.type){case $ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PIN:case $ce1f303d0aa8ec51$var$UI_RESPONSE.RECEIVE_PASSPHRASE:case $ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:case $ce1f303d0aa8ec51$var$UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE:{let i=$ce1f303d0aa8ec51$var$findUiPromise(r.type);i&&($ce1f303d0aa8ec51$var$Log.log("receive UI Response: ",r.type),i.resolve(r),$ce1f303d0aa8ec51$var$removeUiPromise(i));break}case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_UNSUPPORTED:case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_POWERED_OFF:case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_PERMISSION:case $ce1f303d0aa8ec51$var$UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE:case $ce1f303d0aa8ec51$var$UI_REQUEST.LOCATION_PERMISSION:case $ce1f303d0aa8ec51$var$UI_REQUEST.LOCATION_SERVICE_PERMISSION:$ce1f303d0aa8ec51$var$postMessage(r);break;case $ce1f303d0aa8ec51$var$IFRAME.CALL:{$ce1f303d0aa8ec51$var$Log.log("call API: ",r);let o=yield $ce1f303d0aa8ec51$var$callAPI(this.getCoreContext(),r),{success:d,payload:f}=o;if($ce1f303d0aa8ec51$var$Log.log("call API Response: ",o),d)return o;return Object.assign(Object.assign({},o),{payload:Object.assign(Object.assign({},f),{connectId:null!==(n=null===(i=r.payload)||void 0===i?void 0:i.connectId)&&void 0!==n?n:"",deviceId:null!==(a=null===(s=r.payload)||void 0===s?void 0:s.deviceId)&&void 0!==a?a:""})})}case $ce1f303d0aa8ec51$var$IFRAME.CANCEL:$ce1f303d0aa8ec51$var$Log.log("cancel API: ",r),$ce1f303d0aa8ec51$var$cancel(this.getCoreContext(),r.payload.connectId);break;case $ce1f303d0aa8ec51$var$IFRAME.CALLBACK:$ce1f303d0aa8ec51$var$Log.log("callback message: ",r),$ce1f303d0aa8ec51$var$postMessage(r)}return Promise.resolve(r)})}dispose(){$ce1f303d0aa8ec51$var$_deviceList=void 0,$ce1f303d0aa8ec51$var$_connector=void 0,$ce1f303d0aa8ec51$var$Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`),$ce1f303d0aa8ec51$var$cleanupSdkInstance(this.sdkInstanceId)}}const $ce1f303d0aa8ec51$var$initCore=()=>$ce1f303d0aa8ec51$var$_core=new $ce1f303d0aa8ec51$var$Core,$ce1f303d0aa8ec51$var$initConnector=()=>($ce1f303d0aa8ec51$var$_connector=new $ce1f303d0aa8ec51$var$DeviceConnector,$ce1f303d0aa8ec51$var$DevicePool.emitter.on($ce1f303d0aa8ec51$var$DEVICE.DISCONNECT,$ce1f303d0aa8ec51$var$onDeviceDisconnectHandler),$ce1f303d0aa8ec51$var$_connector),$ce1f303d0aa8ec51$var$initTransport=(r,i)=>{$ce1f303d0aa8ec51$var$TransportManager.setTransport(r,i)},$ce1f303d0aa8ec51$var$init=(r,i,n)=>$ce1f303d0aa8ec51$var$__awaiter(void 0,void 0,void 0,function*(){try{try{yield $ce1f303d0aa8ec51$var$DataManager.load(r),$ce1f303d0aa8ec51$var$initTransport(i,n)}catch(r){$ce1f303d0aa8ec51$var$Log.error("DataManager.load error")}return $ce1f303d0aa8ec51$var$enableLog($ce1f303d0aa8ec51$var$DataManager.getSettings("debug")),"react-native"!==$ce1f303d0aa8ec51$var$DataManager.getSettings("env")&&$ce1f303d0aa8ec51$var$setLoggerPostMessage($ce1f303d0aa8ec51$var$postMessage),$ce1f303d0aa8ec51$var$initCore(),$ce1f303d0aa8ec51$var$initConnector(),$ce1f303d0aa8ec51$var$_core}catch(r){$ce1f303d0aa8ec51$var$Log.error("core init",r)}}),$ce1f303d0aa8ec51$var$switchTransport=({env:r,Transport:i,plugin:n})=>{$ce1f303d0aa8ec51$var$DataManager.updateEnv(r),$ce1f303d0aa8ec51$var$TransportManager.setTransport(i,n),$ce1f303d0aa8ec51$var$_deviceList=void 0,$ce1f303d0aa8ec51$var$DevicePool.resetState(),$ce1f303d0aa8ec51$var$_connector=void 0,$ce1f303d0aa8ec51$var$initConnector()},$ce1f303d0aa8ec51$var$HardwareSdk=({init:r,call:i,dispose:n,eventEmitter:s,uiResponse:a,cancel:o,updateSettings:d,switchTransport:f})=>$ce1f303d0aa8ec51$var$inject({init:r,call:i,dispose:n,eventEmitter:s,uiResponse:a,cancel:o,updateSettings:d,switchTransport:f}),$ce1f303d0aa8ec51$var$HardwareSDKLowLevel=({init:r,call:i,dispose:n,eventEmitter:s,addHardwareGlobalEventListener:a,uiResponse:o,cancel:d,updateSettings:f,switchTransport:l})=>$ce1f303d0aa8ec51$var$lowLevelInject({init:r,call:i,dispose:n,eventEmitter:s,addHardwareGlobalEventListener:a,uiResponse:o,cancel:d,updateSettings:f,switchTransport:l}),$ce1f303d0aa8ec51$var$HardwareTopLevelSdk=()=>$ce1f303d0aa8ec51$var$topLevelInject();Object.defineProperty($ce1f303d0aa8ec51$exports,"PROTO",{enumerable:!0,get:function(){return $5xch2.Messages}}),$ce1f303d0aa8ec51$exports.CORE_EVENT=$ce1f303d0aa8ec51$var$CORE_EVENT,$ce1f303d0aa8ec51$exports.Core=$ce1f303d0aa8ec51$var$Core,$ce1f303d0aa8ec51$exports.DEFAULT_PRIORITY=$ce1f303d0aa8ec51$var$DEFAULT_PRIORITY,$ce1f303d0aa8ec51$exports.DEVICE=$ce1f303d0aa8ec51$var$DEVICE,$ce1f303d0aa8ec51$exports.DEVICE_EVENT=$ce1f303d0aa8ec51$var$DEVICE_EVENT,$ce1f303d0aa8ec51$exports.DataManager=$ce1f303d0aa8ec51$var$DataManager,$ce1f303d0aa8ec51$exports.DeviceModelToTypes=$ce1f303d0aa8ec51$var$DeviceModelToTypes,$ce1f303d0aa8ec51$exports.DeviceTypeToModels=$ce1f303d0aa8ec51$var$DeviceTypeToModels,$ce1f303d0aa8ec51$exports.FIRMWARE=$ce1f303d0aa8ec51$var$FIRMWARE,$ce1f303d0aa8ec51$exports.FIRMWARE_EVENT=$ce1f303d0aa8ec51$var$FIRMWARE_EVENT,$ce1f303d0aa8ec51$exports.HardwareSDKLowLevel=$ce1f303d0aa8ec51$var$HardwareSDKLowLevel,$ce1f303d0aa8ec51$exports.HardwareTopLevelSdk=$ce1f303d0aa8ec51$var$HardwareTopLevelSdk,$ce1f303d0aa8ec51$exports.IFRAME=$ce1f303d0aa8ec51$var$IFRAME,$ce1f303d0aa8ec51$exports.LOG=$ce1f303d0aa8ec51$var$LOG,$ce1f303d0aa8ec51$exports.LOG_EVENT=$ce1f303d0aa8ec51$var$LOG_EVENT,$ce1f303d0aa8ec51$exports.LogBlockEvent=$ce1f303d0aa8ec51$var$LogBlockEvent,$ce1f303d0aa8ec51$exports.RESPONSE_EVENT=$ce1f303d0aa8ec51$var$RESPONSE_EVENT,$ce1f303d0aa8ec51$exports.UI_EVENT=$ce1f303d0aa8ec51$var$UI_EVENT,$ce1f303d0aa8ec51$exports.UI_REQUEST=$ce1f303d0aa8ec51$var$UI_REQUEST,$ce1f303d0aa8ec51$exports.UI_RESPONSE=$ce1f303d0aa8ec51$var$UI_RESPONSE,$ce1f303d0aa8ec51$exports.checkNeedUpdateBootForClassicAndMini=$ce1f303d0aa8ec51$var$checkNeedUpdateBootForClassicAndMini,$ce1f303d0aa8ec51$exports.checkNeedUpdateBootForTouch=$ce1f303d0aa8ec51$var$checkNeedUpdateBootForTouch,$ce1f303d0aa8ec51$exports.cleanupCallback=$ce1f303d0aa8ec51$var$cleanupCallback,$ce1f303d0aa8ec51$exports.cleanupSdkInstance=$ce1f303d0aa8ec51$var$cleanupSdkInstance,$ce1f303d0aa8ec51$exports.completeRequestContext=$ce1f303d0aa8ec51$var$completeRequestContext,$ce1f303d0aa8ec51$exports.corsValidator=$ce1f303d0aa8ec51$var$corsValidator,$ce1f303d0aa8ec51$exports.createDeviceMessage=$ce1f303d0aa8ec51$var$createDeviceMessage,$ce1f303d0aa8ec51$exports.createErrorMessage=$ce1f303d0aa8ec51$var$createErrorMessage,$ce1f303d0aa8ec51$exports.createFirmwareMessage=$ce1f303d0aa8ec51$var$createFirmwareMessage,$ce1f303d0aa8ec51$exports.createIFrameMessage=$ce1f303d0aa8ec51$var$createIFrameMessage,$ce1f303d0aa8ec51$exports.createLogMessage=$ce1f303d0aa8ec51$var$createLogMessage,$ce1f303d0aa8ec51$exports.createRequestContext=$ce1f303d0aa8ec51$var$createRequestContext,$ce1f303d0aa8ec51$exports.createResponseMessage=$ce1f303d0aa8ec51$var$createResponseMessage,$ce1f303d0aa8ec51$exports.createSdkTracingContext=$ce1f303d0aa8ec51$var$createSdkTracingContext,$ce1f303d0aa8ec51$exports.createUiMessage=$ce1f303d0aa8ec51$var$createUiMessage,$ce1f303d0aa8ec51$exports.createUiResponse=$ce1f303d0aa8ec51$var$createUiResponse,$ce1f303d0aa8ec51$exports.default=$ce1f303d0aa8ec51$var$HardwareSdk,$ce1f303d0aa8ec51$exports.enableLog=$ce1f303d0aa8ec51$var$enableLog,$ce1f303d0aa8ec51$exports.executeCallback=$ce1f303d0aa8ec51$var$executeCallback,$ce1f303d0aa8ec51$exports.formatRequestContext=$ce1f303d0aa8ec51$var$formatRequestContext,$ce1f303d0aa8ec51$exports.generateInstanceId=$ce1f303d0aa8ec51$var$generateInstanceId,$ce1f303d0aa8ec51$exports.generateSdkInstanceId=$ce1f303d0aa8ec51$var$generateSdkInstanceId,$ce1f303d0aa8ec51$exports.getActiveRequestsByDeviceInstance=$ce1f303d0aa8ec51$var$getActiveRequestsByDeviceInstance,$ce1f303d0aa8ec51$exports.getAutoLockOptions=$ce1f303d0aa8ec51$var$getAutoLockOptions,$ce1f303d0aa8ec51$exports.getAutoShutDownOptions=$ce1f303d0aa8ec51$var$getAutoShutDownOptions,$ce1f303d0aa8ec51$exports.getDeviceBLEFirmwareVersion=$ce1f303d0aa8ec51$var$getDeviceBLEFirmwareVersion,$ce1f303d0aa8ec51$exports.getDeviceBleName=$ce1f303d0aa8ec51$var$getDeviceBleName,$ce1f303d0aa8ec51$exports.getDeviceBoardloaderVersion=$ce1f303d0aa8ec51$var$getDeviceBoardloaderVersion,$ce1f303d0aa8ec51$exports.getDeviceBootloaderVersion=$ce1f303d0aa8ec51$var$getDeviceBootloaderVersion,$ce1f303d0aa8ec51$exports.getDeviceFirmwareVersion=$ce1f303d0aa8ec51$var$getDeviceFirmwareVersion,$ce1f303d0aa8ec51$exports.getDeviceLabel=$ce1f303d0aa8ec51$var$getDeviceLabel,$ce1f303d0aa8ec51$exports.getDeviceType=$ce1f303d0aa8ec51$var$getDeviceType,$ce1f303d0aa8ec51$exports.getDeviceTypeByBleName=$ce1f303d0aa8ec51$var$getDeviceTypeByBleName,$ce1f303d0aa8ec51$exports.getDeviceUUID=$ce1f303d0aa8ec51$var$getDeviceUUID,$ce1f303d0aa8ec51$exports.getEnv=$ce1f303d0aa8ec51$var$getEnv,$ce1f303d0aa8ec51$exports.getFirmwareType=$ce1f303d0aa8ec51$var$getFirmwareType,$ce1f303d0aa8ec51$exports.getFirmwareUpdateField=$ce1f303d0aa8ec51$var$getFirmwareUpdateField,$ce1f303d0aa8ec51$exports.getFirmwareUpdateFieldArray=$ce1f303d0aa8ec51$var$getFirmwareUpdateFieldArray,$ce1f303d0aa8ec51$exports.getHDPath=$ce1f303d0aa8ec51$var$getHDPath,$ce1f303d0aa8ec51$exports.getHomeScreenDefaultList=$ce1f303d0aa8ec51$var$getHomeScreenDefaultList,$ce1f303d0aa8ec51$exports.getHomeScreenHex=$ce1f303d0aa8ec51$var$getHomeScreenHex,$ce1f303d0aa8ec51$exports.getHomeScreenSize=$ce1f303d0aa8ec51$var$getHomeScreenSize,$ce1f303d0aa8ec51$exports.getLanguageConfig=$ce1f303d0aa8ec51$var$getLanguageConfig,$ce1f303d0aa8ec51$exports.getLog=$ce1f303d0aa8ec51$var$getLog,$ce1f303d0aa8ec51$exports.getLogger=$ce1f303d0aa8ec51$var$getLogger,$ce1f303d0aa8ec51$exports.getMethodVersionRange=$ce1f303d0aa8ec51$var$getMethodVersionRange,$ce1f303d0aa8ec51$exports.getOutputScriptType=$ce1f303d0aa8ec51$var$getOutputScriptType,$ce1f303d0aa8ec51$exports.getSDKVersion=$ce1f303d0aa8ec51$var$getSDKVersion,$ce1f303d0aa8ec51$exports.getScriptType=$ce1f303d0aa8ec51$var$getScriptType,$ce1f303d0aa8ec51$exports.getTimeStamp=$ce1f303d0aa8ec51$var$getTimeStamp,$ce1f303d0aa8ec51$exports.httpRequest=$ce1f303d0aa8ec51$var$httpRequest,$ce1f303d0aa8ec51$exports.initCore=$ce1f303d0aa8ec51$var$init,$ce1f303d0aa8ec51$exports.isBleConnect=$ce1f303d0aa8ec51$var$isBleConnect,$ce1f303d0aa8ec51$exports.isValidVersionArray=$ce1f303d0aa8ec51$var$isValidVersionArray,$ce1f303d0aa8ec51$exports.isValidVersionString=$ce1f303d0aa8ec51$var$isValidVersionString,$ce1f303d0aa8ec51$exports.normalizeVersionArray=$ce1f303d0aa8ec51$var$normalizeVersionArray,$ce1f303d0aa8ec51$exports.parseConnectSettings=$ce1f303d0aa8ec51$var$parseConnectSettings,$ce1f303d0aa8ec51$exports.parseMessage=$ce1f303d0aa8ec51$var$parseMessage,$ce1f303d0aa8ec51$exports.patchFeatures=$ce1f303d0aa8ec51$var$patchFeatures,$ce1f303d0aa8ec51$exports.preloadSessionCache=$ce1f303d0aa8ec51$var$preloadSessionCache,$ce1f303d0aa8ec51$exports.safeThrowError=$ce1f303d0aa8ec51$var$safeThrowError,$ce1f303d0aa8ec51$exports.setLoggerPostMessage=$ce1f303d0aa8ec51$var$setLoggerPostMessage,$ce1f303d0aa8ec51$exports.supportInputPinOnSoftware=$ce1f303d0aa8ec51$var$supportInputPinOnSoftware,$ce1f303d0aa8ec51$exports.switchTransport=$ce1f303d0aa8ec51$var$switchTransport,$ce1f303d0aa8ec51$exports.updateRequestContext=$ce1f303d0aa8ec51$var$updateRequestContext,$ce1f303d0aa8ec51$exports.versionCompare=$ce1f303d0aa8ec51$var$versionCompare,$ce1f303d0aa8ec51$exports.versionSplit=$ce1f303d0aa8ec51$var$versionSplit,$ce1f303d0aa8ec51$exports.wait=$ce1f303d0aa8ec51$var$wait,$ce1f303d0aa8ec51$exports.whitelist=$ce1f303d0aa8ec51$var$whitelist,$ce1f303d0aa8ec51$exports.whitelistExtension=$ce1f303d0aa8ec51$var$whitelistExtension;var $3FhS8=parcelRequire("3FhS8"),$9f5d7f38984024f0$exports={},$5xch2=parcelRequire("5xch2"),$3FhS8=parcelRequire("3FhS8"),$68e51debd7d61343$exports={},$awmEs=parcelRequire("awmEs"),$68e51debd7d61343$require$Buffer=$awmEs.Buffer;const $68e51debd7d61343$var$hasBuffer=void 0!==$68e51debd7d61343$require$Buffer,$68e51debd7d61343$var$suspectProtoRx=/"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*:/,$68e51debd7d61343$var$suspectConstructorRx=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/;function $68e51debd7d61343$var$_parse(r,i,n){null==n&&null!==i&&"object"==typeof i&&(n=i,i=void 0),$68e51debd7d61343$var$hasBuffer&&$68e51debd7d61343$require$Buffer.isBuffer(r)&&(r=r.toString()),r&&65279===r.charCodeAt(0)&&(r=r.slice(1));let s=JSON.parse(r,i);if(null===s||"object"!=typeof s)return s;let a=n&&n.protoAction||"error",o=n&&n.constructorAction||"error";if("ignore"===a&&"ignore"===o)return s;if("ignore"!==a&&"ignore"!==o){if(!1===$68e51debd7d61343$var$suspectProtoRx.test(r)&&!1===$68e51debd7d61343$var$suspectConstructorRx.test(r))return s}else if("ignore"!==a&&"ignore"===o){if(!1===$68e51debd7d61343$var$suspectProtoRx.test(r))return s}else if(!1===$68e51debd7d61343$var$suspectConstructorRx.test(r))return s;return $68e51debd7d61343$var$filter(s,{protoAction:a,constructorAction:o,safe:n&&n.safe})}function $68e51debd7d61343$var$filter(r,{protoAction:i="error",constructorAction:n="error",safe:s}={}){let a=[r];for(;a.length;){let r=a;for(let o of(a=[],r)){if("ignore"!==i&&Object.prototype.hasOwnProperty.call(o,"__proto__")){if(!0===s)return null;if("error"===i)throw SyntaxError("Object contains forbidden prototype property");delete o.__proto__}if("ignore"!==n&&Object.prototype.hasOwnProperty.call(o,"constructor")&&Object.prototype.hasOwnProperty.call(o.constructor,"prototype")){if(!0===s)return null;if("error"===n)throw SyntaxError("Object contains forbidden prototype property");delete o.constructor}for(let r in o){let i=o[r];i&&"object"==typeof i&&a.push(i)}}}return r}function $68e51debd7d61343$var$parse(r,i,n){let{stackTraceLimit:s}=Error;Error.stackTraceLimit=0;try{return $68e51debd7d61343$var$_parse(r,i,n)}finally{Error.stackTraceLimit=s}}function $68e51debd7d61343$var$safeParse(r,i){let{stackTraceLimit:n}=Error;Error.stackTraceLimit=0;try{return $68e51debd7d61343$var$_parse(r,i,{safe:!0})}catch{return}finally{Error.stackTraceLimit=n}}function $9f5d7f38984024f0$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}$68e51debd7d61343$exports=$68e51debd7d61343$var$parse,$68e51debd7d61343$exports.default=$68e51debd7d61343$var$parse,$68e51debd7d61343$exports.parse=$68e51debd7d61343$var$parse,$68e51debd7d61343$exports.safeParse=$68e51debd7d61343$var$safeParse,$68e51debd7d61343$exports.scan=$68e51debd7d61343$var$filter;var $9f5d7f38984024f0$var$transport__default=$9f5d7f38984024f0$var$_interopDefaultLegacy($5xch2),$9f5d7f38984024f0$var$axios__default=$9f5d7f38984024f0$var$_interopDefaultLegacy($4ce02f68f14348c9$exports),$9f5d7f38984024f0$var$secureJSON__default=$9f5d7f38984024f0$var$_interopDefaultLegacy($68e51debd7d61343$exports);function $9f5d7f38984024f0$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function $9f5d7f38984024f0$var$contentType(r){return"string"==typeof r?"text/plain":"application/json"}function $9f5d7f38984024f0$var$wrapBody(r){return"string"==typeof r?r:JSON.stringify(r)}function $9f5d7f38984024f0$var$parseResult(r){try{let i=$9f5d7f38984024f0$var$secureJSON__default.default.parse(r);if("object"!=typeof i)throw Error("Invalid response");return i}catch(i){return r}}function $9f5d7f38984024f0$var$request(r){var i,n;return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let s={url:r.url,method:r.method,data:$9f5d7f38984024f0$var$wrapBody(r.body),withCredentials:!1,headers:{"Content-Type":$9f5d7f38984024f0$var$contentType(null==r.body?"":r.body)},timeout:null!==(i=r.timeout)&&void 0!==i?i:void 0,transformResponse:r=>r};try{let r=yield $9f5d7f38984024f0$var$axios__default.default.request(s);if(200==+r.status)return $9f5d7f38984024f0$var$parseResult(r.data);let i=$9f5d7f38984024f0$var$parseResult(r.data);if("object"==typeof i&&null!=i&&null!=i.error)throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:i.error});throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:r.data})}catch(s){let r=s,i=null===(n=null==r?void 0:r.response)||void 0===n?void 0:n.data;if("string"==typeof i){let r=$9f5d7f38984024f0$var$parseResult(i);if("object"==typeof r&&null!==r&&r.error)throw $3FhS8.CreateHardwareErrorByBridgeError(String(r.error));throw $3FhS8.CreateHardwareErrorByBridgeError(i)}throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.BridgeNetworkError,message:(null==r?void 0:r.message)||"Bridge network error"})}})}"function"==typeof SuppressedError&&SuppressedError,$9f5d7f38984024f0$var$axios__default.default.interceptors.request.use(r=>{var i;return"undefined"!=typeof window||(null===(i=r.url)||void 0===i?void 0:i.startsWith("http://localhost:21320"))&&!r.headers.get("Origin")&&r.headers.set("Origin","https://jssdk.onekey.so"),r});const $9f5d7f38984024f0$var$DEFAULT_URL="http://localhost:21320",{check:$9f5d7f38984024f0$var$check,buildOne:$9f5d7f38984024f0$var$buildOne,receiveOne:$9f5d7f38984024f0$var$receiveOne,parseConfigure:$9f5d7f38984024f0$var$parseConfigure}=$9f5d7f38984024f0$var$transport__default.default;class $9f5d7f38984024f0$var$HttpTransport{constructor(r){this.name="HttpTransport",this.configured=!1,this.stopped=!1,this.url=null==r?$9f5d7f38984024f0$var$DEFAULT_URL:r}_post(r){return this.stopped?Promise.reject($3FhS8.ERRORS.TypedError("Transport stopped.")):$9f5d7f38984024f0$var$request(Object.assign(Object.assign({},r),{method:"POST",url:this.url+r.url}))}init(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){this.Log=r;let i=yield this._silentInit();return i})}_silentInit(){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let r=yield $9f5d7f38984024f0$var$request({url:this.url,method:"POST",timeout:3e3}),i=$9f5d7f38984024f0$var$check.info(r);return i.version})}configure(r){let i=$9f5d7f38984024f0$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null===r)throw $3FhS8.ERRORS.TypedError("Http-Transport does not support listen without previous.");let i=yield this._post({url:"/listen",body:r}),n=$9f5d7f38984024f0$var$check.devices(i);return n})}enumerate(){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let r=yield this._post({url:"/enumerate"}),i=$9f5d7f38984024f0$var$check.devices(r);return i.map(r=>Object.assign(Object.assign({},r),{commType:"bridge"}))})}_acquireMixed(r){let i=null==r.previous?"null":encodeURIComponent(r.previous),n=encodeURIComponent(r.path),s=`/acquire/${n}/${i}`;return this._post({url:s})}acquire(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let i=yield this._acquireMixed(r);return $9f5d7f38984024f0$var$check.acquire(i)})}release(r,i){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){let n=this._post({url:`/release/${r}`});i||(yield n)})}call(r,i,n){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages;$5xch2.LogBlockCommand.has(i)?this.Log.debug("call-"," name: ",i):this.Log.debug("call-"," name: ",i," data: ",n);let a=$9f5d7f38984024f0$var$buildOne(s,i,n),o=a.toString("hex"),d=yield this._post({url:`/call/${r}`,body:o,timeout:"Initialize"===i?1e4:void 0});if("string"!=typeof d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let f=$9f5d7f38984024f0$var$receiveOne(s,d);return $9f5d7f38984024f0$var$check.call(f)})}post(r,i,n){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages,a=$9f5d7f38984024f0$var$buildOne(s,i,n).toString("hex");yield this._post({url:`/post/${r}`,body:a})})}read(r){return $9f5d7f38984024f0$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let i=this._messages,n=yield this._post({url:`/read/${r}`});if("string"!=typeof n)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let s=$9f5d7f38984024f0$var$receiveOne(i,n);return $9f5d7f38984024f0$var$check.call(s)})}requestDevice(){return Promise.reject()}stop(){this.stopped=!0}cancel(){this.Log.debug("canceled")}}$9f5d7f38984024f0$exports=$9f5d7f38984024f0$var$HttpTransport;var $b837a238e3579d4d$exports={},$awmEs=parcelRequire("awmEs"),$b837a238e3579d4d$require$Buffer=$awmEs.Buffer;Object.defineProperty($b837a238e3579d4d$exports,"__esModule",{value:!0});var $5xch2=parcelRequire("5xch2"),$3FhS8=parcelRequire("3FhS8"),$2kkR6=parcelRequire("2kkR6");function $b837a238e3579d4d$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $b837a238e3579d4d$var$transport__default=$b837a238e3579d4d$var$_interopDefaultLegacy($5xch2),$b837a238e3579d4d$var$ByteBuffer__default=$b837a238e3579d4d$var$_interopDefaultLegacy($2kkR6);function $b837a238e3579d4d$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const{parseConfigure:$b837a238e3579d4d$var$parseConfigure$1,buildEncodeBuffers:$b837a238e3579d4d$var$buildEncodeBuffers,decodeProtocol:$b837a238e3579d4d$var$decodeProtocol,receiveOne:$b837a238e3579d4d$var$receiveOne$1,check:$b837a238e3579d4d$var$check$1}=$b837a238e3579d4d$var$transport__default.default,$b837a238e3579d4d$var$CONFIGURATION_ID=1,$b837a238e3579d4d$var$INTERFACE_ID=0,$b837a238e3579d4d$var$ENDPOINT_ID=1,$b837a238e3579d4d$var$PACKET_SIZE=64,$b837a238e3579d4d$var$HEADER_LENGTH=6,$b837a238e3579d4d$var$PACKET_IO_MAX_RETRIES=3,$b837a238e3579d4d$var$PACKET_IO_RETRY_DELAY=300;class $b837a238e3579d4d$var$WebUsbTransport{constructor(){this.name="WebUsbTransport",this.stopped=!1,this.configured=!1,this.deviceList=[],this.configurationId=$b837a238e3579d4d$var$CONFIGURATION_ID,this.endpointId=$b837a238e3579d4d$var$ENDPOINT_ID,this.interfaceId=$b837a238e3579d4d$var$INTERFACE_ID}init(r){this.Log=r;let{usb:i}=navigator;if(!i)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"WebUSB is not supported by current browsers");this.usb=i}configure(r){let i=$b837a238e3579d4d$var$parseConfigure$1(r);this.configured=!0,this.messages=i}promptDeviceAccess(){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(!this.usb)return null;try{let r=yield this.usb.requestDevice({filters:$3FhS8.ONEKEY_WEBUSB_FILTER});return r}catch(r){return this.Log.debug("requestDevice error: ",r instanceof Error?`${r.name}: ${r.message}`:String(r)),null}})}enumerate(){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){return yield this.getConnectedDevices(),this.deviceList})}getConnectedDevices(){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(!this.usb)return[];let r=yield this.usb.getDevices(),i=r.filter(r=>{let i=$3FhS8.ONEKEY_WEBUSB_FILTER.some(i=>r.vendorId===i.vendorId&&r.productId===i.productId),n="string"==typeof r.serialNumber&&r.serialNumber.length>0;return i&&n});return this.deviceList=i.map(r=>({path:r.serialNumber,device:r,commType:"webusb"})),this.deviceList})}acquire(r){var i;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(r.path)try{return yield this.connect(null!==(i=r.path)&&void 0!==i?i:"",!0),yield Promise.resolve(r.path)}catch(r){throw this.Log.debug("acquire error: ",r instanceof Error?`${r.name}: ${r.message}`:String(r)),r}})}findDevice(r){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){0===this.deviceList.length&&(yield this.getConnectedDevices());let i=this.deviceList.find(i=>i.path===r);if(null==i&&(yield this.getConnectedDevices(),null==(i=this.deviceList.find(i=>i.path===r))))throw Error("Action was interrupted.");return i.device})}connect(r,i){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){let n=5;for(let s=0;s=$b837a238e3579d4d$var$PACKET_SIZE?f.append(n):f.append(n.slice(0,d-f.offset))}f.reset();let l=f.toBuffer();return $b837a238e3579d4d$require$Buffer.from(l).toString("hex")})}release(r){return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){let i=yield this.findDevice(r);yield i.releaseInterface(this.interfaceId),yield i.close()})}}const{parseConfigure:$b837a238e3579d4d$var$parseConfigure,buildBuffers:$b837a238e3579d4d$var$buildBuffers,receiveOne:$b837a238e3579d4d$var$receiveOne,check:$b837a238e3579d4d$var$check}=$b837a238e3579d4d$var$transport__default.default;class $b837a238e3579d4d$var$ElectronBleTransport{constructor(){this.name="ElectronBleTransport",this.configured=!1,this.runPromise=null,this.connectedDevices=new Set,this.dataBuffers=new Map,this.notificationCleanups=new Map,this.disconnectCleanups=new Map}handleBluetoothError(r){if(r&&"object"==typeof r){if("code"in r){if(r.code===$3FhS8.HardwareErrorCode.BlePoweredOff)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePoweredOff);if(r.code===$3FhS8.HardwareErrorCode.BleUnsupported)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleUnsupported);if(r.code===$3FhS8.HardwareErrorCode.BlePermissionError)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePermissionError)}let i=r.message||String(r),n=$3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.BlePoweredOff],s=$3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.BleUnsupported],a=$3FhS8.HardwareErrorCodeMessage[$3FhS8.HardwareErrorCode.BlePermissionError];if(i.includes(n)||i.includes("poweredOff"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePoweredOff);if(i.includes(s)||i.includes("unsupported"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleUnsupported);if(i.includes(a)||i.includes("unauthorized"))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BlePermissionError)}throw r}cleanupDeviceState(r){this.connectedDevices.delete(r),this.dataBuffers.delete(r);let i=this.notificationCleanups.get(r);i&&(i(),this.notificationCleanups.delete(r));let n=this.disconnectCleanups.get(r);n&&(n(),this.disconnectCleanups.delete(r))}init(r,i){var n,s;if(this.Log=r,this.emitter=i,!(null===(n=window.desktopApi)||void 0===n?void 0:n.nobleBle))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.RuntimeError,"Noble BLE API is not available. Please ensure you are running in Electron with Noble support.");null===(s=this.Log)||void 0===s||s.debug("[Transport] Noble BLE Transport initialized")}configure(r){let i=$b837a238e3579d4d$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(){}enumerate(){var r,i;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){try{if(!(null===(r=window.desktopApi)||void 0===r?void 0:r.nobleBle))throw Error("Noble BLE API not available");let i=yield window.desktopApi.nobleBle.enumerate();return i}catch(r){null===(i=this.Log)||void 0===i||i.error("[Transport] Noble BLE enumerate failed:",r),this.handleBluetoothError(r)}})}acquire(r){var i,n,s;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){let{uuid:a,forceCleanRunPromise:o}=r;if(!a)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleRequiredUUID);o&&this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleForceCleanRunPromise));try{if(!(null===(i=window.desktopApi)||void 0===i?void 0:i.nobleBle))throw Error("Noble BLE API not available");let r=yield window.desktopApi.nobleBle.getDevice(a);if(!r)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.DeviceNotFound,`Device ${a} not found`);try{yield window.desktopApi.nobleBle.connect(a),this.connectedDevices.add(a)}catch(r){this.handleBluetoothError(r)}this.dataBuffers.set(a,{buffer:[],bufferLength:0}),yield window.desktopApi.nobleBle.subscribe(a);let s=window.desktopApi.nobleBle.onNotification((r,i)=>{r===a&&this.handleNotificationData(a,i)});this.notificationCleanups.set(a,s);let o=window.desktopApi.nobleBle.onDeviceDisconnected(r=>{var i;r.id===a&&(this.cleanupDeviceState(a),null===(i=this.emitter)||void 0===i||i.emit("device-disconnect",{name:r.name,id:r.id,connectId:r.id}))});return this.disconnectCleanups.set(a,o),null===(n=this.emitter)||void 0===n||n.emit("device-connect",{name:r.name,id:r.id,connectId:r.id}),{uuid:a,path:a}}catch(r){throw null===(s=this.Log)||void 0===s||s.error("[Transport] Noble BLE acquire failed:",r),r}})}release(r){var i,n,s;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){try{this.connectedDevices.has(r)&&((null===(i=window.desktopApi)||void 0===i?void 0:i.nobleBle)&&(yield window.desktopApi.nobleBle.unsubscribe(r)),(null===(n=window.desktopApi)||void 0===n?void 0:n.nobleBle)&&(yield window.desktopApi.nobleBle.disconnect(r)),this.cleanupDeviceState(r))}catch(i){null===(s=this.Log)||void 0===s||s.error("[Transport] Noble BLE release failed:",i),this.cleanupDeviceState(r)}})}handleNotificationData(r,i){var n,s;if("PAIRING_REJECTED"===i){null===(n=this.Log)||void 0===n||n.debug("[Transport] Pairing rejection detected for device:",r),this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleDeviceBondedCanceled));return}let a=this.processNotificationPacket(r,i);if(a.error){null===(s=this.Log)||void 0===s||s.error("[Transport] Packet processing error:",a.error),this.runPromise&&this.runPromise.reject($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleWriteCharacteristicError));return}a.isComplete&&a.completePacket&&this.runPromise&&this.runPromise.resolve(a.completePacket)}call(r,i,n){var s,a,o,d,f,l,u;return $b837a238e3579d4d$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let c="Initialize"===i||"Cancel"===i;if(this.runPromise&&!c)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportCallInProgress);if(!this.connectedDevices.has(r))throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotFound,`Device ${r} not connected`);this.runPromise=$3FhS8.createDeferred();let p=this._messages;"ResourceUpdate"===i||"ResourceAck"===i?null===(s=this.Log)||void 0===s||s.debug("[Transport] Noble BLE call","name:",i,"data:",{file_name:null==n?void 0:n.file_name,hash:null==n?void 0:n.hash}):$5xch2.LogBlockCommand.has(i)?null===(a=this.Log)||void 0===a||a.debug("[Transport] Noble BLE call","name:",i):null===(o=this.Log)||void 0===o||o.debug("[Transport] Noble BLE call","name:",i,"data:",n);let h=$b837a238e3579d4d$var$buildBuffers(p,i,n);try{if(!(null===(d=window.desktopApi)||void 0===d?void 0:d.nobleBle))throw Error("Noble BLE write API not available");for(let i=0;iparseInt(r,16))),o=this.dataBuffers.get(r);if(!o)return{isComplete:!1,error:"No buffer state for device"};if($3FhS8.isHeaderChunk(a)){let r=new DataView(a.buffer);o.bufferLength=r.getInt32(5,!1),o.buffer=[...a.subarray(3)]}else o.buffer=o.buffer.concat([...a]);if(o.buffer.length-$5xch2.COMMON_HEADER_SIZE>=o.bufferLength){let r=new Uint8Array(o.buffer);o.bufferLength=0,o.buffer=[];let i=Array.from(r).map(r=>r.toString(16).padStart(2,"0")).join("");return{isComplete:!0,completePacket:i}}return{isComplete:!1}}catch(r){return{isComplete:!1,error:`Packet processing error: ${r}`}}}}$b837a238e3579d4d$exports.ElectronBleTransport=$b837a238e3579d4d$var$ElectronBleTransport,$b837a238e3579d4d$exports.WebUsbTransport=$b837a238e3579d4d$var$WebUsbTransport;var $3187491a92e9934c$exports={},$3FhS8=parcelRequire("3FhS8"),$5xch2=parcelRequire("5xch2");function $3187491a92e9934c$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $3187491a92e9934c$var$transport__default=$3187491a92e9934c$var$_interopDefaultLegacy($5xch2);function $3187491a92e9934c$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const{check:$3187491a92e9934c$var$check,buildBuffers:$3187491a92e9934c$var$buildBuffers,receiveOne:$3187491a92e9934c$var$receiveOne,parseConfigure:$3187491a92e9934c$var$parseConfigure}=$3187491a92e9934c$var$transport__default.default;class $3187491a92e9934c$var$LowlevelTransport{constructor(){this.configured=!1,this.plugin={}}init(r,i,n){this.Log=r,this.emitter=i,this.plugin=n,this.plugin.init()}configure(r){let i=$3187491a92e9934c$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(){}enumerate(){return this.plugin.enumerate()}acquire(r){var i;return $3187491a92e9934c$var$__awaiter(this,void 0,void 0,function*(){try{return yield this.plugin.connect(r.uuid),{uuid:r.uuid}}catch(r){throw this.Log.debug("lowlelvel transport connect error: ",r),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.LowlevelTrasnportConnectError,null!==(i=r.message)&&void 0!==i?i:r)}})}release(r){return $3187491a92e9934c$var$__awaiter(this,void 0,void 0,function*(){try{return yield this.plugin.disconnect(r),!0}catch(r){return this.Log.debug("lowlelvel transport disconnect error: ",r),!1}})}call(r,i,n){return $3187491a92e9934c$var$__awaiter(this,void 0,void 0,function*(){if(null===this._messages||!this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages;$5xch2.LogBlockCommand.has(i)?this.Log.debug("lowlevel-transport","call-"," name: ",i):this.Log.debug("lowlevel-transport","call-"," name: ",i," data: ",n);let a=$3187491a92e9934c$var$buildBuffers(s,i,n);for(let i of a){let n=i.toString("hex");this.Log.debug("send hex strting: ",n);try{yield this.plugin.send(r,n)}catch(r){throw this.Log.debug("lowlevel transport send error: ",r),$3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.BleWriteCharacteristicError,r.reason)}}try{let r=yield this.plugin.receive();if("string"!=typeof r)throw Error("Returning data is not string");this.Log.debug("receive data: ",r);let i=$3187491a92e9934c$var$receiveOne(s,r);return $3187491a92e9934c$var$check.call(i)}catch(r){throw this.Log.error("lowlevel call error: ",r),r}})}cancel(){this.Log.debug("lowlevel-transport","cancel")}}$3187491a92e9934c$exports=$3187491a92e9934c$var$LowlevelTransport;var $8c2252da2d106adc$exports={},$5xch2=parcelRequire("5xch2"),$3FhS8=parcelRequire("3FhS8");function $8c2252da2d106adc$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var $8c2252da2d106adc$var$transport__default=$8c2252da2d106adc$var$_interopDefaultLegacy($5xch2),$8c2252da2d106adc$var$axios__default=$8c2252da2d106adc$var$_interopDefaultLegacy($4ce02f68f14348c9$exports),$8c2252da2d106adc$var$secureJSON__default=$8c2252da2d106adc$var$_interopDefaultLegacy($68e51debd7d61343$exports);function $8c2252da2d106adc$var$__awaiter(r,i,n,s){function a(r){return r instanceof n?r:new n(function(i){i(r)})}return new(n||(n=Promise))(function(n,o){function d(r){try{l(s.next(r))}catch(r){o(r)}}function f(r){try{l(s.throw(r))}catch(r){o(r)}}function l(r){r.done?n(r.value):a(r.value).then(d,f)}l((s=s.apply(r,i||[])).next())})}function $8c2252da2d106adc$var$contentType(r){return"string"==typeof r?"text/plain":"application/json"}function $8c2252da2d106adc$var$wrapBody(r){return"string"==typeof r?r:JSON.stringify(r)}function $8c2252da2d106adc$var$parseResult(r){try{let i=$8c2252da2d106adc$var$secureJSON__default.default.parse(r);if("object"!=typeof i)throw Error("Invalid response");return i}catch(i){return r}}function $8c2252da2d106adc$var$request(r){var i;return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let n={url:r.url,method:r.method,data:$8c2252da2d106adc$var$wrapBody(r.body),withCredentials:!1,headers:{"Content-Type":$8c2252da2d106adc$var$contentType(null==r.body?"":r.body)},timeout:null!==(i=r.timeout)&&void 0!==i?i:void 0,transformResponse:r=>r},s=yield $8c2252da2d106adc$var$axios__default.default.request(n);if(200==+s.status)return $8c2252da2d106adc$var$parseResult(s.data);let a=$8c2252da2d106adc$var$parseResult(s.data);if("object"==typeof a&&null!=a&&null!=a.error)throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:a.error});throw new $3FhS8.HardwareError({errorCode:$3FhS8.HardwareErrorCode.NetworkError,message:s.data})})}"function"==typeof SuppressedError&&SuppressedError,$8c2252da2d106adc$var$axios__default.default.interceptors.request.use(r=>{var i;return"undefined"!=typeof window||(null===(i=r.url)||void 0===i?void 0:i.startsWith("http://localhost:21333"))&&!r.headers.get("Origin")&&(console.log("set node request origin"),r.headers.set("Origin","https://jssdk.onekey.so")),r});const $8c2252da2d106adc$var$DEFAULT_URL="http://localhost:21333",{check:$8c2252da2d106adc$var$check,buildOne:$8c2252da2d106adc$var$buildOne,receiveOne:$8c2252da2d106adc$var$receiveOne,parseConfigure:$8c2252da2d106adc$var$parseConfigure}=$8c2252da2d106adc$var$transport__default.default;class $8c2252da2d106adc$var$EmulatorTransport{constructor(r){this.name="EmulatorTransport",this.version="1.0.0",this.configured=!1,this.stopped=!1,this.isOutdated=!1,this.url=null==r?$8c2252da2d106adc$var$DEFAULT_URL:r}_post(r){return this.stopped?Promise.reject($3FhS8.ERRORS.TypedError("Transport stopped.")):$8c2252da2d106adc$var$request(Object.assign(Object.assign({},r),{method:"POST",url:this.url+r.url}))}init(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){this.Log=r;let i=yield this._silentInit();return i})}_silentInit(){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let r=yield $8c2252da2d106adc$var$request({url:this.url,method:"POST",timeout:3e3}),i=$8c2252da2d106adc$var$check.info(r);return i.version})}configure(r){let i=$8c2252da2d106adc$var$parseConfigure(r);this.configured=!0,this._messages=i}listen(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null===r)throw $3FhS8.ERRORS.TypedError("Http-Transport does not support listen without previous.");let i=yield this._post({url:"/listen",body:r}),n=$8c2252da2d106adc$var$check.devices(i);return n})}enumerate(){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let r=yield this._post({url:"/enumerate"}),i=$8c2252da2d106adc$var$check.devices(r);return i.map(r=>Object.assign(Object.assign({},r),{commType:"emulator"}))})}_acquireMixed(r){let i=null==r.previous?"null":encodeURIComponent(r.previous),n=encodeURIComponent(r.path),s=`/acquire/${n}/${i}`;return this._post({url:s})}acquire(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let i=yield this._acquireMixed(r);return $8c2252da2d106adc$var$check.acquire(i)})}release(r,i){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){let n=this._post({url:`/release/${r}`});i||(yield n)})}call(r,i,n){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages;$5xch2.LogBlockCommand.has(i)?this.Log.debug("call-"," name: ",i):this.Log.debug("call-"," name: ",i," data: ",n);let a=$8c2252da2d106adc$var$buildOne(s,i,n),o=a.toString("hex"),d=yield this._post({url:`/call/${r}`,body:o,timeout:"Initialize"===i?1e4:void 0});if("string"!=typeof d)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let f=$8c2252da2d106adc$var$receiveOne(s,d);return $8c2252da2d106adc$var$check.call(f)})}post(r,i,n){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let s=this._messages,a=$8c2252da2d106adc$var$buildOne(s,i,n).toString("hex");yield this._post({url:`/post/${r}`,body:a})})}read(r){return $8c2252da2d106adc$var$__awaiter(this,void 0,void 0,function*(){if(null==this._messages)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.TransportNotConfigured);let i=this._messages,n=yield this._post({url:`/read/${r}`});if("string"!=typeof n)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NetworkError,"Returning data is not string.");let s=$8c2252da2d106adc$var$receiveOne(i,n);return $8c2252da2d106adc$var$check.call(s)})}requestDevice(){return Promise.reject()}stop(){this.stopped=!0}cancel(){this.Log.debug("canceled")}}function $37578c5600331006$var$_interopDefaultLegacy(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}function $37578c5600331006$var$_interopNamespace(r){if(r&&r.__esModule)return r;var i=Object.create(null);return r&&Object.keys(r).forEach(function(n){if("default"!==n){var s=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(i,n,s.get?s:{enumerable:!0,get:function(){return r[n]}})}}),i.default=r,Object.freeze(i)}$8c2252da2d106adc$exports=$8c2252da2d106adc$var$EmulatorTransport;var $37578c5600331006$var$HardwareSdk__default=$37578c5600331006$var$_interopDefaultLegacy($ce1f303d0aa8ec51$exports),$37578c5600331006$var$HttpTransport__default=$37578c5600331006$var$_interopDefaultLegacy($9f5d7f38984024f0$exports),$37578c5600331006$var$LowlevelTransport__default=$37578c5600331006$var$_interopDefaultLegacy($3187491a92e9934c$exports),$37578c5600331006$var$EmulatorTransport__default=$37578c5600331006$var$_interopDefaultLegacy($8c2252da2d106adc$exports),$37578c5600331006$var$__assign=function(){return($37578c5600331006$var$__assign=Object.assign||function(r){for(var i,n=1,s=arguments.length;n0&&a[a.length-1])&&(6===f[0]||2===f[0])){d=0;continue}if(3===f[0]&&(!a||f[1]>a[0]&&f[1]0&&d.length>a&&!d.warned){d.warned=!0;var a,o,d,f=Error("Possible EventEmitter memory leak detected. "+d.length+" "+String(i)+" listeners added. Use emitter.setMaxListeners() to increase limit");f.name="MaxListenersExceededWarning",f.emitter=r,f.type=i,f.count=d.length,$37578c5600331006$var$ProcessEmitWarning(f)}return r}function $37578c5600331006$var$onceWrapper(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function $37578c5600331006$var$_onceWrap(r,i,n){var s={fired:!1,wrapFn:void 0,target:r,type:i,listener:n},a=$37578c5600331006$var$onceWrapper.bind(s);return a.listener=n,s.wrapFn=a,a}function $37578c5600331006$var$_listeners(r,i,n){var s=r._events;if(void 0===s)return[];var a=s[i];return void 0===a?[]:"function"==typeof a?n?[a.listener||a]:[a]:n?$37578c5600331006$var$unwrapListeners(a):$37578c5600331006$var$arrayClone(a,a.length)}function $37578c5600331006$var$listenerCount(r){var i=this._events;if(void 0!==i){var n=i[r];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function $37578c5600331006$var$arrayClone(r,i){for(var n=Array(i),s=0;s0&&(o=i[0]),o instanceof Error)throw o;var o,d=Error("Unhandled error."+(o?" ("+o.message+")":""));throw d.context=o,d}var f=a[r];if(void 0===f)return!1;if("function"==typeof f)$37578c5600331006$var$ReflectApply(f,this,i);else for(var l=f.length,u=$37578c5600331006$var$arrayClone(f,l),n=0;n=0;o--)if(n[o]===i||n[o].listener===i){d=n[o].listener,a=o;break}if(a<0)return this;0===a?n.shift():$37578c5600331006$var$spliceOne(n,a),1===n.length&&(s[r]=n[0]),void 0!==s.removeListener&&this.emit("removeListener",r,d||i)}return this},$37578c5600331006$var$EventEmitter.prototype.off=$37578c5600331006$var$EventEmitter.prototype.removeListener,$37578c5600331006$var$EventEmitter.prototype.removeAllListeners=function(r){var i,n,s;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0==arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[r]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[r]),this;if(0==arguments.length){var a,o=Object.keys(n);for(s=0;s=0;s--)this.removeListener(r,i[s]);return this},$37578c5600331006$var$EventEmitter.prototype.listeners=function(r){return $37578c5600331006$var$_listeners(this,r,!0)},$37578c5600331006$var$EventEmitter.prototype.rawListeners=function(r){return $37578c5600331006$var$_listeners(this,r,!1)},$37578c5600331006$var$EventEmitter.listenerCount=function(r,i){return"function"==typeof r.listenerCount?r.listenerCount(i):$37578c5600331006$var$listenerCount.call(r,i)},$37578c5600331006$var$EventEmitter.prototype.listenerCount=$37578c5600331006$var$listenerCount,$37578c5600331006$var$EventEmitter.prototype.eventNames=function(){return this._eventsCount>0?$37578c5600331006$var$ReflectOwnKeys(this._events):[]};var $37578c5600331006$var$eventEmitter=new $37578c5600331006$var$events.exports,$37578c5600331006$var$Log=$ce1f303d0aa8ec51$exports.getLogger($ce1f303d0aa8ec51$exports.LoggerNames.HdCommonConnectSdk),$37578c5600331006$var$getTransport=function(r){return $37578c5600331006$var$__awaiter(void 0,void 0,void 0,function(){return $37578c5600331006$var$__generator(this,function(i){switch(i.label){case 0:if("desktop-web-ble"===r)return[2,$b837a238e3579d4d$exports.ElectronBleTransport];if("webusb"===r||"desktop-webusb"===r)return[2,$b837a238e3579d4d$exports.WebUsbTransport];if("lowlevel"===r)return[2,$37578c5600331006$var$LowlevelTransport__default.default];if("node-usb"!==r)return[3,2];return[4,Promise.resolve().then(function(){return parcelRequire("gGMcW")}).then(function(r){return $37578c5600331006$var$_interopNamespace(r)})];case 1:return[2,i.sent().default];case 2:if("emulator"===r)return[2,$37578c5600331006$var$EmulatorTransport__default.default];return[2,$37578c5600331006$var$HttpTransport__default.default]}})})},$37578c5600331006$var$_settings=$ce1f303d0aa8ec51$exports.parseConnectSettings(),$37578c5600331006$var$_messageID=0,$37578c5600331006$var$messagePromises={},$37578c5600331006$var$dispose=function(){var r;$37578c5600331006$var$eventEmitter.removeAllListeners(),null===(r=null==$37578c5600331006$var$_core?void 0:$37578c5600331006$var$_core.dispose)||void 0===r||r.call($37578c5600331006$var$_core),$37578c5600331006$var$_settings=$ce1f303d0aa8ec51$exports.parseConnectSettings()},$37578c5600331006$var$uiResponse=function(r){if(!$37578c5600331006$var$_core)throw $3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.NotInitialized);var i=r.type,n=r.payload;$37578c5600331006$var$_core.handleMessage({event:$ce1f303d0aa8ec51$exports.UI_EVENT,type:i,payload:n})},$37578c5600331006$var$cancel=function(r){void 0!==$37578c5600331006$var$_core&&$37578c5600331006$var$_core.handleMessage({event:$ce1f303d0aa8ec51$exports.IFRAME.CANCEL,type:$ce1f303d0aa8ec51$exports.IFRAME.CANCEL,payload:{connectId:r}})};function $37578c5600331006$var$handleMessage(r){var i=r.event;if($37578c5600331006$var$_core)switch(i!==$ce1f303d0aa8ec51$exports.LOG_EVENT&&$37578c5600331006$var$Log.debug("hd-common-connect-sdk handleMessage",r),i){case $ce1f303d0aa8ec51$exports.UI_EVENT:$37578c5600331006$var$eventEmitter.emit(r.event,r),$37578c5600331006$var$eventEmitter.emit(r.type,r.payload);break;case $ce1f303d0aa8ec51$exports.LOG_EVENT:case $ce1f303d0aa8ec51$exports.FIRMWARE_EVENT:$37578c5600331006$var$eventEmitter.emit(r.event,r);break;case $ce1f303d0aa8ec51$exports.DEVICE_EVENT:[$ce1f303d0aa8ec51$exports.DEVICE.CONNECT,$ce1f303d0aa8ec51$exports.DEVICE.DISCONNECT,$ce1f303d0aa8ec51$exports.DEVICE.FEATURES,$ce1f303d0aa8ec51$exports.DEVICE.SUPPORT_FEATURES].includes(r.type)&&$37578c5600331006$var$eventEmitter.emit(r.type,r.payload);break;case $ce1f303d0aa8ec51$exports.IFRAME.CALLBACK:var n=r.payload,s=n.callbackId,a=n.data,o=n.error;$ce1f303d0aa8ec51$exports.executeCallback(s,a,o);break;default:$37578c5600331006$var$Log.log("No need to be captured message",r.event)}}function $37578c5600331006$var$postMessage(r,i){return void 0===i&&(i=!0),$37578c5600331006$var$__awaiter(this,void 0,void 0,function(){return $37578c5600331006$var$__generator(this,function(n){switch(n.label){case 0:if(!$37578c5600331006$var$_core)throw $3FhS8.ERRORS.TypedError("postMessage: _core not found");if(!i)return[3,2];return $37578c5600331006$var$messagePromises[++$37578c5600331006$var$_messageID]=$3FhS8.createDeferred(),[4,$37578c5600331006$var$_core.handleMessage($37578c5600331006$var$__assign($37578c5600331006$var$__assign({},r),{id:"".concat($37578c5600331006$var$_messageID)}))];case 1:return[2,n.sent()];case 2:return $37578c5600331006$var$_core.handleMessage(r),[2]}})})}var $37578c5600331006$var$init=function(r,i,n){return $37578c5600331006$var$__awaiter(void 0,void 0,void 0,function(){var i,s,a;return $37578c5600331006$var$__generator(this,function(o){switch(o.label){case 0:$37578c5600331006$var$_settings=$37578c5600331006$var$__assign($37578c5600331006$var$__assign($37578c5600331006$var$__assign({},$37578c5600331006$var$_settings),r),{env:null!==(a=r.env)&&void 0!==a?a:"node"}),$ce1f303d0aa8ec51$exports.enableLog(!!r.debug),$37578c5600331006$var$Log.debug("init"),o.label=1;case 1:return o.trys.push([1,4,,5]),[4,$37578c5600331006$var$getTransport($37578c5600331006$var$_settings.env)];case 2:return i=o.sent(),[4,$ce1f303d0aa8ec51$exports.initCore($37578c5600331006$var$_settings,i,n)];case 3:return null==($37578c5600331006$var$_core=o.sent())||$37578c5600331006$var$_core.on($ce1f303d0aa8ec51$exports.CORE_EVENT,$37578c5600331006$var$handleMessage),$ce1f303d0aa8ec51$exports.setLoggerPostMessage($37578c5600331006$var$handleMessage),[2,!0];case 4:return s=o.sent(),$37578c5600331006$var$Log.error($ce1f303d0aa8ec51$exports.createErrorMessage(s)),[2,!1];case 5:return[2]}})})},$37578c5600331006$var$call=function(r){return $37578c5600331006$var$__awaiter(void 0,void 0,void 0,function(){var i,n,s,a,o;return $37578c5600331006$var$__generator(this,function(d){switch(d.label){case 0:$37578c5600331006$var$Log.debug("call: ",r),d.label=1;case 1:return d.trys.push([1,3,,4]),[4,$37578c5600331006$var$postMessage({event:$ce1f303d0aa8ec51$exports.IFRAME.CALL,type:$ce1f303d0aa8ec51$exports.IFRAME.CALL,payload:r})];case 2:if(i=d.sent())return $37578c5600331006$var$Log.debug("response: ",i),i.success||((null===(s=i.payload)||void 0===s?void 0:s.code)===$3FhS8.HardwareErrorCode.BleUnsupported&&$37578c5600331006$var$postMessage($ce1f303d0aa8ec51$exports.createUiMessage($ce1f303d0aa8ec51$exports.UI_REQUEST.BLUETOOTH_UNSUPPORTED),!1),(null===(a=i.payload)||void 0===a?void 0:a.code)===$3FhS8.HardwareErrorCode.BlePoweredOff&&$37578c5600331006$var$postMessage($ce1f303d0aa8ec51$exports.createUiMessage($ce1f303d0aa8ec51$exports.UI_REQUEST.BLUETOOTH_POWERED_OFF),!1),(null===(o=i.payload)||void 0===o?void 0:o.code)===$3FhS8.HardwareErrorCode.BlePermissionError&&$37578c5600331006$var$postMessage($ce1f303d0aa8ec51$exports.createUiMessage($ce1f303d0aa8ec51$exports.UI_REQUEST.BLUETOOTH_PERMISSION),!1)),[2,i];return[2,$ce1f303d0aa8ec51$exports.createErrorMessage($3FhS8.ERRORS.TypedError($3FhS8.HardwareErrorCode.CallMethodNotResponse))];case 3:return n=d.sent(),$37578c5600331006$var$Log.error("__call error: ",n),[2,$ce1f303d0aa8ec51$exports.createErrorMessage(n)];case 4:return[2]}})})},$37578c5600331006$var$updateSettings=function(){return Promise.resolve(!0)},$37578c5600331006$var$switchTransport=function(){return Promise.resolve({success:!0})},$37578c5600331006$var$HardwareCommonConnectSdk=$37578c5600331006$var$HardwareSdk__default.default({eventEmitter:$37578c5600331006$var$eventEmitter,init:$37578c5600331006$var$init,call:$37578c5600331006$var$call,cancel:$37578c5600331006$var$cancel,dispose:$37578c5600331006$var$dispose,uiResponse:$37578c5600331006$var$uiResponse,updateSettings:$37578c5600331006$var$updateSettings,switchTransport:$37578c5600331006$var$switchTransport});$37578c5600331006$exports.default=$37578c5600331006$var$HardwareCommonConnectSdk,$37578c5600331006$exports.messagePromises=$37578c5600331006$var$messagePromises;const $bd8266c89806f406$var$MESSAGE_TOP_CHAR=63,$bd8266c89806f406$var$MESSAGE_HEADER_BYTE=35,$bd8266c89806f406$export$3c86bd56efb4b5a8=6,$bd8266c89806f406$export$d047003479962a35=r=>{if(r.length<9)return!1;let[i,n,s]=r;return String.fromCharCode(i)===String.fromCharCode($bd8266c89806f406$var$MESSAGE_TOP_CHAR)&&String.fromCharCode(n)===String.fromCharCode($bd8266c89806f406$var$MESSAGE_HEADER_BYTE)&&String.fromCharCode(s)===String.fromCharCode($bd8266c89806f406$var$MESSAGE_HEADER_BYTE)};function $bd8266c89806f406$export$e673efccd97e4223(r,i){let n,s=()=>{},a=()=>{},o=new Promise(async(i,o)=>{if(s=i,a=o,"function"==typeof r)try{await r()}catch(r){o(r)}"string"==typeof r&&(n=r)});return{id:n,data:i,resolve:s,reject:a,promise:o}}var $awmEs=parcelRequire("awmEs"),$d70b7d984fd77812$require$Buffer=$awmEs.Buffer;const $d70b7d984fd77812$var$UI_EVENT="UI_EVENT",$d70b7d984fd77812$var$UI_REQUEST={},$d70b7d984fd77812$var$UI_RESPONSE={RECEIVE_PIN:"ui-receive_pin",RECEIVE_PASSPHRASE:"ui-receive_passphrase"};function $d70b7d984fd77812$var$setupWKWebViewJavascriptBridge(r){return window.WKWebViewJavascriptBridge?r(WKWebViewJavascriptBridge):window.WKWVJBCallbacks?window.WKWVJBCallbacks.push(r):void(window.WKWVJBCallbacks=[r],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}$d70b7d984fd77812$var$setupWKWebViewJavascriptBridge(function(r){console.log("bridge init success"),$d70b7d984fd77812$var$bridge=r,$d70b7d984fd77812$var$registerBridgeHandler(r)});let $d70b7d984fd77812$var$isInitialized=!1;function $d70b7d984fd77812$var$getHardwareSDKInstance(){return new Promise(async(r,i)=>{if(!$d70b7d984fd77812$var$bridge)throw Error("bridge is not connected");if($d70b7d984fd77812$var$isInitialized){console.log("already initialized, skip"),r($parcel$interopDefault($37578c5600331006$exports));return}let n={env:"lowlevel",fetchConfig:!0,debug:!0},s=$d70b7d984fd77812$var$createLowlevelPlugin();try{await $parcel$interopDefault($37578c5600331006$exports).init(n,void 0,s),console.log("HardwareSDK init success"),$d70b7d984fd77812$var$isInitialized=!0,r($parcel$interopDefault($37578c5600331006$exports)),$d70b7d984fd77812$var$listenHardwareEvent($parcel$interopDefault($37578c5600331006$exports))}catch(r){i(r)}})}let $d70b7d984fd77812$var$receiveQueue=[],$d70b7d984fd77812$var$protocolV2Buffer=[],$d70b7d984fd77812$var$protocolV2ExpectedLength=0;function $d70b7d984fd77812$var$resolveReceive(r){if($d70b7d984fd77812$var$runPromise){let i=$d70b7d984fd77812$var$runPromise;$d70b7d984fd77812$var$runPromise=void 0,i.resolve(r);return}$d70b7d984fd77812$var$receiveQueue.push(r)}function $d70b7d984fd77812$var$resetProtocolV2Buffer(){$d70b7d984fd77812$var$protocolV2Buffer=[],$d70b7d984fd77812$var$protocolV2ExpectedLength=0}function $d70b7d984fd77812$var$handleProtocolV2Chunk(r){if($d70b7d984fd77812$var$protocolV2Buffer=$d70b7d984fd77812$var$protocolV2Buffer.concat([...r]),0===$d70b7d984fd77812$var$protocolV2ExpectedLength&&$d70b7d984fd77812$var$protocolV2Buffer.length>=3){if(90!==$d70b7d984fd77812$var$protocolV2Buffer[0]){$d70b7d984fd77812$var$resetProtocolV2Buffer();return}$d70b7d984fd77812$var$protocolV2ExpectedLength=$d70b7d984fd77812$var$protocolV2Buffer[1]|$d70b7d984fd77812$var$protocolV2Buffer[2]<<8}for(;$d70b7d984fd77812$var$protocolV2ExpectedLength>0&&$d70b7d984fd77812$var$protocolV2Buffer.length>=$d70b7d984fd77812$var$protocolV2ExpectedLength;){let r=$d70b7d984fd77812$require$Buffer.from($d70b7d984fd77812$var$protocolV2Buffer.slice(0,$d70b7d984fd77812$var$protocolV2ExpectedLength));if($d70b7d984fd77812$var$protocolV2Buffer=$d70b7d984fd77812$var$protocolV2Buffer.slice($d70b7d984fd77812$var$protocolV2ExpectedLength),$d70b7d984fd77812$var$protocolV2ExpectedLength=0,$d70b7d984fd77812$var$resolveReceive(r.toString("hex")),0===$d70b7d984fd77812$var$protocolV2Buffer.length)return;if($d70b7d984fd77812$var$protocolV2Buffer.length>=3&&90===$d70b7d984fd77812$var$protocolV2Buffer[0])$d70b7d984fd77812$var$protocolV2ExpectedLength=$d70b7d984fd77812$var$protocolV2Buffer[1]|$d70b7d984fd77812$var$protocolV2Buffer[2]<<8;else{$d70b7d984fd77812$var$resetProtocolV2Buffer();return}}}function $d70b7d984fd77812$var$createLowlevelPlugin(){let r={enumerate:()=>new Promise(r=>{$d70b7d984fd77812$var$bridge.callHandler("enumerate",{},i=>{console.log("===> call enumerate response: ",i),r(i)})}),send:(r,i)=>new Promise(n=>{$d70b7d984fd77812$var$bridge.callHandler("send",{uuid:r,data:i},r=>{n(r)})}),receive:()=>new Promise(r=>{if($d70b7d984fd77812$var$receiveQueue.length>0){r($d70b7d984fd77812$var$receiveQueue.shift());return}$d70b7d984fd77812$var$runPromise=$bd8266c89806f406$export$e673efccd97e4223();let i=$d70b7d984fd77812$var$runPromise.promise;r(i)}),connect:r=>new Promise(i=>{$d70b7d984fd77812$var$bridge.callHandler("connect",{uuid:r}),$d70b7d984fd77812$var$bridge.registerHandler("connectFinished",()=>{i()})}),disconnect:r=>new Promise(i=>{$d70b7d984fd77812$var$bridge.callHandler("disconnect",{uuid:r},r=>{console.log("call connect response: ",r),i(r)})}),init:()=>(console.log("call init"),Promise.resolve()),version:"OneKey-1.0"};return r}function $d70b7d984fd77812$var$listenHardwareEvent(r){r.on($d70b7d984fd77812$var$UI_EVENT,i=>{"ui-request_pin"===i.type&&(console.log("PIN requested, calling requestPinInput handler"),$d70b7d984fd77812$var$bridge.callHandler("requestPinInput",{},i=>{let n=i&&""!==i?i:"@@ONEKEY_INPUT_PIN_IN_DEVICE";console.log("PIN response received:",i?"PIN entered":"Using hardware PIN"),r.uiResponse({type:$d70b7d984fd77812$var$UI_RESPONSE.RECEIVE_PIN,payload:n})})),"ui-request_passphrase"===i.type&&r.uiResponse({type:$d70b7d984fd77812$var$UI_RESPONSE.RECEIVE_PASSPHRASE,payload:{value:"",passphraseOnDevice:!1,save:!1}}),"ui-button"===i.type&&(console.log("Button confirmation requested, showing prompt on iOS"),$d70b7d984fd77812$var$bridge.callHandler("requestButtonConfirmation",{message:i.payload?.message||"Please confirm on your device"})),"ui-close_window"===i.type&&(console.log("Request to close UI window received"),$d70b7d984fd77812$var$bridge.callHandler("closeUIWindow",{}))})}function $d70b7d984fd77812$var$registerBridgeHandler(){$d70b7d984fd77812$var$bridge.registerHandler("init",async(r,i)=>{try{await $d70b7d984fd77812$var$getHardwareSDKInstance(),i({success:!0})}catch(r){console.error(r),i({success:!1,error:r.message})}}),$d70b7d984fd77812$var$bridge.registerHandler("bridgeCommonCall",async(r,i)=>{console.log("bridgeCommonCall",r);try{let n;let{name:s,data:a}=r,{connectId:o,deviceId:d,...f}=a,l=await $d70b7d984fd77812$var$getHardwareSDKInstance();if(!l[s])throw Error(`Method ${s} not found`);n=await l[s](o,d,f),i(n)}catch(r){console.error(r),i({success:!1,error:r.message})}});let r=0,i=[];$d70b7d984fd77812$var$bridge.registerHandler("monitorCharacteristic",async n=>{try{let s=$d70b7d984fd77812$require$Buffer.from(n,"hex");if($d70b7d984fd77812$var$protocolV2Buffer.length>0||90===s[0]){$d70b7d984fd77812$var$handleProtocolV2Chunk(s);return}if($bd8266c89806f406$export$d047003479962a35(s)?(r=s.readInt32BE(5),i=[...s.subarray(3)]):i=i.concat([...s]),i.length-$bd8266c89806f406$export$3c86bd56efb4b5a8>=r){let n=$d70b7d984fd77812$require$Buffer.from(i);r=0,i=[],$d70b7d984fd77812$var$resolveReceive(n.toString("hex"))}}catch(r){console.log("monitor data error: ",r),$d70b7d984fd77812$var$runPromise?.reject(r)}})} \ No newline at end of file diff --git a/packages/connect-examples/native-ios-example/web/web_dist/index.a16df669.js b/packages/connect-examples/native-ios-example/web/web_dist/index.a16df669.js new file mode 100644 index 000000000..54bfe491d --- /dev/null +++ b/packages/connect-examples/native-ios-example/web/web_dist/index.a16df669.js @@ -0,0 +1 @@ +function e(e,r,n,o){Object.defineProperty(e,r,{get:n,set:o,enumerable:!0,configurable:!0})}var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n={},o={},t=r.parcelRequire2d1f;null==t&&((t=function(e){if(e in n)return n[e].exports;if(e in o){var r=o[e];delete o[e];var t={id:e,exports:{}};return n[e]=t,r.call(t.exports,t,t.exports),t.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,r){o[e]=r},r.parcelRequire2d1f=t),t.register("dRo73",function(r,n){e(r.exports,"register",()=>o,e=>o=e),e(r.exports,"resolve",()=>t,e=>t=e);var o,t,i={};o=function(e){for(var r=Object.keys(e),n=0;n numeric require -// -// anything defined in a previous bundle is accessed via the -// orig method which is the require for previous bundles - -(function (modules, entry, mainEntry, parcelRequireName, globalName) { - /* eslint-disable no-undef */ - var globalObject = - typeof globalThis !== 'undefined' - ? globalThis - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : typeof global !== 'undefined' - ? global - : {}; - /* eslint-enable no-undef */ - - // Save the require from previous bundle to this closure if any - var previousRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - - var cache = previousRequire.cache || {}; - // Do not use `require` to prevent Webpack from trying to bundle this call - var nodeRequire = - typeof module !== 'undefined' && - typeof module.require === 'function' && - module.require.bind(module); - - function newRequire(name, jumped) { - if (!cache[name]) { - if (!modules[name]) { - // if we cannot find the module within our internal map or - // cache jump to the current global require ie. the last bundle - // that was added to the page. - var currentRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - if (!jumped && currentRequire) { - return currentRequire(name, true); - } - - // If there are other bundles on this page the require from the - // previous one is saved to 'previousRequire'. Repeat this as - // many times as there are bundles until the module is found or - // we exhaust the require chain. - if (previousRequire) { - return previousRequire(name, true); - } - - // Try the node require function if it exists. - if (nodeRequire && typeof name === 'string') { - return nodeRequire(name); - } - - var err = new Error("Cannot find module '" + name + "'"); - err.code = 'MODULE_NOT_FOUND'; - throw err; - } - - localRequire.resolve = resolve; - localRequire.cache = {}; - - var module = (cache[name] = new newRequire.Module(name)); - - modules[name][0].call( - module.exports, - localRequire, - module, - module.exports, - this - ); - } - - return cache[name].exports; - - function localRequire(x) { - var res = localRequire.resolve(x); - return res === false ? {} : newRequire(res); - } - - function resolve(x) { - var id = modules[name][1][x]; - return id != null ? id : x; - } - } - - function Module(moduleName) { - this.id = moduleName; - this.bundle = newRequire; - this.exports = {}; - } - - newRequire.isParcelRequire = true; - newRequire.Module = Module; - newRequire.modules = modules; - newRequire.cache = cache; - newRequire.parent = previousRequire; - newRequire.register = function (id, exports) { - modules[id] = [ - function (require, module) { - module.exports = exports; - }, - {}, - ]; - }; - - Object.defineProperty(newRequire, 'root', { - get: function () { - return globalObject[parcelRequireName]; - }, - }); - - globalObject[parcelRequireName] = newRequire; - - for (var i = 0; i < entry.length; i++) { - newRequire(entry[i]); - } - - if (mainEntry) { - // Expose entry point to Node, AMD or browser globals - // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js - var mainExports = newRequire(mainEntry); - - // CommonJS - if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = mainExports; - - // RequireJS - } else if (typeof define === 'function' && define.amd) { - define(function () { - return mainExports; - }); - - // - +OneKey Hardware \ No newline at end of file diff --git a/packages/connect-examples/native-ios-example/web/yarn.lock b/packages/connect-examples/native-ios-example/web/yarn.lock index 6b9e916a3..8ba5fe523 100644 --- a/packages/connect-examples/native-ios-example/web/yarn.lock +++ b/packages/connect-examples/native-ios-example/web/yarn.lock @@ -110,77 +110,88 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@onekeyfe/hd-common-connect-sdk@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-common-connect-sdk/-/hd-common-connect-sdk-1.1.15.tgz#5c04d027d3be3de46a8a575525a6974d972784b3" - integrity sha512-pqP59nm+XRgFFHU61SNclsFQw5OCajyTikHwKgSstg5uQF0F2dHop0Y6plQzPkBfzZfsCAqvUvWKy9VVdVKpqQ== - dependencies: - "@onekeyfe/hd-core" "1.1.15" - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport-emulator" "1.1.15" - "@onekeyfe/hd-transport-http" "1.1.15" - "@onekeyfe/hd-transport-lowlevel" "1.1.15" - "@onekeyfe/hd-transport-web-device" "1.1.15" - -"@onekeyfe/hd-core@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-core/-/hd-core-1.1.15.tgz#e26752660fcf0be7fb55c5ae21e8be122d3f31a5" - integrity sha512-tZ3lFUS6FKQG28dSVEutIFdL0NBOIffdwtFBXDS2r9WQn4ANwQdmbcJVUOgzjM/LRtbs9mefLXrI0SC5fvVx0w== - dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" - axios "1.12.2" +"@onekeyfe/hd-common-connect-sdk@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-common-connect-sdk/-/hd-common-connect-sdk-1.1.26-alpha.8.tgz#77dae506c14adc282c96361ba62653e3165f884e" + integrity sha512-uwf6RcT7OsbJ3/okH/B2g5wRQJv4XPNQZdFg3JDAF7+66LfcLf4Q+6UuAnlb3nCfLClx/mQJZ8oGOZ8A9pldCQ== + dependencies: + "@onekeyfe/hd-core" "1.1.26-alpha.8" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-emulator" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-http" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-lowlevel" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-usb" "1.1.26-alpha.8" + "@onekeyfe/hd-transport-web-device" "1.1.26-alpha.8" + +"@onekeyfe/hd-core@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-core/-/hd-core-1.1.26-alpha.8.tgz#1d4a2a63477da0f91f8b95f24c96336c9253d001" + integrity sha512-yMjOeHhyWMWN4rM3y9X6gZ0LRcnfxHJRjKtrpuysZVjWe9AH01emI433UVahm3laS5TEWSQ/+mXcOwPipGJIWg== + dependencies: + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + axios "1.15.0" bignumber.js "^9.0.2" bytebuffer "^5.0.1" jszip "^3.10.1" parse-uri "^1.0.7" semver "^7.3.7" -"@onekeyfe/hd-shared@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-shared/-/hd-shared-1.1.15.tgz#cb9d43c0accbacfb8fc03926b647e9ba66487f10" - integrity sha512-zyeqX9ZUP9vg/dSbywgw99N24WqdXySqS+CEf3Z/GcSksbYqU0qkfd3TCe6hvnXh7SbWzc7V6D+nbKGuRFsDKg== +"@onekeyfe/hd-shared@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-shared/-/hd-shared-1.1.26-alpha.8.tgz#1ffd005383159ff1488ddd331a0cad06216f6419" + integrity sha512-JnUrFagV5nFcNeAAJBGTVkiH8APz/0WE4MJlecqFuNlqNWWfGMZBZz6Y5ocZiQzd9+fzlh9n02rdBQxnD2qnMg== -"@onekeyfe/hd-transport-emulator@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-emulator/-/hd-transport-emulator-1.1.15.tgz#b89ed007e10ffcd99e3422f40a709bd8cc78aa34" - integrity sha512-ZpoHS171DsjqFii1sShs8XBj/j/c3VNROrE2bQ2rM6t9/HlCcYsW2u7L5xRvRO0qBhkNNJFBwLk1S9ajrOkgjw== +"@onekeyfe/hd-transport-emulator@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-emulator/-/hd-transport-emulator-1.1.26-alpha.8.tgz#0ecb4783272c5d0b6d020df0e4aa51b2b2039665" + integrity sha512-GNd2V+txjZjeBE9NIgsy7UccxWrtY+dnDuj2XbFaWUhTN+NXY8/pXyqDq9qeH5ReuaH17SIZIyGMtiY7J7ztOg== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" - axios "1.12.2" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + axios "1.15.0" secure-json-parse "^4.0.0" -"@onekeyfe/hd-transport-http@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-http/-/hd-transport-http-1.1.15.tgz#a5a0c9d93a9c19209bd53d9abebe5ea3eced5c44" - integrity sha512-MkfDV9rOkWKO+kZMop9toZObI2wVAAyISPbOTomo+Yoe7jYrjnpGbU0VzFa6e2sKQ04UGcL7DAV3dwB5+gvI9Q== +"@onekeyfe/hd-transport-http@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-http/-/hd-transport-http-1.1.26-alpha.8.tgz#02535908bd3b608e51ca25109b8602022fe4d6c5" + integrity sha512-zf9DWUyZ1fS+IKIBYhzF/aSgQJj2ftVQHbLpno1/2dSbKcH04qCI0a5u3nJE59vixyqqpBIk5q3mNaNy9GSo+Q== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" - axios "1.12.2" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + axios "1.15.0" secure-json-parse "^4.0.0" -"@onekeyfe/hd-transport-lowlevel@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-lowlevel/-/hd-transport-lowlevel-1.1.15.tgz#770968cdbdbaeda203bc73db6abc850035ae829c" - integrity sha512-BLJYb/+wk2XI0wpjbDU/Vjdg/ErY1PUIC04WHUfUbEyN0IjV/aozf+jI8K1ahZvbraVyrixL8SHkMBPYmxQzAg== +"@onekeyfe/hd-transport-lowlevel@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-lowlevel/-/hd-transport-lowlevel-1.1.26-alpha.8.tgz#3e6393e54e266e25c4bf8b737156f667a0cda1ca" + integrity sha512-uaMc4ipiK81iWnHVbXC7sUcW28dph+73f3+DWxzq9F3z9AWsopSYNYY7C6MA2kBPIsJeQ3yPSDxA0IINWGIswA== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" -"@onekeyfe/hd-transport-web-device@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-web-device/-/hd-transport-web-device-1.1.15.tgz#890dbaef27db86c2068c8910a3b01ca6a09b0d7c" - integrity sha512-aQWJuAjns5a1tc+BDP+QxYuKwpjqYNarWQHEYRf0iCr5pMKTZIrrjq4DFmWnw+6glGuXhSDkPGJ/7jHWZl/OYA== +"@onekeyfe/hd-transport-usb@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-usb/-/hd-transport-usb-1.1.26-alpha.8.tgz#6dd7f0121f7199f1131fce35dc9a3cb05f60eb51" + integrity sha512-ia5zJI810OXF8Rqkvz2y/ihNJIf5EZvDTISSoDn2JlrFvnOmfn9V8IyBsICDfoeXREIcmRelNvIg1Km+0qS/SQ== dependencies: - "@onekeyfe/hd-shared" "1.1.15" - "@onekeyfe/hd-transport" "1.1.15" + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" + bytebuffer "^5.0.1" + usb "^2.14.0" + +"@onekeyfe/hd-transport-web-device@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport-web-device/-/hd-transport-web-device-1.1.26-alpha.8.tgz#4bcb8004130bbe687c5142ceb0f455674006f96a" + integrity sha512-B5p/nVXiBN5pPCnWzQVhHkLzL5fIU4JiW9G4hGC4slgWBi2wtB1OtUAvzEALFimY7+4jPo98bnPZA1HYeIUOCw== + dependencies: + "@onekeyfe/hd-shared" "1.1.26-alpha.8" + "@onekeyfe/hd-transport" "1.1.26-alpha.8" -"@onekeyfe/hd-transport@1.1.15": - version "1.1.15" - resolved "https://registry.npmjs.org/@onekeyfe/hd-transport/-/hd-transport-1.1.15.tgz#ea0fb55c8b47b7c91222012ee2998ed41ec90dc0" - integrity sha512-IV4acNU/7x84CC9s+RHhAMZBK/SePBwqSDRY1xZ9io6AmUHLaRH2w6OC6/msJQyXy+juzL2T9RYYA0DxNXjp1Q== +"@onekeyfe/hd-transport@1.1.26-alpha.8": + version "1.1.26-alpha.8" + resolved "https://registry.npmjs.org/@onekeyfe/hd-transport/-/hd-transport-1.1.26-alpha.8.tgz#0f743869db2187e1c607e55c1118dc15262ab39e" + integrity sha512-K1d/hAyqeF2E6JEKgtumuUad65ajSlsycJaXOTL2KgzS1fSPVfScXa6dlUamR4TfGk4o8UUaiC9XqFKbBk15gA== dependencies: bytebuffer "^5.0.1" long "^4.0.0" @@ -971,6 +982,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.10.tgz#73c9480791e3ddeb4887a660fc93a7f59353ad45" integrity sha512-vwzFiiy8Rn6E0MtA13/Cxxgpan/N6UeNYR9oUu6kuJWxu6zCk98trcDp8CBhbtaeuq9SykCmXkFr2lWLoPcvLg== +"@types/w3c-web-usb@^1.0.6": + version "1.0.14" + resolved "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz#9b2c8e723045e7bf8018d47efe1b736815b23b38" + integrity sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA== + abortcontroller-polyfill@^1.1.9: version "1.7.5" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" @@ -1015,14 +1031,14 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@1.12.2: - version "1.12.2" - resolved "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" - integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== +axios@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz#0fcee91ef03d386514474904b27863b2c683bf4f" + integrity sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q== dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.4" - proxy-from-env "^1.1.0" + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^2.1.0" base-x@^3.0.8, base-x@^3.0.9: version "3.0.9" @@ -1469,10 +1485,10 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -follow-redirects@^1.15.6: - version "1.15.11" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== +follow-redirects@^1.15.11: + version "1.16.0" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" + integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== for-each@^0.3.3: version "0.3.3" @@ -1481,10 +1497,10 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -form-data@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" - integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -1992,6 +2008,11 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== +node-addon-api@^8.0.0: + version "8.7.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.7.0.tgz#f64f8413456ecbe900221305a3f883c37666473f" + integrity sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA== + node-gyp-build-optional-packages@5.0.6: version "5.0.6" resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz#2949f5cc7dace3ac470fa2ff1a37456907120a1d" @@ -2002,6 +2023,11 @@ node-gyp-build-optional-packages@5.0.7: resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== +node-gyp-build@^4.5.0: + version "4.8.4" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" @@ -2177,10 +2203,10 @@ protobufjs@^6.11.2: "@types/node" ">=13.7.0" long "^4.0.0" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxy-from-env@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" + integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== react-error-overlay@6.0.9: version "6.0.9" @@ -2385,6 +2411,15 @@ update-browserslist-db@^1.0.11: escalade "^3.1.1" picocolors "^1.0.0" +usb@^2.14.0: + version "2.17.0" + resolved "https://registry.npmjs.org/usb/-/usb-2.17.0.tgz#ab4662aee723f0ed7c2a70ee622ff8d59491f018" + integrity sha512-UuFgrlglgDn5ll6d5l7kl3nDb2Yx43qLUGcDq+7UNLZLtbNug0HZBb2Xodhgx2JZB1LqvU+dOGqLEeYUeZqsHg== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^8.0.0" + node-gyp-build "^4.5.0" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" diff --git a/packages/core/src/device/DeviceConnector.ts b/packages/core/src/device/DeviceConnector.ts index 2467b4086..5f1e8f7ba 100644 --- a/packages/core/src/device/DeviceConnector.ts +++ b/packages/core/src/device/DeviceConnector.ts @@ -1,4 +1,5 @@ import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared'; + import { safeThrowError } from '../constants'; import { DataManager } from '../data-manager'; import TransportManager from '../data-manager/TransportManager'; diff --git a/packages/hd-transport-react-native/src/index.ts b/packages/hd-transport-react-native/src/index.ts index b65cc663e..95b3e2451 100644 --- a/packages/hd-transport-react-native/src/index.ts +++ b/packages/hd-transport-react-native/src/index.ts @@ -16,8 +16,8 @@ import transport, { type ProtocolType, ProtocolV2FrameAssembler, ProtocolV2Session, - probeProtocolV2 as probeProtocolV2Helper, type TransportCallOptions, + probeProtocolV2 as probeProtocolV2Helper, } from '@onekeyfe/hd-transport'; import { ERRORS, HardwareErrorCode, createDeferred, isOnekeyDevice } from '@onekeyfe/hd-shared'; diff --git a/packages/hd-transport/src/protocols/v2/crc8.ts b/packages/hd-transport/src/protocols/v2/crc8.ts index 91b9b2005..05416f37a 100644 --- a/packages/hd-transport/src/protocols/v2/crc8.ts +++ b/packages/hd-transport/src/protocols/v2/crc8.ts @@ -1,7 +1,7 @@ import { CRC8_INIT } from './constants'; -// CRC-8 lookup table (same as firmware crc8.c, polynomial init=0x30) -// Extracted from OneKey Pro2 webusb test reference implementation +// Protocol V2 帧校验用的 CRC-8 查表,不是设备或业务数据。 +// 表值与固件侧 crc8 实现保持一致;初始值见 CRC8_INIT。 export const CRC8_TABLE = new Uint8Array([ 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, @@ -22,8 +22,7 @@ export const CRC8_TABLE = new Uint8Array([ ]); /** - * Compute CRC-8 over `len` bytes of `data`. - * Uses the lookup table with init=0x30 (same as OneKey Pro2 firmware). + * 计算 data 前 len 个字节的 CRC-8,使用与固件侧一致的初始值。 */ export function crc8(data: Uint8Array, len: number): number { let crc = CRC8_INIT; From afb0793f7197f66d4c0c9caf6cc0147b5ea359a3 Mon Sep 17 00:00:00 2001 From: wabicai Date: Sat, 9 May 2026 00:20:16 +0800 Subject: [PATCH 22/73] docs: clarify protocol v2 crc8 framing --- docs/protocol-v2.md | 32 +++++--- .../concepts/low-level-plugin.mdx | 73 +++++++++++++++++-- .../transport/react-native-ble.mdx | 3 + .../concepts/low-level-plugin.mdx | 73 +++++++++++++++++-- .../transport/react-native-ble.mdx | 3 + 5 files changed, 163 insertions(+), 21 deletions(-) diff --git a/docs/protocol-v2.md b/docs/protocol-v2.md index 3b6c14660..206171e0f 100644 --- a/docs/protocol-v2.md +++ b/docs/protocol-v2.md @@ -1,6 +1,6 @@ # OneKey Protocol V2 -本文档描述 WebUSB、Electron BLE 和 React Native BLE 上使用的 Protocol V2。Protocol V2 目前服务 Pro2,主要覆盖协议探测、文件系统、固件更新和设备重启。 +本文档描述 WebUSB、Electron BLE、React Native BLE 和 lowlevel BLE 上使用的 Protocol V2。Protocol V2 目前服务 Pro2,主要覆盖协议探测、文件系统、固件更新和设备重启。 ## 与 Protocol V1 的关系 @@ -50,6 +50,19 @@ Protocol V2 使用 `0x5A` 起始字节和两段 CRC8。 当前 SDK 使用的最大 V2 frame 长度是 `2200` bytes,文件写入 chunk size 是 `2048` bytes。 +### CRC8 说明 + +`HeaderCRC` 和末尾 `CRC` 是 Protocol V2 wire protocol 的必需字段,不是调试信息,也不是设备业务数据。设备端会校验 host 发出的 frame,SDK 端也会校验设备返回的 frame;缺失或计算不一致时,常见结果是设备不响应、返回错误,或 SDK 在 decode 阶段抛出 CRC mismatch。 + +SDK 的实现放在 `packages/hd-transport/src/protocols/v2/crc8.ts`。其中 `CRC8_TABLE` 是 256 项预计算查表,等价于按位计算同一个 CRC8 算法。保留查表有两个原因: + +- 与固件侧 `crc8` 实现保持逐字节一致,减少多语言实现时的参数漂移。 +- 避免每个 frame 都重新按位计算,尤其是文件写入和固件更新会发送大量 frame。 + +如果使用 SDK 提供的 WebUSB、Electron BLE、React Native BLE 或 lowlevel transport,应用层和原生 BLE 插件不需要自己计算 CRC8。lowlevel 原生侧只需要把 BLE notification 按 frame 长度重组成完整 `0x5A` frame,并原样交给 JS SDK;CRC8 的计算和校验由 `hd-transport` 完成。 + +只有在完全绕过 SDK、自己实现 Protocol V2 encode/decode 时,才需要在 Kotlin、Swift 或其他语言里实现同样的 CRC8 算法。此时可以使用查表,也可以按位计算,但输出必须与 SDK 的 `crc8(data, len)` 完全一致。 + ## protobuf payload Protocol V2 frame 的 payload 格式: @@ -114,19 +127,19 @@ endpoint/interface discovery 来自 USB descriptor,但只用于 I/O 路由, ## BLE -Electron BLE 和 React Native BLE 使用 Router `1`。桌面默认 env 是 `desktop-web-ble`,移动端默认 env 是 `react-native`,两者内部都自动支持 V1/V2。 +Electron BLE、React Native BLE 和 lowlevel BLE 使用 Router `1`。桌面默认 env 是 `desktop-web-ble`,React Native 移动端默认 env 是 `react-native`,原生 WebView/Swift/Kotlin/Flutter 集成使用 `lowlevel`。这些 transport 内部都自动支持 V1/V2。 ```mermaid flowchart TD - Connect["nobleBle.connect(uuid)"] - Subscribe["nobleBle.subscribe(uuid)"] + Connect["BLE connect(uuid)"] + Subscribe["subscribe notify characteristic"] Probe["GetProtoVersion probe"] Call["call() 按检测结果进入 V1 或 V2 分支"] Connect --> Subscribe --> Probe --> Call ``` -BLE 写入会按 GATT write 能力拆成小块,接收端会按 V2 frame length 重组完整 `0x5A` 帧。 +BLE 写入会按 GATT write 能力拆成小块,接收端会按 V2 frame length 重组完整 `0x5A` 帧。lowlevel 插件必须把原生 notification 转成完整 V1 message 或完整 V2 frame 后再 resolve `receive()`,不能把单个 BLE notification 直接返回给 SDK。 V2 的 encode/decode、超时、探测和 frame 重组由 `hd-transport` 的 Protocol Session 层统一实现。BLE transport 只负责把完整 V2 frame 切成平台可写入的小包,并把 notification bytes 喂给 `ProtocolV2FrameAssembler`。 @@ -209,13 +222,14 @@ SDK 会先把 resource、bootloader、firmware 写入 `vol1:`,再把所有需 | 模块 | 入口 | | ------------------------- | --------------------------------------------------------------------- | -| V2 frame encode/decode | `packages/hd-transport/src/serialization/protocol-v2/` | -| V1/V2 schema 路由 | `packages/hd-transport/src/serialization/protocols.ts` | -| V2 session / frame 组装 | `packages/hd-transport/src/protocol-session.ts` | +| V2 CRC8 / frame encode/decode | `packages/hd-transport/src/protocols/v2/` | +| V1/V2 schema 路由 | `packages/hd-transport/src/serialization/protobuf/` | +| V2 session / frame 组装 | `packages/hd-transport/src/protocols/v2/session.ts`、`frame-assembler.ts` | | Protocol V2 feature adapter | `packages/core/src/protocols/protocol-v2/features.ts` | | WebUSB 自动探测 | `packages/hd-transport-web-device/src/webusb.ts` | | Electron BLE 自动探测 | `packages/hd-transport-web-device/src/electron-auto-ble-transport.ts` | | React Native BLE 自动探测 | `packages/hd-transport-react-native/src/index.ts` | +| lowlevel BLE 自动探测 | `packages/hd-transport-lowlevel/src/index.ts` | | env 到 transport 映射 | `packages/hd-common-connect-sdk/src/index.ts` | | Protocol V2 初始化分支 | `packages/core/src/device/Device.ts` | -| Protocol V2 固件更新 | `packages/core/src/api/FirmwareUpdateV3.ts` | +| Protocol V2 固件更新 | `packages/core/src/api/FirmwareUpdateV4.ts` | diff --git a/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx b/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx index 093d9e520..e506acb6b 100644 --- a/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx +++ b/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx @@ -24,7 +24,7 @@ We provide a new communication method where you can use the LowlevelTransportSha ### BLE Header Data Example -Example of the first BLE packet received (header packet): +Example of the first Protocol V1 BLE packet received (header packet): ``` Raw data: 3F 23 23 00 02 00 00 00 0A 12 08 ... @@ -36,6 +36,28 @@ Raw data: 3F 23 23 00 02 00 00 00 0A 12 08 ... Detect header packet: **First 3 bytes are `3F 23 23`** +### Protocol V2 BLE frame + +Protocol V2 uses a complete frame that starts with `0x5A` and includes two CRC8 fields: + +``` +5A LenL LenH HeaderCRC Router Attr Seq Payload... CRC +``` + +| Field | Description | +|-------|-------------| +| `5A` | Protocol V2 start byte | +| `LenL/LenH` | Little-endian total frame length | +| `HeaderCRC` | CRC8 over the first 3 bytes | +| `Router` | BLE UART uses `1` | +| `Attr` / `Seq` | Protocol attributes and sequence number | +| `Payload` | `MsgTypeL MsgTypeH + protobuf bytes` | +| `CRC` | CRC8 over the whole frame except the final CRC byte | + +CRC8 is a required Protocol V2 wire-format field, not device data. When using `@onekeyfe/hd-common-connect-sdk` with the `lowlevel` environment, the JS SDK calculates and verifies CRC8. The native Kotlin/Swift/Flutter plugin only needs to reassemble BLE notifications into a complete `0x5A` frame using `LenL/LenH`, then return the complete frame as a hex string from `receive()`. Do not strip the header, payload, or final CRC. + +Only implement the same CRC8 algorithm on the native side if you completely bypass the OneKey SDK and implement Protocol V2 encode/decode yourself. + Native examples (all based on the Low-Level Transport Plugin): - [Android Native](/en/hardware-sdk/transport/android) — WebView + JSBridge + Nordic BLE @@ -66,7 +88,7 @@ export type LowlevelTransportSharedPlugin = { | Packet size | Fixed 64 bytes | Variable (MTU-dependent) | | Packet prefix | `0x3F` on every packet | `0x3F 0x23 0x23` only on header | | Padding | Zero-pad to 64 bytes | No padding needed | -| `receive()` returns | One 64-byte frame at a time | **Complete reassembled message** | +| `receive()` returns | One 64-byte frame at a time | **Complete Protocol V1 message, or complete Protocol V2 `0x5A` frame** | --- @@ -96,9 +118,9 @@ Transport uses fixed 64-byte frames; the SDK handles message assembly. ## BLE Protocol (Native Mobile) -BLE uses variable-length chunks. **Your plugin must reassemble complete messages.** +BLE uses variable-length chunks. **Your plugin must reassemble complete messages or complete frames.** -### Packet Format +### Protocol V1 Packet Format **Header chunk (first packet of a message):** @@ -185,13 +207,52 @@ class BleMessageAssembler { } ``` +### Protocol V2 frame reassembly + +If a notification starts with `0x5A`, or the plugin is already buffering a V2 frame, process it as Protocol V2: + +- Accumulate notification bytes. +- Once at least 3 bytes are buffered, read the total frame length with `LenL | (LenH << 8)`. +- When the buffer reaches the total length, convert the complete frame to hex and resolve `receive()`. +- If a notification also contains bytes for the next frame, keep the leftover bytes and continue parsing. +- The native side does not need to calculate CRC8; the SDK verifies it during decode. + +Simplified example: + +```typescript +let protocolV2Buffer: number[] = [] +let protocolV2ExpectedLength = 0 + +function onProtocolV2Notification(data: Uint8Array, resolveFrame: (hex: string) => void) { + protocolV2Buffer.push(...data) + + if (protocolV2ExpectedLength === 0 && protocolV2Buffer.length >= 3) { + if (protocolV2Buffer[0] !== 0x5A) { + protocolV2Buffer = [] + return + } + protocolV2ExpectedLength = protocolV2Buffer[1] | (protocolV2Buffer[2] << 8) + } + + while (protocolV2ExpectedLength > 0 && protocolV2Buffer.length >= protocolV2ExpectedLength) { + const frame = new Uint8Array(protocolV2Buffer.slice(0, protocolV2ExpectedLength)) + resolveFrame(Array.from(frame).map(b => b.toString(16).padStart(2, '0')).join('')) + + protocolV2Buffer = protocolV2Buffer.slice(protocolV2ExpectedLength) + protocolV2ExpectedLength = protocolV2Buffer.length >= 3 && protocolV2Buffer[0] === 0x5A + ? protocolV2Buffer[1] | (protocolV2Buffer[2] << 8) + : 0 + } +} +``` + ### Common Mistakes ```typescript -// ❌ WRONG: Re-fragmenting into 64-byte packets +// ❌ WRONG: Returning a single BLE notification or re-fragmenting into 64-byte packets receive() { return this.messageQueue.shift() } -// ✅ CORRECT: Return complete reassembled message +// ✅ CORRECT: Return a complete reassembled V1 message or V2 frame receive() { return this.completeMessagePromise } ``` diff --git a/packages/connect-examples/developer-portal/content/en/hardware-sdk/transport/react-native-ble.mdx b/packages/connect-examples/developer-portal/content/en/hardware-sdk/transport/react-native-ble.mdx index 1bb9eeab0..79ff12384 100644 --- a/packages/connect-examples/developer-portal/content/en/hardware-sdk/transport/react-native-ble.mdx +++ b/packages/connect-examples/developer-portal/content/en/hardware-sdk/transport/react-native-ble.mdx @@ -117,6 +117,8 @@ export async function setupBle() { } ``` +React Native BLE transport automatically detects Protocol V1 / Protocol V2 after connecting. Protocol V2 devices use `0x5A` frames, the BLE UART router, and CRC8 validation. The SDK owns encode/decode, frame reassembly, and CRC8 validation internally, so application code does not need to implement the CRC8 lookup table or manually select a protocol. + ## Discover devices and identify device_id ```ts @@ -153,6 +155,7 @@ if (res.success) { ## Tips - Always subscribe early to `UI_EVENT` so PIN/Passphrase/confirmations do not stall requests. See [Config Event](/en/hardware-sdk/core-api-guide#events-ui). +- Do not reimplement BLE chunking or CRC8 in the React Native app layer. When using `@onekeyfe/hd-ble-sdk`, Protocol V2 `0x5A` frames and CRC8 are maintained by the transport layer. - Keep BLE permissions in sync with the OS version. Test on physical devices. - For additional examples, check: [react-native-demo](https://github.com/OneKeyHQ/hardware-js-sdk/tree/onekey/packages/connect-examples/react-native-demo) diff --git a/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx b/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx index e73e02260..2cc64bb91 100644 --- a/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx +++ b/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx @@ -22,7 +22,7 @@ title: 底层传输插件 ### BLE 头部数据示例 -收到的第一个 BLE 数据包(头部包)示例: +Protocol V1 收到的第一个 BLE 数据包(头部包)示例: ``` 原始数据: 3F 23 23 00 02 00 00 00 0A 12 08 ... @@ -34,6 +34,28 @@ title: 底层传输插件 检测头部包:**前 3 字节为 `3F 23 23`** +### Protocol V2 BLE 帧 + +Protocol V2 使用 `0x5A` 开头的完整 frame,并带有两段 CRC8: + +``` +5A LenL LenH HeaderCRC Router Attr Seq Payload... CRC +``` + +| 字段 | 说明 | +|------|------| +| `5A` | Protocol V2 起始字节 | +| `LenL/LenH` | little-endian 总 frame 长度 | +| `HeaderCRC` | 对前 3 字节计算 CRC8 | +| `Router` | BLE UART 使用 `1` | +| `Attr` / `Seq` | 协议属性和递增序号 | +| `Payload` | `MsgTypeL MsgTypeH + protobuf bytes` | +| `CRC` | 对除最后 CRC 外的整帧计算 CRC8 | + +CRC8 是 Protocol V2 协议必需字段,不是设备数据。使用 `@onekeyfe/hd-common-connect-sdk` 的 `lowlevel` 环境时,JS SDK 会负责计算和校验 CRC8;原生 Kotlin/Swift/Flutter 插件只需要把 BLE notification 按 `LenL/LenH` 重组成完整 `0x5A` frame,并把完整 frame 的 hex 字符串从 `receive()` 返回。不要去掉 header、payload 或末尾 CRC。 + +只有在完全绕过 OneKey SDK、自己实现 Protocol V2 encode/decode 时,才需要在原生侧实现同样的 CRC8 算法。 + 原生示例(均基于低层插件): - [Android 原生](/zh/hardware-sdk/transport/android) — WebView + JSBridge + Nordic BLE @@ -64,7 +86,7 @@ export type LowlevelTransportSharedPlugin = { | 数据包大小 | 固定 64 字节 | 可变长度 (取决于 MTU) | | 每个包前缀 | 所有包都有 `0x3F` | 仅头部包有 `0x3F 0x23 0x23` | | 填充 | 零填充到 64 字节 | 无需填充 | -| `receive()` 返回 | 每次一个 64 字节帧 | **完整重组后的消息** | +| `receive()` 返回 | 每次一个 64 字节帧 | **Protocol V1 完整消息,或 Protocol V2 完整 `0x5A` frame** | --- @@ -94,9 +116,9 @@ export type LowlevelTransportSharedPlugin = { ## BLE 协议(原生移动端) -BLE 使用可变长度块,**插件必须自行重组完整消息**。 +BLE 使用可变长度块,**插件必须自行重组完整消息或完整 frame**。 -### 数据包格式 +### Protocol V1 数据包格式 **头部块(消息第一个包):** @@ -183,13 +205,52 @@ class BleMessageAssembler { } ``` +### Protocol V2 frame 重组规则 + +如果 notification 的第一个字节是 `0x5A`,或当前已经处于 V2 frame 缓冲中,就按 Protocol V2 处理: + +- 累积 notification bytes。 +- 缓冲区至少 3 字节后,用 `LenL | (LenH << 8)` 读取总 frame 长度。 +- 缓冲区达到总长度后,把完整 frame 转成 hex 并 resolve `receive()`。 +- 如果同一个 notification 里拼进了下一帧,保留剩余 bytes 继续解析。 +- 原生侧不需要计算 CRC8,SDK 会在 decode 时校验。 + +简化示例: + +```typescript +let protocolV2Buffer: number[] = [] +let protocolV2ExpectedLength = 0 + +function onProtocolV2Notification(data: Uint8Array, resolveFrame: (hex: string) => void) { + protocolV2Buffer.push(...data) + + if (protocolV2ExpectedLength === 0 && protocolV2Buffer.length >= 3) { + if (protocolV2Buffer[0] !== 0x5A) { + protocolV2Buffer = [] + return + } + protocolV2ExpectedLength = protocolV2Buffer[1] | (protocolV2Buffer[2] << 8) + } + + while (protocolV2ExpectedLength > 0 && protocolV2Buffer.length >= protocolV2ExpectedLength) { + const frame = new Uint8Array(protocolV2Buffer.slice(0, protocolV2ExpectedLength)) + resolveFrame(Array.from(frame).map(b => b.toString(16).padStart(2, '0')).join('')) + + protocolV2Buffer = protocolV2Buffer.slice(protocolV2ExpectedLength) + protocolV2ExpectedLength = protocolV2Buffer.length >= 3 && protocolV2Buffer[0] === 0x5A + ? protocolV2Buffer[1] | (protocolV2Buffer[2] << 8) + : 0 + } +} +``` + ### 常见错误 ```typescript -// ❌ 错误: 重新分片成 64 字节包 +// ❌ 错误: 返回单个 BLE notification 或重新分片成 64 字节包 receive() { return this.messageQueue.shift() } -// ✅ 正确: 返回完整重组后的消息 +// ✅ 正确: 返回完整重组后的 V1 消息或 V2 frame receive() { return this.completeMessagePromise } ``` diff --git a/packages/connect-examples/developer-portal/content/zh/hardware-sdk/transport/react-native-ble.mdx b/packages/connect-examples/developer-portal/content/zh/hardware-sdk/transport/react-native-ble.mdx index 06940081e..7072fd60a 100644 --- a/packages/connect-examples/developer-portal/content/zh/hardware-sdk/transport/react-native-ble.mdx +++ b/packages/connect-examples/developer-portal/content/zh/hardware-sdk/transport/react-native-ble.mdx @@ -117,6 +117,8 @@ export async function setupBle() { } ``` +React Native BLE transport 会在连接后自动探测 Protocol V1 / Protocol V2。Protocol V2 设备使用 `0x5A` frame、BLE UART router 和 CRC8 校验;这些 encode/decode、frame 重组和 CRC8 校验都由 SDK 内部处理,应用层不需要实现 CRC8 查表或手动选择协议。 + ## 发现设备并识别 device_id ```ts @@ -153,6 +155,7 @@ if (res.success) { ## 提示 - 始终尽早订阅 `UI_EVENT`,以免 PIN/密码短语/确认阻塞请求。参见 [配置事件](/zh/hardware-sdk/core-api-guide#events-ui)。 +- 不要在 React Native 应用层重写 BLE 分包或 CRC8。只要使用 `@onekeyfe/hd-ble-sdk`,Protocol V2 的 `0x5A` frame 和 CRC8 都由 transport 层维护。 - 保持 BLE 权限与操作系统版本同步。在物理设备上测试。 - 更多示例请查看:[react-native-demo](https://github.com/OneKeyHQ/hardware-js-sdk/tree/onekey/packages/connect-examples/react-native-demo) From c8fb299002b3b341ce19beb410c78f785c3e11ac Mon Sep 17 00:00:00 2001 From: wabicai Date: Sat, 9 May 2026 16:03:04 +0800 Subject: [PATCH 23/73] fix: fireware update --- docs/architecture.md | 24 ++-- docs/protocol-v2.md | 28 ++-- docs/transport.md | 56 +++++--- .../concepts/low-level-plugin.mdx | 16 +-- .../concepts/low-level-plugin.mdx | 16 +-- .../app/components/common/UnifiedLogger.tsx | 1 + .../app/components/providers/SDKProvider.tsx | 90 +++++++++++-- .../expo-playground/app/routes/pro2-debug.tsx | 10 +- .../expo-playground/app/store/deviceStore.ts | 40 +++++- .../app/utils/hardwareInstance.ts | 13 +- .../expo-playground/app/utils/logger.ts | 20 ++- .../expo-playground/public/webusb_test.html | 62 +++++---- packages/core/__tests__/protocol-v2.test.ts | 57 ++++++++- packages/core/src/api/FirmwareUpdateV4.ts | 28 ++-- .../src/api/protocol-v2/DevFirmwareUpdate.ts | 8 +- packages/core/src/api/protocol-v2/helpers.ts | 5 + packages/core/src/device/DeviceCommands.ts | 120 ++++++++++++++++-- packages/core/src/types/api/protocolV2.ts | 2 +- .../__tests__/protocol-v2.test.js | 40 ++++++ packages/hd-transport-lowlevel/src/index.ts | 32 ++++- .../__tests__/build-receive.test.js | 13 -- .../__tests__/protocol-v2.test.js | 56 +++++++- packages/hd-transport/src/index.ts | 15 --- .../hd-transport/src/protocols/v2/session.ts | 42 +++++- packages/hd-transport/src/types/transport.ts | 1 + pro2Demo/ble_tool.py | 104 ++++++++++++--- pro2Demo/webusb_test.html | 82 ++++++------ 27 files changed, 752 insertions(+), 229 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 420cc6336..f2e83cbc2 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -50,9 +50,11 @@ flowchart TD - `ProtocolV2Session`:负责 V2 encode、frame 写入、frame 读取、decode、超时和统一日志。 - `ProtocolV2FrameAssembler`:负责 BLE/USB 分片后的 `0x5A` frame 重组和长度校验。 -- `probeProtocolV2()`:负责连接后主动 `GetProtoVersion` 探测和失败回退钩子。 +- `probeProtocolV2()`:公共 V2 probe helper,负责 `GetProtoVersion` / bootloader status 探测和失败回退钩子。 -WebUSB、Electron BLE、React Native BLE 只负责各自的物理连接、读写、订阅和平台错误映射,不再各自复制 V2 协议会话逻辑。 +各 transport 的 `detectProtocol()` 会先执行 V1 `Initialize` probe,再按需要调用公共 V2 probe helper;显式 `connectProtocol` 则只验证指定协议。 + +WebUSB、Electron BLE、React Native BLE 和 lowlevel BLE 只负责各自的物理连接、读写、订阅/桥接和平台错误映射,不再各自复制 V2 协议会话逻辑。 ## Protocol V2 Feature Adapter @@ -68,23 +70,27 @@ WebUSB、Electron BLE、React Native BLE 只负责各自的物理连接、读写 ## 自动协议探测 -支持 Protocol V2 的传输实现会在 `acquire()` 后主动探测协议: +支持 Protocol V2 的传输实现会在 `acquire()` 后主动探测协议。默认路径先验证 V1,V1 失败后再 probe V2;如果调用方显式传入 `connectProtocol`,则只验证指定协议: ```mermaid flowchart TD Enumerate["enumerate()"] Acquire["acquire()"] Connect["connect / subscribe"] - Probe["发送 Protocol V2 GetProtoVersion"] - V2["返回 ProtoVersion: 标记为 Protocol V2"] - V1["超时或失败: 回落 Protocol V1"] + ProbeV1["Protocol V1 Initialize"] + V1["Initialize 成功: 标记 Protocol V1"] + ProbeV2["Protocol V2 GetProtoVersion / bootloader status"] + V2["V2 probe 成功: 标记 Protocol V2"] + FallbackV1["V1/V2 均失败: 保持 Protocol V1"] Init["Device.initialize()"] InitV1["V1: Initialize -> Features"] InitV2["V2: Ping + DevGetDeviceInfo -> normalized Features"] - Enumerate --> Acquire --> Connect --> Probe - Probe --> V2 --> Init - Probe --> V1 --> Init + Enumerate --> Acquire --> Connect --> ProbeV1 + ProbeV1 --> V1 --> Init + ProbeV1 --> ProbeV2 + ProbeV2 --> V2 --> Init + ProbeV2 --> FallbackV1 --> Init Init --> InitV1 Init --> InitV2 ``` diff --git a/docs/protocol-v2.md b/docs/protocol-v2.md index 206171e0f..8b39471f7 100644 --- a/docs/protocol-v2.md +++ b/docs/protocol-v2.md @@ -10,21 +10,25 @@ Protocol V2 服务 Pro2。Pro2 同样支持 USB 和 BLE,但不走传统 `Initi ## 主动协议探测 -SDK 不使用 PID、productName 或 descriptor 判断协议。支持 Protocol V2 的 transport 会在连接后发送 V2 `GetProtoVersion`: +SDK 不使用 PID、productName 或 descriptor 作为唯一判断依据。支持 Protocol V2 的 transport 会在连接后做主动探测:如果调用方显式传入 `connectProtocol`,就只验证指定协议;否则默认先用 Protocol V1 `Initialize` 验证现有设备,失败后再发送 Protocol V2 `GetProtoVersion` / bootloader status probe。这样现有 V1 设备保持原路径,未知名称或 bootloader 名称不稳定的 Pro2 也能回落到 V2。 ```mermaid flowchart TD Connect["connect / subscribe"] - Probe["Protocol V2: GetProtoVersion"] - UseV2["ProtoVersion: 使用 Protocol V2"] - UseV1["失败/超时: 使用 Protocol V1"] - - Connect --> Probe - Probe --> UseV2 - Probe --> UseV1 + ProbeV1["Protocol V1: Initialize"] + ProbeV2["Protocol V2: GetProtoVersion / bootloader status"] + UseV1["Initialize 成功: 使用 Protocol V1"] + UseV2["V2 probe 成功: 使用 Protocol V2"] + FallbackV1["V1/V2 均失败: 保持 Protocol V1"] + + Connect --> ProbeV1 + ProbeV1 --> UseV1 + ProbeV1 --> ProbeV2 + ProbeV2 --> UseV2 + ProbeV2 --> FallbackV1 ``` -WebUSB 探测失败后会重置连接,避免失败的 V2 帧影响后续 V1 `Initialize`。BLE 探测失败后清空 V2 接收缓存,并继续使用 V1 BLE 分包逻辑。 +当显式要求 `V2` 时,SDK 会直接 probe V2;当枚举或缓存已经标记为 `V2` 时,也会优先验证 V2。WebUSB 在 V2 probe 失败后会重置连接,避免失败帧影响后续调用;BLE 探测失败后清空 V2 接收缓存,并继续使用 V1 BLE 分包逻辑。 ## 帧格式 @@ -48,7 +52,7 @@ Protocol V2 使用 `0x5A` 起始字节和两段 CRC8。 | `Payload` | protobuf message type + protobuf bytes | | `CRC` | 对除最后 CRC 外的整帧计算 CRC8 | -当前 SDK 使用的最大 V2 frame 长度是 `2200` bytes,文件写入 chunk size 是 `2048` bytes。 +当前 SDK 使用的最大 V2 frame 长度是 `4608` bytes,文件写入 chunk size 是 `4096` bytes。 ### CRC8 说明 @@ -59,7 +63,7 @@ SDK 的实现放在 `packages/hd-transport/src/protocols/v2/crc8.ts`。其中 `C - 与固件侧 `crc8` 实现保持逐字节一致,减少多语言实现时的参数漂移。 - 避免每个 frame 都重新按位计算,尤其是文件写入和固件更新会发送大量 frame。 -如果使用 SDK 提供的 WebUSB、Electron BLE、React Native BLE 或 lowlevel transport,应用层和原生 BLE 插件不需要自己计算 CRC8。lowlevel 原生侧只需要把 BLE notification 按 frame 长度重组成完整 `0x5A` frame,并原样交给 JS SDK;CRC8 的计算和校验由 `hd-transport` 完成。 +如果使用 SDK 提供的 WebUSB、Electron BLE、React Native BLE 或 lowlevel transport,应用层和原生 BLE 插件不需要自己计算 CRC8。lowlevel 原生侧可以直接把 BLE notification chunk 的 hex 字符串返回给 JS SDK,也可以返回已经重组好的完整 `0x5A` frame;无论哪种方式都不要去掉 header、payload 或末尾 CRC,CRC8 的计算和校验由 `hd-transport` 完成。 只有在完全绕过 SDK、自己实现 Protocol V2 encode/decode 时,才需要在 Kotlin、Swift 或其他语言里实现同样的 CRC8 算法。此时可以使用查表,也可以按位计算,但输出必须与 SDK 的 `crc8(data, len)` 完全一致。 @@ -139,7 +143,7 @@ flowchart TD Connect --> Subscribe --> Probe --> Call ``` -BLE 写入会按 GATT write 能力拆成小块,接收端会按 V2 frame length 重组完整 `0x5A` 帧。lowlevel 插件必须把原生 notification 转成完整 V1 message 或完整 V2 frame 后再 resolve `receive()`,不能把单个 BLE notification 直接返回给 SDK。 +BLE 写入会按 GATT write 能力拆成小块,接收端会按 V2 frame length 重组完整 `0x5A` 帧。React Native BLE 和 Electron BLE 在 transport 内部从 notify callback 组帧;lowlevel transport 会在 JS 侧从 `receive()` 返回的 hex chunk 继续重组 V1/V2,因此原生插件可以返回单个 BLE notification,也可以返回完整 V1 message / V2 frame。 V2 的 encode/decode、超时、探测和 frame 重组由 `hd-transport` 的 Protocol Session 层统一实现。BLE transport 只负责把完整 V2 frame 切成平台可写入的小包,并把 notification bytes 喂给 `ProtocolV2FrameAssembler`。 diff --git a/docs/transport.md b/docs/transport.md index 931135f2b..9e8bd5462 100644 --- a/docs/transport.md +++ b/docs/transport.md @@ -3,7 +3,7 @@ ## 两句话总结 - Protocol V1 服务现有 Classic / Mini / Touch / Pro 等设备,USB 和 BLE 都使用旧的分包协议,并通过 `Initialize -> Features` 建立设备上下文。 -- Protocol V2 服务 Pro2,USB 和 BLE 都使用 `0x5A` 帧协议;SDK 在连接后主动发送 `GetProtoVersion` 探测,成功才切换到 V2,失败回落 V1。 +- Protocol V2 服务 Pro2,USB 和 BLE 都使用 `0x5A` 帧协议;SDK 在连接后主动探测 V1/V2,成功后把协议类型写回 descriptor。 ## 协议差异 @@ -27,16 +27,20 @@ flowchart TD Acquire["acquire(path)"] Connect["connectToDevice(path)"] Endpoints["discoverEndpoints(device)"] - Probe["probeProtocolV2(path)"] - V2["callProtocolV2(GetProtoVersion) 返回 ProtoVersion: V2"] - V1["失败或 1500ms 超时: reset connection -> V1"] + ProbeV1["probeProtocolV1(Initialize)"] + V1["Initialize 成功: V1"] + ProbeV2["probeProtocolV2(GetProtoVersion / bootloader status)"] + V2["V2 probe 成功: V2"] + FallbackV1["V1/V2 均失败: V1"] Call["call(path, name, data)"] CallV1["V1: ProtocolV1.encode/decode"] CallV2["V2: ProtocolV2.encode/decode"] - Devices --> Acquire --> Connect --> Endpoints --> Probe - Probe --> V2 --> Call - Probe --> V1 --> Call + Devices --> Acquire --> Connect --> Endpoints --> ProbeV1 + ProbeV1 --> V1 --> Call + ProbeV1 --> ProbeV2 + ProbeV2 --> V2 --> Call + ProbeV2 --> FallbackV1 --> Call Call --> CallV1 Call --> CallV2 ``` @@ -52,16 +56,20 @@ flowchart TD Enumerate["enumerate()"] Acquire["acquire(uuid)"] Connect["connect + subscribe"] - Probe["probeProtocolV2(uuid)"] - V2["GetProtoVersion 成功: V2"] - V1["失败或超时: V1"] + ProbeV1["probeProtocolV1(Initialize)"] + V1["Initialize 成功: V1"] + ProbeV2["probeProtocolV2(GetProtoVersion / bootloader status)"] + V2["V2 probe 成功: V2"] + FallbackV1["V1/V2 均失败: V1"] Call["call(uuid, name, data)"] CallV1["V1: legacy BLE chunk reassembly"] CallV2["V2: 0x5A frame reassembly"] - Enumerate --> Acquire --> Connect --> Probe - Probe --> V2 --> Call - Probe --> V1 --> Call + Enumerate --> Acquire --> Connect --> ProbeV1 + ProbeV1 --> V1 --> Call + ProbeV1 --> ProbeV2 + ProbeV2 --> V2 --> Call + ProbeV2 --> FallbackV1 --> Call Call --> CallV1 Call --> CallV2 ``` @@ -77,16 +85,20 @@ flowchart TD Enumerate["enumerate()"] Acquire["acquire(uuid)"] Connect["connect + discover services + subscribe"] - Probe["probeProtocolV2(uuid)"] - V2["GetProtoVersion 成功: V2"] - V1["失败或 1500ms 超时: V1"] + ProbeV1["probeProtocolV1(Initialize)"] + V1["Initialize 成功: V1"] + ProbeV2["probeProtocolV2(GetProtoVersion / bootloader status)"] + V2["V2 probe 成功: V2"] + FallbackV1["V1/V2 均失败: V1"] Call["call(uuid, name, data)"] CallV1["V1: legacy BLE chunk reassembly"] CallV2["V2: BLE UART router + 0x5A frame reassembly"] - Enumerate --> Acquire --> Connect --> Probe - Probe --> V2 --> Call - Probe --> V1 --> Call + Enumerate --> Acquire --> Connect --> ProbeV1 + ProbeV1 --> V1 --> Call + ProbeV1 --> ProbeV2 + ProbeV2 --> V2 --> Call + ProbeV2 --> FallbackV1 --> Call Call --> CallV1 Call --> CallV2 ``` @@ -119,7 +131,8 @@ V2 协议公共能力放在 `packages/hd-transport/src/protocol-session.ts`: | -------------------------- | ---------------------------------------------------------- | | `ProtocolV2Session` | 统一执行 V2 encode、写 frame、读 frame、decode、超时和日志 | | `ProtocolV2FrameAssembler` | 根据 `0x5A` frame length 重组 USB/BLE 分片,并校验最大长度 | -| `probeProtocolV2()` | 连接后发送 `GetProtoVersion`,成功返回 V2,失败走回退钩子 | +| `probeProtocolV1()` | 默认路径先发送 `Initialize`,成功继续走 V1 初始化 | +| `probeProtocolV2()` | V1 失败、显式 V2 或缓存 V2 时发送 `GetProtoVersion` / bootloader status probe | 具体 transport 只提供平台相关能力: @@ -128,6 +141,7 @@ V2 协议公共能力放在 `packages/hd-transport/src/protocol-session.ts`: | WebUSB | USB 设备授权、endpoint discovery、transferIn/out retry | | Electron BLE | noble 连接、订阅、hex 写入、BLE 错误映射 | | React Native BLE | BLE PLX 连接、service/characteristic 发现、base64 写入 | +| lowlevel BLE | 原生桥接 `enumerate/connect/send/receive`,JS 侧重组 V1/V2 | 这个层级让后续新增协议或新增传输方式时只扩展 session/channel 边界,不把协议细节继续散落到每个 transport 实现里。 @@ -170,7 +184,7 @@ resource 和 bootloader 写入后必须进入 `targets`,SDK 不依赖固件端 ## 兼容性边界 -- V1 设备无法响应 V2 `GetProtoVersion`,探测失败后会回落 V1。 +- V1 设备会优先通过 `Initialize` 探测成功;无法响应 V2 `GetProtoVersion` 时仍保持 V1。 - V2 设备不支持传统 `Initialize/GetFeatures`,因此初始化必须走 Protocol V2 分支。 - 协议选择不暴露给应用层;应用层继续使用 connectId 和原有 API。 - V2 文件写入使用 `FilesystemFileWrite`,返回 `FilesystemFile`,不能继续使用旧的 `FileWrite/File` 名称。 diff --git a/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx b/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx index e506acb6b..9603ed67c 100644 --- a/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx +++ b/packages/connect-examples/developer-portal/content/en/hardware-sdk/concepts/low-level-plugin.mdx @@ -54,7 +54,7 @@ Protocol V2 uses a complete frame that starts with `0x5A` and includes two CRC8 | `Payload` | `MsgTypeL MsgTypeH + protobuf bytes` | | `CRC` | CRC8 over the whole frame except the final CRC byte | -CRC8 is a required Protocol V2 wire-format field, not device data. When using `@onekeyfe/hd-common-connect-sdk` with the `lowlevel` environment, the JS SDK calculates and verifies CRC8. The native Kotlin/Swift/Flutter plugin only needs to reassemble BLE notifications into a complete `0x5A` frame using `LenL/LenH`, then return the complete frame as a hex string from `receive()`. Do not strip the header, payload, or final CRC. +CRC8 is a required Protocol V2 wire-format field, not device data. When using `@onekeyfe/hd-common-connect-sdk` with the `lowlevel` environment, the JS SDK calculates CRC8, reassembles frames, and verifies CRC8. The native Kotlin/Swift/Flutter plugin can return a single BLE notification chunk as a hex string from `receive()`, or it can return an already reassembled complete `0x5A` frame. In either mode, do not strip the header, payload, or final CRC. Only implement the same CRC8 algorithm on the native side if you completely bypass the OneKey SDK and implement Protocol V2 encode/decode yourself. @@ -88,7 +88,7 @@ export type LowlevelTransportSharedPlugin = { | Packet size | Fixed 64 bytes | Variable (MTU-dependent) | | Packet prefix | `0x3F` on every packet | `0x3F 0x23 0x23` only on header | | Padding | Zero-pad to 64 bytes | No padding needed | -| `receive()` returns | One 64-byte frame at a time | **Complete Protocol V1 message, or complete Protocol V2 `0x5A` frame** | +| `receive()` returns | One 64-byte frame at a time | **Single BLE notification chunk, or complete Protocol V1/V2 message** | --- @@ -209,7 +209,7 @@ class BleMessageAssembler { ### Protocol V2 frame reassembly -If a notification starts with `0x5A`, or the plugin is already buffering a V2 frame, process it as Protocol V2: +If you choose to reassemble V2 frames on the native side, use the rules below. The SDK lowlevel transport performs the same reassembly itself, so forwarding raw notification chunks is also valid: - Accumulate notification bytes. - Once at least 3 bytes are buffered, read the total frame length with `LenL | (LenH << 8)`. @@ -249,11 +249,11 @@ function onProtocolV2Notification(data: Uint8Array, resolveFrame: (hex: string) ### Common Mistakes ```typescript -// ❌ WRONG: Returning a single BLE notification or re-fragmenting into 64-byte packets -receive() { return this.messageQueue.shift() } +// ❌ WRONG: Strip the Protocol V2 header/CRC and return only payload bytes +receive() { return this.payloadOnlyQueue.shift() } -// ✅ CORRECT: Return a complete reassembled V1 message or V2 frame -receive() { return this.completeMessagePromise } +// ✅ CORRECT: Return a raw notification chunk, or a complete reassembled V1/V2 frame +receive() { return this.rawChunkOrCompleteFramePromise } ``` ```typescript @@ -276,7 +276,7 @@ import HardwareSDK from '@onekeyfe/hd-common-connect-sdk' const plugin = { enumerate: () => Promise.resolve([{ id: 'foo', name: 'bar' }]), send: (uuid, data) => { /* Send hex data */ }, - receive: () => { /* WebUSB: 64-byte frame / BLE: Complete message */ }, + receive: () => { /* BLE: raw notification chunk or complete message */ }, connect: (uuid) => { /* BLE Android: Bond first! */ }, disconnect: (uuid) => { /* Clean up connection */ }, init: () => { /* Initialize BLE stack */ }, diff --git a/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx b/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx index 2cc64bb91..d8d88306d 100644 --- a/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx +++ b/packages/connect-examples/developer-portal/content/zh/hardware-sdk/concepts/low-level-plugin.mdx @@ -52,7 +52,7 @@ Protocol V2 使用 `0x5A` 开头的完整 frame,并带有两段 CRC8: | `Payload` | `MsgTypeL MsgTypeH + protobuf bytes` | | `CRC` | 对除最后 CRC 外的整帧计算 CRC8 | -CRC8 是 Protocol V2 协议必需字段,不是设备数据。使用 `@onekeyfe/hd-common-connect-sdk` 的 `lowlevel` 环境时,JS SDK 会负责计算和校验 CRC8;原生 Kotlin/Swift/Flutter 插件只需要把 BLE notification 按 `LenL/LenH` 重组成完整 `0x5A` frame,并把完整 frame 的 hex 字符串从 `receive()` 返回。不要去掉 header、payload 或末尾 CRC。 +CRC8 是 Protocol V2 协议必需字段,不是设备数据。使用 `@onekeyfe/hd-common-connect-sdk` 的 `lowlevel` 环境时,JS SDK 会负责计算 CRC8、重组 frame 并校验 CRC8;原生 Kotlin/Swift/Flutter 插件可以把单个 BLE notification chunk 的 hex 字符串从 `receive()` 返回,也可以返回已经重组好的完整 `0x5A` frame。无论哪种方式,都不要去掉 header、payload 或末尾 CRC。 只有在完全绕过 OneKey SDK、自己实现 Protocol V2 encode/decode 时,才需要在原生侧实现同样的 CRC8 算法。 @@ -86,7 +86,7 @@ export type LowlevelTransportSharedPlugin = { | 数据包大小 | 固定 64 字节 | 可变长度 (取决于 MTU) | | 每个包前缀 | 所有包都有 `0x3F` | 仅头部包有 `0x3F 0x23 0x23` | | 填充 | 零填充到 64 字节 | 无需填充 | -| `receive()` 返回 | 每次一个 64 字节帧 | **Protocol V1 完整消息,或 Protocol V2 完整 `0x5A` frame** | +| `receive()` 返回 | 每次一个 64 字节帧 | **单个 BLE notification chunk,或完整 Protocol V1/V2 消息** | --- @@ -207,7 +207,7 @@ class BleMessageAssembler { ### Protocol V2 frame 重组规则 -如果 notification 的第一个字节是 `0x5A`,或当前已经处于 V2 frame 缓冲中,就按 Protocol V2 处理: +如果你选择在原生侧提前重组 V2 frame,可以按下面的规则处理。SDK 的 lowlevel transport 自身也会做同样的重组,因此原生侧直接转发 notification chunk 也是可行的: - 累积 notification bytes。 - 缓冲区至少 3 字节后,用 `LenL | (LenH << 8)` 读取总 frame 长度。 @@ -247,11 +247,11 @@ function onProtocolV2Notification(data: Uint8Array, resolveFrame: (hex: string) ### 常见错误 ```typescript -// ❌ 错误: 返回单个 BLE notification 或重新分片成 64 字节包 -receive() { return this.messageQueue.shift() } +// ❌ 错误: 去掉 Protocol V2 header/CRC,只返回 payload +receive() { return this.payloadOnlyQueue.shift() } -// ✅ 正确: 返回完整重组后的 V1 消息或 V2 frame -receive() { return this.completeMessagePromise } +// ✅ 正确: 返回原始 notification chunk,或完整重组后的 V1/V2 frame +receive() { return this.rawChunkOrCompleteFramePromise } ``` ```typescript @@ -274,7 +274,7 @@ import HardwareSDK from '@onekeyfe/hd-common-connect-sdk' const plugin = { enumerate: () => Promise.resolve([{ id: 'foo', name: 'bar' }]), send: (uuid, data) => { /* 发送 hex 数据 */ }, - receive: () => { /* WebUSB: 64字节帧 / BLE: 完整消息 */ }, + receive: () => { /* BLE: 原始 notification chunk 或完整消息 */ }, connect: (uuid) => { /* BLE Android: 先配对! */ }, disconnect: (uuid) => { /* 清理连接 */ }, init: () => { /* 初始化 BLE 栈 */ }, diff --git a/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx b/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx index 10848d926..1d9021f89 100644 --- a/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx +++ b/packages/connect-examples/expo-playground/app/components/common/UnifiedLogger.tsx @@ -34,6 +34,7 @@ export interface UnifiedLogEntry { content?: string | Record | null; data?: Record; description?: string; + transient?: boolean; } interface UnifiedLoggerProps { diff --git a/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx b/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx index 89fe7f9dd..dd6bc9976 100644 --- a/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx +++ b/packages/connect-examples/expo-playground/app/components/providers/SDKProvider.tsx @@ -9,7 +9,7 @@ import { EDeviceType } from '@onekeyfe/hd-shared'; import GlobalDialogManager from '../global/GlobalDialogManager'; import WebUsbAuthorizeDialog from '../global/WebUsbAuthorizeDialog'; import { logData, logInfo, logError, logHardware } from '../../utils/logger'; -import { SDKUtils } from '../../utils/hardwareInstance'; +import { SDKUtils, isSdkDebugEnabled } from '../../utils/hardwareInstance'; import { create } from 'zustand'; // 声明全局弹窗管理器类型 @@ -27,6 +27,27 @@ interface SDKProviderProps { children: React.ReactNode; } +const SDK_DEBUG_LOG_PATTERN = + /(ProtocolV2|WebUsbTransport|hd-transport-webusb|DeviceCommands|call-)/; +const SDK_DEBUG_LOG_FLUSH_INTERVAL_MS = 300; +const SDK_DEBUG_LOG_MAX_QUEUE_LENGTH = 200; +const SDK_DEBUG_LOG_MAX_BATCH_LENGTH = 60; +const SDK_DEBUG_LOG_MAX_TEXT_LENGTH = 1800; + +function stringifySdkLogItem(item: unknown): string { + if (typeof item === 'string') return item; + try { + return JSON.stringify(item); + } catch { + return String(item); + } +} + +function truncateSdkDebugText(text: string): string { + if (text.length <= SDK_DEBUG_LOG_MAX_TEXT_LENGTH) return text; + return `${text.slice(0, SDK_DEBUG_LOG_MAX_TEXT_LENGTH)}...`; +} + // 固件进度状态管理 export interface FirmwareProgressData { progress: number; @@ -58,27 +79,66 @@ export const SDKProvider: React.FC = ({ children }) => { | typeof UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE >(UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE); const lastSdkRef = useRef(null); + const sdkDebugLogQueueRef = useRef([]); + const sdkDebugLogFlushTimerRef = useRef | null>(null); + + const flushSdkDebugLogs = useCallback(() => { + sdkDebugLogFlushTimerRef.current = null; + + const queuedLogs = sdkDebugLogQueueRef.current.splice(0); + if (queuedLogs.length === 0) return; + + const droppedCount = Math.max(queuedLogs.length - SDK_DEBUG_LOG_MAX_BATCH_LENGTH, 0); + const visibleLogs = queuedLogs.slice(-SDK_DEBUG_LOG_MAX_BATCH_LENGTH); + + logHardware( + 'SDK debug log', + { + count: queuedLogs.length, + ...(droppedCount > 0 ? { dropped: droppedCount } : {}), + message: visibleLogs.join('\n'), + }, + { + console: false, + persist: false, + } + ); + }, []); const setupSDKEventListeners = useCallback( (sdkInstance: CoreApi) => { + const sdkDebugEnabled = isSdkDebugEnabled(); + sdkInstance.on(LOG_EVENT, (message: { payload?: unknown }) => { + if (!sdkDebugEnabled) { + return; + } + const payload = message.payload; const items = Array.isArray(payload) ? payload : [payload]; const text = items .filter(item => item !== undefined && item !== null) - .map(item => (typeof item === 'string' ? item : JSON.stringify(item))) + .map(stringifySdkLogItem) .join(' '); - if ( - !text || - !/(ProtocolV2|WebUsbTransport|hd-transport-webusb|DeviceCommands|call-)/.test(text) - ) { + if (!text || !SDK_DEBUG_LOG_PATTERN.test(text)) { return; } - logHardware('SDK debug log', { - message: text, - }); + sdkDebugLogQueueRef.current.push(truncateSdkDebugText(text)); + if (sdkDebugLogQueueRef.current.length > SDK_DEBUG_LOG_MAX_QUEUE_LENGTH) { + sdkDebugLogQueueRef.current.splice( + 0, + sdkDebugLogQueueRef.current.length - SDK_DEBUG_LOG_MAX_QUEUE_LENGTH + ); + } + + if (!sdkDebugLogFlushTimerRef.current) { + sdkDebugLogFlushTimerRef.current = setTimeout( + flushSdkDebugLogs, + SDK_DEBUG_LOG_FLUSH_INTERVAL_MS + ); + } }); // 监听SDK UI事件 @@ -184,7 +244,7 @@ export const SDKProvider: React.FC = ({ children }) => { logInfo('device-disconnect', device); }); }, - [setDeviceAction, clearDeviceAction] + [setDeviceAction, clearDeviceAction, flushSdkDebugLogs] ); // 初始化SDK @@ -248,6 +308,16 @@ export const SDKProvider: React.FC = ({ children }) => { handleInitializeSDK(); }, [handleInitializeSDK]); + useEffect(() => { + return () => { + if (sdkDebugLogFlushTimerRef.current) { + clearTimeout(sdkDebugLogFlushTimerRef.current); + sdkDebugLogFlushTimerRef.current = null; + } + sdkDebugLogQueueRef.current = []; + }; + }, []); + return ( <> {children} diff --git a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx index 2e56d6c65..28f1f743f 100644 --- a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx +++ b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx @@ -11,6 +11,7 @@ import { useHardwareMethodExecution } from '../hooks/useHardwareMethodExecution' import { useDeviceStore } from '../store/deviceStore'; import { device } from '../data/methods/device'; import { firmware } from '../data/methods/firmware'; +import { isSdkDebugEnabled } from '../utils/hardwareInstance'; import { logHardware } from '../utils/logger'; import type { UnifiedMethodConfig } from '../data/types'; @@ -144,9 +145,9 @@ const PRO2_METHOD_WIRE_INFO: Record = { devFirmwareUpdate: { tx: '61000 (DevFirmwareUpdate)', txPayload: PRO2_DYNAMIC_PAYLOAD, - rx: '61001 (DevFirmwareInstallProgress) / 60207 (Success)', + rx: '61001 (DevFirmwareInstallProgress) / 61003 (DevFirmwareUpdateStatus) / 60207 (Success)', rxPayload: PRO2_DYNAMIC_RESPONSE, - decoded: 'Progress / Success', + decoded: 'Progress / DevFirmwareUpdateStatus / Success', }, devGetFirmwareUpdateStatus: { tx: '61002 (DevGetFirmwareUpdateStatus)', @@ -392,6 +393,7 @@ export default function Pro2DebugPage() { ); }, [pro2Methods, selectedMethodName]); const selectedWireInfo = selectedMethod ? PRO2_METHOD_WIRE_INFO[selectedMethod.method] : null; + const sdkDebugEnabled = isSdkDebugEnabled(); const handleMethodExecution = useCallback( async (params: Record): Promise> => { @@ -428,7 +430,9 @@ export default function Pro2DebugPage() {

- SDK debug: enabled + + SDK debug: {sdkDebugEnabled ? 'enabled' : 'off'} + {currentDevice ? currentDevice.connectId : 'No device'} diff --git a/packages/connect-examples/expo-playground/app/store/deviceStore.ts b/packages/connect-examples/expo-playground/app/store/deviceStore.ts index 264c309eb..19eafc94b 100644 --- a/packages/connect-examples/expo-playground/app/store/deviceStore.ts +++ b/packages/connect-examples/expo-playground/app/store/deviceStore.ts @@ -49,6 +49,7 @@ export interface CompressedLogEntry { content?: string; // 压缩后的JSON字符串 data?: string; // 压缩后的JSON字符串 (兼容性) compressed?: boolean; + transient?: boolean; } // 持久化日志存储结构 @@ -120,6 +121,10 @@ const DEFAULT_LOG_CONFIG: LogStorageConfig = { compressionEnabled: true, // 启用压缩 }; +const MAX_TRANSIENT_LOG_ENTRIES = 300; + +let lastPersistedDeviceStoreValue: string | null = null; + // 智能压缩函数 - 使用LZ-string进行真正的压缩 const compressData = (data: Record): string => { try { @@ -243,6 +248,7 @@ const compressLogEntry = (log: UnifiedLogEntry, config: LogStorageConfig): Compr content: logData ? JSON.stringify(logData) : undefined, data: logData ? JSON.stringify(logData) : undefined, compressed: false, + transient: filteredLog.transient, }; } @@ -264,6 +270,7 @@ const compressLogEntry = (log: UnifiedLogEntry, config: LogStorageConfig): Compr content: compressedData, data: compressedData, compressed: wasCompressed, + transient: filteredLog.transient, }; }; @@ -280,9 +287,25 @@ const decompressLogEntry = (compressed: CompressedLogEntry): UnifiedLogEntry => message: compressed.message, content: decompressedData || null, data: decompressedData, + ...(compressed.transient ? { transient: true } : {}), }; }; +const trimTransientLogs = (logs: UnifiedLogEntry[]): UnifiedLogEntry[] => { + let transientCount = logs.reduce((count, log) => count + (log.transient ? 1 : 0), 0); + if (transientCount <= MAX_TRANSIENT_LOG_ENTRIES) { + return logs; + } + + return logs.filter(log => { + if (!log.transient || transientCount <= MAX_TRANSIENT_LOG_ENTRIES) { + return true; + } + transientCount -= 1; + return false; + }); +}; + export const useDeviceStore = create()( persist( (set, get) => ({ @@ -332,7 +355,7 @@ export const useDeviceStore = create()( addLog: (log: UnifiedLogEntry) => set(state => { - const newLogs = [...state.logs, log]; + const newLogs = trimTransientLogs([...state.logs, log]); // 在内存中也进行基本的大小限制 if (newLogs.length > state.logStorageConfig.maxEntries) { return { @@ -466,7 +489,9 @@ export const useDeviceStore = create()( // 只持久化日志和配置,其他状态保持会话级别 partialize: state => ({ - logs: state.logs.map(log => compressLogEntry(log, state.logStorageConfig)), + logs: state.logs + .filter(log => !log.transient) + .map(log => compressLogEntry(log, state.logStorageConfig)), logStorageConfig: state.logStorageConfig, }), @@ -485,7 +510,9 @@ export const useDeviceStore = create()( parsed.state.lastCleanup = new Date().toISOString(); } - return JSON.stringify(parsed); + const serialized = JSON.stringify(parsed); + lastPersistedDeviceStoreValue = serialized; + return serialized; } catch (error) { console.warn('Failed to read persisted logs:', error); // 如果是版本错误,清除存储并返回null以重新初始化 @@ -506,7 +533,12 @@ export const useDeviceStore = create()( parsed.state.logs = cleanupLogs(parsed.state.logs, config); } - localStorage.setItem(name, JSON.stringify(parsed)); + const serialized = JSON.stringify(parsed); + if (serialized === lastPersistedDeviceStoreValue) { + return; + } + localStorage.setItem(name, serialized); + lastPersistedDeviceStoreValue = serialized; } catch (error) { console.warn('Failed to persist logs:', error); } diff --git a/packages/connect-examples/expo-playground/app/utils/hardwareInstance.ts b/packages/connect-examples/expo-playground/app/utils/hardwareInstance.ts index ce26353d7..1013dfc60 100644 --- a/packages/connect-examples/expo-playground/app/utils/hardwareInstance.ts +++ b/packages/connect-examples/expo-playground/app/utils/hardwareInstance.ts @@ -7,6 +7,17 @@ let initialized = false; export type TransportType = 'webusb' | 'jsbridge' | 'emulator'; +export const SDK_DEBUG_LOG_STORAGE_KEY = 'ONEKEY_CAPTURE_SDK_DEBUG_LOGS'; + +export function isSdkDebugEnabled(): boolean { + if (typeof window === 'undefined') return true; + try { + return window.localStorage.getItem(SDK_DEBUG_LOG_STORAGE_KEY) !== 'false'; + } catch { + return true; + } +} + export interface SDKInitResult { HardwareSDK: CoreApi; initialized: boolean; @@ -39,7 +50,7 @@ export const getHardwareSDKInstance = memoizee( logInfo(`Initializing SDK with transport: ${transport}`); const settings: Partial = { - debug: true, + debug: isSdkDebugEnabled(), fetchConfig: true, env: getSDKEnv(transport), }; diff --git a/packages/connect-examples/expo-playground/app/utils/logger.ts b/packages/connect-examples/expo-playground/app/utils/logger.ts index 8faf8b793..e50ffaf1e 100644 --- a/packages/connect-examples/expo-playground/app/utils/logger.ts +++ b/packages/connect-examples/expo-playground/app/utils/logger.ts @@ -3,11 +3,18 @@ import type { UnifiedLogEntry, LogType } from '../components/common/UnifiedLogge export type logData = Record | undefined; +type LogOptions = { + console?: boolean; + persist?: boolean; + store?: boolean; +}; + // Create a unified log entry export function createUnifiedLogEntry( type: LogType, message: string, - data?: logData + data?: logData, + options: { transient?: boolean } = {} ): UnifiedLogEntry { return { id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, @@ -17,6 +24,7 @@ export function createUnifiedLogEntry( message, content: data || null, data, + ...(options.transient ? { transient: true } : {}), }; } @@ -66,11 +74,15 @@ export function logResponse(message: string, data?: logData) { } // Log hardware-level details (e.g., final params to device) -export function logHardware(message: string, data?: logData) { - console.info(`[HARDWARE] ${message}`, data || ''); +export function logHardware(message: string, data?: logData, options: LogOptions = {}) { + const { console: shouldWriteConsole = true, persist = true, store = true } = options; + if (shouldWriteConsole) { + console.info(`[HARDWARE] ${message}`, data || ''); + } + if (!store) return; try { const store = useDeviceStore.getState(); - store.addLog(createUnifiedLogEntry('hardware', message, data)); + store.addLog(createUnifiedLogEntry('hardware', message, data, { transient: !persist })); } catch (e) { console.error('Failed to add log to store:', e); } diff --git a/packages/connect-examples/expo-playground/public/webusb_test.html b/packages/connect-examples/expo-playground/public/webusb_test.html index 8eb787584..75491dcce 100644 --- a/packages/connect-examples/expo-playground/public/webusb_test.html +++ b/packages/connect-examples/expo-playground/public/webusb_test.html @@ -731,7 +731,7 @@

Log

} } - // ==================== Proto V0 ==================== + // ==================== Protocol V2 ==================== const PROTO_HEAD_SOF = 0x5A; const PROTO_PRE_HEAD_SIZE = 4; const PROTO_HEAD_CRC_SIZE = 8; @@ -1152,12 +1152,12 @@

Log

const payload = new Uint8Array(2 + pbPayload.length); payload.set(msgTypeBytes, 0); payload.set(pbPayload, 2); - // Wrap in proto v0 frame + // Wrap in Protocol V2 frame return buildProtoFrame(payload, packetSrc, router); } function parsePbResponse(data) { - // data is the payload from proto v0 frame (after header, before CRC) + // data is the payload from Protocol V2 frame (after header, before CRC) // Format: 2-byte msg_type (little-endian) + protobuf payload if (data.length < 2) return null; const msgType = data[0] | (data[1] << 8); @@ -1165,6 +1165,30 @@

Log

return { msgType, pbPayload }; } + function parseProtoFrame(frame) { + if (!frame || frame.length < PROTO_HEAD_CRC_SIZE || frame[0] !== PROTO_HEAD_SOF) { + throw new Error('Invalid Protocol V2 frame'); + } + + const frameLen = frame[1] | (frame[2] << 8); + if (frameLen < PROTO_HEAD_CRC_SIZE || frameLen > frame.length) { + throw new Error(`Invalid Protocol V2 frame length: ${frameLen}`); + } + + const exactFrame = frame.slice(0, frameLen); + const expectedHeaderCrc = crc8(exactFrame, 3); + if (exactFrame[3] !== expectedHeaderCrc) { + throw new Error(`Header CRC mismatch: expected 0x${expectedHeaderCrc.toString(16).padStart(2, '0')}, got 0x${exactFrame[3].toString(16).padStart(2, '0')}`); + } + + const expectedFrameCrc = crc8(exactFrame, frameLen - 1); + if (exactFrame[frameLen - 1] !== expectedFrameCrc) { + throw new Error(`Frame CRC mismatch: expected 0x${expectedFrameCrc.toString(16).padStart(2, '0')}, got 0x${exactFrame[frameLen - 1].toString(16).padStart(2, '0')}`); + } + + return exactFrame.slice(7, frameLen - 1); + } + function switchPbTab(tabName) { document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active')); document.querySelectorAll('.tab-content').forEach(tab => tab.classList.remove('active')); @@ -1192,12 +1216,7 @@

Log

} const rxData = new Uint8Array(result.data.buffer); - if (rxData[0] !== PROTO_HEAD_SOF || rxData.length < PROTO_HEAD_CRC_SIZE) { - throw new Error('Invalid proto frame'); - } - - const frameLen = rxData[1] | (rxData[2] << 8); - const payloadData = rxData.slice(7, frameLen - 1); + const payloadData = parseProtoFrame(rxData); const resp = parsePbResponse(payloadData); if (!resp) { @@ -1253,10 +1272,9 @@

Log

const rxHex = Array.from(rxData).map(b => b.toString(16).padStart(2, '0')).join(' '); log(`📥 PB RX (${rxData.length} bytes): ${rxHex}`, 'rx'); - // Parse proto v0 frame to extract payload - if (rxData[0] === PROTO_HEAD_SOF && rxData.length >= PROTO_HEAD_CRC_SIZE) { - const frameLen = rxData[1] | (rxData[2] << 8); - const payloadData = rxData.slice(7, frameLen - 1); + // Parse Protocol V2 frame to extract payload + try { + const payloadData = parseProtoFrame(rxData); const resp = parsePbResponse(payloadData); if (resp) { @@ -1288,6 +1306,8 @@

Log

}, `Unexpected msg_type: ${resp.msgType}`, -1); } } + } catch (error) { + throw new Error(`Invalid Protocol V2 frame: ${error.message}`); } } } catch (error) { @@ -1339,12 +1359,7 @@

Log

const rxData = new Uint8Array(result.data.buffer); - if (rxData[0] !== PROTO_HEAD_SOF || rxData.length < PROTO_HEAD_CRC_SIZE) { - throw new Error('Invalid proto frame'); - } - - const frameLen = rxData[1] | (rxData[2] << 8); - const payloadData = rxData.slice(7, frameLen - 1); + const payloadData = parseProtoFrame(rxData); const resp = parsePbResponse(payloadData); if (!resp) { @@ -1615,13 +1630,8 @@

Log

const rxData = new Uint8Array(result.data.buffer); - // Parse proto v0 frame - if (rxData[0] !== PROTO_HEAD_SOF || rxData.length < PROTO_HEAD_CRC_SIZE) { - throw new Error('Invalid proto frame'); - } - - const frameLen = rxData[1] | (rxData[2] << 8); - const payloadData = rxData.slice(7, frameLen - 1); + // Parse Protocol V2 frame + const payloadData = parseProtoFrame(rxData); const resp = parsePbResponse(payloadData); if (!resp) { diff --git a/packages/core/__tests__/protocol-v2.test.ts b/packages/core/__tests__/protocol-v2.test.ts index c74129c3c..e89d04e4e 100644 --- a/packages/core/__tests__/protocol-v2.test.ts +++ b/packages/core/__tests__/protocol-v2.test.ts @@ -2,6 +2,7 @@ import JSZip from 'jszip'; import FileRead from '../src/api/FileRead'; import FileWrite from '../src/api/FileWrite'; +import DevFirmwareUpdate from '../src/api/protocol-v2/DevFirmwareUpdate'; import FirmwareUpdateV3 from '../src/api/FirmwareUpdateV3'; import FirmwareUpdateV4 from '../src/api/FirmwareUpdateV4'; import GetOnekeyFeatures from '../src/api/GetOnekeyFeatures'; @@ -241,7 +242,7 @@ describe('Protocol V2 firmware update targets', () => { const versions = await (method as any).waitForProtocolV2FinalFeatures(); - expect(acquire).toHaveBeenCalledWith('ble-id', null, true); + expect(acquire).toHaveBeenCalledWith('ble-id', null, true, 'V2'); expect(typedCall).toHaveBeenNthCalledWith( 1, 'Ping', @@ -386,6 +387,7 @@ describe('Protocol V2 firmware update targets', () => { }); const callOptions = typedCall.mock.calls[0][3]; + expect(typedCall.mock.calls[0][1]).toEqual(['Success', 'DevFirmwareUpdateStatus']); expect(callOptions.intermediateTypes).toEqual(['DevFirmwareInstallProgress']); callOptions.onIntermediateResponse({ type: 'DevFirmwareInstallProgress', @@ -394,6 +396,59 @@ describe('Protocol V2 firmware update targets', () => { expect(method.postProgressMessage).toHaveBeenCalledWith(42, 'installingFirmware'); }); + + test('accepts Protocol V2 firmware update status as start response', async () => { + const method = new FirmwareUpdateV4({ + id: 1, + payload: { + method: 'firmwareUpdateV4', + }, + }); + const typedCall = jest.fn().mockResolvedValue({ + type: 'DevFirmwareUpdateStatus', + message: { targets: [{ target_id: 0, status: 1 }] }, + }); + + (method as any).device = { + getCommands: () => ({ typedCall }), + }; + method.postProgressMessage = jest.fn(); + method.postTipMessage = jest.fn(); + + await (method as any).protocolV2StartFirmwareUpdate({ + targets: [{ target_id: 0, path: 'vol1:firmware.bin' }], + }); + + expect(typedCall.mock.calls[0][1]).toEqual(['Success', 'DevFirmwareUpdateStatus']); + expect(method.postTipMessage).toHaveBeenCalledWith('FirmwareUpdating'); + }); +}); + +describe('Protocol V2 firmware update method', () => { + test('returns DevFirmwareUpdateStatus from low-level update trigger', async () => { + const method = new DevFirmwareUpdate({ + id: 1, + payload: { + method: 'devFirmwareUpdate', + path: 'vol0:firmware.bin', + }, + }); + method.init(); + + const typedCall = jest.fn().mockResolvedValue({ + type: 'DevFirmwareUpdateStatus', + message: { targets: [{ target_id: 0, status: 1 }] }, + }); + + (method as any).device = { + commands: { typedCall }, + }; + + await expect(method.run()).resolves.toEqual({ + targets: [{ target_id: 0, status: 1 }], + }); + expect(typedCall.mock.calls[0][1]).toEqual(['Success', 'DevFirmwareUpdateStatus']); + }); }); describe('Protocol V2 file write method', () => { diff --git a/packages/core/src/api/FirmwareUpdateV4.ts b/packages/core/src/api/FirmwareUpdateV4.ts index 22ad6906c..013658a42 100644 --- a/packages/core/src/api/FirmwareUpdateV4.ts +++ b/packages/core/src/api/FirmwareUpdateV4.ts @@ -21,6 +21,7 @@ import { getProtocolV2Features, protocolV2FileNameToTargetId, } from '../protocols/protocol-v2'; +import { PROTOCOL_V2_FIRMWARE_UPDATE_RESPONSE_TYPES } from './protocol-v2/helpers'; import type { FirmwareUpdateV4Params } from '../types/api/firmwareUpdate'; import type { EFirmwareType } from '@onekeyfe/hd-shared'; @@ -30,13 +31,13 @@ import type { TypedResponseMessage } from '../device/DeviceCommands'; const Log = getLogger(LoggerNames.Method); const SESSION_ERROR = 'session not found'; -const FIRMWARE_UPDATE_CONFIRM = 'Firmware install confirmed'; const PROTOCOL_V2_BOOTLOADER_RECONNECT_TIMEOUT = 60 * 1000; const PROTOCOL_V2_SHORT_RESPONSE_TIMEOUT = 5 * 1000; const PROTOCOL_V2_INSTALL_TIMEOUT = 5 * 60 * 1000; const PROTOCOL_V2_TARGET_STATUS_FINISHED = 0; const PROTOCOL_V2_TARGET_STATUS_IN_PROGRESS = 1; const PROTOCOL_V2_TARGET_STATUS_FAILED = 2; +const PROTOCOL_V2_CONNECT_PROTOCOL = 'V2'; type ProtocolV2FirmwareUpdateStatusTarget = { target_id: number; @@ -477,7 +478,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod; }) { const typedCall = this.device.getCommands().typedCall.bind(this.device.getCommands()); - let updateResponse: TypedResponseMessage<'Success'>; try { - updateResponse = await typedCall( + await typedCall( 'DevFirmwareUpdate', - 'Success', + PROTOCOL_V2_FIRMWARE_UPDATE_RESPONSE_TYPES, { targets, }, @@ -636,17 +645,10 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod MAX_DEBUG_STRING_LENGTH + ? `${value.slice(0, MAX_DEBUG_STRING_LENGTH)}... (len=${value.length})` + : value; + } + + if (!value || typeof value !== 'object') { + return value; + } + + if (depth >= MAX_DEBUG_DEPTH) { + return Array.isArray(value) + ? `[array length=${value.length}]` + : `[object keys=${Object.keys(value).length}]`; + } + + if (Array.isArray(value)) { + const items = value + .slice(0, MAX_DEBUG_ARRAY_ITEMS) + .map(item => sanitizeDebugPayload(item, key, depth + 1)); + if (value.length > MAX_DEBUG_ARRAY_ITEMS) { + items.push(`... (${value.length - MAX_DEBUG_ARRAY_ITEMS} more)`); + } + return items; + } + + const entries = Object.entries(value).slice(0, MAX_DEBUG_OBJECT_KEYS); + const sanitized: Record = {}; + entries.forEach(([entryKey, entryValue]) => { + sanitized[entryKey] = sanitizeDebugPayload(entryValue, entryKey, depth + 1); + }); + if (Object.keys(value).length > MAX_DEBUG_OBJECT_KEYS) { + sanitized.__truncated__ = `${Object.keys(value).length - MAX_DEBUG_OBJECT_KEYS} more keys`; + } + return sanitized; +} + const assertType = (res: DefaultMessageResponse, resType: string | string[]) => { const splitResTypes = Array.isArray(resType) ? resType : resType.split('|'); if (!splitResTypes.includes(res.type)) { @@ -324,7 +413,7 @@ export class DeviceCommands { ] as any; if (!skipTypes.includes(type) && msg) { // Use debug channel to avoid noise escalation - Log.debug('[DeviceCommands] [typedCall] Sending payload', type, msg); + Log.debug('[DeviceCommands] [typedCall] Sending payload', type, sanitizeDebugPayload(msg)); } } catch (e) { // ignore logging errors @@ -343,6 +432,12 @@ export class DeviceCommands { // throw bridge network error if (error instanceof HardwareError) { if (error.errorCode === HardwareErrorCode.ResponseUnexpectTypeError) { + Log.debug('[DeviceCommands] [typedCall] Unexpected response type', { + request: type, + expected: resType, + received: response.type, + response: sanitizeDebugPayload(response.message), + }); // Do not intercept CallMethodError // Do not intercept “assertType: Response of unexpected type” error // Blocking the above two messages will not know what the specific error message is, and the specific error should be handled by the subsequent business logic. @@ -356,7 +451,7 @@ export class DeviceCommands { if (error.message.indexOf('BridgeDeviceDisconnected') > -1) { throw ERRORS.TypedError(HardwareErrorCode.BridgeDeviceDisconnected); } - throw ERRORS.TypedError(HardwareErrorCode.ResponseUnexpectTypeError); + throw error; } } else { // throw error anyway, next call should be resolved properly// throw error anyway, next call should be resolved properly @@ -372,18 +467,19 @@ export class DeviceCommands { options?: TransportCallOptions ) { const resp = await this.call(type, msg, options); - return this._filterCommonTypes(resp, type); + return this._filterCommonTypes(resp, type, options); } _filterCommonTypes( res: DefaultMessageResponse, - callType: MessageKey + callType: MessageKey, + options?: TransportCallOptions ): Promise { try { if (DataManager.getSettings('env') === 'react-native') { - Log.debug('_filterCommonTypes: ', JSON.stringify(res)); + Log.debug('_filterCommonTypes: ', JSON.stringify(sanitizeDebugPayload(res))); } else { - Log.debug('_filterCommonTypes: ', res); + Log.debug('_filterCommonTypes: ', sanitizeDebugPayload(res)); } } catch (error) { // ignore @@ -481,7 +577,7 @@ export class DeviceCommands { } else { this.device.emit(DEVICE.BUTTON, this.device, res.message); } - return this._commonCall('ButtonAck', {}); + return this._commonCall('ButtonAck', {}, options); } if (res.type === 'EntropyRequest') { @@ -494,11 +590,11 @@ export class DeviceCommands { if (pin === '@@ONEKEY_INPUT_PIN_IN_DEVICE') { // only classic\1s\mini\pure this.device.setCancelableAction(() => this.cancelDeviceOnOneKeyDevice()); - return this._commonCall('BixinPinInputOnDevice').finally(() => { + return this._commonCall('BixinPinInputOnDevice', {}, options).finally(() => { this.device.clearCancelableAction(); }); } - return this._commonCall('PinMatrixAck', { pin }); + return this._commonCall('PinMatrixAck', { pin }, options); }, error => Promise.reject(error) ); @@ -513,12 +609,12 @@ export class DeviceCommands { // Attach PIN on device if (attachPinOnDevice && existsAttachPinUser) { - return this._commonCall('PassphraseAck', { on_device_attach_pin: true }); + return this._commonCall('PassphraseAck', { on_device_attach_pin: true }, options); } return !passphraseOnDevice - ? this._commonCall('PassphraseAck', { passphrase }) - : this._commonCall('PassphraseAck', { on_device: true }); + ? this._commonCall('PassphraseAck', { passphrase }, options) + : this._commonCall('PassphraseAck', { on_device: true }, options); }); } diff --git a/packages/core/src/types/api/protocolV2.ts b/packages/core/src/types/api/protocolV2.ts index 9d7bf52cf..b244f337f 100644 --- a/packages/core/src/types/api/protocolV2.ts +++ b/packages/core/src/types/api/protocolV2.ts @@ -152,7 +152,7 @@ export declare function devGetDeviceInfo( export declare function devFirmwareUpdate( connectId: string, params: DevFirmwareUpdateParams -): Response; +): Response; export declare function devGetFirmwareUpdateStatus( connectId: string diff --git a/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js b/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js index f4194e383..544c4817e 100644 --- a/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js +++ b/packages/hd-transport-lowlevel/__tests__/protocol-v2.test.js @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ const LowlevelTransport = require('../src').default; const { parseConfigure } = require('../../hd-transport/src/serialization/protobuf/messages'); const { ProtocolV1, ProtocolV2 } = require('../../hd-transport/src/protocols'); @@ -74,6 +75,9 @@ const createPlugin = ({ devices, responses }) => ({ send: jest.fn(() => Promise.resolve()), receive: jest.fn(() => { const next = responses.shift(); + if (next instanceof Error) { + return Promise.reject(next); + } if (!next) { return Promise.reject(new Error('No queued response')); } @@ -156,4 +160,40 @@ describe('LowlevelTransport protocol framing', () => { }); expect(plugin.send).toHaveBeenCalled(); }); + + test('falls back to Protocol V2 probe for unnamed Protocol V2 devices', async () => { + const probeResponse = ProtocolV2.encodeFrame( + schemas, + 'ProtoVersion', + { + major_version: 2, + minor_version: 0, + patch_version: 0, + }, + { router: PROTOCOL_V2_CHANNEL_BLE_UART } + ); + const plugin = createPlugin({ + devices: [{ id: 'unknown-pro2-id', name: 'Unknown BLE Device', commType: 'ble' }], + responses: [new Error('Protocol V1 probe timed out'), bytesToHex(probeResponse)], + }); + const lowlevel = configureTransport(plugin); + + await expect(lowlevel.acquire({ uuid: 'unknown-pro2-id' })).resolves.toEqual({ + uuid: 'unknown-pro2-id', + protocolType: 'V2', + }); + expect(lowlevel.getProtocolType('unknown-pro2-id')).toBe('V2'); + }); + + test('verifies expected Protocol V1 instead of trusting the requested protocol', async () => { + const plugin = createPlugin({ + devices: [{ id: 'v2-id', name: 'Unknown BLE Device', commType: 'ble' }], + responses: [new Error('Protocol V1 probe timed out')], + }); + const lowlevel = configureTransport(plugin); + + await expect(lowlevel.acquire({ uuid: 'v2-id', expectedProtocol: 'V1' })).rejects.toThrow( + 'Device protocol mismatch: expected V1' + ); + }); }); diff --git a/packages/hd-transport-lowlevel/src/index.ts b/packages/hd-transport-lowlevel/src/index.ts index 8049f7526..2f9495c1f 100644 --- a/packages/hd-transport-lowlevel/src/index.ts +++ b/packages/hd-transport-lowlevel/src/index.ts @@ -220,8 +220,12 @@ export default class LowlevelTransport { } if (expectedProtocol === 'V1') { - this.deviceProtocol.set(uuid, 'V1'); - return 'V1'; + if (await this.probeProtocolV1(uuid)) { + this.deviceProtocol.set(uuid, 'V1'); + this.Log?.debug(`[LowlevelTransport] detectProtocol: uuid=${uuid} -> V1 (expected)`); + return 'V1'; + } + throw this.createProtocolMismatchError(expectedProtocol); } const cachedProtocol = this.deviceProtocol.get(uuid); @@ -231,8 +235,28 @@ export default class LowlevelTransport { return 'V2'; } - this.deviceProtocol.set(uuid, 'V1'); - return 'V1'; + let protocol: ProtocolType = 'V1'; + if (!(await this.probeProtocolV1(uuid)) && (await this.probeProtocolV2(uuid))) { + protocol = 'V2'; + } + this.deviceProtocol.set(uuid, protocol); + this.Log?.debug(`[LowlevelTransport] detectProtocol: uuid=${uuid} -> ${protocol}`); + return protocol; + } + + private async probeProtocolV1(uuid: string) { + if (!this._messages) { + return false; + } + + try { + this.deviceProtocol.set(uuid, 'V1'); + await this.callProtocolV1(uuid, 'Initialize', {}, { timeoutMs: PROTOCOL_PROBE_TIMEOUT_MS }); + return true; + } catch (error) { + this.Log?.debug('[LowlevelTransport] Protocol V1 Initialize probe failed:', error); + return false; + } } private async probeProtocolV2(uuid: string) { diff --git a/packages/hd-transport/__tests__/build-receive.test.js b/packages/hd-transport/__tests__/build-receive.test.js index 153a89115..0eb3c6f70 100644 --- a/packages/hd-transport/__tests__/build-receive.test.js +++ b/packages/hd-transport/__tests__/build-receive.test.js @@ -1,7 +1,5 @@ const { parseConfigure } = require('../src/serialization/protobuf/messages'); const { ProtocolV1 } = require('../src/protocols'); -const { decodeEnvelope, decodeFirstChunk } = require('../src/protocols/v1/decode'); -const transport = require('../src').default; const messages = { StellarPaymentOp: { @@ -93,17 +91,6 @@ const parsedMessages = parseConfigure({ nested: { hw: { nested: { trezor: { nested: { messages: { nested: messages } } } } } }, }); -describe('legacy default transport exports', () => { - test('keeps Protocol V1 compatibility aliases on the default export', () => { - expect(transport.buildOne).toBe(ProtocolV1.encodeEnvelope); - expect(transport.buildEncodeBuffers).toBe(ProtocolV1.encodeMessageChunks); - expect(transport.buildBuffers).toBe(ProtocolV1.encodeTransportPackets); - expect(transport.receiveOne).toBe(ProtocolV1.decodeMessage); - expect(transport.decodeProtocol.decode).toBe(decodeEnvelope); - expect(transport.decodeProtocol.decodeChunked).toBe(decodeFirstChunk); - }); -}); - describe('encoding json -> protobuf -> json', () => { fixtures.forEach(f => { describe(f.name, () => { diff --git a/packages/hd-transport/__tests__/protocol-v2.test.js b/packages/hd-transport/__tests__/protocol-v2.test.js index 6b7c6a83a..6405bef8d 100644 --- a/packages/hd-transport/__tests__/protocol-v2.test.js +++ b/packages/hd-transport/__tests__/protocol-v2.test.js @@ -286,6 +286,42 @@ describe('Protocol V2 framing and session', () => { expect(logger.debug).toHaveBeenCalledWith(expect.stringContaining('seq differs')); }); + test('session skips unrelated terminal frames when expected response types are provided', async () => { + const stale = ProtocolV2.encodeFrame(schemas, 'Success', { + message: 'stale response', + }); + const response = ProtocolV2.encodeFrame(schemas, 'ProtoVersion', { + major_version: 2, + minor_version: 0, + patch_version: 1, + }); + const logger = { + debug: jest.fn(), + }; + const readFrame = jest.fn().mockResolvedValueOnce(stale).mockResolvedValueOnce(response); + const session = new ProtocolV2Session({ + schemas, + router: 1, + writeFrame: () => Promise.resolve(), + readFrame, + logger, + }); + + await expect( + session.call('GetProtoVersion', {}, { expectedTypes: ['ProtoVersion'] }) + ).resolves.toEqual({ + type: 'ProtoVersion', + message: { + major_version: 2, + minor_version: 0, + patch_version: 1, + }, + }); + + expect(readFrame).toHaveBeenCalledTimes(2); + expect(logger.debug).toHaveBeenCalledWith(expect.stringContaining('skip unexpected response')); + }); + test('session consumes intermediate response frames before returning the final response', async () => { const written = []; const progress = ProtocolV2.encodeFrame(schemas, 'DevFirmwareInstallProgress', { @@ -368,7 +404,15 @@ describe('Protocol V2 framing and session', () => { timeoutMs: 1, }) ).resolves.toBe(true); - expect(call).toHaveBeenNthCalledWith(2, 'DevGetFirmwareUpdateStatus', {}, { timeoutMs: 1 }); + expect(call).toHaveBeenNthCalledWith( + 2, + 'DevGetFirmwareUpdateStatus', + {}, + { + timeoutMs: 1, + expectedTypes: ['DevFirmwareUpdateStatus'], + } + ); }); test('probeProtocolV2 falls back to bootloader status after non-version responses', async () => { @@ -383,6 +427,14 @@ describe('Protocol V2 framing and session', () => { timeoutMs: 1, }) ).resolves.toBe(true); - expect(call).toHaveBeenNthCalledWith(2, 'DevGetFirmwareUpdateStatus', {}, { timeoutMs: 1 }); + expect(call).toHaveBeenNthCalledWith( + 2, + 'DevGetFirmwareUpdateStatus', + {}, + { + timeoutMs: 1, + expectedTypes: ['DevFirmwareUpdateStatus'], + } + ); }); }); diff --git a/packages/hd-transport/src/index.ts b/packages/hd-transport/src/index.ts index aa67c5a68..291e0cb7b 100644 --- a/packages/hd-transport/src/index.ts +++ b/packages/hd-transport/src/index.ts @@ -9,7 +9,6 @@ import { parseConfigure, } from './serialization'; import { PROTOCOL_V2_SYS_MESSAGE_THRESHOLD, ProtocolV1, ProtocolV2 } from './protocols'; -import { decodeEnvelope, decodeFirstChunk } from './protocols/v1/decode'; import * as protocolV2Codec from './protocols/v2'; import { ProtocolV2FrameAssembler, @@ -26,15 +25,6 @@ import * as check from './utils/highlevel-checks'; protobuf.util.Long = Long; protobuf.configure(); -export const buildOne = ProtocolV1.encodeEnvelope; -export const buildEncodeBuffers = ProtocolV1.encodeMessageChunks; -export const buildBuffers = ProtocolV1.encodeTransportPackets; -export const receiveOne = ProtocolV1.decodeMessage; -export const decodeProtocol = { - decode: decodeEnvelope, - decodeChunked: decodeFirstChunk, -}; - export type { Transport, AcquireInput, @@ -62,12 +52,7 @@ export * from './protocols/v2/session'; export default { check, - buildOne, - buildBuffers, - buildEncodeBuffers, - receiveOne, parseConfigure, - decodeProtocol, protocolV2: protocolV2Codec, ProtocolV1, ProtocolV2, diff --git a/packages/hd-transport/src/protocols/v2/session.ts b/packages/hd-transport/src/protocols/v2/session.ts index c6d8f0f0f..69ea0af38 100644 --- a/packages/hd-transport/src/protocols/v2/session.ts +++ b/packages/hd-transport/src/protocols/v2/session.ts @@ -29,6 +29,7 @@ export type ProtocolV2SessionOptions = { export type ProtocolV2CallOptions = { timeoutMs?: number; + expectedTypes?: string[]; intermediateTypes?: string[]; onIntermediateResponse?: (response: MessageFromOneKey) => void; }; @@ -65,6 +66,24 @@ function bytesToDebugHex(bytes: Uint8Array): string { return `${bytesToHex(visibleBytes)}${suffix}`; } +const COMMON_TERMINAL_RESPONSE_TYPES = new Set([ + 'Failure', + 'ButtonRequest', + 'EntropyRequest', + 'PinMatrixRequest', + 'PassphraseRequest', + 'Deprecated_PassphraseStateRequest', + 'WordRequest', +]); + +function isExpectedTerminalResponse( + response: MessageFromOneKey, + expectedTypes: string[] | undefined +) { + if (!expectedTypes || expectedTypes.length === 0) return true; + return expectedTypes.includes(response.type) || COMMON_TERMINAL_RESPONSE_TYPES.has(response.type); +} + export function getErrorMessage(error: unknown) { if (!error) return ''; if (typeof error === 'string') return error; @@ -157,8 +176,14 @@ export class ProtocolV2Session { const response = check.call(decoded); if (callOptions.intermediateTypes?.includes(response.type)) { callOptions.onIntermediateResponse?.(response); - } else { + } else if (isExpectedTerminalResponse(response, callOptions.expectedTypes)) { return response; + } else { + logger?.debug?.( + `[${logPrefix}] skip unexpected response for ${name}: expected=${callOptions.expectedTypes?.join( + '|' + )} got=${response.type}` + ); } } }; @@ -193,7 +218,11 @@ export async function probeProtocolV2({ let versionError: unknown; try { await onBeforeProbe?.(); - const response = await call('GetProtoVersion', {}, { timeoutMs }); + const response = await call( + 'GetProtoVersion', + {}, + { timeoutMs, expectedTypes: ['ProtoVersion'] } + ); if (response.type === 'ProtoVersion') { return true; } @@ -207,7 +236,14 @@ export async function probeProtocolV2({ getErrorMessage(versionError) ); try { - const response = await call('DevGetFirmwareUpdateStatus', {}, { timeoutMs }); + const response = await call( + 'DevGetFirmwareUpdateStatus', + {}, + { + timeoutMs, + expectedTypes: ['DevFirmwareUpdateStatus'], + } + ); if (response.type === 'DevFirmwareUpdateStatus') { return true; } diff --git a/packages/hd-transport/src/types/transport.ts b/packages/hd-transport/src/types/transport.ts index f5df00a82..bc20e27e8 100644 --- a/packages/hd-transport/src/types/transport.ts +++ b/packages/hd-transport/src/types/transport.ts @@ -49,6 +49,7 @@ export type MessageFromOneKey = { type: string; message: Record }; export type TransportCallOptions = { timeoutMs?: number; + expectedTypes?: string[]; intermediateTypes?: string[]; onIntermediateResponse?: (response: MessageFromOneKey) => void; }; diff --git a/pro2Demo/ble_tool.py b/pro2Demo/ble_tool.py index acede102e..f4e0c0640 100644 --- a/pro2Demo/ble_tool.py +++ b/pro2Demo/ble_tool.py @@ -74,7 +74,7 @@ def __init__(self, device: BLEDevice, adv: AdvertisementData): # --------------------------------------------------------------------------- -# Protocol V0 – frame building and minimal protobuf helpers +# Protocol V2 – frame building and minimal protobuf helpers # (same algorithm as webusb_upgrade.html) # --------------------------------------------------------------------------- @@ -101,6 +101,8 @@ def __init__(self, device: BLEDevice, adv: AdvertisementData): _PROTO_HEAD_CRC_SIZE = 8 # 7 header bytes + 1 tail CRC _PROTO_DATA_TYPE_PKT = 0 _CRC8_INIT = 0x30 +_PROTOCOL_V2_FRAME_MAX_BYTES = 4608 +_PROTOCOL_V2_FILE_CHUNK_SIZE = 4096 _PB_MSG_TYPE_PING = 60206 _PB_MSG_TYPE_SUCCESS = 60207 @@ -143,10 +145,10 @@ def _decode_varint(data: bytes | bytearray, offset: int) -> tuple[int, int]: def _calc_max_chunk(mtu: int, device_path: str) -> int: - """Compute max data bytes that fit in one MTU-sized Proto V0 + FileWrite frame. + """Compute max data bytes that fit in one MTU-sized Protocol V2 + FileWrite frame. Frame layout (bytes): - Proto V0: SOF(1) len(2) pre-CRC(1) router(1) attr(1) seq(1) tail-CRC(1) → 8 B + Protocol V2: SOF(1) len(2) header-CRC(1) router(1) attr(1) seq(1) tail-CRC(1) → 8 B msg_type: 2 B (uint16 LE prefix inside payload) FileWrite: tag+len for embedded File message(4 B) + overwrite(2 B) + append(2 B) → 8 B File fixed: path tag+len+bytes offset tag+varint(5) total_size tag+varint(5) @@ -213,7 +215,7 @@ def pb_decode_failure(pb: bytes) -> tuple[int, str]: def build_proto_frame(payload: bytes, packet_src: int = 0, router: int = 0) -> bytes: - """Wrap payload in a Proto V0 frame (SOF + len + pre-CRC + attr + seq + payload + tail-CRC).""" + """Wrap payload in a Protocol V2 frame (SOF + len + header CRC + attr + seq + payload + tail CRC).""" global _proto_seq payload_len = len(payload) frame_len = payload_len + _PROTO_HEAD_CRC_SIZE @@ -236,17 +238,56 @@ def build_proto_frame(payload: bytes, packet_src: int = 0, router: int = 0) -> b def build_pb_frame(msg_type: int, pb_payload: bytes, packet_src: int = 0, router: int = 0) -> bytes: - """Build a Proto V0 frame carrying msg_type (2-byte LE) + protobuf payload.""" + """Build a Protocol V2 frame carrying msg_type (2-byte LE) + protobuf payload.""" payload = bytes([msg_type & 0xFF, (msg_type >> 8) & 0xFF]) + pb_payload return build_proto_frame(payload, packet_src, router) +class ProtocolV2FrameAssembler: + def __init__(self, max_frame_bytes: int = _PROTOCOL_V2_FRAME_MAX_BYTES): + self.max_frame_bytes = max_frame_bytes + self.buffer = bytearray() + + def reset(self): + self.buffer.clear() + + def push(self, chunk: bytes | bytearray) -> list[bytes]: + if chunk: + self.buffer.extend(chunk) + + frames: list[bytes] = [] + while len(self.buffer) >= 3: + if self.buffer[0] != _PROTO_HEAD_SOF: + self.reset() + raise ValueError("Invalid Protocol V2 SOF") + + frame_len = self.buffer[1] | (self.buffer[2] << 8) + if frame_len < _PROTO_HEAD_CRC_SIZE: + self.reset() + raise ValueError(f"Protocol V2 frame too short: {frame_len}") + if frame_len > self.max_frame_bytes: + self.reset() + raise ValueError(f"Protocol V2 frame too large: {frame_len}") + if len(self.buffer) < frame_len: + break + + frames.append(bytes(self.buffer[:frame_len])) + del self.buffer[:frame_len] + + return frames + + def parse_proto_frame(frame: bytes) -> bytes | None: - """Extract the inner payload from a Proto V0 frame, or None if malformed.""" + """Extract the inner payload from a Protocol V2 frame, or None if malformed.""" if len(frame) < _PROTO_HEAD_CRC_SIZE or frame[0] != _PROTO_HEAD_SOF: return None frame_len = frame[1] | (frame[2] << 8) - if frame_len > len(frame): + if frame_len < _PROTO_HEAD_CRC_SIZE or frame_len > len(frame): + return None + frame = frame[:frame_len] + if frame[3] != _crc8(frame, 3): + return None + if frame[frame_len - 1] != _crc8(frame, frame_len - 1): return None return bytes(frame[7:frame_len - 1]) @@ -584,8 +625,8 @@ def _init_ui(self): right_layout.addWidget(svc_group, 3) - # Protocol V0 (tabbed: Ping | File Write) - proto_group = QGroupBox("Protocol V0") + # Protocol V2 (tabbed: Ping | File Write) + proto_group = QGroupBox("Protocol V2") proto_layout = QVBoxLayout(proto_group) proto_layout.setContentsMargins(8, 8, 8, 4) proto_layout.setSpacing(4) @@ -658,11 +699,11 @@ def _init_ui(self): fw_chunk_bar = QHBoxLayout() fw_chunk_bar.addWidget(QLabel("Chunk:")) self.fw_chunk_spin = QSpinBox() - self.fw_chunk_spin.setRange(16, 2048) + self.fw_chunk_spin.setRange(16, _PROTOCOL_V2_FILE_CHUNK_SIZE) self.fw_chunk_spin.setSingleStep(64) - self.fw_chunk_spin.setValue(2048) + self.fw_chunk_spin.setValue(_PROTOCOL_V2_FILE_CHUNK_SIZE) self.fw_chunk_spin.setSuffix(" B") - self.fw_chunk_spin.setToolTip("Auto-set to MTU-derived max after connection") + self.fw_chunk_spin.setToolTip("Protocol V2 file payload chunk size") fw_chunk_bar.addWidget(self.fw_chunk_spin) self.lbl_chunk_mtu = QLabel("(connect to auto-set)") self.lbl_chunk_mtu.setStyleSheet("color: #888; font-size: 11px;") @@ -946,10 +987,12 @@ def _update_chunk_from_mtu(self): mtu = self._negotiated_mtu if mtu <= 0: return - self.fw_chunk_spin.setRange(16, 2048) + self.fw_chunk_spin.setRange(16, _PROTOCOL_V2_FILE_CHUNK_SIZE) self.fw_chunk_spin.setSingleStep(64) - self.fw_chunk_spin.setValue(2048) - self.lbl_chunk_mtu.setText(f"(MTU {mtu}, chunk max 2048 B)") + self.fw_chunk_spin.setValue(_PROTOCOL_V2_FILE_CHUNK_SIZE) + self.lbl_chunk_mtu.setText( + f"(MTU {mtu}, chunk max {_PROTOCOL_V2_FILE_CHUNK_SIZE} B)" + ) def _on_connection_done(self, success: bool, msg: str): self._log(msg) @@ -1199,7 +1242,7 @@ def _update_char_value_in_tree(self, uuid: str, value_str: str): char.setText(2, value_str) return - # ---- Ping (Proto V0) -------------------------------------------------- + # ---- Ping (Protocol V2) ------------------------------------------------ def _on_ping(self): if not self._client: @@ -1242,17 +1285,21 @@ def _notify_cb(handle, data: bytearray): return try: - rx_data = await asyncio.wait_for(response_queue.get(), timeout=5.0) + rx_data = await self._read_protocol_v2_frame(response_queue, timeout=5.0) except asyncio.TimeoutError: self.log_signal.emit("Ping: timeout — no response received.") self.ping_result_signal.emit(False, "Timeout") return + except ValueError as exc: + self.log_signal.emit(f"Ping: malformed Protocol V2 frame in response: {exc}") + self.ping_result_signal.emit(False, "Bad frame") + return self.log_signal.emit(f"Ping RX ({len(rx_data)}B): {rx_data.hex(' ')}") payload = parse_proto_frame(rx_data) if payload is None: - self.log_signal.emit("Ping: malformed Proto V0 frame in response.") + self.log_signal.emit("Ping: malformed Protocol V2 frame in response.") self.ping_result_signal.emit(False, "Bad frame") return @@ -1293,7 +1340,7 @@ def _on_ping_result(self, success: bool, text: str): self.lbl_ping_result.setText(f'{text}') self.btn_ping.setEnabled(True) - # ---- File I/O (Proto V0) ------------------------------------------------ + # ---- File I/O (Protocol V2) --------------------------------------------- def _fio_uuid(self) -> str | None: uuid = self.write_char_combo.currentData() @@ -1326,6 +1373,21 @@ def _fio_find_notify_uuid(self, write_uuid: str) -> str | None: return notify_uuid return None + async def _read_protocol_v2_frame(self, queue: asyncio.Queue, + timeout: float = 3.0) -> bytes: + assembler = ProtocolV2FrameAssembler() + loop = asyncio.get_running_loop() + deadline = loop.time() + timeout + + while True: + remaining = deadline - loop.time() + if remaining <= 0: + raise asyncio.TimeoutError + chunk = await asyncio.wait_for(queue.get(), timeout=remaining) + frames = assembler.push(chunk) + if frames: + return frames[0] + async def _fio_transact(self, char, frame: bytes, queue: asyncio.Queue, timeout: float = 3.0, *, frag_size: int = 244, @@ -1346,7 +1408,7 @@ async def _fio_transact(self, char, frame: bytes, for i in range(0, len(frame), frag_size): await self._client.write_gatt_char( char, frame[i:i + frag_size], response=False) - return await asyncio.wait_for(queue.get(), timeout=timeout) + return await self._read_protocol_v2_frame(queue, timeout=timeout) def _fio_parse_response(self, rx: bytes) -> tuple[int, bytes] | None: payload = parse_proto_frame(rx) @@ -1723,4 +1785,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/pro2Demo/webusb_test.html b/pro2Demo/webusb_test.html index c71739cd2..c8f823226 100644 --- a/pro2Demo/webusb_test.html +++ b/pro2Demo/webusb_test.html @@ -314,7 +314,7 @@

Protobuf Messages

- +
@@ -361,7 +361,7 @@

Protobuf Messages

- +
@@ -549,8 +549,8 @@

Log

+ + diff --git a/device_update/workflow.md b/device_update/workflow.md new file mode 100644 index 000000000..ce53ee3eb --- /dev/null +++ b/device_update/workflow.md @@ -0,0 +1,38 @@ +## step1 update romloader +- 1.先尝试连接设备,超时时间1分钟,连接成功执行下一步 +- 2.先 ping 设备,超时时间 1 分钟,ping 通执行下一步 +- 3.检查 vol0:assets/boot/boot_logo.bin 是否存在,如果存在则删除,成功后执行下一步,否则返回第一步 +- 4.将 bin/pro2_romloader_v3_msc.bin 文件通过 file write (chunk 1024) 写入路径 vol0:romloader.bin,写入成功执行下一步,否则返回第一步 +- 5.将 bin/pro2_boot_update_rom_signed.bin 文件通过 file write 写入路径 vol0:update_rom.bin,写入成功执行下一步,否则返回第一步 +- 6.执行 firmware update 指令,类型为 1,路径为 vol0:update_rom.bin,执行成功下进行下一步,否则返回第一步 +- 7.执行 reboot 指令,类型为 0,执行成功后等待 20 秒,执行下一步 +- 8.先尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- 9.执行 reboot 指令,类型为 0,执行成功后等待 40 秒,然后进入step2 + +## step2 update resources +- 1.先尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- 2.通过 sendDiskControl 使能MSC,不判断返回结果,执行完后等待3秒直接进入下一步 +- 3.扫描是否有 OneKey OS 盘出现,扫描的超时时间30秒,成功后,等待3秒,执行下一步 +- 4.将 assets 目录的所有文件,不保留 assets 目录本身,且保持相对路径不变的情况下,通过 copy_assets.py 拷贝到 OneKey OS 盘中,等待拷贝完成,延时3秒,然后进入下一步 +- 5.先尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- 6.通过 sendDiskControl 禁用MSC,不判断返回结果,执行完后等待3秒直接进入step3 + +## step3 update bluetooth +- 1.判断设备是否连接,如果连接直接跳到下一步;否则先尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- 2.ping 设备,超时时间 1 分钟,ping 通后等待5秒,执行下一步 +- 3.检查 vol0:bluetooth.bin 文件是否存在,如果存在则执行下一步,如果指令超时或者不存在则将 bin/pro2_bluetooth_signed.bin 文件通过 file write 写入路径 vol0:bluetooth.bin, 写入成功执行下一步,否则返回第一步 +- 4.执行 firmware update 指令,类型为 2,路径为 vol0:bluetooth.bin,这里不判断firmware update执行结果,直接等待 FirmwareInstallProgress 返回 100%, 则认为成功,然后进入下一步 +- 5.先等待 5 秒,然后进入 step4 + +## step4 update firmware +- 1.先尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- 2.执行 reboot 指令,类型为 1,执行成功后 1 秒进入下一步,否则返回第一步 +- 3.再尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- 4.ping 设备,超时时间 1 分钟,ping 通后等待5秒,执行下一步 +- 5.检查 vol0:core.bin 文件是否存在,如果存在则执行下一步,如果指令超时或者不存在则将 bin/pro2_firmware_signed.bin 文件通过 file write 写入路径 vol0:core.bin,成功执行下一步,否则退出 +- 6.执行 firmware update 指令,类型为 1,路径为 vol0:core.bin,这里不判断firmware update执行结果,直接等待 FirmwareInstallProgress 返回 100%, 则认为成功,然后进入下一步 +- 7.先等待 10 秒,然后尝试连接设备,超时时间 30 秒 + +## 要求 +- 如果 step2/3 单独执行,则需要先连接设备,然后执行 reboot 指令,类型为 1,执行成功后 1 秒后再尝试连接设备,超时时间 1 分钟,连接成功执行下一步 +- step3/4 失败默认再调用一次 workflow.py step3 或 workflow.py step4 \ No newline at end of file diff --git a/device_update/workflow.py b/device_update/workflow.py new file mode 100644 index 000000000..447f98185 --- /dev/null +++ b/device_update/workflow.py @@ -0,0 +1,1306 @@ +""" +Workflow runner for OneKey Pro 2 update flow (per workflow.md). + +Usage: + python workflow_step1.py all # step1 -> step2 -> step3 -> step4 + python workflow_step1.py step1 # only step1 + python workflow_step1.py step2 # only step2 + python workflow_step1.py step3 # only step3 + python workflow_step1.py step4 # only step4 + +Standalone prelude (step2/step3 only, NOT when run via "all"): + Per workflow.md "要求": before the step body, do + connect (60s) -> reboot type=1 -> wait 1s -> reconnect (60s) + The reconnected handle is then handed into the step body so it can skip + its own initial connect. + step4 already embeds this sequence in its own body (4.1-4.3), so it does + not get an extra standalone prelude. + +step1 - update romloader + 1) connect device (timeout 60s) + 2) ping device (timeout 60s) + 3) check vol0:assets/boot/boot_logo.bin; delete it if it exists + 4) file_write bin/pro2_romloader_v3_msc.bin -> vol0:romloader.bin (chunk 1024) + 5) file_write bin/pro2_boot_update_rom_signed.bin -> vol0:update_rom.bin (chunk 1024) + 6) firmware_update type=1 path=vol0:update_rom.bin + 7) reboot type=0, then wait 20s + 8) connect device (timeout 60s) + 9) reboot type=0, then wait 40s, then enter step2 + -> any failure in 3-9 retries from (1) + +step2 - update resources + 1) connect device (timeout 60s) + 2) sendDiskControl enable=1 (enable MSC), reply ignored, then wait 3s + 3) wait for OneKey OS volume to appear on the host (timeout 30s), then wait 3s + 4) copy ./assets to the OneKey OS MSC volume via copy_assets.py + (pass the discovered mount as --dest, then wipe + mirror) + wait 3 seconds after copy completes; on failure the workflow EXITS (no retry) + 5) connect device (timeout 60s) + 6) sendDiskControl enable=0 (disable MSC), reply ignored, then wait 3s, then enter step3 + +step3 - update bluetooth + 1) if device already connected, skip; else connect (timeout 60s) + 2) ping device (timeout 60s), then wait 5s + 3) check vol0:bluetooth.bin; if missing, file_write bin/pro2_bluetooth_signed.bin + 4) firmware_update type=2 path=vol0:bluetooth.bin + (do not check result, wait for FirmwareInstallProgress=100%) + 5) wait 5s, then enter step4 + +step4 - update firmware + 1) connect device (timeout 60s) + 2) reboot type=1, then wait 1s; on failure retry from (1) + 3) connect device again (timeout 60s) + 4) ping device (timeout 60s), then wait 5s + 5) check vol0:core.bin; if missing, file_write bin/pro2_firmware_signed.bin -> vol0:core.bin + (failure here EXITS the workflow) + 6) firmware_update type=1 path=vol0:core.bin + (do not check result, wait for FirmwareInstallProgress=100%) + 7) wait 10s, then connect device (timeout 30s) +""" + +import argparse +import importlib +import os +import re +import subprocess +import sys +import time +from typing import Optional + + +# ==================== requirements bootstrap ==================== +# Must run BEFORE we import third-party modules from onekey_webusb. + +_REQUIREMENTS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "requirements.txt") + +# Map distribution name (left of '>=' / '==' in requirements.txt) to the importable +# module name. Keep this small and explicit; if it's missing here we fall back to +# using the distribution name as the module name. +_PKG_TO_MODULE = { + "pyusb": "usb", + "libusb-package": "libusb_package", + "libusb_package": "libusb_package", +} + + +def _parse_requirements(path: str): + """Yield (pkg_name, raw_spec) for each non-comment, non-blank line.""" + if not os.path.isfile(path): + return + with open(path, "r", encoding="utf-8") as f: + for raw in f: + line = raw.strip() + if not line or line.startswith("#"): + continue + # split on the first version operator we find + m = re.match(r"^\s*([A-Za-z0-9_.\-]+)\s*(.*)$", line) + if not m: + continue + yield m.group(1), line + + +def _ensure_requirements() -> None: + """Verify every dep in requirements.txt is importable; install if not.""" + missing = [] + for pkg, spec in _parse_requirements(_REQUIREMENTS_FILE): + module_name = _PKG_TO_MODULE.get(pkg.lower(), pkg.replace("-", "_")) + try: + importlib.import_module(module_name) + except ImportError: + missing.append((pkg, spec, module_name)) + + if not missing: + return + + print(f"[bootstrap] missing packages: {[m[0] for m in missing]}") + print(f"[bootstrap] installing from {_REQUIREMENTS_FILE} ...") + try: + subprocess.check_call( + [sys.executable, "-m", "pip", "install", "-r", _REQUIREMENTS_FILE] + ) + except subprocess.CalledProcessError as e: + sys.stderr.write(f"[bootstrap] pip install failed (exit {e.returncode}). " + f"Run manually: {sys.executable} -m pip install -r {_REQUIREMENTS_FILE}\n") + sys.exit(2) + + # Re-verify; importlib caches negative results so flush them. + importlib.invalidate_caches() + # If pip fell back to --user (common when system Python isn't writable), + # the user-site dir may not be on sys.path of THIS process yet. + try: + import site + user_site = site.getusersitepackages() + if user_site and user_site not in sys.path: + sys.path.insert(0, user_site) + except Exception: + pass + + still_missing = [] + for pkg, _spec, module_name in missing: + try: + importlib.import_module(module_name) + except ImportError: + still_missing.append(pkg) + if still_missing: + sys.stderr.write( + f"[bootstrap] still missing after install: {still_missing}. " + f"Re-run the script, or install manually:\n" + f" {sys.executable} -m pip install -r {_REQUIREMENTS_FILE}\n" + ) + sys.exit(2) + print("[bootstrap] all dependencies installed; continuing.") + + +_ensure_requirements() + + +from onekey_webusb import ( + PB_MSG_TYPE, + PB_MSG_NAME, + FW_TARGET_NAME, + DISK_CTRL_NAME, + WebUsbDevice, + encode_ping, + encode_file, + encode_file_write, + encode_firmware_update, + encode_reboot, + encode_path_info_query, + encode_file_delete, + encode_disk_control, + decode_path_info, + decode_success, + decode_failure, + decode_file, + decode_firmware_install_progress, + format_bytes, +) + + +# ==================== paths & constants ==================== + +_BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +_BIN_DIR = os.path.join(_BASE_DIR, "bin") +ROMLOADER_BIN = os.path.join(_BIN_DIR, "pro2_romloader_v3_msc.bin") +UPDATE_ROM_BIN = os.path.join(_BIN_DIR, "pro2_boot_update_rom_signed.bin") +BLUETOOTH_BIN = os.path.join(_BIN_DIR, "pro2_bluetooth_signed.bin") +FIRMWARE_BIN = os.path.join(_BIN_DIR, "pro2_firmware_signed.bin") +ASSETS_DIR = os.path.join(_BASE_DIR, "assets") + +CONNECT_TIMEOUT_S = 60 +PING_TIMEOUT_S = 60 +CHUNK_STEP1 = 1024 # file_write chunk used for step1 (romloader / update_rom) +CHUNK_STEP3 = 1024 # file_write chunk used for step3 (bluetooth) +ONEKEY_VOLUME_LABEL = "OneKey OS" +COPY_ASSETS_SCRIPT = os.path.join(_BASE_DIR, "copy_assets.py") +COPY_ASSETS_TIMEOUT_S = 600 +COPY_ASSETS_WORKERS = 8 +STEP2_VOLUME_WAIT_S = 30 # timeout for OneKey OS volume to appear on host (step2) +STEP2_POST_VOLUME_WAIT_S = 3 # delay after volume appears, before copy_assets (step2) +STEP2_POST_COPY_WAIT_S = 3 # delay after copy_assets completes, before next sub-step +STEP2_POST_MSC_ENABLE_WAIT_S = 3 # delay after sendDiskControl(enable=1), before scanning volume +STEP2_POST_MSC_DISABLE_WAIT_S = 3 # delay after sendDiskControl(enable=0), before step3 +STEP3_POST_PING_WAIT_S = 5 # delay after ping succeeds in step3, before next step +STEP3_POST_COMPLETE_WAIT_S = 5 # delay at end of step3, before step4 +STEP4_POST_PING_WAIT_S = 5 # delay after ping succeeds in step4, before next step +STEP4_POST_REBOOT_WAIT_S = 1 # delay after reboot type=1 in step4, before reconnect +STEP1_POST_REBOOT_S = 20 +STEP1_POST_REBOOT2_S = 40 # second reboot wait at end of step1, before step2 +STEP1_BOOT_LOGO_PATH = "vol0:assets/boot/boot_logo.bin" # checked-and-deleted at start of step1 +STEP4_PRE_CONNECT_S = 10 # delay after firmware_update, before final connect (step4) +STEP4_FINAL_CONNECT_TIMEOUT_S = 30 + +# When step2/3/4 is invoked STANDALONE (not via run_all), workflow.md requires: +# connect -> reboot type=1 -> wait 1s -> reconnect (60s) +# before the step's own body runs. +STANDALONE_POST_REBOOT_WAIT_S = 1 + +# How long to keep waiting for "progress reaches 100%" after firmware_update is dispatched. +PROGRESS_WAIT_S = 600 +# Idle timeout: if no progress frame arrives for this long, give up. +PROGRESS_IDLE_S = 90 + +DEFAULT_MAX_ATTEMPTS = 1 + +# Files in the assets tree we should NOT upload to the device. +_IGNORED_BASENAMES = {".DS_Store", "Thumbs.db"} + + +class WorkflowFatal(Exception): + """Raised when a step encounters an unrecoverable error and the whole + workflow should exit immediately (no retry, no further steps).""" + + +# ==================== logging helpers ==================== + +def _ts() -> str: + return time.strftime("%H:%M:%S") + + +def log(level: str, msg: str) -> None: + sys.stdout.write(f"[{_ts()}] [{level}] {msg}\n") + sys.stdout.flush() + + +def stage(title: str) -> None: + bar = "=" * 70 + sys.stdout.write(f"\n{bar}\n[{_ts()}] >>> {title}\n{bar}\n") + sys.stdout.flush() + + +def substep(step_no: str, title: str) -> None: + """Print a small sub-step banner. Leaves a blank line before it so sub-steps + are visually separated from the previous one.""" + sys.stdout.write(f"\n[{_ts()}] --- {step_no} {title} ---\n") + sys.stdout.flush() + + +# ==================== device primitives ==================== + +def wait_connect(timeout_s: int = CONNECT_TIMEOUT_S, label: str = "connect") -> WebUsbDevice: + log("INFO", f"[{label}] Connecting (timeout {timeout_s}s)...") + deadline = time.monotonic() + timeout_s + attempt = 0 + last_err: Optional[str] = None + while time.monotonic() < deadline: + attempt += 1 + dev = WebUsbDevice() + try: + dev.open() + log("OK", f"[{label}] Connected on attempt {attempt}") + return dev + except Exception as e: + last_err = str(e) + try: + dev.close() + except Exception: + pass + remaining = deadline - time.monotonic() + log("WARN", f"[{label}] Attempt {attempt} failed: {last_err} | retry, {remaining:.1f}s left") + time.sleep(1.0) + raise TimeoutError(f"[{label}] Connect timeout after {timeout_s}s, last error: {last_err}") + + +def safe_close(dev: Optional[WebUsbDevice]) -> None: + if dev is None: + return + try: + dev.close() + except Exception: + pass + + +def do_ping(dev: WebUsbDevice, timeout_s: int = PING_TIMEOUT_S, tag: str = "") -> bool: + label = f"ping{('-' + tag) if tag else ''}" + log("INFO", f"[{label}] (timeout {timeout_s}s)...") + deadline = time.monotonic() + timeout_s + attempt = 0 + while time.monotonic() < deadline: + attempt += 1 + try: + pb_payload = encode_ping("workflow") + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["Ping"], pb_payload, timeout_ms=3000 + ) + if msg_type == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + log("OK", f"[{label}] success on attempt {attempt}: \"{decoded['message']}\"") + return True + if msg_type == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("WARN", f"[{label}] failure attempt {attempt}: code={decoded['code']} msg=\"{decoded['message']}\"") + else: + log("WARN", f"[{label}] unexpected msg_type={msg_type} ({PB_MSG_NAME.get(msg_type,'?')})") + except Exception as e: + log("WARN", f"[{label}] attempt {attempt} error: {e}") + time.sleep(0.5) + log("FAIL", f"[{label}] timeout after {timeout_s}s") + return False + + +def do_file_write(dev: WebUsbDevice, src_path: str, dst_path: str, + chunk_size: int, show_progress: bool = True, + print_prefix: str = " ") -> bool: + log("INFO", f"FileWrite: {src_path} -> {dst_path} (chunk={chunk_size})") + if not os.path.isfile(src_path): + log("FAIL", f"Source file not found: {src_path}") + return False + + with open(src_path, "rb") as f: + data = f.read() + total_len = len(data) + if show_progress: + log("INFO", f"File size: {total_len} ({format_bytes(total_len)})") + + offset = 0 + is_first = True + start = time.monotonic() + last_print = start + chunk_idx = 0 + + try: + while offset < total_len: + this_chunk = min(chunk_size, total_len - offset) + chunk_data = data[offset:offset + this_chunk] + file_bytes = encode_file(dst_path, offset, total_len, chunk_data) + pb_payload = encode_file_write(file_bytes, overwrite=is_first, append=False) + is_first = False + chunk_idx += 1 + + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["FileWrite"], pb_payload, timeout_ms=10000 + ) + + if msg_type == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("FAIL", f"FileWrite failure @offset={offset} chunk#{chunk_idx}: code={decoded['code']} msg=\"{decoded['message']}\"") + return False + if msg_type != PB_MSG_TYPE["File"]: + log("FAIL", f"FileWrite unexpected msg_type={msg_type} ({PB_MSG_NAME.get(msg_type,'?')})") + return False + + decoded = decode_file(payload) + processed = decoded["processed_byte"] if decoded["processed_byte"] is not None else (offset + this_chunk) + offset = processed + + if show_progress: + now = time.monotonic() + if now - last_print >= 0.3 or offset >= total_len: + elapsed = now - start + speed = offset / elapsed if elapsed > 0 else 0 + pct = offset * 100.0 / total_len if total_len else 100.0 + sys.stdout.write( + f"\r{print_prefix}progress: {pct:6.2f}% {format_bytes(offset)} / {format_bytes(total_len)} " + f"{format_bytes(int(speed))}/s " + ) + sys.stdout.flush() + last_print = now + + if show_progress: + sys.stdout.write("\n") + elapsed = time.monotonic() - start + avg = total_len / elapsed if elapsed > 0 else 0 + log("OK", f"FileWrite done: {dst_path} {format_bytes(total_len)} in {elapsed:.2f}s ({format_bytes(int(avg))}/s)") + return True + + except Exception as e: + if show_progress: + sys.stdout.write("\n") + log("FAIL", f"FileWrite exception: {e}") + return False + + +def do_firmware_update_either(dev: WebUsbDevice, target_id: int, path: str, + timeout_s: int = 120) -> bool: + """Send FirmwareUpdate and accept EITHER a Success reply OR FirmwareInstallProgress=100%. + + Both conditions count as success (OR semantics). The first one to occur wins. + Failure reply is treated as failure. Used by step1.6. + """ + target_label = FW_TARGET_NAME.get(target_id, str(target_id)) + log("INFO", f"FirmwareUpdate target={target_id} ({target_label}) path={path}") + log("INFO", " success criterion: FirmwareUpdate reply=Success OR FirmwareInstallProgress=100%") + state = { + "done_ok": False, # set when either success path fires + "done_reason": "", + "fail_msg": "", # set when a Failure reply arrives + "last_progress": -1, + } + + def _on_any(mt: int, payload: bytes) -> None: + if state["done_ok"]: + return + if mt == PB_MSG_TYPE["FirmwareInstallProgress"]: + p = decode_firmware_install_progress(payload) + if p["progress"] != state["last_progress"]: + stage_str = f" [{p['stage']}]" if p["stage"] else "" + tag = FW_TARGET_NAME.get(p["target_id"], p["target_id"]) + log("PROG", f"FirmwareInstallProgress {tag}: {p['progress']}%{stage_str}") + state["last_progress"] = p["progress"] + if p["progress"] >= 100: + state["done_ok"] = True + state["done_reason"] = "FirmwareInstallProgress reached 100%" + elif mt == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + state["done_ok"] = True + state["done_reason"] = f"FirmwareUpdate reply = Success (\"{decoded['message']}\")" + elif mt == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + state["fail_msg"] = f"code={decoded['code']} msg=\"{decoded['message']}\"" + else: + log("INFO", f" (ignored) unsolicited msg_type={mt} ({PB_MSG_NAME.get(mt,'?')})") + + dev.on_unsolicited = _on_any + try: + # Dispatch FirmwareUpdate by sending the frame directly — we route everything + # (reply + progress) through the same callback so either side can win the race. + from onekey_webusb import build_pb_frame + pb_payload = encode_firmware_update( + [{"target_id": target_id, "path": path}], + reboot_on_success=False, + ) + frame = build_pb_frame(dev.framer, PB_MSG_TYPE["FirmwareUpdate"], pb_payload) + dev.dev.write(dev.ep_out.bEndpointAddress, frame, timeout=5000) + log("INFO", " FirmwareUpdate request dispatched; waiting for reply=Success or progress=100%...") + + deadline = time.monotonic() + timeout_s + while time.monotonic() < deadline: + try: + dev.drain_unsolicited(500) + except Exception: + if state["done_ok"]: + pass # device tearing down after success + else: + raise + if state["done_ok"]: + log("OK", f"{target_label} update step SUCCESS ({state['done_reason']})") + return True + if state["fail_msg"]: + log("FAIL", f"FirmwareUpdate failure: {state['fail_msg']}") + return False + log("FAIL", f"FirmwareUpdate timed out after {timeout_s}s " + f"(last progress={state['last_progress']}%) -> step FAILED") + return False + except Exception as e: + if state["done_ok"]: + log("OK", f"{target_label} update step SUCCESS ({state['done_reason']})") + return True + log("FAIL", f"FirmwareUpdate exception: {e}") + return False + finally: + dev.on_unsolicited = None + + +def do_firmware_update_check(dev: WebUsbDevice, target_id: int, path: str, + reboot_on_success: bool = False, + timeout_s: int = 120) -> bool: + """Send FirmwareUpdate and wait for Success/Failure reply (used in step1).""" + log("INFO", f"FirmwareUpdate target={target_id} ({FW_TARGET_NAME.get(target_id,'?')}) path={path} reboot={reboot_on_success}") + + def _on_progress(mt: int, payload: bytes) -> None: + if mt == PB_MSG_TYPE["FirmwareInstallProgress"]: + p = decode_firmware_install_progress(payload) + stage_str = f" [{p['stage']}]" if p["stage"] else "" + log("PROG", f"{FW_TARGET_NAME.get(p['target_id'], p['target_id'])}: {p['progress']}%{stage_str}") + else: + log("INFO", f"unsolicited msg_type={mt} ({PB_MSG_NAME.get(mt,'?')})") + + dev.on_unsolicited = _on_progress + try: + pb_payload = encode_firmware_update( + [{"target_id": target_id, "path": path}], + reboot_on_success=reboot_on_success, + ) + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["FirmwareUpdate"], pb_payload, timeout_ms=timeout_s * 1000, + expected_reply_types={PB_MSG_TYPE["Success"], PB_MSG_TYPE["Failure"]}, + ) + if msg_type == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + log("OK", f"FirmwareUpdate success: \"{decoded['message']}\"") + return True + decoded = decode_failure(payload) + log("FAIL", f"FirmwareUpdate failure: code={decoded['code']} msg=\"{decoded['message']}\"") + return False + except Exception as e: + log("FAIL", f"FirmwareUpdate exception: {e}") + return False + finally: + try: + dev.drain_unsolicited(300) + except Exception: + pass + dev.on_unsolicited = None + + +def do_firmware_update_wait_progress(dev: WebUsbDevice, target_id: int, path: str, + max_wait_s: int = PROGRESS_WAIT_S, + idle_timeout_s: int = PROGRESS_IDLE_S, + ignore_errors: bool = False) -> bool: + """Send FirmwareUpdate and treat the step as successful as soon as a + FirmwareInstallProgress frame reports progress >= 100 %. + + workflow.md says: 'do not judge firmware_update's reply; if FirmwareInstallProgress + reaches 100 % the step is considered successful'. So: + - the immediate FirmwareUpdate reply (Success / Failure) is logged but IGNORED + for the success decision + - returning True only requires progress = 100 + - returning False happens on idle timeout or overall timeout + + When ``ignore_errors`` is True (step4), USB I/O errors and other exceptions during + the wait are logged as WARN and the workflow continues (returns True). + """ + target_label = FW_TARGET_NAME.get(target_id, str(target_id)) + log("INFO", f"FirmwareUpdate target={target_id} ({target_label}) path={path}") + if ignore_errors: + log("INFO", " success criterion: progress=100% preferred; USB/errors ignored (step4)") + else: + log("INFO", " success criterion: FirmwareInstallProgress reaches 100% (firmware_update reply is ignored)") + state = {"done": False, "last_progress": -1, "last_recv": time.monotonic()} + + def _on_any(mt: int, payload: bytes) -> None: + state["last_recv"] = time.monotonic() + # Once we've already declared success, swallow any trailing frames silently. + if state["done"]: + return + if mt == PB_MSG_TYPE["FirmwareInstallProgress"]: + p = decode_firmware_install_progress(payload) + if p["progress"] != state["last_progress"]: + stage_str = f" [{p['stage']}]" if p["stage"] else "" + tag = FW_TARGET_NAME.get(p["target_id"], p["target_id"]) + log("PROG", f"FirmwareInstallProgress {tag}: {p['progress']}%{stage_str}") + state["last_progress"] = p["progress"] + if p["progress"] >= 100: + state["done"] = True + elif mt == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + log("INFO", f" (ignored) FirmwareUpdate reply = Success: \"{decoded['message']}\"") + elif mt == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("INFO", f" (ignored) FirmwareUpdate reply = Failure: code={decoded['code']} msg=\"{decoded['message']}\"") + else: + log("INFO", f" (ignored) unsolicited msg_type={mt} ({PB_MSG_NAME.get(mt,'?')})") + + dev.on_unsolicited = _on_any + try: + # Dispatch the FirmwareUpdate request. We send the frame directly so we don't + # tie ourselves to a single reply type — the install loop produces multiple frames + # (progress, then Success) and may come in any order with our progress watcher. + from onekey_webusb import build_pb_frame # local import to avoid top clutter + pb_payload = encode_firmware_update( + [{"target_id": target_id, "path": path}], + reboot_on_success=False, + ) + frame = build_pb_frame(dev.framer, PB_MSG_TYPE["FirmwareUpdate"], pb_payload) + dev.dev.write(dev.ep_out.bEndpointAddress, frame, timeout=5000) + log("INFO", " FirmwareUpdate request dispatched; waiting for progress=100%...") + + deadline = time.monotonic() + max_wait_s + while time.monotonic() < deadline: + # Drain in small slices so we can check idle timeout and done flag. + # Once progress=100% arrives we return immediately — at that point the + # device often starts the install/reboot, which will make any further + # IN transfer fail with EPIPE. That is expected and must not pollute + # the step's success log. + try: + dev.drain_unsolicited(500) + except Exception as e: + if state["done"]: + pass # device tearing down post-100%, ignore + elif ignore_errors: + log("WARN", + f"FirmwareUpdate I/O during progress wait (ignored): {e} " + f"(last progress={state['last_progress']}%)") + return True + else: + raise + if state["done"]: + log("OK", f"FirmwareInstallProgress reached 100% -> {target_label} update step SUCCESS") + return True + if time.monotonic() - state["last_recv"] > idle_timeout_s: + msg = (f"FirmwareInstallProgress idle for {idle_timeout_s}s " + f"(last progress={state['last_progress']}%)") + if ignore_errors: + log("WARN", f"{msg} -> ignored, continuing step4") + return True + log("FAIL", f"{msg} -> step FAILED") + return False + msg = (f"FirmwareInstallProgress did not reach 100% within {max_wait_s}s " + f"(last progress={state['last_progress']}%)") + if ignore_errors: + log("WARN", f"{msg} -> ignored, continuing step4") + return True + log("FAIL", f"{msg} -> step FAILED") + return False + except Exception as e: + # If 100% was already observed, the exception is just the device tearing + # down USB after success — treat as success and don't print FAIL. + if state["done"]: + log("OK", f"FirmwareInstallProgress reached 100% -> {target_label} update step SUCCESS") + return True + if ignore_errors: + log("WARN", f"FirmwareUpdate exception (ignored): {e} " + f"(last progress={state['last_progress']}%)") + return True + log("FAIL", f"FirmwareUpdate exception: {e}") + return False + finally: + dev.on_unsolicited = None + + +def do_path_info(dev: WebUsbDevice, path: str) -> Optional[dict]: + """Query PathInfo for `path`. Return the decoded dict on success, None on error. + + The 'exist' field of the returned dict tells whether the path exists on device. + """ + log("INFO", f"PathInfo: \"{path}\"") + try: + pb_payload = encode_path_info_query(path) + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["PathInfoQuery"], pb_payload, timeout_ms=5000 + ) + if msg_type == PB_MSG_TYPE["PathInfo"]: + info = decode_path_info(payload) + log("INFO", f" exist={info['exist']} size={info['size']} dir={info['directory']}") + return info + if msg_type == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("WARN", f"PathInfo Failure: code={decoded['code']} msg=\"{decoded['message']}\"") + return None + log("WARN", f"PathInfo unexpected msg_type={msg_type} ({PB_MSG_NAME.get(msg_type,'?')})") + return None + except Exception as e: + log("FAIL", f"PathInfo exception: {e}") + return None + + +def do_file_delete(dev: WebUsbDevice, path: str) -> bool: + log("INFO", f"FileDelete: \"{path}\"") + try: + pb_payload = encode_file_delete(path) + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["FileDelete"], pb_payload, timeout_ms=10000 + ) + if msg_type == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + log("OK", f"FileDelete success: \"{decoded['message']}\"") + return True + if msg_type == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("FAIL", f"FileDelete failure: code={decoded['code']} msg=\"{decoded['message']}\"") + return False + log("FAIL", f"FileDelete unexpected msg_type={msg_type} ({PB_MSG_NAME.get(msg_type,'?')})") + return False + except Exception as e: + log("FAIL", f"FileDelete exception: {e}") + return False + + +def do_reboot(dev: WebUsbDevice, reboot_type: int = 0) -> bool: + log("INFO", f"Reboot type={reboot_type}") + try: + pb_payload = encode_reboot(reboot_type) + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["Reboot"], pb_payload, timeout_ms=5000 + ) + if msg_type == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + log("OK", f"Reboot success: \"{decoded['message']}\"") + return True + if msg_type == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("FAIL", f"Reboot failure: code={decoded['code']} msg=\"{decoded['message']}\"") + return False + log("WARN", f"Reboot unexpected msg_type={msg_type}, treat as success (device likely rebooting)") + return True + except TimeoutError: + log("WARN", "Reboot: no response (device may have rebooted already) - treat as success") + return True + except Exception as e: + log("FAIL", f"Reboot exception: {e}") + return False + + +def do_disk_control(dev: WebUsbDevice, enable: int) -> bool: + """Send FilesystemDiskControl. enable=1 -> Enable MSC, enable=0 -> Disable MSC. + Returns True on Success reply, False otherwise. + """ + label = DISK_CTRL_NAME.get(enable, str(enable)) + log("INFO", f"FilesystemDiskControl enable={enable} ({label})") + try: + pb_payload = encode_disk_control(enable) + msg_type, payload = dev.send_and_recv( + PB_MSG_TYPE["FilesystemDiskControl"], pb_payload, timeout_ms=10000 + ) + if msg_type == PB_MSG_TYPE["Success"]: + decoded = decode_success(payload) + log("OK", f"FilesystemDiskControl success: \"{decoded['message']}\"") + return True + if msg_type == PB_MSG_TYPE["Failure"]: + decoded = decode_failure(payload) + log("FAIL", f"FilesystemDiskControl failure: code={decoded['code']} msg=\"{decoded['message']}\"") + return False + log("FAIL", f"FilesystemDiskControl unexpected msg_type={msg_type} ({PB_MSG_NAME.get(msg_type,'?')})") + return False + except Exception as e: + log("FAIL", f"FilesystemDiskControl exception: {e}") + return False + + +# ==================== standalone prelude ==================== + +def run_standalone_prelude(step_label: str) -> Optional[WebUsbDevice]: + """Per workflow.md, step2/3/4 invoked standalone must: + connect -> reboot type=1 -> wait 1s -> reconnect (60s) + Returns the reconnected dev handle, or None on failure (caller should treat + None as a fatal precondition failure for the standalone run). + """ + stage(f"{step_label} standalone prelude - reboot type=1 then reconnect") + dev: Optional[WebUsbDevice] = None + try: + substep(f"{step_label}.pre.1", "Connect device (timeout 60s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label=f"{step_label}.prelude.connect-1") + + substep(f"{step_label}.pre.2", f"Reboot type=1, then wait {STANDALONE_POST_REBOOT_WAIT_S}s") + if not do_reboot(dev, reboot_type=1): + safe_close(dev) + return None + safe_close(dev) + dev = None + time.sleep(STANDALONE_POST_REBOOT_WAIT_S) + + substep(f"{step_label}.pre.3", "Re-connect device (timeout 60s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label=f"{step_label}.prelude.connect-2") + return dev + except Exception as e: + log("FAIL", f"{step_label} standalone prelude exception: {e}") + safe_close(dev) + return None + + +# ==================== asset enumeration ==================== + +def wait_for_volume(label: str = ONEKEY_VOLUME_LABEL, + timeout_s: int = STEP2_VOLUME_WAIT_S) -> Optional[str]: + """Poll the host until a mounted volume with the given label appears, or timeout. + + Returns the volume mount path as a string on success, or None on timeout. + Relies on find_volume_by_label from copy_assets.py for the cross-platform lookup. + """ + try: + from copy_assets import find_volume_by_label + except Exception as e: + log("FAIL", f"cannot import find_volume_by_label from copy_assets.py: {e}") + return None + + log("INFO", f"Scanning for volume \"{label}\" (timeout {timeout_s}s)...") + deadline = time.monotonic() + timeout_s + attempt = 0 + while time.monotonic() < deadline: + attempt += 1 + matches = find_volume_by_label(label) + if matches: + if len(matches) > 1: + log("WARN", f"Multiple volumes match \"{label}\": {matches} - using {matches[0]}") + mount = str(matches[0]) + log("OK", f"Volume \"{label}\" found at {mount} (attempt {attempt})") + return mount + remaining = deadline - time.monotonic() + if attempt == 1 or attempt % 5 == 0: + log("INFO", f" not yet visible, {remaining:.1f}s left") + time.sleep(1.0) + log("FAIL", f"Volume \"{label}\" did not appear within {timeout_s}s") + return None + + +def do_copy_assets(mount: Optional[str] = None) -> bool: + """Run copy_assets.py as a subprocess to wipe + mirror ./assets onto the MSC volume. + + If `mount` is given, pass it as --dest. Otherwise let the subprocess auto-locate by + --label. Passing --dest is safer here: when the MSC volume has just appeared on the + host, a cold subprocess that scans by label can race with the OS still finishing the + mount and the label may briefly read empty. + + Returns True on exit code 0, False otherwise. Streams subprocess stdout into our log + so progress is visible. Times out after COPY_ASSETS_TIMEOUT_S. + """ + cmd = [sys.executable, COPY_ASSETS_SCRIPT] + if mount: + cmd += ["--dest", str(mount)] + else: + cmd += ["--label", ONEKEY_VOLUME_LABEL] + cmd += ["--yes", "--workers", str(COPY_ASSETS_WORKERS)] + log("INFO", f"Launching: {' '.join(cmd)}") + t0 = time.monotonic() + try: + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + bufsize=1, + encoding="utf-8", + errors="replace", + ) + except Exception as e: + log("FAIL", f"failed to launch copy_assets.py: {e}") + return False + + deadline = t0 + COPY_ASSETS_TIMEOUT_S + try: + assert proc.stdout is not None + for line in proc.stdout: + line = line.rstrip() + if line: + sys.stdout.write(f" [copy_assets] {line}\n") + sys.stdout.flush() + if time.monotonic() > deadline: + log("FAIL", f"copy_assets.py exceeded {COPY_ASSETS_TIMEOUT_S}s, killing") + proc.kill() + proc.wait(timeout=5) + return False + rc = proc.wait() + except Exception as e: + log("FAIL", f"copy_assets.py exception: {e}") + try: + proc.kill() + except Exception: + pass + return False + + elapsed = time.monotonic() - t0 + if rc == 0: + log("OK", f"copy_assets.py finished in {elapsed:.1f}s") + return True + log("FAIL", f"copy_assets.py exited with code {rc} after {elapsed:.1f}s") + return False + + +def enumerate_assets(assets_dir: str): + """Yield (abs_local_path, device_relative_path) pairs. + + device_relative_path uses forward slashes and does NOT include the 'assets/' prefix. + e.g. assets/core.bin -> 'core.bin' + assets/font/foo.bin -> 'font/foo.bin' + """ + if not os.path.isdir(assets_dir): + return + for root, _dirs, files in os.walk(assets_dir): + for name in files: + if name in _IGNORED_BASENAMES: + continue + abs_path = os.path.join(root, name) + rel = os.path.relpath(abs_path, assets_dir).replace(os.sep, "/") + yield abs_path, rel + + +# ==================== STEP 1 ==================== + +def run_step1_once(attempt_no: int) -> bool: + stage(f"STEP1 attempt #{attempt_no} - update romloader") + dev: Optional[WebUsbDevice] = None + try: + substep("1.1", "Connect device (timeout 60s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label="step1.connect") + + substep("1.2", "Ping device (timeout 60s)") + if not do_ping(dev, PING_TIMEOUT_S, tag="step1"): + return False + + substep("1.3", f"Delete {STEP1_BOOT_LOGO_PATH} if it exists") + info = do_path_info(dev, STEP1_BOOT_LOGO_PATH) + if info is None: + return False + if info["exist"]: + if not do_file_delete(dev, STEP1_BOOT_LOGO_PATH): + return False + else: + log("INFO", f"{STEP1_BOOT_LOGO_PATH} does not exist; nothing to delete") + + substep("1.4", f"FileWrite bin/pro2_romloader_v3_msc.bin -> vol0:romloader.bin (chunk {CHUNK_STEP1})") + if not do_file_write(dev, ROMLOADER_BIN, "vol0:romloader.bin", CHUNK_STEP1): + return False + + log("INFO", "Waiting 1s between 1.4 and 1.5...") + time.sleep(1.0) + + substep("1.5", f"FileWrite bin/pro2_boot_update_rom_signed.bin -> vol0:update_rom.bin (chunk {CHUNK_STEP1})") + if not do_file_write(dev, UPDATE_ROM_BIN, "vol0:update_rom.bin", CHUNK_STEP1): + return False + + substep("1.6", "FirmwareUpdate type=1 path=vol0:update_rom.bin (reply=Success OR progress=100%)") + if not do_firmware_update_either(dev, target_id=1, path="vol0:update_rom.bin", timeout_s=120): + return False + + substep("1.7", f"Reboot type=0, then wait {STEP1_POST_REBOOT_S}s") + if not do_reboot(dev, reboot_type=0): + return False + log("INFO", f"Reboot issued, waiting {STEP1_POST_REBOOT_S}s...") + safe_close(dev) + dev = None + time.sleep(STEP1_POST_REBOOT_S) + + substep("1.8", f"Connect device (timeout {CONNECT_TIMEOUT_S}s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label="step1.connect-2") + + substep("1.9", f"Reboot type=0, then wait {STEP1_POST_REBOOT2_S}s") + if not do_reboot(dev, reboot_type=0): + return False + log("INFO", f"Reboot issued, waiting {STEP1_POST_REBOOT2_S}s before step2...") + safe_close(dev) + dev = None + time.sleep(STEP1_POST_REBOOT2_S) + log("OK", "Step1 finished.") + return True + except Exception as e: + log("FAIL", f"Step1 exception: {e}") + return False + finally: + safe_close(dev) + + +def run_step1(max_attempts: int = DEFAULT_MAX_ATTEMPTS) -> int: + stage("Workflow START - step1: update romloader") + log("INFO", f"Romloader bin : {ROMLOADER_BIN}") + log("INFO", f"Update-rom bin: {UPDATE_ROM_BIN}") + log("INFO", f"Chunk size : {CHUNK_STEP1}") + log("INFO", f"Max attempts : {max_attempts}") + + for bin_path in (ROMLOADER_BIN, UPDATE_ROM_BIN): + if not os.path.isfile(bin_path): + log("FAIL", f"Required file missing: {bin_path}") + return 2 + + for i in range(1, max_attempts + 1): + if run_step1_once(i): + stage("STEP1 SUCCESS") + return 0 + if i < max_attempts: + log("WARN", f"Step1 attempt #{i} failed; retrying from beginning...") + else: + log("WARN", f"Step1 attempt #{i} failed; no retries left.") + time.sleep(2.0) + stage("STEP1 FAILED") + return 1 + + +# ==================== STEP 2 ==================== + +def run_step2_once(attempt_no: int, dev_in: Optional[WebUsbDevice] = None) -> bool: + stage(f"STEP2 attempt #{attempt_no} - update resources") + dev: Optional[WebUsbDevice] = dev_in + try: + substep("2.1", "Ensure device connected (reuse if already connected, else connect 60s)") + if dev is None: + dev = wait_connect(CONNECT_TIMEOUT_S, label="step2.connect-1") + else: + log("INFO", "Device already connected; reusing existing handle") + + substep("2.2", f"sendDiskControl enable=1 (Enable MSC) [result ignored], then wait {STEP2_POST_MSC_ENABLE_WAIT_S}s") + # workflow.md step2.2: 不判断返回结果。Older firmware may reply + # "Handler not registered" because it auto-exposes MSC anyway. + do_disk_control(dev, enable=1) + # Release the WebUSB handle so the OS can mount MSC for copy_assets. + safe_close(dev) + dev = None + log("INFO", f"MSC enable issued, waiting {STEP2_POST_MSC_ENABLE_WAIT_S}s for host to mount the disk...") + time.sleep(STEP2_POST_MSC_ENABLE_WAIT_S) + + substep("2.3", f"Wait for OneKey OS volume (timeout {STEP2_VOLUME_WAIT_S}s), then wait {STEP2_POST_VOLUME_WAIT_S}s") + mount = wait_for_volume(ONEKEY_VOLUME_LABEL, STEP2_VOLUME_WAIT_S) + if mount is None: + return False + log("INFO", f"Volume ready, waiting {STEP2_POST_VOLUME_WAIT_S}s before copy_assets...") + time.sleep(STEP2_POST_VOLUME_WAIT_S) + + substep("2.4", f"Copy ./assets to {mount} via copy_assets.py, then wait {STEP2_POST_COPY_WAIT_S}s") + if not os.path.isdir(ASSETS_DIR): + raise WorkflowFatal(f"Assets dir missing: {ASSETS_DIR}") + if not os.path.isfile(COPY_ASSETS_SCRIPT): + raise WorkflowFatal(f"copy_assets.py missing: {COPY_ASSETS_SCRIPT}") + + if not do_copy_assets(mount=mount): + # workflow.md: any failure here -> EXIT (no retry) + raise WorkflowFatal("copy_assets.py failed; aborting workflow.") + + log("INFO", f"Asset copy done, waiting {STEP2_POST_COPY_WAIT_S}s before reconnect...") + time.sleep(STEP2_POST_COPY_WAIT_S) + + substep("2.5", "Reconnect device (timeout 60s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label="step2.connect-2") + + substep("2.6", f"sendDiskControl enable=0 (Disable MSC) [result ignored], then wait {STEP2_POST_MSC_DISABLE_WAIT_S}s") + # workflow.md step2.6: 不判断返回结果. + do_disk_control(dev, enable=0) + log("INFO", f"MSC disable issued, waiting {STEP2_POST_MSC_DISABLE_WAIT_S}s before step3...") + time.sleep(STEP2_POST_MSC_DISABLE_WAIT_S) + + log("OK", "Step2 finished.") + return True + except WorkflowFatal: + raise # bubble up so the workflow aborts immediately, no retry + except Exception as e: + log("FAIL", f"Step2 exception: {e}") + return False + finally: + safe_close(dev) + + +def run_step2(max_attempts: int = DEFAULT_MAX_ATTEMPTS, standalone: bool = False) -> int: + stage("Workflow START - step2: update resources") + log("INFO", f"Assets dir : {ASSETS_DIR}") + log("INFO", f"Volume label : \"{ONEKEY_VOLUME_LABEL}\"") + log("INFO", f"Max attempts : {max_attempts}") + + if not os.path.isdir(ASSETS_DIR): + log("FAIL", f"Required dir missing: {ASSETS_DIR}") + return 2 + + prelude_dev: Optional[WebUsbDevice] = None + if standalone: + prelude_dev = run_standalone_prelude("step2") + if prelude_dev is None: + stage("STEP2 FAILED") + return 1 + + for i in range(1, max_attempts + 1): + carry = prelude_dev if i == 1 else None + prelude_dev = None # only consumed once + if run_step2_once(i, dev_in=carry): + stage("STEP2 SUCCESS") + return 0 + if i < max_attempts: + log("WARN", f"Step2 attempt #{i} failed; retrying from beginning...") + else: + log("WARN", f"Step2 attempt #{i} failed; no retries left.") + time.sleep(2.0) + stage("STEP2 FAILED") + return 1 + + +# ==================== STEP 3 ==================== + +def run_step3_once(attempt_no: int, dev_in: Optional[WebUsbDevice] = None) -> bool: + stage(f"STEP3 attempt #{attempt_no} - update bluetooth") + dev: Optional[WebUsbDevice] = dev_in + try: + substep("3.1", "Ensure device connected (reuse if already connected, else connect 60s)") + if dev is None: + dev = wait_connect(CONNECT_TIMEOUT_S, label="step3.connect") + else: + log("INFO", "Device already connected; reusing existing handle") + + substep("3.2", f"Ping device (timeout 60s), then wait {STEP3_POST_PING_WAIT_S}s") + if not do_ping(dev, PING_TIMEOUT_S, tag="step3"): + return False + log("INFO", f"Ping OK, waiting {STEP3_POST_PING_WAIT_S}s before next step...") + time.sleep(STEP3_POST_PING_WAIT_S) + + substep("3.3", "Ensure vol0:bluetooth.bin exists (write bin/pro2_bluetooth_signed.bin if missing or query timed out)") + info = do_path_info(dev, "vol0:bluetooth.bin") + # workflow.md step3.3: 如果指令超时或者不存在 -> write the bin. + # info=None covers PathInfo timeout / Failure / unexpected reply. + needs_write = info is None or not info.get("exist", False) + if not needs_write: + log("INFO", "vol0:bluetooth.bin already exists; skipping file_write") + else: + if info is None: + log("INFO", "PathInfo for vol0:bluetooth.bin failed/timed out; treating as missing and writing") + else: + log("INFO", f"vol0:bluetooth.bin missing; writing {BLUETOOTH_BIN}") + if not os.path.isfile(BLUETOOTH_BIN): + log("FAIL", f"Bluetooth bin missing on host: {BLUETOOTH_BIN}") + return False + if not do_file_write(dev, BLUETOOTH_BIN, "vol0:bluetooth.bin", CHUNK_STEP3): + return False + + substep("3.4", "FirmwareUpdate type=2 path=vol0:bluetooth.bin (wait progress=100%)") + if not do_firmware_update_wait_progress(dev, target_id=2, path="vol0:bluetooth.bin"): + return False + + substep("3.5", f"Wait {STEP3_POST_COMPLETE_WAIT_S}s, then enter step4") + safe_close(dev) + dev = None + log("INFO", f"Waiting {STEP3_POST_COMPLETE_WAIT_S}s before step4...") + time.sleep(STEP3_POST_COMPLETE_WAIT_S) + + log("OK", "Step3 finished.") + return True + except Exception as e: + log("FAIL", f"Step3 exception: {e}") + return False + finally: + safe_close(dev) + + +def run_step3(max_attempts: int = DEFAULT_MAX_ATTEMPTS, + dev_in: Optional[WebUsbDevice] = None, + standalone: bool = False) -> int: + stage("Workflow START - step3: update bluetooth") + log("INFO", f"Bluetooth bin : {BLUETOOTH_BIN}") + log("INFO", f"Max attempts : {max_attempts}") + + if not os.path.isfile(BLUETOOTH_BIN): + log("FAIL", f"Required file missing: {BLUETOOTH_BIN}") + return 2 + + if standalone: + prelude_dev = run_standalone_prelude("step3") + if prelude_dev is None: + stage("STEP3 FAILED") + return 1 + dev_in = prelude_dev + + for i in range(1, max_attempts + 1): + # Only the first attempt may reuse an incoming device handle; if it fails + # we restart from a fresh connect on subsequent attempts. + carry = dev_in if i == 1 else None + dev_in = None # only consumed once + if run_step3_once(i, dev_in=carry): + stage("STEP3 SUCCESS") + return 0 + if i < max_attempts: + log("WARN", f"Step3 attempt #{i} failed; retrying from beginning...") + else: + log("WARN", f"Step3 attempt #{i} failed; no retries left.") + time.sleep(2.0) + stage("STEP3 FAILED") + return 1 + + +# ==================== STEP 4 ==================== + +def run_step4_once(attempt_no: int) -> bool: + stage(f"STEP4 attempt #{attempt_no} - update firmware") + dev: Optional[WebUsbDevice] = None + try: + substep("4.1", "Connect device (timeout 60s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label="step4.connect-1") + + substep("4.2", f"Reboot type=1, then wait {STEP4_POST_REBOOT_WAIT_S}s") + if not do_reboot(dev, reboot_type=1): + return False + safe_close(dev) + dev = None + time.sleep(STEP4_POST_REBOOT_WAIT_S) + + substep("4.3", "Re-connect device (timeout 60s)") + dev = wait_connect(CONNECT_TIMEOUT_S, label="step4.connect-2") + + substep("4.4", f"Ping device (timeout 60s), then wait {STEP4_POST_PING_WAIT_S}s") + if not do_ping(dev, PING_TIMEOUT_S, tag="step4"): + return False + log("INFO", f"Ping OK, waiting {STEP4_POST_PING_WAIT_S}s before next step...") + time.sleep(STEP4_POST_PING_WAIT_S) + + substep("4.5", "Ensure vol0:core.bin exists (write bin/pro2_firmware_signed.bin if missing or query timed out)") + info = do_path_info(dev, "vol0:core.bin") + # workflow.md step4.5: 如果指令超时或者不存在 -> write the bin. + # info=None covers PathInfo timeout / Failure / unexpected reply. + needs_write = info is None or not info.get("exist", False) + if not needs_write: + log("INFO", "vol0:core.bin already exists; skipping file_write") + else: + if info is None: + log("INFO", "PathInfo for vol0:core.bin failed/timed out; treating as missing and writing") + else: + log("INFO", f"vol0:core.bin missing; writing {FIRMWARE_BIN}") + if not os.path.isfile(FIRMWARE_BIN): + raise WorkflowFatal(f"firmware bin missing on host: {FIRMWARE_BIN}") + if not do_file_write(dev, FIRMWARE_BIN, "vol0:core.bin", CHUNK_STEP1): + raise WorkflowFatal("Failed to write vol0:core.bin; aborting workflow.") + + substep("4.6", "FirmwareUpdate type=1 path=vol0:core.bin (wait progress=100%, errors ignored)") + do_firmware_update_wait_progress( + dev, target_id=1, path="vol0:core.bin", ignore_errors=True, + ) + + substep("4.7", f"Wait {STEP4_PRE_CONNECT_S}s, then connect device (timeout {STEP4_FINAL_CONNECT_TIMEOUT_S}s)") + safe_close(dev) + dev = None + log("INFO", f"Waiting {STEP4_PRE_CONNECT_S}s before final connect...") + time.sleep(STEP4_PRE_CONNECT_S) + dev = wait_connect(STEP4_FINAL_CONNECT_TIMEOUT_S, label="step4.connect-final") + + safe_close(dev) + dev = None + log("OK", "Step4 finished.") + return True + except WorkflowFatal: + raise + except Exception as e: + log("FAIL", f"Step4 exception: {e}") + return False + finally: + safe_close(dev) + + +def run_step4(max_attempts: int = DEFAULT_MAX_ATTEMPTS) -> int: + stage("Workflow START - step4: update firmware") + log("INFO", f"Firmware bin : {FIRMWARE_BIN}") + log("INFO", f"Max attempts : {max_attempts}") + + if not os.path.isfile(FIRMWARE_BIN): + log("FAIL", f"Required file missing: {FIRMWARE_BIN}") + return 2 + + for i in range(1, max_attempts + 1): + if run_step4_once(i): + stage("STEP4 SUCCESS") + return 0 + if i < max_attempts: + log("WARN", f"Step4 attempt #{i} failed; retrying from beginning...") + else: + log("WARN", f"Step4 attempt #{i} failed; no retries left.") + time.sleep(2.0) + stage("STEP4 FAILED") + return 1 + + +# ==================== CLI ==================== + +def run_all(max_attempts: int = DEFAULT_MAX_ATTEMPTS) -> int: + rc = run_step1(max_attempts) + if rc != 0: + return rc + rc = run_step2(max_attempts) + if rc != 0: + return rc + rc = run_step3(max_attempts) + if rc != 0: + # Fallback: re-run step3 as if invoked standalone (adds the + # connect -> reboot type=1 -> wait 1s -> reconnect prelude). + log("WARN", "Step3 failed in run_all; retrying once as standalone (with reboot prelude)...") + rc = run_step3(max_attempts, standalone=True) + if rc != 0: + return rc + rc = run_step4(max_attempts) + if rc != 0: + # step4 already embeds connect -> reboot type=1 -> reconnect in its body, + # so "re-running workflow.py step4" is just another run_step4 invocation. + log("WARN", "Step4 failed in run_all; retrying step4 once more...") + rc = run_step4(max_attempts) + if rc != 0: + return rc + stage("ALL STEPS FINISHED SUCCESSFULLY") + return 0 + + +def build_parser() -> argparse.ArgumentParser: + p = argparse.ArgumentParser( + prog="workflow_step1", + description="OneKey Pro 2 update workflow runner (step1/step2/step3/step4/all)", + ) + p.add_argument("target", + nargs="?", + default="all", + choices=["all", "step1", "step2", "step3", "step4"], + help="which part of the workflow to run (default: all)") + p.add_argument("--max-attempts", type=int, default=DEFAULT_MAX_ATTEMPTS, + help=f"max retries per step (default {DEFAULT_MAX_ATTEMPTS})") + return p + + +def main() -> int: + parser = build_parser() + args = parser.parse_args() + try: + if args.target == "all": + return run_all(args.max_attempts) + if args.target == "step1": + return run_step1(args.max_attempts) + if args.target == "step2": + return run_step2(args.max_attempts, standalone=True) + if args.target == "step3": + return run_step3(args.max_attempts, standalone=True) + if args.target == "step4": + return run_step4(args.max_attempts) + except WorkflowFatal as e: + stage("WORKFLOW ABORTED") + log("FAIL", str(e)) + return 3 + return 2 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/packages/connect-examples/expo-playground/app/components/sidebar.tsx b/packages/connect-examples/expo-playground/app/components/sidebar.tsx index c6580dc21..5fbd0d056 100644 --- a/packages/connect-examples/expo-playground/app/components/sidebar.tsx +++ b/packages/connect-examples/expo-playground/app/components/sidebar.tsx @@ -28,6 +28,7 @@ import { Info, ListChecks, Usb, + UploadCloud, } from 'lucide-react'; import { getDeviceLabel } from '@onekeyfe/hd-core'; import packageJson from '../../package.json'; @@ -75,6 +76,11 @@ const navigationItems = [ url: '/pro2-debug', icon: Usb, }, + { + title: 'common.pro2Update', + url: '/pro2-update', + icon: UploadCloud, + }, { title: 'common.pro2Onboarding', url: '/pro2-onboarding', diff --git a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts index b6e08f1f7..7970653c4 100644 --- a/packages/connect-examples/expo-playground/app/data/methods/firmware.ts +++ b/packages/connect-examples/expo-playground/app/data/methods/firmware.ts @@ -888,6 +888,29 @@ const api: UnifiedMethodConfig[] = [ noDeviceIdReq: true, presets: [], }, + { + method: 'filesystemDiskControl', + description: 'methodDescriptions.filesystemDiskControl', + noDeviceIdReq: true, + presets: [ + { + title: 'FilesystemDiskControl', + parameters: [ + { + name: 'enable', + type: 'select', + required: true, + label: 'MSC', + options: [ + { label: 'Disable MSC', value: '0' }, + { label: 'Enable MSC', value: '1' }, + ], + value: '1', + }, + ], + }, + ], + }, // === 固件信息检查 === { method: 'checkFirmwareRelease', diff --git a/packages/connect-examples/expo-playground/app/entry.client.tsx b/packages/connect-examples/expo-playground/app/entry.client.tsx index 81d2a0ff6..14ee9ec29 100644 --- a/packages/connect-examples/expo-playground/app/entry.client.tsx +++ b/packages/connect-examples/expo-playground/app/entry.client.tsx @@ -35,6 +35,7 @@ import DeviceMethodsIndexPage from './routes/device-methods._index'; import DeviceMethodExecutePage from './routes/device-methods.$methodName'; import ProDebugPage from './routes/pro-debug'; import Pro2DebugPage from './routes/pro2-debug'; +import Pro2UpdatePage from './routes/pro2-update'; import Pro2OnboardingPage from './routes/pro2-onboarding'; import MethodBatchTestPage from './routes/method-batch-test'; @@ -162,6 +163,10 @@ const router = createHashRouter( path: 'pro2-debug', element: , }, + { + path: 'pro2-update', + element: , + }, { path: 'pro2-onboarding', element: , diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts index 50f19e22a..68c588130 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/en.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/en.ts @@ -30,6 +30,7 @@ export const en = { emulator: 'Emulator', proDebug: 'Pro Debug', pro2Debug: 'Pro2 Debug', + pro2Update: 'Pro2 Update', pro2Onboarding: 'Pro2 Onboarding', methodBatchTest: 'Chain Method Batch Test', navigation: 'Navigation', @@ -344,6 +345,7 @@ export const en = { filesystemDirMake: 'Protocol V2 raw FilesystemDirMake', filesystemDirRemove: 'Protocol V2 raw FilesystemDirRemove', filesystemFormat: 'Protocol V2 filesystem format', + filesystemDiskControl: 'Protocol V2 MSC disk control', getFeatures: 'Get features of a device', getLogs: 'Get device logs', getNextU2FCounter: 'Get next U2F counter value', diff --git a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts index b12385975..bf55f8d62 100644 --- a/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts +++ b/packages/connect-examples/expo-playground/app/i18n/locales/zh.ts @@ -30,6 +30,7 @@ export const zh = { emulator: '模拟器', proDebug: 'Pro 调试', pro2Debug: 'Pro2 调试', + pro2Update: 'Pro2 升级', pro2Onboarding: 'Pro2 引导流程', methodBatchTest: '链方法批量测试', navigation: '导航', @@ -334,6 +335,7 @@ export const zh = { filesystemDirMake: 'Protocol V2 原始 FilesystemDirMake', filesystemDirRemove: 'Protocol V2 原始 FilesystemDirRemove', filesystemFormat: 'Protocol V2 文件系统格式化', + filesystemDiskControl: 'Protocol V2 MSC 磁盘控制', getFeatures: '获取设备功能信息', getLogs: '获取设备日志', getNextU2FCounter: '获取下一个 U2F 计数器值', diff --git a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx index 7a62a6eb8..f2d37a7fb 100644 --- a/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx +++ b/packages/connect-examples/expo-playground/app/routes/pro2-debug.tsx @@ -49,6 +49,7 @@ const PRO2_METHOD_GROUPS = [ methods: [ 'filesystemFixPermission', 'filesystemFormat', + 'filesystemDiskControl', 'filesystemPathInfoQuery', 'filesystemDirList', 'filesystemDirMake', @@ -81,6 +82,7 @@ const PRO2_METHOD_LABELS: Record = { fileDelete: 'File Delete', filesystemFixPermission: 'Fix Permission', filesystemFormat: 'Format', + filesystemDiskControl: 'Disk Control', filesystemPathInfoQuery: 'Raw Path Info', filesystemDirList: 'Raw Dir List', filesystemDirMake: 'Raw Dir Make', diff --git a/packages/connect-examples/expo-playground/app/routes/pro2-update.tsx b/packages/connect-examples/expo-playground/app/routes/pro2-update.tsx new file mode 100644 index 000000000..3363c4b55 --- /dev/null +++ b/packages/connect-examples/expo-playground/app/routes/pro2-update.tsx @@ -0,0 +1,1502 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { + CheckCircle2, + FileUp, + FolderOpen, + Loader2, + Play, + RotateCcw, + Square, + Trash2, + BarChart3, +} from 'lucide-react'; +import { HARDWARE_CONNECT_PROTOCOL } from '@onekeyfe/hd-shared'; +import { Badge } from '../components/ui/Badge'; +import { Button } from '../components/ui/Button'; +import { Card, CardContent } from '../components/ui/Card'; +import { Input } from '../components/ui/Input'; +import { Progress } from '../components/ui/Progress'; +import { PageLayout } from '../components/common/PageLayout'; +import { DeviceNotConnectedState } from '../components/common/DeviceNotConnectedState'; +import { + callHardwareAPI, + searchDevices, + type HardwareApiMethod, +} from '../services/hardwareService'; +import { useFirmwareProgress } from '../components/providers/SDKProvider'; +import { useToast } from '../hooks/use-toast'; +import { useDeviceStore } from '../store/deviceStore'; +import type { DeviceInfo } from '../types/hardware'; + +type WorkflowTarget = 'all' | 'step1' | 'step2' | 'step3' | 'step4'; +type WorkflowStepId = 'step1' | 'step2' | 'step3' | 'step4'; +type StepStatus = 'idle' | 'running' | 'success' | 'failed' | 'skipped'; +type LogLevel = 'info' | 'ok' | 'warn' | 'error'; +type RequiredFileKey = 'romloader' | 'updateRom' | 'bluetooth' | 'firmware'; + +type DirectoryHandle = { + kind: 'directory'; + name: string; + entries(): AsyncIterable<[string, FileSystemHandleLike]>; +}; + +type FileHandle = { + kind: 'file'; + name: string; + getFile(): Promise; +}; + +type FileSystemHandleLike = DirectoryHandle | FileHandle; + +type DirectoryRequest = { + title: string; + description: string; + resolve: (handle: DirectoryHandle) => void; + reject: (error: Error) => void; +}; + +type WorkflowLog = { + id: number; + time: string; + level: LogLevel; + message: string; +}; + +type AssetFile = { + relativePath: string[]; + size: number; + file?: File; + sourcePath?: string; +}; + +type CopyProgress = { + copiedFiles: number; + totalFiles: number; + copiedBytes: number; + totalBytes: number; + currentFile?: string; + currentFileBytes?: number; + currentFileSize?: number; + rateBytesPerSecond?: number; + elapsedMs?: number; +}; + +type PathInfoResult = { + exist?: boolean; + directory?: boolean; + size?: number; +}; + +type DeviceUpdateBinaryManifest = { + name: string; + sourcePath: string; + size: number; + available: boolean; +}; + +type DeviceUpdateAssetManifest = { + relativePath: string; + sourcePath: string; + size: number; +}; + +type DeviceUpdateManifest = { + generatedAt?: string; + binaries?: Partial>; + assets?: DeviceUpdateAssetManifest[]; +}; + +type WorkflowBinaryFile = + | { + mode: 'default'; + name: string; + sourcePath: string; + size?: number; + available?: boolean; + } + | { + mode: 'manual'; + file: File; + }; + +type AssetSource = + | { + mode: 'default'; + files: DeviceUpdateAssetManifest[]; + totalBytes: number; + } + | { + mode: 'directory'; + handle: DirectoryHandle; + }; + +const REQUIRED_FILES: Array<{ key: RequiredFileKey; label: string; expectedName: string }> = [ + { + key: 'romloader', + label: 'Romloader', + expectedName: 'pro2_romloader_v3_msc.bin', + }, + { + key: 'updateRom', + label: 'Update ROM', + expectedName: 'pro2_boot_update_rom_signed.bin', + }, + { + key: 'bluetooth', + label: 'Bluetooth', + expectedName: 'pro2_bluetooth_signed.bin', + }, + { + key: 'firmware', + label: 'Firmware', + expectedName: 'pro2_firmware_signed.bin', + }, +]; + +function getDeviceUpdateBaseUrl() { + const commitSha = process.env.COMMIT_SHA; + return commitSha && commitSha !== 'dev' ? `${commitSha}/device-update` : 'device-update'; +} + +function encodeSourcePath(sourcePath: string) { + return sourcePath.split('/').map(encodeURIComponent).join('/'); +} + +function getDeviceUpdateUrl(sourcePath: string) { + return `${getDeviceUpdateBaseUrl()}/${encodeSourcePath(sourcePath)}`; +} + +async function fetchDeviceUpdateBlob(sourcePath: string) { + const response = await fetch(getDeviceUpdateUrl(sourcePath)); + if (!response.ok) { + throw new Error(`Failed to fetch ${sourcePath}: HTTP ${response.status}`); + } + return response.blob(); +} + +function createDefaultFileState( + manifest?: DeviceUpdateManifest | null +): Record { + return REQUIRED_FILES.reduce((acc, item) => { + const manifestFile = manifest?.binaries?.[item.key]; + acc[item.key] = { + mode: 'default', + name: manifestFile?.name ?? item.expectedName, + sourcePath: manifestFile?.sourcePath ?? `bin/${item.expectedName}`, + size: manifestFile?.size, + available: manifestFile?.available, + }; + return acc; + }, {} as Record); +} + +const STEP_CONFIG: Array<{ id: WorkflowStepId; title: string; description: string }> = [ + { + id: 'step1', + title: 'Step 1', + description: 'Update romloader', + }, + { + id: 'step2', + title: 'Step 2', + description: 'Update resources', + }, + { + id: 'step3', + title: 'Step 3', + description: 'Update bluetooth', + }, + { + id: 'step4', + title: 'Step 4', + description: 'Update firmware', + }, +]; + +const INITIAL_STEP_STATUS: Record = { + step1: 'idle', + step2: 'idle', + step3: 'idle', + step4: 'idle', +}; + +const CONNECT_TIMEOUT_MS = 60_000; +const PING_TIMEOUT_MS = 60_000; +const DEVICE_FILE_WRITE_CHUNK_SIZE = 2048; +const STEP1_BOOT_LOGO_PATH = 'vol0:assets/boot/boot_logo.bin'; +const STEP1_ROMLOADER_PATH = 'vol0:romloader.bin'; +const STEP1_UPDATE_ROM_PATH = 'vol0:update_rom.bin'; +const STEP3_BLUETOOTH_PATH = 'vol0:bluetooth.bin'; +const STEP4_CORE_PATH = 'vol0:core.bin'; +const STEP2_UPLOAD_DONE_WAIT_MS = 3000; +const STEP3_POST_PING_WAIT_MS = 5000; +const STEP3_DONE_WAIT_MS = 5000; +const STEP4_POST_REBOOT_WAIT_MS = 1000; +const STEP4_POST_PING_WAIT_MS = 5000; +const STEP4_FINAL_WAIT_MS = 10_000; +const STEP4_FINAL_CONNECT_TIMEOUT_MS = 30_000; +const STEP1_REBOOT_WAIT_MS = 20_000; +const STEP1_SECOND_REBOOT_WAIT_MS = 40_000; +const STANDALONE_POST_REBOOT_WAIT_MS = 1000; +const IGNORED_ASSET_BASENAMES = new Set(['.DS_Store', 'Thumbs.db', 'desktop.ini']); + +function getErrorMessage(error: unknown) { + return error instanceof Error ? error.message : String(error); +} + +function formatBytes(value: number) { + if (!Number.isFinite(value) || value <= 0) return '0 B'; + const units = ['B', 'KB', 'MB', 'GB']; + let size = value; + let unitIndex = 0; + while (size >= 1024 && unitIndex < units.length - 1) { + size /= 1024; + unitIndex += 1; + } + return `${size.toFixed(unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`; +} + +function formatRate(value?: number) { + if (!value || !Number.isFinite(value)) return '--'; + return `${formatBytes(value)}/s`; +} + +function getWorkflowFileName(file: WorkflowBinaryFile) { + return file.mode === 'manual' ? file.file.name : file.name; +} + +function getWorkflowFileSize(file: WorkflowBinaryFile) { + return file.mode === 'manual' ? file.file.size : file.size; +} + +function getAssetRelativePath(relativePath: string[]) { + return relativePath.filter(Boolean).join('/'); +} + +function getAssetDevicePath(relativePath: string[]) { + return `vol0:${getAssetRelativePath(relativePath)}`; +} + +function getAssetDeviceDirPaths(relativePath: string[]) { + const dirs = relativePath.slice(0, -1).filter(Boolean); + const result: string[] = []; + for (let index = 1; index <= dirs.length; index += 1) { + result.push(`vol0:${dirs.slice(0, index).join('/')}`); + } + return result; +} + +function isDirectoryAlreadyExistsError(message: string) { + const normalized = message.toLowerCase(); + if (normalized.includes('not exist') || normalized.includes('no such')) return false; + return ( + normalized.includes('already') || + normalized.includes('exists') || + normalized.includes('exist') || + normalized.includes('eexist') + ); +} + +function getDirectoryPicker() { + const picker = ( + window as Window & { + showDirectoryPicker?: (options?: { mode?: 'read' | 'readwrite' }) => Promise; + } + ).showDirectoryPicker; + + if (!picker) { + throw new Error('Current browser does not support directory access.'); + } + + return picker; +} + +function getStepIdsForTarget(target: WorkflowTarget): WorkflowStepId[] { + if (target === 'all') return ['step1', 'step2', 'step3', 'step4']; + return [target]; +} + +function StatusBadge({ status }: { status: StepStatus }) { + const variant = status === 'success' || status === 'running' ? 'default' : 'outline'; + const label = + status === 'running' + ? 'Running' + : status === 'success' + ? 'Done' + : status === 'failed' + ? 'Failed' + : status === 'skipped' + ? 'Skipped' + : 'Idle'; + + return ( + + {status === 'running' ? : null} + {label} + + ); +} + +export default function Pro2UpdatePage() { + const { + currentDevice, + sdkInitState, + setConnectedDevices, + setCurrentDevice, + setDeviceFeatures, + setIsConnecting, + } = useDeviceStore(); + const { reset: resetFirmwareProgress } = useFirmwareProgress(); + const { toast } = useToast(); + + const [deviceUpdateManifest, setDeviceUpdateManifest] = useState( + null + ); + const [manifestError, setManifestError] = useState(''); + const [files, setFiles] = useState>(() => + createDefaultFileState() + ); + const [assetSource, setAssetSource] = useState(null); + const [maxAttempts, setMaxAttempts] = useState(1); + const [runningTarget, setRunningTarget] = useState(null); + const [stepStatus, setStepStatus] = + useState>(INITIAL_STEP_STATUS); + const [logs, setLogs] = useState([]); + const [copyProgress, setCopyProgress] = useState(null); + const [directoryRequest, setDirectoryRequest] = useState(null); + + const abortRef = useRef(false); + const currentDeviceRef = useRef(currentDevice); + const logIdRef = useRef(0); + + useEffect(() => { + currentDeviceRef.current = currentDevice; + }, [currentDevice]); + + const allFilesReady = REQUIRED_FILES.every(item => { + const selectedFile = files[item.key]; + return selectedFile.mode === 'manual' || selectedFile.available !== false; + }); + const assetsReady = Boolean(assetSource); + const copyPercentage = copyProgress?.totalBytes + ? Math.min(100, Math.round((copyProgress.copiedBytes / copyProgress.totalBytes) * 100)) + : 0; + + const addLog = useCallback((level: LogLevel, message: string) => { + const nextLog = { + id: logIdRef.current + 1, + time: new Date().toLocaleTimeString(), + level, + message, + }; + logIdRef.current = nextLog.id; + setLogs(prev => [nextLog, ...prev].slice(0, 300)); + }, []); + + useEffect(() => { + let cancelled = false; + + const loadManifest = async () => { + try { + const response = await fetch(getDeviceUpdateUrl('manifest.json'), { cache: 'no-store' }); + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + const manifest = (await response.json()) as DeviceUpdateManifest; + if (cancelled) return; + + setDeviceUpdateManifest(manifest); + setFiles(prev => { + const defaults = createDefaultFileState(manifest); + return REQUIRED_FILES.reduce((acc, item) => { + const current = prev[item.key]; + acc[item.key] = current.mode === 'manual' ? current : defaults[item.key]; + return acc; + }, {} as Record); + }); + + const defaultAssets = manifest.assets ?? []; + if (defaultAssets.length > 0) { + const totalBytes = defaultAssets.reduce((sum, item) => sum + item.size, 0); + setAssetSource(prev => + prev?.mode === 'directory' + ? prev + : { + mode: 'default', + files: defaultAssets, + totalBytes, + } + ); + } + setManifestError(''); + } catch (error) { + if (cancelled) return; + setManifestError(getErrorMessage(error)); + } + }; + + void loadManifest(); + + return () => { + cancelled = true; + }; + }, []); + + const assertRunning = useCallback(() => { + if (abortRef.current) { + throw new Error('Workflow cancelled'); + } + }, []); + + const wait = useCallback( + async (ms: number, label: string) => { + addLog('info', `${label}: wait ${(ms / 1000).toFixed(0)}s`); + const startedAt = Date.now(); + while (Date.now() - startedAt < ms) { + assertRunning(); + await new Promise(resolve => setTimeout(resolve, Math.min(500, ms))); + } + }, + [addLog, assertRunning] + ); + + const requestAssetsDirectory = useCallback( + async () => + new Promise((resolve, reject) => { + setDirectoryRequest({ + title: 'Select assets source', + description: 'Pick the device_update/assets directory.', + resolve, + reject, + }); + }), + [] + ); + + const pickAssetsDirectory = useCallback(async () => { + const picker = getDirectoryPicker(); + const handle = await picker({ mode: 'read' }); + setAssetSource({ mode: 'directory', handle }); + return handle; + }, []); + + const handleDirectoryRequest = useCallback(async () => { + if (!directoryRequest) return; + try { + const handle = await pickAssetsDirectory(); + directoryRequest.resolve(handle); + addLog('ok', `${directoryRequest.title}: ${handle.name}`); + } catch (error) { + const message = getErrorMessage(error); + directoryRequest.reject(new Error(message)); + addLog('error', `${directoryRequest.title} failed: ${message}`); + } finally { + setDirectoryRequest(null); + } + }, [addLog, directoryRequest, pickAssetsDirectory]); + + const handleCancelDirectoryRequest = useCallback(() => { + if (!directoryRequest) return; + directoryRequest.reject(new Error(`${directoryRequest.title} cancelled`)); + setDirectoryRequest(null); + }, [directoryRequest]); + + const connectDevice = useCallback( + async (timeoutMs: number, label: string): Promise => { + addLog('info', `${label}: connecting with Protocol V2`); + const deadline = Date.now() + timeoutMs; + let lastError = ''; + + setIsConnecting(true); + try { + while (Date.now() < deadline) { + assertRunning(); + const response = await searchDevices({ connectProtocol: HARDWARE_CONNECT_PROTOCOL.V2 }); + if (response.success && Array.isArray(response.payload) && response.payload.length > 0) { + const device = response.payload[0] as DeviceInfo; + setConnectedDevices(response.payload as DeviceInfo[]); + setCurrentDevice(device); + currentDeviceRef.current = device; + if (device.features) { + setDeviceFeatures(device.features); + } + addLog('ok', `${label}: connected ${device.connectId}`); + return device; + } + lastError = response.payload?.error || 'No device found'; + await new Promise(resolve => setTimeout(resolve, 1000)); + } + } finally { + setIsConnecting(false); + } + + throw new Error(`${label}: connect timeout, last error: ${lastError || 'unknown'}`); + }, + [ + addLog, + assertRunning, + setConnectedDevices, + setCurrentDevice, + setDeviceFeatures, + setIsConnecting, + ] + ); + + const callApi = useCallback( + async (method: HardwareApiMethod, connectId: string, params: Record = {}) => { + assertRunning(); + const response = await callHardwareAPI(method, { + connectId, + connectProtocol: HARDWARE_CONNECT_PROTOCOL.V2, + ...params, + }); + if (!response.success) { + throw new Error(response.payload?.error || `${String(method)} failed`); + } + return response.payload; + }, + [assertRunning] + ); + + const pingDevice = useCallback( + async (connectId: string, timeoutMs: number, label: string) => { + addLog('info', `${label}: ping`); + const deadline = Date.now() + timeoutMs; + let lastError = ''; + while (Date.now() < deadline) { + try { + await callApi('ping', connectId, { message: 'workflow' }); + addLog('ok', `${label}: ping ok`); + return; + } catch (error) { + lastError = getErrorMessage(error); + await new Promise(resolve => setTimeout(resolve, 500)); + } + } + throw new Error(`${label}: ping timeout, last error: ${lastError || 'unknown'}`); + }, + [addLog, callApi] + ); + + const getPathInfo = useCallback( + async (connectId: string, path: string) => { + const payload = await callApi('pathInfo', connectId, { path }); + return payload as PathInfoResult; + }, + [callApi] + ); + + const writeFile = useCallback( + async (connectId: string, file: File, path: string, label: string) => { + addLog('info', `${label}: write ${file.name} -> ${path} (${formatBytes(file.size)})`); + await callApi('fileWrite', connectId, { + path, + offset: 0, + totalSize: file.size, + chunkSize: DEVICE_FILE_WRITE_CHUNK_SIZE, + data: file, + overwrite: true, + append: false, + }); + addLog('ok', `${label}: write complete`); + }, + [addLog, callApi] + ); + + const rebootDevice = useCallback( + async (connectId: string, rebootType: number, label: string) => { + addLog('info', `${label}: reboot type=${rebootType}`); + await callApi('deviceReboot', connectId, { rebootType }); + addLog('ok', `${label}: reboot command accepted`); + }, + [addLog, callApi] + ); + + const firmwareUpdate = useCallback( + async (connectId: string, targetId: number, path: string, label: string) => { + resetFirmwareProgress(); + addLog('info', `${label}: DeviceFirmwareUpdate target=${targetId} path=${path}`); + await callApi('deviceFirmwareUpdate', connectId, { targetId, path }); + addLog('ok', `${label}: install command finished`); + }, + [addLog, callApi, resetFirmwareProgress] + ); + + const standalonePrelude = useCallback( + async (label: string) => { + const first = await connectDevice(CONNECT_TIMEOUT_MS, `${label}.pre.connect`); + await rebootDevice(first.connectId, 1, `${label}.pre.reboot`); + await wait(STANDALONE_POST_REBOOT_WAIT_MS, `${label}.pre`); + const second = await connectDevice(CONNECT_TIMEOUT_MS, `${label}.pre.reconnect`); + return second.connectId; + }, + [connectDevice, rebootDevice, wait] + ); + + const rebootToBoardloaderPrelude = useCallback(async () => { + const device = await connectDevice(CONNECT_TIMEOUT_MS, 'RunAll.boardloader.connect'); + await rebootDevice(device.connectId, 1, 'RunAll.boardloader.reboot'); + await wait(STANDALONE_POST_REBOOT_WAIT_MS, 'RunAll.boardloader'); + await connectDevice(CONNECT_TIMEOUT_MS, 'RunAll.boardloader.reconnect'); + }, [connectDevice, rebootDevice, wait]); + + const enumerateAssets = useCallback(async (root: DirectoryHandle) => { + const results: AssetFile[] = []; + + const walk = async (dir: DirectoryHandle, prefix: string[]) => { + for await (const [name, handle] of dir.entries()) { + if (IGNORED_ASSET_BASENAMES.has(name)) continue; + if (handle.kind === 'directory') { + await walk(handle, [...prefix, name]); + } else { + const file = await handle.getFile(); + results.push({ + file, + relativePath: [...prefix, name], + size: file.size, + }); + } + } + }; + + await walk(root, []); + results.sort((a, b) => a.relativePath.join('/').localeCompare(b.relativePath.join('/'))); + return results; + }, []); + + const ensureDeviceDirectories = useCallback( + async (connectId: string, dirPaths: string[], createdDirs: Set) => { + for (const dirPath of dirPaths) { + if (createdDirs.has(dirPath)) continue; + try { + await callApi('dirMake', connectId, { path: dirPath }); + } catch (error) { + const message = getErrorMessage(error); + if (!isDirectoryAlreadyExistsError(message)) { + throw error; + } + } + createdDirs.add(dirPath); + } + }, + [callApi] + ); + + const uploadAssetsOverWebUsb = useCallback( + async (connectId: string, source: AssetSource) => { + const assetFiles: AssetFile[] = + source.mode === 'directory' + ? await enumerateAssets(source.handle) + : source.files.map(item => ({ + relativePath: item.relativePath.split('/').filter(Boolean), + sourcePath: item.sourcePath, + size: item.size, + })); + const totalBytes = assetFiles.reduce((sum, item) => sum + item.size, 0); + + if (assetFiles.length === 0) { + throw new Error('Assets directory is empty.'); + } + + addLog( + 'info', + `Step2.3: uploading ${assetFiles.length} files (${formatBytes( + totalBytes + )}) to vol0 over WebUSB` + ); + + let copiedFiles = 0; + let copiedBytes = 0; + const startedAt = Date.now(); + const createdDirs = new Set(); + + const publishCopyProgress = (progress: CopyProgress) => { + setCopyProgress(progress); + }; + + publishCopyProgress({ + copiedFiles: 0, + totalFiles: assetFiles.length, + copiedBytes: 0, + totalBytes, + currentFile: getAssetRelativePath(assetFiles[0]?.relativePath ?? []), + currentFileBytes: 0, + currentFileSize: assetFiles[0]?.size ?? 0, + rateBytesPerSecond: 0, + elapsedMs: 0, + }); + + for (const item of assetFiles) { + assertRunning(); + if (!item.file && !item.sourcePath) { + throw new Error(`Missing source for asset: ${getAssetRelativePath(item.relativePath)}`); + } + const data = item.file ?? (await fetchDeviceUpdateBlob(item.sourcePath ?? '')); + const currentFile = getAssetRelativePath(item.relativePath); + const devicePath = getAssetDevicePath(item.relativePath); + const elapsedBeforeMs = Date.now() - startedAt; + const currentRateBytesPerSecond = + elapsedBeforeMs > 0 ? Math.round((copiedBytes / elapsedBeforeMs) * 1000) : 0; + + publishCopyProgress({ + copiedFiles, + totalFiles: assetFiles.length, + copiedBytes, + totalBytes, + currentFile, + currentFileBytes: 0, + currentFileSize: data.size, + rateBytesPerSecond: currentRateBytesPerSecond, + elapsedMs: elapsedBeforeMs, + }); + + await ensureDeviceDirectories( + connectId, + getAssetDeviceDirPaths(item.relativePath), + createdDirs + ); + await callApi('fileWrite', connectId, { + path: devicePath, + offset: 0, + totalSize: data.size, + chunkSize: DEVICE_FILE_WRITE_CHUNK_SIZE, + data, + overwrite: true, + append: false, + }); + + copiedFiles += 1; + copiedBytes += data.size; + const elapsedMs = Date.now() - startedAt; + const rateBytesPerSecond = elapsedMs > 0 ? Math.round((copiedBytes / elapsedMs) * 1000) : 0; + publishCopyProgress({ + copiedFiles, + totalFiles: assetFiles.length, + copiedBytes, + totalBytes, + currentFile, + currentFileBytes: data.size, + currentFileSize: data.size, + rateBytesPerSecond, + elapsedMs, + }); + } + + const finalElapsedMs = Date.now() - startedAt; + const finalRateBytesPerSecond = + finalElapsedMs > 0 ? Math.round((copiedBytes / finalElapsedMs) * 1000) : 0; + publishCopyProgress({ + copiedFiles, + totalFiles: assetFiles.length, + copiedBytes, + totalBytes, + currentFile: getAssetRelativePath(assetFiles[assetFiles.length - 1]?.relativePath ?? []), + currentFileBytes: assetFiles[assetFiles.length - 1]?.size ?? 0, + currentFileSize: assetFiles[assetFiles.length - 1]?.size ?? 0, + rateBytesPerSecond: finalRateBytesPerSecond, + elapsedMs: finalElapsedMs, + }); + + addLog( + 'ok', + `Step2.3: uploaded ${assetFiles.length} asset files at ${formatRate( + finalRateBytesPerSecond + )}` + ); + }, + [addLog, assertRunning, callApi, ensureDeviceDirectories, enumerateAssets] + ); + + const requireFile = useCallback( + async (key: RequiredFileKey) => { + const selectedFile = files[key]; + if (!selectedFile) { + const config = REQUIRED_FILES.find(item => item.key === key); + throw new Error(`Missing ${config?.label ?? key} file.`); + } + + if (selectedFile.mode === 'manual') { + return selectedFile.file; + } + + if (selectedFile.available === false) { + throw new Error(`Default file is not available: ${selectedFile.name}`); + } + + const blob = await fetchDeviceUpdateBlob(selectedFile.sourcePath); + return new File([blob], selectedFile.name, { + type: 'application/octet-stream', + }); + }, + [files] + ); + + const getAssetsDirectory = useCallback(async () => { + if (assetSource) return assetSource; + const handle = await requestAssetsDirectory(); + return { mode: 'directory', handle } as AssetSource; + }, [assetSource, requestAssetsDirectory]); + + const runStep1Once = useCallback(async () => { + const romloaderFile = await requireFile('romloader'); + const updateRomFile = await requireFile('updateRom'); + + const device = await connectDevice(CONNECT_TIMEOUT_MS, 'Step1.1'); + let connectId = device.connectId; + await pingDevice(connectId, PING_TIMEOUT_MS, 'Step1.2'); + + addLog('info', `Step1.3: check ${STEP1_BOOT_LOGO_PATH}`); + const bootLogoInfo = await getPathInfo(connectId, STEP1_BOOT_LOGO_PATH); + if (bootLogoInfo.exist) { + await callApi('fileDelete', connectId, { path: STEP1_BOOT_LOGO_PATH }); + addLog('ok', `Step1.3: deleted ${STEP1_BOOT_LOGO_PATH}`); + } else { + addLog('info', `Step1.3: ${STEP1_BOOT_LOGO_PATH} not found`); + } + + await writeFile(connectId, romloaderFile, STEP1_ROMLOADER_PATH, 'Step1.4'); + await wait(1000, 'Step1.4 -> Step1.5'); + await writeFile(connectId, updateRomFile, STEP1_UPDATE_ROM_PATH, 'Step1.5'); + await firmwareUpdate(connectId, 1, STEP1_UPDATE_ROM_PATH, 'Step1.6'); + await rebootDevice(connectId, 0, 'Step1.7'); + await wait(STEP1_REBOOT_WAIT_MS, 'Step1.7'); + + const secondDevice = await connectDevice(CONNECT_TIMEOUT_MS, 'Step1.8'); + connectId = secondDevice.connectId; + await rebootDevice(connectId, 0, 'Step1.9'); + await wait(STEP1_SECOND_REBOOT_WAIT_MS, 'Step1.9'); + }, [ + addLog, + callApi, + connectDevice, + firmwareUpdate, + getPathInfo, + pingDevice, + rebootDevice, + requireFile, + wait, + writeFile, + ]); + + const runStep2Once = useCallback( + async (initialConnectId?: string) => { + const source = await getAssetsDirectory(); + let connectId = initialConnectId; + if (!connectId) { + connectId = (await connectDevice(CONNECT_TIMEOUT_MS, 'Step2.1')).connectId; + } else { + addLog('info', 'Step2.1: reusing connected handle from prelude'); + } + + await pingDevice(connectId, PING_TIMEOUT_MS, 'Step2.2'); + await uploadAssetsOverWebUsb(connectId, source); + await wait(STEP2_UPLOAD_DONE_WAIT_MS, 'Step2.4'); + }, + [addLog, connectDevice, getAssetsDirectory, pingDevice, uploadAssetsOverWebUsb, wait] + ); + + const runStep3Once = useCallback( + async (initialConnectId?: string) => { + const bluetoothFile = await requireFile('bluetooth'); + let connectId = initialConnectId; + if (!connectId) { + connectId = + currentDeviceRef.current?.connectId ?? + (await connectDevice(CONNECT_TIMEOUT_MS, 'Step3.1')).connectId; + addLog('info', `Step3.1: using ${connectId}`); + } + + await pingDevice(connectId, PING_TIMEOUT_MS, 'Step3.2'); + await wait(STEP3_POST_PING_WAIT_MS, 'Step3.2'); + + addLog('info', `Step3.3: check ${STEP3_BLUETOOTH_PATH}`); + let needsWrite = true; + try { + const info = await getPathInfo(connectId, STEP3_BLUETOOTH_PATH); + needsWrite = !info.exist; + } catch (error) { + addLog('warn', `Step3.3: path info failed, writing file: ${getErrorMessage(error)}`); + } + + if (needsWrite) { + await writeFile(connectId, bluetoothFile, STEP3_BLUETOOTH_PATH, 'Step3.3'); + } else { + addLog('info', `Step3.3: ${STEP3_BLUETOOTH_PATH} already exists`); + } + + await firmwareUpdate(connectId, 2, STEP3_BLUETOOTH_PATH, 'Step3.4'); + await wait(STEP3_DONE_WAIT_MS, 'Step3.5'); + }, + [addLog, connectDevice, firmwareUpdate, getPathInfo, pingDevice, requireFile, wait, writeFile] + ); + + const runStep4Once = useCallback(async () => { + const firmwareFile = await requireFile('firmware'); + let connectId = (await connectDevice(CONNECT_TIMEOUT_MS, 'Step4.1')).connectId; + await rebootDevice(connectId, 1, 'Step4.2'); + await wait(STEP4_POST_REBOOT_WAIT_MS, 'Step4.2'); + + connectId = (await connectDevice(CONNECT_TIMEOUT_MS, 'Step4.3')).connectId; + await pingDevice(connectId, PING_TIMEOUT_MS, 'Step4.4'); + await wait(STEP4_POST_PING_WAIT_MS, 'Step4.4'); + + addLog('info', `Step4.5: check ${STEP4_CORE_PATH}`); + let needsWrite = true; + try { + const info = await getPathInfo(connectId, STEP4_CORE_PATH); + needsWrite = !info.exist; + } catch (error) { + addLog('warn', `Step4.5: path info failed, writing file: ${getErrorMessage(error)}`); + } + + if (needsWrite) { + await writeFile(connectId, firmwareFile, STEP4_CORE_PATH, 'Step4.5'); + } else { + addLog('info', `Step4.5: ${STEP4_CORE_PATH} already exists`); + } + + try { + await firmwareUpdate(connectId, 1, STEP4_CORE_PATH, 'Step4.6'); + } catch (error) { + addLog('warn', `Step4.6: ignored firmware update error: ${getErrorMessage(error)}`); + } + + await wait(STEP4_FINAL_WAIT_MS, 'Step4.7'); + await connectDevice(STEP4_FINAL_CONNECT_TIMEOUT_MS, 'Step4.7'); + }, [ + addLog, + connectDevice, + firmwareUpdate, + getPathInfo, + pingDevice, + rebootDevice, + requireFile, + wait, + writeFile, + ]); + + const runWithAttempts = useCallback( + async (label: string, runner: () => Promise) => { + const attempts = Math.max(1, Math.floor(maxAttempts)); + for (let attempt = 1; attempt <= attempts; attempt += 1) { + try { + addLog('info', `${label}: attempt ${attempt}/${attempts}`); + await runner(); + addLog('ok', `${label}: success`); + return; + } catch (error) { + const message = getErrorMessage(error); + addLog(attempt < attempts ? 'warn' : 'error', `${label}: ${message}`); + if (attempt >= attempts) throw error; + await wait(2000, `${label}: retry`); + } + } + }, + [addLog, maxAttempts, wait] + ); + + const runStep = useCallback(async (stepId: WorkflowStepId, runner: () => Promise) => { + setStepStatus(prev => ({ ...prev, [stepId]: 'running' })); + try { + await runner(); + setStepStatus(prev => ({ ...prev, [stepId]: 'success' })); + } catch (error) { + setStepStatus(prev => ({ ...prev, [stepId]: 'failed' })); + throw error; + } + }, []); + + const runWorkflow = useCallback( + async (target: WorkflowTarget) => { + if (runningTarget) return; + + abortRef.current = false; + resetFirmwareProgress(); + setCopyProgress(null); + setLogs([]); + logIdRef.current = 0; + + const activeSteps = new Set(getStepIdsForTarget(target)); + setStepStatus( + STEP_CONFIG.reduce((acc, item) => { + acc[item.id] = activeSteps.has(item.id) ? 'idle' : 'skipped'; + return acc; + }, {} as Record) + ); + + setRunningTarget(target); + addLog('info', `Workflow start: ${target}`); + + try { + if (target === 'all') { + await rebootToBoardloaderPrelude(); + await runStep('step1', () => runWithAttempts('Step1', runStep1Once)); + await runStep('step2', () => runWithAttempts('Step2', () => runStep2Once())); + + try { + await runStep('step3', () => runWithAttempts('Step3', () => runStep3Once())); + } catch (error) { + addLog('warn', `Step3 failed in all flow; retry standalone: ${getErrorMessage(error)}`); + await runStep('step3', () => + runWithAttempts('Step3 standalone retry', async () => { + const connectId = await standalonePrelude('Step3'); + await runStep3Once(connectId); + }) + ); + } + + try { + await runStep('step4', () => runWithAttempts('Step4', runStep4Once)); + } catch (error) { + addLog('warn', `Step4 failed in all flow; retry once: ${getErrorMessage(error)}`); + await runStep('step4', () => runWithAttempts('Step4 retry', runStep4Once)); + } + } else if (target === 'step1') { + await runStep('step1', () => runWithAttempts('Step1', runStep1Once)); + } else if (target === 'step2') { + await runStep('step2', () => + runWithAttempts('Step2 standalone', async () => { + const connectId = await standalonePrelude('Step2'); + await runStep2Once(connectId); + }) + ); + } else if (target === 'step3') { + try { + await runStep('step3', () => + runWithAttempts('Step3 standalone', async () => { + const connectId = await standalonePrelude('Step3'); + await runStep3Once(connectId); + }) + ); + } catch (error) { + addLog('warn', `Step3 standalone failed; retry once: ${getErrorMessage(error)}`); + await runStep('step3', () => + runWithAttempts('Step3 standalone retry', async () => { + const connectId = await standalonePrelude('Step3'); + await runStep3Once(connectId); + }) + ); + } + } else { + try { + await runStep('step4', () => runWithAttempts('Step4', runStep4Once)); + } catch (error) { + addLog('warn', `Step4 failed; retry once: ${getErrorMessage(error)}`); + await runStep('step4', () => runWithAttempts('Step4 retry', runStep4Once)); + } + } + + addLog('ok', `Workflow finished: ${target}`); + toast({ title: 'Pro2 update workflow finished', description: target }); + } catch (error) { + const message = getErrorMessage(error); + addLog('error', `Workflow failed: ${message}`); + toast({ + title: 'Pro2 update workflow failed', + description: message, + variant: 'warning', + }); + } finally { + setRunningTarget(null); + } + }, + [ + addLog, + resetFirmwareProgress, + runStep, + runStep1Once, + runStep2Once, + runStep3Once, + runStep4Once, + runWithAttempts, + runningTarget, + rebootToBoardloaderPrelude, + standalonePrelude, + toast, + ] + ); + + const stopWorkflow = useCallback(() => { + abortRef.current = true; + addLog('warn', 'Workflow cancellation requested'); + }, [addLog]); + + const clearRunState = useCallback(() => { + setLogs([]); + setCopyProgress(null); + setStepStatus(INITIAL_STEP_STATUS); + resetFirmwareProgress(); + }, [resetFirmwareProgress]); + + const restoreDefaultInputs = useCallback(() => { + setFiles(createDefaultFileState(deviceUpdateManifest)); + const defaultAssets = deviceUpdateManifest?.assets ?? []; + if (defaultAssets.length > 0) { + setAssetSource({ + mode: 'default', + files: defaultAssets, + totalBytes: defaultAssets.reduce((sum, item) => sum + item.size, 0), + }); + } + }, [deviceUpdateManifest]); + + const runButtons = useMemo( + () => + [ + { target: 'all' as const, label: 'Run All' }, + { target: 'step1' as const, label: 'Step 1' }, + { target: 'step2' as const, label: 'Step 2' }, + { target: 'step3' as const, label: 'Step 3' }, + { target: 'step4' as const, label: 'Step 4' }, + ].map(item => ( + + )), + [runWorkflow, runningTarget, sdkInitState.isInitialized] + ); + + return ( + +
+
+
+
+

OneKey Pro 2 Update

+

+ Romloader, resources, bluetooth, and firmware workflow. +

+
+
+ + SDK {sdkInitState.isInitialized ? 'ready' : 'initializing'} + + + {currentDevice?.connectId ?? 'No device'} + +
+
+ + + + {directoryRequest ? ( + + +
+
{directoryRequest.title}
+
+ {directoryRequest.description} +
+
+
+ + +
+
+
+ ) : null} + +
+ + +
+
+

Inputs

+

+ Select local binaries and resource assets before running the workflow. +

+
+
+ +
+
+ +
+ {REQUIRED_FILES.map(item => { + const selectedFile = files[item.key]; + const selectedSize = getWorkflowFileSize(selectedFile); + return ( +
+
+
+
+ {item.label} +
+
+ {item.expectedName} +
+
+ {selectedFile.mode === 'manual' || selectedFile.available !== false ? ( + + ) : ( + + )} +
+ { + const nextFile = event.currentTarget.files?.[0]; + if (!nextFile) return; + setFiles(prev => ({ + ...prev, + [item.key]: { + mode: 'manual', + file: nextFile, + }, + })); + }} + /> +
+ + {selectedFile.mode === 'default' ? 'Default' : 'Manual'} + + + {getWorkflowFileName(selectedFile)} + {selectedSize ? ` · ${formatBytes(selectedSize)}` : ''} + +
+
+ ); + })} +
+ +
+
+
+
+
Assets source
+
+ {assetSource?.mode === 'default' + ? `device_update/assets (${ + assetSource.files.length + } files · ${formatBytes(assetSource.totalBytes)})` + : assetSource?.handle.name ?? 'Not selected'} +
+
+
+ + +
+
+
+ Defaults to device_update/assets and uploads its contents to vol0 over WebUSB. +
+ {manifestError ? ( +
+ Default manifest unavailable: {manifestError} +
+ ) : null} +
+
+
+
+ + + +
+
+

Run Control

+

+ Standalone step2/step3 run the reboot prelude before their body. +

+
+
+ + + setMaxAttempts(Math.max(1, Math.min(5, Number(event.target.value) || 1))) + } + className="w-20" + /> +
+
+ +
{runButtons}
+ +
+ + + +
+
+
+ + + +
+

Workflow Steps

+ + {allFilesReady ? 'Files ready' : 'Files missing'} + +
+
+ {STEP_CONFIG.map(item => ( +
+
+
{item.title}
+ +
+
{item.description}
+
+ ))} +
+ + {copyProgress ? ( +
+
+ + Resource upload + + {copyPercentage}% + +
+ +
+ + {formatBytes(copyProgress.copiedBytes)} /{' '} + {formatBytes(copyProgress.totalBytes)} + + {formatRate(copyProgress.rateBytesPerSecond)} + + {copyProgress.copiedFiles}/{copyProgress.totalFiles} files + +
+ {copyProgress.currentFile ? ( +
+
{copyProgress.currentFile}
+
+ {formatBytes(copyProgress.currentFileBytes ?? 0)} /{' '} + {formatBytes(copyProgress.currentFileSize ?? 0)} +
+
+ ) : null} +
+ ) : null} +
+
+ + + +
+

Run Log

+ + {runningTarget ?? 'idle'} + +
+
+ {logs.length === 0 ? ( +
No log entries.
+ ) : ( + logs.map(item => ( +
+ {item.time} + + {item.level.toUpperCase()} + + {item.message} +
+ )) + )} +
+
+
+
+
+
+
+ ); +} diff --git a/packages/connect-examples/expo-playground/webpack.config.js b/packages/connect-examples/expo-playground/webpack.config.js index 3b6f93b6b..e251e1f99 100644 --- a/packages/connect-examples/expo-playground/webpack.config.js +++ b/packages/connect-examples/expo-playground/webpack.config.js @@ -1,9 +1,98 @@ /* eslint-disable no-undef */ const path = require('path'); +const fs = require('fs'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const webpack = require('webpack'); +const repoRoot = path.resolve(__dirname, '../../..'); +const deviceUpdateRoot = path.join(repoRoot, 'device_update'); +const deviceUpdateBinDir = path.join(deviceUpdateRoot, 'bin'); +const deviceUpdateAssetsDir = path.join(deviceUpdateRoot, 'assets'); +const ignoredDeviceUpdateNames = new Set(['.DS_Store', 'Thumbs.db', 'desktop.ini']); +const deviceUpdateBinaries = { + romloader: 'pro2_romloader_v3_msc.bin', + updateRom: 'pro2_boot_update_rom_signed.bin', + bluetooth: 'pro2_bluetooth_signed.bin', + firmware: 'pro2_firmware_signed.bin', +}; + +function readFileSize(filePath) { + try { + return fs.statSync(filePath).size; + } catch { + return 0; + } +} + +function listDeviceUpdateAssets(dir, prefix = '') { + if (!fs.existsSync(dir)) return []; + + return fs + .readdirSync(dir, { withFileTypes: true }) + .flatMap(entry => { + if (ignoredDeviceUpdateNames.has(entry.name)) return []; + const absolutePath = path.join(dir, entry.name); + const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name; + if (entry.isDirectory()) { + return listDeviceUpdateAssets(absolutePath, relativePath); + } + if (!entry.isFile()) return []; + return [ + { + relativePath, + sourcePath: `assets/${relativePath}`, + size: readFileSize(absolutePath), + }, + ]; + }) + .sort((a, b) => a.relativePath.localeCompare(b.relativePath)); +} + +function createDeviceUpdateManifest() { + const binaries = Object.fromEntries( + Object.entries(deviceUpdateBinaries).map(([key, name]) => { + const filePath = path.join(deviceUpdateBinDir, name); + return [ + key, + { + name, + sourcePath: `bin/${name}`, + size: readFileSize(filePath), + available: fs.existsSync(filePath), + }, + ]; + }) + ); + + return { + generatedAt: new Date().toISOString(), + binaries, + assets: listDeviceUpdateAssets(deviceUpdateAssetsDir), + }; +} + +class DeviceUpdateManifestPlugin { + apply(compiler) { + compiler.hooks.thisCompilation.tap('DeviceUpdateManifestPlugin', compilation => { + compilation.hooks.processAssets.tap( + { + name: 'DeviceUpdateManifestPlugin', + stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS, + }, + () => { + compilation.emitAsset( + 'device-update/manifest.json', + new compiler.webpack.sources.RawSource( + `${JSON.stringify(createDeviceUpdateManifest(), null, 2)}\n` + ) + ); + } + ); + }); + } +} + module.exports = async (env, argv) => { // Dynamically import ESM-only rehype-highlight const rehypeHighlight = (await import('rehype-highlight')).default; @@ -143,8 +232,28 @@ module.exports = async (env, argv) => { ignore: ['**/index.html'], // 忽略 index.html,因为 HtmlWebpackPlugin 会处理它 }, }, + ...(fs.existsSync(deviceUpdateBinDir) + ? [ + { + from: deviceUpdateBinDir, + to: 'device-update/bin', + }, + ] + : []), + ...(fs.existsSync(deviceUpdateAssetsDir) + ? [ + { + from: deviceUpdateAssetsDir, + to: 'device-update/assets', + globOptions: { + ignore: ['**/.DS_Store', '**/Thumbs.db', '**/desktop.ini'], + }, + }, + ] + : []), ], }), + new DeviceUpdateManifestPlugin(), new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer'], process: ['process/browser.js'], diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index d182ecc87..a5ccf392d 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -52,6 +52,7 @@ export { default as factoryDeviceInfoSettings } from './protocol-v2/FactoryDevic export { default as factoryGetDeviceInfo } from './protocol-v2/FactoryGetDeviceInfo'; export { default as filesystemFixPermission } from './protocol-v2/FilesystemFixPermission'; export { default as filesystemFormat } from './protocol-v2/FilesystemFormat'; +export { default as filesystemDiskControl } from './protocol-v2/FilesystemDiskControl'; export { default as fileRead } from './FileRead'; export { default as fileWrite } from './FileWrite'; export { default as fileDelete } from './FileDelete'; diff --git a/packages/core/src/api/protocol-v2/DeviceFirmwareUpdate.ts b/packages/core/src/api/protocol-v2/DeviceFirmwareUpdate.ts index 1a0282c08..bb698c610 100644 --- a/packages/core/src/api/protocol-v2/DeviceFirmwareUpdate.ts +++ b/packages/core/src/api/protocol-v2/DeviceFirmwareUpdate.ts @@ -4,6 +4,8 @@ import { PROTOCOL_V2_FIRMWARE_UPDATE_RESPONSE_TYPES, normalizeFirmwareTargets, } from './helpers'; +import { UI_REQUEST, createUiMessage } from '../../events/ui-request'; +import type { KnownDevice } from '../../types'; import type { DeviceFirmwareUpdateParams } from './helpers'; @@ -27,7 +29,21 @@ export default class DeviceFirmwareUpdate extends BaseMethod { + if (response.type !== 'DeviceFirmwareInstallProgress') return; + const progress = Number(response.message?.progress); + if (!Number.isFinite(progress)) return; + this.postMessage( + createUiMessage(UI_REQUEST.FIRMWARE_PROGRESS, { + device: this.device.toMessageObject() as KnownDevice, + progress: Math.min(Math.max(progress, 0), 100), + progressType: 'installingFirmware', + }) + ); + }, + } ); return Promise.resolve(res.message); } diff --git a/packages/core/src/api/protocol-v2/FilesystemDiskControl.ts b/packages/core/src/api/protocol-v2/FilesystemDiskControl.ts new file mode 100644 index 000000000..fe67e2e2e --- /dev/null +++ b/packages/core/src/api/protocol-v2/FilesystemDiskControl.ts @@ -0,0 +1,34 @@ +import { BaseMethod } from '../BaseMethod'; +import { + validateNonNegativeInteger, + validateOptionalNonNegativeInteger, +} from '../helpers/filesystemValidation'; + +export type FilesystemDiskControlParams = { + enable?: number | string; + timeoutMs?: number | string; +}; + +export default class FilesystemDiskControl extends BaseMethod { + init() { + this.skipForceUpdateCheck = true; + this.useDevicePassphraseState = false; + this.params = { + enable: validateNonNegativeInteger(this.payload.enable, 'enable', 0), + timeoutMs: validateOptionalNonNegativeInteger(this.payload.timeoutMs, 'timeoutMs'), + }; + } + + async run() { + const timeoutMs = Number(this.params.timeoutMs); + const res = await this.device.commands.typedCall( + 'FilesystemDiskControl', + 'Success', + { + enable: Number(this.params.enable ?? 0), + }, + Number.isFinite(timeoutMs) && timeoutMs > 0 ? { timeoutMs } : undefined + ); + return Promise.resolve(res.message); + } +} diff --git a/packages/core/src/data/messages/messages-protocol-v2.json b/packages/core/src/data/messages/messages-protocol-v2.json index aac18dc78..fc3472f11 100644 --- a/packages/core/src/data/messages/messages-protocol-v2.json +++ b/packages/core/src/data/messages/messages-protocol-v2.json @@ -501,6 +501,7 @@ "MessageType_FilesystemDirMake": 60809, "MessageType_FilesystemDirRemove": 60810, "MessageType_FilesystemFormat": 60811, + "MessageType_FilesystemDiskControl": 60812, "MessageType_DeviceFirmwareUpdate": 61000, "MessageType_DeviceFirmwareInstallProgress": 61001, "MessageType_DeviceGetFirmwareUpdateStatus": 61002, @@ -12403,6 +12404,15 @@ "FilesystemFormat": { "fields": {} }, + "FilesystemDiskControl": { + "fields": { + "enable": { + "rule": "required", + "type": "uint32", + "id": 1 + } + } + }, "DeviceGetOnboardingStatus": { "fields": {} }, diff --git a/packages/core/src/inject.ts b/packages/core/src/inject.ts index c797d4f26..a4f0d8dbd 100644 --- a/packages/core/src/inject.ts +++ b/packages/core/src/inject.ts @@ -187,6 +187,8 @@ export const createCoreApi = ( filesystemPathInfoQuery: (connectId, params) => call({ ...params, connectId, method: 'filesystemPathInfoQuery' }), filesystemFormat: connectId => call({ connectId, method: 'filesystemFormat' }), + filesystemDiskControl: (connectId, params) => + call({ ...params, connectId, method: 'filesystemDiskControl' }), deviceRecovery: (connectId, params) => call({ ...params, connectId, method: 'deviceRecovery' }), deviceReset: (connectId, params) => call({ ...params, connectId, method: 'deviceReset' }), deviceSettings: (connectId, params) => call({ ...params, connectId, method: 'deviceSettings' }), diff --git a/packages/core/src/protocols/protocol-v2/features.ts b/packages/core/src/protocols/protocol-v2/features.ts index 5d5c51766..b9365a7ad 100644 --- a/packages/core/src/protocols/protocol-v2/features.ts +++ b/packages/core/src/protocols/protocol-v2/features.ts @@ -53,22 +53,61 @@ type ProtocolV2DeviceInfo = { }; }; -const PROTOCOL_V2_DEVICE_INFO_REQUEST = { - targets: { - hw: true, - fw: true, - bt: true, - se1: true, - se2: true, - se3: true, - se4: true, - status: true, +// const PROTOCOL_V2_DEVICE_INFO_REQUEST = { +// targets: { +// hw: true, +// fw: true, +// bt: true, +// se1: true, +// se2: true, +// se3: true, +// se4: true, +// status: true, +// }, +// types: { +// version: true, +// build_id: true, +// hash: true, +// specific: true, +// }, +// }; + +const MOCK_PROTOCOL_V2_DEVICE_INFO: ProtocolV2DeviceInfo = { + protocol_version: 2, + hw: { + Device_type: 1, + device_type: 1, + serial_no: '000000000000', + hardware_version: 'mock', + }, + fw: { + board: { + version: '0.0.0', + build_id: 'mock', + }, + boot: { + version: '0.0.0', + build_id: 'mock', + }, + app: { + version: '0.0.0', + build_id: 'mock', + }, }, - types: { - version: true, - build_id: true, - hash: true, - specific: true, + bt: { + app: { + version: '0.0.0', + build_id: 'mock', + }, + adv_name: 'OneKey Pro 2', + }, + status: { + language: 'en-US', + bt_enable: true, + init_states: true, + backup_required: false, + passphrase_protection: false, + label: 'OneKey Pro 2', }, }; @@ -228,7 +267,6 @@ export function normalizeProtocolV2Features( export async function getProtocolV2Features({ commands, descriptor, - onDeviceInfoError, timeoutMs, }: { commands: DeviceCommands; @@ -243,22 +281,24 @@ export async function getProtocolV2Features({ await commands.typedCall('Ping', 'Success', { message: 'init' }); } - try { - const { message } = callOptions - ? await commands.typedCall( - 'DeviceGetDeviceInfo', - 'DeviceInfo', - PROTOCOL_V2_DEVICE_INFO_REQUEST, - callOptions - ) - : await commands.typedCall( - 'DeviceGetDeviceInfo', - 'DeviceInfo', - PROTOCOL_V2_DEVICE_INFO_REQUEST - ); - return normalizeProtocolV2Features(descriptor, message as unknown as ProtocolV2DeviceInfo); - } catch (error) { - onDeviceInfoError?.(error); - return normalizeProtocolV2Features(descriptor); - } + // Temporarily skip the real DeviceGetDeviceInfo request while Pro2 update flow is being debugged. + // try { + // const { message } = callOptions + // ? await commands.typedCall( + // 'DeviceGetDeviceInfo', + // 'DeviceInfo', + // PROTOCOL_V2_DEVICE_INFO_REQUEST, + // callOptions + // ) + // : await commands.typedCall( + // 'DeviceGetDeviceInfo', + // 'DeviceInfo', + // PROTOCOL_V2_DEVICE_INFO_REQUEST + // ); + // return normalizeProtocolV2Features(descriptor, message as unknown as ProtocolV2DeviceInfo); + // } catch (error) { + // onDeviceInfoError?.(error); + // return normalizeProtocolV2Features(descriptor); + // } + return normalizeProtocolV2Features(descriptor, MOCK_PROTOCOL_V2_DEVICE_INFO); } diff --git a/packages/core/src/types/api/index.ts b/packages/core/src/types/api/index.ts index e477f0397..7bb08a11b 100644 --- a/packages/core/src/types/api/index.ts +++ b/packages/core/src/types/api/index.ts @@ -15,6 +15,7 @@ import type { filesystemDirList, filesystemDirMake, filesystemDirRemove, + filesystemDiskControl, filesystemFileDelete, filesystemFileRead, filesystemFileWrite, @@ -259,6 +260,7 @@ export type CoreApi = { filesystemDirRemove: typeof filesystemDirRemove; filesystemPathInfoQuery: typeof filesystemPathInfoQuery; filesystemFormat: typeof filesystemFormat; + filesystemDiskControl: typeof filesystemDiskControl; /** * All network function diff --git a/packages/core/src/types/api/protocolV2.ts b/packages/core/src/types/api/protocolV2.ts index 1f9a2324e..2c35552e3 100644 --- a/packages/core/src/types/api/protocolV2.ts +++ b/packages/core/src/types/api/protocolV2.ts @@ -219,3 +219,8 @@ export declare function filesystemPathInfoQuery( ): ReturnType; export declare function filesystemFormat(connectId: string): Response; + +export declare function filesystemDiskControl( + connectId: string, + params: CommonParams & { enable: number | string; timeoutMs?: number | string } +): Response; diff --git a/packages/hd-transport/src/types/messages.ts b/packages/hd-transport/src/types/messages.ts index 405d6090d..6b0234373 100644 --- a/packages/hd-transport/src/types/messages.ts +++ b/packages/hd-transport/src/types/messages.ts @@ -4792,6 +4792,11 @@ export type FilesystemDirRemove = { // FilesystemFormat export type FilesystemFormat = {}; +// FilesystemDiskControl +export type FilesystemDiskControl = { + enable: number; +}; + // DeviceGetOnboardingStatus export type DeviceGetOnboardingStatus = {}; @@ -5411,6 +5416,7 @@ export type MessageType = { FilesystemDirMake: FilesystemDirMake; FilesystemDirRemove: FilesystemDirRemove; FilesystemFormat: FilesystemFormat; + FilesystemDiskControl: FilesystemDiskControl; DeviceGetOnboardingStatus: DeviceGetOnboardingStatus; DeviceOnboardingStatus: DeviceOnboardingStatus; }; From 00a39317c016cdcebbe6fef036a70336d4aa33b8 Mon Sep 17 00:00:00 2001 From: wabicai Date: Fri, 22 May 2026 17:34:39 +0800 Subject: [PATCH 60/73] fix: configure playground social metadata --- .github/templates/404.html | 24 ++++++++++++- .../expo-playground/public/index.html | 22 +++++++----- .../expo-playground/webpack.config.js | 35 +++++++++++++++++++ 3 files changed, 72 insertions(+), 9 deletions(-) diff --git a/.github/templates/404.html b/.github/templates/404.html index 2edb017f9..85a301cce 100644 --- a/.github/templates/404.html +++ b/.github/templates/404.html @@ -3,7 +3,29 @@ - Hardware SDK Examples + + OneKey Developer Playground + + + + + + + + + + + + + + + + + +