@wallfree-dev/angular-core 0.0.59-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -0
- package/esm2022/lib/airgap-angular-core.module.mjs +63 -0
- package/esm2022/lib/base/base.component.mjs +38 -0
- package/esm2022/lib/base/base.facade.mjs +37 -0
- package/esm2022/lib/capacitor-plugins/definitions.mjs +15 -0
- package/esm2022/lib/capacitor-plugins/injection-tokens.mjs +11 -0
- package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.mjs +67 -0
- package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.mjs +247 -0
- package/esm2022/lib/components/account-item/account-item.component.mjs +30 -0
- package/esm2022/lib/components/account-selection/account-selection.component.mjs +61 -0
- package/esm2022/lib/components/components.module.mjs +97 -0
- package/esm2022/lib/components/currency-symbol/currency-symbol.component.mjs +45 -0
- package/esm2022/lib/components/currency-symbol/currency-symbol.facade.mjs +8 -0
- package/esm2022/lib/components/currency-symbol/currency-symbol.types.mjs +2 -0
- package/esm2022/lib/components/from-to/from-to.component.mjs +100 -0
- package/esm2022/lib/components/iac-qr/iac-qr.component.mjs +192 -0
- package/esm2022/lib/components/identicon/identicon.component.mjs +51 -0
- package/esm2022/lib/components/isolated-modules-badges/isolated-modules-badges.component.mjs +16 -0
- package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.component.mjs +43 -0
- package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.facade.mjs +7 -0
- package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.component.mjs +50 -0
- package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
- package/esm2022/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.mjs +12 -0
- package/esm2022/lib/components/network-badge/network-badge.component.mjs +19 -0
- package/esm2022/lib/components/qr/qr.component.mjs +36 -0
- package/esm2022/lib/components/qr-settings/qr-settings.component.mjs +30 -0
- package/esm2022/lib/components/titled-address/titled-address.component.mjs +31 -0
- package/esm2022/lib/components/titled-text/titled-text.component.mjs +28 -0
- package/esm2022/lib/config/app-config.mjs +3 -0
- package/esm2022/lib/pages/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
- package/esm2022/lib/pipes/amount-converter/amount-converter.pipe.mjs +82 -0
- package/esm2022/lib/pipes/fee-converter/fee-converter.pipe.mjs +36 -0
- package/esm2022/lib/pipes/pipes.module.mjs +19 -0
- package/esm2022/lib/pipes/wallet-filter/wallet-filter.pipe.mjs +36 -0
- package/esm2022/lib/protocol/adapter/protocol-v0-adapter.mjs +880 -0
- package/esm2022/lib/protocol/isolated/base-isolated.mjs +27 -0
- package/esm2022/lib/protocol/isolated/block-explorer-isolated.mjs +32 -0
- package/esm2022/lib/protocol/isolated/protocol-offline-isolated.mjs +37 -0
- package/esm2022/lib/protocol/isolated/protocol-online-isolated.mjs +52 -0
- package/esm2022/lib/protocol/isolated/v3-serializer-companion-isolated.mjs +35 -0
- package/esm2022/lib/services/address/address.service.mjs +78 -0
- package/esm2022/lib/services/clipboard/clipboard.service.mjs +48 -0
- package/esm2022/lib/services/deeplink/deeplink.service.mjs +73 -0
- package/esm2022/lib/services/environment/base-environment.service.mjs +6 -0
- package/esm2022/lib/services/filesystem/filesystem.service.mjs +291 -0
- package/esm2022/lib/services/iac/base.iac.service.mjs +155 -0
- package/esm2022/lib/services/iac/message-handler-single.mjs +48 -0
- package/esm2022/lib/services/iac/message-handler.mjs +22 -0
- package/esm2022/lib/services/iac/qr-generator.mjs +17 -0
- package/esm2022/lib/services/image/fetcher/image-direct.fetcher.mjs +16 -0
- package/esm2022/lib/services/image/fetcher/image-proxy.fetcher.mjs +45 -0
- package/esm2022/lib/services/image/image.service.mjs +39 -0
- package/esm2022/lib/services/key-pair/key-pair.service.mjs +57 -0
- package/esm2022/lib/services/language/language.service.mjs +47 -0
- package/esm2022/lib/services/modules/base-modules.service.mjs +157 -0
- package/esm2022/lib/services/modules/controller/base-modules.controller.mjs +2 -0
- package/esm2022/lib/services/modules/controller/integral/integral-modules.controller.mjs +91 -0
- package/esm2022/lib/services/modules/controller/isolated/isolated-modules.controller.mjs +190 -0
- package/esm2022/lib/services/modules/controller/modules.controller.mjs +85 -0
- package/esm2022/lib/services/permissions/permissions.service.mjs +140 -0
- package/esm2022/lib/services/protocol/defaults.mjs +55 -0
- package/esm2022/lib/services/protocol/protocol.service.mjs +230 -0
- package/esm2022/lib/services/protocol/store/base-protocol-store.service.mjs +63 -0
- package/esm2022/lib/services/protocol/store/main/main-protocol-store.service.mjs +91 -0
- package/esm2022/lib/services/protocol/store/sub/sub-protocol-store.service.mjs +174 -0
- package/esm2022/lib/services/qr/qr-generators/bc-ur-generator.mjs +127 -0
- package/esm2022/lib/services/qr/qr-generators/metamask-generator.mjs +117 -0
- package/esm2022/lib/services/qr/qr-generators/output-descriptor-generator.mjs +49 -0
- package/esm2022/lib/services/qr/qr-generators/serializer-v2-generator.mjs +30 -0
- package/esm2022/lib/services/qr/qr-generators/serializer-v3-generator.mjs +45 -0
- package/esm2022/lib/services/qr/qr-generators/xpub-generator.mjs +38 -0
- package/esm2022/lib/services/qr/qr-handler/serializer-v2-handler.mjs +114 -0
- package/esm2022/lib/services/qr/qr-handler/serializer-v3-handler.mjs +274 -0
- package/esm2022/lib/services/qr-scanner/qr-scanner.service.mjs +61 -0
- package/esm2022/lib/services/serializer/serializer.service.mjs +181 -0
- package/esm2022/lib/services/storage/base.storage.mjs +30 -0
- package/esm2022/lib/services/storage/storage.service.mjs +33 -0
- package/esm2022/lib/services/token/token.service.mjs +52 -0
- package/esm2022/lib/services/transaction/transaction.service.mjs +67 -0
- package/esm2022/lib/services/ui-event/ui-event.service.mjs +198 -0
- package/esm2022/lib/services/ui-event-elements/ui-event-elements.service.mjs +122 -0
- package/esm2022/lib/services/uri/uri.service.mjs +51 -0
- package/esm2022/lib/translation/AirGapTranslateLoader.mjs +26 -0
- package/esm2022/lib/types/Either.mjs +2 -0
- package/esm2022/lib/types/ExternalAliasResolver.mjs +2 -0
- package/esm2022/lib/types/RuntimeMode.mjs +6 -0
- package/esm2022/lib/types/SupportedLanguage.mjs +2 -0
- package/esm2022/lib/types/Token.mjs +2 -0
- package/esm2022/lib/types/isolated-modules/IsolatedModule.mjs +2 -0
- package/esm2022/lib/types/isolated-modules/IsolatedModuleManifest.mjs +2 -0
- package/esm2022/lib/types/isolated-modules/IsolatedModuleMetadata.mjs +2 -0
- package/esm2022/lib/types/ui/UIAction.mjs +6 -0
- package/esm2022/lib/types/ui/UIResource.mjs +8 -0
- package/esm2022/lib/utils/ExposedPromise.mjs +103 -0
- package/esm2022/lib/utils/airgap-transaction.mjs +23 -0
- package/esm2022/lib/utils/array.mjs +32 -0
- package/esm2022/lib/utils/modules/isolated/isolated-modules-metadata.mjs +10 -0
- package/esm2022/lib/utils/modules/load-protocol.mjs +19 -0
- package/esm2022/lib/utils/not-initialized.mjs +7 -0
- package/esm2022/lib/utils/protocol/delegation.mjs +33 -0
- package/esm2022/lib/utils/protocol/protocol-identifier.mjs +4 -0
- package/esm2022/lib/utils/protocol/protocol-network-identifier.mjs +18 -0
- package/esm2022/lib/utils/protocol/protocol-options.mjs +114 -0
- package/esm2022/lib/utils/protocol/protocol-v0-adapter.mjs +390 -0
- package/esm2022/lib/utils/utils.mjs +80 -0
- package/esm2022/lib/utils/worker.mjs +28 -0
- package/esm2022/public-api.mjs +102 -0
- package/esm2022/wallfree-dev-angular-core.mjs +5 -0
- package/fesm2022/wallfree-dev-angular-core.mjs +6933 -0
- package/fesm2022/wallfree-dev-angular-core.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/airgap-angular-core.module.d.ts +25 -0
- package/lib/airgap-angular-core.module.d.ts.map +1 -0
- package/lib/base/base.component.d.ts +18 -0
- package/lib/base/base.component.d.ts.map +1 -0
- package/lib/base/base.facade.d.ts +16 -0
- package/lib/base/base.facade.d.ts.map +1 -0
- package/lib/capacitor-plugins/definitions.d.ts +122 -0
- package/lib/capacitor-plugins/definitions.d.ts.map +1 -0
- package/lib/capacitor-plugins/injection-tokens.d.ts +18 -0
- package/lib/capacitor-plugins/injection-tokens.d.ts.map +1 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts +20 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts.map +1 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts +38 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts.map +1 -0
- package/lib/components/account-item/account-item.component.d.ts +15 -0
- package/lib/components/account-item/account-item.component.d.ts.map +1 -0
- package/lib/components/account-selection/account-selection.component.d.ts +23 -0
- package/lib/components/account-selection/account-selection.component.d.ts.map +1 -0
- package/lib/components/components.module.d.ts +28 -0
- package/lib/components/components.module.d.ts.map +1 -0
- package/lib/components/currency-symbol/currency-symbol.component.d.ts +20 -0
- package/lib/components/currency-symbol/currency-symbol.component.d.ts.map +1 -0
- package/lib/components/currency-symbol/currency-symbol.facade.d.ts +16 -0
- package/lib/components/currency-symbol/currency-symbol.facade.d.ts.map +1 -0
- package/lib/components/currency-symbol/currency-symbol.types.d.ts +35 -0
- package/lib/components/currency-symbol/currency-symbol.types.d.ts.map +1 -0
- package/lib/components/from-to/from-to.component.d.ts +33 -0
- package/lib/components/from-to/from-to.component.d.ts.map +1 -0
- package/lib/components/iac-qr/iac-qr.component.d.ts +45 -0
- package/lib/components/iac-qr/iac-qr.component.d.ts.map +1 -0
- package/lib/components/identicon/identicon.component.d.ts +14 -0
- package/lib/components/identicon/identicon.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts +8 -0
- package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts +17 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts +17 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts.map +1 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts +20 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts +15 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
- package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts +6 -0
- package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts.map +1 -0
- package/lib/components/network-badge/network-badge.component.d.ts +9 -0
- package/lib/components/network-badge/network-badge.component.d.ts.map +1 -0
- package/lib/components/qr/qr.component.d.ts +16 -0
- package/lib/components/qr/qr.component.d.ts.map +1 -0
- package/lib/components/qr-settings/qr-settings.component.d.ts +12 -0
- package/lib/components/qr-settings/qr-settings.component.d.ts.map +1 -0
- package/lib/components/titled-address/titled-address.component.d.ts +13 -0
- package/lib/components/titled-address/titled-address.component.d.ts.map +1 -0
- package/lib/components/titled-text/titled-text.component.d.ts +11 -0
- package/lib/components/titled-text/titled-text.component.d.ts.map +1 -0
- package/lib/config/app-config.d.ts +15 -0
- package/lib/config/app-config.d.ts.map +1 -0
- package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts +16 -0
- package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
- package/lib/pipes/amount-converter/amount-converter.pipe.d.ts +29 -0
- package/lib/pipes/amount-converter/amount-converter.pipe.d.ts.map +1 -0
- package/lib/pipes/fee-converter/fee-converter.pipe.d.ts +20 -0
- package/lib/pipes/fee-converter/fee-converter.pipe.d.ts.map +1 -0
- package/lib/pipes/pipes.module.d.ts +10 -0
- package/lib/pipes/pipes.module.d.ts.map +1 -0
- package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts +15 -0
- package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts.map +1 -0
- package/lib/protocol/adapter/protocol-v0-adapter.d.ts +231 -0
- package/lib/protocol/adapter/protocol-v0-adapter.d.ts.map +1 -0
- package/lib/protocol/isolated/base-isolated.d.ts +11 -0
- package/lib/protocol/isolated/base-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/block-explorer-isolated.d.ts +14 -0
- package/lib/protocol/isolated/block-explorer-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/protocol-offline-isolated.d.ts +17 -0
- package/lib/protocol/isolated/protocol-offline-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/protocol-online-isolated.d.ts +21 -0
- package/lib/protocol/isolated/protocol-online-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts +17 -0
- package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts.map +1 -0
- package/lib/services/address/address.service.d.ts +26 -0
- package/lib/services/address/address.service.d.ts.map +1 -0
- package/lib/services/clipboard/clipboard.service.d.ts +14 -0
- package/lib/services/clipboard/clipboard.service.d.ts.map +1 -0
- package/lib/services/deeplink/deeplink.service.d.ts +18 -0
- package/lib/services/deeplink/deeplink.service.d.ts.map +1 -0
- package/lib/services/environment/base-environment.service.d.ts +6 -0
- package/lib/services/environment/base-environment.service.d.ts.map +1 -0
- package/lib/services/filesystem/filesystem.service.d.ts +42 -0
- package/lib/services/filesystem/filesystem.service.d.ts.map +1 -0
- package/lib/services/iac/base.iac.service.d.ts +41 -0
- package/lib/services/iac/base.iac.service.d.ts.map +1 -0
- package/lib/services/iac/message-handler-single.d.ts +20 -0
- package/lib/services/iac/message-handler-single.d.ts.map +1 -0
- package/lib/services/iac/message-handler.d.ts +34 -0
- package/lib/services/iac/message-handler.d.ts.map +1 -0
- package/lib/services/iac/qr-generator.d.ts +13 -0
- package/lib/services/iac/qr-generator.d.ts.map +1 -0
- package/lib/services/image/fetcher/image-direct.fetcher.d.ts +9 -0
- package/lib/services/image/fetcher/image-direct.fetcher.d.ts.map +1 -0
- package/lib/services/image/fetcher/image-proxy.fetcher.d.ts +9 -0
- package/lib/services/image/fetcher/image-proxy.fetcher.d.ts.map +1 -0
- package/lib/services/image/image.service.d.ts +20 -0
- package/lib/services/image/image.service.d.ts.map +1 -0
- package/lib/services/key-pair/key-pair.service.d.ts +14 -0
- package/lib/services/key-pair/key-pair.service.d.ts.map +1 -0
- package/lib/services/language/language.service.d.ts +21 -0
- package/lib/services/language/language.service.d.ts.map +1 -0
- package/lib/services/modules/base-modules.service.d.ts +34 -0
- package/lib/services/modules/base-modules.service.d.ts.map +1 -0
- package/lib/services/modules/controller/base-modules.controller.d.ts +19 -0
- package/lib/services/modules/controller/base-modules.controller.d.ts.map +1 -0
- package/lib/services/modules/controller/integral/integral-modules.controller.d.ts +22 -0
- package/lib/services/modules/controller/integral/integral-modules.controller.d.ts.map +1 -0
- package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts +32 -0
- package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts.map +1 -0
- package/lib/services/modules/controller/modules.controller.d.ts +27 -0
- package/lib/services/modules/controller/modules.controller.d.ts.map +1 -0
- package/lib/services/permissions/permissions.service.d.ts +39 -0
- package/lib/services/permissions/permissions.service.d.ts.map +1 -0
- package/lib/services/protocol/defaults.d.ts +6 -0
- package/lib/services/protocol/defaults.d.ts.map +1 -0
- package/lib/services/protocol/protocol.service.d.ts +47 -0
- package/lib/services/protocol/protocol.service.d.ts.map +1 -0
- package/lib/services/protocol/store/base-protocol-store.service.d.ts +36 -0
- package/lib/services/protocol/store/base-protocol-store.service.d.ts.map +1 -0
- package/lib/services/protocol/store/main/main-protocol-store.service.d.ts +21 -0
- package/lib/services/protocol/store/main/main-protocol-store.service.d.ts.map +1 -0
- package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts +31 -0
- package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/bc-ur-generator.d.ts +16 -0
- package/lib/services/qr/qr-generators/bc-ur-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/metamask-generator.d.ts +16 -0
- package/lib/services/qr/qr-generators/metamask-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts +13 -0
- package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts +13 -0
- package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts +12 -0
- package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/xpub-generator.d.ts +12 -0
- package/lib/services/qr/qr-generators/xpub-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts +20 -0
- package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts.map +1 -0
- package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts +23 -0
- package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts.map +1 -0
- package/lib/services/qr-scanner/qr-scanner.service.d.ts +23 -0
- package/lib/services/qr-scanner/qr-scanner.service.d.ts.map +1 -0
- package/lib/services/serializer/serializer.service.d.ts +34 -0
- package/lib/services/serializer/serializer.service.d.ts.map +1 -0
- package/lib/services/storage/base.storage.d.ts +15 -0
- package/lib/services/storage/base.storage.d.ts.map +1 -0
- package/lib/services/storage/storage.service.d.ts +28 -0
- package/lib/services/storage/storage.service.d.ts.map +1 -0
- package/lib/services/token/token.service.d.ts +11 -0
- package/lib/services/token/token.service.d.ts.map +1 -0
- package/lib/services/transaction/transaction.service.d.ts +21 -0
- package/lib/services/transaction/transaction.service.d.ts.map +1 -0
- package/lib/services/ui-event/ui-event.service.d.ts +58 -0
- package/lib/services/ui-event/ui-event.service.d.ts.map +1 -0
- package/lib/services/ui-event-elements/ui-event-elements.service.d.ts +16 -0
- package/lib/services/ui-event-elements/ui-event-elements.service.d.ts.map +1 -0
- package/lib/services/uri/uri.service.d.ts +15 -0
- package/lib/services/uri/uri.service.d.ts.map +1 -0
- package/lib/translation/AirGapTranslateLoader.d.ts +15 -0
- package/lib/translation/AirGapTranslateLoader.d.ts.map +1 -0
- package/lib/types/Either.d.ts +2 -0
- package/lib/types/Either.d.ts.map +1 -0
- package/lib/types/ExternalAliasResolver.d.ts +6 -0
- package/lib/types/ExternalAliasResolver.d.ts.map +1 -0
- package/lib/types/RuntimeMode.d.ts +5 -0
- package/lib/types/RuntimeMode.d.ts.map +1 -0
- package/lib/types/SupportedLanguage.d.ts +2 -0
- package/lib/types/SupportedLanguage.d.ts.map +1 -0
- package/lib/types/Token.d.ts +9 -0
- package/lib/types/Token.d.ts.map +1 -0
- package/lib/types/isolated-modules/IsolatedModule.d.ts +28 -0
- package/lib/types/isolated-modules/IsolatedModule.d.ts.map +1 -0
- package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts +24 -0
- package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts.map +1 -0
- package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts +21 -0
- package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts.map +1 -0
- package/lib/types/ui/UIAction.d.ts +10 -0
- package/lib/types/ui/UIAction.d.ts.map +1 -0
- package/lib/types/ui/UIResource.d.ts +11 -0
- package/lib/types/ui/UIResource.d.ts.map +1 -0
- package/lib/utils/ExposedPromise.d.ts +40 -0
- package/lib/utils/ExposedPromise.d.ts.map +1 -0
- package/lib/utils/airgap-transaction.d.ts +4 -0
- package/lib/utils/airgap-transaction.d.ts.map +1 -0
- package/lib/utils/array.d.ts +6 -0
- package/lib/utils/array.d.ts.map +1 -0
- package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts +3 -0
- package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts.map +1 -0
- package/lib/utils/modules/load-protocol.d.ts +4 -0
- package/lib/utils/modules/load-protocol.d.ts.map +1 -0
- package/lib/utils/not-initialized.d.ts +2 -0
- package/lib/utils/not-initialized.d.ts.map +1 -0
- package/lib/utils/protocol/delegation.d.ts +6 -0
- package/lib/utils/protocol/delegation.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-identifier.d.ts +3 -0
- package/lib/utils/protocol/protocol-identifier.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-network-identifier.d.ts +8 -0
- package/lib/utils/protocol/protocol-network-identifier.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-options.d.ts +6 -0
- package/lib/utils/protocol/protocol-options.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-v0-adapter.d.ts +75 -0
- package/lib/utils/protocol/protocol-v0-adapter.d.ts.map +1 -0
- package/lib/utils/utils.d.ts +9 -0
- package/lib/utils/utils.d.ts.map +1 -0
- package/lib/utils/worker.d.ts +11 -0
- package/lib/utils/worker.d.ts.map +1 -0
- package/package.json +88 -0
- package/public-api.d.ts +87 -0
- package/public-api.d.ts.map +1 -0
- package/src/assets/i18n-common/de.json +112 -0
- package/src/assets/i18n-common/en.json +112 -0
- package/src/assets/i18n-common/es.json +112 -0
- package/src/assets/i18n-common/fr.json +112 -0
- package/src/assets/i18n-common/pt_BR.json +112 -0
- package/src/assets/i18n-common/ru.json +112 -0
- package/src/assets/i18n-common/zh_CN.json +112 -0
- package/src/assets/img/identicon_placeholder.png +0 -0
- package/src/assets/native/isolated_modules/isolated-modules.js-engine-android.js +34 -0
- package/src/assets/native/isolated_modules/isolated-modules.script.js +304 -0
- package/src/assets/symbols/abt.svg +1 -0
- package/src/assets/symbols/adx.svg +1 -0
- package/src/assets/symbols/ae.svg +17 -0
- package/src/assets/symbols/agi.svg +1 -0
- package/src/assets/symbols/aion.svg +1 -0
- package/src/assets/symbols/amb.svg +1 -0
- package/src/assets/symbols/ampl.svg +7 -0
- package/src/assets/symbols/ant.svg +1 -0
- package/src/assets/symbols/aoa.svg +7 -0
- package/src/assets/symbols/appc.svg +1 -0
- package/src/assets/symbols/aqua.svg +5 -0
- package/src/assets/symbols/arn.svg +1 -0
- package/src/assets/symbols/ary.svg +1 -0
- package/src/assets/symbols/ast.svg +1 -0
- package/src/assets/symbols/astr.png +0 -0
- package/src/assets/symbols/atm.svg +1 -0
- package/src/assets/symbols/atom.svg +1 -0
- package/src/assets/symbols/auto.svg +1 -0
- package/src/assets/symbols/bal.svg +7 -0
- package/src/assets/symbols/band.svg +7 -0
- package/src/assets/symbols/bat.svg +1 -0
- package/src/assets/symbols/bcbc.svg +1 -0
- package/src/assets/symbols/bcpt.svg +1 -0
- package/src/assets/symbols/bix.svg +1 -0
- package/src/assets/symbols/blz.svg +1 -0
- package/src/assets/symbols/bnb.svg +1 -0
- package/src/assets/symbols/bnt.svg +1 -0
- package/src/assets/symbols/bnty.svg +1 -0
- package/src/assets/symbols/bpt.svg +1 -0
- package/src/assets/symbols/brc.svg +7 -0
- package/src/assets/symbols/brd.svg +1 -0
- package/src/assets/symbols/btc.svg +1 -0
- package/src/assets/symbols/btctz.png +0 -0
- package/src/assets/symbols/btm.svg +1 -0
- package/src/assets/symbols/busd.svg +7 -0
- package/src/assets/symbols/bytom.svg +7 -0
- package/src/assets/symbols/cacu.svg +1 -0
- package/src/assets/symbols/cdt.svg +1 -0
- package/src/assets/symbols/cel.svg +7 -0
- package/src/assets/symbols/cennz.svg +7 -0
- package/src/assets/symbols/cfx.svg +1 -0
- package/src/assets/symbols/chsb.svg +7 -0
- package/src/assets/symbols/chz.svg +7 -0
- package/src/assets/symbols/ckbtc.png +0 -0
- package/src/assets/symbols/cmt.svg +1 -0
- package/src/assets/symbols/cnd.svg +1 -0
- package/src/assets/symbols/cob.svg +1 -0
- package/src/assets/symbols/comp.svg +7 -0
- package/src/assets/symbols/coreum.png +0 -0
- package/src/assets/symbols/cred.svg +1 -0
- package/src/assets/symbols/cro.svg +7 -0
- package/src/assets/symbols/crpt.svg +1 -0
- package/src/assets/symbols/crv.svg +7 -0
- package/src/assets/symbols/cs.svg +1 -0
- package/src/assets/symbols/ctez.svg +1 -0
- package/src/assets/symbols/ctr.svg +1 -0
- package/src/assets/symbols/ctxc.svg +1 -0
- package/src/assets/symbols/cusdc.svg +7 -0
- package/src/assets/symbols/cvc.svg +1 -0
- package/src/assets/symbols/cvt.svg +7 -0
- package/src/assets/symbols/czrx.svg +7 -0
- package/src/assets/symbols/dai.svg +7 -0
- package/src/assets/symbols/dat.svg +1 -0
- package/src/assets/symbols/data.svg +1 -0
- package/src/assets/symbols/dcn.svg +1 -0
- package/src/assets/symbols/deez.svg +1 -0
- package/src/assets/symbols/dent.svg +1 -0
- package/src/assets/symbols/dew.svg +1 -0
- package/src/assets/symbols/dgd.svg +1 -0
- package/src/assets/symbols/dia.svg +7 -0
- package/src/assets/symbols/divx.svg +7 -0
- package/src/assets/symbols/dlt.svg +1 -0
- package/src/assets/symbols/dnt.svg +1 -0
- package/src/assets/symbols/dock.svg +1 -0
- package/src/assets/symbols/doga.png +0 -0
- package/src/assets/symbols/dot.svg +14 -0
- package/src/assets/symbols/drgn.svg +1 -0
- package/src/assets/symbols/drop.svg +1 -0
- package/src/assets/symbols/dth.svg +1 -0
- package/src/assets/symbols/dtr.svg +1 -0
- package/src/assets/symbols/dx.svg +7 -0
- package/src/assets/symbols/edg.svg +1 -0
- package/src/assets/symbols/edo.svg +1 -0
- package/src/assets/symbols/elf.svg +1 -0
- package/src/assets/symbols/elix.svg +1 -0
- package/src/assets/symbols/eng.svg +1 -0
- package/src/assets/symbols/enj.svg +1 -0
- package/src/assets/symbols/entrp.svg +1 -0
- package/src/assets/symbols/eos.svg +1 -0
- package/src/assets/symbols/eth.svg +1 -0
- package/src/assets/symbols/ethtz.png +0 -0
- package/src/assets/symbols/eurc.svg +8 -0
- package/src/assets/symbols/evx.svg +1 -0
- package/src/assets/symbols/fet.svg +7 -0
- package/src/assets/symbols/frax.svg +26 -0
- package/src/assets/symbols/fsn.svg +1 -0
- package/src/assets/symbols/ftc.svg +1 -0
- package/src/assets/symbols/ftm.svg +7 -0
- package/src/assets/symbols/fuel.svg +1 -0
- package/src/assets/symbols/fun.svg +1 -0
- package/src/assets/symbols/gbx.svg +1 -0
- package/src/assets/symbols/generic-coin.svg +1 -0
- package/src/assets/symbols/glmr.svg +1 -0
- package/src/assets/symbols/gno.svg +1 -0
- package/src/assets/symbols/gnt.svg +1 -0
- package/src/assets/symbols/grs.svg +1 -0
- package/src/assets/symbols/gsc.svg +1 -0
- package/src/assets/symbols/gto.svg +1 -0
- package/src/assets/symbols/gup.svg +1 -0
- package/src/assets/symbols/gusd.svg +1 -0
- package/src/assets/symbols/gvt.svg +1 -0
- package/src/assets/symbols/gzr.svg +1 -0
- package/src/assets/symbols/hedg.svg +7 -0
- package/src/assets/symbols/hodl.svg +1 -0
- package/src/assets/symbols/hot.svg +7 -0
- package/src/assets/symbols/hpb.svg +1 -0
- package/src/assets/symbols/ht.svg +1 -0
- package/src/assets/symbols/husd.svg +7 -0
- package/src/assets/symbols/icn.svg +1 -0
- package/src/assets/symbols/icp.svg +16 -0
- package/src/assets/symbols/icx.svg +1 -0
- package/src/assets/symbols/inb.svg +7 -0
- package/src/assets/symbols/ino.svg +7 -0
- package/src/assets/symbols/ins.svg +1 -0
- package/src/assets/symbols/iost.svg +1 -0
- package/src/assets/symbols/iotx.svg +1 -0
- package/src/assets/symbols/itc.svg +1 -0
- package/src/assets/symbols/jnt.svg +1 -0
- package/src/assets/symbols/kcs.svg +7 -0
- package/src/assets/symbols/kin.svg +1 -0
- package/src/assets/symbols/knc.svg +1 -0
- package/src/assets/symbols/ksm.svg +1 -0
- package/src/assets/symbols/kusd.svg +1 -0
- package/src/assets/symbols/ldo.svg +97 -0
- package/src/assets/symbols/lend.svg +1 -0
- package/src/assets/symbols/leo.svg +7 -0
- package/src/assets/symbols/link.svg +7 -0
- package/src/assets/symbols/loom.svg +1 -0
- package/src/assets/symbols/lpt.svg +1 -0
- package/src/assets/symbols/lrc.svg +1 -0
- package/src/assets/symbols/lun.svg +1 -0
- package/src/assets/symbols/mana.svg +1 -0
- package/src/assets/symbols/matic.svg +7 -0
- package/src/assets/symbols/mcap.svg +1 -0
- package/src/assets/symbols/mco.svg +1 -0
- package/src/assets/symbols/mda.svg +1 -0
- package/src/assets/symbols/mds.svg +1 -0
- package/src/assets/symbols/mkr.svg +1 -0
- package/src/assets/symbols/mln.svg +7 -0
- package/src/assets/symbols/mnw.svg +1 -0
- package/src/assets/symbols/mod.svg +1 -0
- package/src/assets/symbols/movr.svg +10 -0
- package/src/assets/symbols/mth.svg +1 -0
- package/src/assets/symbols/mtl.svg +1 -0
- package/src/assets/symbols/mxc.svg +7 -0
- package/src/assets/symbols/nas.svg +1 -0
- package/src/assets/symbols/ncash.svg +1 -0
- package/src/assets/symbols/neu.svg +1 -0
- package/src/assets/symbols/nexo.svg +1 -0
- package/src/assets/symbols/ngc.svg +1 -0
- package/src/assets/symbols/nio.svg +1 -0
- package/src/assets/symbols/nmr.svg +7 -0
- package/src/assets/symbols/noah.svg +7 -0
- package/src/assets/symbols/npxs.svg +1 -0
- package/src/assets/symbols/nuls.svg +1 -0
- package/src/assets/symbols/nxm.svg +7 -0
- package/src/assets/symbols/oax.svg +1 -0
- package/src/assets/symbols/ocean.svg +7 -0
- package/src/assets/symbols/okb.svg +7 -0
- package/src/assets/symbols/omg.svg +1 -0
- package/src/assets/symbols/ong.svg +1 -0
- package/src/assets/symbols/op.svg +21 -0
- package/src/assets/symbols/ost.svg +1 -0
- package/src/assets/symbols/pax.svg +1 -0
- package/src/assets/symbols/paxg.svg +7 -0
- package/src/assets/symbols/pay.svg +1 -0
- package/src/assets/symbols/plenty.svg +1 -0
- package/src/assets/symbols/plr.svg +1 -0
- package/src/assets/symbols/pnk.svg +7 -0
- package/src/assets/symbols/poe.svg +1 -0
- package/src/assets/symbols/poly.svg +1 -0
- package/src/assets/symbols/powr.svg +1 -0
- package/src/assets/symbols/ppp.svg +1 -0
- package/src/assets/symbols/ppt.svg +1 -0
- package/src/assets/symbols/prl.svg +1 -0
- package/src/assets/symbols/qash.svg +1 -0
- package/src/assets/symbols/qnt.svg +7 -0
- package/src/assets/symbols/qrl.svg +1 -0
- package/src/assets/symbols/qsp.svg +1 -0
- package/src/assets/symbols/qtum.svg +1 -0
- package/src/assets/symbols/quipu.png +0 -0
- package/src/assets/symbols/r.svg +1 -0
- package/src/assets/symbols/rcn.svg +1 -0
- package/src/assets/symbols/rdn.svg +1 -0
- package/src/assets/symbols/ren.svg +7 -0
- package/src/assets/symbols/rep.svg +1 -0
- package/src/assets/symbols/repv2.svg +7 -0
- package/src/assets/symbols/req.svg +1 -0
- package/src/assets/symbols/rev.svg +7 -0
- package/src/assets/symbols/rhoc.svg +1 -0
- package/src/assets/symbols/rlc.svg +1 -0
- package/src/assets/symbols/rsr.svg +7 -0
- package/src/assets/symbols/sai.svg +7 -0
- package/src/assets/symbols/salt.svg +1 -0
- package/src/assets/symbols/san.svg +1 -0
- package/src/assets/symbols/sdn.svg +1 -0
- package/src/assets/symbols/shx.svg +32 -0
- package/src/assets/symbols/sirs.svg +1 -0
- package/src/assets/symbols/smart.svg +1 -0
- package/src/assets/symbols/sngls.svg +1 -0
- package/src/assets/symbols/snm.svg +1 -0
- package/src/assets/symbols/snt.svg +1 -0
- package/src/assets/symbols/snx.svg +7 -0
- package/src/assets/symbols/soc.svg +1 -0
- package/src/assets/symbols/sol.svg +1 -0
- package/src/assets/symbols/spank.svg +1 -0
- package/src/assets/symbols/sphtx.svg +1 -0
- package/src/assets/symbols/srm.svg +7 -0
- package/src/assets/symbols/srn.svg +1 -0
- package/src/assets/symbols/stake.svg +7 -0
- package/src/assets/symbols/stellar.png +0 -0
- package/src/assets/symbols/storj.svg +1 -0
- package/src/assets/symbols/storm.svg +1 -0
- package/src/assets/symbols/stq.svg +1 -0
- package/src/assets/symbols/stxtz.svg +18 -0
- package/src/assets/symbols/sub.svg +1 -0
- package/src/assets/symbols/sushi.svg +7 -0
- package/src/assets/symbols/sxp.svg +7 -0
- package/src/assets/symbols/sxtz.svg +6 -0
- package/src/assets/symbols/taas.svg +1 -0
- package/src/assets/symbols/tau.svg +1 -0
- package/src/assets/symbols/tbx.svg +1 -0
- package/src/assets/symbols/tel.svg +1 -0
- package/src/assets/symbols/ten.svg +1 -0
- package/src/assets/symbols/theta.svg +1 -0
- package/src/assets/symbols/tix.svg +1 -0
- package/src/assets/symbols/tkn.svg +1 -0
- package/src/assets/symbols/tnt.svg +1 -0
- package/src/assets/symbols/tomo.svg +1 -0
- package/src/assets/symbols/trac.svg +7 -0
- package/src/assets/symbols/trb.svg +7 -0
- package/src/assets/symbols/trx.svg +1 -0
- package/src/assets/symbols/tusd.svg +1 -0
- package/src/assets/symbols/tzbtc.svg +1 -0
- package/src/assets/symbols/ubt.svg +7 -0
- package/src/assets/symbols/ubtc.svg +1 -0
- package/src/assets/symbols/udefi.svg +1 -0
- package/src/assets/symbols/uma.svg +7 -0
- package/src/assets/symbols/usdc.svg +1 -0
- package/src/assets/symbols/usdt.png +0 -0
- package/src/assets/symbols/usdt.svg +1 -0
- package/src/assets/symbols/usdtz.svg +17 -0
- package/src/assets/symbols/ust.svg +1 -0
- package/src/assets/symbols/utk.svg +1 -0
- package/src/assets/symbols/uusd.svg +1 -0
- package/src/assets/symbols/uxtz.svg +1 -0
- package/src/assets/symbols/velo.svg +5 -0
- package/src/assets/symbols/ven.svg +7 -0
- package/src/assets/symbols/veri.svg +1 -0
- package/src/assets/symbols/verse.svg +1 -0
- package/src/assets/symbols/vest.svg +7 -0
- package/src/assets/symbols/vib.svg +1 -0
- package/src/assets/symbols/vibe.svg +1 -0
- package/src/assets/symbols/wabi.svg +1 -0
- package/src/assets/symbols/wax.svg +1 -0
- package/src/assets/symbols/wbtc.svg +7 -0
- package/src/assets/symbols/weth.svg +18 -0
- package/src/assets/symbols/wic.svg +7 -0
- package/src/assets/symbols/wings.svg +1 -0
- package/src/assets/symbols/wnxm.svg +7 -0
- package/src/assets/symbols/wpr.svg +1 -0
- package/src/assets/symbols/wrap.png +0 -0
- package/src/assets/symbols/wtc.svg +1 -0
- package/src/assets/symbols/wusdc.png +0 -0
- package/src/assets/symbols/xchf.svg +1 -0
- package/src/assets/symbols/xdce.svg +7 -0
- package/src/assets/symbols/xin.svg +7 -0
- package/src/assets/symbols/xpa.svg +1 -0
- package/src/assets/symbols/xpl.svg +1 -0
- package/src/assets/symbols/xtz.svg +5 -0
- package/src/assets/symbols/yfi.svg +7 -0
- package/src/assets/symbols/you.svg +1 -0
- package/src/assets/symbols/yoyow.svg +1 -0
- package/src/assets/symbols/ytez.svg +1 -0
- package/src/assets/symbols/zb.svg +7 -0
- package/src/assets/symbols/zil.svg +1 -0
- package/src/assets/symbols/zrx.svg +1 -0
- package/src/assets/workers/airgap-coin-lib.js +119 -0
- package/wallfree-dev-angular-core.d.ts.map +1 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
import { AeternityModule, createAeternityProtocol } from '@wallfree-dev/aeternity';
|
|
3
|
+
import { AstarModule, createAstarProtocol, createShidenProtocol } from '@wallfree-dev/astar';
|
|
4
|
+
import { ProtocolNetwork as ProtocolNetworkV0, NetworkType as ProtocolNetworkTypeV0 } from '@wallfree-dev/coinlib-core';
|
|
5
|
+
import { createERC20Token as createEthereumERC20Token, createEthereumProtocol, EthereumModule } from '@wallfree-dev/ethereum';
|
|
6
|
+
import { isOnlineProtocol, newAmount } from '@wallfree-dev/module-kit';
|
|
7
|
+
import { BitcoinModule, createBitcoinProtocol, createBitcoinSegwitProtocol } from '@wallfree-dev/bitcoin';
|
|
8
|
+
import { CoreumModule, createCoreumProtocol } from '@wallfree-dev/coreum';
|
|
9
|
+
import { CosmosModule, createCosmosProtocol } from '@wallfree-dev/cosmos';
|
|
10
|
+
import { createGroestlcoinProtocol, GroestlcoinModule } from '@wallfree-dev/groestlcoin';
|
|
11
|
+
import { createICPProtocol, ICPModule } from '@wallfree-dev/icp';
|
|
12
|
+
import { createMoonbaseProtocol, createMoonbeamProtocol, createMoonriverProtocol, MoonbeamModule } from '@wallfree-dev/moonbeam';
|
|
13
|
+
import { createERC20Token as createOptimismERC20Token, createOptimismProtocol, OptimismModule } from '@wallfree-dev/optimism';
|
|
14
|
+
import { createKusamaProtocol, createPolkadotProtocol, PolkadotModule } from '@wallfree-dev/polkadot';
|
|
15
|
+
import { createSolanaProtocol, SolanaModule } from '@wallfree-dev/solana';
|
|
16
|
+
import { createBTCTezProtocol, createCTezProtocol, createDogamiProtocol, createETHTezProtocol, createKolibriUSDProtocol, createPlentyProtocol, createQuipuswapProtocol, createSiriusProtocol, createStakerProtocol, createTetherUSDProtocol, createTezosFA1p2Protocol, createTezosFA2Protocol, createTezosKtProtocol, createTezosProtocol, createTezosShieldedTezProtocol, createTzBTCProtocol, createUBTCProtocol, createUDEFIProtocol, createUSDTezProtocol, createUUSDProtocol, createWrappedTezosProtocol, createWrapProtocol, createYouProtocol, TezosModule } from '@wallfree-dev/tezos';
|
|
17
|
+
import BigNumber from '@wallfree-dev/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber';
|
|
18
|
+
import { AirGapTransactionStatus as AirGapTransactionStatusV0, AirGapTransactionWarningType } from '@wallfree-dev/coinlib-core/interfaces/IAirGapTransaction';
|
|
19
|
+
import { isHex } from '@wallfree-dev/coinlib-core/utils/hex';
|
|
20
|
+
import { createICoinProtocolAdapter, createICoinSubProtocolAdapter, ProtocolBlockExplorerAdapter, ProtocolNetworkAdapter } from '../../protocol/adapter/protocol-v0-adapter';
|
|
21
|
+
// Network
|
|
22
|
+
export function convertNetworkTypeV0ToV1(type) {
|
|
23
|
+
return type === ProtocolNetworkTypeV0.MAINNET ? 'mainnet' : type === ProtocolNetworkTypeV0.TESTNET ? 'testnet' : 'custom';
|
|
24
|
+
}
|
|
25
|
+
export function convertNetworkTypeV1ToV0(type) {
|
|
26
|
+
return type === 'mainnet'
|
|
27
|
+
? ProtocolNetworkTypeV0.MAINNET
|
|
28
|
+
: type === 'testnet'
|
|
29
|
+
? ProtocolNetworkTypeV0.TESTNET
|
|
30
|
+
: ProtocolNetworkTypeV0.CUSTOM;
|
|
31
|
+
}
|
|
32
|
+
export function convertNetworkV0ToV1(network) {
|
|
33
|
+
return {
|
|
34
|
+
name: network.name,
|
|
35
|
+
type: convertNetworkTypeV0ToV1(network.type),
|
|
36
|
+
rpcUrl: network.rpcUrl,
|
|
37
|
+
blockExplorerUrl: network.blockExplorer.blockExplorer,
|
|
38
|
+
...(typeof network.extras === 'object' ? network.extras : {})
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function convertNetworkV1ToV0(network, blockExplorer) {
|
|
42
|
+
const { name, type, rpcUrl, ...rest } = network;
|
|
43
|
+
const blockExplorerV0 = new ProtocolBlockExplorerAdapter(blockExplorer, network.blockExplorerUrl);
|
|
44
|
+
return new ProtocolNetworkAdapter(name, convertNetworkTypeV1ToV0(type), rpcUrl, blockExplorerV0, rest);
|
|
45
|
+
}
|
|
46
|
+
// Protocol
|
|
47
|
+
async function createAdapterSupplementsFromIdentifierAndNetwork(module, identifier, network) {
|
|
48
|
+
const [blockExplorer, v3SerializerCompanion] = await Promise.all([
|
|
49
|
+
module.createBlockExplorer(identifier, network),
|
|
50
|
+
module.createV3SerializerCompanion()
|
|
51
|
+
]);
|
|
52
|
+
return [blockExplorer, v3SerializerCompanion];
|
|
53
|
+
}
|
|
54
|
+
async function createAdapterSupplementsFromProtocol(protocol, module) {
|
|
55
|
+
const [metadata, network] = await Promise.all([
|
|
56
|
+
protocol.getMetadata(),
|
|
57
|
+
isOnlineProtocol(protocol) ? protocol.getNetwork() : Promise.resolve(undefined)
|
|
58
|
+
]);
|
|
59
|
+
return createAdapterSupplementsFromIdentifierAndNetwork(module, metadata.identifier, network);
|
|
60
|
+
}
|
|
61
|
+
export async function createV0Protocol(protocol, module, type = 'full') {
|
|
62
|
+
const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromProtocol(protocol, module);
|
|
63
|
+
return createICoinProtocolAdapter(protocol, blockExplorer, v3SerializerCompanion, { type });
|
|
64
|
+
}
|
|
65
|
+
export async function createV0SubProtocol(protocol, module, type = 'full') {
|
|
66
|
+
const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromProtocol(protocol, module);
|
|
67
|
+
return createICoinSubProtocolAdapter(protocol, blockExplorer, v3SerializerCompanion, { type });
|
|
68
|
+
}
|
|
69
|
+
export async function createV0ERC20Token(erc20Token, protocol, module, type = 'full') {
|
|
70
|
+
const [metadata, network] = await Promise.all([
|
|
71
|
+
protocol.getMetadata(),
|
|
72
|
+
isOnlineProtocol(erc20Token) ? erc20Token.getNetwork() : Promise.resolve(undefined)
|
|
73
|
+
]);
|
|
74
|
+
const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromIdentifierAndNetwork(module, metadata.identifier, network);
|
|
75
|
+
return createICoinSubProtocolAdapter(erc20Token, blockExplorer, v3SerializerCompanion, { type });
|
|
76
|
+
}
|
|
77
|
+
export async function createV0AeternityProtocol(...args) {
|
|
78
|
+
const protocol = createAeternityProtocol(...args);
|
|
79
|
+
const module = new AeternityModule();
|
|
80
|
+
return createV0Protocol(protocol, module);
|
|
81
|
+
}
|
|
82
|
+
export async function createV0AstarProtocol(...args) {
|
|
83
|
+
const protocol = createAstarProtocol(...args);
|
|
84
|
+
const module = new AstarModule();
|
|
85
|
+
return createV0Protocol(protocol, module);
|
|
86
|
+
}
|
|
87
|
+
export async function createV0ShidenProtocol(...args) {
|
|
88
|
+
const protocol = createShidenProtocol(...args);
|
|
89
|
+
const module = new AstarModule();
|
|
90
|
+
return createV0Protocol(protocol, module);
|
|
91
|
+
}
|
|
92
|
+
export async function createV0BitcoinProtocol(...args) {
|
|
93
|
+
const protocol = createBitcoinProtocol(...args);
|
|
94
|
+
const module = new BitcoinModule();
|
|
95
|
+
return createV0Protocol(protocol, module);
|
|
96
|
+
}
|
|
97
|
+
export async function createV0BitcoinSegwitProtocol(...args) {
|
|
98
|
+
const protocol = createBitcoinSegwitProtocol(...args);
|
|
99
|
+
const module = new BitcoinModule();
|
|
100
|
+
return createV0Protocol(protocol, module);
|
|
101
|
+
}
|
|
102
|
+
export async function createV0CoreumProtocol(...args) {
|
|
103
|
+
const protocol = createCoreumProtocol(...args);
|
|
104
|
+
const module = new CoreumModule();
|
|
105
|
+
return createV0Protocol(protocol, module);
|
|
106
|
+
}
|
|
107
|
+
export async function createV0CosmosProtocol(...args) {
|
|
108
|
+
const protocol = createCosmosProtocol(...args);
|
|
109
|
+
const module = new CosmosModule();
|
|
110
|
+
return createV0Protocol(protocol, module);
|
|
111
|
+
}
|
|
112
|
+
export async function createV0EthereumProtocol(...args) {
|
|
113
|
+
const protocol = createEthereumProtocol(...args);
|
|
114
|
+
const module = new EthereumModule();
|
|
115
|
+
return createV0Protocol(protocol, module);
|
|
116
|
+
}
|
|
117
|
+
export async function createV0EthereumERC20Token(...args) {
|
|
118
|
+
const erc20Token = createEthereumERC20Token(...args);
|
|
119
|
+
const ethereumProtocol = createEthereumProtocol(args[1]);
|
|
120
|
+
const module = new EthereumModule();
|
|
121
|
+
return createV0ERC20Token(erc20Token, ethereumProtocol, module);
|
|
122
|
+
}
|
|
123
|
+
export async function createV0GroestlcoinProtocol(...args) {
|
|
124
|
+
const protocol = createGroestlcoinProtocol(...args);
|
|
125
|
+
const module = new GroestlcoinModule();
|
|
126
|
+
return createV0Protocol(protocol, module);
|
|
127
|
+
}
|
|
128
|
+
export async function createV0ICPProtocol(...args) {
|
|
129
|
+
const protocol = createICPProtocol(...args);
|
|
130
|
+
const module = new ICPModule();
|
|
131
|
+
return createV0Protocol(protocol, module);
|
|
132
|
+
}
|
|
133
|
+
export async function createV0MoonbeamProtocol(...args) {
|
|
134
|
+
const protocol = createMoonbeamProtocol(...args);
|
|
135
|
+
const module = new MoonbeamModule();
|
|
136
|
+
return createV0Protocol(protocol, module);
|
|
137
|
+
}
|
|
138
|
+
export async function createV0MoonriverProtocol(...args) {
|
|
139
|
+
const protocol = createMoonriverProtocol(...args);
|
|
140
|
+
const module = new MoonbeamModule();
|
|
141
|
+
return createV0Protocol(protocol, module);
|
|
142
|
+
}
|
|
143
|
+
export async function createV0MoonbaseProtocol(...args) {
|
|
144
|
+
const protocol = createMoonbaseProtocol(...args);
|
|
145
|
+
const module = new MoonbeamModule();
|
|
146
|
+
return createV0Protocol(protocol, module);
|
|
147
|
+
}
|
|
148
|
+
export async function createV0OptimismProtocol(...args) {
|
|
149
|
+
const protocol = createOptimismProtocol(...args);
|
|
150
|
+
const module = new OptimismModule();
|
|
151
|
+
return createV0Protocol(protocol, module);
|
|
152
|
+
}
|
|
153
|
+
export async function createV0OptimismERC20Token(...args) {
|
|
154
|
+
const erc20Token = createOptimismERC20Token(...args);
|
|
155
|
+
const optimismProtocol = createOptimismProtocol(args[1]);
|
|
156
|
+
const module = new OptimismModule();
|
|
157
|
+
return createV0ERC20Token(erc20Token, optimismProtocol, module);
|
|
158
|
+
}
|
|
159
|
+
export async function createV0PolkadotProtocol(...args) {
|
|
160
|
+
const protocol = createPolkadotProtocol(...args);
|
|
161
|
+
const module = new PolkadotModule();
|
|
162
|
+
return createV0Protocol(protocol, module);
|
|
163
|
+
}
|
|
164
|
+
export async function createV0KusamaProtocol(...args) {
|
|
165
|
+
const protocol = createKusamaProtocol(...args);
|
|
166
|
+
const module = new PolkadotModule();
|
|
167
|
+
return createV0Protocol(protocol, module);
|
|
168
|
+
}
|
|
169
|
+
export async function createV0SolanaProtocol(...args) {
|
|
170
|
+
const protocol = createSolanaProtocol(...args);
|
|
171
|
+
const module = new SolanaModule();
|
|
172
|
+
return createV0Protocol(protocol, module);
|
|
173
|
+
}
|
|
174
|
+
export async function createV0TezosProtocol(...args) {
|
|
175
|
+
const protocol = createTezosProtocol(...args);
|
|
176
|
+
const module = new TezosModule();
|
|
177
|
+
return createV0Protocol(protocol, module);
|
|
178
|
+
}
|
|
179
|
+
export async function createV0TezosShieldedTezProtocol(...args) {
|
|
180
|
+
const protocol = createTezosShieldedTezProtocol(...args);
|
|
181
|
+
const module = new TezosModule();
|
|
182
|
+
return createV0Protocol(protocol, module);
|
|
183
|
+
}
|
|
184
|
+
export async function createV0TezosKtProtocol(...args) {
|
|
185
|
+
const protocol = createTezosKtProtocol(...args);
|
|
186
|
+
const module = new TezosModule();
|
|
187
|
+
return createV0SubProtocol(protocol, module);
|
|
188
|
+
}
|
|
189
|
+
async function createV0TezosFAProtocol(faProtocol, tezosNetwork, type = 'full') {
|
|
190
|
+
const tezosProtocol = createTezosProtocol({ network: tezosNetwork });
|
|
191
|
+
const module = new TezosModule();
|
|
192
|
+
const [metadata, network] = await Promise.all([
|
|
193
|
+
tezosProtocol.getMetadata(),
|
|
194
|
+
isOnlineProtocol(faProtocol) ? faProtocol.getNetwork() : Promise.resolve(undefined)
|
|
195
|
+
]);
|
|
196
|
+
const [blockExplorer, v3SerializerCompanion] = await createAdapterSupplementsFromIdentifierAndNetwork(module, metadata.identifier, network);
|
|
197
|
+
return createICoinSubProtocolAdapter(faProtocol, blockExplorer, v3SerializerCompanion, { type });
|
|
198
|
+
}
|
|
199
|
+
export async function createV0TezosFA1p2Protocol(...args) {
|
|
200
|
+
const fa1p2Protocol = createTezosFA1p2Protocol(...args);
|
|
201
|
+
return createV0TezosFAProtocol(fa1p2Protocol, args[0].network);
|
|
202
|
+
}
|
|
203
|
+
export async function createV0TezosFA2Protocol(...args) {
|
|
204
|
+
const fa2Protocol = createTezosFA2Protocol(...args);
|
|
205
|
+
return createV0TezosFAProtocol(fa2Protocol, args[0].network);
|
|
206
|
+
}
|
|
207
|
+
export async function createV0TezosBTCTezProtocol(...args) {
|
|
208
|
+
const protocol = createBTCTezProtocol(...args);
|
|
209
|
+
const module = new TezosModule();
|
|
210
|
+
return createV0SubProtocol(protocol, module);
|
|
211
|
+
}
|
|
212
|
+
export async function createV0TezosCTezProtocol(...args) {
|
|
213
|
+
const protocol = createCTezProtocol(...args);
|
|
214
|
+
const module = new TezosModule();
|
|
215
|
+
return createV0SubProtocol(protocol, module);
|
|
216
|
+
}
|
|
217
|
+
export async function createV0TezosDogamiProtocol(...args) {
|
|
218
|
+
const protocol = createDogamiProtocol(...args);
|
|
219
|
+
const module = new TezosModule();
|
|
220
|
+
return createV0SubProtocol(protocol, module);
|
|
221
|
+
}
|
|
222
|
+
export async function createV0TezosETHTezProtocol(...args) {
|
|
223
|
+
const protocol = createETHTezProtocol(...args);
|
|
224
|
+
const module = new TezosModule();
|
|
225
|
+
return createV0SubProtocol(protocol, module);
|
|
226
|
+
}
|
|
227
|
+
export async function createV0TezosKolibriUSDProtocol(...args) {
|
|
228
|
+
const protocol = createKolibriUSDProtocol(...args);
|
|
229
|
+
const module = new TezosModule();
|
|
230
|
+
return createV0SubProtocol(protocol, module);
|
|
231
|
+
}
|
|
232
|
+
export async function createV0TezosPlentyProtocol(...args) {
|
|
233
|
+
const protocol = createPlentyProtocol(...args);
|
|
234
|
+
const module = new TezosModule();
|
|
235
|
+
return createV0SubProtocol(protocol, module);
|
|
236
|
+
}
|
|
237
|
+
export async function createV0TezosQuipuswapProtocol(...args) {
|
|
238
|
+
const protocol = createQuipuswapProtocol(...args);
|
|
239
|
+
const module = new TezosModule();
|
|
240
|
+
return createV0SubProtocol(protocol, module);
|
|
241
|
+
}
|
|
242
|
+
export async function createV0TezosSiriusProtocol(...args) {
|
|
243
|
+
const protocol = createSiriusProtocol(...args);
|
|
244
|
+
const module = new TezosModule();
|
|
245
|
+
return createV0SubProtocol(protocol, module);
|
|
246
|
+
}
|
|
247
|
+
export async function createV0TezosStakerProtocol(...args) {
|
|
248
|
+
const protocol = createStakerProtocol(...args);
|
|
249
|
+
const module = new TezosModule();
|
|
250
|
+
return createV0SubProtocol(protocol, module);
|
|
251
|
+
}
|
|
252
|
+
export async function createV0TezosTetherUSDProtocol(...args) {
|
|
253
|
+
const protocol = createTetherUSDProtocol(...args);
|
|
254
|
+
const module = new TezosModule();
|
|
255
|
+
return createV0SubProtocol(protocol, module);
|
|
256
|
+
}
|
|
257
|
+
export async function createV0TezosTzBTCProtocol(...args) {
|
|
258
|
+
const protocol = createTzBTCProtocol(...args);
|
|
259
|
+
const module = new TezosModule();
|
|
260
|
+
return createV0SubProtocol(protocol, module);
|
|
261
|
+
}
|
|
262
|
+
export async function createV0TezosUBTCProtocol(...args) {
|
|
263
|
+
const protocol = createUBTCProtocol(...args);
|
|
264
|
+
const module = new TezosModule();
|
|
265
|
+
return createV0SubProtocol(protocol, module);
|
|
266
|
+
}
|
|
267
|
+
export async function createV0TezosUDEFIProtocol(...args) {
|
|
268
|
+
const protocol = createUDEFIProtocol(...args);
|
|
269
|
+
const module = new TezosModule();
|
|
270
|
+
return createV0SubProtocol(protocol, module);
|
|
271
|
+
}
|
|
272
|
+
export async function createV0TezosUSDTezProtocol(...args) {
|
|
273
|
+
const protocol = createUSDTezProtocol(...args);
|
|
274
|
+
const module = new TezosModule();
|
|
275
|
+
return createV0SubProtocol(protocol, module);
|
|
276
|
+
}
|
|
277
|
+
export async function createV0TezosUUSDProtocol(...args) {
|
|
278
|
+
const protocol = createUUSDProtocol(...args);
|
|
279
|
+
const module = new TezosModule();
|
|
280
|
+
return createV0SubProtocol(protocol, module);
|
|
281
|
+
}
|
|
282
|
+
export async function createV0TezosWrappedProtocol(...args) {
|
|
283
|
+
const protocol = createWrappedTezosProtocol(...args);
|
|
284
|
+
const module = new TezosModule();
|
|
285
|
+
return createV0SubProtocol(protocol, module);
|
|
286
|
+
}
|
|
287
|
+
export async function createV0TezosWrapProtocol(...args) {
|
|
288
|
+
const protocol = createWrapProtocol(...args);
|
|
289
|
+
const module = new TezosModule();
|
|
290
|
+
return createV0SubProtocol(protocol, module);
|
|
291
|
+
}
|
|
292
|
+
export async function createV0TezosYouProtocol(...args) {
|
|
293
|
+
const protocol = createYouProtocol(...args);
|
|
294
|
+
const module = new TezosModule();
|
|
295
|
+
return createV0SubProtocol(protocol, module);
|
|
296
|
+
}
|
|
297
|
+
// Transaction
|
|
298
|
+
export function convertTransactionStatusV1ToV0(status) {
|
|
299
|
+
return status.type === 'applied'
|
|
300
|
+
? AirGapTransactionStatusV0.APPLIED
|
|
301
|
+
: status.type === 'failed'
|
|
302
|
+
? AirGapTransactionStatusV0.FAILED
|
|
303
|
+
: undefined;
|
|
304
|
+
}
|
|
305
|
+
function convertUIActionsV1ToV0(actions) {
|
|
306
|
+
return actions.map((action) => ({
|
|
307
|
+
text: action.text.value,
|
|
308
|
+
link: ''
|
|
309
|
+
}));
|
|
310
|
+
}
|
|
311
|
+
function convertUIAlertsV1ToV0(alerts) {
|
|
312
|
+
return alerts.map((alert) => ({
|
|
313
|
+
type: alert.type === 'success'
|
|
314
|
+
? AirGapTransactionWarningType.SUCCESS
|
|
315
|
+
: alert.type === 'info'
|
|
316
|
+
? AirGapTransactionWarningType.NOTE
|
|
317
|
+
: alert.type === 'warning'
|
|
318
|
+
? AirGapTransactionWarningType.WARNING
|
|
319
|
+
: AirGapTransactionWarningType.ERROR,
|
|
320
|
+
title: alert.title.value,
|
|
321
|
+
description: alert.description.value,
|
|
322
|
+
icon: alert.icon,
|
|
323
|
+
actions: alert.actions ? convertUIActionsV1ToV0(alert.actions) : undefined
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
// eslint-disable-next-line no-redeclare
|
|
327
|
+
export async function convertTransactionDetailsV1ToV0(txs, protocolOrMetadata, networkOrUndefined) {
|
|
328
|
+
const protocolMetadata = isOnlineProtocol(protocolOrMetadata)
|
|
329
|
+
? await protocolOrMetadata.getMetadata()
|
|
330
|
+
: protocolOrMetadata;
|
|
331
|
+
const networkV0 = isOnlineProtocol(protocolOrMetadata)
|
|
332
|
+
? convertNetworkV1ToV0(await protocolOrMetadata.getNetwork())
|
|
333
|
+
: networkOrUndefined instanceof ProtocolNetworkV0
|
|
334
|
+
? networkOrUndefined
|
|
335
|
+
: convertNetworkV1ToV0(networkOrUndefined);
|
|
336
|
+
const units = protocolMetadata.units;
|
|
337
|
+
const feeUnits = protocolMetadata.fee?.units ?? units;
|
|
338
|
+
return txs.map((tx) => {
|
|
339
|
+
return {
|
|
340
|
+
from: tx.from,
|
|
341
|
+
to: tx.to,
|
|
342
|
+
isInbound: tx.isInbound,
|
|
343
|
+
amount: newAmount(tx.amount).blockchain(units).value,
|
|
344
|
+
fee: newAmount(tx.fee).blockchain(feeUnits).value,
|
|
345
|
+
timestamp: tx.timestamp,
|
|
346
|
+
changeAddressInfo: tx.changeAddressInfo,
|
|
347
|
+
displayFromTo: tx.displayFromTo,
|
|
348
|
+
protocolIdentifier: protocolMetadata.identifier,
|
|
349
|
+
network: networkV0,
|
|
350
|
+
data: typeof tx.arbitraryData === 'string' ? tx.arbitraryData : tx.arbitraryData?.[1],
|
|
351
|
+
hash: tx.status?.hash,
|
|
352
|
+
blockHeight: tx.status?.block,
|
|
353
|
+
status: tx.status ? convertTransactionStatusV1ToV0(tx.status) : undefined,
|
|
354
|
+
warnings: tx.uiAlerts ? convertUIAlertsV1ToV0(tx.uiAlerts) : undefined,
|
|
355
|
+
extra: {
|
|
356
|
+
...tx.extra,
|
|
357
|
+
type: tx.type
|
|
358
|
+
},
|
|
359
|
+
transactionDetails: tx.json
|
|
360
|
+
};
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
// FeeDefaults
|
|
364
|
+
export function convertFeeDefaultsV0ToV1(feeDefaults, decimals) {
|
|
365
|
+
return {
|
|
366
|
+
low: newAmount(new BigNumber(feeDefaults.low).shiftedBy(decimals), 'blockchain'),
|
|
367
|
+
medium: newAmount(new BigNumber(feeDefaults.medium).shiftedBy(decimals), 'blockchain'),
|
|
368
|
+
high: newAmount(new BigNumber(feeDefaults.high).shiftedBy(decimals), 'blockchain')
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
export function convertFeeDefaultsV1ToV0(feeDefaults, protocolMetadata) {
|
|
372
|
+
const feeUnits = protocolMetadata.fee?.units ?? protocolMetadata.units;
|
|
373
|
+
const feeUnit = protocolMetadata.fee?.mainUnit ?? protocolMetadata.mainUnit;
|
|
374
|
+
return {
|
|
375
|
+
low: new BigNumber(newAmount(feeDefaults.low).convert(feeUnit, feeUnits).value).toFixed(),
|
|
376
|
+
medium: new BigNumber(newAmount(feeDefaults.medium).convert(feeUnit, feeUnits).value).toFixed(),
|
|
377
|
+
high: new BigNumber(newAmount(feeDefaults.high).convert(feeUnit, feeUnits).value).toFixed()
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
// Bytes
|
|
381
|
+
export function getBytesFormatV1FromV0(bytes) {
|
|
382
|
+
return isHex(bytes) ? 'hex' : 'encoded';
|
|
383
|
+
}
|
|
384
|
+
export function getSecretKeyType(secretKey) {
|
|
385
|
+
return secretKey.startsWith('xprv') ? 'xpriv' : 'priv';
|
|
386
|
+
}
|
|
387
|
+
export function getPublicKeyType(publicKey) {
|
|
388
|
+
return publicKey.startsWith('xpub') ? 'xpub' : 'pub';
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wtdjAtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvcHJvdG9jb2wvcHJvdG9jb2wtdjAtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBcUIsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNyRyxPQUFPLEVBQUUsV0FBVyxFQUFpQixtQkFBbUIsRUFBRSxvQkFBb0IsRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzSCxPQUFPLEVBQ0wsZUFBZSxJQUFJLGlCQUFpQixFQUNwQyxXQUFXLElBQUkscUJBQXFCLEVBS3JDLE1BQU0sNEJBQTRCLENBQUE7QUFDbkMsT0FBTyxFQUNMLGdCQUFnQixJQUFJLHdCQUF3QixFQUM1QyxzQkFBc0IsRUFFdEIsY0FBYyxFQUVmLE1BQU0sd0JBQXdCLENBQUE7QUFDL0IsT0FBTyxFQWNMLGdCQUFnQixFQUNoQixTQUFTLEVBVVYsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsYUFBYSxFQUEwQyxxQkFBcUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2pKLE9BQU8sRUFBRSxZQUFZLEVBQWtCLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0sMkJBQTJCLENBQUE7QUFDN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBZSxNQUFNLG1CQUFtQixDQUFBO0FBQzdFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUV2QixjQUFjLEVBR2YsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVB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QUFBO0FBQ0gsQ0FBQztBQUVELFFBQVE7QUFFUixNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBYTtJQUNsRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFpQjtJQUNoRCxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG5pbXBvcnQgeyBBZXRlcm5pdHlNb2R1bGUsIEFldGVybml0eVByb3RvY29sLCBjcmVhdGVBZXRlcm5pdHlQcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvYWV0ZXJuaXR5J1xuaW1wb3J0IHsgQXN0YXJNb2R1bGUsIEFzdGFyUHJvdG9jb2wsIGNyZWF0ZUFzdGFyUHJvdG9jb2wsIGNyZWF0ZVNoaWRlblByb3RvY29sLCBTaGlkZW5Qcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvYXN0YXInXG5pbXBvcnQge1xuICBQcm90b2NvbE5ldHdvcmsgYXMgUHJvdG9jb2xOZXR3b3JrVjAsXG4gIE5ldHdvcmtUeXBlIGFzIFByb3RvY29sTmV0d29ya1R5cGVWMCxcbiAgUHJvdG9jb2xCbG9ja0V4cGxvcmVyIGFzIFByb3RvY29sQmxvY2tFeHBsb3JlclYwLFxuICBGZWVEZWZhdWx0cyBhcyBGZWVEZWZhdWx0c1YwLFxuICBJQWlyR2FwVHJhbnNhY3Rpb24gYXMgQWlyR2FwVHJhbnNhY3Rpb25WMCxcbiAgUHJvdG9jb2xTeW1ib2xzXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlJ1xuaW1wb3J0IHtcbiAgY3JlYXRlRVJDMjBUb2tlbiBhcyBjcmVhdGVFdGhlcmV1bUVSQzIwVG9rZW4sXG4gIGNyZWF0ZUV0aGVyZXVtUHJvdG9jb2wsXG4gIEVSQzIwVG9rZW4gYXMgRXRoZXJldW1FUkMyMFRva2VuLFxuICBFdGhlcmV1bU1vZHVsZSxcbiAgRXRoZXJldW1Qcm90b2NvbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L2V0aGVyZXVtJ1xuaW1wb3J0IHtcbiAgQWlyR2FwQW55UHJvdG9jb2wsXG4gIEFpckdhcEJsb2NrRXhwbG9yZXIgYXMgUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEsXG4gIEFpckdhcE1vZHVsZSxcbiAgQWlyR2FwT25saW5lUHJvdG9jb2wsXG4gIEFpckdhcFRyYW5zYWN0aW9uIGFzIEFpckdhcFRyYW5zYWN0aW9uVjEsXG4gIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzIGFzIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjEsXG4gIEFpckdhcFVJQWN0aW9uIGFzIEFpckdhcFVJQWN0aW9uVjEsXG4gIEFpckdhcFVJQWxlcnQgYXMgQWlyR2FwVUlBbGVydFYxLFxuICBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb24sXG4gIEJ5dGVzU3RyaW5nRm9ybWF0LFxuICBFeHRlbmRlZFB1YmxpY0tleSxcbiAgRXh0ZW5kZWRTZWNyZXRLZXksXG4gIEZlZURlZmF1bHRzIGFzIEZlZURlZmF1bHRzVjEsXG4gIGlzT25saW5lUHJvdG9jb2wsXG4gIG5ld0Ftb3VudCxcbiAgUHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICBQcm90b2NvbE1ldGFkYXRhLFxuICBQcm90b2NvbE5ldHdvcmsgYXMgUHJvdG9jb2xOZXR3b3JrVjEsXG4gIFByb3RvY29sTmV0d29ya1R5cGUgYXMgUHJvdG9jb2xOZXR3b3JrVHlwZVYxLFxuICBQcm90b2NvbFVuaXRzTWV0YWRhdGEsXG4gIFB1YmxpY0tleSxcbiAgUmVjdXJzaXZlUGFydGlhbCxcbiAgU2VjcmV0S2V5LFxuICBTdWJQcm90b2NvbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L21vZHVsZS1raXQnXG5pbXBvcnQgeyBCaXRjb2luTW9kdWxlLCBCaXRjb2luUHJvdG9jb2wsIEJpdGNvaW5TZWd3aXRQcm90b2NvbCwgY3JlYXRlQml0Y29pblByb3RvY29sLCBjcmVhdGVCaXRjb2luU2Vnd2l0UHJvdG9jb2wgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2JpdGNvaW4nXG5pbXBvcnQgeyBDb3JldW1Nb2R1bGUsIENvcmV1bVByb3RvY29sLCBjcmVhdGVDb3JldW1Qcm90b2NvbCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29yZXVtJ1xuaW1wb3J0IHsgQ29zbW9zTW9kdWxlLCBDb3Ntb3NQcm90b2NvbCwgY3JlYXRlQ29zbW9zUHJvdG9jb2wgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2Nvc21vcydcbmltcG9ydCB7IGNyZWF0ZUdyb2VzdGxjb2luUHJvdG9jb2wsIEdyb2VzdGxjb2luTW9kdWxlLCBHcm9lc3RsY29pblByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9ncm9lc3RsY29pbidcbmltcG9ydCB7IGNyZWF0ZUlDUFByb3RvY29sLCBJQ1BNb2R1bGUsIElDUFByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9pY3AnXG5pbXBvcnQge1xuICBjcmVhdGVNb29uYmFzZVByb3RvY29sLFxuICBjcmVhdGVNb29uYmVhbVByb3RvY29sLFxuICBjcmVhdGVNb29ucml2ZXJQcm90b2NvbCxcbiAgTW9vbmJhc2VQcm90b2NvbCxcbiAgTW9vbmJlYW1Nb2R1bGUsXG4gIE1vb25iZWFtUHJvdG9jb2wsXG4gIE1vb25yaXZlclByb3RvY29sXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvbW9vbmJlYW0nXG5pbXBvcnQge1xuICBjcmVhdGVFUkMyMFRva2VuIGFzIGNyZWF0ZU9wdGltaXNtRVJDMjBUb2tlbixcbiAgY3JlYXRlT3B0aW1pc21Qcm90b2NvbCxcbiAgRVJDMjBUb2tlbiBhcyBPcHRpbWlzbUVSQzIwVG9rZW4sXG4gIE9wdGltaXNtTW9kdWxlLFxuICBPcHRpbWlzbVByb3RvY29sXG59IGZyb20gJ0B3YWxsZnJlZS1kZXYvb3B0aW1pc20nXG5pbXBvcnQgeyBjcmVhdGVLdXNhbWFQcm90b2NvbCwgY3JlYXRlUG9sa2Fkb3RQcm90b2NvbCwgS3VzYW1hUHJvdG9jb2wsIFBvbGthZG90TW9kdWxlLCBQb2xrYWRvdFByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9wb2xrYWRvdCdcbmltcG9ydCB7IGNyZWF0ZVNvbGFuYVByb3RvY29sLCBTb2xhbmFNb2R1bGUsIFNvbGFuYVByb3RvY29sIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9zb2xhbmEnXG5pbXBvcnQge1xuICBCVENUZXpQcm90b2NvbCxcbiAgY3JlYXRlQlRDVGV6UHJvdG9jb2wsXG4gIGNyZWF0ZUNUZXpQcm90b2NvbCxcbiAgY3JlYXRlRG9nYW1pUHJvdG9jb2wsXG4gIGNyZWF0ZUVUSFRlelByb3RvY29sLFxuICBjcmVhdGVLb2xpYnJpVVNEUHJvdG9jb2wsXG4gIGNyZWF0ZVBsZW50eVByb3RvY29sLFxuICBjcmVhdGVRdWlwdXN3YXBQcm90b2NvbCxcbiAgY3JlYXRlU2lyaXVzUHJvdG9jb2wsXG4gIGNyZWF0ZVN0YWtlclByb3RvY29sLFxuICBjcmVhdGVUZXRoZXJVU0RQcm90b2NvbCxcbiAgY3JlYXRlVGV6b3NGQTFwMlByb3RvY29sLFxuICBjcmVhdGVUZXpvc0ZBMlByb3RvY29sLFxuICBjcmVhdGVUZXpvc0t0UHJvdG9jb2wsXG4gIGNyZWF0ZVRlem9zUHJvdG9jb2wsXG4gIGNyZWF0ZVRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCxcbiAgY3JlYXRlVHpCVENQcm90b2NvbCxcbiAgY3JlYXRlVUJUQ1Byb3RvY29sLFxuICBjcmVhdGVVREVGSVByb3RvY29sLFxuICBjcmVhdGVVU0RUZXpQcm90b2NvbCxcbiAgY3JlYXRlVVVTRFByb3RvY29sLFxuICBjcmVhdGVXcmFwcGVkVGV6b3NQcm90b2NvbCxcbiAgY3JlYXRlV3JhcFByb3RvY29sLFxuICBjcmVhdGVZb3VQcm90b2NvbCxcbiAgQ1RlelByb3RvY29sLFxuICBEb2dhbWlQcm90b2NvbCxcbiAgRVRIVGV6UHJvdG9jb2wsXG4gIEtvbGlicmlVU0RQcm90b2NvbCxcbiAgUGxlbnR5UHJvdG9jb2wsXG4gIFF1aXB1c3dhcFByb3RvY29sLFxuICBTaXJpdXNQcm90b2NvbCxcbiAgU3Rha2VyUHJvdG9jb2wsXG4gIFRldGhlclVTRFByb3RvY29sLFxuICBUZXpvc0ZBMXAyUHJvdG9jb2wsXG4gIFRlem9zRkEyUHJvdG9jb2wsXG4gIFRlem9zRkFQcm90b2NvbCxcbiAgVGV6b3NLdFByb3RvY29sLFxuICBUZXpvc01vZHVsZSxcbiAgVGV6b3NQcm90b2NvbCxcbiAgVGV6b3NQcm90b2NvbE5ldHdvcmssXG4gIFRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCxcbiAgVHpCVENQcm90b2NvbCxcbiAgVUJUQ1Byb3RvY29sLFxuICBVREVGSVByb3RvY29sLFxuICBVU0RUZXpQcm90b2NvbCxcbiAgVVVTRFByb3RvY29sLFxuICBXcmFwcGVkVGV6b3NQcm90b2NvbCxcbiAgV3JhcFByb3RvY29sLFxuICBZb3VQcm90b2NvbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L3Rlem9zJ1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZS9kZXBlbmRlbmNpZXMvc3JjL2JpZ251bWJlci5qcy05LjAuMC9iaWdudW1iZXInXG5cbmltcG9ydCB7XG4gIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzIGFzIEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAsXG4gIEFpckdhcFRyYW5zYWN0aW9uV2FybmluZyBhcyBBaXJHYXBVSUFsZXJ0VjAsXG4gIEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGVcbn0gZnJvbSAnQHdhbGxmcmVlLWRldi9jb2lubGliLWNvcmUvaW50ZXJmYWNlcy9JQWlyR2FwVHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBpc0hleCB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvY29pbmxpYi1jb3JlL3V0aWxzL2hleCdcblxuaW1wb3J0IHtcbiAgY3JlYXRlSUNvaW5Qcm90b2NvbEFkYXB0ZXIsXG4gIGNyZWF0ZUlDb2luU3ViUHJvdG9jb2xBZGFwdGVyLFxuICBJQ29pblByb3RvY29sQWRhcHRlcixcbiAgSUNvaW5TdWJQcm90b2NvbEFkYXB0ZXIsXG4gIFByb3RvY29sQmxvY2tFeHBsb3JlckFkYXB0ZXIsXG4gIFByb3RvY29sTmV0d29ya0FkYXB0ZXJcbn0gZnJvbSAnLi4vLi4vcHJvdG9jb2wvYWRhcHRlci9wcm90b2NvbC12MC1hZGFwdGVyJ1xuXG4vLyBOZXR3b3JrXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TmV0d29ya1R5cGVWMFRvVjEodHlwZTogUHJvdG9jb2xOZXR3b3JrVHlwZVYwKTogUHJvdG9jb2xOZXR3b3JrVHlwZVYxIHtcbiAgcmV0dXJuIHR5cGUgPT09IFByb3RvY29sTmV0d29ya1R5cGVWMC5NQUlOTkVUID8gJ21haW5uZXQnIDogdHlwZSA9PT0gUHJvdG9jb2xOZXR3b3JrVHlwZVYwLlRFU1RORVQgPyAndGVzdG5ldCcgOiAnY3VzdG9tJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE5ldHdvcmtUeXBlVjFUb1YwKHR5cGU6IFByb3RvY29sTmV0d29ya1R5cGVWMSk6IFByb3RvY29sTmV0d29ya1R5cGVWMCB7XG4gIHJldHVybiB0eXBlID09PSAnbWFpbm5ldCdcbiAgICA/IFByb3RvY29sTmV0d29ya1R5cGVWMC5NQUlOTkVUXG4gICAgOiB0eXBlID09PSAndGVzdG5ldCdcbiAgICA/IFByb3RvY29sTmV0d29ya1R5cGVWMC5URVNUTkVUXG4gICAgOiBQcm90b2NvbE5ldHdvcmtUeXBlVjAuQ1VTVE9NXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TmV0d29ya1YwVG9WMShuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmtWMCk6IFByb3RvY29sTmV0d29ya1YxIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuZXR3b3JrLm5hbWUsXG4gICAgdHlwZTogY29udmVydE5ldHdvcmtUeXBlVjBUb1YxKG5ldHdvcmsudHlwZSksXG4gICAgcnBjVXJsOiBuZXR3b3JrLnJwY1VybCxcbiAgICBibG9ja0V4cGxvcmVyVXJsOiBuZXR3b3JrLmJsb2NrRXhwbG9yZXIuYmxvY2tFeHBsb3JlcixcbiAgICAuLi4odHlwZW9mIG5ldHdvcmsuZXh0cmFzID09PSAnb2JqZWN0JyA/IG5ldHdvcmsuZXh0cmFzIDoge30pXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnROZXR3b3JrVjFUb1YwKG5ldHdvcms6IFByb3RvY29sTmV0d29ya1YxLCBibG9ja0V4cGxvcmVyPzogUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEpOiBQcm90b2NvbE5ldHdvcmtWMCB7XG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgcnBjVXJsLCAuLi5yZXN0IH0gPSBuZXR3b3JrXG4gIGNvbnN0IGJsb2NrRXhwbG9yZXJWMDogUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjAgPSBuZXcgUHJvdG9jb2xCbG9ja0V4cGxvcmVyQWRhcHRlcihibG9ja0V4cGxvcmVyLCBuZXR3b3JrLmJsb2NrRXhwbG9yZXJVcmwpXG5cbiAgcmV0dXJuIG5ldyBQcm90b2NvbE5ldHdvcmtBZGFwdGVyKG5hbWUsIGNvbnZlcnROZXR3b3JrVHlwZVYxVG9WMCh0eXBlKSwgcnBjVXJsLCBibG9ja0V4cGxvcmVyVjAsIHJlc3QpXG59XG5cbi8vIFByb3RvY29sXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21JZGVudGlmaWVyQW5kTmV0d29yayhcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIGlkZW50aWZpZXI6IHN0cmluZyxcbiAgbmV0d29yazogUHJvdG9jb2xOZXR3b3JrVjEgfCB1bmRlZmluZWRcbik6IFByb21pc2U8W1Byb3RvY29sQmxvY2tFeHBsb3JlclYxLCBBaXJHYXBWM1NlcmlhbGl6ZXJDb21wYW5pb25dPiB7XG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIG1vZHVsZS5jcmVhdGVCbG9ja0V4cGxvcmVyKGlkZW50aWZpZXIsIG5ldHdvcmspLFxuICAgIG1vZHVsZS5jcmVhdGVWM1NlcmlhbGl6ZXJDb21wYW5pb24oKVxuICBdKVxuXG4gIHJldHVybiBbYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uXVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyU3VwcGxlbWVudHNGcm9tUHJvdG9jb2w8VCBleHRlbmRzIEFpckdhcEFueVByb3RvY29sPihcbiAgcHJvdG9jb2w6IFQsXG4gIG1vZHVsZTogQWlyR2FwTW9kdWxlXG4pOiBQcm9taXNlPFtQcm90b2NvbEJsb2NrRXhwbG9yZXJWMSwgQWlyR2FwVjNTZXJpYWxpemVyQ29tcGFuaW9uXT4ge1xuICBjb25zdCBbbWV0YWRhdGEsIG5ldHdvcmtdOiBbUHJvdG9jb2xNZXRhZGF0YSwgUHJvdG9jb2xOZXR3b3JrVjEgfCB1bmRlZmluZWRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHByb3RvY29sLmdldE1ldGFkYXRhKCksXG4gICAgaXNPbmxpbmVQcm90b2NvbChwcm90b2NvbCkgPyBwcm90b2NvbC5nZXROZXR3b3JrKCkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICBdKVxuXG4gIHJldHVybiBjcmVhdGVBZGFwdGVyU3VwcGxlbWVudHNGcm9tSWRlbnRpZmllckFuZE5ldHdvcmsobW9kdWxlLCBtZXRhZGF0YS5pZGVudGlmaWVyLCBuZXR3b3JrKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBQcm90b2NvbDxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2w+KFxuICBwcm90b2NvbDogVCxcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIHR5cGU6IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddID0gJ2Z1bGwnXG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPFQ+PiB7XG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dOiBbUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEsIEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbl0gPVxuICAgIGF3YWl0IGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21Qcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxuXG4gIHJldHVybiBjcmVhdGVJQ29pblByb3RvY29sQWRhcHRlcihwcm90b2NvbCwgYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uLCB7IHR5cGUgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwU3ViUHJvdG9jb2w8VCBleHRlbmRzIEFpckdhcEFueVByb3RvY29sICYgU3ViUHJvdG9jb2w+KFxuICBwcm90b2NvbDogVCxcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIHR5cGU6IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddID0gJ2Z1bGwnXG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFQ+PiB7XG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dOiBbUHJvdG9jb2xCbG9ja0V4cGxvcmVyVjEsIEFpckdhcFYzU2VyaWFsaXplckNvbXBhbmlvbl0gPVxuICAgIGF3YWl0IGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21Qcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxuXG4gIHJldHVybiBjcmVhdGVJQ29pblN1YlByb3RvY29sQWRhcHRlcihwcm90b2NvbCwgYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uLCB7IHR5cGUgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwRVJDMjBUb2tlbjxUIGV4dGVuZHMgQWlyR2FwQW55UHJvdG9jb2wgJiBTdWJQcm90b2NvbD4oXG4gIGVyYzIwVG9rZW46IFQsXG4gIHByb3RvY29sOiBBaXJHYXBBbnlQcm90b2NvbCxcbiAgbW9kdWxlOiBBaXJHYXBNb2R1bGUsXG4gIHR5cGU6IFByb3RvY29sQ29uZmlndXJhdGlvblsndHlwZSddID0gJ2Z1bGwnXG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFQ+PiB7XG4gIGNvbnN0IFttZXRhZGF0YSwgbmV0d29ya106IFtQcm90b2NvbE1ldGFkYXRhLCBQcm90b2NvbE5ldHdvcmtWMSB8IHVuZGVmaW5lZF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJvdG9jb2wuZ2V0TWV0YWRhdGEoKSxcbiAgICBpc09ubGluZVByb3RvY29sKGVyYzIwVG9rZW4pID8gZXJjMjBUb2tlbi5nZXROZXR3b3JrKCkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICBdKVxuXG4gIGNvbnN0IFtibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb25dID0gYXdhaXQgY3JlYXRlQWRhcHRlclN1cHBsZW1lbnRzRnJvbUlkZW50aWZpZXJBbmROZXR3b3JrKFxuICAgIG1vZHVsZSxcbiAgICBtZXRhZGF0YS5pZGVudGlmaWVyLFxuICAgIG5ldHdvcmtcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVJQ29pblN1YlByb3RvY29sQWRhcHRlcihlcmMyMFRva2VuLCBibG9ja0V4cGxvcmVyLCB2M1NlcmlhbGl6ZXJDb21wYW5pb24sIHsgdHlwZSB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBBZXRlcm5pdHlQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQWV0ZXJuaXR5UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPEFldGVybml0eVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQWV0ZXJuaXR5UHJvdG9jb2wgPSBjcmVhdGVBZXRlcm5pdHlQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IEFldGVybml0eU1vZHVsZSA9IG5ldyBBZXRlcm5pdHlNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMEFzdGFyUHJvdG9jb2woLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQXN0YXJQcm90b2NvbD4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPEFzdGFyUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBBc3RhclByb3RvY29sID0gY3JlYXRlQXN0YXJQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IEFzdGFyTW9kdWxlID0gbmV3IEFzdGFyTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBTaGlkZW5Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlU2hpZGVuUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPFNoaWRlblByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogU2hpZGVuUHJvdG9jb2wgPSBjcmVhdGVTaGlkZW5Qcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IEFzdGFyTW9kdWxlID0gbmV3IEFzdGFyTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBCaXRjb2luUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUJpdGNvaW5Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8Qml0Y29pblByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQml0Y29pblByb3RvY29sID0gY3JlYXRlQml0Y29pblByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogQml0Y29pbk1vZHVsZSA9IG5ldyBCaXRjb2luTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBCaXRjb2luU2Vnd2l0UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUJpdGNvaW5TZWd3aXRQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8Qml0Y29pblNlZ3dpdFByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQml0Y29pblNlZ3dpdFByb3RvY29sID0gY3JlYXRlQml0Y29pblNlZ3dpdFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogQml0Y29pbk1vZHVsZSA9IG5ldyBCaXRjb2luTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBDb3JldW1Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQ29yZXVtUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPENvcmV1bVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQ29yZXVtUHJvdG9jb2wgPSBjcmVhdGVDb3JldW1Qcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IENvcmV1bU1vZHVsZSA9IG5ldyBDb3JldW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMENvc21vc1Byb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVDb3Ntb3NQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8Q29zbW9zUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBDb3Ntb3NQcm90b2NvbCA9IGNyZWF0ZUNvc21vc1Byb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogQ29zbW9zTW9kdWxlID0gbmV3IENvc21vc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwRXRoZXJldW1Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlRXRoZXJldW1Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8RXRoZXJldW1Qcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEV0aGVyZXVtUHJvdG9jb2wgPSBjcmVhdGVFdGhlcmV1bVByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogRXRoZXJldW1Nb2R1bGUgPSBuZXcgRXRoZXJldW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMEV0aGVyZXVtRVJDMjBUb2tlbihcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlRXRoZXJldW1FUkMyMFRva2VuPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxFdGhlcmV1bUVSQzIwVG9rZW4+PiB7XG4gIGNvbnN0IGVyYzIwVG9rZW46IEV0aGVyZXVtRVJDMjBUb2tlbiA9IGNyZWF0ZUV0aGVyZXVtRVJDMjBUb2tlbiguLi5hcmdzKVxuICBjb25zdCBldGhlcmV1bVByb3RvY29sOiBFdGhlcmV1bVByb3RvY29sID0gY3JlYXRlRXRoZXJldW1Qcm90b2NvbChhcmdzWzFdKVxuICBjb25zdCBtb2R1bGU6IEV0aGVyZXVtTW9kdWxlID0gbmV3IEV0aGVyZXVtTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBFUkMyMFRva2VuKGVyYzIwVG9rZW4sIGV0aGVyZXVtUHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwR3JvZXN0bGNvaW5Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlR3JvZXN0bGNvaW5Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8R3JvZXN0bGNvaW5Qcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEdyb2VzdGxjb2luUHJvdG9jb2wgPSBjcmVhdGVHcm9lc3RsY29pblByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogR3JvZXN0bGNvaW5Nb2R1bGUgPSBuZXcgR3JvZXN0bGNvaW5Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMElDUFByb3RvY29sKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUlDUFByb3RvY29sPik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8SUNQUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBJQ1BQcm90b2NvbCA9IGNyZWF0ZUlDUFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogSUNQTW9kdWxlID0gbmV3IElDUE1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwTW9vbmJlYW1Qcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlTW9vbmJlYW1Qcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8TW9vbmJlYW1Qcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IE1vb25iZWFtUHJvdG9jb2wgPSBjcmVhdGVNb29uYmVhbVByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogTW9vbmJlYW1Nb2R1bGUgPSBuZXcgTW9vbmJlYW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWME1vb25yaXZlclByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVNb29ucml2ZXJQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5Qcm90b2NvbEFkYXB0ZXI8TW9vbnJpdmVyUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBNb29ucml2ZXJQcm90b2NvbCA9IGNyZWF0ZU1vb25yaXZlclByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogTW9vbmJlYW1Nb2R1bGUgPSBuZXcgTW9vbmJlYW1Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWME1vb25iYXNlUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZU1vb25iYXNlUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPE1vb25iYXNlUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBNb29uYmFzZVByb3RvY29sID0gY3JlYXRlTW9vbmJhc2VQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IE1vb25iZWFtTW9kdWxlID0gbmV3IE1vb25iZWFtTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBPcHRpbWlzbVByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVPcHRpbWlzbVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxPcHRpbWlzbVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogT3B0aW1pc21Qcm90b2NvbCA9IGNyZWF0ZU9wdGltaXNtUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBPcHRpbWlzbU1vZHVsZSA9IG5ldyBPcHRpbWlzbU1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwT3B0aW1pc21FUkMyMFRva2VuKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVPcHRpbWlzbUVSQzIwVG9rZW4+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPE9wdGltaXNtRVJDMjBUb2tlbj4+IHtcbiAgY29uc3QgZXJjMjBUb2tlbjogT3B0aW1pc21FUkMyMFRva2VuID0gY3JlYXRlT3B0aW1pc21FUkMyMFRva2VuKC4uLmFyZ3MpXG4gIGNvbnN0IG9wdGltaXNtUHJvdG9jb2w6IE9wdGltaXNtUHJvdG9jb2wgPSBjcmVhdGVPcHRpbWlzbVByb3RvY29sKGFyZ3NbMV0pXG4gIGNvbnN0IG1vZHVsZTogT3B0aW1pc21Nb2R1bGUgPSBuZXcgT3B0aW1pc21Nb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMEVSQzIwVG9rZW4oZXJjMjBUb2tlbiwgb3B0aW1pc21Qcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBQb2xrYWRvdFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVQb2xrYWRvdFByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxQb2xrYWRvdFByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogUG9sa2Fkb3RQcm90b2NvbCA9IGNyZWF0ZVBvbGthZG90UHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBQb2xrYWRvdE1vZHVsZSA9IG5ldyBQb2xrYWRvdE1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwS3VzYW1hUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUt1c2FtYVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxLdXNhbWFQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEt1c2FtYVByb3RvY29sID0gY3JlYXRlS3VzYW1hUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBQb2xrYWRvdE1vZHVsZSA9IG5ldyBQb2xrYWRvdE1vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwU29sYW5hUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVNvbGFuYVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxTb2xhbmFQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFNvbGFuYVByb3RvY29sID0gY3JlYXRlU29sYW5hUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBhbnkgPSBuZXcgU29sYW5hTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1Byb3RvY29sKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVRlem9zUHJvdG9jb2w+KTogUHJvbWlzZTxJQ29pblByb3RvY29sQWRhcHRlcjxUZXpvc1Byb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogVGV6b3NQcm90b2NvbCA9IGNyZWF0ZVRlem9zUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NTaGllbGRlZFRlelByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVUZXpvc1NoaWVsZGVkVGV6UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luUHJvdG9jb2xBZGFwdGVyPFRlem9zU2hpZWxkZWRUZXpQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCA9IGNyZWF0ZVRlem9zU2hpZWxkZWRUZXpQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc0t0UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVRlem9zS3RQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VGV6b3NLdFByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogVGV6b3NLdFByb3RvY29sID0gY3JlYXRlVGV6b3NLdFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NGQVByb3RvY29sPFQgZXh0ZW5kcyBUZXpvc0ZBUHJvdG9jb2w+KFxuICBmYVByb3RvY29sOiBULFxuICB0ZXpvc05ldHdvcms/OiBSZWN1cnNpdmVQYXJ0aWFsPFRlem9zUHJvdG9jb2xOZXR3b3JrPixcbiAgdHlwZTogUHJvdG9jb2xDb25maWd1cmF0aW9uWyd0eXBlJ10gPSAnZnVsbCdcbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VD4+IHtcbiAgY29uc3QgdGV6b3NQcm90b2NvbDogVGV6b3NQcm90b2NvbCA9IGNyZWF0ZVRlem9zUHJvdG9jb2woeyBuZXR3b3JrOiB0ZXpvc05ldHdvcmsgfSlcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgY29uc3QgW21ldGFkYXRhLCBuZXR3b3JrXTogW1Byb3RvY29sTWV0YWRhdGEsIFByb3RvY29sTmV0d29ya1YxIHwgdW5kZWZpbmVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICB0ZXpvc1Byb3RvY29sLmdldE1ldGFkYXRhKCksXG4gICAgaXNPbmxpbmVQcm90b2NvbChmYVByb3RvY29sKSA/IGZhUHJvdG9jb2wuZ2V0TmV0d29yaygpIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgXSlcblxuICBjb25zdCBbYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uXSA9IGF3YWl0IGNyZWF0ZUFkYXB0ZXJTdXBwbGVtZW50c0Zyb21JZGVudGlmaWVyQW5kTmV0d29yayhcbiAgICBtb2R1bGUsXG4gICAgbWV0YWRhdGEuaWRlbnRpZmllcixcbiAgICBuZXR3b3JrXG4gIClcblxuICByZXR1cm4gY3JlYXRlSUNvaW5TdWJQcm90b2NvbEFkYXB0ZXIoZmFQcm90b2NvbCwgYmxvY2tFeHBsb3JlciwgdjNTZXJpYWxpemVyQ29tcGFuaW9uLCB7IHR5cGUgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NGQTFwMlByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVUZXpvc0ZBMXAyUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFRlem9zRkExcDJQcm90b2NvbD4+IHtcbiAgY29uc3QgZmExcDJQcm90b2NvbDogVGV6b3NGQTFwMlByb3RvY29sID0gY3JlYXRlVGV6b3NGQTFwMlByb3RvY29sKC4uLmFyZ3MpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwVGV6b3NGQVByb3RvY29sKGZhMXAyUHJvdG9jb2wsIGFyZ3NbMF0ubmV0d29yaylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NGQTJQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlVGV6b3NGQTJQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VGV6b3NGQTJQcm90b2NvbD4+IHtcbiAgY29uc3QgZmEyUHJvdG9jb2w6IFRlem9zRkEyUHJvdG9jb2wgPSBjcmVhdGVUZXpvc0ZBMlByb3RvY29sKC4uLmFyZ3MpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwVGV6b3NGQVByb3RvY29sKGZhMlByb3RvY29sLCBhcmdzWzBdLm5ldHdvcmspXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zQlRDVGV6UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUJUQ1RlelByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxCVENUZXpQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IEJUQ1RlelByb3RvY29sID0gY3JlYXRlQlRDVGV6UHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NDVGV6UHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZUNUZXpQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8Q1RlelByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogQ1RlelByb3RvY29sID0gY3JlYXRlQ1RlelByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zRG9nYW1pUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZURvZ2FtaVByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxEb2dhbWlQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IERvZ2FtaVByb3RvY29sID0gY3JlYXRlRG9nYW1pUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NFVEhUZXpQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlRVRIVGV6UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPEVUSFRlelByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogRVRIVGV6UHJvdG9jb2wgPSBjcmVhdGVFVEhUZXpQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc0tvbGlicmlVU0RQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlS29saWJyaVVTRFByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxLb2xpYnJpVVNEUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBLb2xpYnJpVVNEUHJvdG9jb2wgPSBjcmVhdGVLb2xpYnJpVVNEUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NQbGVudHlQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlUGxlbnR5UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFBsZW50eVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogUGxlbnR5UHJvdG9jb2wgPSBjcmVhdGVQbGVudHlQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1F1aXB1c3dhcFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVRdWlwdXN3YXBQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8UXVpcHVzd2FwUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBRdWlwdXN3YXBQcm90b2NvbCA9IGNyZWF0ZVF1aXB1c3dhcFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zU2lyaXVzUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVNpcml1c1Byb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxTaXJpdXNQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFNpcml1c1Byb3RvY29sID0gY3JlYXRlU2lyaXVzUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NTdGFrZXJQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlU3Rha2VyUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFN0YWtlclByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogU3Rha2VyUHJvdG9jb2wgPSBjcmVhdGVTdGFrZXJQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1RldGhlclVTRFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVUZXRoZXJVU0RQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VGV0aGVyVVNEUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBUZXRoZXJVU0RQcm90b2NvbCA9IGNyZWF0ZVRldGhlclVTRFByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zVHpCVENQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlVHpCVENQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VHpCVENQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFR6QlRDUHJvdG9jb2wgPSBjcmVhdGVUekJUQ1Byb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zVUJUQ1Byb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVVQlRDUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFVCVENQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFVCVENQcm90b2NvbCA9IGNyZWF0ZVVCVENQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1VERUZJUHJvdG9jb2woXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNyZWF0ZVVERUZJUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFVERUZJUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBVREVGSVByb3RvY29sID0gY3JlYXRlVURFRklQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1VTRFRlelByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVVU0RUZXpQcm90b2NvbD5cbik6IFByb21pc2U8SUNvaW5TdWJQcm90b2NvbEFkYXB0ZXI8VVNEVGV6UHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBVU0RUZXpQcm90b2NvbCA9IGNyZWF0ZVVTRFRlelByb3RvY29sKC4uLmFyZ3MpXG4gIGNvbnN0IG1vZHVsZTogVGV6b3NNb2R1bGUgPSBuZXcgVGV6b3NNb2R1bGUoKVxuXG4gIHJldHVybiBjcmVhdGVWMFN1YlByb3RvY29sKHByb3RvY29sLCBtb2R1bGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVWMFRlem9zVVVTRFByb3RvY29sKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjcmVhdGVVVVNEUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFVVU0RQcm90b2NvbD4+IHtcbiAgY29uc3QgcHJvdG9jb2w6IFVVU0RQcm90b2NvbCA9IGNyZWF0ZVVVU0RQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1dyYXBwZWRQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlV3JhcHBlZFRlem9zUHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFdyYXBwZWRUZXpvc1Byb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogV3JhcHBlZFRlem9zUHJvdG9jb2wgPSBjcmVhdGVXcmFwcGVkVGV6b3NQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlVjBUZXpvc1dyYXBQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlV3JhcFByb3RvY29sPlxuKTogUHJvbWlzZTxJQ29pblN1YlByb3RvY29sQWRhcHRlcjxXcmFwUHJvdG9jb2w+PiB7XG4gIGNvbnN0IHByb3RvY29sOiBXcmFwUHJvdG9jb2wgPSBjcmVhdGVXcmFwUHJvdG9jb2woLi4uYXJncylcbiAgY29uc3QgbW9kdWxlOiBUZXpvc01vZHVsZSA9IG5ldyBUZXpvc01vZHVsZSgpXG5cbiAgcmV0dXJuIGNyZWF0ZVYwU3ViUHJvdG9jb2wocHJvdG9jb2wsIG1vZHVsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVYwVGV6b3NZb3VQcm90b2NvbChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlWW91UHJvdG9jb2w+XG4pOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2xBZGFwdGVyPFlvdVByb3RvY29sPj4ge1xuICBjb25zdCBwcm90b2NvbDogWW91UHJvdG9jb2wgPSBjcmVhdGVZb3VQcm90b2NvbCguLi5hcmdzKVxuICBjb25zdCBtb2R1bGU6IFRlem9zTW9kdWxlID0gbmV3IFRlem9zTW9kdWxlKClcblxuICByZXR1cm4gY3JlYXRlVjBTdWJQcm90b2NvbChwcm90b2NvbCwgbW9kdWxlKVxufVxuXG4vLyBUcmFuc2FjdGlvblxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9uU3RhdHVzVjFUb1YwKHN0YXR1czogQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXNWMSk6IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAge1xuICByZXR1cm4gc3RhdHVzLnR5cGUgPT09ICdhcHBsaWVkJ1xuICAgID8gQWlyR2FwVHJhbnNhY3Rpb25TdGF0dXNWMC5BUFBMSUVEXG4gICAgOiBzdGF0dXMudHlwZSA9PT0gJ2ZhaWxlZCdcbiAgICA/IEFpckdhcFRyYW5zYWN0aW9uU3RhdHVzVjAuRkFJTEVEXG4gICAgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY29udmVydFVJQWN0aW9uc1YxVG9WMChhY3Rpb25zOiBBaXJHYXBVSUFjdGlvblYxW10pOiBBaXJHYXBVSUFsZXJ0VjBbJ2FjdGlvbnMnXSB7XG4gIHJldHVybiBhY3Rpb25zLm1hcCgoYWN0aW9uOiBBaXJHYXBVSUFjdGlvblYxKSA9PiAoe1xuICAgIHRleHQ6IGFjdGlvbi50ZXh0LnZhbHVlLFxuICAgIGxpbms6ICcnXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0VUlBbGVydHNWMVRvVjAoYWxlcnRzOiBBaXJHYXBVSUFsZXJ0VjFbXSk6IEFpckdhcFVJQWxlcnRWMFtdIHtcbiAgcmV0dXJuIGFsZXJ0cy5tYXAoKGFsZXJ0OiBBaXJHYXBVSUFsZXJ0VjEpID0+ICh7XG4gICAgdHlwZTpcbiAgICAgIGFsZXJ0LnR5cGUgPT09ICdzdWNjZXNzJ1xuICAgICAgICA/IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuU1VDQ0VTU1xuICAgICAgICA6IGFsZXJ0LnR5cGUgPT09ICdpbmZvJ1xuICAgICAgICA/IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuTk9URVxuICAgICAgICA6IGFsZXJ0LnR5cGUgPT09ICd3YXJuaW5nJ1xuICAgICAgICA/IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuV0FSTklOR1xuICAgICAgICA6IEFpckdhcFRyYW5zYWN0aW9uV2FybmluZ1R5cGUuRVJST1IsXG4gICAgdGl0bGU6IGFsZXJ0LnRpdGxlLnZhbHVlLFxuICAgIGRlc2NyaXB0aW9uOiBhbGVydC5kZXNjcmlwdGlvbi52YWx1ZSxcbiAgICBpY29uOiBhbGVydC5pY29uLFxuICAgIGFjdGlvbnM6IGFsZXJ0LmFjdGlvbnMgPyBjb252ZXJ0VUlBY3Rpb25zVjFUb1YwKGFsZXJ0LmFjdGlvbnMpIDogdW5kZWZpbmVkXG4gIH0pKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMChcbiAgdHhzOiBBaXJHYXBUcmFuc2FjdGlvblYxW10sXG4gIHByb3RvY29sOiBBaXJHYXBPbmxpbmVQcm90b2NvbFxuKTogUHJvbWlzZTxBaXJHYXBUcmFuc2FjdGlvblYwW10+XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9uRGV0YWlsc1YxVG9WMChcbiAgdHhzOiBBaXJHYXBUcmFuc2FjdGlvblYxW10sXG4gIG1ldGFkYXRhOiBQcm90b2NvbE1ldGFkYXRhLFxuICBuZXR3b3JrOiBQcm90b2NvbE5ldHdvcmtWMSB8IFByb3RvY29sTmV0d29ya1YwXG4pOiBQcm9taXNlPEFpckdhcFRyYW5zYWN0aW9uVjBbXT5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb252ZXJ0VHJhbnNhY3Rpb25EZXRhaWxzVjFUb1YwKFxuICB0eHM6IEFpckdhcFRyYW5zYWN0aW9uVjFbXSxcbiAgcHJvdG9jb2xPck1ldGFkYXRhOiBBaXJHYXBPbmxpbmVQcm90b2NvbCB8IFByb3RvY29sTWV0YWRhdGEsXG4gIG5ldHdvcmtPclVuZGVmaW5lZD86IFByb3RvY29sTmV0d29ya1YxIHwgUHJvdG9jb2xOZXR3b3JrVjBcbik6IFByb21pc2U8QWlyR2FwVHJhbnNhY3Rpb25WMFtdPiB7XG4gIGNvbnN0IHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEgPSBpc09ubGluZVByb3RvY29sKHByb3RvY29sT3JNZXRhZGF0YSlcbiAgICA/IGF3YWl0IHByb3RvY29sT3JNZXRhZGF0YS5nZXRNZXRhZGF0YSgpXG4gICAgOiBwcm90b2NvbE9yTWV0YWRhdGFcblxuICBjb25zdCBuZXR3b3JrVjA6IFByb3RvY29sTmV0d29ya1YwID0gaXNPbmxpbmVQcm90b2NvbChwcm90b2NvbE9yTWV0YWRhdGEpXG4gICAgPyBjb252ZXJ0TmV0d29ya1YxVG9WMChhd2FpdCBwcm90b2NvbE9yTWV0YWRhdGEuZ2V0TmV0d29yaygpKVxuICAgIDogbmV0d29ya09yVW5kZWZpbmVkIGluc3RhbmNlb2YgUHJvdG9jb2xOZXR3b3JrVjBcbiAgICA/IG5ldHdvcmtPclVuZGVmaW5lZFxuICAgIDogY29udmVydE5ldHdvcmtWMVRvVjAobmV0d29ya09yVW5kZWZpbmVkKVxuXG4gIGNvbnN0IHVuaXRzOiBQcm90b2NvbFVuaXRzTWV0YWRhdGEgPSBwcm90b2NvbE1ldGFkYXRhLnVuaXRzXG4gIGNvbnN0IGZlZVVuaXRzOiBQcm90b2NvbFVuaXRzTWV0YWRhdGEgPSBwcm90b2NvbE1ldGFkYXRhLmZlZT8udW5pdHMgPz8gdW5pdHNcblxuICByZXR1cm4gdHhzLm1hcCgodHg6IEFpckdhcFRyYW5zYWN0aW9uVjEpOiBBaXJHYXBUcmFuc2FjdGlvblYwID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogdHguZnJvbSxcbiAgICAgIHRvOiB0eC50byxcbiAgICAgIGlzSW5ib3VuZDogdHguaXNJbmJvdW5kLFxuXG4gICAgICBhbW91bnQ6IG5ld0Ftb3VudCh0eC5hbW91bnQpLmJsb2NrY2hhaW4odW5pdHMpLnZhbHVlLFxuICAgICAgZmVlOiBuZXdBbW91bnQodHguZmVlKS5ibG9ja2NoYWluKGZlZVVuaXRzKS52YWx1ZSxcblxuICAgICAgdGltZXN0YW1wOiB0eC50aW1lc3RhbXAsXG4gICAgICBjaGFuZ2VBZGRyZXNzSW5mbzogdHguY2hhbmdlQWRkcmVzc0luZm8sXG4gICAgICBkaXNwbGF5RnJvbVRvOiB0eC5kaXNwbGF5RnJvbVRvLFxuXG4gICAgICBwcm90b2NvbElkZW50aWZpZXI6IHByb3RvY29sTWV0YWRhdGEuaWRlbnRpZmllciBhcyBQcm90b2NvbFN5bWJvbHMsXG4gICAgICBuZXR3b3JrOiBuZXR3b3JrVjAsXG5cbiAgICAgIGRhdGE6IHR5cGVvZiB0eC5hcmJpdHJhcnlEYXRhID09PSAnc3RyaW5nJyA/IHR4LmFyYml0cmFyeURhdGEgOiB0eC5hcmJpdHJhcnlEYXRhPy5bMV0sXG5cbiAgICAgIGhhc2g6IHR4LnN0YXR1cz8uaGFzaCxcbiAgICAgIGJsb2NrSGVpZ2h0OiB0eC5zdGF0dXM/LmJsb2NrLFxuICAgICAgc3RhdHVzOiB0eC5zdGF0dXMgPyBjb252ZXJ0VHJhbnNhY3Rpb25TdGF0dXNWMVRvVjAodHguc3RhdHVzKSA6IHVuZGVmaW5lZCxcblxuICAgICAgd2FybmluZ3M6IHR4LnVpQWxlcnRzID8gY29udmVydFVJQWxlcnRzVjFUb1YwKHR4LnVpQWxlcnRzKSA6IHVuZGVmaW5lZCxcblxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgLi4udHguZXh0cmEsXG4gICAgICAgIHR5cGU6IHR4LnR5cGVcbiAgICAgIH0sXG4gICAgICB0cmFuc2FjdGlvbkRldGFpbHM6IHR4Lmpzb25cbiAgICB9XG4gIH0pXG59XG5cbi8vIEZlZURlZmF1bHRzXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RmVlRGVmYXVsdHNWMFRvVjE8X0ZlZVVuaXRzIGV4dGVuZHMgc3RyaW5nPihmZWVEZWZhdWx0czogRmVlRGVmYXVsdHNWMCwgZGVjaW1hbHM6IG51bWJlcik6IEZlZURlZmF1bHRzVjE8X0ZlZVVuaXRzPiB7XG4gIHJldHVybiB7XG4gICAgbG93OiBuZXdBbW91bnQobmV3IEJpZ051bWJlcihmZWVEZWZhdWx0cy5sb3cpLnNoaWZ0ZWRCeShkZWNpbWFscyksICdibG9ja2NoYWluJyksXG4gICAgbWVkaXVtOiBuZXdBbW91bnQobmV3IEJpZ051bWJlcihmZWVEZWZhdWx0cy5tZWRpdW0pLnNoaWZ0ZWRCeShkZWNpbWFscyksICdibG9ja2NoYWluJyksXG4gICAgaGlnaDogbmV3QW1vdW50KG5ldyBCaWdOdW1iZXIoZmVlRGVmYXVsdHMuaGlnaCkuc2hpZnRlZEJ5KGRlY2ltYWxzKSwgJ2Jsb2NrY2hhaW4nKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RmVlRGVmYXVsdHNWMVRvVjAoZmVlRGVmYXVsdHM6IEZlZURlZmF1bHRzVjEsIHByb3RvY29sTWV0YWRhdGE6IFByb3RvY29sTWV0YWRhdGEpOiBGZWVEZWZhdWx0c1YwIHtcbiAgY29uc3QgZmVlVW5pdHM6IFByb3RvY29sVW5pdHNNZXRhZGF0YSA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy51bml0cyA/PyBwcm90b2NvbE1ldGFkYXRhLnVuaXRzXG4gIGNvbnN0IGZlZVVuaXQ6IHN0cmluZyA9IHByb3RvY29sTWV0YWRhdGEuZmVlPy5tYWluVW5pdCA/PyBwcm90b2NvbE1ldGFkYXRhLm1haW5Vbml0XG5cbiAgcmV0dXJuIHtcbiAgICBsb3c6IG5ldyBCaWdOdW1iZXIobmV3QW1vdW50KGZlZURlZmF1bHRzLmxvdykuY29udmVydChmZWVVbml0LCBmZWVVbml0cykudmFsdWUpLnRvRml4ZWQoKSxcbiAgICBtZWRpdW06IG5ldyBCaWdOdW1iZXIobmV3QW1vdW50KGZlZURlZmF1bHRzLm1lZGl1bSkuY29udmVydChmZWVVbml0LCBmZWVVbml0cykudmFsdWUpLnRvRml4ZWQoKSxcbiAgICBoaWdoOiBuZXcgQmlnTnVtYmVyKG5ld0Ftb3VudChmZWVEZWZhdWx0cy5oaWdoKS5jb252ZXJ0KGZlZVVuaXQsIGZlZVVuaXRzKS52YWx1ZSkudG9GaXhlZCgpXG4gIH1cbn1cblxuLy8gQnl0ZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ5dGVzRm9ybWF0VjFGcm9tVjAoYnl0ZXM6IHN0cmluZyk6IEJ5dGVzU3RyaW5nRm9ybWF0IHtcbiAgcmV0dXJuIGlzSGV4KGJ5dGVzKSA/ICdoZXgnIDogJ2VuY29kZWQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNyZXRLZXlUeXBlKHNlY3JldEtleTogc3RyaW5nKTogU2VjcmV0S2V5Wyd0eXBlJ10gfCBFeHRlbmRlZFNlY3JldEtleVsndHlwZSddIHtcbiAgcmV0dXJuIHNlY3JldEtleS5zdGFydHNXaXRoKCd4cHJ2JykgPyAneHByaXYnIDogJ3ByaXYnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQdWJsaWNLZXlUeXBlKHB1YmxpY0tleTogc3RyaW5nKTogUHVibGljS2V5Wyd0eXBlJ10gfCBFeHRlbmRlZFB1YmxpY0tleVsndHlwZSddIHtcbiAgcmV0dXJuIHB1YmxpY0tleS5zdGFydHNXaXRoKCd4cHViJykgPyAneHB1YicgOiAncHViJ1xufVxuIl19
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// TODO: Split up into individual files
|
|
2
|
+
// https://stackoverflow.com/a/8472700/4790610
|
|
3
|
+
export function generateGUID() {
|
|
4
|
+
// tslint:disable
|
|
5
|
+
if (typeof window.crypto !== 'undefined' && typeof window.crypto.getRandomValues !== 'undefined') {
|
|
6
|
+
// If we have a cryptographically secure PRNG, use that
|
|
7
|
+
// https://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript
|
|
8
|
+
const buf = new Uint16Array(8);
|
|
9
|
+
window.crypto.getRandomValues(buf);
|
|
10
|
+
const S4 = function (num) {
|
|
11
|
+
let ret = num.toString(16);
|
|
12
|
+
while (ret.length < 4) {
|
|
13
|
+
ret = `0${ret}`;
|
|
14
|
+
}
|
|
15
|
+
return ret;
|
|
16
|
+
};
|
|
17
|
+
return `${S4(buf[0]) + S4(buf[1])}-${S4(buf[2])}-${S4(buf[3])}-${S4(buf[4])}-${S4(buf[5])}${S4(buf[6])}${S4(buf[7])}`;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
// Otherwise, just use Math.random
|
|
21
|
+
// https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
|
|
22
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
23
|
+
// eslint-disable-next-line no-bitwise
|
|
24
|
+
const r = (Math.random() * 16) | 0;
|
|
25
|
+
// eslint-disable-next-line no-bitwise
|
|
26
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
27
|
+
return v.toString(16);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
// tslint:enable
|
|
31
|
+
}
|
|
32
|
+
export async function to(promise, errorExt) {
|
|
33
|
+
return promise
|
|
34
|
+
.then((data) => [null, data])
|
|
35
|
+
.catch((rejectionError) => {
|
|
36
|
+
if (errorExt) {
|
|
37
|
+
Object.assign(rejectionError, errorExt);
|
|
38
|
+
}
|
|
39
|
+
return [rejectionError, undefined];
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function readParameterFromUrl(url, parameter) {
|
|
43
|
+
try {
|
|
44
|
+
const parsedUrl = new URL(url);
|
|
45
|
+
return parsedUrl.searchParams.get(parameter) || '';
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return url;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function parseIACUrl(url, parameter) {
|
|
52
|
+
let parseResult;
|
|
53
|
+
if (Array.isArray(url)) {
|
|
54
|
+
parseResult = url.map((chunk) => readParameterFromUrl(chunk, parameter));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
try {
|
|
58
|
+
parseResult = readParameterFromUrl(url, parameter).split(',');
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
parseResult = url.split(',');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// In case one of the elements contains a chunked string, we have to flatten it.
|
|
65
|
+
parseResult = parseResult.reduce((pv, cv) => [...pv, ...cv.split(',')], []);
|
|
66
|
+
return parseResult.filter((el) => el !== '');
|
|
67
|
+
}
|
|
68
|
+
export function serializedDataToUrlString(data, host, parameter = 'd') {
|
|
69
|
+
return `${host}?${parameter}=${data}`;
|
|
70
|
+
}
|
|
71
|
+
export function toBoolean(value) {
|
|
72
|
+
// All falsy and truthy values can be converted to a real boolean by using a double negative (!!)
|
|
73
|
+
return Boolean(value);
|
|
74
|
+
}
|
|
75
|
+
export function assertNever(name, arg) {
|
|
76
|
+
throw new Error(`${name} ${arg}`);
|
|
77
|
+
}
|
|
78
|
+
export const TEMP_BTC_REQUEST_IDS = 'TEMP-BTC-REQUEST-IDS';
|
|
79
|
+
export const TEMP_MM_REQUEST_IDS = 'TEMP-MM-REQUEST-IDS';
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUV2Qyw4Q0FBOEM7QUFDOUMsTUFBTSxVQUFVLFlBQVk7SUFDMUIsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2pHLHVEQUF1RDtRQUN2RCw2RkFBNkY7UUFDN0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEMsTUFBTSxFQUFFLEdBQUcsVUFBVSxHQUFXO1lBQzlCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNqQixDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUE7UUFFRCxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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O0lBQzNGLE9BQU8sR0FBRyxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWM7SUFDdEMsaUdBQWlHO0lBQ2pHLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVksRUFBRSxHQUFVO0lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUE7QUFDMUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBTcGxpdCB1cCBpbnRvIGluZGl2aWR1YWwgZmlsZXNcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg0NzI3MDAvNDc5MDYxMFxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR1VJRCgpOiBzdHJpbmcge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICBpZiAodHlwZW9mIHdpbmRvdy5jcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIFBSTkcsIHVzZSB0aGF0XG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjkwNjkxNi9jb2xsaXNpb25zLXdoZW4tZ2VuZXJhdGluZy11dWlkcy1pbi1qYXZhc2NyaXB0XG4gICAgY29uc3QgYnVmID0gbmV3IFVpbnQxNkFycmF5KDgpXG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnVmKVxuICAgIGNvbnN0IFM0ID0gZnVuY3Rpb24gKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgIGxldCByZXQgPSBudW0udG9TdHJpbmcoMTYpXG4gICAgICB3aGlsZSAocmV0Lmxlbmd0aCA8IDQpIHtcbiAgICAgICAgcmV0ID0gYDAke3JldH1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7UzQoYnVmWzBdKSArIFM0KGJ1ZlsxXSl9LSR7UzQoYnVmWzJdKX0tJHtTNChidWZbM10pfS0ke1M0KGJ1Zls0XSl9LSR7UzQoYnVmWzVdKX0ke1M0KGJ1Zls2XSl9JHtTNChidWZbN10pfWBcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIGp1c3QgdXNlIE1hdGgucmFuZG9tXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTE3NTIzIzIxMTc1MjNcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDBcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4OFxuXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNilcbiAgICB9KVxuICB9XG4gIC8vIHRzbGludDplbmFibGVcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvPFQsIFUgPSBFcnJvcj4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZXJyb3JFeHQ/OiB1bmtub3duKTogUHJvbWlzZTxbVSB8IG51bGwsIFQgfCB1bmRlZmluZWRdPiB7XG4gIHJldHVybiBwcm9taXNlXG4gICAgLnRoZW48W251bGwsIFRdPigoZGF0YTogVCkgPT4gW251bGwsIGRhdGFdKVxuICAgIC5jYXRjaDxbVSwgdW5kZWZpbmVkXT4oKHJlamVjdGlvbkVycm9yOiBVKSA9PiB7XG4gICAgICBpZiAoZXJyb3JFeHQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZWplY3Rpb25FcnJvciwgZXJyb3JFeHQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbcmVqZWN0aW9uRXJyb3IsIHVuZGVmaW5lZF1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZWFkUGFyYW1ldGVyRnJvbVVybCh1cmw6IHN0cmluZywgcGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZFVybDogVVJMID0gbmV3IFVSTCh1cmwpXG5cbiAgICByZXR1cm4gcGFyc2VkVXJsLnNlYXJjaFBhcmFtcy5nZXQocGFyYW1ldGVyKSB8fCAnJ1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB1cmxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJQUNVcmwodXJsOiBzdHJpbmcgfCBzdHJpbmdbXSwgcGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGxldCBwYXJzZVJlc3VsdDogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkge1xuICAgIHBhcnNlUmVzdWx0ID0gdXJsLm1hcCgoY2h1bms6IHN0cmluZykgPT4gcmVhZFBhcmFtZXRlckZyb21VcmwoY2h1bmssIHBhcmFtZXRlcikpXG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlUmVzdWx0ID0gcmVhZFBhcmFtZXRlckZyb21VcmwodXJsLCBwYXJhbWV0ZXIpLnNwbGl0KCcsJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcGFyc2VSZXN1bHQgPSB1cmwuc3BsaXQoJywnKVxuICAgIH1cbiAgfVxuXG4gIC8vIEluIGNhc2Ugb25lIG9mIHRoZSBlbGVtZW50cyBjb250YWlucyBhIGNodW5rZWQgc3RyaW5nLCB3ZSBoYXZlIHRvIGZsYXR0ZW4gaXQuXG4gIHBhcnNlUmVzdWx0ID0gcGFyc2VSZXN1bHQucmVkdWNlKChwdjogc3RyaW5nW10sIGN2OiBzdHJpbmcpID0+IFsuLi5wdiwgLi4uY3Yuc3BsaXQoJywnKV0sIFtdKVxuXG4gIHJldHVybiBwYXJzZVJlc3VsdC5maWx0ZXIoKGVsOiBzdHJpbmcpID0+IGVsICE9PSAnJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZWREYXRhVG9VcmxTdHJpbmcoZGF0YTogc3RyaW5nLCBob3N0OiBzdHJpbmcsIHBhcmFtZXRlcjogc3RyaW5nID0gJ2QnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2hvc3R9PyR7cGFyYW1ldGVyfT0ke2RhdGF9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIC8vIEFsbCBmYWxzeSBhbmQgdHJ1dGh5IHZhbHVlcyBjYW4gYmUgY29udmVydGVkIHRvIGEgcmVhbCBib29sZWFuIGJ5IHVzaW5nIGEgZG91YmxlIG5lZ2F0aXZlICghISlcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROZXZlcihuYW1lOiBzdHJpbmcsIGFyZzogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSAke2FyZ31gKVxufVxuXG5leHBvcnQgY29uc3QgVEVNUF9CVENfUkVRVUVTVF9JRFMgPSAnVEVNUC1CVEMtUkVRVUVTVC1JRFMnXG5leHBvcnQgY29uc3QgVEVNUF9NTV9SRVFVRVNUX0lEUyA9ICdURU1QLU1NLVJFUVVFU1QtSURTJ1xuIl19
|