@txnlab/use-wallet 3.2.0 → 3.3.0
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/dist/index.cjs +1037 -1203
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1040 -1207
- package/dist/index.js.map +1 -1
- package/package.json +13 -13
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/core/exception-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/core/json-rpc-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/core/message-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/core/deep-link-pages.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/modules/auth-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/modules/rpc-provider-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/modules/user-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/modules/nft-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.0.5/node_modules/@magic-sdk/types/src/modules/wallet-types.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/semver.js","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/base64-json.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-exceptions.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/type-guards.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-environment.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/auth.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-module.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/get-payload-id.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/json-rpc.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/events.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/promise-tools.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/version-check.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/user.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/storage.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/uuid.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/device-share-web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/url.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/wallet.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/rpc-provider.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-extension.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/nft.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.0.2_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/view-controller.ts","../../../node_modules/.pnpm/@magic-sdk+commons@24.2.0_@magic-sdk+provider@28.0.2_localforage@1.10.0__@magic-sdk+types@24.0.5/node_modules/@magic-sdk/commons/src/index.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/localforage/dist/localforage.js","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/_driver.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/node_modules/localforage-driver-commons/_bundle/fesm5.js","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/Store.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/_initStorage.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/clear.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/dropInstance.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/getItem.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/iterate.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/key.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/keys.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/length.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/removeItem.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/setItem.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/node_modules/src/index.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/src/index.ts","../../../node_modules/.pnpm/magic-sdk@28.0.3/node_modules/magic-sdk/src/iframe-controller.ts","../../../node_modules/.pnpm/@magic-ext+algorand@23.0.2/node_modules/@magic-ext/algorand/src/index.ts","../src/index.ts","../src/manager.ts","../src/network.ts","../src/storage.ts","../src/store.ts","../src/wallets/base.ts","../src/wallets/types.ts","../src/wallets/defly.ts","../src/wallets/exodus.ts","../src/wallets/kibisis.ts","../src/wallets/kmd.ts","../src/wallets/lute.ts","../src/wallets/magic.ts","../src/wallets/mnemonic.ts","../src/wallets/pera.ts","../src/wallets/pera2.ts","../src/wallets/walletconnect.ts","../src/utils.ts","../src/wallets/custom.ts"],"sourcesContent":["export enum SDKErrorCode {\n MissingApiKey = 'MISSING_API_KEY',\n ModalNotReady = 'MODAL_NOT_READY',\n MalformedResponse = 'MALFORMED_RESPONSE',\n InvalidArgument = 'INVALID_ARGUMENT',\n ExtensionNotInitialized = 'EXTENSION_NOT_INITIALIZED',\n IncompatibleExtensions = 'INCOMPATIBLE_EXTENSIONS',\n}\n\nexport enum SDKWarningCode {\n SyncWeb3Method = 'SYNC_WEB3_METHOD',\n DuplicateIframe = 'DUPLICATE_IFRAME',\n ReactNativeEndpointConfiguration = 'REACT_NATIVE_ENDPOINT_CONFIGURATION',\n DeprecationNotice = 'DEPRECATION_NOTICE',\n ProductAnnouncement = 'ANNOUNCEMENT',\n}\n\nexport enum RPCErrorCode {\n // Standard JSON RPC 2.0 Error Codes\n ParseError = -32700,\n InvalidRequest = -32600,\n MethodNotFound = -32601,\n InvalidParams = -32602,\n InternalError = -32603,\n\n // Custom RPC Error Codes\n MagicLinkFailedVerification = -10000,\n MagicLinkExpired = -10001,\n MagicLinkRateLimited = -10002,\n MagicLinkInvalidRedirectURL = -10006,\n UserAlreadyLoggedIn = -10003,\n UpdateEmailFailed = -10004,\n UserRequestEditEmail = -10005,\n InactiveRecipient = -10010,\n AccessDeniedToUser = -10011,\n RedirectLoginComplete = -10015,\n}\n\nexport type ErrorCode = SDKErrorCode | RPCErrorCode;\nexport type WarningCode = SDKWarningCode;\n","import { RPCErrorCode } from './exception-types';\n\n// --- Request interfaces\n\nexport interface JsonRpcRequestPayload<TParams = any> {\n jsonrpc: string;\n id: string | number | null;\n method: string;\n params?: TParams;\n}\n\nexport interface JsonRpcRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: JsonRpcResponsePayload | null): void;\n}\n\nexport interface JsonRpcBatchRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: (JsonRpcResponsePayload | null)[] | null): void;\n}\n\n// --- Response interfaces\n\nexport interface JsonRpcError {\n message: string;\n code: RPCErrorCode;\n data?: any;\n}\n\nexport interface JsonRpcResponsePayload<ResultType = any> {\n jsonrpc: string;\n id: string | number | null;\n result?: ResultType | null;\n error?: JsonRpcError | null;\n}\n\nexport interface UserInfo {\n email?: string;\n}\n\nexport interface WalletInfo {\n walletType: 'magic' | 'metamask' | 'coinbase_wallet';\n}\n\nexport interface RequestUserInfoScope {\n scope?: {\n email?: 'required' | 'optional';\n };\n}\n\nexport enum Wallets {\n MetaMask = 'metamask',\n CoinbaseWallet = 'coinbase_wallet',\n}\n\nexport enum Events {\n WalletSelected = 'wallet_selected',\n WalletConnected = 'wallet_connected',\n WalletRejected = 'wallet_rejected',\n}\n\nexport interface UserEnv {\n env: {\n isMetaMaskInstalled: boolean;\n isCoinbaseWalletInstalled: boolean;\n };\n}\n\n// --- Payload methods\n\n/**\n * Enum of JSON RPC methods for interacting with the Magic SDK authentication\n * relayer.\n */\nexport enum MagicPayloadMethod {\n LoginWithSms = 'magic_auth_login_with_sms',\n LoginWithEmailOTP = 'magic_auth_login_with_email_otp',\n LoginWithMagicLink = 'magic_auth_login_with_magic_link',\n LoginWithCredential = 'magic_auth_login_with_credential',\n SetAuthorizationToken = 'magic_auth_set_authorization_token',\n GetIdToken = 'magic_auth_get_id_token',\n GenerateIdToken = 'magic_auth_generate_id_token',\n GetMetadata = 'magic_auth_get_metadata',\n IsLoggedIn = 'magic_is_logged_in',\n Logout = 'magic_auth_logout',\n UpdateEmail = 'magic_auth_update_email',\n UserSettings = 'magic_auth_settings',\n UserSettingsTestMode = 'magic_auth_settings_testing_mode',\n LoginWithSmsTestMode = 'magic_auth_login_with_sms_testing_mode',\n LoginWithEmailOTPTestMode = 'magic_auth_login_with_email_otp_testing_mode',\n LoginWithMagicLinkTestMode = 'magic_login_with_magic_link_testing_mode',\n LoginWithCredentialTestMode = 'magic_auth_login_with_credential_testing_mode',\n GetIdTokenTestMode = 'magic_auth_get_id_token_testing_mode',\n GenerateIdTokenTestMode = 'magic_auth_generate_id_token_testing_mode',\n GetMetadataTestMode = 'magic_auth_get_metadata_testing_mode',\n IsLoggedInTestMode = 'magic_auth_is_logged_in_testing_mode',\n LogoutTestMode = 'magic_auth_logout_testing_mode',\n UpdateEmailTestMode = 'magic_auth_update_email_testing_mode',\n IntermediaryEvent = 'magic_intermediary_event',\n RequestAccounts = 'eth_requestAccounts',\n GetInfo = 'magic_get_info',\n ShowUI = 'magic_wallet',\n NFTPurchase = 'magic_nft_purchase',\n NFTCheckout = 'magic_nft_checkout',\n NFTTransfer = 'magic_nft_transfer',\n RequestUserInfoWithUI = 'mc_request_user_info',\n Disconnect = 'mc_disconnect',\n // UpdatePhoneNumber = 'magic_auth_update_phone_number',\n // UpdatePhoneNumberTestMode = 'magic_auth_update_phone_number_testing_mode',\n RecoverAccount = 'magic_auth_recover_account',\n RecoverAccountTestMode = 'magic_auth_recover_account_testing_mode',\n MagicBoxHeartBeat = 'magic_box_heart_beat',\n AutoConnect = 'mc_auto_connect',\n Login = 'mc_login',\n EncryptV1 = 'magic_auth_encrypt_v1',\n DecryptV1 = 'magic_auth_decrypt_v1',\n ShowNFTs = 'magic_show_nfts',\n ShowOnRamp = 'magic_show_fiat_onramp',\n ShowSendTokensUI = 'magic_show_send_tokens_ui',\n ShowAddress = 'magic_show_address',\n ShowBalances = 'magic_show_balances',\n SendGaslessTransaction = 'eth_sendGaslessTransaction',\n RevealPK = 'magic_reveal_key',\n}\n","import { JsonRpcResponsePayload, JsonRpcError, JsonRpcRequestPayload } from './json-rpc-types';\n\nexport enum MagicIncomingWindowMessage {\n MAGIC_HANDLE_RESPONSE = 'MAGIC_HANDLE_RESPONSE',\n MAGIC_OVERLAY_READY = 'MAGIC_OVERLAY_READY',\n MAGIC_SHOW_OVERLAY = 'MAGIC_SHOW_OVERLAY',\n MAGIC_HIDE_OVERLAY = 'MAGIC_HIDE_OVERLAY',\n MAGIC_HANDLE_EVENT = 'MAGIC_HANDLE_EVENT',\n MAGIC_MG_BOX_SEND_RECEIPT = 'MAGIC_MG_BOX_SEND_RECEIPT',\n MAGIC_SEND_PRODUCT_ANNOUNCEMENT = 'MAGIC_SEND_PRODUCT_ANNOUNCEMENT',\n}\n\nexport enum MagicOutgoingWindowMessage {\n MAGIC_HANDLE_REQUEST = 'MAGIC_HANDLE_REQUEST',\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n rt?: string;\n jwt?: string;\n deviceShare?: string;\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageResponse<ResultType = any> {\n msgType: string;\n response: Partial<JsonRpcError> & Partial<JsonRpcResponsePayload<ResultType>>;\n rt?: string;\n deviceShare?: string;\n}\n\n/** The expected message event returned by the Magic iframe context. */\nexport interface MagicMessageEvent extends Partial<MessageEvent> {\n data: MagicMessageResponse;\n}\n","export enum DeepLinkPage {\n UpdateEmail = 'update-email',\n MFA = 'mfa',\n Recovery = 'recovery',\n}\n","import { WalletEventOnReceived } from './wallet-types';\n\nexport interface LoginWithMagicLinkConfiguration {\n /**\n * The email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the \"magic link\" to complete their\n * authentication.\n */\n showUI?: boolean;\n\n /**\n * You can optionally provide a redirect URI that will be followed at the end\n * of the magic link flow. Don't forget to invoke\n * `magic.auth.loginWithCredential()` to complete the login from the route you\n * configure here.\n */\n redirectURI?: string;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithMagicLink email will be\n * overriden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n}\n\nexport interface LoginWithSmsConfiguration {\n /**\n * Specify the phone number of the user attempting to login.\n */\n phoneNumber: string;\n}\nexport interface LoginWithEmailOTPConfiguration {\n /**\n * Specify the email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the email OTP flow.\n */\n showUI?: boolean;\n\n /**\n * Device Unrecognized UI will enforce showing up to secure user's login\n *\n * When set to true (default), an improved device recognition UI will be displayed to the user,\n * prompting them to verify their login by checking their email for device approval. This feature\n * enhances authentication security.\n *\n * This param will only be affect if showUI is false. When set to false,\n * developers have the flexibility to implement their own customized UI to\n * handle device check events, providing a more tailored user experience.\n */\n deviceCheckUI?: boolean;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithOTP email will be\n * overriden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n}\n\n/**\n * Auth Events Enum\n */\nexport enum LoginWithMagicLinkEventEmit {\n Retry = 'retry',\n}\n\nexport enum LoginWithMagicLinkEventOnReceived {\n EmailSent = 'email-sent',\n EmailNotDeliverable = 'email-not-deliverable',\n}\n\nexport enum LoginWithEmailOTPEventEmit {\n VerifyEmailOtp = 'verify-email-otp',\n Cancel = 'cancel',\n}\n\nexport enum LoginWithEmailOTPEventOnReceived {\n EmailOTPSent = 'email-otp-sent',\n InvalidEmailOtp = 'invalid-email-otp',\n ExpiredEmailOtp = 'expired-email-otp',\n}\n\nexport enum DeviceVerificationEventEmit {\n Retry = 'device-retry',\n}\n\nexport enum DeviceVerificationEventOnReceived {\n DeviceApproved = 'device-approved',\n DeviceNeedsApproval = 'device-needs-approval',\n DeviceVerificationLinkExpired = 'device-verification-link-expired',\n DeviceVerificationEmailSent = 'device-verification-email-sent',\n}\n\nexport enum RecencyCheckEventEmit {\n Retry = 'Recency/auth-factor-retry',\n Cancel = 'Recency/auth-factor-verification-cancel',\n VerifyEmailOtp = 'Recency/auth-factor-verify-email-otp',\n}\n\nexport enum RecencyCheckEventOnReceived {\n PrimaryAuthFactorNeedsVerification = 'Recency/auth-factor-needs-verification',\n PrimaryAuthFactorVerified = 'Recency/auth-factor-verified',\n InvalidEmailOtp = 'Recency/auth-factor-invalid-email-otp',\n EmailExpired = 'Recency/auth-factor-verification-email-expired',\n EmailSent = 'Recency/auth-factor-verification-email-sent',\n EmailNotDeliverable = 'Recency/auth-factor-verification-email-not-deliverable',\n}\n\nexport enum UpdateEmailEventEmit {\n RetryWithNewEmail = 'UpdateEmail/retry-with-new-email',\n Cancel = 'UpdateEmail/new-email-verification-cancel',\n VerifyEmailOtp = 'UpdateEmail/new-email-verify-otp',\n}\n\nexport enum UpdateEmailEventOnReceived {\n NewAuthFactorNeedsVerification = 'UpdateEmail/new-email-needs-verification',\n EmailUpdated = 'UpdateEmail/email-updated',\n InvalidEmailOtp = 'UpdateEmail/new-email-invalid-email-otp',\n EmailExpired = 'UpdateEmail/new-email-verification-email-expired',\n EmailSent = 'UpdateEmail/new-email-verification-email-sent',\n EmailNotDeliverable = 'UpdateEmail/new-email-verification-email-not-deliverable',\n InvalidEmail = 'UpdateEmail/new-email-invalid',\n EmailAlreadyExists = 'UpdateEmail/new-email-already-exists',\n}\n\nexport enum AuthEventOnReceived {\n IDTokenCreated = 'Auth/id-token-created',\n}\n\nexport enum FarcasterLoginEventEmit {\n SuccessSignIn = 'Farcaster/success_sign_in',\n}\n\n/**\n * EventHandlers\n */\nexport type LoginWithMagicLinkEventHandlers = {\n // Event Received\n [LoginWithMagicLinkEventOnReceived.EmailSent]: () => void;\n [LoginWithMagicLinkEventOnReceived.EmailNotDeliverable]: () => void;\n\n // Event sent\n [LoginWithMagicLinkEventEmit.Retry]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithEmailOTPEventHandlers = {\n // Event Received\n [LoginWithEmailOTPEventOnReceived.EmailOTPSent]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.ExpiredEmailOtp]: () => void;\n [AuthEventOnReceived.IDTokenCreated]: (idToken: string) => void;\n [WalletEventOnReceived.WalletInfoFetched]: () => void;\n\n // Event sent\n [LoginWithEmailOTPEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [LoginWithEmailOTPEventEmit.Cancel]: () => void;\n} & DeviceVerificationEventHandlers;\n\ntype DeviceVerificationEventHandlers = {\n // Event Received\n [DeviceVerificationEventOnReceived.DeviceNeedsApproval]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationEmailSent]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationLinkExpired]: () => void;\n [DeviceVerificationEventOnReceived.DeviceApproved]: () => void;\n\n // Event sent\n [DeviceVerificationEventEmit.Retry]: () => void;\n};\n\n/**\n * Update Email\n */\n\ntype RecencyCheckEventHandlers = {\n [RecencyCheckEventOnReceived.PrimaryAuthFactorNeedsVerification]: () => void;\n [RecencyCheckEventOnReceived.PrimaryAuthFactorVerified]: () => void;\n [RecencyCheckEventOnReceived.InvalidEmailOtp]: () => void;\n [RecencyCheckEventOnReceived.EmailNotDeliverable]: () => void;\n [RecencyCheckEventOnReceived.EmailExpired]: () => void;\n [RecencyCheckEventOnReceived.EmailSent]: () => void;\n\n [RecencyCheckEventEmit.Cancel]: () => void;\n [RecencyCheckEventEmit.Retry]: () => void;\n [RecencyCheckEventEmit.VerifyEmailOtp]: (otp: string) => void;\n};\n\nexport type UpdateEmailEventHandlers = {\n [UpdateEmailEventOnReceived.NewAuthFactorNeedsVerification]: () => void;\n [UpdateEmailEventOnReceived.EmailUpdated]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmailOtp]: () => void;\n [UpdateEmailEventOnReceived.EmailNotDeliverable]: () => void;\n [UpdateEmailEventOnReceived.EmailExpired]: () => void;\n [UpdateEmailEventOnReceived.EmailSent]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmail]: () => void;\n [UpdateEmailEventOnReceived.EmailAlreadyExists]: () => void;\n\n [UpdateEmailEventEmit.Cancel]: () => void;\n [UpdateEmailEventEmit.RetryWithNewEmail]: (email?: string) => void;\n [UpdateEmailEventEmit.VerifyEmailOtp]: (otp: string) => void;\n} & RecencyCheckEventHandlers;\n","export type EthNetworkName = 'mainnet' | 'goerli' | 'sepolia';\n\nexport enum EthChainType {\n Harmony = 'HARMONY',\n}\n\nexport interface CustomNodeConfiguration {\n rpcUrl: string;\n chainId?: number;\n chainType?: EthChainType;\n}\n\nexport type EthNetworkConfiguration = EthNetworkName | CustomNodeConfiguration;\n\nexport type ProviderEnableEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n};\n","import { DeepLinkPage } from '../core/deep-link-pages';\n\nexport interface GetIdTokenConfiguration {\n /**\n * The number of seconds until the generated ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface GenerateIdTokenConfiguration extends GetIdTokenConfiguration {\n /**\n * An optional piece of data to sign with the token. Note, however, that the\n * unsigned data _will not_ be encoded in the token, only an encrypted\n * signature of the data.\n */\n attachment?: string;\n}\n\nexport interface MagicUserMetadata {\n issuer: string | null;\n publicAddress: string | null;\n email: string | null;\n phoneNumber: string | null;\n isMfaEnabled: boolean;\n recoveryFactors: [RecoveryFactor];\n}\n\ntype RecoveryFactor = {\n type: RecoveryMethodType;\n value: string;\n};\n\nexport enum RecoveryMethodType {\n PhoneNumber = 'phone_number',\n}\n\nexport interface UpdateEmailConfiguration {\n /**\n * The new email address to update to\n */\n email: string;\n\n /**\n * When `true`, a pre-built pending modal interface will\n * guide the user to check their new, followed by old emails\n * for confirmation emails.\n */\n showUI?: boolean;\n}\n\nexport interface UpdateWebAuthnInfoConfiguration {\n /**\n * WebAuthn info id\n */\n id: string;\n\n /**\n * nickname that user attempts to update to the webauth device associate to the id.\n */\n nickname: string;\n}\n\nexport interface RecoverAccountConfiguration {\n /**\n * The email to recover\n */\n email: string;\n}\n\nexport interface ShowSettingsConfiguration {\n /**\n * deep linking destination\n */\n page: DeepLinkPage;\n}\n","export type NFTResponseStatus = 'cancelled' | 'pending' | 'processed' | 'declined' | 'expired';\n\nexport type NFTResponse = {\n status: NFTResponseStatus;\n};\n\nexport interface NFTPurchaseRequest {\n nft: {\n name: string;\n imageUrl: string;\n blockchainNftId: string;\n contractAddress: string;\n network: string;\n platform: string;\n type: string;\n };\n identityPrefill: {\n firstName: string;\n lastName: string;\n dateOfBirth: string; // YYYY-MM-DD\n emailAddress: string;\n phone: string;\n address: {\n street1: string;\n street2: string;\n city: string;\n regionCode: string;\n postalCode: string;\n countryCode: string;\n };\n };\n}\n\nexport type NFTPurchaseResponse = NFTResponse & {\n errorMessage?: string;\n};\n\nexport interface NFTCheckoutRequest {\n // given by magic / found in the developer dashboard in future\n contractId: string;\n // in contract, if ERC1155… for ERC721, use token ID = 0\n tokenId: string;\n name: string;\n imageUrl: string;\n quantity?: number; // default is 1\n walletAddress?: string; // default is user's wallet address\n // If enabled, the user will be able to pay with crypto. the default is false\n isCryptoCheckoutEnabled?: boolean;\n}\n\nexport type NFTCheckoutResponse = NFTResponse;\n\nexport type NFTCheckoutEvents = {\n disconnect: () => void;\n 'nft-checkout-initiated': (rawTransaction: string) => void;\n};\n\nexport enum NftCheckoutIntermediaryEvents {\n Success = 'nft-checkout-success',\n Failure = 'nft-checkout-failure',\n Initiated = 'nft-checkout-initiated',\n Disconnect = 'disconnect',\n}\n\nexport type NftCheckoutEventHandler = {\n [NftCheckoutIntermediaryEvents.Initiated]: (rawTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Success]: (signedTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Failure]: () => void;\n};\n\nexport interface NFTTransferRequest {\n tokenId: string;\n contractAddress: string;\n quantity?: number;\n recipient?: string;\n}\n\nexport type NFTTransferResponse = NFTResponse;\n","export type GasApiResponse = {\n request_id: string;\n state: string;\n success: boolean;\n};\n\nexport type AccessListEntry = { address: string; storageKeys: Array<string> };\n\n/**\n * An ordered collection of [[AccessList]] entries.\n */\nexport type AccessList = Array<AccessListEntry>;\n\nexport interface GaslessTransactionRequest {\n /**\n * The transaction type.\n */\n type?: number;\n\n /**\n * The target of the transaction.\n */\n to?: string;\n\n /**\n * The sender of the transaction.\n */\n from?: string;\n\n /**\n * The nonce of the transaction, used to prevent replay attacks.\n */\n\n nonce?: number;\n\n /**\n * The maximum amount of gas to allow this transaction to consime.\n */\n gasLimit?: bigint;\n\n /**\n * The gas price to use for legacy transactions or transactions on\n * legacy networks.\n *\n * Most of the time the ``max*FeePerGas`` is preferred.\n */\n gasPrice?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum priority fee to pay per gas.\n */\n maxPriorityFeePerGas?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n * value used is protocol enforced to be the block's base fee.\n */\n maxFeePerGas?: bigint;\n\n /**\n * The transaction data.\n */\n data?: string;\n\n /**\n * The transaction value (in wei).\n */\n value?: bigint;\n\n /**\n * The chain ID for the network this transaction is valid on.\n */\n chainId?: bigint;\n\n /**\n * The [[link-eip-2930]] access list. Storage slots included in the access\n * list are //warmed// by pre-loading them, so their initial cost to\n * fetch is guaranteed, but then each additional access is cheaper.\n */\n accessList?: AccessList;\n\n /**\n * A custom object, which can be passed along for network-specific\n * values.\n */\n customData?: any;\n}\n\nexport enum WalletEventOnReceived {\n WalletInfoFetched = 'Wallet/wallet-info-fetched',\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/* eslint-disable */\n/* istanbul ignore file */\n\n// DO NOT CHANGE THIS FILE.\n//\n// We have to bundle `semver` ourselves due to a long-standing cyclic dependency\n// which causes Rollup to break the `satisfies` function.\n//\n// See:\n// - https://github.com/magiclabs/magic-js/issues/198\n// - https://github.com/rollup/plugins/issues/879\n// - https://github.com/npm/node-semver/issues/318\n// - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};n(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\"),n(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\"),n(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\"),n(\"MAINVERSION\",`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})`),n(\"MAINVERSIONLOOSE\",`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})`),n(\"PRERELEASEIDENTIFIER\",`(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASE\",`(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\\\.${i[o.PRERELEASEIDENTIFIER]})*))`),n(\"PRERELEASELOOSE\",`(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`),n(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\"),n(\"BUILD\",`(?:\\\\+(${i[o.BUILDIDENTIFIER]}(?:\\\\.${i[o.BUILDIDENTIFIER]})*))`),n(\"FULLPLAIN\",`v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`),n(\"FULL\",`^${i[o.FULLPLAIN]}$`),n(\"LOOSEPLAIN\",`[v=\\\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`),n(\"LOOSE\",`^${i[o.LOOSEPLAIN]}$`),n(\"GTLT\",\"((?:<|>)?=?)\"),n(\"XRANGEIDENTIFIERLOOSE\",`${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`),n(\"XRANGEIDENTIFIER\",`${i[o.NUMERICIDENTIFIER]}|x|X|\\\\*`),n(\"XRANGEPLAIN\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAIN]}$`),n(\"XRANGELOOSE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAINLOOSE]}$`),n(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),r.tildeTrimReplace=\"$1~\",n(\"TILDE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`),n(\"TILDELOOSE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"LONECARET\",\"(?:\\\\^)\"),n(\"CARETTRIM\",`(\\\\s*)${i[o.LONECARET]}\\\\s+`,!0),r.caretTrimReplace=\"$1^\",n(\"CARET\",`^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`),n(\"CARETLOOSE\",`^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"COMPARATORLOOSE\",`^${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]})$|^$`),n(\"COMPARATOR\",`^${i[o.GTLT]}\\\\s*(${i[o.FULLPLAIN]})$|^$`),n(\"COMPARATORTRIM\",`(\\\\s*)${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`,!0),r.comparatorTrimReplace=\"$1$2$3\",n(\"HYPHENRANGE\",`^\\\\s*(${i[o.XRANGEPLAIN]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAIN]})`+\"\\\\s*$\"),n(\"HYPHENRANGELOOSE\",`^\\\\s*(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s*$\"),n(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\"),n(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\"),n(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}debug_1(\"comparator\",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ANY?this.value=\"\":this.value=this.operator+this.semver.version,debug_1(\"comp\",this)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),s=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),i=this.semver.version===e.semver.version,o=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),a=cmp_1(this.semver,\"<\",e.semver,r)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),n=cmp_1(this.semver,\">\",e.semver,r)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,hyphenReplace(this.options.includePrerelease)),debug_1(\"hyphen replace\",e),e=e.replace(re$2[t$2.COMPARATORTRIM],comparatorTrimReplace),debug_1(\"comparator trim\",e,re$2[t$2.COMPARATORTRIM]),e=(e=(e=e.replace(re$2[t$2.TILDETRIM],tildeTrimReplace)).replace(re$2[t$2.CARETTRIM],caretTrimReplace)).split(/\\s+/).join(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},parseComparator=(e,r)=>(debug_1(\"comp\",e,r),e=replaceCarets(e,r),debug_1(\"caret\",e),e=replaceTildes(e,r),debug_1(\"tildes\",e),e=replaceXRanges(e,r),debug_1(\"xrange\",e),e=replaceStars(e,r),debug_1(\"stars\",e),e),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===s||\"<\"===s?\"<0.0.0-0\":\"*\":s&&c?(p&&(o=0),a=0,\">\"===s?(s=\">=\",p?(i=+i+1,o=0,a=0):(o=+o+1,a=0)):\"<=\"===s&&(s=\"<\",p?i=+i+1:o=+o+1),\"<\"===s&&(n=\"-0\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${e?\"-0\":\"\"}`} ${E=isX(p)?\"\":isX(l)?`<${+p+1}.0.0-0`:isX(c)?`<${p}.${+l+1}.0-0`:$?`<=${p}.${l}.${c}-${$}`:e?`<${p}.${l}.${+c+1}-0`:`<=${E}`}`.trim(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n","function percentToByte(p: string) {\n return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n return JSON.parse(atobUTF8(queryString));\n}\n","import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@magic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { Extension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Magic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class MagicSDKError extends Error {\n __proto__ = Error;\n\n constructor(public code: SDKErrorCode, public rawMessage: string) {\n super(`Magic SDK Error: [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicSDKError.prototype);\n }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Magic `<iframe>` context.\n */\nexport class MagicRPCError extends Error {\n __proto__ = Error;\n\n public code: RPCErrorCode | number;\n public rawMessage: string;\n public data: any;\n\n constructor(sourceError?: JsonRpcError | null) {\n super();\n\n const codeNormalized = Number(sourceError?.code);\n this.rawMessage = sourceError?.message || 'Internal error';\n this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode.InternalError;\n this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;\n this.data = sourceError?.data || undefined;\n\n Object.setPrototypeOf(this, MagicRPCError.prototype);\n }\n}\n\n/**\n * In contrast to `SDKError` objects, this \"warning\" type communicates important\n * context that does not rise to the level of an exception. These should be\n * logged rather than thrown.\n */\nexport class MagicSDKWarning {\n public message: string;\n\n constructor(public code: SDKWarningCode, public rawMessage: string) {\n this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n/**\n * This error type is reserved for communicating errors that arise during\n * execution of Magic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class MagicExtensionError<TData = any> extends Error {\n __proto__ = Error;\n\n constructor(ext: Extension<string>, public code: string | number, public rawMessage: string, public data: TData) {\n super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicExtensionError.prototype);\n }\n}\n\n/**\n * In contrast to `MagicExtensionError` objects, this \"warning\" type\n * communicates important context that does not rise to the level of an\n * exception. These should be logged rather than thrown.\n */\nexport class MagicExtensionWarning {\n public message: string;\n\n constructor(ext: Extension<string>, public code: string | number, public rawMessage: string) {\n this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n// --- SDK error factories\n\nexport function createMissingApiKeyError() {\n return new MagicSDKError(\n SDKErrorCode.MissingApiKey,\n 'Please provide an API key that you acquired from the Magic developer dashboard.',\n );\n}\n\nexport function createModalNotReadyError() {\n return new MagicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready.');\n}\n\nexport function createMalformedResponseError() {\n return new MagicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Magic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n return new MagicSDKError(\n SDKErrorCode.ExtensionNotInitialized,\n `Extensions must be initialized with a Magic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n );\n}\n\nexport function createIncompatibleExtensionsError(extensions: Extension<string>[]) {\n let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n extensions\n .filter((ext) => typeof ext.compat !== 'undefined' && ext.compat !== null)\n .forEach((ext) => {\n const compat = ext.compat![SDKEnvironment.sdkName];\n\n /* istanbul ignore else */\n if (typeof compat === 'string') {\n msg += `\\n - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n } else if (!compat) {\n msg += `\\n - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n }\n\n // Else case is irrelevant here here\n // (we filter out extensions with missing `compat` field)\n });\n\n return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);\n}\n\nexport function createInvalidArgumentError(options: {\n procedure: string;\n argument: number;\n expected: string;\n received: string;\n}) {\n /**\n * Parses the argument index (given by `argument`) to attach the correct ordinal suffix.\n * (i.e.: 1st, 2nd, 3rd, 4th, etc.)\n */\n const ordinalSuffix = (i: number) => {\n const iAdjusted = i + 1; // Argument is zero-indexed.\n const j = iAdjusted % 10;\n const k = iAdjusted % 100;\n if (j === 1 && k !== 11) return `${iAdjusted}st`;\n if (j === 2 && k !== 12) return `${iAdjusted}nd`;\n if (j === 3 && k !== 13) return `${iAdjusted}rd`;\n return `${iAdjusted}th`;\n };\n\n return new MagicSDKError(\n SDKErrorCode.InvalidArgument,\n `Invalid ${ordinalSuffix(options.argument)} argument given to \\`${options.procedure}\\`.\\n` +\n ` Expected: \\`${options.expected}\\`\\n` +\n ` Received: \\`${options.received}\\``,\n );\n}\n\n// --- SDK warning factories\n\nexport function createDuplicateIframeWarning() {\n return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createSynchronousWeb3MethodWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.SyncWeb3Method,\n 'Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead.',\n );\n}\n\nexport function createReactNativeEndpointConfigurationWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.ReactNativeEndpointConfiguration,\n `CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \\`endpoint\\` parameter SHOULD NOT be provided. The Magic \\`<iframe>\\` is automatically wrapped by a WebView pointed at \\`${SDKEnvironment.defaultEndpoint}\\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`,\n );\n}\n\nexport function createDeprecationWarning(options: {\n method: string;\n removalVersions: {\n [P in\n | 'magic-sdk'\n | '@magic-sdk/react-native'\n | '@magic-sdk/react-native-bare'\n | '@magic-sdk/react-native-expo']: string;\n };\n useInstead?: string;\n}) {\n const { method, removalVersions, useInstead } = options;\n\n const removalVersion = removalVersions[SDKEnvironment.sdkName];\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from \\`${SDKEnvironment.sdkName}\\` in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n\n return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n","/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intesection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, MagicPayloadMethod, RPCErrorCode } from '@magic-sdk/types';\n\n/**\n * Assert `value` is `undefined`.\n */\nfunction isUndefined(value: any): value is undefined {\n return typeof value === 'undefined';\n}\n\n/**\n * Assert `value` is `null`.\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\n/**\n * Assert `value` is `null` or `undefined`.\n */\nfunction isNil(value: any): value is null | undefined {\n return isNull(value) || isUndefined(value);\n}\n\n/**\n * Assert `value` is a `JsonRpcRequestPayload` object.\n */\nexport function isJsonRpcRequestPayload(value?: JsonRpcRequestPayload): value is JsonRpcRequestPayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params)\n );\n}\n\n/**\n * Assert `value` is a `JsonRpcResponsePayload` object.\n */\nexport function isJsonRpcResponsePayload(value: any): value is JsonRpcResponsePayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error))\n );\n}\n\n/**\n * Assert `value` is a Magic SDK payload method identifier.\n */\nexport function isMagicPayloadMethod(value?: any): value is MagicPayloadMethod {\n if (isNil(value)) return false;\n return typeof value === 'string' && Object.values(MagicPayloadMethod).includes(value as any);\n}\n\n/**\n * Assert `value` is an expected JSON RPC error code.\n */\nexport function isJsonRpcErrorCode(value?: any): value is RPCErrorCode {\n if (isNil(value)) return false;\n return typeof value === 'number' && Object.values(RPCErrorCode).includes(value);\n}\n\n/**\n * Assert `value` is an empty, plain object.\n */\nexport function isEmpty(value?: any): value is {} {\n if (!value) return true;\n\n for (const key in value) {\n /* istanbul ignore else */\n if (Object.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n","import type localForage from 'localforage';\nimport type { ViewController } from './view-controller';\nimport type { SDKBase } from './sdk';\nimport type { WithExtensions } from '../modules/base-extension';\n\ntype ConstructorOf<C> = { new (...args: any[]): C };\n\n/**\n * A structure containing details about the current environment.\n * This is guaranteed to be populated before the SDK is instantiated.\n */\nexport interface SDKEnvironment {\n sdkName: 'magic-sdk' | '@magic-sdk/react-native' | '@magic-sdk/react-native-bare' | '@magic-sdk/react-native-expo';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\n bundleId?: string | null;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n SDKBaseCtor: ConstructorOf<SDK>,\n environment: SDKEnvironment,\n): WithExtensions<SDK> {\n Object.assign(SDKEnvironment, environment);\n return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n 'magic-sdk': 'magic-sdk' as const,\n '@magic-sdk/react-native': 'magic-sdk-rn' as const,\n '@magic-sdk/react-native-bare': 'magic-sdk-rn-bare' as const,\n '@magic-sdk/react-native-expo': 'magic-sdk-rn-expo' as const,\n};\n","import {\n MagicPayloadMethod,\n LoginWithMagicLinkConfiguration,\n LoginWithSmsConfiguration,\n LoginWithEmailOTPConfiguration,\n LoginWithEmailOTPEventHandlers,\n LoginWithMagicLinkEventHandlers,\n UpdateEmailConfiguration,\n DeviceVerificationEventEmit,\n LoginWithEmailOTPEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n RecencyCheckEventEmit,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { isMajorVersionAtLeast } from '../util/version-check';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\n\nexport const ProductConsolidationMethodRemovalVersions = {\n 'magic-sdk': 'v18.0.0',\n '@magic-sdk/react-native': 'v14.0.0',\n '@magic-sdk/react-native-bare': 'v19.0.0',\n '@magic-sdk/react-native-expo': 'v19.0.0',\n};\n\nexport class AuthModule extends BaseModule {\n /**\n * Initiate the \"magic link\" login flow for a user. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n */\n public loginWithMagicLink(configuration: LoginWithMagicLinkConfiguration) {\n const isRNMobilePackage =\n SDKEnvironment.sdkName === '@magic-sdk/react-native' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n // RN SDK major version is greater than or equal to v19\n if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {\n throw new Error(\n 'loginWithMagicLink() is deprecated for this package, please utlize a passcode method like loginWithSMS or loginWithEmailOTP instead.',\n );\n } else if (isRNMobilePackage) {\n // RN SDK major version is less than v19\n createDeprecationWarning({\n method: 'auth.loginWithMagicLink()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'auth.loginWithEmailOTP()',\n }).log();\n }\n\n const { email, showUI = true, redirectURI, overrides } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI, overrides }],\n );\n return this.request<string | null, LoginWithMagicLinkEventHandlers>(requestPayload);\n }\n\n /**\n * Initiate an SMS login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithSMS(configuration: LoginWithSmsConfiguration) {\n const { phoneNumber } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI: true }],\n );\n return this.request<string | null>(requestPayload);\n }\n\n /**\n * Initiate an Email with OTP login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithEmailOTP(configuration: LoginWithEmailOTPConfiguration) {\n const { email, showUI, deviceCheckUI, overrides } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithEmailOTPTestMode : MagicPayloadMethod.LoginWithEmailOTP,\n [{ email, showUI, deviceCheckUI, overrides }],\n );\n const handle = this.request<string | null, LoginWithEmailOTPEventHandlers>(requestPayload);\n if (!deviceCheckUI && handle) {\n handle.on(DeviceVerificationEventEmit.Retry, () => {\n this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id as any)();\n });\n }\n if (!showUI && handle) {\n handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id as any)();\n });\n }\n return handle;\n }\n\n /**\n * Log a user in with a special one-time-use credential token. This is\n * currently used during magic link flows with a configured redirect to\n * hydrate the user session at the end of the flow. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n *\n * If no argument is provided, a credential is automatically parsed from\n * `window.location.search`.\n */\n public loginWithCredential(credentialOrQueryString?: string) {\n let credentialResolved = credentialOrQueryString ?? '';\n\n if (!credentialOrQueryString && SDKEnvironment.platform === 'web') {\n credentialResolved = window.location.search;\n\n // Remove the query from the redirect callback as a precaution.\n const urlWithoutQuery = window.location.origin + window.location.pathname;\n window.history.replaceState(null, '', urlWithoutQuery);\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithCredentialTestMode : MagicPayloadMethod.LoginWithCredential,\n [credentialResolved],\n );\n\n return this.request<string | null>(requestPayload);\n }\n\n // Custom Auth\n public setAuthorizationToken(jwt: string) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);\n return this.request<boolean>(requestPayload);\n }\n\n public updateEmailWithUI(configuration: UpdateEmailConfiguration) {\n const { email, showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UpdateEmailTestMode : MagicPayloadMethod.UpdateEmail,\n [{ email, showUI }],\n );\n\n const handle = this.request<string | null, UpdateEmailEventHandlers>(requestPayload);\n\n if (!showUI) {\n handle.on(RecencyCheckEventEmit.Retry, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as any)(newEmail);\n });\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n }\n return handle;\n }\n}\n","import {\n JsonRpcRequestPayload,\n MagicOutgoingWindowMessage,\n MagicIncomingWindowMessage,\n MagicPayloadMethod,\n IntermediaryEvents,\n} from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n constructor(protected sdk: SDKBase) {}\n\n /**\n * The `ViewController` for the SDK instance registered to this module.\n */\n protected get overlay(): ViewController {\n return (this.sdk as any).overlay;\n }\n\n /**\n * Emits promisified requests to the Magic `<iframe>` context.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n const responsePromise = this.overlay.post<ResultType>(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n standardizeJsonRpcRequestPayload(payload),\n );\n\n // PromiEvent-ify the response.\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n responsePromise\n .then((res) => {\n cleanupEvents();\n if (res.hasError) reject(new MagicRPCError(res.payload.error));\n else if (res.hasResult) resolve(res.payload.result as ResultType);\n else throw createMalformedResponseError();\n })\n .catch((err) => {\n cleanupEvents();\n reject(err);\n });\n });\n\n // Listen for events from the `<iframe>` associated with the current payload\n // and emit those to `PromiEvent` subscribers.\n const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, (evt) => {\n const { response } = evt.data;\n\n if (response.id === payload.id && response.result?.event) {\n const { event, params = [] } = response.result;\n promiEvent.emit(event, ...params);\n }\n });\n\n return promiEvent;\n }\n\n // Creates an intermediary event which takes a typed event and a payload ID\n protected createIntermediaryEvent<T = Function>(eventType: IntermediaryEvents, payloadId: string) {\n const e = (args: any) => {\n const res = createJsonRpcRequestPayload(MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);\n this.request(res);\n };\n return e as unknown as T;\n }\n}\n","function* createIntGenerator(): Generator<number, number, void> {\n let index = 0;\n\n while (true) {\n /* istanbul ignore next */\n if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n else index = 0;\n }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n return intGenerator.next().value;\n}\n","/* eslint-disable no-param-reassign */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Magic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n Object.defineProperty(payload, payloadPreprocessedSymbol, {\n value: true,\n enumerable: false,\n });\n\n return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n if (!isPayloadPreprocessed(payload)) {\n payload.jsonrpc = payload.jsonrpc ?? '2.0';\n payload.id = getPayloadId();\n payload.method = payload.method ?? 'noop';\n payload.params = payload.params ?? [];\n\n markPayloadAsPreprocessed(payload);\n }\n\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\n return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Magic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n return markPayloadAsPreprocessed({\n params,\n method,\n jsonrpc: '2.0',\n id: getPayloadId(),\n });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n private readonly _jsonrpc: string;\n private readonly _id: string | number | null;\n private _result?: ResultType | null;\n private _error?: JsonRpcError | null;\n\n constructor(responsePayload: JsonRpcResponsePayload);\n constructor(response: JsonRpcResponse<ResultType>);\n constructor(requestPayload: JsonRpcRequestPayload);\n constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n if (responseOrPayload instanceof JsonRpcResponse) {\n this._jsonrpc = responseOrPayload.payload.jsonrpc;\n this._id = responseOrPayload.payload.id;\n this._result = responseOrPayload.payload.result;\n this._error = responseOrPayload.payload.error;\n } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = responseOrPayload.result;\n this._error = responseOrPayload.error;\n } else {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = undefined;\n this._error = undefined;\n }\n }\n\n public applyError(error?: JsonRpcError | null) {\n this._error = error;\n return this;\n }\n\n public applyResult(result?: ResultType | null) {\n this._result = result;\n return this;\n }\n\n public get hasError() {\n return typeof this._error !== 'undefined' && this._error !== null;\n }\n\n public get hasResult() {\n return typeof this._result !== 'undefined';\n }\n\n public get payload(): JsonRpcResponsePayload {\n return {\n jsonrpc: this._jsonrpc,\n id: this._id,\n result: this._result,\n error: this._error,\n };\n }\n}\n","import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Magic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n const emitter = new TypedEmitter<Events>();\n\n const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n method: T1,\n source: T2,\n ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n return (...args: any[]) => {\n (emitter as any)[method].apply(emitter, args);\n return source;\n };\n };\n\n const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n return (...args: any[]) => {\n return (emitter as any)[method].apply(emitter, args);\n };\n };\n\n return {\n emitter,\n createChainingEmitterMethod,\n createBoundEmitterMethod,\n };\n}\n","import { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accomodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): ExtendedPromise<TResult1 | TResult2> & this;\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n ): ExtendedPromise<T | TResult> & this;\n\n finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n done: (result: TResult) => void;\n error: (reason: any) => void;\n settled: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n resolve: (value: TResult | PromiseLike<TResult>) => void,\n reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n const promise = createPromise(executor);\n const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n TEvents & DefaultEvents<TResult>\n >();\n\n // We save the original `Promise` methods to the following symbols so we can\n // access them internally.\n const thenSymbol = Symbol('Promise.then');\n const catchSymbol = Symbol('Promise.catch');\n const finallySymbol = Symbol('Promise.finally');\n\n /**\n * Ensures the next object in the `PromiEvent` chain is overloaded with\n * `EventEmitter` methods.\n */\n const createChainingPromiseMethod =\n (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n (...args: any[]) => {\n const nextPromise = (source as any)[method].apply(source, args);\n return promiEvent(nextPromise);\n };\n\n /**\n * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n * `Promise` object.\n */\n const promiEvent = (source: any) => {\n return Object.assign(source, {\n [promiEventBrand]: true,\n\n [thenSymbol]: source[thenSymbol] || source.then,\n [catchSymbol]: source[catchSymbol] || source.catch,\n [finallySymbol]: source[finallySymbol] || source.finally,\n\n then: createChainingPromiseMethod(thenSymbol, source),\n catch: createChainingPromiseMethod(catchSymbol, source),\n finally: createChainingPromiseMethod(finallySymbol, source),\n\n on: createChainingEmitterMethod('on', source),\n once: createChainingEmitterMethod('once', source),\n addListener: createChainingEmitterMethod('addListener', source),\n\n off: createChainingEmitterMethod('off', source),\n removeListener: createChainingEmitterMethod('removeListener', source),\n removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n emit: createBoundEmitterMethod('emit'),\n eventNames: createBoundEmitterMethod('eventNames'),\n listeners: createBoundEmitterMethod('listeners'),\n listenerCount: createBoundEmitterMethod('listenerCount'),\n });\n };\n\n const result = promiEvent(\n promise.then(\n (resolved) => {\n // Emit default completion events and resolve result.\n result.emit('done', resolved);\n result.emit('settled');\n return resolved;\n },\n\n (err) => {\n // Emit default error events and re-throw.\n result.emit('error', err);\n result.emit('settled');\n throw err;\n },\n ),\n );\n\n return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n return new Promise<TResult>((resolve, reject) => {\n const result = executor(resolve, reject);\n Promise.resolve(result).catch(reject);\n });\n}\n","export function isMajorVersionAtLeast(version: string, majorVersion: number): boolean {\n // Split the version string into major, minor, and patch versions\n const [major] = version.split('.').map(Number);\n\n // Check if the major version is at least the required major version\n return major >= majorVersion;\n}\n","import {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UserInfo,\n RequestUserInfoScope,\n RecoverAccountConfiguration,\n ShowSettingsConfiguration,\n} from '@magic-sdk/types';\nimport { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\nimport { ProductConsolidationMethodRemovalVersions } from './auth';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\nimport { createPromiEvent } from '../util';\n\ntype UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n public getIdToken(configuration?: GetIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetIdTokenTestMode : MagicPayloadMethod.GetIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public generateIdToken(configuration?: GenerateIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GenerateIdTokenTestMode : MagicPayloadMethod.GenerateIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public async getInfo() {\n const activeWallet = await getItem(this.localForageKey);\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, [{ walletType: activeWallet }]);\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public isLoggedIn() {\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n let cachedIsLoggedIn = false;\n if (this.sdk.useStorageCache) {\n cachedIsLoggedIn = (await getItem(this.localForageIsLoggedInKey)) === 'true';\n\n // if isLoggedIn is true on storage, optimistically resolve with true\n // if it is false, we use `usr.isLoggedIn` as the source of truth.\n if (cachedIsLoggedIn) {\n resolve(true);\n }\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n const isLoggedInResponse = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n if (isLoggedInResponse) {\n setItem(this.localForageIsLoggedInKey, true);\n } else {\n removeItem(this.localForageIsLoggedInKey);\n }\n if (cachedIsLoggedIn && !isLoggedInResponse) {\n this.emitUserLoggedOut(true);\n }\n }\n resolve(isLoggedInResponse);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n public logout() {\n removeItem(this.localForageKey);\n removeItem(this.localForageIsLoggedInKey);\n clearDeviceShares();\n\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n const response = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n this.emitUserLoggedOut(response);\n }\n resolve(response);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /* Request email address from logged in user */\n public requestInfoWithUI(scope?: RequestUserInfoScope) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n public showSettings(configuration?: ShowSettingsConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n [configuration],\n );\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public recoverAccount(configuration: RecoverAccountConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.RecoverAccountTestMode : MagicPayloadMethod.RecoverAccount,\n [configuration],\n );\n return this.request<boolean | null>(requestPayload);\n }\n\n public revealPrivateKey() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK);\n return this.request<boolean>(requestPayload);\n }\n\n // Deprecating\n public getMetadata() {\n createDeprecationWarning({\n method: 'user.getMetadata()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.getInfo()',\n }).log();\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetMetadataTestMode : MagicPayloadMethod.GetMetadata,\n );\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public onUserLoggedOut(callback: UserLoggedOutCallback): void {\n this.userLoggedOutCallbacks.push(callback);\n }\n\n // Private members\n private emitUserLoggedOut(loggedOut: boolean): void {\n this.userLoggedOutCallbacks.forEach((callback) => {\n callback(loggedOut);\n });\n }\n\n private localForageKey = 'mc_active_wallet';\n private localForageIsLoggedInKey = 'magic_auth_is_logged_in';\n private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n","import { SDKEnvironment } from '../core/sdk-environment';\n\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n return async (...args: any[]) => {\n /* istanbul ignore else */\n if (!lf) lf = await SDKEnvironment.configureStorage();\n await lf.ready();\n return (lf[method] as any)(...args);\n };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n","/* eslint-disable no-bitwise */\nexport function uuid() {\n const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n // set the version bit to v4\n u[6] = (u[6] & 0x0f) | 0x40;\n\n // set the variant bit to \"don't care\" (yes, the RFC\n // calls it that)\n u[8] = (u[8] & 0xbf) | 0x80;\n\n // hex encode them and add the dashes\n let uid = '';\n uid += u[0].toString(16);\n uid += u[1].toString(16);\n uid += u[2].toString(16);\n uid += u[3].toString(16);\n uid += '-';\n\n uid += u[4].toString(16);\n uid += u[5].toString(16);\n uid += '-';\n\n uid += u[6].toString(16);\n uid += u[7].toString(16);\n uid += '-';\n\n uid += u[8].toString(16);\n uid += u[9].toString(16);\n uid += '-';\n\n uid += u[10].toString(16);\n uid += u[11].toString(16);\n uid += u[12].toString(16);\n uid += u[13].toString(16);\n uid += u[14].toString(16);\n uid += u[15].toString(16);\n\n return uid;\n}\n","import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n removeItem(STORE_KEY_PUBLIC_JWK);\n removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n // will return undefiend is webcrypto is not supported\n const publicJwk = await getPublicKey();\n\n if (!publicJwk) {\n console.info('unable to create public key or webcrypto is unsupported');\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n if (!privateJwk || !subtle) {\n console.info('unable to find private key or webcrypto unsupported');\n return undefined;\n }\n\n const claims = {\n iat: Math.floor(new Date().getTime() / 1000),\n jti: uuid(),\n };\n\n const headers = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk: publicJwk,\n };\n\n const jws = {\n protected: strToUrlBase64(JSON.stringify(headers)),\n claims: strToUrlBase64(JSON.stringify(claims)),\n };\n\n const data = strToUint8(`${jws.protected}.${jws.claims}`);\n const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n\n if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n await generateWCKP();\n }\n\n return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n // to avoid a nasty babel bug we have to hoist this above the await ourselves\n // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n false, // need to export the public key, while keep private key non-extractable\n ['sign'],\n );\n\n const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n const escstr = encodeURIComponent(str);\n // replaces any uri escape sequence, such as %0A,\n // with binary escape, such as 0x0A\n return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n let bin = '';\n uint8.forEach((code) => {\n bin += String.fromCharCode(code);\n });\n return binToUrlBase64(bin);\n}\n","import { getItem, iterate, removeItem, setItem } from './storage';\nimport { isWebCryptoSupported } from './web-crypto';\n\nexport const DEVICE_SHARE_KEY = 'ds';\nexport const ENCRYPTION_KEY_KEY = 'ek';\nexport const INITIALIZATION_VECTOR_KEY = 'iv';\n\nconst ALGO_NAME = 'AES-GCM'; // for encryption\nconst ALGO_LENGTH = 256;\n\nexport async function clearDeviceShares() {\n const keysToRemove: string[] = [];\n await iterate((value, key, iterationNumber) => {\n if (key.startsWith(`${DEVICE_SHARE_KEY}_`)) {\n keysToRemove.push(key);\n }\n });\n for (const key of keysToRemove) {\n // eslint-disable-next-line no-await-in-loop\n await removeItem(key);\n }\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function getOrCreateInitVector() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { crypto } = window;\n const existingIv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array;\n if (existingIv) {\n return existingIv;\n }\n\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for AES-GCM\n return iv;\n}\n\nasync function getOrCreateEncryptionKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { subtle } = window.crypto;\n const existingKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n if (existingKey) {\n return existingKey;\n }\n\n const key = await subtle.generateKey(\n { name: ALGO_NAME, length: ALGO_LENGTH },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n return key;\n}\n\nexport async function encryptAndPersistDeviceShare(deviceShareBase64: string, networkHash: string): Promise<void> {\n const iv = await getOrCreateInitVector();\n const encryptionKey = await getOrCreateEncryptionKey();\n\n if (!iv || !encryptionKey || !deviceShareBase64) {\n return;\n }\n const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);\n\n const { subtle } = window.crypto;\n\n const encryptedData = await subtle.encrypt(\n {\n name: ALGO_NAME,\n iv,\n },\n encryptionKey,\n decodedDeviceShare,\n );\n\n // The encrypted device share we store is a base64 encoded string representation\n // of the magic kms encrypted client share encrypted with webcrypto\n const encryptedDeviceShare = arrayBufferToBase64(encryptedData);\n\n await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);\n await setItem(ENCRYPTION_KEY_KEY, encryptionKey);\n await setItem(INITIALIZATION_VECTOR_KEY, iv);\n}\n\nexport async function getDecryptedDeviceShare(networkHash: string): Promise<string | undefined> {\n const encryptedDeviceShare = await getItem<string>(`${DEVICE_SHARE_KEY}_${networkHash}`);\n const iv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array; // use existing encryption key and initialization vector\n const encryptionKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n\n if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const ab = await subtle.decrypt({ name: ALGO_NAME, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));\n\n return arrayBufferToBase64(ab);\n}\n","/**\n * Builds a `URL` object safely.\n */\nexport function createURL(url: string, base?: string): URL {\n // Safari raises an error if `undefined` is given to the second argument of\n // the `URL` constructor.\n return base ? new URL(url, base) : new URL(url);\n}\n","import {\n Events,\n GasApiResponse,\n MagicPayloadMethod,\n GaslessTransactionRequest,\n RequestUserInfoScope,\n UserEnv,\n UserInfo,\n WalletInfo,\n Wallets,\n} from '@magic-sdk/types';\n\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\nimport { setItem, getItem, removeItem } from '../util/storage';\nimport { ProductConsolidationMethodRemovalVersions } from './auth';\nimport { createPromiEvent } from '../util';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\n\nexport type ConnectWithUiEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n wallet_selected: (params: { wallet: Wallets }) => any;\n};\n\nexport class WalletModule extends BaseModule {\n /* Prompt Magic's Login Form */\n public connectWithUI() {\n const promiEvent = createPromiEvent<string[], ConnectWithUiEvents>(async (resolve, reject) => {\n try {\n // If within metamask wallet browser, auto-connect without any UI (if dapp has metamask enabled)\n if (this.isMetaMaskBrowser() && (await this.isWalletEnabled(Wallets.MetaMask))) {\n const result = await this.autoConnectIfWalletBrowser(Wallets.MetaMask);\n resolve(result);\n return;\n }\n // If within coinbase wallet browser, auto-connect without any UI (if dapp has coinbase enabled)\n if (this.isCoinbaseWalletBrowser() && (await this.isWalletEnabled(Wallets.CoinbaseWallet))) {\n const result = await this.autoConnectIfWalletBrowser(Wallets.CoinbaseWallet);\n resolve(result);\n return;\n }\n const userEnv = this.getUserEnv();\n const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login, [userEnv]);\n const loginRequest = this.request<string[], ConnectWithUiEvents>(loginRequestPayload);\n loginRequest.on(Events.WalletSelected as any, (params: { wallet: Wallets }) =>\n this.handleWalletSelected({ ...params, payloadId: loginRequestPayload.id as number }),\n );\n loginRequest.on('id-token-created' as any, (params: { idToken: string }) => {\n promiEvent.emit('id-token-created', params);\n });\n const result = await loginRequest;\n if ((result as any).error) reject(result);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n return promiEvent;\n }\n\n /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */\n public showUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowUI));\n }\n\n public showAddress() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowAddress));\n }\n\n public showSendTokensUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowSendTokensUI));\n }\n\n public showOnRamp() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowOnRamp));\n }\n\n public showNFTs() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowNFTs));\n }\n\n public showBalances() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowBalances));\n }\n\n public sendGaslessTransaction(address: string, transaction: GaslessTransactionRequest) {\n return this.request<GasApiResponse>(\n createJsonRpcRequestPayload(MagicPayloadMethod.SendGaslessTransaction, [address, transaction]),\n );\n }\n\n /* Get user info such as the wallet type they are logged in with */\n // deprecating\n public async getInfo() {\n createDeprecationWarning({\n method: 'wallet.getInfo()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.getInfo()',\n }).log();\n const activeWallet = await getItem(this.localForageKey);\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, [{ walletType: activeWallet }]);\n return this.request<WalletInfo>(requestPayload);\n }\n\n /* Logout user */\n // deprecating\n public disconnect() {\n createDeprecationWarning({\n method: 'wallet.disconnect()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.logout()',\n }).log();\n removeItem(this.localForageKey);\n clearDeviceShares();\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Disconnect);\n return this.request<boolean>(requestPayload);\n }\n\n /* Request email address from logged in user */\n // deprecating\n public requestUserInfoWithUI(scope?: RequestUserInfoScope) {\n createDeprecationWarning({\n method: 'wallet.requestUserInfoWithUI()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.requestUserInfoWithUI()',\n }).log();\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n /* Returns the provider for the connected wallet */\n public async getProvider(): Promise<any> {\n const activeWallet = await getItem(this.localForageKey);\n switch (activeWallet) {\n case Wallets.MetaMask:\n return this.getMetaMaskProvider();\n case Wallets.CoinbaseWallet:\n return this.getCoinbaseProvider();\n default:\n return this.sdk.rpcProvider;\n }\n }\n\n /* Private methods */\n\n private localForageKey = 'mc_active_wallet';\n\n /* MetaMask */\n private isMetaMaskInstalled(): boolean {\n return (\n (window as any).ethereum?.isMetaMask ||\n !!(window as any).ethereum?.providers?.find((provider: any) => provider?.isMetaMask)\n );\n }\n\n private isMetaMaskBrowser(): boolean {\n return this.isMobile() && this.isMetaMaskInstalled();\n }\n\n private getMetaMaskProvider(): any {\n return (window as any).ethereum?.providers?.find((p: any) => p?.isMetaMask) || (window as any).ethereum;\n }\n\n private connectToMetaMask(): Promise<string[]> {\n // Redirect to MetaMask app if user selects MetaMask on mobile\n if (this.isMobile() && !this.isMetaMaskInstalled()) {\n const metaMaskDeepLink = `https://metamask.app.link/dapp/${window.location.href.replace(/(^\\w+:|^)\\/\\//, '')}`;\n window.location.href = metaMaskDeepLink;\n }\n return this.getMetaMaskProvider().request({ method: 'eth_requestAccounts' });\n }\n\n /* Coinbase Wallet */\n private isCoinbaseWalletInstalled(): boolean {\n return (\n (window as any).ethereum?.isCoinbaseWallet ||\n !!(window as any).ethereum?.providers?.find((provider: any) => provider?.isCoinbaseWallet)\n );\n }\n\n private isCoinbaseWalletBrowser(): boolean {\n return !!(window as any).ethereum?.isCoinbaseBrowser;\n }\n\n private getCoinbaseProvider(): any {\n return (window as any).ethereum?.providers?.find((p: any) => p?.isCoinbaseWallet) || (window as any).ethereum;\n }\n\n private connectToCoinbaseWallet(): Promise<string[]> {\n // Redirect to Coinbase Wallet app if user selects Coinbase Wallet on mobile\n if (this.isMobile() && !this.isCoinbaseWalletBrowser()) {\n const coinbaseWalletDeepLink = `https://go.cb-w.com/dapp?cb_url=${encodeURIComponent(window.location.href)}`;\n window.location.href = coinbaseWalletDeepLink;\n }\n const provider = this.getCoinbaseProvider();\n return provider.request({ method: 'eth_requestAccounts' });\n }\n\n /* Helpers */\n private isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Silk|Opera Mini/i.test(\n navigator.userAgent,\n );\n }\n\n private getUserEnv(): UserEnv {\n return {\n env: {\n isMetaMaskInstalled: this.isMetaMaskInstalled(),\n isCoinbaseWalletInstalled: this.isCoinbaseWalletInstalled(),\n },\n };\n }\n\n private connectToThirdPartyWallet(provider: Wallets): Promise<any> {\n switch (provider) {\n case Wallets.MetaMask:\n return this.connectToMetaMask();\n case Wallets.CoinbaseWallet:\n return this.connectToCoinbaseWallet();\n default:\n throw new Error(`Invalid provider: ${provider}. Must be one of \"metamask\" or \"coinbase_wallet\".`);\n }\n }\n\n private isWalletEnabled(wallet: Wallets): Promise<boolean> {\n const isWalletEnabled = createJsonRpcRequestPayload('mc_is_wallet_enabled', [{ wallet }]);\n return this.request<boolean>(isWalletEnabled);\n }\n\n /* Triggers connection to wallet, emits success/reject event back to iframe */\n private async handleWalletSelected(params: { wallet: Wallets; payloadId: number }) {\n try {\n const address = await this.connectToThirdPartyWallet(params.wallet);\n await setItem(this.localForageKey, params.wallet);\n this.createIntermediaryEvent(Events.WalletConnected as any, params.payloadId as any)(address);\n } catch (error) {\n console.error(error);\n this.createIntermediaryEvent(Events.WalletRejected as any, params.payloadId as any)();\n }\n }\n\n private async autoConnectIfWalletBrowser(wallet: Wallets): Promise<string[]> {\n let address;\n if (wallet === Wallets.MetaMask) {\n address = await this.getMetaMaskProvider().request({ method: 'eth_requestAccounts' });\n }\n if (wallet === Wallets.CoinbaseWallet) {\n address = await this.getCoinbaseProvider().request({ method: 'eth_requestAccounts' });\n }\n await setItem(this.localForageKey, wallet);\n const autoConnectPayload = createJsonRpcRequestPayload(MagicPayloadMethod.AutoConnect, [{ wallet, address }]);\n const autoConnectRequest = this.request<string[]>(autoConnectPayload);\n return autoConnectRequest;\n }\n}\n","/* eslint-disable consistent-return, prefer-spread */\n\nimport {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\n ProviderEnableEvents,\n MagicPayloadMethod,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createInvalidArgumentError, MagicRPCError, createSynchronousWeb3MethodWarning } from '../core/sdk-exceptions';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload, JsonRpcResponse } from '../core/json-rpc';\nimport { PromiEvent } from '../util/promise-tools';\nimport { createTypedEmitter, EventsDefinition, TypedEmitter } from '../util/events';\n\nconst { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();\n\n/** */\nexport class RPCProviderModule extends BaseModule implements TypedEmitter {\n // Implements EIP 1193:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n\n public readonly isMagic = true;\n\n /* eslint-disable prettier/prettier */\n public sendAsync(payload: Partial<JsonRpcRequestPayload>, onRequestComplete: JsonRpcRequestCallback): void;\n public sendAsync(payload: Partial<JsonRpcRequestPayload>[], onRequestComplete: JsonRpcBatchRequestCallback): void;\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void;\n /* eslint-enable prettier/prettier */\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void {\n if (!onRequestComplete) {\n throw createInvalidArgumentError({\n procedure: 'Magic.rpcProvider.sendAsync',\n argument: 1,\n expected: 'function',\n received: onRequestComplete === null ? 'null' : typeof onRequestComplete,\n });\n }\n\n if (Array.isArray(payload)) {\n this.overlay\n .post(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n payload.map((p) => {\n const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n this.prefixPayloadMethodForTestMode(standardizedPayload);\n return standardizedPayload;\n }),\n )\n .then((batchResponse) => {\n (onRequestComplete as JsonRpcBatchRequestCallback)(\n null,\n batchResponse.map((response) => ({\n ...response.payload,\n error: response.hasError ? new MagicRPCError(response.payload.error) : null,\n })),\n );\n });\n } else {\n const finalPayload = standardizeJsonRpcRequestPayload(payload);\n this.prefixPayloadMethodForTestMode(finalPayload);\n this.overlay.post(MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then((response) => {\n (onRequestComplete as JsonRpcRequestCallback)(\n response.hasError ? new MagicRPCError(response.payload.error) : null,\n response.payload,\n );\n });\n }\n }\n\n /* eslint-disable prettier/prettier */\n public send<ResultType = any>(method: string, params?: any[]): PromiEvent<ResultType>;\n public send(\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestComplete: JsonRpcRequestCallback,\n ): void;\n public send<ResultType>(payload: JsonRpcRequestPayload, none: void): JsonRpcResponsePayload<ResultType>;\n /* eslint-enable prettier/prettier */\n public send<ResultType = any>(\n payloadOrMethod: string | JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestCompleteOrParams: JsonRpcRequestCallback | any[] | void,\n ): PromiEvent<ResultType> | JsonRpcResponsePayload<ResultType> | void {\n // Case #1\n // Web3 >= 1.0.0-beta.38 calls `send` with method and parameters.\n if (typeof payloadOrMethod === 'string') {\n const payload = createJsonRpcRequestPayload(\n payloadOrMethod,\n Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : [],\n );\n return this.request(payload) as any;\n }\n\n // Case #2\n // Web3 <= 1.0.0-beta.37 uses `send` with a callback for async queries.\n if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\n this.sendAsync(payloadOrMethod, onRequestCompleteOrParams as any);\n return;\n }\n\n // Case #3\n // Legacy synchronous methods (unsupported).\n const warning = createSynchronousWeb3MethodWarning();\n warning.log();\n return new JsonRpcResponse(payloadOrMethod).applyError({\n code: -32603,\n message: warning.rawMessage,\n }).payload;\n }\n\n public enable() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login);\n return this.request<string[], ProviderEnableEvents>(requestPayload);\n }\n\n /**\n * Here, we wrap `BaseModule.request` with an additional check\n * to determine if the RPC method requires a test-mode prefix.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n this.prefixPayloadMethodForTestMode(payload);\n return super.request<ResultType, Events>(payload);\n }\n\n /**\n * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so\n * that Magic's <iframe> can handle signing methods using test-specific keys.\n */\n private prefixPayloadMethodForTestMode(payload: Partial<JsonRpcRequestPayload>) {\n const testModePrefix = 'testMode/eth/';\n\n // In test mode, we prefix all RPC methods with `test/` so that the\n // Magic <iframe> can handle them without requiring network calls.\n if (this.sdk.testMode) {\n // eslint-disable-next-line no-param-reassign\n payload.method = `${testModePrefix}${payload.method}`;\n }\n }\n\n public on = createChainingEmitterMethod('on', this);\n public once = createChainingEmitterMethod('once', this);\n public addListener = createChainingEmitterMethod('addListener', this);\n\n public off = createChainingEmitterMethod('off', this);\n public removeListener = createChainingEmitterMethod('removeListener', this);\n public removeAllListeners = createChainingEmitterMethod('removeAllListeners', this);\n\n public emit = createBoundEmitterMethod('emit');\n public eventNames = createBoundEmitterMethod('eventNames');\n public listeners = createBoundEmitterMethod('listeners');\n public listenerCount = createBoundEmitterMethod('listenerCount');\n}\n","import { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from '../core/sdk';\nimport { createExtensionNotInitializedError, MagicExtensionError, MagicExtensionWarning } from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent } from '../util';\n\ntype AnonymousExtension = 'anonymous extension';\n\ninterface BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\n /**\n * A structure describing the platform and version compatiblity of this\n * extension.\n */\n compat?: {\n 'magic-sdk': boolean | string;\n '@magic-sdk/react-native': boolean | string;\n '@magic-sdk/react-native-bare': boolean | string;\n '@magic-sdk/react-native-expo': boolean | string;\n };\n}\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n let currentProto = Object.getPrototypeOf(instance);\n const protos = [currentProto];\n\n while (currentProto !== BaseModule.prototype) {\n currentProto = Object.getPrototypeOf(currentProto);\n protos.push(currentProto);\n }\n\n return protos;\n}\n\nabstract class BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\n public abstract readonly name: TName;\n\n private __sdk_access_field_descriptors__ = new Map<\n string,\n { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n >();\n private __is_initialized__ = false;\n\n protected utils = {\n createPromiEvent,\n isPromiEvent,\n encodeJSON,\n decodeJSON,\n createJsonRpcRequestPayload,\n standardizeJsonRpcRequestPayload,\n storage,\n };\n\n constructor() {\n super(undefined as any);\n\n // Disallow SDK access before initialization...\n\n const allSources = [this, ...getPrototypeChain(this)];\n\n sdkAccessFields.forEach((prop) => {\n const allDescriptors = allSources.map((source) => Object.getOwnPropertyDescriptor(source, prop));\n const sourceIndex = allDescriptors.findIndex((x) => !!x);\n const isPrototypeField = sourceIndex > 0;\n const descriptor = allDescriptors[sourceIndex];\n\n /* istanbul ignore else */\n if (descriptor) {\n this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n Object.defineProperty(this, prop, {\n configurable: true,\n get: () => {\n throw createExtensionNotInitializedError(prop);\n },\n });\n }\n });\n }\n\n /**\n * Registers a Magic SDK instance with this Extension.\n *\n * @internal\n */\n public init(sdk: SDKBase) {\n if (this.__is_initialized__) return;\n\n // Replace original property descriptors\n // for SDK access fields post-initialization.\n sdkAccessFields.forEach((prop) => {\n /* istanbul ignore else */\n if (this.__sdk_access_field_descriptors__.has(prop)) {\n const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop)!;\n\n if (isPrototypeField) {\n // For prototype fields, we just need the `delete` operator so that\n // the instance will fallback to the prototype chain itself.\n delete this[prop as keyof this];\n } else {\n Object.defineProperty(this, prop, descriptor);\n }\n }\n });\n\n this.sdk = sdk;\n this.__is_initialized__ = true;\n }\n\n /**\n * Creates a deprecation warning wrapped with a native Magic SDK warning type.\n * Best practice is to warn users of upcoming deprecations at least one major\n * version before the change is implemented. You can use this method to\n * communicate deprecations in a manner consistent with Magic SDK core code.\n */\n protected createDeprecationWarning(options: {\n method: string;\n removalVersion: string;\n useInstead?: string;\n }): MagicExtensionWarning {\n const { method, removalVersion, useInstead } = options;\n\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from this Extension in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n return new MagicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n }\n\n /**\n * Creates a warning wrapped with a native Magic SDK warning type. This\n * maintains consistency in warning messaging for consumers of Magic SDK and\n * this Extension.\n */\n protected createWarning(code: string | number, message: string): MagicExtensionWarning {\n return new MagicExtensionWarning(this, code, message);\n }\n\n /**\n * Creates an error wrapped with a native Magic SDK error type. This maintains\n * consistency in error handling for consumers of Magic SDK and this\n * Extension.\n */\n protected createError<TData = any>(code: string | number, message: string, data: TData): MagicExtensionError<TData> {\n return new MagicExtensionError<TData>(this, code, message, data);\n }\n}\n\nabstract class InternalExtension<TName extends string, TConfig extends any = any> extends BaseExtension<TName> {\n public abstract readonly config: TConfig;\n}\n\n/**\n * A base class representing \"extensions\" to the core Magic JS APIs. Extensions\n * enable new functionality by composing Magic endpoints methods together.\n */\nexport abstract class Extension<TName extends string = AnonymousExtension> extends BaseExtension<TName> {\n /**\n * This is a special constructor used to mark \"official\" extensions. These\n * extensions are designed for special interaction with the Magic iframe using\n * custom JSON RPC methods, business logic, and global configurations. This is\n * intended for internal-use only (and provides no useful advantage to\n * open-source extension developers over the regular `Extension` class).\n *\n * @internal\n */\n public static Internal = InternalExtension;\n public static Anonymous: AnonymousExtension = 'anonymous extension';\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends Extension<string>[]> = UnwrapArray<TExt> extends Extension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends Extension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, Extension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Magic SDK constructor with the necessary type\n * information to support a strongly-typed `Extension` interface.\n */\nexport type WithExtensions<SDK extends SDKBase> = {\n new <TCustomExtName extends string, TExt extends MagicSDKExtensionsOption<TCustomExtName>>(\n apiKey: string,\n options?: MagicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends MagicSDKExtensionsOption> = SDK &\n {\n [P in Exclude<\n TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number | AnonymousExtension\n >]: TExt extends Extension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number | AnonymousExtension\n >]: Extension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n };\n","import {\n MagicPayloadMethod,\n NFTCheckoutRequest,\n NFTCheckoutResponse,\n NFTPurchaseRequest,\n NFTPurchaseResponse,\n NFTTransferRequest,\n NFTTransferResponse,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class NFTModule extends BaseModule {\n /* Start an NFT Purchase flow with Sardine */\n public purchase(options: NFTPurchaseRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTPurchase, [options]);\n return this.request<NFTPurchaseResponse>(requestPayload);\n }\n\n /* Start an NFT Checkout flow with Paypal */\n public checkout(options: NFTCheckoutRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTCheckout, [options]);\n return this.request<NFTCheckoutResponse>(requestPayload);\n }\n\n /* Start an NFT Transfer flow */\n public transfer(options: NFTTransferRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTTransfer, [options]);\n return this.request<NFTTransferResponse>(requestPayload);\n }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport type { AbstractProvider } from 'web3-core';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n createMissingApiKeyError,\n createReactNativeEndpointConfigurationWarning,\n createIncompatibleExtensionsError,\n} from './sdk-exceptions';\nimport { AuthModule } from '../modules/auth';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { Extension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\nimport { NFTModule } from '../modules/nft';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Magic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: Extension<string>) {\n if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n : !!ext.compat[SDKEnvironment.sdkName];\n }\n\n // To gracefully support older extensions, we assume\n // compatibility when the `compat` field is missing.\n return true;\n}\n\n/**\n * Generates a network hash of the SDK instance for persisting network specific\n * information on multichain setups\n */\nfunction getNetworkHash(apiKey: string, network?: EthNetworkConfiguration, extConfig?: any) {\n if (!network && !extConfig) {\n return `${apiKey}_eth_mainnet`;\n }\n if (extConfig) {\n return `${apiKey}_${JSON.stringify(extConfig)}`;\n }\n if (network) {\n if (typeof network === 'string') {\n return `${apiKey}_eth_${network}`;\n }\n // Custom network, not necessarily eth.\n return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;\n }\n return `${apiKey}_unknown`;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatiblity issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options?: MagicSDKAdditionalConfiguration): Record<string, any> {\n const extensions: Extension<string>[] | { [key: string]: Extension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: Extension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach((ext) => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name || ext.name !== Extension.Anonymous) {\n // Only apply extensions with a known, defined `name` parameter.\n (this as any)[ext.name] = ext;\n }\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(ext);\n }\n });\n } else {\n Object.keys(extensions).forEach((name) => {\n if (checkExtensionCompat(extensions[name])) {\n extensions[name].init(this);\n const ext = extensions[name];\n (this as any)[name] = ext;\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(extensions[name]);\n }\n });\n }\n\n if (incompatibleExtensions.length) {\n throw createIncompatibleExtensionsError(incompatibleExtensions);\n }\n\n return extConfig;\n}\n\nexport type MagicSDKExtensionsOption<TCustomExtName extends string = string> =\n | Extension<string>[]\n | { [P in TCustomExtName]: Extension<string> };\n\nexport interface MagicSDKAdditionalConfiguration<\n TCustomExtName extends string = string,\n TExt extends MagicSDKExtensionsOption<TCustomExtName> = any,\n> {\n endpoint?: string;\n locale?: SupportedLocale;\n network?: EthNetworkConfiguration;\n extensions?: TExt;\n testMode?: boolean;\n deferPreload?: boolean;\n useStorageCache?: boolean;\n meta?: any; // Generic field for clients to add metadata\n}\n\nexport class SDKBase {\n private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n protected readonly endpoint: string;\n protected readonly parameters: string;\n protected readonly networkHash: string;\n public readonly testMode: boolean;\n public readonly useStorageCache: boolean;\n\n /**\n * Contains methods for starting a Magic SDK authentication flow.\n */\n public readonly auth: AuthModule;\n\n /**\n * Contains methods for interacting with user data, checking login\n * status, generating cryptographically-secure ID tokens, and more.\n */\n public readonly user: UserModule;\n\n /**\n * Contains methods previously under the `ConnectExtension`, including\n * login, show wallet UI, request user info, and more.\n */\n public readonly wallet: WalletModule;\n\n /**\n * Contains methods for interacting with NFTs, including purchase.\n */\n public readonly nft: NFTModule;\n\n /**\n * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers\n * instance for automatic compatibility with Ethereum methods.\n */\n public readonly rpcProvider: RPCProviderModule & AbstractProvider;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(public readonly apiKey: string, options?: MagicSDKAdditionalConfiguration) {\n if (!apiKey) throw createMissingApiKeyError();\n\n if (SDKEnvironment.platform === 'react-native' && options?.endpoint) {\n createReactNativeEndpointConfigurationWarning().log();\n }\n\n const { defaultEndpoint, version } = SDKEnvironment;\n this.testMode = !!options?.testMode;\n this.useStorageCache = !!options?.useStorageCache;\n this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;\n\n // Prepare built-in modules\n this.auth = new AuthModule(this);\n this.user = new UserModule(this);\n this.wallet = new WalletModule(this);\n this.nft = new NFTModule(this);\n this.rpcProvider = new RPCProviderModule(this) as any;\n\n // Prepare extensions\n const extConfig: any = prepareExtensions.call(this, options);\n\n // Encode parameters as base64-JSON\n this.parameters = encodeJSON<QueryParameters>({\n API_KEY: this.apiKey,\n DOMAIN_ORIGIN: window.location ? window.location.origin : '',\n ETH_NETWORK: options?.network,\n host: createURL(this.endpoint).host,\n sdk: sdkNameToEnvName[SDKEnvironment.sdkName],\n version,\n ext: isEmpty(extConfig) ? undefined : extConfig,\n locale: options?.locale || 'en_US',\n ...(SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {}),\n meta: options?.meta,\n });\n this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? undefined : extConfig);\n if (!options?.deferPreload) this.preload();\n }\n\n /**\n * Represents the view controller associated with this `MagicSDK` instance.\n */\n protected get overlay(): ViewController {\n if (!SDKBase.__overlays__.has(this.parameters)) {\n const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - We don't want to expose this method to the user, but we\n // need to invoke in here so that the `ViewController` is ready for use.\n controller.init();\n\n SDKBase.__overlays__.set(this.parameters, controller);\n }\n\n return SDKBase.__overlays__.get(this.parameters)!;\n }\n\n /**\n * Preloads the Magic view, allowing for faster initial requests in browser\n * environments. Awaiting the returned promise will signal when the Magic view\n * has completed loading and is ready for requests.\n */\n public async preload() {\n await this.overlay.checkIsReadyForRequest;\n }\n}\n","import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n SDKWarningCode,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { getItem, setItem } from '../util/storage';\nimport { createJwt } from '../util/web-crypto';\nimport { SDKEnvironment } from './sdk-environment';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport {\n clearDeviceShares,\n encryptAndPersistDeviceShare,\n getDecryptedDeviceShare,\n} from '../util/device-share-web-crypto';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\ninterface StandardizedMagicRequest {\n msgType: string;\n payload: JsonRpcRequestPayload<any> | JsonRpcRequestPayload<any>[];\n jwt?: string;\n rt?: string;\n deviceShare?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nfunction getRequestPayloadFromBatch(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n return id && Array.isArray(requestPayload)\n ? requestPayload.find((p) => p.id === id)\n : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nfunction standardizeResponse(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n event: MagicMessageEvent,\n): StandardizedResponse {\n const id = event.data.response?.id;\n const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n if (id && requestPayloadResolved) {\n // Build a standardized response object\n const response = new JsonRpcResponse(requestPayloadResolved)\n .applyResult(event.data.response.result)\n .applyError(event.data.response.error);\n\n return { id, response };\n }\n\n return {};\n}\n\nasync function createMagicRequest(\n msgType: string,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n networkHash: string,\n) {\n const rt = await getItem<string>('rt');\n let jwt;\n\n // only for webcrypto platforms\n if (SDKEnvironment.platform === 'web') {\n try {\n jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n const request: StandardizedMagicRequest = { msgType, payload };\n\n if (jwt) {\n request.jwt = jwt;\n }\n if (jwt && rt) {\n request.rt = rt;\n }\n\n // Grab the device share if it exists for the network\n const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);\n if (decryptedDeviceShare) {\n request.deviceShare = decryptedDeviceShare;\n }\n\n return request;\n}\n\nasync function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport abstract class ViewController {\n public checkIsReadyForRequest: Promise<void>;\n public isReadyForRequest: boolean;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\n protected isConnectedToInternet = true;\n\n /**\n * Create an instance of `ViewController`\n *\n * @param endpoint - The URL for the relevant iframe context.\n * @param parameters - The unique, encoded query parameters for the\n * relevant iframe context.\n * @param networkHash - The hash of the network that this sdk instance is connected to\n * for multi-chain scenarios\n */\n constructor(\n protected readonly endpoint: string,\n protected readonly parameters: string,\n protected readonly networkHash: string,\n ) {\n this.checkIsReadyForRequest = this.waitForReady();\n this.isReadyForRequest = false;\n this.listen();\n }\n\n protected abstract init(): void;\n protected abstract _post(data: MagicMessageRequest): Promise<void>;\n protected abstract hideOverlay(): void;\n protected abstract showOverlay(): void;\n\n /**\n * Send a payload to the Magic `<iframe>` for processing and automatically\n * handle the acknowledging follow-up event(s).\n *\n * @param msgType - The type of message to encode with the data.\n * @param payload - The JSON RPC payload to emit via `window.postMessage`.\n */\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType>[]>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload,\n ): Promise<JsonRpcResponse<ResultType>>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType> | JsonRpcResponse<ResultType>[]> {\n return createPromise(async (resolve, reject) => {\n if (!this.isConnectedToInternet) {\n const error = createModalNotReadyError();\n reject(error);\n }\n\n if (!this.isReadyForRequest) {\n await this.waitForReady();\n }\n\n const batchData: JsonRpcResponse[] = [];\n const batchIds = Array.isArray(payload) ? payload.map((p) => p.id) : [];\n const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);\n\n await this._post(msg);\n\n /**\n * Collect successful RPC responses and resolve.\n */\n const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: MagicMessageEvent) => {\n const { id, response } = standardizeResponse(payload, event);\n persistMagicEventRefreshToken(event);\n if (response?.payload.error?.message === 'User denied account access.') {\n clearDeviceShares();\n } else if (event.data.deviceShare) {\n const { deviceShare } = event.data;\n encryptAndPersistDeviceShare(deviceShare, this.networkHash);\n }\n if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n batchData.push(response);\n\n // For batch requests, we wait for all responses before resolving.\n if (batchData.length === payload.length) {\n removeEventListener();\n resolve(batchData);\n }\n } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n removeEventListener();\n resolve(response);\n }\n };\n\n // Listen for and handle responses.\n const removeResponseListener = this.on(\n MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,\n acknowledgeResponse(() => removeResponseListener()),\n );\n });\n }\n\n /**\n * Listen for events received with the given `msgType`.\n *\n * @param msgType - The `msgType` encoded with the event data.\n * @param handler - A handler function to execute on each event received.\n * @return A `void` function to remove the attached event.\n */\n public on(\n msgType: MagicIncomingWindowMessage,\n handler: (this: Window, event: MagicMessageEvent) => any,\n ): RemoveEventListenerFunction {\n const boundHandler = handler.bind(window);\n\n // We cannot effectively cover this function because it never gets reference\n // by value. The functionality of this callback is tested within\n // `initMessageListener`.\n /* istanbul ignore next */\n const listener = (event: MagicMessageEvent) => {\n if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n };\n\n this.messageHandlers.add(listener);\n return () => this.messageHandlers.delete(listener);\n }\n\n private waitForReady() {\n return new Promise<void>((resolve) => {\n const unsubscribe = this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n });\n });\n }\n\n /**\n * Listen for messages sent from the underlying Magic `<WebView>`.\n */\n private listen() {\n this.on(MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {\n this.hideOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {\n this.showOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event: MagicMessageEvent) => {\n if (event.data.response.result.product_announcement) {\n new MagicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n }\n });\n }\n}\n","// Only re-export modules & types that are intended\n// for the public API from this file.\n\nexport {\n Extension,\n MagicSDKError as SDKError,\n MagicExtensionError as ExtensionError,\n MagicExtensionWarning as ExtensionWarning,\n MagicRPCError as RPCError,\n MagicSDKWarning as SDKWarning,\n isPromiEvent,\n} from '@magic-sdk/provider';\n\nexport type { MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption, PromiEvent } from '@magic-sdk/provider';\n\nexport * from '@magic-sdk/types';\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","export const _driver = 'localforage-driver-memory';\n","/*!\nMIT License\n\nCopyright (c) 2018 Arturas Molcanovas <a.molcanovas@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n\nimport { __values } from 'tslib';\n\n/**\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n *\n * @param parts\n * @param properties\n */\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n }\n catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n //tslint:disable-next-line:variable-name\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder\n : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder\n : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder\n : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\nvar SERIALIZED_MARKER_LENGTH = \"__lfsc__:\" /* SERIALIZED_MARKER */.length;\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + \"arbf\" /* TYPE_ARRAYBUFFER */.length;\n//tslint:disable:no-magic-numbers no-bitwise prefer-switch no-unbound-method\nvar toString = Object.prototype.toString;\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n for (var i = 0, p = 0; i < len; i += 4) {\n var encoded1 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i]);\n var encoded2 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 1]);\n var encoded3 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 2]);\n var encoded4 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 3]);\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n}\n/**\n * Converts a buffer to a string to store, serialized, in the backend\n * storage library.\n */\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n for (var i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i] >> 2];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64String +=\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i + 2] & 63];\n }\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n }\n else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n return base64String;\n}\n/**\n * Serialize a value, afterwards executing a callback (which usually\n * instructs the `setItem()` callback/promise to be executed). This is how\n * we store binary data with localStorage.\n * @param value\n * @param callback\n */\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString.call(value);\n }\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n if (value && (valueType === '[object ArrayBuffer]' ||\n (value.buffer && toString.call(value.buffer) === '[object ArrayBuffer]'))) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer = void 0;\n var marker = \"__lfsc__:\" /* SERIALIZED_MARKER */;\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += \"arbf\" /* TYPE_ARRAYBUFFER */;\n }\n else {\n buffer = value.buffer;\n if (valueType === '[object Int8Array]') {\n marker += \"si08\" /* TYPE_INT8ARRAY */;\n }\n else if (valueType === '[object Uint8Array]') {\n marker += \"ui08\" /* TYPE_UINT8ARRAY */;\n }\n else if (valueType === '[object Uint8ClampedArray]') {\n marker += \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */;\n }\n else if (valueType === '[object Int16Array]') {\n marker += \"si16\" /* TYPE_INT16ARRAY */;\n }\n else if (valueType === '[object Uint16Array]') {\n marker += \"ur16\" /* TYPE_UINT16ARRAY */;\n }\n else if (valueType === '[object Int32Array]') {\n marker += \"si32\" /* TYPE_INT32ARRAY */;\n }\n else if (valueType === '[object Uint32Array]') {\n marker += \"ui32\" /* TYPE_UINT32ARRAY */;\n }\n else if (valueType === '[object Float32Array]') {\n marker += \"fl32\" /* TYPE_FLOAT32ARRAY */;\n }\n else if (valueType === '[object Float64Array]') {\n marker += \"fl64\" /* TYPE_FLOAT64ARRAY */;\n }\n else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n callback(marker + bufferToString(buffer));\n }\n else if (valueType === '[object Blob]') {\n // Convert the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n //tslint:disable-next-line:restrict-plus-operands\n var str = \"~~local_forage_type~\" /* BLOB_TYPE_PREFIX */ + value.type + \"~\" + bufferToString(this.result);\n callback(\"__lfsc__:\" /* SERIALIZED_MARKER */ + \"blob\" /* TYPE_BLOB */ + str);\n };\n fileReader.readAsArrayBuffer(value);\n }\n else {\n try {\n callback(JSON.stringify(value));\n }\n catch (e) {\n console.error('Couldn\\'t convert value into a JSON string: ', value);\n callback(null, e);\n }\n }\n}\n/**\n * Deserialize data we've inserted into a value column/field. We place\n * special markers into our strings to mark them as encoded; this isn't\n * as nice as a meta field, but it's the only sane thing we can do whilst\n * keeping localStorage support intact.\n *\n * Oftentimes this will just deserialize JSON content, but if we have a\n * special marker (SERIALIZED_MARKER, defined above), we will extract\n * some kind of arraybuffer/binary data/typed array out of the string.\n * @param value\n */\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== \"__lfsc__:\" /* SERIALIZED_MARKER */) {\n return JSON.parse(value);\n }\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === \"blob\" /* TYPE_BLOB */ && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case \"arbf\" /* TYPE_ARRAYBUFFER */:\n return buffer;\n case \"blob\" /* TYPE_BLOB */:\n return createBlob([buffer], { type: blobType });\n case \"si08\" /* TYPE_INT8ARRAY */:\n return new Int8Array(buffer);\n case \"ui08\" /* TYPE_UINT8ARRAY */:\n return new Uint8Array(buffer);\n case \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */:\n return new Uint8ClampedArray(buffer);\n case \"si16\" /* TYPE_INT16ARRAY */:\n return new Int16Array(buffer);\n case \"ur16\" /* TYPE_UINT16ARRAY */:\n return new Uint16Array(buffer);\n case \"si32\" /* TYPE_INT32ARRAY */:\n return new Int32Array(buffer);\n case \"ui32\" /* TYPE_UINT32ARRAY */:\n return new Uint32Array(buffer);\n case \"fl32\" /* TYPE_FLOAT32ARRAY */:\n return new Float32Array(buffer);\n case \"fl64\" /* TYPE_FLOAT64ARRAY */:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nfunction clone(obj) {\n var e_1, _a;\n if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj) {\n return obj;\n }\n var temp = obj instanceof Date ? new Date(obj) : (obj.constructor());\n try {\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n obj['isActiveClone'] = null;\n temp[key] = clone(obj[key]);\n delete obj['isActiveClone'];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return temp;\n}\n\nfunction getKeyPrefix(options, defaultConfig) {\n return (options.name || defaultConfig.name) + \"/\" + (options.storeName || defaultConfig.storeName) + \"/\";\n}\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction getCallback() {\n var _args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _args[_i] = arguments[_i];\n }\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n//tslint:disable-next-line:no-ignored-initial-value\nfunction dropInstanceCommon(options, callback) {\n var _this = this;\n callback = getCallback.apply(this, arguments);\n options = (typeof options !== 'function' && options) || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n var promise;\n if (!options.name) {\n promise = Promise.reject('Invalid arguments');\n }\n else {\n promise = new Promise(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + \"/\");\n }\n else {\n resolve(getKeyPrefix(options, _this._defaultConfig));\n }\n });\n }\n return { promise: promise, callback: callback };\n}\n\nfunction normaliseKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + \" used as a key, but it is not a string.\");\n key = String(key);\n }\n return key;\n}\n\nvar serialiser = {\n bufferToString: bufferToString,\n deserialize: deserialize,\n serialize: serialize,\n stringToBuffer: stringToBuffer\n};\n\nexport { serialiser, clone, getKeyPrefix, executeCallback, getCallback, dropInstanceCommon, normaliseKey };\n//# sourceMappingURL=fesm5.js.map\n","const stores: { [store: string]: Store } = {};\n\n/** @internal */\nexport class Store {\n\n private data: { [k: string]: any } = {};\n\n private constructor(private readonly kp: string) {\n }\n\n public static resolve(kp: string): Store {\n if (!stores[kp]) {\n stores[kp] = new Store(kp);\n }\n\n return stores[kp];\n }\n\n public clear(): void {\n this.data = {};\n }\n\n public drop(): void {\n this.clear();\n delete stores[this.kp];\n }\n\n public get(key: string): any {\n return this.data[key];\n }\n\n public key(idx: number): string {\n return this.keys()[idx];\n }\n\n public keys(): string[] {\n return Object.keys(this.data);\n }\n\n public rm(k: string): void {\n delete this.data[k];\n }\n\n public set(k: string, v: any): void {\n this.data[k] = v;\n }\n}\n","import {clone, getKeyPrefix, LocalForageOptions, serialiser} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function _initStorage(this: any, options?: LocalForageOptions): any {\n const opts = options ? clone(options) : {};\n const kp = getKeyPrefix(opts, this._defaultConfig);\n const store = Store.resolve(kp);\n\n this._dbInfo = opts;\n this._dbInfo.serializer = serialiser;\n this._dbInfo.keyPrefix = kp;\n this._dbInfo.mStore = store;\n\n return Promise.resolve();\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function clear(this: any, callback?: (err: any) => void): Promise<void> {\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).clear();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {dropInstanceCommon, executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function dropInstance(this: any, _options: any, _cb?: any) {\n const {promise, callback} = dropInstanceCommon.apply(this, <any>arguments);\n\n const outPromise = (<Promise<string>>promise).then<void>(keyPrefix => {\n Store.resolve(keyPrefix).drop();\n });\n\n executeCallback(outPromise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function getItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n const result = (<Store>this._dbInfo.mStore).get(key$);\n\n // Deserialise if the result is not null or undefined\n return result == null ? null : this._dbInfo.serializer.deserialize(result); //tslint:disable-line:triple-equals\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function iterate(this: any, iterator: any, callback?: any) {\n const promise = this.ready().then(() => {\n const store = (<Store>this._dbInfo.mStore);\n const keys = store.keys();\n\n for (let i = 0; i < keys.length; i++) {\n let value = store.get(keys[i]);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = this._dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, keys[i], i + 1);\n\n if (value !== undefined) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function key(this: any, idx: number, callback?: any) {\n const promise = this.ready().then(() => {\n let result: any;\n try {\n result = (<Store>this._dbInfo.mStore).key(idx);\n\n if (result === undefined) {\n result = null;\n }\n } catch {\n result = null;\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function keys(this: any, callback?: any) {\n const promise = this.ready().then(() => {\n return (<Store>this._dbInfo.mStore).keys();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\n\nexport function length(this: any, callback?: any) {\n const promise = this.keys().then((keys$: any[]) => keys$.length);\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function removeItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).rm(key$);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function setItem(this: any, key$: string, value: any, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n const originalValue = value;\n\n return new Promise<any>((resolve, reject) => {\n this._dbInfo.serializer.serialize(value, (value$: string, error: Error) => {\n if (error) {\n reject(error);\n } else {\n try {\n (<Store>this._dbInfo.mStore).set(key$, value$);\n resolve(originalValue);\n } catch (e) {\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","export const _support = true;\nexport {_driver} from './_driver';\nexport {_initStorage} from './_initStorage';\nexport {clear} from './clear';\nexport {dropInstance} from './dropInstance';\nexport {getItem} from './getItem';\nexport {iterate} from './iterate';\nexport {key} from './key';\nexport {keys} from './keys';\nexport {length} from './length';\nexport {removeItem} from './removeItem';\nexport {setItem} from './setItem';\n","/* istanbul ignore file */\n// Deprecate test API key in v7.0.0\n\nimport { SDKBase, createSDK, InstanceWithExtensions, MagicSDKExtensionsOption } from '@magic-sdk/provider';\nimport localForage from 'localforage';\nimport * as memoryDriver from 'localforage-driver-memory';\nimport { IframeController } from './iframe-controller';\n\nexport * from '@magic-sdk/commons';\n\nexport const Magic = createSDK(SDKBase, {\n platform: 'web',\n sdkName: 'magic-sdk',\n version: process.env.WEB_VERSION!,\n defaultEndpoint: 'https://auth.magic.link/',\n ViewController: IframeController,\n configureStorage: async () => {\n const lf = localForage.createInstance({\n name: 'MagicAuthLocalStorageDB',\n storeName: 'MagicAuthLocalStorage',\n });\n\n await lf.defineDriver(memoryDriver);\n await lf.setDriver([localForage.INDEXEDDB, localForage.LOCALSTORAGE, memoryDriver._driver]);\n\n return lf;\n },\n});\n\nexport type Magic<T extends MagicSDKExtensionsOption<any> = MagicSDKExtensionsOption> = InstanceWithExtensions<\n SDKBase,\n T\n>;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable no-unused-expressions */\n\nimport { ViewController, createDuplicateIframeWarning, createURL, createModalNotReadyError } from '@magic-sdk/provider';\n\n/**\n * Magic `<iframe>` overlay styles. These base styles enable `<iframe>` UI\n * to render above all other DOM content.\n */\nconst overlayStyles: Partial<CSSStyleDeclaration> = {\n display: 'none',\n position: 'fixed',\n top: '0',\n right: '0',\n width: '100%',\n height: '100%',\n borderRadius: '0',\n border: 'none',\n zIndex: '2147483647',\n};\n\n/**\n * Apply iframe styles to the given element.\n * @param elem - An element to apply styles using CSSOM.\n */\nfunction applyOverlayStyles(elem: HTMLElement) {\n for (const [cssProperty, value] of Object.entries(overlayStyles)) {\n /* eslint-disable-next-line no-param-reassign */\n (elem.style as any)[cssProperty as any] = value;\n }\n}\n\n/**\n * Checks if the given query params are associated with an active `<iframe>`\n * instance.\n *\n * @param parameters - The unique, encoded query parameters to check for\n * duplicates against.\n */\nfunction checkForSameSrcInstances(parameters: string) {\n const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.magic-iframe'));\n return Boolean(iframes.find((iframe) => iframe.src.includes(parameters)));\n}\n\n/**\n * View controller for the Magic `<iframe>` overlay.\n */\nexport class IframeController extends ViewController {\n private iframe!: Promise<HTMLIFrameElement>;\n private activeElement: any = null;\n\n /**\n * Initializes the underlying `<iframe>` element.\n * Initializes the underlying `Window.onmessage` event listener.\n */\n protected init() {\n (this as any).test = 'hello';\n this.iframe = new Promise((resolve) => {\n const onload = () => {\n if (!checkForSameSrcInstances(encodeURIComponent(this.parameters))) {\n const iframe = document.createElement('iframe');\n iframe.classList.add('magic-iframe');\n iframe.dataset.magicIframeLabel = createURL(this.endpoint).host;\n iframe.title = 'Secure Modal';\n iframe.src = createURL(`/send?params=${encodeURIComponent(this.parameters)}`, this.endpoint).href;\n iframe.allow = 'clipboard-read; clipboard-write';\n applyOverlayStyles(iframe);\n document.body.appendChild(iframe);\n resolve(iframe);\n } else {\n createDuplicateIframeWarning().log();\n }\n };\n\n // Check DOM state and load...\n if (['loaded', 'interactive', 'complete'].includes(document.readyState)) {\n onload();\n } else {\n // ...or check load events to load\n window.addEventListener('load', onload, false);\n }\n });\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (event.origin === this.endpoint) {\n if (event.data && event.data.msgType && this.messageHandlers.size) {\n // If the response object is undefined, we ensure it's at least an\n // empty object before passing to the event listener.\n /* istanbul ignore next */\n event.data.response = event.data.response ?? {};\n for (const handler of this.messageHandlers.values()) {\n handler(event);\n }\n }\n }\n });\n }\n\n protected async showOverlay() {\n const iframe = await this.iframe;\n iframe.style.display = 'block';\n this.activeElement = document.activeElement;\n iframe.focus();\n }\n\n protected async hideOverlay() {\n const iframe = await this.iframe;\n iframe.style.display = 'none';\n if (this.activeElement?.focus) this.activeElement.focus();\n this.activeElement = null;\n }\n\n protected async _post(data: any) {\n const iframe = await this.iframe;\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(data, this.endpoint);\n } else {\n throw createModalNotReadyError();\n }\n }\n}\n","import { Extension } from '@magic-sdk/commons';\nimport { AlgorandConfig, AlgorandPayloadMethod } from './types';\n\nexport class AlgorandExtension extends Extension.Internal<'algod', any> {\n name = 'algod' as const;\n config: any = {};\n\n constructor(public algorandConfig: AlgorandConfig) {\n super();\n\n this.config = {\n rpcUrl: algorandConfig.rpcUrl,\n chainType: 'ALOGD',\n };\n }\n\n public async signTransaction(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignTransaction, txn));\n }\n\n public async signBid(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignBid, txn));\n }\n\n public async getWallet() {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandGetWallet, []));\n }\n\n public async signGroupTransaction(txns: any[]) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransaction, txns),\n );\n }\n\n public async signGroupTransactionV2(txns: any) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransactionV2, txns),\n );\n }\n}\n","export { WalletManager, WalletManagerConfig } from './manager'\nexport { NetworkId } from './network'\nexport { State, WalletState, defaultState } from './store'\nexport { StorageAdapter } from './storage'\nexport * from './wallets'\n","import { Store } from '@tanstack/store'\nimport algosdk from 'algosdk'\nimport {\n createDefaultNetworkConfig,\n isNetworkConfigMap,\n NetworkId,\n type AlgodConfig,\n type NetworkConfig,\n type NetworkConfigMap\n} from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport {\n defaultState,\n isValidState,\n LOCAL_STORAGE_KEY,\n removeWallet,\n setActiveNetwork,\n setActiveWallet,\n type State\n} from 'src/store'\nimport { createWalletMap, deepMerge } from 'src/utils'\nimport type { BaseWallet } from 'src/wallets/base'\nimport type {\n SupportedWallet,\n WalletAccount,\n WalletConfigMap,\n WalletId,\n WalletIdConfig,\n WalletMetadata,\n WalletOptions\n} from 'src/wallets/types'\n\nexport interface WalletManagerConfig {\n wallets?: SupportedWallet[]\n network?: NetworkId\n algod?: NetworkConfig\n}\n\nexport type PersistedState = Omit<State, 'algodClient'>\n\nexport class WalletManager {\n public _clients: Map<WalletId, BaseWallet> = new Map()\n\n public networkConfig: NetworkConfigMap\n\n public store: Store<State>\n public subscribe: (callback: (state: State) => void) => () => void\n\n constructor({ wallets = [], network = NetworkId.TESTNET, algod = {} }: WalletManagerConfig = {}) {\n this.networkConfig = this.initNetworkConfig(network, algod)\n\n const persistedState = this.loadPersistedState()\n const initialState: State = persistedState\n ? {\n ...persistedState,\n algodClient: this.createAlgodClient(this.networkConfig[persistedState.activeNetwork])\n }\n : {\n ...defaultState,\n activeNetwork: network,\n algodClient: this.createAlgodClient(this.networkConfig[network])\n }\n\n this.store = new Store<State>(initialState, {\n onUpdate: () => this.savePersistedState()\n })\n\n this.savePersistedState()\n\n this.subscribe = (callback: (state: State) => void): (() => void) => {\n const unsubscribe = this.store.subscribe(() => {\n callback(this.store.state)\n })\n\n return unsubscribe\n }\n\n this.initializeWallets(wallets)\n }\n\n // ---------- Store ------------------------------------------------- //\n\n public get algodClient(): algosdk.Algodv2 {\n return this.store.state.algodClient\n }\n\n public set algodClient(algodClient: algosdk.Algodv2) {\n this.store.setState((state) => ({\n ...state,\n algodClient\n }))\n }\n\n private loadPersistedState(): PersistedState | null {\n try {\n const serializedState = StorageAdapter.getItem(LOCAL_STORAGE_KEY)\n if (serializedState === null) {\n return null\n }\n const parsedState = JSON.parse(serializedState)\n if (!isValidState(parsedState)) {\n console.warn('[Store] Parsed state:', parsedState)\n throw new Error('Persisted state is invalid')\n }\n return parsedState as PersistedState\n } catch (error: any) {\n console.error(`[Store] Could not load state from local storage: ${error.message}`)\n return null\n }\n }\n\n private savePersistedState(): void {\n try {\n const { wallets, activeWallet, activeNetwork } = this.store.state\n const persistedState: PersistedState = { wallets, activeWallet, activeNetwork }\n const serializedState = JSON.stringify(persistedState)\n StorageAdapter.setItem(LOCAL_STORAGE_KEY, serializedState)\n } catch (error) {\n console.error('[Store] Could not save state to local storage:', error)\n }\n }\n\n // ---------- Wallets ----------------------------------------------- //\n\n private initializeWallets<T extends keyof WalletConfigMap>(\n walletsConfig: Array<T | WalletIdConfig<T>>\n ) {\n console.info('[Manager] Initializing wallets...')\n\n for (const walletConfig of walletsConfig) {\n let walletId: T\n let walletOptions: WalletOptions<T> | undefined\n let walletMetadata: Partial<WalletMetadata> | undefined\n\n // Parse wallet config\n if (typeof walletConfig === 'string') {\n walletId = walletConfig\n } else {\n const { id, options, metadata } = walletConfig\n walletId = id\n walletOptions = options\n walletMetadata = metadata\n }\n\n // Get wallet class\n const walletMap = createWalletMap()\n const WalletClass = walletMap[walletId]\n if (!WalletClass) {\n console.error(`[Manager] Wallet not found: ${walletId}`)\n continue\n }\n\n // Initialize wallet\n const walletInstance = new WalletClass({\n id: walletId,\n metadata: walletMetadata,\n options: walletOptions as any,\n getAlgodClient: this.getAlgodClient,\n store: this.store,\n subscribe: this.subscribe\n })\n\n this._clients.set(walletId, walletInstance)\n console.info(`[Manager] ✅ Initialized ${walletId}`)\n }\n\n const state = this.store.state\n\n // Check if connected wallets are still valid\n const connectedWallets = Object.keys(state.wallets) as WalletId[]\n for (const walletId of connectedWallets) {\n if (!this._clients.has(walletId)) {\n console.warn(`[Manager] Connected wallet not found: ${walletId}`)\n removeWallet(this.store, { walletId })\n }\n }\n\n // Check if active wallet is still valid\n if (state.activeWallet && !this._clients.has(state.activeWallet)) {\n console.warn(`[Manager] Active wallet not found: ${state.activeWallet}`)\n setActiveWallet(this.store, { walletId: null })\n }\n }\n\n public get wallets(): BaseWallet[] {\n return [...this._clients.values()]\n }\n\n public getWallet(walletId: WalletId): BaseWallet | undefined {\n return this._clients.get(walletId)\n }\n\n public async resumeSessions(): Promise<void> {\n const promises = this.wallets.map((wallet) => wallet?.resumeSession())\n await Promise.all(promises)\n }\n\n public async disconnect(): Promise<void> {\n const promises = this.wallets\n .filter((wallet) => wallet.isConnected)\n .map((wallet) => wallet?.disconnect())\n\n await Promise.all(promises)\n }\n\n // ---------- Network ----------------------------------------------- //\n\n private initNetworkConfig(network: NetworkId, config: NetworkConfig): NetworkConfigMap {\n console.info('[Manager] Initializing network...')\n\n let networkConfig = createDefaultNetworkConfig()\n\n if (isNetworkConfigMap(config)) {\n // Config for multiple networks\n networkConfig = deepMerge(networkConfig, config)\n } else {\n // Config for single (active) network\n networkConfig[network] = deepMerge(networkConfig[network], config)\n }\n\n console.info('[Manager] Algodv2 config:', networkConfig)\n\n return networkConfig\n }\n\n private createAlgodClient(config: AlgodConfig): algosdk.Algodv2 {\n if (this.store) console.info(`[Manager] Creating Algodv2 client for ${this.activeNetwork}...`)\n const { token = '', baseServer, port = '', headers = {} } = config\n return new algosdk.Algodv2(token, baseServer, port, headers)\n }\n\n public getAlgodClient = (): algosdk.Algodv2 => {\n return this.algodClient\n }\n\n public setActiveNetwork = async (networkId: NetworkId): Promise<void> => {\n if (this.activeNetwork === networkId) {\n return\n }\n\n const algodClient = this.createAlgodClient(this.networkConfig[networkId])\n setActiveNetwork(this.store, { networkId, algodClient })\n\n console.info(`[Manager] ✅ Active network set to ${networkId}.`)\n }\n\n public get activeNetwork(): NetworkId {\n return this.store.state.activeNetwork\n }\n\n // ---------- Active Wallet ----------------------------------------- //\n\n public get activeWallet(): BaseWallet | null {\n const state = this.store.state\n const activeWallet = this.wallets.find((wallet) => wallet.id === state.activeWallet)\n if (!activeWallet) {\n return null\n }\n\n return activeWallet\n }\n\n public get activeWalletAccounts(): WalletAccount[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts\n }\n\n public get activeWalletAddresses(): string[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.activeAccount\n }\n\n public get activeAddress(): string | null {\n if (!this.activeAccount) {\n return null\n }\n return this.activeAccount.address\n }\n\n // ---------- Sign Transactions ------------------------------------- //\n\n public get signTransactions(): BaseWallet['signTransactions'] {\n if (!this.activeWallet) {\n throw new Error('[Manager] No active wallet found!')\n }\n return this.activeWallet.signTransactions\n }\n\n public get transactionSigner(): algosdk.TransactionSigner {\n if (!this.activeWallet) {\n throw new Error('[Manager] No active wallet found!')\n }\n return this.activeWallet.transactionSigner\n }\n}\n","import algosdk from 'algosdk'\n\nexport enum NetworkId {\n MAINNET = 'mainnet',\n TESTNET = 'testnet',\n BETANET = 'betanet',\n LOCALNET = 'localnet'\n}\n\nexport function isValidNetworkId(networkId: any): networkId is NetworkId {\n return Object.values(NetworkId).includes(networkId)\n}\n\nexport interface AlgodConfig {\n token: string | algosdk.AlgodTokenHeader | algosdk.CustomTokenHeader | algosdk.BaseHTTPClient\n baseServer: string\n port?: string | number\n headers?: Record<string, string>\n}\n\nexport function isAlgodConfig(config: any): config is AlgodConfig {\n if (typeof config !== 'object') return false\n\n for (const key of Object.keys(config)) {\n if (!['token', 'baseServer', 'port', 'headers'].includes(key)) return false\n }\n\n return (\n typeof config.token === 'string' &&\n typeof config.baseServer === 'string' &&\n ['string', 'number', 'undefined'].includes(typeof config.port) &&\n ['object', 'undefined'].includes(typeof config.headers)\n )\n}\n\nexport type NetworkConfigMap = Record<NetworkId, AlgodConfig>\n\nexport function isNetworkConfigMap(config: NetworkConfig): config is NetworkConfigMap {\n const networkKeys = Object.values(NetworkId) as string[]\n return Object.keys(config).some((key) => networkKeys.includes(key))\n}\n\nexport type NetworkConfig = Partial<AlgodConfig> | Partial<Record<NetworkId, Partial<AlgodConfig>>>\n\nexport const nodeServerMap = {\n [NetworkId.MAINNET]: 'https://mainnet-api.algonode.cloud',\n [NetworkId.TESTNET]: 'https://testnet-api.algonode.cloud',\n [NetworkId.BETANET]: 'https://betanet-api.algonode.cloud'\n}\n\nexport function createDefaultNetworkConfig(): NetworkConfigMap {\n const localnetConfig: AlgodConfig = {\n token: 'a'.repeat(64),\n baseServer: 'http://localhost',\n port: 4001,\n headers: {}\n }\n\n return Object.values(NetworkId).reduce((configMap, value) => {\n const network = value as NetworkId\n const isLocalnet = network === NetworkId.LOCALNET\n\n configMap[network] = isLocalnet\n ? localnetConfig\n : {\n token: '',\n baseServer: nodeServerMap[network],\n port: '',\n headers: {}\n }\n\n return configMap\n }, {} as NetworkConfigMap)\n}\n\nexport const caipChainId: Partial<Record<NetworkId, string>> = {\n [NetworkId.MAINNET]: 'algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73k',\n [NetworkId.TESTNET]: 'algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDe',\n [NetworkId.BETANET]: 'algorand:mFgazF-2uRS1tMiL9dsj01hJGySEmPN2'\n}\n","export class StorageAdapter {\n static getItem(key: string): string | null {\n if (typeof window === 'undefined') {\n return null\n }\n return localStorage.getItem(key)\n }\n\n static setItem(key: string, value: string): void {\n if (typeof window === 'undefined') {\n return\n }\n localStorage.setItem(key, value)\n }\n}\n","import { Algodv2 } from 'algosdk'\nimport { NetworkId, isValidNetworkId } from 'src/network'\nimport { WalletId, type WalletAccount } from 'src/wallets'\nimport type { Store } from '@tanstack/store'\n\nexport type WalletState = {\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n}\n\nexport type WalletStateMap = Partial<Record<WalletId, WalletState>>\n\nexport interface State {\n wallets: WalletStateMap\n activeWallet: WalletId | null\n activeNetwork: NetworkId\n algodClient: Algodv2\n}\n\nexport const defaultState: State = {\n wallets: {},\n activeWallet: null,\n activeNetwork: NetworkId.TESTNET,\n algodClient: new Algodv2('', 'https://testnet-api.algonode.cloud/')\n}\n\nexport const LOCAL_STORAGE_KEY = '@txnlab/use-wallet:v3'\n\n// State mutations\n\nexport function addWallet(\n store: Store<State>,\n { walletId, wallet }: { walletId: WalletId; wallet: WalletState }\n) {\n store.setState((state) => {\n const updatedWallets = {\n ...state.wallets,\n [walletId]: {\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: wallet.activeAccount ? { ...wallet.activeAccount } : null\n }\n }\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: walletId\n }\n })\n}\n\nexport function removeWallet(store: Store<State>, { walletId }: { walletId: WalletId }) {\n store.setState((state) => {\n const updatedWallets = { ...state.wallets }\n delete updatedWallets[walletId]\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: state.activeWallet === walletId ? null : state.activeWallet\n }\n })\n}\n\nexport function setActiveWallet(store: Store<State>, { walletId }: { walletId: WalletId | null }) {\n store.setState((state) => ({\n ...state,\n activeWallet: walletId\n }))\n}\n\nexport function setActiveAccount(\n store: Store<State>,\n { walletId, address }: { walletId: WalletId; address: string }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n console.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newActiveAccount = wallet.accounts.find((a) => a.address === address)\n if (!newActiveAccount) {\n console.warn(`Account with address ${address} not found in wallet \"${walletId}\"`)\n return state\n }\n\n const updatedWallet = {\n ...wallet,\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: { ...newActiveAccount }\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setAccounts(\n store: Store<State>,\n { walletId, accounts }: { walletId: WalletId; accounts: WalletAccount[] }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n console.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newAccounts = accounts.map((account) => ({ ...account }))\n\n const isActiveAccountConnected = newAccounts.some(\n (account) => account.address === wallet.activeAccount?.address\n )\n\n const newActiveAccount = isActiveAccountConnected\n ? { ...wallet.activeAccount! }\n : newAccounts[0] || null\n\n const updatedWallet = {\n ...wallet,\n accounts: newAccounts,\n activeAccount: newActiveAccount\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setActiveNetwork(\n store: Store<State>,\n { networkId, algodClient }: { networkId: NetworkId; algodClient: Algodv2 }\n) {\n store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient\n }))\n}\n\n// Type guards\n\nexport function isValidWalletId(walletId: any): walletId is WalletId {\n return Object.values(WalletId).includes(walletId)\n}\n\nexport function isValidWalletAccount(account: any): account is WalletAccount {\n return (\n typeof account === 'object' &&\n account !== null &&\n typeof account.name === 'string' &&\n typeof account.address === 'string'\n )\n}\n\nexport function isValidWalletState(wallet: any): wallet is WalletState {\n return (\n typeof wallet === 'object' &&\n wallet !== null &&\n Array.isArray(wallet.accounts) &&\n wallet.accounts.every(isValidWalletAccount) &&\n (wallet.activeAccount === null || isValidWalletAccount(wallet.activeAccount))\n )\n}\n\nexport function isValidState(state: any): state is State {\n if (!state || typeof state !== 'object') return false\n if (typeof state.wallets !== 'object') return false\n for (const [walletId, wallet] of Object.entries(state.wallets)) {\n if (!isValidWalletId(walletId) || !isValidWalletState(wallet)) return false\n }\n if (state.activeWallet !== null && !isValidWalletId(state.activeWallet)) return false\n if (!isValidNetworkId(state.activeNetwork)) return false\n\n return true\n}\n","import { setActiveWallet, setActiveAccount, removeWallet, type State } from 'src/store'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type { NetworkId } from 'src/network'\nimport type { WalletAccount, WalletConstructor, WalletId, WalletMetadata } from 'src/wallets/types'\n\ninterface WalletConstructorType {\n new (...args: any[]): BaseWallet\n defaultMetadata: WalletMetadata\n}\n\nexport abstract class BaseWallet {\n readonly id: WalletId\n readonly metadata: WalletMetadata\n\n protected store: Store<State>\n protected getAlgodClient: () => algosdk.Algodv2\n\n public subscribe: (callback: (state: State) => void) => () => void\n\n protected constructor({\n id,\n metadata,\n store,\n subscribe,\n getAlgodClient\n }: WalletConstructor<WalletId>) {\n this.id = id\n this.store = store\n this.subscribe = subscribe\n this.getAlgodClient = getAlgodClient\n\n const ctor = this.constructor as WalletConstructorType\n this.metadata = { ...ctor.defaultMetadata, ...metadata }\n }\n\n static defaultMetadata: WalletMetadata = { name: 'Base Wallet', icon: '' }\n\n // ---------- Public Methods ---------------------------------------- //\n\n public abstract connect(args?: Record<string, any>): Promise<WalletAccount[]>\n public abstract disconnect(): Promise<void>\n public abstract resumeSession(): Promise<void>\n\n public setActive = (): void => {\n console.info(`[Wallet] Set active wallet: ${this.id}`)\n setActiveWallet(this.store, { walletId: this.id })\n }\n\n public setActiveAccount = (account: string): void => {\n console.info(`[Wallet] Set active account: ${account}`)\n setActiveAccount(this.store, {\n walletId: this.id,\n address: account\n })\n }\n\n public abstract signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const signTxnsResult = await this.signTransactions(txnGroup, indexesToSign)\n\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value !== null) {\n acc.push(value)\n }\n return acc\n }, [])\n\n return signedTxns\n }\n\n // ---------- Derived Properties ------------------------------------ //\n\n public get name(): string {\n return this.id.toUpperCase()\n }\n\n public get accounts(): WalletAccount[] {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n return walletState ? walletState.accounts : []\n }\n\n public get addresses(): string[] {\n return this.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n return walletState ? walletState.activeAccount : null\n }\n\n public get activeAddress(): string | null {\n return this.activeAccount?.address ?? null\n }\n\n public get activeNetwork(): NetworkId {\n const state = this.store.state\n return state.activeNetwork\n }\n\n public get isConnected(): boolean {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n return walletState ? walletState.accounts.length > 0 : false\n }\n\n public get isActive(): boolean {\n const state = this.store.state\n return state.activeWallet === this.id\n }\n\n // ---------- Protected Methods ------------------------------------- //\n\n protected onDisconnect(): void {\n removeWallet(this.store, { walletId: this.id })\n }\n}\n","import { CustomWallet, CustomWalletOptions } from './custom'\nimport { DeflyWallet, type DeflyWalletConnectOptions } from './defly'\nimport { ExodusWallet, type ExodusOptions } from './exodus'\nimport { KibisisWallet } from './kibisis'\nimport { KmdWallet, type KmdOptions } from './kmd'\nimport { LuteConnectOptions, LuteWallet } from './lute'\nimport { MagicAuth, MagicAuthOptions } from './magic'\nimport { MnemonicWallet, type MnemonicOptions } from './mnemonic'\nimport { PeraWallet, type PeraWalletConnectOptions } from './pera'\nimport {\n PeraWallet as PeraWalletBeta,\n type PeraWalletConnectOptions as PeraWalletConnectBetaOptions\n} from './pera2'\nimport { WalletConnect, type WalletConnectOptions } from './walletconnect'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type { State } from 'src/store'\n\nexport enum WalletId {\n DEFLY = 'defly',\n CUSTOM = 'custom',\n EXODUS = 'exodus',\n KIBISIS = 'kibisis',\n KMD = 'kmd',\n LUTE = 'lute',\n MAGIC = 'magic',\n MNEMONIC = 'mnemonic',\n PERA = 'pera',\n PERA2 = 'pera-beta',\n WALLETCONNECT = 'walletconnect'\n}\n\nexport type WalletMap = {\n [WalletId.CUSTOM]: typeof CustomWallet\n [WalletId.DEFLY]: typeof DeflyWallet\n [WalletId.EXODUS]: typeof ExodusWallet\n [WalletId.KIBISIS]: typeof KibisisWallet\n [WalletId.KMD]: typeof KmdWallet\n [WalletId.LUTE]: typeof LuteWallet\n [WalletId.MAGIC]: typeof MagicAuth\n [WalletId.MNEMONIC]: typeof MnemonicWallet\n [WalletId.PERA]: typeof PeraWallet\n [WalletId.PERA2]: typeof PeraWalletBeta\n [WalletId.WALLETCONNECT]: typeof WalletConnect\n}\n\nexport type WalletOptionsMap = {\n [WalletId.CUSTOM]: CustomWalletOptions\n [WalletId.DEFLY]: DeflyWalletConnectOptions\n [WalletId.EXODUS]: ExodusOptions\n [WalletId.KIBISIS]: Record<string, never>\n [WalletId.KMD]: KmdOptions\n [WalletId.LUTE]: LuteConnectOptions\n [WalletId.MAGIC]: MagicAuthOptions\n [WalletId.MNEMONIC]: MnemonicOptions\n [WalletId.PERA]: PeraWalletConnectOptions\n [WalletId.PERA2]: PeraWalletConnectBetaOptions\n [WalletId.WALLETCONNECT]: WalletConnectOptions\n}\n\nexport type SupportedWallet = WalletIdConfig<WalletId> | WalletId\n\nexport type WalletConfigMap = {\n [K in keyof WalletOptionsMap]: {\n options?: WalletOptionsMap[K]\n metadata?: Partial<WalletMetadata>\n }\n}\n\nexport type WalletOptions<T extends keyof WalletOptionsMap> = WalletOptionsMap[T]\n\nexport type WalletConfig<T extends keyof WalletConfigMap> = WalletConfigMap[T]\n\nexport type WalletIdConfig<T extends keyof WalletConfigMap> = {\n [K in T]: {\n id: K\n } & WalletConfigMap[K]\n}[T]\n\ntype NonEmptyArray<T> = [T, ...T[]]\n\nexport type SupportedWallets = NonEmptyArray<SupportedWallet>\n\nexport type WalletMetadata = {\n name: string\n icon: string\n}\n\nexport interface BaseWalletConstructor {\n id: WalletId\n metadata: Partial<WalletMetadata> | undefined\n getAlgodClient: () => algosdk.Algodv2\n store: Store<State>\n subscribe: (callback: (state: State) => void) => () => void\n}\n\nexport type WalletConstructor<T extends keyof WalletOptionsMap> = BaseWalletConstructor & {\n options?: WalletOptions<T>\n defaultMetadata?: WalletMetadata\n}\n\nexport type WalletAccount = {\n name: string\n address: string\n}\n\n// Transaction types\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-multisigmetadata */\nexport interface MultisigMetadata {\n /**\n * Multisig version.\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * List of Algorand addresses of possible signers for this\n * multisig. Order is important.\n */\n addrs: string[]\n}\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-wallettransaction */\nexport interface WalletTransaction {\n /**\n * Base64 encoding of the canonical msgpack encoding of a Transaction.\n */\n txn: string\n\n /**\n * Optional authorized address used to sign the transaction when the account\n * is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Multisig metadata used to sign the transaction\n */\n msig?: MultisigMetadata\n\n /**\n * Optional list of addresses that must sign the transactions\n */\n signers?: string[]\n\n /**\n * Optional base64 encoding of the canonical msgpack encoding of a\n * SignedTxn corresponding to txn, when signers=[]\n */\n stxn?: string\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n\n /**\n * Optional message explaining the reason of this group of transaction\n * Field only allowed in the first transaction of a group\n */\n groupMessage?: string\n}\n\n/** @see https://github.com/perawallet/connect/blob/1.3.4/src/util/model/peraWalletModels.ts */\nexport interface SignerTransaction {\n txn: algosdk.Transaction\n\n /**\n * Optional authorized address used to sign the transaction when\n * the account is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Optional list of addresses that must sign the transactions.\n * Wallet skips to sign this txn if signers is empty array.\n * If undefined, wallet tries to sign it.\n */\n signers?: string[]\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n}\n\nexport interface JsonRpcRequest<T = any> {\n id: number\n jsonrpc: string\n method: string\n params: T\n}\n\nexport class SignTxnsError extends Error {\n code: number\n data?: any\n\n constructor(message: string, code: number, data?: any) {\n super(message)\n this.name = 'SignTxnsError'\n this.code = code\n this.data = data\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { DeflyWalletConnect } from '@blockshake/defly-connect'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignerTransaction,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport interface DeflyWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"1024\" height=\"1024\" />\n <path fill=\"#FFFFFF\" d=\"M779.9,684.4L512,230L244.1,684.4L512,529.5L779.9,684.4z\" />\n <path fill=\"#FFFFFF\" d=\"M733.1,730L512,613.5L290.9,730L512,658L733.1,730z\" />\n</svg>\n`)}`\n\nexport class DeflyWallet extends BaseWallet {\n private client: DeflyWalletConnect | null = null\n private options: DeflyWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.DEFLY>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Defly',\n icon: ICON\n }\n\n private async initializeClient(): Promise<DeflyWalletConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('@blockshake/defly-connect')\n const DeflyWalletConnect = module.default\n ? module.default.DeflyWalletConnect\n : module.DeflyWalletConnect\n\n const client = new DeflyWalletConnect(this.options)\n client.connector?.on('disconnect', this.onDisconnect)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n await client.disconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://docs.exodus.com/api-reference/algorand-provider-arc-api/ */\n\ninterface EnableNetworkOpts {\n genesisID?: string\n genesisHash?: string\n}\n\ninterface EnableAccountsOpts {\n accounts?: string[]\n}\n\nexport type ExodusOptions = EnableNetworkOpts & EnableAccountsOpts\n\ninterface EnableNetworkResult {\n genesisID: string\n genesisHash: string\n}\n\ninterface EnableAccountsResult {\n accounts: string[]\n}\n\nexport type EnableResult = EnableNetworkResult & EnableAccountsResult\n\nexport type SignTxnsResult = (string | null)[]\n\nexport interface Exodus {\n isConnected: boolean\n address: string | null\n enable: (options?: ExodusOptions) => Promise<EnableResult>\n signTxns: (transactions: WalletTransaction[]) => Promise<SignTxnsResult>\n}\n\nexport type WindowExtended = { algorand: Exodus } & Window & typeof globalThis\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 300 300\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"grad1\" gradientUnits=\"userSpaceOnUse\" x1=\"246.603\" y1=\"9.2212\" x2=\"174.158\" y2=\"308.5426\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n \n <linearGradient id=\"grad2\" gradientUnits=\"userSpaceOnUse\" x1=\"129.3516\" y1=\"-19.1573\" x2=\"56.9066\" y2=\"280.1641\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n \n <mask id=\"mask1\" maskUnits=\"userSpaceOnUse\" x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\">\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n </mask>\n \n <linearGradient id=\"grad3\" gradientUnits=\"userSpaceOnUse\" x1=\"46.4662\" y1=\"228.7554\" x2=\"171.8638\" y2=\"135.1039\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0.1198\" stop-color=\"#8952FF\" stop-opacity=\"0.87\" />\n <stop offset=\"1\" stop-color=\"#DABDFF\" stop-opacity=\"0\" />\n </linearGradient>\n <rect x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\" fill=\"url(#grad3)\" mask=\"url(#mask1)\" />\n</svg>\n`)}`\n\nexport class ExodusWallet extends BaseWallet {\n private client: Exodus | null = null\n private options: ExodusOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.EXODUS>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Exodus',\n icon: ICON\n }\n\n private async initializeClient(): Promise<Exodus> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n if (typeof window === 'undefined' || (window as WindowExtended).algorand === undefined) {\n throw new Error('Exodus is not available.')\n }\n const client = (window as WindowExtended).algorand\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const { accounts } = await client.enable(this.options)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n const client = await this.initializeClient()\n\n if (!client.isConnected) {\n throw new Error('Exodus is not connected.')\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId, type WalletAccount, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\nimport type { Store } from '@tanstack/store'\n\nexport function isAVMWebProviderSDKError(error: any): error is AVMWebProviderSDK.BaseARC0027Error {\n return typeof error === 'object' && 'code' in error && 'message' in error\n}\n\nexport const KIBISIS_AVM_WEB_PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6'\n\nexport const ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#801C96\" width=\"480\" height=\"480\" />\n <path fill=\"#FFFFFF\" d=\"M393.5,223.2c0-7.3-0.6-14.6-1.6-21.6c-0.9-6.5-2.3-12.8-4-18.9c-18-64.9-77.4-112.5-148-112.5c-70.6,0-130,47.6-148,112.5c-1.7,6.2-3,12.5-4,19c-1,7.1-1.6,14.3-1.6,21.6h0v85.5h19.7v-85.5c0-7.2,0.6-14.4,1.8-21.4c14,1.1,27.6,4.3,40.5,9.5c15.9,6.4,30.3,15.6,42.6,27.3c12.3,11.7,22,25.4,28.7,40.6c6.9,15.6,10.5,32.2,10.5,49.2v81.4h0.1h19.6h0.1v-81.5c0.1-17.1,3.6-33.7,10.5-49.2c6.7-15.2,16.4-28.8,28.7-40.6c4.2-4,8.6-7.7,13.2-11.1v132.2h19.7V223.2h0c0-2.5-0.1-5-0.4-7.4c3.3-1.6,6.6-3.1,10-4.5c12.9-5.2,26.4-8.4,40.4-9.5c1.2,7,1.7,14.2,1.8,21.4v85.5h19.7L393.5,223.2L393.5,223.2z M240.1,277.3c-11.6-29.3-32.7-54.1-59.8-71c2.9-10,8.2-19.1,15.8-26.6c11.8-11.8,27.4-18.2,44-18.2s32.3,6.5,44,18.2c4.1,4.1,7.5,8.7,10.3,13.6c5.6-3.4,11.4-6.4,17.4-9.2c-14-25.2-40.9-42.3-71.8-42.3c-35.9,0-66.3,23-77.5,55.1c-15.5-7.1-32.5-11.8-50.4-13.5c1.3-4,2.7-7.9,4.3-11.8c6.7-15.9,16.4-30.3,28.7-42.6s26.6-22,42.6-28.7c16.5-7,34-10.5,52.1-10.5s35.6,3.5,52.1,10.5c15.9,6.7,30.3,16.4,42.6,28.7s22,26.6,28.7,42.6c1.6,3.9,3.1,7.8,4.3,11.8C309,189.2,260.1,226.5,240.1,277.3z\" />\n <path fill=\"#FFFFFF\" d=\"M158.1,359.8h19.7V245.5c-6.1-5.4-12.7-10-19.7-14V359.8z\" />\n</svg>\n`)}`\n\nexport class KibisisWallet extends BaseWallet {\n public avmWebClient: AVMWebProviderSDK.AVMWebClient | null = null\n protected avmWebProviderSDK: typeof AVMWebProviderSDK | null = null\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.KIBISIS>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Kibisis',\n icon: ICON\n }\n\n /**\n * private functions\n */\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @private\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n private async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n const avmWebClient = this.avmWebClient || (await this._initializeAVMWebClient())\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.disable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @private\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n private async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n const avmWebClient = this.avmWebClient || (await this._initializeAVMWebClient())\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n private async _getGenesisHash(): Promise<string> {\n const algodClient = this.getAlgodClient()\n const version = await algodClient.versionsCheck().do()\n\n return version.genesis_hash_b64\n }\n\n private async _initializeAVMWebClient(): Promise<AVMWebProviderSDK.AVMWebClient> {\n const _functionName = '_initializeAVMWebClient'\n const avmWebProviderSDK = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n\n if (!this.avmWebClient) {\n console.info(`[${KibisisWallet.name}]#${_functionName}: initializing new client...`)\n\n this.avmWebClient = avmWebProviderSDK.AVMWebClient.init()\n }\n\n return this.avmWebClient\n }\n\n private async _initializeAVMWebProviderSDK(): Promise<typeof AVMWebProviderSDK> {\n const _functionName = '_initializeAVMWebProviderSDK'\n\n if (!this.avmWebProviderSDK) {\n console.info(\n `[${KibisisWallet.name}]#${_functionName}: initializing @agoralabs-sh/avm-web-provider...`\n )\n\n this.avmWebProviderSDK = await import('@agoralabs-sh/avm-web-provider')\n\n if (!this.avmWebProviderSDK) {\n throw new Error(\n 'failed to initialize, the @agoralabs-sh/avm-web-provider sdk was not provided'\n )\n }\n }\n\n return this.avmWebProviderSDK\n }\n\n private _mapAVMWebProviderAccountToWalletAccounts(\n accounts: AVMWebProviderSDK.IAccount[]\n ): WalletAccount[] {\n return accounts.map(({ address, name }, idx) => ({\n name: name || `[${this.metadata.name}] Account ${idx + 1}`,\n address\n }))\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method will timeout after 3\n * minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @private\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n private async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n const avmWebClient = this.avmWebClient || (await this._initializeAVMWebClient())\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.signTransactions({\n txns,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * public functions\n */\n\n public async connect(): Promise<WalletAccount[]> {\n let result: AVMWebProviderSDK.IEnableResult\n\n try {\n console.info(`[${this.metadata.name}] Connecting...`)\n\n result = await this._enable()\n\n console.info(\n `[${this.metadata.name}] Successfully connected on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] Error connecting: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n throw error\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public async disconnect(): Promise<void> {\n try {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n\n const result = await this._disable()\n\n console.info(\n `[${this.metadata.name}] Successfully disconnected${result.sessionIds && result.sessionIds.length ? ` sessions [${result.sessionIds.join(',')}]` : ''} on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] Error disconnecting: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n throw error\n }\n }\n\n public async resumeSession(): Promise<void> {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n let result: AVMWebProviderSDK.IEnableResult\n\n if (!walletState) {\n return\n }\n\n try {\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n result = await this._enable()\n\n if (result.accounts.length === 0) {\n throw new Error(`No accounts found!`)\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] Error resuming session: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n let txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Sign transactions\n const signTxnsResult = await this._signTransactions(txnsToSign)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.stxns.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n return result\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] error signing transactions: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\ninterface KmdConstructor {\n token: string | algosdk.KMDTokenHeader | algosdk.CustomTokenHeader\n baseServer?: string\n port?: string | number\n headers?: Record<string, string>\n}\n\nexport type KmdOptions = Partial<Pick<KmdConstructor, 'token'>> &\n Omit<KmdConstructor, 'token'> & {\n wallet?: string\n }\n\ninterface KmdWalletRecord {\n id: string\n name: string\n driver_name?: string\n driver_version?: number\n mnemonic_ux?: boolean\n supported_txs?: Array<any>\n}\n\ninterface ListWalletsResponse {\n wallets: KmdWalletRecord[]\n message?: string\n error?: boolean\n}\n\ninterface InitWalletHandleResponse {\n wallet_handle_token: string\n message?: string\n error?: boolean\n}\n\ninterface ListKeysResponse {\n addresses: string[]\n message?: string\n error?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"algokitGradient\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"400\" x2=\"400\" y2=\"0\">\n <stop offset=\"0\" style=\"stop-color:#31D8EE\"/>\n <stop offset=\"1\" style=\"stop-color:#01DC94\"/>\n </linearGradient>\n <rect fill=\"url(#algokitGradient)\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class KmdWallet extends BaseWallet {\n private client: algosdk.Kmd | null = null\n private options: KmdConstructor\n private walletName: string\n private walletId: string = ''\n private password: string = ''\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.KMD>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const {\n token = 'a'.repeat(64),\n baseServer = 'http://127.0.0.1',\n port = 4002,\n wallet = 'unencrypted-default-wallet'\n } = options || {}\n\n this.options = { token, baseServer, port }\n this.walletName = wallet\n\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'KMD',\n icon: ICON\n }\n\n private async initializeClient(): Promise<algosdk.Kmd> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const { token, baseServer, port } = this.options\n const client = new algosdk.Kmd(token, baseServer, port)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n if (!this.client) {\n await this.initializeClient()\n }\n\n // Get token and fetch accounts\n const token = await this.fetchToken()\n const accounts = await this.fetchAccounts(token)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n // Release token\n await this.releaseToken(token)\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n await this.initializeClient()\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Get token and password\n const token = await this.fetchToken()\n const password = this.getPassword()\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await Promise.all(\n txnsToSign.map((txn) => client.signTransaction(token, password, txn))\n )\n\n // Release token\n await this.releaseToken(token)\n\n return signedTxns\n }\n\n private async fetchWalletId(): Promise<string> {\n console.info(`[${this.metadata.name}] Fetching wallet data...`)\n const client = this.client || (await this.initializeClient())\n\n const { wallets }: ListWalletsResponse = await client.listWallets()\n const wallet = wallets.find((wallet: KmdWalletRecord) => wallet.name === this.walletName)\n\n if (!wallet) {\n throw new Error(`Wallet \"${this.walletName}\" not found!`)\n }\n\n this.walletId = wallet.id\n return wallet.id\n }\n\n private async fetchToken(): Promise<string> {\n console.info(`[${this.metadata.name}] Fetching token...`)\n const client = this.client || (await this.initializeClient())\n\n const walletId = this.walletId || (await this.fetchWalletId())\n const password = this.getPassword()\n\n const { wallet_handle_token }: InitWalletHandleResponse = await client.initWalletHandle(\n walletId,\n password\n )\n return wallet_handle_token\n }\n\n private async releaseToken(token: string): Promise<void> {\n console.info(`[${this.metadata.name}] Releasing token...`)\n const client = this.client || (await this.initializeClient())\n await client.releaseWalletHandle(token)\n }\n\n private getPassword(): string {\n if (this.password) {\n return this.password\n }\n const password = prompt('KMD password') || ''\n this.password = password\n return password\n }\n\n private async fetchAccounts(token: string): Promise<string[]> {\n console.info(`[${this.metadata.name}] Fetching accounts...`)\n const client = this.client || (await this.initializeClient())\n const { addresses }: ListKeysResponse = await client.listKeys(token)\n return addresses\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { byteArrayToBase64, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type LuteConnect from 'lute-connect'\nimport type { SignTxnsError as ISignTxnsError, WalletTransaction } from 'lute-connect'\nimport {\n SignTxnsError,\n type WalletAccount,\n type WalletConstructor,\n type WalletId\n} from 'src/wallets/types'\n\nexport interface LuteConnectOptions {\n siteName?: string\n}\n\nfunction isSignTxnsError(error: any): error is ISignTxnsError {\n return error instanceof Error && 'code' in error\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#AB47BC\" d=\"M283.7,263.6c-0.6,0-1.3-0.1-1.8-0.4c-0.6-0.3-1.1-0.8-1.5-1.3c-0.4-0.6-0.7-1.3-0.8-2 c-0.1-0.8-0.1-1.7,0.1-2.5c0.2-0.9,0.6-1.8,1.2-2.6c0.6-0.8,1.4-1.7,2.2-2.3c0.9-0.7,2.1-1.2,3.2-1.6c1.2-0.4,2.7-0.5,4-0.5 c1.4,0,3,0.3,4.4,0.8c1.5,0.5,3.1,1.4,4.3,2.3c1.4,1,2.8,2.4,3.8,3.7c1.1,1.5,2.1,3.3,2.8,5.1c0.7,1.9,1.2,4.1,1.3,6.1 c0.2,2.1,0,4.6-0.4,6.7c-0.5,2.2-1.4,4.7-2.4,6.7c-1.1,2.1-2.8,4.4-4.4,6.2c-1.8,1.9-4.1,3.7-6.3,5c-2.3,1.4-5.2,2.6-7.9,3.3 c-2.8,0.7-6.1,1.1-8.9,1.1c-3,0-6.5-0.6-9.3-1.4c-3-0.9-6.4-2.4-9.1-4c-2.8-1.7-5.8-4.2-8-6.6c-2.3-2.5-4.6-5.8-6.2-8.9 c-1.7-3.2-3.1-7.1-3.8-10.7c-0.8-3.7-1.1-8-0.9-11.8c0.2-3.9,1.1-8.3,2.3-12c1.3-3.8,3.4-8.1,5.7-11.4c2.3-3.5,5.6-7.1,8.8-9.9 c3.3-2.8,7.5-5.6,11.5-7.5c4.1-1.9,9-3.5,13.5-4.3c4.6-0.8,10-1.1,14.6-0.7c4.8,0.4,10.2,1.6,14.7,3.3c4.7,1.7,9.7,4.4,13.8,7.3 c4.2,3,8.5,7,11.7,10.9c3.3,4.1,6.5,9.2,8.7,14c2.2,4.9,4,10.9,4.9,16.3c0.9,5.5,1,11.9,0.4,17.5c-0.6,5.7-2.2,12.1-4.3,17.4 c-2.1,5.5-5.4,11.4-8.9,16.1c-3.6,4.8-8.4,9.8-13.1,13.6c-4.8,3.8-11,7.5-16.6,9.9c-5.8,2.5-12.8,4.5-19.1,5.4 c-6.4,0.9-13.9,1-20.3,0.2c-6.6-0.8-14-2.7-20.1-5.2c-6.3-2.5-13.1-6.4-18.5-10.5c-5.5-4.2-11.2-9.8-15.4-15.3 c-4.3-5.6-8.4-12.7-11.2-19.2c-2.8-6.7-4.9-14.7-5.9-21.9c-0.9-5.9-2.8-12.6-5.2-18.1c-2.3-5.4-5.9-11.2-9.5-15.8 c-3.6-4.5-8.3-9-13-12.4c-4.5-3.3-10.1-6.4-15.3-8.3c-5-1.9-11.1-3.4-16.5-3.9c-5.2-0.5-11.3-0.3-16.5,0.5c-5,0.8-10.7,2.6-15.3,4.7 c-4.5,2.1-9.4,5.1-13.2,8.3c-3.7,3.1-7.5,7.2-10.2,11.1c-2.7,3.8-5.2,8.6-6.7,13c-1.5,4.2-2.6,9.3-3,13.8c-0.3,4.3-0.1,9.4,0.7,13.7 c0.8,4.1,2.3,8.8,4.2,12.5c1.8,3.6,4.4,7.6,7.1,10.6c2.6,2.9,6,5.9,9.3,8.1c3.1,2.1,7.1,4,10.6,5.1c3.4,1.1,7.5,1.9,11.1,2 c3.5,0.2,7.4-0.2,10.8-1c3.2-0.7,6.8-2.1,9.7-3.6c2.8-1.5,5.7-3.6,8-5.8c2.2-2.1,4.3-4.8,5.9-7.4c1.5-2.5,2.8-5.5,3.5-8.3 c0.7-2.6,1.1-5.7,1.1-8.5c0-2.6-0.5-5.5-1.2-8c-0.7-2.3-1.8-4.9-3.1-6.9c-1.2-1.9-2.9-3.9-4.6-5.4c-1.6-1.4-3.6-2.8-5.5-3.7 c-1.8-0.9-4-1.6-5.9-1.9c-1.8-0.3-3.9-0.4-5.8-0.1c-1.7,0.2-3.6,0.7-5.1,1.4c-1.4,0.6-2.9,1.6-4.1,2.6c-1.1,0.9-2.1,2.2-2.9,3.4 c-0.7,1.1-1.2,2.5-1.5,3.7c-0.3,1.1-0.4,2.4-0.3,3.6c0.1,1,0.4,2.2,0.8,3.1c0.4,0.8,1,1.7,1.6,2.3c0.6,0.5,1.3,1,2.1,1.3 c0.6,0.2,1.5,0.4,2.1,0.3c0.6-0.1,1.3-0.3,1.8-0.6c0.5-0.3,1-0.8,1.2-1.4c0.3-0.5,0.7-1,1.2-1.4c0.5-0.3,1.2-0.6,1.8-0.6 c0.7-0.1,1.5,0.1,2.1,0.3c0.7,0.3,1.5,0.8,2.1,1.3c0.6,0.6,1.3,1.5,1.6,2.3c0.4,0.9,0.7,2.1,0.8,3.1c0.1,1.1,0,2.5-0.3,3.6 c-0.3,1.2-0.9,2.6-1.5,3.7c-0.7,1.2-1.8,2.4-2.9,3.4c-1.2,1-2.7,2-4.1,2.6c-1.5,0.7-3.4,1.2-5.1,1.4c-1.8,0.2-4,0.2-5.8-0.1 c-2-0.3-4.1-1-5.9-1.9c-1.9-0.9-4-2.3-5.5-3.7c-1.7-1.5-3.4-3.5-4.6-5.4c-1.3-2-2.4-4.6-3.1-6.9c-0.7-2.5-1.2-5.4-1.2-8 c0-2.7,0.4-5.8,1.1-8.5c0.7-2.8,2-5.8,3.5-8.3c1.5-2.6,3.7-5.3,5.9-7.4c2.3-2.2,5.2-4.3,8-5.8c2.9-1.6,6.5-2.9,9.7-3.6 c3.4-0.8,7.4-1.1,10.8-1c3.6,0.2,7.7,0.9,11.1,2c3.6,1.2,7.5,3.1,10.6,5.1c3.3,2.1,6.7,5.1,9.3,8.1c2.7,3,5.3,7,7.1,10.6 c1.8,3.8,3.4,8.4,4.2,12.5c0.8,4.3,1.1,9.3,0.7,13.7c-0.4,4.5-1.5,9.6-3,13.8c-1.6,4.4-4.1,9.2-6.7,13c-2.8,3.9-6.5,8-10.2,11.1 c-3.8,3.2-8.7,6.2-13.2,8.3c-4.6,2.1-10.3,3.8-15.3,4.7c-5.2,0.9-11.3,1-16.5,0.5c-5.4-0.5-11.5-2-16.5-3.9 c-5.2-2-10.8-5.1-15.3-8.3c-4.6-3.4-9.4-7.9-13-12.4c-3.7-4.6-7.2-10.4-9.5-15.8c-2.4-5.5-4.3-12.2-5.2-18.1 c-0.9-6.1-1-13.2-0.3-19.3c0.7-6.3,2.5-13.4,4.9-19.2c2.4-6,6.1-12.5,10-17.7c4-5.3,9.3-10.7,14.6-14.8c5.3-4.2,12.1-8.1,18.3-10.7 c6.4-2.7,14.1-4.8,21-5.7c7-1,15.2-1,22.2-0.1c7.2,0.9,15.2,3.1,21.9,5.8c5.6,2.2,12.3,3.9,18.3,4.6c5.8,0.7,12.6,0.5,18.4-0.4 c5.6-0.9,12-2.7,17.2-5c5.1-2.3,10.6-5.6,14.9-9.1c4.2-3.4,8.5-8,11.7-12.3c3.1-4.3,6-9.6,7.8-14.5c1.8-4.8,3.1-10.5,3.6-15.6 c0.5-4.9,0.3-10.7-0.6-15.6c-0.8-4.7-2.5-10.1-4.5-14.4c-2-4.2-4.9-8.8-7.9-12.3c-2.9-3.4-6.8-6.9-10.5-9.5 c-3.6-2.5-8.1-4.8-12.2-6.2c-4-1.4-8.7-2.4-12.9-2.7c-4-0.3-8.7,0-12.7,0.8c-3.8,0.8-8.1,2.2-11.6,4c-3.4,1.7-7,4.1-9.7,6.6 c-2.7,2.4-5.4,5.6-7.3,8.6c-1.9,2.9-3.6,6.5-4.6,9.8c-1,3.2-1.6,6.9-1.7,10.2c-0.1,3.2,0.3,6.8,1,9.9c0.7,2.9,2,6.2,3.5,8.8 c1.4,2.5,3.4,5.1,5.4,7.2c1.9,1.9,4.4,3.8,6.8,5.2c2.2,1.3,5,2.4,7.5,3c2.3,0.6,5.1,0.9,7.6,0.8c2.3-0.1,4.9-0.5,7-1.3 c2-0.7,4.2-1.7,6-2.9c1.6-1.1,3.3-2.7,4.6-4.2c1.2-1.4,2.3-3.2,3-4.9c0.7-1.6,1.2-3.5,1.3-5.1c0.2-1.5,0.1-3.3-0.2-4.9 c-0.3-1.4-0.8-2.9-1.5-4.2c-0.6-1.1-1.5-2.3-2.4-3.2c-0.8-0.8-1.9-1.5-3-2c-0.9-0.4-2.1-0.7-3.1-0.8c-0.9-0.1-1.9,0-2.8,0.3 c-0.7,0.2-1.6,0.6-2.2,1.1c-0.5,0.4-1,1.1-1.3,1.7c-0.3,0.6-0.4,1.3-0.4,1.9c0,0.6,0.2,1.2,0.6,1.7c0.3,0.5,0.5,1.2,0.6,1.7 c0,0.6-0.1,1.3-0.4,1.9c-0.3,0.6-0.8,1.3-1.3,1.7c-0.6,0.5-1.4,0.9-2.2,1.1c-0.9,0.3-1.9,0.3-2.8,0.3c-1-0.1-2.2-0.4-3.1-0.8 c-1-0.5-2.1-1.2-3-2c-0.9-0.9-1.8-2.1-2.4-3.2c-0.7-1.2-1.2-2.8-1.5-4.2c-0.3-1.5-0.4-3.3-0.2-4.9c0.2-1.7,0.7-3.6,1.3-5.1 c0.7-1.7,1.8-3.5,3-4.9c1.3-1.5,3-3.1,4.6-4.2c1.8-1.2,4-2.3,6-2.9c2.2-0.7,4.8-1.2,7-1.3c2.4-0.1,5.2,0.2,7.6,0.8 c2.5,0.6,5.3,1.7,7.5,3c2.4,1.3,4.9,3.2,6.8,5.2c2,2,4,4.7,5.4,7.2c1.5,2.6,2.7,5.9,3.5,8.8c0.8,3.1,1.1,6.7,1,9.9 c-0.1,3.3-0.7,7.1-1.7,10.2c-1,3.3-2.7,6.9-4.6,9.8c-1.9,3-4.7,6.2-7.3,8.6c-2.8,2.5-6.4,5-9.7,6.6c-3.5,1.8-7.8,3.2-11.6,4 c-4,0.8-8.7,1.1-12.7,0.8c-4.2-0.3-9-1.3-12.9-2.7c-4.1-1.4-8.6-3.7-12.2-6.2c-3.7-2.6-7.6-6.1-10.5-9.5c-3-3.6-5.9-8.1-7.9-12.3 c-2-4.4-3.7-9.7-4.5-14.4c-0.8-4.9-1.1-10.6-0.6-15.6c0.5-5.1,1.8-10.8,3.6-15.6c1.8-4.9,4.7-10.3,7.8-14.5 c3.2-4.4,7.5-8.9,11.7-12.3c4.3-3.5,9.8-6.9,14.9-9.1c5.2-2.3,11.6-4.2,17.2-5c5.8-0.9,12.6-1,18.4-0.4c6,0.7,12.7,2.4,18.3,4.6 c5.7,2.3,12,5.7,16.9,9.4c5.1,3.8,10.3,8.9,14.2,13.8c4,5.1,7.8,11.5,10.3,17.5c2.6,6.1,4.6,13.5,5.5,20c0.9,6.7,1,14.5,0.1,21.2 c-0.9,6.9-2.9,14.6-5.5,21c-2.7,6.5-6.8,13.6-11,19.3c-4.4,5.7-10.3,11.7-16,16c-4.7,3.7-9.5,8.7-13.1,13.6 c-3.5,4.7-6.8,10.7-8.9,16.1c-2.1,5.3-3.6,11.7-4.3,17.4c-0.6,5.5-0.4,12,0.4,17.5c0.9,5.3,2.6,11.3,4.9,16.3c2.2,4.8,5.4,10,8.7,14 c3.2,3.9,7.6,8,11.7,10.9c4,2.9,9.1,5.6,13.8,7.3c4.5,1.7,9.9,2.9,14.7,3.3c4.6,0.4,10,0.2,14.6-0.7c4.4-0.8,9.4-2.4,13.5-4.3 c3.9-1.9,8.2-4.6,11.5-7.5c3.2-2.7,6.4-6.4,8.8-9.9c2.3-3.4,4.4-7.6,5.7-11.4c1.2-3.7,2.1-8.1,2.3-12c0.2-3.7-0.1-8.1-0.9-11.8 c-0.8-3.5-2.2-7.5-3.8-10.7c-1.6-3.1-3.9-6.3-6.2-8.9c-2.2-2.4-5.2-4.9-8-6.6c-2.7-1.7-6-3.2-9.1-4c-2.9-0.8-6.3-1.4-9.3-1.4 c-2.9,0-6.2,0.4-8.9,1.1c-2.6,0.7-5.5,1.9-7.9,3.3c-2.2,1.3-4.5,3.2-6.3,5c-1.7,1.8-3.3,4-4.4,6.2c-1.1,2-2,4.5-2.4,6.7 c-0.4,2.1-0.6,4.5-0.4,6.7c0.2,2,0.6,4.2,1.3,6.1c0.6,1.7,1.7,3.6,2.8,5.1c1,1.3,2.4,2.7,3.8,3.7c1.3,0.9,2.8,1.8,4.3,2.3 c1.3,0.5,2.9,0.8,4.4,0.8c1.3,0,2.7-0.1,4-0.5c1.1-0.3,2.3-0.9,3.2-1.6c0.8-0.6,1.7-1.4,2.2-2.3c0.5-0.7,0.9-1.7,1.2-2.6 c0.2-0.8,0.2-1.7,0.1-2.5c-0.1-0.7-0.4-1.4-0.8-2c-0.4-0.5-0.9-1-1.5-1.3C285,263.7,284.3,263.6,283.7,263.6L283.7,263.6z\" />\n</svg>\n`)}`\n\nexport class LuteWallet extends BaseWallet {\n private client: LuteConnect | null = null\n private options: LuteConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.LUTE>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.siteName) {\n throw new Error('[LuteWallet] Missing required option: siteName')\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Lute',\n icon: ICON\n }\n\n private async initializeClient(): Promise<LuteConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('lute-connect')\n const LuteConnect = module.default\n\n const client = new LuteConnect(this.options.siteName as string)\n this.client = client\n return client\n }\n\n private async getGenesisId(): Promise<string> {\n const algodClient = this.getAlgodClient()\n const genesis = await algodClient.genesis().do()\n const genesisId = `${genesis.network}-${genesis.id}`\n\n return genesisId\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const genesisId = await this.getGenesisId()\n const accounts = await client.connect(genesisId)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n await this.initializeClient()\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n\n return signTxnsResult\n } catch (error) {\n if (isSignTxnsError(error)) {\n throw new SignTxnsError(error.message, error.code)\n }\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { InstanceWithExtensions, SDKBase } from '@magic-sdk/provider'\nimport type { AlgorandExtension } from '@magic-ext/algorand'\nimport type { MagicUserMetadata } from 'magic-sdk'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://magic.link/docs/blockchains/other-chains/other/algorand */\n\nexport interface MagicAuthOptions {\n apiKey?: string\n}\n\nexport type MagicAuthClient = InstanceWithExtensions<\n SDKBase,\n {\n algorand: AlgorandExtension\n }\n>\n\n// @todo: export after switching to namespace exports (collides with Exodus.SignTxnsResult)\ntype SignTxnsResult = (string | undefined)[]\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 47 47\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#6851FF\" d=\"M 23.960861 1.80769 C 25.835077 4.103153 27.902216 6.23489 30.137539 8.178169 C 28.647968 13.009323 27.846092 18.142094 27.846092 23.462154 C 27.846092 28.782307 28.648062 33.915169 30.13763 38.746368 C 27.902216 40.689724 25.835077 42.821476 23.960861 45.116985 C 22.086554 42.821476 20.019415 40.689632 17.783998 38.746368 C 19.273476 33.915169 20.075445 28.7824 20.075445 23.462337 C 20.075445 18.142277 19.273476 13.009506 17.783998 8.178318 C 20.019415 6.235001 22.086554 4.10321 23.960861 1.80769 Z M 13.511427 35.406403 C 11.145139 33.747814 8.633816 32.282063 6.000269 31.031937 C 6.730776 28.637476 7.123754 26.095783 7.123754 23.462429 C 7.123754 20.828892 6.730762 18.287201 6.000235 15.892738 C 8.633816 14.642616 11.145175 13.176861 13.511501 11.518276 C 14.416311 15.352554 14.895074 19.351414 14.895074 23.462154 C 14.895074 27.572985 14.416283 31.571938 13.511427 35.406403 Z M 33.027046 23.462337 C 33.027046 27.572985 33.505753 31.571846 34.410553 35.406124 C 36.776859 33.747631 39.288094 32.281876 41.921539 31.031845 C 41.191017 28.637384 40.798061 26.095692 40.798061 23.462246 C 40.798061 20.8288 41.191017 18.287201 41.921539 15.89283 C 39.288094 14.642708 36.776768 13.177048 34.410553 11.518555 C 33.505753 15.352831 33.027046 19.351692 33.027046 23.462337 Z\" />\n</svg>\n`)}`\n\nexport class MagicAuth extends BaseWallet {\n private client: MagicAuthClient | null = null\n private options: MagicAuthOptions\n\n protected store: Store<State>\n public userInfo: MagicUserMetadata | null = null\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MAGIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.apiKey) {\n throw new Error(`[${this.metadata.name}] Missing required option: apiKey`)\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Magic',\n icon: ICON\n }\n\n private async initializeClient(): Promise<MagicAuthClient> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const Magic = (await import('magic-sdk')).Magic\n const AlgorandExtension = (await import('@magic-ext/algorand')).AlgorandExtension\n const client = new Magic(this.options.apiKey as string, {\n extensions: {\n algorand: new AlgorandExtension({\n rpcUrl: ''\n })\n }\n })\n this.client = client\n return client\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n if (!args?.email || typeof args.email !== 'string') {\n throw new Error('Magic Link provider requires an email (string) to connect')\n }\n\n const { email } = args\n\n const client = this.client || (await this.initializeClient())\n\n console.info(`[${this.metadata.name}] Logging in ${email}...`)\n await client.auth.loginWithMagicLink({ email })\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n console.info(`[${this.metadata.name}] Login successful`, userInfo)\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? 'Magic Wallet 1',\n address: userInfo.publicAddress\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n console.info(`[${this.metadata.name}] Logging out ${this.userInfo?.email || 'user'}...`)\n await client.user.logout()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n const client = this.client || (await this.initializeClient())\n const isLoggedIn = await client.user.isLoggedIn()\n\n if (!isLoggedIn) {\n console.warn(`[${this.metadata.name}] Not logged in, please reconnect...`)\n this.onDisconnect()\n return\n }\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n await client.user.logout()\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n await client.user.logout()\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? `${this.metadata.name} Account 1`,\n address: userInfo.publicAddress\n }\n\n const storedAccount = walletState.accounts[0]\n\n const { name, address } = walletAccount\n const { name: storedName, address: storedAddress } = storedAccount\n\n const match = name === storedName && address === storedAddress\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session account mismatch, updating account`, {\n prev: storedAccount,\n current: walletAccount\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: [walletAccount]\n })\n }\n console.info(`[${this.metadata.name}] Session resumed.`)\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signTxnsResult = (await client.algorand.signGroupTransactionV2(\n txnsToSign\n )) as SignTxnsResult\n\n // Convert base64 to Uint8Array, undefined to null\n const result = signTxnsResult.map((value) => {\n if (value === undefined) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { NetworkId } from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport { LOCAL_STORAGE_KEY, WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\nexport type MnemonicOptions = {\n persistToStorage?: boolean\n}\n\nexport const LOCAL_STORAGE_MNEMONIC_KEY = `${LOCAL_STORAGE_KEY}_mnemonic`\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#525252\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class MnemonicWallet extends BaseWallet {\n private account: algosdk.Account | null = null\n private options: MnemonicOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MNEMONIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const { persistToStorage = false } = options || {}\n this.options = { persistToStorage }\n\n this.store = store\n\n if (this.options.persistToStorage) {\n console.warn(\n `[${this.metadata.name}] Persisting mnemonics to storage is insecure. Any private key mnemonics used should never hold real Algos (i.e., on MainNet). Use with caution!`\n )\n }\n }\n\n static defaultMetadata = {\n name: 'Mnemonic',\n icon: ICON\n }\n\n private loadMnemonicFromStorage(): string | null {\n return StorageAdapter.getItem(LOCAL_STORAGE_MNEMONIC_KEY)\n }\n\n private saveMnemonicToStorage(mnemonic: string): void {\n StorageAdapter.setItem(LOCAL_STORAGE_MNEMONIC_KEY, mnemonic)\n }\n\n private checkMainnet(): void {\n try {\n const network = this.activeNetwork\n if (network === NetworkId.MAINNET) {\n console.warn(\n `[${this.metadata.name}] The Mnemonic wallet provider is insecure and intended for testing only. Any private key mnemonics used should never hold real Algos (i.e., on MainNet).`\n )\n throw new Error('MainNet active network detected. Aborting.')\n }\n } catch (error) {\n this.disconnect()\n throw error\n }\n }\n\n private initializeAccount(): algosdk.Account {\n let mnemonic = this.loadMnemonicFromStorage()\n if (!mnemonic) {\n mnemonic = prompt('Enter 25-word mnemonic passphrase:')\n if (!mnemonic) {\n this.account = null\n throw new Error('No mnemonic provided')\n }\n\n if (this.options.persistToStorage) {\n console.warn(`[${this.metadata.name}] Mnemonic saved to localStorage.`)\n this.saveMnemonicToStorage(mnemonic)\n }\n }\n\n const account = algosdk.mnemonicToSecretKey(mnemonic)\n this.account = account\n return account\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n console.info(`[${this.metadata.name}] Connecting...`)\n const account = this.initializeAccount()\n\n const walletAccount = {\n name: `${this.metadata.name} Account`,\n address: account.addr\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n this.account = null\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // Don't resume session, disconnect instead\n if (walletState) {\n this.disconnect()\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = signer === this.account!.addr\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && signer === this.account!.addr\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Sign transactions\n const signedTxns = txnsToSign.map((txn) => txn.signTxn(this.account!.sk))\n return signedTxns\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { PeraWalletConnect } from '@perawallet/connect'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignerTransaction,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport interface PeraWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n compactMode?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#FFEE55\" width=\"200\" height=\"200\" />\n <path fill=\"#1C1C1C\" d=\"M106.1,64.3c2.2,9.1,1.5,17-1.7,17.8c-3.1,0.8-7.4-6-9.6-15c-2.2-9.1-1.5-17,1.7-17.8 C99.6,48.5,103.9,55.2,106.1,64.3z\" />\n <path fill=\"#1C1C1C\" d=\"M142.2,72.1c-4.8-5.1-14.5-3.7-21.6,3.1c-7,6.9-8.8,16.6-4,21.7c4.8,5.1,14.5,3.7,21.6-3.1 C145.3,86.9,147.1,77.2,142.2,72.1z\" />\n <path fill=\"#1C1C1C\" d=\"M103.7,150.8c3.1-0.8,3.7-9.2,1.4-18.8c-2.3-9.6-6.7-16.8-9.8-16c-3.1,0.8-3.7,9.2-1.4,18.8 C96.2,144.3,100.6,151.5,103.7,150.8z\" />\n <path fill=\"#1C1C1C\" d=\"M72.1,76.8c9,2.6,15.5,7.3,14.6,10.3c-0.9,3.1-8.9,3.4-17.8,0.8s-15.5-7.3-14.6-10.3 C55.1,74.5,63.1,74.1,72.1,76.8z\" />\n <path fill=\"#1C1C1C\" d=\"M130.2,111.5c9.5,2.8,16.5,7.6,15.6,10.6c-0.9,3.1-9.3,3.3-18.8,0.5c-9.5-2.8-16.5-7.6-15.6-10.6 C112.2,108.9,120.7,108.7,130.2,111.5z\" />\n <path fill=\"#1C1C1C\" d=\"M82.1,105c-2.2-2.3-9.5,1-16.3,7.5c-6.8,6.4-10.4,13.5-8.2,15.8c2.2,2.3,9.5-1,16.3-7.5 C80.7,114.4,84.3,107.3,82.1,105z\" />\n</svg>\n`)}`\n\nexport class PeraWallet extends BaseWallet {\n private client: PeraWalletConnect | null = null\n private options: PeraWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.PERA>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Pera',\n icon: ICON\n }\n\n private async initializeClient(): Promise<PeraWalletConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('@perawallet/connect')\n const PeraWalletConnect = module.default\n ? module.default.PeraWalletConnect\n : module.PeraWalletConnect\n\n const client = new PeraWalletConnect(this.options)\n client.connector?.on('disconnect', this.onDisconnect)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n await client.disconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { PeraWalletConnect } from '@perawallet/connect-beta'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignerTransaction,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport interface PeraWalletConnectOptions {\n projectId: string\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n compactMode?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#FFEE55\" width=\"200\" height=\"200\" />\n <path fill=\"#1C1C1C\" d=\"M106.1,64.3c2.2,9.1,1.5,17-1.7,17.8c-3.1,0.8-7.4-6-9.6-15c-2.2-9.1-1.5-17,1.7-17.8 C99.6,48.5,103.9,55.2,106.1,64.3z\" />\n <path fill=\"#1C1C1C\" d=\"M142.2,72.1c-4.8-5.1-14.5-3.7-21.6,3.1c-7,6.9-8.8,16.6-4,21.7c4.8,5.1,14.5,3.7,21.6-3.1 C145.3,86.9,147.1,77.2,142.2,72.1z\" />\n <path fill=\"#1C1C1C\" d=\"M103.7,150.8c3.1-0.8,3.7-9.2,1.4-18.8c-2.3-9.6-6.7-16.8-9.8-16c-3.1,0.8-3.7,9.2-1.4,18.8 C96.2,144.3,100.6,151.5,103.7,150.8z\" />\n <path fill=\"#1C1C1C\" d=\"M72.1,76.8c9,2.6,15.5,7.3,14.6,10.3c-0.9,3.1-8.9,3.4-17.8,0.8s-15.5-7.3-14.6-10.3 C55.1,74.5,63.1,74.1,72.1,76.8z\" />\n <path fill=\"#1C1C1C\" d=\"M130.2,111.5c9.5,2.8,16.5,7.6,15.6,10.6c-0.9,3.1-9.3,3.3-18.8,0.5c-9.5-2.8-16.5-7.6-15.6-10.6 C112.2,108.9,120.7,108.7,130.2,111.5z\" />\n <path fill=\"#1C1C1C\" d=\"M82.1,105c-2.2-2.3-9.5,1-16.3,7.5c-6.8,6.4-10.4,13.5-8.2,15.8c2.2,2.3,9.5-1,16.3-7.5 C80.7,114.4,84.3,107.3,82.1,105z\" />\n</svg>\n`)}`\n\nexport class PeraWallet extends BaseWallet {\n private client: PeraWalletConnect | null = null\n private options: PeraWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.PERA2>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.projectId) {\n throw new Error(`[${this.metadata.name}] Missing required option: projectId`)\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Pera',\n icon: ICON\n }\n\n private async initializeClient(): Promise<PeraWalletConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('@perawallet/connect-beta')\n\n const PeraWalletConnect = module.PeraWalletConnect || module.default.PeraWalletConnect\n\n const client = new PeraWalletConnect(this.options)\n client.client?.on('session_delete', this.onDisconnect)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n await client.disconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { caipChainId } from 'src/network'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n formatJsonRpcRequest,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletConnectModal, WalletConnectModalConfig } from '@walletconnect/modal'\nimport type SignClient from '@walletconnect/sign-client'\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\ninterface SignClientOptions {\n projectId: string\n relayUrl?: string\n metadata?: SignClientTypes.Metadata\n}\n\ntype WalletConnectModalOptions = Pick<\n WalletConnectModalConfig,\n | 'enableExplorer'\n | 'explorerRecommendedWalletIds'\n | 'privacyPolicyUrl'\n | 'termsOfServiceUrl'\n | 'themeMode'\n | 'themeVariables'\n>\n\nexport type WalletConnectOptions = SignClientOptions & WalletConnectModalOptions\n\nexport type SignTxnsResponse = Array<Uint8Array | number[] | string | null | undefined>\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionError'\n }\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"480\" height=\"480\" fill=\"#FFFFFF\" />\n <path fill=\"#3396FF\" d=\"M126.6,168c62.6-61.3,164.2-61.3,226.8,0l7.5,7.4c3.1,3.1,3.1,8,0,11.1l-25.8,25.2c-1.6,1.5-4.1,1.5-5.7,0l-10.4-10.2c-43.7-42.8-114.5-42.8-158.2,0l-11.1,10.9c-1.6,1.5-4.1,1.5-5.7,0l-25.8-25.2c-3.1-3.1-3.1-8,0-11.1L126.6,168zM406.7,220.2l22.9,22.5c3.1,3.1,3.1,8,0,11.1L326.2,355.1c-3.1,3.1-8.2,3.1-11.3,0l-73.4-71.9c-0.8-0.8-2.1-0.8-2.8,0l-73.4,71.9c-3.1,3.1-8.2,3.1-11.3,0L50.3,253.8c-3.1-3.1-3.1-8,0-11.1l22.9-22.5c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0 l73.4-71.9c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0l73.4-71.9C398.5,217.1,403.6,217.1,406.7,220.2L406.7,220.2z\" />\n</svg>\n`)}`\n\nexport class WalletConnect extends BaseWallet {\n private client: SignClient | null = null\n private options: SignClientOptions\n private modal: WalletConnectModal | null = null\n private modalOptions: WalletConnectModalOptions\n private session: SessionTypes.Struct | null = null\n private chains: string[]\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.WALLETCONNECT>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.projectId) {\n throw new Error(`[${this.metadata.name}] Missing required option: projectId`)\n }\n\n const {\n projectId,\n relayUrl = 'wss://relay.walletconnect.com',\n metadata: metadataOptions,\n ...modalOptions\n } = options\n\n const clientMetadata: SignClientTypes.Metadata = {\n ...this.getWindowMetadata(),\n ...metadataOptions\n }\n\n this.options = {\n projectId,\n relayUrl,\n metadata: clientMetadata\n }\n\n this.modalOptions = modalOptions\n this.chains = Object.values(caipChainId)\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'WalletConnect',\n icon: ICON\n }\n\n /**\n * Get metadata from the current window. This is adapted from the @walletconnect/utils\n * implementation, to avoid requiring the entire package as a dependency.\n * @see https://github.com/WalletConnect/walletconnect-utils/blob/master/browser/window-metadata/src/index.ts\n */\n private getWindowMetadata(): SignClientTypes.Metadata {\n let doc: Document\n let loc: Location\n\n const defaultMetadata = {\n name: '',\n description: '',\n url: '',\n icons: []\n }\n\n function getFromWindow<T>(name: string): T | undefined {\n let res: T | undefined\n if (typeof window !== 'undefined' && typeof (window as any)[name] !== 'undefined') {\n res = (window as any)[name]\n }\n return res\n }\n\n function getFromWindowOrThrow<T>(name: string): T {\n const res = getFromWindow<T>(name)\n if (!res) {\n throw new Error(`${name} is not defined in Window`)\n }\n return res\n }\n\n function getDocumentOrThrow(): Document {\n return getFromWindowOrThrow<Document>('document')\n }\n\n function getLocationOrThrow(): Location {\n return getFromWindowOrThrow<Location>('location')\n }\n\n try {\n doc = getDocumentOrThrow()\n loc = getLocationOrThrow()\n } catch (e) {\n return defaultMetadata\n }\n\n function getIcons(): string[] {\n const links: HTMLCollectionOf<HTMLLinkElement> = doc.getElementsByTagName('link')\n const icons: string[] = []\n\n for (let i = 0; i < links.length; i++) {\n const link: HTMLLinkElement = links[i]\n\n const rel: string | null = link.getAttribute('rel')\n if (rel) {\n if (rel.toLowerCase().indexOf('icon') > -1) {\n const href: string | null = link.getAttribute('href')\n\n if (href) {\n if (\n href.toLowerCase().indexOf('https:') === -1 &&\n href.toLowerCase().indexOf('http:') === -1 &&\n href.indexOf('//') !== 0\n ) {\n let absoluteHref: string = loc.protocol + '//' + loc.host\n\n if (href.indexOf('/') === 0) {\n absoluteHref += href\n } else {\n const path: string[] = loc.pathname.split('/')\n path.pop()\n const finalPath: string = path.join('/')\n absoluteHref += finalPath + '/' + href\n }\n\n icons.push(absoluteHref)\n } else if (href.indexOf('//') === 0) {\n const absoluteUrl: string = loc.protocol + href\n\n icons.push(absoluteUrl)\n } else {\n icons.push(href)\n }\n }\n }\n }\n }\n\n return icons\n }\n\n function getWindowMetadataOfAny(...args: string[]): string {\n const metaTags: HTMLCollectionOf<HTMLMetaElement> = doc.getElementsByTagName('meta')\n\n for (let i = 0; i < metaTags.length; i++) {\n const tag: HTMLMetaElement = metaTags[i]\n const attributes: Array<string | null> = ['itemprop', 'property', 'name']\n .map((target: string) => tag.getAttribute(target))\n .filter((attr: string | null) => {\n if (attr) {\n return args.includes(attr)\n }\n return false\n })\n\n if (attributes.length && attributes) {\n const content: string | null = tag.getAttribute('content')\n if (content) {\n return content\n }\n }\n }\n\n return ''\n }\n\n function getName(): string {\n let name: string = getWindowMetadataOfAny('name', 'og:site_name', 'og:title', 'twitter:title')\n\n if (!name) {\n name = doc.title\n }\n\n return name\n }\n\n function getDescription(): string {\n const description: string = getWindowMetadataOfAny(\n 'description',\n 'og:description',\n 'twitter:description',\n 'keywords'\n )\n\n return description\n }\n\n const name: string = getName()\n const description: string = getDescription()\n const url: string = loc.origin\n const icons: string[] = getIcons()\n\n const meta: SignClientTypes.Metadata = {\n description,\n url,\n icons,\n name\n }\n\n return meta\n }\n\n private async initializeClient(): Promise<SignClient> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const SignClient = (await import('@walletconnect/sign-client')).SignClient\n const client = await SignClient.init(this.options)\n\n client.on('session_event', (args) => {\n console.log(`[${this.metadata.name}] EVENT`, 'session_event', args)\n })\n\n client.on('session_update', ({ topic, params }) => {\n console.log(`[${this.metadata.name}] EVENT`, 'session_update', { topic, params })\n const { namespaces } = params\n const session = client.session.get(topic)\n const updatedSession = { ...session, namespaces }\n this.onSessionConnected(updatedSession)\n })\n\n client.on('session_delete', () => {\n console.log(`[${this.metadata.name}] EVENT`, 'session_delete')\n this.session = null\n })\n\n this.client = client\n return client\n }\n\n private async initializeModal(): Promise<WalletConnectModal> {\n console.info(`[${this.metadata.name}] Initializing modal...`)\n const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal\n const modal = new WalletConnectModal({\n projectId: this.options.projectId,\n chains: this.chains,\n ...this.modalOptions\n })\n\n modal.subscribeModal((state) =>\n console.info(`[${this.metadata.name}] Modal ${state.open ? 'open' : 'closed'}`)\n )\n\n this.modal = modal\n return modal\n }\n\n private onSessionConnected(session: SessionTypes.Struct): WalletAccount[] {\n const caipAccounts = session.namespaces.algorand!.accounts\n\n if (!caipAccounts.length) {\n throw new Error('No accounts found!')\n }\n\n // @todo: Validate format of CAIP-10 accounts\n\n // Filter duplicate accounts (same address, different chain)\n const accounts = [...new Set(caipAccounts.map((account) => account.split(':').pop()!))]\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n const newWalletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: newWalletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, newWalletState)\n } else {\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n }\n\n this.session = session\n return walletAccounts\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n try {\n const client = this.client || (await this.initializeClient())\n const modal = this.modal || (await this.initializeModal())\n\n const requiredNamespaces = {\n algorand: {\n chains: this.chains,\n methods: ['algo_signTxn'],\n events: []\n }\n }\n\n const { uri, approval } = await client.connect({ requiredNamespaces })\n\n if (!uri) {\n throw new Error('No URI found')\n }\n\n await modal.openModal({ uri })\n\n const session = await approval()\n const walletAccounts = this.onSessionConnected(session)\n\n return walletAccounts\n } finally {\n this.modal?.closeModal()\n }\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n try {\n this.onDisconnect()\n if (this.client && this.session) {\n await this.client.disconnect({\n topic: this.session.topic,\n reason: {\n message: 'User disconnected.',\n code: 6000\n }\n })\n }\n console.info(`[${this.metadata.name}] Disconnected.`)\n } catch (error: any) {\n console.error(error)\n }\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n\n if (client.session.length) {\n const lastKeyIndex = client.session.keys.length - 1\n const restoredSession = client.session.get(client.session.keys[lastKeyIndex])\n this.onSessionConnected(restoredSession)\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n if (!this.session) {\n throw new SessionError(`No session found!`)\n }\n\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Format JSON-RPC request\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign])\n\n // Sign transactions\n const signTxnsResult = await client.request<SignTxnsResponse>({\n chainId: caipChainId[this.activeNetwork]!,\n topic: this.session.topic,\n request\n })\n\n // Filter out unsigned transactions, convert signed transactions to Uint8Array\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value) {\n let signedTxn: Uint8Array\n if (typeof value === 'string') {\n signedTxn = base64ToByteArray(value)\n } else if (value instanceof Uint8Array) {\n signedTxn = value\n } else if (Array.isArray(value)) {\n signedTxn = new Uint8Array(value)\n } else {\n // Log unexpected types for debugging\n console.warn(`[${this.metadata.name}] Unexpected type in signTxnsResult`, value)\n signedTxn = new Uint8Array()\n }\n acc.push(signedTxn)\n }\n return acc\n }, [])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n } catch (error) {\n if (error instanceof SessionError) {\n this.onDisconnect()\n }\n console.error(`[${this.metadata.name}] Error signing transactions:`, error)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletId, type JsonRpcRequest, type WalletAccount, type WalletMap } from './wallets/types'\nimport { CustomWallet } from './wallets/custom'\nimport { DeflyWallet } from './wallets/defly'\nimport { ExodusWallet } from './wallets/exodus'\nimport { KibisisWallet } from './wallets/kibisis'\nimport { KmdWallet } from './wallets/kmd'\nimport { LuteWallet } from './wallets/lute'\nimport { MagicAuth } from './wallets/magic'\nimport { MnemonicWallet } from './wallets/mnemonic'\nimport { PeraWallet } from './wallets/pera'\nimport { PeraWallet as PeraWalletBeta } from './wallets/pera2'\nimport { WalletConnect } from './wallets/walletconnect'\n\nexport function createWalletMap(): WalletMap {\n return {\n [WalletId.CUSTOM]: CustomWallet,\n [WalletId.DEFLY]: DeflyWallet,\n [WalletId.EXODUS]: ExodusWallet,\n [WalletId.KIBISIS]: KibisisWallet,\n [WalletId.KMD]: KmdWallet,\n [WalletId.LUTE]: LuteWallet,\n [WalletId.MAGIC]: MagicAuth,\n [WalletId.MNEMONIC]: MnemonicWallet,\n [WalletId.PERA]: PeraWallet,\n [WalletId.PERA2]: PeraWalletBeta,\n [WalletId.WALLETCONNECT]: WalletConnect\n }\n}\n\nexport function compareAccounts(accounts: WalletAccount[], compareTo: WalletAccount[]): boolean {\n const addresses = new Set(accounts.map((account) => account.address))\n const compareAddresses = new Set(compareTo.map((account) => account.address))\n\n if (addresses.size !== compareAddresses.size) {\n return false\n }\n\n // Check if every address in addresses is also in compareAddresses\n for (const address of addresses) {\n if (!compareAddresses.has(address)) {\n return false\n }\n }\n\n return true\n}\n\nexport function base64ToByteArray(blob: string): Uint8Array {\n return stringToByteArray(atob(blob))\n}\n\nexport function byteArrayToBase64(array: Uint8Array): string {\n return btoa(byteArrayToString(array))\n}\n\nexport function stringToByteArray(str: string): Uint8Array {\n const array = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n array[i] = str.charCodeAt(i)\n }\n return array\n}\n\nexport function byteArrayToString(array: Uint8Array): string {\n let result = ''\n for (let i = 0; i < array.length; i++) {\n result += String.fromCharCode(array[i])\n }\n return result\n}\n\nexport function isSignedTxn(\n txnDecodeObj: algosdk.EncodedTransaction | algosdk.EncodedSignedTransaction\n): txnDecodeObj is algosdk.EncodedSignedTransaction {\n return (txnDecodeObj as algosdk.EncodedSignedTransaction).txn !== undefined\n}\n\nexport function isTransaction(item: any): item is algosdk.Transaction {\n return (\n item && typeof item === 'object' && 'genesisID' in item && typeof item.genesisID === 'string'\n )\n}\n\nexport function isTransactionArray(\n txnGroup: any\n): txnGroup is algosdk.Transaction[] | algosdk.Transaction[][] {\n if (!Array.isArray(txnGroup) || txnGroup.length === 0) {\n return false\n }\n\n if (isTransaction(txnGroup[0])) {\n return true\n }\n\n if (Array.isArray(txnGroup[0]) && txnGroup[0].length > 0 && isTransaction(txnGroup[0][0])) {\n return true\n }\n\n return false\n}\n\nexport function flattenTxnGroup<T>(txnGroup: T[]): T extends (infer U)[] ? U[] : T[] {\n return Array.isArray(txnGroup[0]) ? ((txnGroup as any[]).flat() as any) : txnGroup\n}\n\nfunction getPayloadId(): number {\n const date = Date.now() * Math.pow(10, 3)\n const extra = Math.floor(Math.random() * Math.pow(10, 3))\n return date + extra\n}\n\nexport function formatJsonRpcRequest<T = any>(method: string, params: T): JsonRpcRequest<T> {\n return {\n id: getPayloadId(),\n jsonrpc: '2.0',\n method,\n params\n }\n}\n\nexport function deepMerge(target: any, source: any): any {\n const isObject = (obj: any) => obj && typeof obj === 'object'\n\n if (!isObject(target) || !isObject(source)) {\n throw new Error('Target and source must be objects')\n }\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n\n return target\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\nexport type CustomProvider = {\n connect(args?: Record<string, any>): Promise<WalletAccount[]>\n disconnect?(): Promise<void>\n resumeSession?(): Promise<WalletAccount[] | void>\n signTransactions?<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n transactionSigner?(\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]>\n}\n\nexport interface CustomWalletOptions {\n provider: CustomProvider\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" fill=\"#525252\" />\n</svg>\n`)}`\n\nexport class CustomWallet extends BaseWallet {\n private provider: CustomProvider\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.CUSTOM>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.provider) {\n throw new Error(`[${this.metadata.name}] Missing required option: provider`)\n }\n this.provider = options.provider\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Custom',\n icon: ICON\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n try {\n if (!this.provider.connect) {\n throw new Error(`[${this.metadata.name}] Method not supported: connect`)\n }\n\n const walletAccounts = await this.provider.connect(args)\n\n if (walletAccounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error connecting:`, error.message || error)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n await this.provider.disconnect?.()\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const result = await this.provider.resumeSession?.()\n\n if (Array.isArray(result)) {\n const walletAccounts = result\n\n if (walletAccounts.length === 0) {\n throw new Error(`[${this.metadata.name}] No accounts found!`)\n }\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n }\n console.info(`[${this.metadata.name}] Session resumed.`)\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session:`, error.message)\n throw error\n }\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!this.provider.signTransactions) {\n throw new Error(`[${this.metadata.name}] Method not supported: signTransactions`)\n }\n return await this.provider.signTransactions(txnGroup, indexesToSign)\n }\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!this.provider.transactionSigner) {\n throw new Error(`[${this.metadata.name}] Method not supported: transactionSigner`)\n }\n return await this.provider.transactionSigner(txnGroup, indexesToSign)\n }\n}\n"],"mappings":"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","names":["SDKErrorCode","SDKWarningCode","RPCErrorCode","Wallets","Events","MagicPayloadMethod","MagicIncomingWindowMessage","MagicOutgoingWindowMessage","DeepLinkPage","LoginWithMagicLinkEventEmit","LoginWithMagicLinkEventOnReceived","LoginWithEmailOTPEventEmit","LoginWithEmailOTPEventOnReceived","DeviceVerificationEventEmit","DeviceVerificationEventOnReceived","RecencyCheckEventEmit","RecencyCheckEventOnReceived","UpdateEmailEventEmit","UpdateEmailEventOnReceived","AuthEventOnReceived","FarcasterLoginEventEmit","EthChainType","RecoveryMethodType","NftCheckoutIntermediaryEvents","WalletEventOnReceived","createCommonjsModule","e","r","percentToByte","p","byteToPercent","b","btoaUTF8","str","atobUTF8","encodeJSON","options","decodeJSON","queryString","isUndefined","value","isNull","isNil","isJsonRpcResponsePayload","isJsonRpcErrorCode","RPCErrorCode","isEmpty","key","createSDK","SDKBaseCtor","environment","SDKEnvironment","createMissingApiKeyError","MagicSDKError","SDKErrorCode","createModalNotReadyError","createMalformedResponseError","createExtensionNotInitializedError","member","createIncompatibleExtensionsError","extensions","msg","ext","compat","createInvalidArgumentError","ordinalSuffix","i","iAdjusted","j","k","createDuplicateIframeWarning","MagicSDKWarning","SDKWarningCode","createSynchronousWeb3MethodWarning","createReactNativeEndpointConfigurationWarning","createDeprecationWarning","method","removalVersions","useInstead","removalVersion","useInsteadSuffix","message","createIntGenerator","index","getPayloadId","intGenerator","markPayloadAsPreprocessed","payload","payloadPreprocessedSymbol","isPayloadPreprocessed","standardizeJsonRpcRequestPayload","_a","_b","_c","createJsonRpcRequestPayload","params","createTypedEmitter","emitter","TypedEmitter","source","args","isPromiEvent","promiEventBrand","createPromiEvent","executor","promise","createPromise","createBoundEmitterMethod","createChainingEmitterMethod","thenSymbol","catchSymbol","finallySymbol","createChainingPromiseMethod","nextPromise","promiEvent","result","resolved","err","resolve","reject","isMajorVersionAtLeast","version","majorVersion","major","proxyLocalForageMethod","__async","lf","uuid","u","uid","isWebCryptoSupported","hasCrypto","hasSubtleCrypto","createJwt","publicJwk","getPublicKey","subtle","privateJwk","getItem","STORE_KEY_PRIVATE_KEY","claims","headers","jws","strToUrlBase64","data","strToUint8","sigType","ALGO_NAME","sig","uint8ToUrlBase64","STORE_KEY_PUBLIC_JWK","generateWCKP","kp","EC_GEN_PARAMS","jwkPublicKey","setItem","binToUrlBase64","utf8ToBinaryString","bin","_","p1","uint8","code","clearDeviceShares","keysToRemove","iterate","iterationNumber","DEVICE_SHARE_KEY","removeItem","arrayBufferToBase64","buffer","binary","bytes","len","base64ToArrayBuffer","base64","binaryString","getOrCreateInitVector","crypto","existingIv","INITIALIZATION_VECTOR_KEY","getOrCreateEncryptionKey","existingKey","ENCRYPTION_KEY_KEY","ALGO_LENGTH","encryptAndPersistDeviceShare","deviceShareBase64","networkHash","iv","encryptionKey","decodedDeviceShare","encryptedData","encryptedDeviceShare","getDecryptedDeviceShare","ab","createURL","url","base","getPrototypeChain","instance","currentProto","protos","BaseModule","checkExtensionCompat","satisfies","coerce","getNetworkHash","apiKey","network","extConfig","prepareExtensions","incompatibleExtensions","Extension","name","getRequestPayloadFromBatch","requestPayload","id","standardizeResponse","event","requestPayloadResolved","response","JsonRpcResponse","createMagicRequest","msgType","rt","jwt","request","decryptedDeviceShare","persistMagicEventRefreshToken","require_eventemitter3","MAX_SAFE_INTEGER$1","constants","debug","debug_1","re_1","numeric","compareIdentifiers$1","rcompareIdentifiers","identifiers","MAX_LENGTH$1","MAX_SAFE_INTEGER","re$4","t$4","compareIdentifiers","SemVer","compare","compare_1","eq","eq_1","neq","neq_1","gt","gt_1","gte","gte_1","lt","lt_1","lte","lte_1","cmp","cmp_1","ANY","Comparator","re$3","t$3","Range","re$2","t$2","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","isSatisfiable","parseComparator","isX","replaceTildes","replaceTilde","replaceCarets","replaceCaret","replaceXRanges","replaceXRange","replaceStars","replaceGTE0","hyphenReplace","testSet","MAX_LENGTH","re$1","t$1","parse","parse_1","re","t","sdkNameToEnvName","MagicRPCError","MagicExtensionError","MagicExtensionWarning","import_eventemitter3","ProductConsolidationMethodRemovalVersions","AuthModule","storage_exports","clear","length","keys","ALGO_CURVE","UserModule","WalletModule","RPCProviderModule","sdkAccessFields","BaseExtension","InternalExtension","NFTModule","_SDKBase","SDKBase","ViewController","__commonJSMin","exports","module","has","prefix","Events","EE","fn","context","once","addListener","listener","evt","clearEvent","EventEmitter","names","events","handlers","l","ee","listeners","a1","a2","a3","a4","a5","s","o","a","n","E","c","$","h","rawMessage","sourceError","codeNormalized","responseOrPayload","error","sdk","responsePromise","MagicOutgoingWindowMessage","res","cleanupEvents","MagicIncomingWindowMessage","eventType","payloadId","MagicPayloadMethod","configuration","isRNMobilePackage","email","showUI","redirectURI","overrides","phoneNumber","deviceCheckUI","handle","DeviceVerificationEventEmit","LoginWithEmailOTPEventEmit","otp","credentialOrQueryString","credentialResolved","urlWithoutQuery","RecencyCheckEventEmit","UpdateEmailEventEmit","newEmail","__export","activeWallet","cachedIsLoggedIn","isLoggedInResponse","scope","callback","loggedOut","Wallets","userEnv","loginRequestPayload","loginRequest","__spreadProps","__spreadValues","address","transaction","provider","metaMaskDeepLink","coinbaseWalletDeepLink","wallet","isWalletEnabled","autoConnectPayload","onRequestComplete","standardizedPayload","batchResponse","finalPayload","payloadOrMethod","onRequestCompleteOrParams","warning","testModePrefix","allSources","prop","allDescriptors","sourceIndex","x","isPrototypeField","descriptor","defaultEndpoint","controller","endpoint","parameters","batchData","batchIds","acknowledgeResponse","removeEventListener","deviceShare","removeResponseListener","handler","boundHandler","unsubscribe","init_es","applyOverlayStyles","elem","cssProperty","value","overlayStyles","checkForSameSrcInstances","parameters","iframes","iframe","require_localforage","rr","import_localforage","memoryDriver","IframeController","Magic","init_es","__commonJSMin","exports","module","f","g","define","e","t","n","r","s","o","u","a","__require","i","l","_dereq_","global","Mutation","scheduleDrain","called","observer","nextTick","element","channel","scriptEl","draining","queue","oldQueue","len","immediate","task","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","safelyResolveThenable","onRejected","onFulfilled","promise","unwrap","QueueItem","func","returnValue","self","result","tryCatch","getThen","thenable","error","obj","then","onError","onSuccess","tryToUnwrap","out","resolve","reject","reason","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","response","_typeof","_classCallCheck","instance","Constructor","getIDB","idb","isIndexedDBValid","isSafari","hasFetch","createBlob","parts","properties","Builder","builder","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","key","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","toString","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","length","buf","arr","_checkBlobSupportWithoutCaching","txn","blob","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","dbArgs","openreq","db","ex","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","base64","_decodeBlob","encodedBlob","arrayBuff","_isEncodedBlob","_fullyReady","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","options","initPromises","ignoreErrors","j","k","getItem","transaction","store","req","iterate","iterator","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","advanced","keys","dropInstance","currentConfig","isCurrentDb","dbPromise","newVersion","dropObjectPromise","_forage2","dropDBPromise","_forage","asyncStorage","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","bufferLength","p","encoded1","encoded2","encoded3","encoded4","buffer","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","str","deserialize","type","blobType","matcher","localforageSerializer","createDbTable","_initStorage$1","dbInfoPromise","tryExecuteSql","sqlStatement","args","results","getItem$1","iterate$1","rows","item","_setItem","retriesLeft","originalValue","sqlError","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","storeName","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","includes","array","searchElement","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driver","driverName","driverObject","complianceError","driverMethods","driverMethodName","isRequired","configureMissingMethods","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","setDriverSupport","support","getDriverPromise","serializerPromise","drivers","supportedDrivers","setDriverToConfig","extendSelfWithDriver","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","libraryMethodsAndProperties","localforage_js","$e","er","b","A","_driver","R","v","clone","e_1","_a","temp","_b","__values","_c","e_1_1","getKeyPrefix","dropInstanceCommon","_this","normaliseKey","serialiser","stores","Store","kp","idx","opts","_options","_cb","outPromise","key$","keys$","value$","_support","re","h","N","E","O","V","Q","J","ee","Ze","ke","ViewController","onload","createDuplicateIframeWarning","createURL","event","handler","__async","data","createModalNotReadyError","createSDK","SDKBase","lf","ge","localForage","Te","AlgorandExtension","init_es","Extension","algorandConfig","txn","__async","txns","ICON","import_store","import_algosdk","NetworkId","import_algosdk","WalletId","module","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","wallet","import_algosdk","ICON","module","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","module","algosdk","import_algosdk","ICON","PeraWallet","module","algosdk","import_algosdk","ICON","name","icons","description","algosdk","PeraWallet","ICON","a","algosdk"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/core/exception-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/core/json-rpc-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/core/message-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/core/deep-link-pages.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/modules/auth-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/modules/rpc-provider-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/modules/user-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/modules/nft-types.ts","../../../node_modules/.pnpm/@magic-sdk+types@24.4.0/node_modules/@magic-sdk/types/src/modules/wallet-types.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/semver.js","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/base64-json.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-exceptions.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/type-guards.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk-environment.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/auth.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-module.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/get-payload-id.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/json-rpc.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/promise-tools.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/events.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/version-check.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/user.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/storage.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/uuid.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/device-share-web-crypto.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/util/url.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/wallet.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/rpc-provider.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/base-extension.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/modules/nft.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/sdk.ts","../../../node_modules/.pnpm/@magic-sdk+provider@28.5.0_localforage@1.10.0/node_modules/@magic-sdk/provider/src/core/view-controller.ts","../../../node_modules/.pnpm/@magic-sdk+commons@24.6.0_@magic-sdk+provider@28.5.0_localforage@1.10.0__@magic-sdk+types@24.4.0/node_modules/@magic-sdk/commons/src/index.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/localforage/dist/localforage.js","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/_driver.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/node_modules/localforage-driver-commons/_bundle/fesm5.js","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/Store.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/_initStorage.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/clear.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/dropInstance.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/getItem.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/iterate.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/key.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/keys.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/length.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/removeItem.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/setItem.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/node_modules/src/index.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/src/index.ts","../../../node_modules/.pnpm/magic-sdk@28.5.0/node_modules/magic-sdk/src/iframe-controller.ts","../../../node_modules/.pnpm/@magic-ext+algorand@23.5.0/node_modules/@magic-ext/algorand/src/index.ts","../src/index.ts","../src/manager.ts","../src/network.ts","../src/storage.ts","../src/store.ts","../src/wallets/base.ts","../src/wallets/types.ts","../src/wallets/defly.ts","../src/wallets/exodus.ts","../src/wallets/kibisis.ts","../src/wallets/kmd.ts","../src/wallets/lute.ts","../src/wallets/magic.ts","../src/wallets/mnemonic.ts","../src/wallets/pera.ts","../src/wallets/pera2.ts","../src/wallets/walletconnect.ts","../src/utils.ts","../src/wallets/custom.ts"],"sourcesContent":["export enum SDKErrorCode {\n MissingApiKey = 'MISSING_API_KEY',\n ModalNotReady = 'MODAL_NOT_READY',\n MalformedResponse = 'MALFORMED_RESPONSE',\n InvalidArgument = 'INVALID_ARGUMENT',\n ExtensionNotInitialized = 'EXTENSION_NOT_INITIALIZED',\n IncompatibleExtensions = 'INCOMPATIBLE_EXTENSIONS',\n}\n\nexport enum SDKWarningCode {\n SyncWeb3Method = 'SYNC_WEB3_METHOD',\n DuplicateIframe = 'DUPLICATE_IFRAME',\n ReactNativeEndpointConfiguration = 'REACT_NATIVE_ENDPOINT_CONFIGURATION',\n DeprecationNotice = 'DEPRECATION_NOTICE',\n ProductAnnouncement = 'ANNOUNCEMENT',\n}\n\nexport enum RPCErrorCode {\n // Standard JSON RPC 2.0 Error Codes\n ParseError = -32700,\n InvalidRequest = -32600,\n MethodNotFound = -32601,\n InvalidParams = -32602,\n InternalError = -32603,\n\n // Custom RPC Error Codes\n MagicLinkFailedVerification = -10000,\n MagicLinkExpired = -10001,\n MagicLinkRateLimited = -10002,\n MagicLinkInvalidRedirectURL = -10006,\n UserAlreadyLoggedIn = -10003,\n UpdateEmailFailed = -10004,\n UserRequestEditEmail = -10005,\n InactiveRecipient = -10010,\n AccessDeniedToUser = -10011,\n RedirectLoginComplete = -10015,\n}\n\nexport type ErrorCode = SDKErrorCode | RPCErrorCode;\nexport type WarningCode = SDKWarningCode;\n","import { RPCErrorCode } from './exception-types';\n\n// --- Request interfaces\n\nexport interface JsonRpcRequestPayload<TParams = any> {\n jsonrpc: string;\n id: string | number | null;\n method: string;\n params?: TParams;\n}\n\nexport interface JsonRpcRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: JsonRpcResponsePayload | null): void;\n}\n\nexport interface JsonRpcBatchRequestCallback {\n /** Callback executed upon JSON RPC response. */\n (err: JsonRpcError | null, result?: (JsonRpcResponsePayload | null)[] | null): void;\n}\n\n// --- Response interfaces\n\nexport interface JsonRpcError {\n message: string;\n code: RPCErrorCode;\n data?: any;\n}\n\nexport interface JsonRpcResponsePayload<ResultType = any> {\n jsonrpc: string;\n id: string | number | null;\n result?: ResultType | null;\n error?: JsonRpcError | null;\n}\n\nexport interface UserInfo {\n email?: string;\n}\n\nexport type ShowUIPromiEvents = {\n disconnect: () => void;\n};\n\nexport interface WalletInfo {\n walletType: 'magic' | 'metamask' | 'coinbase_wallet';\n}\n\nexport interface RequestUserInfoScope {\n scope?: {\n email?: 'required' | 'optional';\n };\n}\n\nexport enum Wallets {\n MetaMask = 'metamask',\n CoinbaseWallet = 'coinbase_wallet',\n}\n\nexport enum Events {\n WalletSelected = 'wallet_selected',\n WalletConnected = 'wallet_connected',\n WalletRejected = 'wallet_rejected',\n}\n\nexport interface UserEnv {\n env: {\n isMetaMaskInstalled: boolean;\n isCoinbaseWalletInstalled: boolean;\n };\n}\n\n// --- Payload methods\n\n/**\n * Enum of JSON RPC methods for interacting with the Magic SDK authentication\n * relayer.\n */\nexport enum MagicPayloadMethod {\n LoginWithSms = 'magic_auth_login_with_sms',\n LoginWithEmailOTP = 'magic_auth_login_with_email_otp',\n LoginWithMagicLink = 'magic_auth_login_with_magic_link',\n LoginWithCredential = 'magic_auth_login_with_credential',\n SetAuthorizationToken = 'magic_auth_set_authorization_token',\n GetIdToken = 'magic_auth_get_id_token',\n GenerateIdToken = 'magic_auth_generate_id_token',\n GetMetadata = 'magic_auth_get_metadata',\n IsLoggedIn = 'magic_is_logged_in',\n Logout = 'magic_auth_logout',\n UpdateEmail = 'magic_auth_update_email',\n UserSettings = 'magic_auth_settings',\n UserSettingsTestMode = 'magic_auth_settings_testing_mode',\n LoginWithSmsTestMode = 'magic_auth_login_with_sms_testing_mode',\n LoginWithEmailOTPTestMode = 'magic_auth_login_with_email_otp_testing_mode',\n LoginWithMagicLinkTestMode = 'magic_login_with_magic_link_testing_mode',\n LoginWithCredentialTestMode = 'magic_auth_login_with_credential_testing_mode',\n GetIdTokenTestMode = 'magic_auth_get_id_token_testing_mode',\n GenerateIdTokenTestMode = 'magic_auth_generate_id_token_testing_mode',\n GetMetadataTestMode = 'magic_auth_get_metadata_testing_mode',\n IsLoggedInTestMode = 'magic_auth_is_logged_in_testing_mode',\n LogoutTestMode = 'magic_auth_logout_testing_mode',\n UpdateEmailTestMode = 'magic_auth_update_email_testing_mode',\n IntermediaryEvent = 'magic_intermediary_event',\n RequestAccounts = 'eth_requestAccounts',\n GetInfo = 'magic_get_info',\n ShowUI = 'magic_wallet',\n NFTPurchase = 'magic_nft_purchase',\n NFTCheckout = 'magic_nft_checkout',\n NFTTransfer = 'magic_nft_transfer',\n RequestUserInfoWithUI = 'mc_request_user_info',\n Disconnect = 'mc_disconnect',\n // UpdatePhoneNumber = 'magic_auth_update_phone_number',\n // UpdatePhoneNumberTestMode = 'magic_auth_update_phone_number_testing_mode',\n RecoverAccount = 'magic_auth_recover_account',\n RecoverAccountTestMode = 'magic_auth_recover_account_testing_mode',\n MagicBoxHeartBeat = 'magic_box_heart_beat',\n AutoConnect = 'mc_auto_connect',\n Login = 'mc_login',\n EncryptV1 = 'magic_auth_encrypt_v1',\n DecryptV1 = 'magic_auth_decrypt_v1',\n ShowNFTs = 'magic_show_nfts',\n ShowOnRamp = 'magic_show_fiat_onramp',\n ShowSendTokensUI = 'magic_show_send_tokens_ui',\n ShowAddress = 'magic_show_address',\n ShowBalances = 'magic_show_balances',\n SendGaslessTransaction = 'eth_sendGaslessTransaction',\n RevealPK = 'magic_reveal_key',\n EnableMFA = 'magic_auth_enable_mfa_flow',\n DisableMFA = 'magic_auth_disable_mfa_flow',\n}\n","import { JsonRpcResponsePayload, JsonRpcError, JsonRpcRequestPayload } from './json-rpc-types';\n\nexport enum MagicIncomingWindowMessage {\n MAGIC_HANDLE_RESPONSE = 'MAGIC_HANDLE_RESPONSE',\n MAGIC_OVERLAY_READY = 'MAGIC_OVERLAY_READY',\n MAGIC_SHOW_OVERLAY = 'MAGIC_SHOW_OVERLAY',\n MAGIC_HIDE_OVERLAY = 'MAGIC_HIDE_OVERLAY',\n MAGIC_HANDLE_EVENT = 'MAGIC_HANDLE_EVENT',\n MAGIC_MG_BOX_SEND_RECEIPT = 'MAGIC_MG_BOX_SEND_RECEIPT',\n MAGIC_SEND_PRODUCT_ANNOUNCEMENT = 'MAGIC_SEND_PRODUCT_ANNOUNCEMENT',\n}\n\nexport enum MagicOutgoingWindowMessage {\n MAGIC_HANDLE_REQUEST = 'MAGIC_HANDLE_REQUEST',\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n rt?: string;\n jwt?: string;\n deviceShare?: string;\n}\n\n/** The shape of responding window message datas from the Magic iframe context. */\nexport interface MagicMessageResponse<ResultType = any> {\n msgType: string;\n response: Partial<JsonRpcError> & Partial<JsonRpcResponsePayload<ResultType>>;\n rt?: string;\n deviceShare?: string;\n}\n\n/** The expected message event returned by the Magic iframe context. */\nexport interface MagicMessageEvent extends Partial<MessageEvent> {\n data: MagicMessageResponse;\n}\n","export enum DeepLinkPage {\n UpdateEmail = 'update-email',\n MFA = 'mfa',\n Recovery = 'recovery',\n}\n","import { WalletEventOnReceived } from './wallet-types';\n\nexport interface LoginWithMagicLinkConfiguration {\n /**\n * The email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the \"magic link\" to complete their\n * authentication.\n */\n showUI?: boolean;\n\n /**\n * You can optionally provide a redirect URI that will be followed at the end\n * of the magic link flow. Don't forget to invoke\n * `magic.auth.loginWithCredential()` to complete the login from the route you\n * configure here.\n */\n redirectURI?: string;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithMagicLink email will be\n * overriden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface LoginWithSmsConfiguration {\n /**\n * Specify the phone number of the user attempting to login.\n */\n phoneNumber: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their SMS for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the SMS OTP flow.\n */\n showUI?: boolean;\n\n /*\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\nexport interface LoginWithEmailOTPConfiguration {\n /**\n * Specify the email address of the user attempting to login.\n */\n email: string;\n\n /**\n * When `true`, a pre-built modal interface will show to the user, directing\n * them to check their email for the one time passcode (OTP) to complete their\n * authentication.\n *\n * When `false`, developers will be able to implement their own custom UI to\n * continue the email OTP flow.\n */\n showUI?: boolean;\n\n /**\n * Device Unrecognized UI will enforce showing up to secure user's login\n *\n * When set to true (default), an improved device recognition UI will be displayed to the user,\n * prompting them to verify their login by checking their email for device approval. This feature\n * enhances authentication security.\n *\n * This param will only be affect if showUI is false. When set to false,\n * developers have the flexibility to implement their own customized UI to\n * handle device check events, providing a more tailored user experience.\n */\n deviceCheckUI?: boolean;\n\n /**\n * Enterprise users with a custom SMTP can create custom email templates\n * from their dashboard. The default Magic loginWithOTP email will be\n * overriden when a variation is passed here.\n */\n overrides?: {\n variation?: string;\n };\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface LoginWithCredentialConfiguration {\n /**\n * A credential token or a valid query string (prefixed with ? or #)\n */\n credentialOrQueryString?: string;\n\n /**\n * The number of seconds until the generated Decenteralized ID token will expire.\n */\n lifespan?: number;\n}\n\n/**\n * Auth Events Enum\n */\nexport enum LoginWithMagicLinkEventEmit {\n Retry = 'retry',\n}\n\nexport enum LoginWithMagicLinkEventOnReceived {\n EmailSent = 'email-sent',\n EmailNotDeliverable = 'email-not-deliverable',\n}\n\nexport enum LoginWithEmailOTPEventEmit {\n VerifyEmailOtp = 'verify-email-otp',\n VerifyMFACode = 'verify-mfa-code',\n Cancel = 'cancel',\n}\n\nexport enum LoginWithSmsOTPEventEmit {\n VerifySmsOtp = 'verify-sms-otp',\n Cancel = 'cancel',\n Retry = 'retry',\n}\n\nexport enum LoginWithSmsOTPEventOnReceived {\n SmsOTPSent = 'sms-otp-sent',\n InvalidSmsOtp = 'invalid-sms-otp',\n ExpiredSmsOtp = 'expired-sms-otp',\n}\n\nexport enum LoginWithEmailOTPEventOnReceived {\n EmailOTPSent = 'email-otp-sent',\n InvalidEmailOtp = 'invalid-email-otp',\n InvalidMfaOtp = 'invalid-mfa-otp',\n ExpiredEmailOtp = 'expired-email-otp',\n MfaSentHandle = 'mfa-sent-handle',\n}\n\nexport enum DeviceVerificationEventEmit {\n Retry = 'device-retry',\n}\n\nexport enum DeviceVerificationEventOnReceived {\n DeviceApproved = 'device-approved',\n DeviceNeedsApproval = 'device-needs-approval',\n DeviceVerificationLinkExpired = 'device-verification-link-expired',\n DeviceVerificationEmailSent = 'device-verification-email-sent',\n}\n\nexport enum RecencyCheckEventEmit {\n Retry = 'Recency/auth-factor-retry',\n Cancel = 'Recency/auth-factor-verification-cancel',\n VerifyEmailOtp = 'Recency/auth-factor-verify-email-otp',\n VerifyMFACode = 'Recency/verify-mfa-code',\n}\n\nexport enum RecencyCheckEventOnReceived {\n PrimaryAuthFactorNeedsVerification = 'Recency/auth-factor-needs-verification',\n PrimaryAuthFactorVerified = 'Recency/auth-factor-verified',\n InvalidEmailOtp = 'Recency/auth-factor-invalid-email-otp',\n EmailExpired = 'Recency/auth-factor-verification-email-expired',\n EmailSent = 'Recency/auth-factor-verification-email-sent',\n EmailNotDeliverable = 'Recency/auth-factor-verification-email-not-deliverable',\n}\n\nexport enum UpdateEmailEventEmit {\n RetryWithNewEmail = 'UpdateEmail/retry-with-new-email',\n Cancel = 'UpdateEmail/new-email-verification-cancel',\n VerifyEmailOtp = 'UpdateEmail/new-email-verify-otp',\n}\n\nexport enum UpdateEmailEventOnReceived {\n NewAuthFactorNeedsVerification = 'UpdateEmail/new-email-needs-verification',\n EmailUpdated = 'UpdateEmail/email-updated',\n InvalidEmailOtp = 'UpdateEmail/new-email-invalid-email-otp',\n EmailExpired = 'UpdateEmail/new-email-verification-email-expired',\n EmailSent = 'UpdateEmail/new-email-verification-email-sent',\n EmailNotDeliverable = 'UpdateEmail/new-email-verification-email-not-deliverable',\n InvalidEmail = 'UpdateEmail/new-email-invalid',\n EmailAlreadyExists = 'UpdateEmail/new-email-already-exists',\n}\n\nexport enum AuthEventOnReceived {\n IDTokenCreated = 'Auth/id-token-created',\n}\n\nexport enum FarcasterLoginEventEmit {\n SuccessSignIn = 'Farcaster/success_sign_in',\n}\n\n/**\n * EventHandlers\n */\nexport type LoginWithMagicLinkEventHandlers = {\n // Event Received\n [LoginWithMagicLinkEventOnReceived.EmailSent]: () => void;\n [LoginWithMagicLinkEventOnReceived.EmailNotDeliverable]: () => void;\n\n // Event sent\n [LoginWithMagicLinkEventEmit.Retry]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithSmsOTPEventHandlers = {\n // Event sent\n [LoginWithSmsOTPEventEmit.VerifySmsOtp]: (otp: string) => void;\n [LoginWithSmsOTPEventEmit.Cancel]: () => void;\n [LoginWithSmsOTPEventEmit.Retry]: () => void;\n\n // Event received\n [LoginWithSmsOTPEventOnReceived.SmsOTPSent]: () => void;\n [LoginWithSmsOTPEventOnReceived.InvalidSmsOtp]: () => void;\n [LoginWithSmsOTPEventOnReceived.ExpiredSmsOtp]: () => void;\n} & DeviceVerificationEventHandlers;\n\nexport type LoginWithEmailOTPEventHandlers = {\n // Event Received\n [LoginWithEmailOTPEventOnReceived.EmailOTPSent]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.InvalidMfaOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.ExpiredEmailOtp]: () => void;\n [LoginWithEmailOTPEventOnReceived.MfaSentHandle]: () => void;\n [AuthEventOnReceived.IDTokenCreated]: (idToken: string) => void;\n [WalletEventOnReceived.WalletInfoFetched]: () => void;\n\n // Event sent\n [LoginWithEmailOTPEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [LoginWithEmailOTPEventEmit.VerifyMFACode]: (mfa: string) => void;\n [LoginWithEmailOTPEventEmit.Cancel]: () => void;\n} & DeviceVerificationEventHandlers;\n\ntype DeviceVerificationEventHandlers = {\n // Event Received\n [DeviceVerificationEventOnReceived.DeviceNeedsApproval]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationEmailSent]: () => void;\n [DeviceVerificationEventOnReceived.DeviceVerificationLinkExpired]: () => void;\n [DeviceVerificationEventOnReceived.DeviceApproved]: () => void;\n\n // Event sent\n [DeviceVerificationEventEmit.Retry]: () => void;\n};\n\n/**\n * Update Email\n */\n\ntype RecencyCheckEventHandlers = {\n [RecencyCheckEventOnReceived.PrimaryAuthFactorNeedsVerification]: () => void;\n [RecencyCheckEventOnReceived.PrimaryAuthFactorVerified]: () => void;\n [RecencyCheckEventOnReceived.InvalidEmailOtp]: () => void;\n [RecencyCheckEventOnReceived.EmailNotDeliverable]: () => void;\n [RecencyCheckEventOnReceived.EmailExpired]: () => void;\n [RecencyCheckEventOnReceived.EmailSent]: () => void;\n\n [RecencyCheckEventEmit.Cancel]: () => void;\n [RecencyCheckEventEmit.Retry]: () => void;\n [RecencyCheckEventEmit.VerifyEmailOtp]: (otp: string) => void;\n [RecencyCheckEventEmit.VerifyMFACode]: (mfa: string) => void;\n};\n\nexport type UpdateEmailEventHandlers = {\n [UpdateEmailEventOnReceived.NewAuthFactorNeedsVerification]: () => void;\n [UpdateEmailEventOnReceived.EmailUpdated]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmailOtp]: () => void;\n [UpdateEmailEventOnReceived.EmailNotDeliverable]: () => void;\n [UpdateEmailEventOnReceived.EmailExpired]: () => void;\n [UpdateEmailEventOnReceived.EmailSent]: () => void;\n [UpdateEmailEventOnReceived.InvalidEmail]: () => void;\n [UpdateEmailEventOnReceived.EmailAlreadyExists]: () => void;\n\n [UpdateEmailEventEmit.Cancel]: () => void;\n [UpdateEmailEventEmit.RetryWithNewEmail]: (email?: string) => void;\n [UpdateEmailEventEmit.VerifyEmailOtp]: (otp: string) => void;\n} & RecencyCheckEventHandlers;\n","export type EthNetworkName = 'mainnet' | 'goerli' | 'sepolia';\n\nexport enum EthChainType {\n Harmony = 'HARMONY',\n}\n\nexport interface CustomNodeConfiguration {\n rpcUrl: string;\n chainId?: number;\n chainType?: EthChainType;\n}\n\nexport type EthNetworkConfiguration = EthNetworkName | CustomNodeConfiguration;\n\nexport type ProviderEnableEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n};\n","import { DeepLinkPage } from '../core/deep-link-pages';\n\nexport interface GetIdTokenConfiguration {\n /**\n * The number of seconds until the generated ID token will expire.\n */\n lifespan?: number;\n}\n\nexport interface GenerateIdTokenConfiguration extends GetIdTokenConfiguration {\n /**\n * An optional piece of data to sign with the token. Note, however, that the\n * unsigned data _will not_ be encoded in the token, only an encrypted\n * signature of the data.\n */\n attachment?: string;\n}\n\nexport enum UserEventsEmit {\n ClosedByUser = 'closed-by-user',\n}\n\nexport enum UserEventsOnReceived {\n ClosedByUser = 'closed-by-user-on-received',\n}\n\nexport interface MagicUserMetadata {\n issuer: string | null;\n publicAddress: string | null;\n email: string | null;\n phoneNumber: string | null;\n isMfaEnabled: boolean;\n recoveryFactors: [RecoveryFactor];\n}\n\ntype RecoveryFactor = {\n type: RecoveryMethodType;\n value: string;\n};\n\nexport enum RecoveryMethodType {\n PhoneNumber = 'phone_number',\n}\n\nexport interface UpdateEmailConfiguration {\n /**\n * The new email address to update to\n */\n email: string;\n\n /**\n * When `true`, a pre-built pending modal interface will\n * guide the user to check their new, followed by old emails\n * for confirmation emails.\n */\n showUI?: boolean;\n}\n\nexport interface UpdateWebAuthnInfoConfiguration {\n /**\n * WebAuthn info id\n */\n id: string;\n\n /**\n * nickname that user attempts to update to the webauth device associate to the id.\n */\n nickname: string;\n}\n\nexport interface RecoverAccountConfiguration {\n /**\n * The email to recover\n */\n email: string;\n}\n\nexport interface ShowSettingsConfiguration {\n /**\n * deep linking destination\n */\n page: DeepLinkPage;\n}\n","export type NFTResponseStatus = 'cancelled' | 'pending' | 'processed' | 'declined' | 'expired';\n\nexport type NFTResponse = {\n status: NFTResponseStatus;\n};\n\nexport interface NFTPurchaseRequest {\n nft: {\n name: string;\n imageUrl: string;\n blockchainNftId: string;\n contractAddress: string;\n network: string;\n platform: string;\n type: string;\n };\n identityPrefill: {\n firstName: string;\n lastName: string;\n dateOfBirth: string; // YYYY-MM-DD\n emailAddress: string;\n phone: string;\n address: {\n street1: string;\n street2: string;\n city: string;\n regionCode: string;\n postalCode: string;\n countryCode: string;\n };\n };\n}\n\nexport type NFTPurchaseResponse = NFTResponse & {\n errorMessage?: string;\n};\n\nexport interface NFTCheckoutRequest {\n // given by magic / found in the developer dashboard in future\n contractId: string;\n // in contract, if ERC1155… for ERC721, use token ID = 0\n tokenId: string;\n name: string;\n imageUrl: string;\n quantity?: number; // default is 1\n walletAddress?: string; // default is user's wallet address\n // If enabled, the user will be able to pay with crypto. the default is false\n isCryptoCheckoutEnabled?: boolean;\n}\n\nexport type NFTCheckoutResponse = NFTResponse;\n\nexport type NFTCheckoutEvents = {\n disconnect: () => void;\n 'nft-checkout-initiated': (rawTransaction: string) => void;\n};\n\nexport enum NftCheckoutIntermediaryEvents {\n Success = 'nft-checkout-success',\n Failure = 'nft-checkout-failure',\n Initiated = 'nft-checkout-initiated',\n Disconnect = 'disconnect',\n}\n\nexport type NftCheckoutEventHandler = {\n [NftCheckoutIntermediaryEvents.Initiated]: (rawTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Success]: (signedTransaction: string) => void;\n [NftCheckoutIntermediaryEvents.Failure]: () => void;\n};\n\nexport interface NFTTransferRequest {\n tokenId: string;\n contractAddress: string;\n quantity?: number;\n recipient?: string;\n}\n\nexport type NFTTransferResponse = NFTResponse;\n","export type GasApiResponse = {\n request_id: string;\n state: string;\n success: boolean;\n};\n\nexport type AccessListEntry = { address: string; storageKeys: Array<string> };\n\n/**\n * An ordered collection of [[AccessList]] entries.\n */\nexport type AccessList = Array<AccessListEntry>;\n\nexport interface GaslessTransactionRequest {\n /**\n * The transaction type.\n */\n type?: number;\n\n /**\n * The target of the transaction.\n */\n to?: string;\n\n /**\n * The sender of the transaction.\n */\n from?: string;\n\n /**\n * The nonce of the transaction, used to prevent replay attacks.\n */\n\n nonce?: number;\n\n /**\n * The maximum amount of gas to allow this transaction to consime.\n */\n gasLimit?: bigint;\n\n /**\n * The gas price to use for legacy transactions or transactions on\n * legacy networks.\n *\n * Most of the time the ``max*FeePerGas`` is preferred.\n */\n gasPrice?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum priority fee to pay per gas.\n */\n maxPriorityFeePerGas?: bigint;\n\n /**\n * The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n * value used is protocol enforced to be the block's base fee.\n */\n maxFeePerGas?: bigint;\n\n /**\n * The transaction data.\n */\n data?: string;\n\n /**\n * The transaction value (in wei).\n */\n value?: bigint;\n\n /**\n * The chain ID for the network this transaction is valid on.\n */\n chainId?: bigint;\n\n /**\n * The [[link-eip-2930]] access list. Storage slots included in the access\n * list are //warmed// by pre-loading them, so their initial cost to\n * fetch is guaranteed, but then each additional access is cheaper.\n */\n accessList?: AccessList;\n\n /**\n * A custom object, which can be passed along for network-specific\n * values.\n */\n customData?: any;\n}\n\nexport enum WalletEventOnReceived {\n WalletInfoFetched = 'Wallet/wallet-info-fetched',\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/* eslint-disable */\n/* istanbul ignore file */\n\n// DO NOT CHANGE THIS FILE.\n//\n// We have to bundle `semver` ourselves due to a long-standing cyclic dependency\n// which causes Rollup to break the `satisfies` function.\n//\n// See:\n// - https://github.com/magiclabs/magic-js/issues/198\n// - https://github.com/rollup/plugins/issues/879\n// - https://github.com/npm/node-semver/issues/318\n// - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};n(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\"),n(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\"),n(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\"),n(\"MAINVERSION\",`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})`),n(\"MAINVERSIONLOOSE\",`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})`),n(\"PRERELEASEIDENTIFIER\",`(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASE\",`(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\\\.${i[o.PRERELEASEIDENTIFIER]})*))`),n(\"PRERELEASELOOSE\",`(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`),n(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\"),n(\"BUILD\",`(?:\\\\+(${i[o.BUILDIDENTIFIER]}(?:\\\\.${i[o.BUILDIDENTIFIER]})*))`),n(\"FULLPLAIN\",`v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`),n(\"FULL\",`^${i[o.FULLPLAIN]}$`),n(\"LOOSEPLAIN\",`[v=\\\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`),n(\"LOOSE\",`^${i[o.LOOSEPLAIN]}$`),n(\"GTLT\",\"((?:<|>)?=?)\"),n(\"XRANGEIDENTIFIERLOOSE\",`${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`),n(\"XRANGEIDENTIFIER\",`${i[o.NUMERICIDENTIFIER]}|x|X|\\\\*`),n(\"XRANGEPLAIN\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAIN]}$`),n(\"XRANGELOOSE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAINLOOSE]}$`),n(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),r.tildeTrimReplace=\"$1~\",n(\"TILDE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`),n(\"TILDELOOSE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"LONECARET\",\"(?:\\\\^)\"),n(\"CARETTRIM\",`(\\\\s*)${i[o.LONECARET]}\\\\s+`,!0),r.caretTrimReplace=\"$1^\",n(\"CARET\",`^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`),n(\"CARETLOOSE\",`^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"COMPARATORLOOSE\",`^${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]})$|^$`),n(\"COMPARATOR\",`^${i[o.GTLT]}\\\\s*(${i[o.FULLPLAIN]})$|^$`),n(\"COMPARATORTRIM\",`(\\\\s*)${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`,!0),r.comparatorTrimReplace=\"$1$2$3\",n(\"HYPHENRANGE\",`^\\\\s*(${i[o.XRANGEPLAIN]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAIN]})`+\"\\\\s*$\"),n(\"HYPHENRANGELOOSE\",`^\\\\s*(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s*$\"),n(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\"),n(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\"),n(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}debug_1(\"comparator\",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ANY?this.value=\"\":this.value=this.operator+this.semver.version,debug_1(\"comp\",this)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),s=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),i=this.semver.version===e.semver.version,o=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),a=cmp_1(this.semver,\"<\",e.semver,r)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),n=cmp_1(this.semver,\">\",e.semver,r)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,hyphenReplace(this.options.includePrerelease)),debug_1(\"hyphen replace\",e),e=e.replace(re$2[t$2.COMPARATORTRIM],comparatorTrimReplace),debug_1(\"comparator trim\",e,re$2[t$2.COMPARATORTRIM]),e=(e=(e=e.replace(re$2[t$2.TILDETRIM],tildeTrimReplace)).replace(re$2[t$2.CARETTRIM],caretTrimReplace)).split(/\\s+/).join(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},parseComparator=(e,r)=>(debug_1(\"comp\",e,r),e=replaceCarets(e,r),debug_1(\"caret\",e),e=replaceTildes(e,r),debug_1(\"tildes\",e),e=replaceXRanges(e,r),debug_1(\"xrange\",e),e=replaceStars(e,r),debug_1(\"stars\",e),e),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===s||\"<\"===s?\"<0.0.0-0\":\"*\":s&&c?(p&&(o=0),a=0,\">\"===s?(s=\">=\",p?(i=+i+1,o=0,a=0):(o=+o+1,a=0)):\"<=\"===s&&(s=\"<\",p?i=+i+1:o=+o+1),\"<\"===s&&(n=\"-0\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${e?\"-0\":\"\"}`} ${E=isX(p)?\"\":isX(l)?`<${+p+1}.0.0-0`:isX(c)?`<${p}.${+l+1}.0-0`:$?`<=${p}.${l}.${c}-${$}`:e?`<${p}.${l}.${+c+1}-0`:`<=${E}`}`.trim(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n","function percentToByte(p: string) {\n return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n return JSON.parse(atobUTF8(queryString));\n}\n","import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@magic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { Extension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Magic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class MagicSDKError extends Error {\n __proto__ = Error;\n\n constructor(public code: SDKErrorCode, public rawMessage: string) {\n super(`Magic SDK Error: [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicSDKError.prototype);\n }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Magic `<iframe>` context.\n */\nexport class MagicRPCError extends Error {\n __proto__ = Error;\n\n public code: RPCErrorCode | number;\n public rawMessage: string;\n public data: any;\n\n constructor(sourceError?: JsonRpcError | null) {\n super();\n\n const codeNormalized = Number(sourceError?.code);\n this.rawMessage = sourceError?.message || 'Internal error';\n this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode.InternalError;\n this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;\n this.data = sourceError?.data || undefined;\n\n Object.setPrototypeOf(this, MagicRPCError.prototype);\n }\n}\n\n/**\n * In contrast to `SDKError` objects, this \"warning\" type communicates important\n * context that does not rise to the level of an exception. These should be\n * logged rather than thrown.\n */\nexport class MagicSDKWarning {\n public message: string;\n\n constructor(public code: SDKWarningCode, public rawMessage: string) {\n this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n/**\n * This error type is reserved for communicating errors that arise during\n * execution of Magic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class MagicExtensionError<TData = any> extends Error {\n __proto__ = Error;\n\n constructor(ext: Extension<string>, public code: string | number, public rawMessage: string, public data: TData) {\n super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicExtensionError.prototype);\n }\n}\n\n/**\n * In contrast to `MagicExtensionError` objects, this \"warning\" type\n * communicates important context that does not rise to the level of an\n * exception. These should be logged rather than thrown.\n */\nexport class MagicExtensionWarning {\n public message: string;\n\n constructor(ext: Extension<string>, public code: string | number, public rawMessage: string) {\n this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n// --- SDK error factories\n\nexport function createMissingApiKeyError() {\n return new MagicSDKError(\n SDKErrorCode.MissingApiKey,\n 'Please provide an API key that you acquired from the Magic developer dashboard.',\n );\n}\n\nexport function createModalNotReadyError() {\n return new MagicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready.');\n}\n\nexport function createMalformedResponseError() {\n return new MagicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Magic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n return new MagicSDKError(\n SDKErrorCode.ExtensionNotInitialized,\n `Extensions must be initialized with a Magic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n );\n}\n\nexport function createIncompatibleExtensionsError(extensions: Extension<string>[]) {\n let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n extensions\n .filter((ext) => typeof ext.compat !== 'undefined' && ext.compat !== null)\n .forEach((ext) => {\n const compat = ext.compat![SDKEnvironment.sdkName];\n\n /* istanbul ignore else */\n if (typeof compat === 'string') {\n msg += `\\n - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n } else if (!compat) {\n msg += `\\n - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n }\n\n // Else case is irrelevant here here\n // (we filter out extensions with missing `compat` field)\n });\n\n return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);\n}\n\nexport function createInvalidArgumentError(options: {\n procedure: string;\n argument: number;\n expected: string;\n received: string;\n}) {\n /**\n * Parses the argument index (given by `argument`) to attach the correct ordinal suffix.\n * (i.e.: 1st, 2nd, 3rd, 4th, etc.)\n */\n const ordinalSuffix = (i: number) => {\n const iAdjusted = i + 1; // Argument is zero-indexed.\n const j = iAdjusted % 10;\n const k = iAdjusted % 100;\n if (j === 1 && k !== 11) return `${iAdjusted}st`;\n if (j === 2 && k !== 12) return `${iAdjusted}nd`;\n if (j === 3 && k !== 13) return `${iAdjusted}rd`;\n return `${iAdjusted}th`;\n };\n\n return new MagicSDKError(\n SDKErrorCode.InvalidArgument,\n `Invalid ${ordinalSuffix(options.argument)} argument given to \\`${options.procedure}\\`.\\n` +\n ` Expected: \\`${options.expected}\\`\\n` +\n ` Received: \\`${options.received}\\``,\n );\n}\n\n// --- SDK warning factories\n\nexport function createDuplicateIframeWarning() {\n return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createSynchronousWeb3MethodWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.SyncWeb3Method,\n 'Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead.',\n );\n}\n\nexport function createReactNativeEndpointConfigurationWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.ReactNativeEndpointConfiguration,\n `CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \\`endpoint\\` parameter SHOULD NOT be provided. The Magic \\`<iframe>\\` is automatically wrapped by a WebView pointed at \\`${SDKEnvironment.defaultEndpoint}\\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`,\n );\n}\n\nexport function createDeprecationWarning(options: {\n method: string;\n removalVersions: {\n [P in\n | 'magic-sdk'\n | '@magic-sdk/react-native'\n | '@magic-sdk/react-native-bare'\n | '@magic-sdk/react-native-expo']: string;\n };\n useInstead?: string;\n}) {\n const { method, removalVersions, useInstead } = options;\n\n const removalVersion = removalVersions[SDKEnvironment.sdkName];\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from \\`${SDKEnvironment.sdkName}\\` in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n\n return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n","/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intesection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, MagicPayloadMethod, RPCErrorCode } from '@magic-sdk/types';\n\n/**\n * Assert `value` is `undefined`.\n */\nfunction isUndefined(value: any): value is undefined {\n return typeof value === 'undefined';\n}\n\n/**\n * Assert `value` is `null`.\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\n/**\n * Assert `value` is `null` or `undefined`.\n */\nfunction isNil(value: any): value is null | undefined {\n return isNull(value) || isUndefined(value);\n}\n\n/**\n * Assert `value` is a `JsonRpcRequestPayload` object.\n */\nexport function isJsonRpcRequestPayload(value?: JsonRpcRequestPayload): value is JsonRpcRequestPayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params)\n );\n}\n\n/**\n * Assert `value` is a `JsonRpcResponsePayload` object.\n */\nexport function isJsonRpcResponsePayload(value: any): value is JsonRpcResponsePayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error))\n );\n}\n\n/**\n * Assert `value` is a Magic SDK payload method identifier.\n */\nexport function isMagicPayloadMethod(value?: any): value is MagicPayloadMethod {\n if (isNil(value)) return false;\n return typeof value === 'string' && Object.values(MagicPayloadMethod).includes(value as any);\n}\n\n/**\n * Assert `value` is an expected JSON RPC error code.\n */\nexport function isJsonRpcErrorCode(value?: any): value is RPCErrorCode {\n if (isNil(value)) return false;\n return typeof value === 'number' && Object.values(RPCErrorCode).includes(value);\n}\n\n/**\n * Assert `value` is an empty, plain object.\n */\nexport function isEmpty(value?: any): value is {} {\n if (!value) return true;\n\n for (const key in value) {\n /* istanbul ignore else */\n if (Object.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n","import type localForage from 'localforage';\nimport type { ViewController } from './view-controller';\nimport type { SDKBase } from './sdk';\nimport type { WithExtensions } from '../modules/base-extension';\n\ntype ConstructorOf<C> = { new (...args: any[]): C };\n\n/**\n * A structure containing details about the current environment.\n * This is guaranteed to be populated before the SDK is instantiated.\n */\nexport interface SDKEnvironment {\n sdkName: 'magic-sdk' | '@magic-sdk/react-native' | '@magic-sdk/react-native-bare' | '@magic-sdk/react-native-expo';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\n bundleId?: string | null;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n SDKBaseCtor: ConstructorOf<SDK>,\n environment: SDKEnvironment,\n): WithExtensions<SDK> {\n Object.assign(SDKEnvironment, environment);\n return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n 'magic-sdk': 'magic-sdk' as const,\n '@magic-sdk/react-native': 'magic-sdk-rn' as const,\n '@magic-sdk/react-native-bare': 'magic-sdk-rn-bare' as const,\n '@magic-sdk/react-native-expo': 'magic-sdk-rn-expo' as const,\n};\n","import {\n MagicPayloadMethod,\n LoginWithMagicLinkConfiguration,\n LoginWithSmsConfiguration,\n LoginWithEmailOTPConfiguration,\n LoginWithEmailOTPEventHandlers,\n LoginWithMagicLinkEventHandlers,\n UpdateEmailConfiguration,\n DeviceVerificationEventEmit,\n LoginWithEmailOTPEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n RecencyCheckEventEmit,\n LoginWithCredentialConfiguration,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { isMajorVersionAtLeast } from '../util/version-check';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\n\nexport const ProductConsolidationMethodRemovalVersions = {\n 'magic-sdk': 'v18.0.0',\n '@magic-sdk/react-native': 'v14.0.0',\n '@magic-sdk/react-native-bare': 'v19.0.0',\n '@magic-sdk/react-native-expo': 'v19.0.0',\n};\n\nexport class AuthModule extends BaseModule {\n /**\n * Initiate the \"magic link\" login flow for a user. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n */\n public loginWithMagicLink(configuration: LoginWithMagicLinkConfiguration) {\n const isRNMobilePackage =\n SDKEnvironment.sdkName === '@magic-sdk/react-native' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n // RN SDK major version is greater than or equal to v19\n if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {\n throw new Error(\n 'loginWithMagicLink() is deprecated for this package, please utlize a passcode method like loginWithSMS or loginWithEmailOTP instead.',\n );\n } else if (isRNMobilePackage) {\n // RN SDK major version is less than v19\n createDeprecationWarning({\n method: 'auth.loginWithMagicLink()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'auth.loginWithEmailOTP()',\n }).log();\n }\n\n const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI, overrides, lifespan }],\n );\n return this.request<string | null, LoginWithMagicLinkEventHandlers>(requestPayload);\n }\n\n /**\n * Initiate an SMS login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithSMS(configuration: LoginWithSmsConfiguration) {\n const { phoneNumber, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI: true, lifespan }],\n );\n return this.request<string | null>(requestPayload);\n }\n\n /**\n * Initiate an Email with OTP login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithEmailOTP(configuration: LoginWithEmailOTPConfiguration) {\n const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithEmailOTPTestMode : MagicPayloadMethod.LoginWithEmailOTP,\n [{ email, showUI, deviceCheckUI, overrides, lifespan }],\n );\n const handle = this.request<string | null, LoginWithEmailOTPEventHandlers>(requestPayload);\n if (!deviceCheckUI && handle) {\n handle.on(DeviceVerificationEventEmit.Retry, () => {\n this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id as any)();\n });\n }\n if (!showUI && handle) {\n handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id as any)();\n });\n }\n return handle;\n }\n\n /**\n * Log a user in with a special one-time-use credential token. This is\n * currently used during magic link flows with a configured redirect to\n * hydrate the user session at the end of the flow. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n *\n * If no argument is provided, a credential is automatically parsed from\n * `window.location.search`.\n */\n public loginWithCredential(configuration?: LoginWithCredentialConfiguration) {\n const { credentialOrQueryString, lifespan } = configuration || {};\n let credentialResolved = credentialOrQueryString ?? '';\n\n if (!credentialOrQueryString && SDKEnvironment.platform === 'web') {\n credentialResolved = window.location.search;\n\n // Remove the query from the redirect callback as a precaution.\n const urlWithoutQuery = window.location.origin + window.location.pathname;\n window.history.replaceState(null, '', urlWithoutQuery);\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithCredentialTestMode : MagicPayloadMethod.LoginWithCredential,\n [credentialResolved, lifespan],\n );\n\n return this.request<string | null>(requestPayload);\n }\n\n // Custom Auth\n public setAuthorizationToken(jwt: string) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);\n return this.request<boolean>(requestPayload);\n }\n\n public updateEmailWithUI(configuration: UpdateEmailConfiguration) {\n const { email, showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UpdateEmailTestMode : MagicPayloadMethod.UpdateEmail,\n [{ email, showUI }],\n );\n\n const handle = this.request<string | null, UpdateEmailEventHandlers>(requestPayload);\n\n if (!showUI) {\n handle.on(RecencyCheckEventEmit.Retry, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(RecencyCheckEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as any)(newEmail);\n });\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n }\n return handle;\n }\n}\n","import {\n JsonRpcRequestPayload,\n MagicOutgoingWindowMessage,\n MagicIncomingWindowMessage,\n MagicPayloadMethod,\n IntermediaryEvents,\n} from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n constructor(protected sdk: SDKBase) {}\n\n /**\n * The `ViewController` for the SDK instance registered to this module.\n */\n protected get overlay(): ViewController {\n return (this.sdk as any).overlay;\n }\n\n /**\n * Emits promisified requests to the Magic `<iframe>` context.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n const responsePromise = this.overlay.post<ResultType>(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n standardizeJsonRpcRequestPayload(payload),\n );\n\n // PromiEvent-ify the response.\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n responsePromise\n .then((res) => {\n cleanupEvents();\n if (res.hasError) reject(new MagicRPCError(res.payload.error));\n else if (res.hasResult) resolve(res.payload.result as ResultType);\n else throw createMalformedResponseError();\n })\n .catch((err) => {\n cleanupEvents();\n reject(err);\n });\n });\n\n // Listen for events from the `<iframe>` associated with the current payload\n // and emit those to `PromiEvent` subscribers.\n const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, (evt) => {\n const { response } = evt.data;\n\n if (response.id === payload.id && response.result?.event) {\n const { event, params = [] } = response.result;\n promiEvent.emit(event, ...params);\n }\n });\n\n return promiEvent;\n }\n\n // Creates an intermediary event which takes a typed event and a payload ID\n protected createIntermediaryEvent<T = Function>(eventType: IntermediaryEvents, payloadId: string) {\n const e = (args: any) => {\n const res = createJsonRpcRequestPayload(MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);\n this.request(res);\n };\n return e as unknown as T;\n }\n}\n","function* createIntGenerator(): Generator<number, number, void> {\n let index = 0;\n\n while (true) {\n /* istanbul ignore next */\n if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n else index = 0;\n }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n return intGenerator.next().value;\n}\n","/* eslint-disable no-param-reassign */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Magic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n Object.defineProperty(payload, payloadPreprocessedSymbol, {\n value: true,\n enumerable: false,\n });\n\n return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n if (!isPayloadPreprocessed(payload)) {\n payload.jsonrpc = payload.jsonrpc ?? '2.0';\n payload.id = getPayloadId();\n payload.method = payload.method ?? 'noop';\n payload.params = payload.params ?? [];\n\n markPayloadAsPreprocessed(payload);\n }\n\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\n return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Magic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n return markPayloadAsPreprocessed({\n params,\n method,\n jsonrpc: '2.0',\n id: getPayloadId(),\n });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n private readonly _jsonrpc: string;\n private readonly _id: string | number | null;\n private _result?: ResultType | null;\n private _error?: JsonRpcError | null;\n\n constructor(responsePayload: JsonRpcResponsePayload);\n constructor(response: JsonRpcResponse<ResultType>);\n constructor(requestPayload: JsonRpcRequestPayload);\n constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n if (responseOrPayload instanceof JsonRpcResponse) {\n this._jsonrpc = responseOrPayload.payload.jsonrpc;\n this._id = responseOrPayload.payload.id;\n this._result = responseOrPayload.payload.result;\n this._error = responseOrPayload.payload.error;\n } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = responseOrPayload.result;\n this._error = responseOrPayload.error;\n } else {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = undefined;\n this._error = undefined;\n }\n }\n\n public applyError(error?: JsonRpcError | null) {\n this._error = error;\n return this;\n }\n\n public applyResult(result?: ResultType | null) {\n this._result = result;\n return this;\n }\n\n public get hasError() {\n return typeof this._error !== 'undefined' && this._error !== null;\n }\n\n public get hasResult() {\n return typeof this._result !== 'undefined';\n }\n\n public get payload(): JsonRpcResponsePayload {\n return {\n jsonrpc: this._jsonrpc,\n id: this._id,\n result: this._result,\n error: this._error,\n };\n }\n}\n","import { UserEventsEmit, UserEventsOnReceived } from '@magic-sdk/types';\nimport { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accomodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): ExtendedPromise<TResult1 | TResult2> & this;\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n ): ExtendedPromise<T | TResult> & this;\n\n finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n done: (result: TResult) => void;\n error: (reason: any) => void;\n settled: () => void;\n [UserEventsEmit.ClosedByUser]: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n resolve: (value: TResult | PromiseLike<TResult>) => void,\n reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n const promise = createPromise(executor);\n const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n TEvents & DefaultEvents<TResult>\n >();\n\n // We save the original `Promise` methods to the following symbols so we can\n // access them internally.\n const thenSymbol = Symbol('Promise.then');\n const catchSymbol = Symbol('Promise.catch');\n const finallySymbol = Symbol('Promise.finally');\n\n /**\n * Ensures the next object in the `PromiEvent` chain is overloaded with\n * `EventEmitter` methods.\n */\n const createChainingPromiseMethod =\n (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n (...args: any[]) => {\n const nextPromise = (source as any)[method].apply(source, args);\n return promiEvent(nextPromise);\n };\n\n /**\n * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n * `Promise` object.\n */\n const promiEvent = (source: any) => {\n return Object.assign(source, {\n [promiEventBrand]: true,\n\n [thenSymbol]: source[thenSymbol] || source.then,\n [catchSymbol]: source[catchSymbol] || source.catch,\n [finallySymbol]: source[finallySymbol] || source.finally,\n\n then: createChainingPromiseMethod(thenSymbol, source),\n catch: createChainingPromiseMethod(catchSymbol, source),\n finally: createChainingPromiseMethod(finallySymbol, source),\n\n on: createChainingEmitterMethod('on', source),\n once: createChainingEmitterMethod('once', source),\n addListener: createChainingEmitterMethod('addListener', source),\n\n off: createChainingEmitterMethod('off', source),\n removeListener: createChainingEmitterMethod('removeListener', source),\n removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n emit: createBoundEmitterMethod('emit'),\n eventNames: createBoundEmitterMethod('eventNames'),\n listeners: createBoundEmitterMethod('listeners'),\n listenerCount: createBoundEmitterMethod('listenerCount'),\n });\n };\n\n const result = promiEvent(\n promise.then(\n (resolved) => {\n // Emit default completion events and resolve result.\n result.emit('done', resolved);\n result.emit('settled');\n return resolved;\n },\n\n (err) => {\n // Emit default error events and re-throw.\n result.emit('error', err);\n result.emit('settled');\n throw err;\n },\n ),\n );\n\n result.on(UserEventsOnReceived.ClosedByUser, () => {\n result.emit(UserEventsEmit.ClosedByUser);\n });\n return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n return new Promise<TResult>((resolve, reject) => {\n const result = executor(resolve, reject);\n Promise.resolve(result).catch(reject);\n });\n}\n","import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Magic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n const emitter = new TypedEmitter<Events>();\n\n const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n method: T1,\n source: T2,\n ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n return (...args: any[]) => {\n (emitter as any)[method].apply(emitter, args);\n return source;\n };\n };\n\n const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n return (...args: any[]) => {\n return (emitter as any)[method].apply(emitter, args);\n };\n };\n\n return {\n emitter,\n createChainingEmitterMethod,\n createBoundEmitterMethod,\n };\n}\n","export function isMajorVersionAtLeast(version: string, majorVersion: number): boolean {\n // Split the version string into major, minor, and patch versions\n const [major] = version.split('.').map(Number);\n\n // Check if the major version is at least the required major version\n return major >= majorVersion;\n}\n","import {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UserInfo,\n RequestUserInfoScope,\n RecoverAccountConfiguration,\n ShowSettingsConfiguration,\n} from '@magic-sdk/types';\nimport { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\nimport { ProductConsolidationMethodRemovalVersions } from './auth';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\nimport { createPromiEvent } from '../util';\n\ntype UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n public getIdToken(configuration?: GetIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetIdTokenTestMode : MagicPayloadMethod.GetIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public generateIdToken(configuration?: GenerateIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GenerateIdTokenTestMode : MagicPayloadMethod.GenerateIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public async getInfo() {\n const activeWallet = await getItem(this.localForageKey);\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, [{ walletType: activeWallet }]);\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public isLoggedIn() {\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n let cachedIsLoggedIn = false;\n if (this.sdk.useStorageCache) {\n cachedIsLoggedIn = (await getItem(this.localForageIsLoggedInKey)) === 'true';\n\n // if isLoggedIn is true on storage, optimistically resolve with true\n // if it is false, we use `usr.isLoggedIn` as the source of truth.\n if (cachedIsLoggedIn) {\n resolve(true);\n }\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n const isLoggedInResponse = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n if (isLoggedInResponse) {\n setItem(this.localForageIsLoggedInKey, true);\n } else {\n removeItem(this.localForageIsLoggedInKey);\n }\n if (cachedIsLoggedIn && !isLoggedInResponse) {\n this.emitUserLoggedOut(true);\n }\n }\n resolve(isLoggedInResponse);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n public logout() {\n removeItem(this.localForageKey);\n removeItem(this.localForageIsLoggedInKey);\n clearDeviceShares();\n\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n const response = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n this.emitUserLoggedOut(response);\n }\n resolve(response);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /* Request email address from logged in user */\n public requestInfoWithUI(scope?: RequestUserInfoScope) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n public showSettings(configuration?: ShowSettingsConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n [configuration],\n );\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public recoverAccount(configuration: RecoverAccountConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.RecoverAccountTestMode : MagicPayloadMethod.RecoverAccount,\n [configuration],\n );\n return this.request<boolean | null>(requestPayload);\n }\n\n public revealPrivateKey() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK);\n return this.request<boolean>(requestPayload);\n }\n\n // Deprecating\n public getMetadata() {\n createDeprecationWarning({\n method: 'user.getMetadata()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.getInfo()',\n }).log();\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetMetadataTestMode : MagicPayloadMethod.GetMetadata,\n );\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public onUserLoggedOut(callback: UserLoggedOutCallback): void {\n this.userLoggedOutCallbacks.push(callback);\n }\n\n public enableMFA() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.EnableMFA);\n return this.request<boolean>(requestPayload);\n }\n\n public disableMFA() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.DisableMFA);\n return this.request<boolean>(requestPayload);\n }\n\n // Private members\n private emitUserLoggedOut(loggedOut: boolean): void {\n this.userLoggedOutCallbacks.forEach((callback) => {\n callback(loggedOut);\n });\n }\n\n private localForageKey = 'mc_active_wallet';\n private localForageIsLoggedInKey = 'magic_auth_is_logged_in';\n private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n","import { SDKEnvironment } from '../core/sdk-environment';\n\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n return async (...args: any[]) => {\n /* istanbul ignore else */\n if (!lf) lf = await SDKEnvironment.configureStorage();\n await lf.ready();\n return (lf[method] as any)(...args);\n };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n","/* eslint-disable no-bitwise */\nexport function uuid() {\n const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n // set the version bit to v4\n u[6] = (u[6] & 0x0f) | 0x40;\n\n // set the variant bit to \"don't care\" (yes, the RFC\n // calls it that)\n u[8] = (u[8] & 0xbf) | 0x80;\n\n // hex encode them and add the dashes\n let uid = '';\n uid += u[0].toString(16);\n uid += u[1].toString(16);\n uid += u[2].toString(16);\n uid += u[3].toString(16);\n uid += '-';\n\n uid += u[4].toString(16);\n uid += u[5].toString(16);\n uid += '-';\n\n uid += u[6].toString(16);\n uid += u[7].toString(16);\n uid += '-';\n\n uid += u[8].toString(16);\n uid += u[9].toString(16);\n uid += '-';\n\n uid += u[10].toString(16);\n uid += u[11].toString(16);\n uid += u[12].toString(16);\n uid += u[13].toString(16);\n uid += u[14].toString(16);\n uid += u[15].toString(16);\n\n return uid;\n}\n","import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n removeItem(STORE_KEY_PUBLIC_JWK);\n removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n // will return undefiend is webcrypto is not supported\n const publicJwk = await getPublicKey();\n\n if (!publicJwk) {\n console.info('unable to create public key or webcrypto is unsupported');\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n if (!privateJwk || !subtle) {\n console.info('unable to find private key or webcrypto unsupported');\n return undefined;\n }\n\n const claims = {\n iat: Math.floor(new Date().getTime() / 1000),\n jti: uuid(),\n };\n\n const headers = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk: publicJwk,\n };\n\n const jws = {\n protected: strToUrlBase64(JSON.stringify(headers)),\n claims: strToUrlBase64(JSON.stringify(claims)),\n };\n\n const data = strToUint8(`${jws.protected}.${jws.claims}`);\n const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n\n if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n await generateWCKP();\n }\n\n return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n // to avoid a nasty babel bug we have to hoist this above the await ourselves\n // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n false, // need to export the public key, while keep private key non-extractable\n ['sign'],\n );\n\n const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n const escstr = encodeURIComponent(str);\n // replaces any uri escape sequence, such as %0A,\n // with binary escape, such as 0x0A\n return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n let bin = '';\n uint8.forEach((code) => {\n bin += String.fromCharCode(code);\n });\n return binToUrlBase64(bin);\n}\n","import { getItem, iterate, removeItem, setItem } from './storage';\nimport { isWebCryptoSupported } from './web-crypto';\n\nexport const DEVICE_SHARE_KEY = 'ds';\nexport const ENCRYPTION_KEY_KEY = 'ek';\nexport const INITIALIZATION_VECTOR_KEY = 'iv';\n\nconst ALGO_NAME = 'AES-GCM'; // for encryption\nconst ALGO_LENGTH = 256;\n\nexport async function clearDeviceShares() {\n const keysToRemove: string[] = [];\n await iterate((value, key, iterationNumber) => {\n if (key.startsWith(`${DEVICE_SHARE_KEY}_`)) {\n keysToRemove.push(key);\n }\n });\n for (const key of keysToRemove) {\n // eslint-disable-next-line no-await-in-loop\n await removeItem(key);\n }\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function getOrCreateInitVector() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { crypto } = window;\n const existingIv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array;\n if (existingIv) {\n return existingIv;\n }\n\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for AES-GCM\n return iv;\n}\n\nasync function getOrCreateEncryptionKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { subtle } = window.crypto;\n const existingKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n if (existingKey) {\n return existingKey;\n }\n\n const key = await subtle.generateKey(\n { name: ALGO_NAME, length: ALGO_LENGTH },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n return key;\n}\n\nexport async function encryptAndPersistDeviceShare(deviceShareBase64: string, networkHash: string): Promise<void> {\n const iv = await getOrCreateInitVector();\n const encryptionKey = await getOrCreateEncryptionKey();\n\n if (!iv || !encryptionKey || !deviceShareBase64) {\n return;\n }\n const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);\n\n const { subtle } = window.crypto;\n\n const encryptedData = await subtle.encrypt(\n {\n name: ALGO_NAME,\n iv,\n },\n encryptionKey,\n decodedDeviceShare,\n );\n\n // The encrypted device share we store is a base64 encoded string representation\n // of the magic kms encrypted client share encrypted with webcrypto\n const encryptedDeviceShare = arrayBufferToBase64(encryptedData);\n\n await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);\n await setItem(ENCRYPTION_KEY_KEY, encryptionKey);\n await setItem(INITIALIZATION_VECTOR_KEY, iv);\n}\n\nexport async function getDecryptedDeviceShare(networkHash: string): Promise<string | undefined> {\n const encryptedDeviceShare = await getItem<string>(`${DEVICE_SHARE_KEY}_${networkHash}`);\n const iv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array; // use existing encryption key and initialization vector\n const encryptionKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n\n if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const ab = await subtle.decrypt({ name: ALGO_NAME, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));\n\n return arrayBufferToBase64(ab);\n}\n","/**\n * Builds a `URL` object safely.\n */\nexport function createURL(url: string, base?: string): URL {\n // Safari raises an error if `undefined` is given to the second argument of\n // the `URL` constructor.\n return base ? new URL(url, base) : new URL(url);\n}\n","import {\n Events,\n GasApiResponse,\n MagicPayloadMethod,\n GaslessTransactionRequest,\n RequestUserInfoScope,\n UserEnv,\n UserInfo,\n WalletInfo,\n Wallets,\n ShowUIPromiEvents,\n} from '@magic-sdk/types';\n\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\nimport { setItem, getItem, removeItem } from '../util/storage';\nimport { ProductConsolidationMethodRemovalVersions } from './auth';\nimport { createPromiEvent } from '../util';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\n\nexport type ConnectWithUiEvents = {\n 'id-token-created': (params: { idToken: string }) => void;\n wallet_selected: (params: { wallet: Wallets }) => any;\n};\n\ntype ShowUiConfig = {\n onramperParams?: { [key: string]: string };\n};\n\nexport class WalletModule extends BaseModule {\n /* Prompt Magic's Login Form */\n public connectWithUI() {\n const promiEvent = createPromiEvent<string[], ConnectWithUiEvents>(async (resolve, reject) => {\n try {\n // If within metamask wallet browser, auto-connect without any UI (if dapp has metamask enabled)\n if (this.isMetaMaskBrowser() && (await this.isWalletEnabled(Wallets.MetaMask))) {\n const result = await this.autoConnectIfWalletBrowser(Wallets.MetaMask);\n resolve(result);\n return;\n }\n // If within coinbase wallet browser, auto-connect without any UI (if dapp has coinbase enabled)\n if (this.isCoinbaseWalletBrowser() && (await this.isWalletEnabled(Wallets.CoinbaseWallet))) {\n const result = await this.autoConnectIfWalletBrowser(Wallets.CoinbaseWallet);\n resolve(result);\n return;\n }\n const userEnv = this.getUserEnv();\n const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login, [userEnv]);\n const loginRequest = this.request<string[], ConnectWithUiEvents>(loginRequestPayload);\n loginRequest.on(Events.WalletSelected as any, (params: { wallet: Wallets }) =>\n this.handleWalletSelected({ ...params, payloadId: loginRequestPayload.id as number }),\n );\n loginRequest.on('id-token-created' as any, (params: { idToken: string }) => {\n promiEvent.emit('id-token-created', params);\n });\n const result = await loginRequest;\n if ((result as any).error) reject(result);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n return promiEvent;\n }\n\n /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */\n public showUI(config?: ShowUiConfig) {\n return this.request<boolean, ShowUIPromiEvents>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowUI, [config]));\n }\n\n public showAddress() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowAddress));\n }\n\n public showSendTokensUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowSendTokensUI));\n }\n\n public showOnRamp() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowOnRamp));\n }\n\n public showNFTs() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowNFTs));\n }\n\n public showBalances() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowBalances));\n }\n\n public sendGaslessTransaction(address: string, transaction: GaslessTransactionRequest) {\n return this.request<GasApiResponse>(\n createJsonRpcRequestPayload(MagicPayloadMethod.SendGaslessTransaction, [address, transaction]),\n );\n }\n\n /* Get user info such as the wallet type they are logged in with */\n // deprecating\n public async getInfo() {\n createDeprecationWarning({\n method: 'wallet.getInfo()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.getInfo()',\n }).log();\n const activeWallet = await getItem(this.localForageKey);\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, [{ walletType: activeWallet }]);\n return this.request<WalletInfo>(requestPayload);\n }\n\n /* Logout user */\n // deprecating\n public disconnect() {\n createDeprecationWarning({\n method: 'wallet.disconnect()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.logout()',\n }).log();\n removeItem(this.localForageKey);\n clearDeviceShares();\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Disconnect);\n return this.request<boolean>(requestPayload);\n }\n\n /* Request email address from logged in user */\n // deprecating\n public requestUserInfoWithUI(scope?: RequestUserInfoScope) {\n createDeprecationWarning({\n method: 'wallet.requestUserInfoWithUI()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'user.requestUserInfoWithUI()',\n }).log();\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n /* Returns the provider for the connected wallet */\n public async getProvider(): Promise<any> {\n const activeWallet = await getItem(this.localForageKey);\n switch (activeWallet) {\n case Wallets.MetaMask:\n return this.getMetaMaskProvider();\n case Wallets.CoinbaseWallet:\n return this.getCoinbaseProvider();\n default:\n return this.sdk.rpcProvider;\n }\n }\n\n /* Private methods */\n\n private localForageKey = 'mc_active_wallet';\n\n /* MetaMask */\n private isMetaMaskInstalled(): boolean {\n return (\n (window as any).ethereum?.isMetaMask ||\n !!(window as any).ethereum?.providers?.find((provider: any) => provider?.isMetaMask)\n );\n }\n\n private isMetaMaskBrowser(): boolean {\n return this.isMobile() && this.isMetaMaskInstalled();\n }\n\n private getMetaMaskProvider(): any {\n return (window as any).ethereum?.providers?.find((p: any) => p?.isMetaMask) || (window as any).ethereum;\n }\n\n private connectToMetaMask(): Promise<string[]> {\n // Redirect to MetaMask app if user selects MetaMask on mobile\n if (this.isMobile() && !this.isMetaMaskInstalled()) {\n const metaMaskDeepLink = `https://metamask.app.link/dapp/${window.location.href.replace(/(^\\w+:|^)\\/\\//, '')}`;\n window.location.href = metaMaskDeepLink;\n }\n return this.getMetaMaskProvider().request({ method: 'eth_requestAccounts' });\n }\n\n /* Coinbase Wallet */\n private isCoinbaseWalletInstalled(): boolean {\n return (\n (window as any).ethereum?.isCoinbaseWallet ||\n !!(window as any).ethereum?.providers?.find((provider: any) => provider?.isCoinbaseWallet)\n );\n }\n\n private isCoinbaseWalletBrowser(): boolean {\n return !!(window as any).ethereum?.isCoinbaseBrowser;\n }\n\n private getCoinbaseProvider(): any {\n return (window as any).ethereum?.providers?.find((p: any) => p?.isCoinbaseWallet) || (window as any).ethereum;\n }\n\n private connectToCoinbaseWallet(): Promise<string[]> {\n // Redirect to Coinbase Wallet app if user selects Coinbase Wallet on mobile\n if (this.isMobile() && !this.isCoinbaseWalletBrowser()) {\n const coinbaseWalletDeepLink = `https://go.cb-w.com/dapp?cb_url=${encodeURIComponent(window.location.href)}`;\n window.location.href = coinbaseWalletDeepLink;\n }\n const provider = this.getCoinbaseProvider();\n return provider.request({ method: 'eth_requestAccounts' });\n }\n\n /* Helpers */\n private isMobile(): boolean {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Silk|Opera Mini/i.test(\n navigator.userAgent,\n );\n }\n\n private getUserEnv(): UserEnv {\n return {\n env: {\n isMetaMaskInstalled: this.isMetaMaskInstalled(),\n isCoinbaseWalletInstalled: this.isCoinbaseWalletInstalled(),\n },\n };\n }\n\n private connectToThirdPartyWallet(provider: Wallets): Promise<any> {\n switch (provider) {\n case Wallets.MetaMask:\n return this.connectToMetaMask();\n case Wallets.CoinbaseWallet:\n return this.connectToCoinbaseWallet();\n default:\n throw new Error(`Invalid provider: ${provider}. Must be one of \"metamask\" or \"coinbase_wallet\".`);\n }\n }\n\n private isWalletEnabled(wallet: Wallets): Promise<boolean> {\n const isWalletEnabled = createJsonRpcRequestPayload('mc_is_wallet_enabled', [{ wallet }]);\n return this.request<boolean>(isWalletEnabled);\n }\n\n /* Triggers connection to wallet, emits success/reject event back to iframe */\n private async handleWalletSelected(params: { wallet: Wallets; payloadId: number }) {\n try {\n const address = await this.connectToThirdPartyWallet(params.wallet);\n await setItem(this.localForageKey, params.wallet);\n this.createIntermediaryEvent(Events.WalletConnected as any, params.payloadId as any)(address);\n } catch (error) {\n console.error(error);\n this.createIntermediaryEvent(Events.WalletRejected as any, params.payloadId as any)();\n }\n }\n\n private async autoConnectIfWalletBrowser(wallet: Wallets): Promise<string[]> {\n let address;\n if (wallet === Wallets.MetaMask) {\n address = await this.getMetaMaskProvider().request({ method: 'eth_requestAccounts' });\n }\n if (wallet === Wallets.CoinbaseWallet) {\n address = await this.getCoinbaseProvider().request({ method: 'eth_requestAccounts' });\n }\n await setItem(this.localForageKey, wallet);\n const autoConnectPayload = createJsonRpcRequestPayload(MagicPayloadMethod.AutoConnect, [{ wallet, address }]);\n const autoConnectRequest = this.request<string[]>(autoConnectPayload);\n return autoConnectRequest;\n }\n}\n","/* eslint-disable consistent-return, prefer-spread */\n\nimport {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\n ProviderEnableEvents,\n MagicPayloadMethod,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createInvalidArgumentError, MagicRPCError, createSynchronousWeb3MethodWarning } from '../core/sdk-exceptions';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload, JsonRpcResponse } from '../core/json-rpc';\nimport { PromiEvent } from '../util/promise-tools';\nimport { createTypedEmitter, EventsDefinition, TypedEmitter } from '../util/events';\n\nconst { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();\n\n/** */\nexport class RPCProviderModule extends BaseModule implements TypedEmitter {\n // Implements EIP 1193:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n\n public readonly isMagic = true;\n\n /* eslint-disable prettier/prettier */\n public sendAsync(payload: Partial<JsonRpcRequestPayload>, onRequestComplete: JsonRpcRequestCallback): void;\n public sendAsync(payload: Partial<JsonRpcRequestPayload>[], onRequestComplete: JsonRpcBatchRequestCallback): void;\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void;\n /* eslint-enable prettier/prettier */\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void {\n if (!onRequestComplete) {\n throw createInvalidArgumentError({\n procedure: 'Magic.rpcProvider.sendAsync',\n argument: 1,\n expected: 'function',\n received: onRequestComplete === null ? 'null' : typeof onRequestComplete,\n });\n }\n\n if (Array.isArray(payload)) {\n this.overlay\n .post(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n payload.map((p) => {\n const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n this.prefixPayloadMethodForTestMode(standardizedPayload);\n return standardizedPayload;\n }),\n )\n .then((batchResponse) => {\n (onRequestComplete as JsonRpcBatchRequestCallback)(\n null,\n batchResponse.map((response) => ({\n ...response.payload,\n error: response.hasError ? new MagicRPCError(response.payload.error) : null,\n })),\n );\n });\n } else {\n const finalPayload = standardizeJsonRpcRequestPayload(payload);\n this.prefixPayloadMethodForTestMode(finalPayload);\n this.overlay.post(MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then((response) => {\n (onRequestComplete as JsonRpcRequestCallback)(\n response.hasError ? new MagicRPCError(response.payload.error) : null,\n response.payload,\n );\n });\n }\n }\n\n /* eslint-disable prettier/prettier */\n public send<ResultType = any>(method: string, params?: any[]): PromiEvent<ResultType>;\n public send(\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestComplete: JsonRpcRequestCallback,\n ): void;\n public send<ResultType>(payload: JsonRpcRequestPayload, none: void): JsonRpcResponsePayload<ResultType>;\n /* eslint-enable prettier/prettier */\n public send<ResultType = any>(\n payloadOrMethod: string | JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestCompleteOrParams: JsonRpcRequestCallback | any[] | void,\n ): PromiEvent<ResultType> | JsonRpcResponsePayload<ResultType> | void {\n // Case #1\n // Web3 >= 1.0.0-beta.38 calls `send` with method and parameters.\n if (typeof payloadOrMethod === 'string') {\n const payload = createJsonRpcRequestPayload(\n payloadOrMethod,\n Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : [],\n );\n return this.request(payload) as any;\n }\n\n // Case #2\n // Web3 <= 1.0.0-beta.37 uses `send` with a callback for async queries.\n if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\n this.sendAsync(payloadOrMethod, onRequestCompleteOrParams as any);\n return;\n }\n\n // Case #3\n // Legacy synchronous methods (unsupported).\n const warning = createSynchronousWeb3MethodWarning();\n warning.log();\n return new JsonRpcResponse(payloadOrMethod).applyError({\n code: -32603,\n message: warning.rawMessage,\n }).payload;\n }\n\n public enable() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login);\n return this.request<string[], ProviderEnableEvents>(requestPayload);\n }\n\n /**\n * Here, we wrap `BaseModule.request` with an additional check\n * to determine if the RPC method requires a test-mode prefix.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n this.prefixPayloadMethodForTestMode(payload);\n return super.request<ResultType, Events>(payload);\n }\n\n /**\n * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so\n * that Magic's <iframe> can handle signing methods using test-specific keys.\n */\n private prefixPayloadMethodForTestMode(payload: Partial<JsonRpcRequestPayload>) {\n const testModePrefix = 'testMode/eth/';\n\n // In test mode, we prefix all RPC methods with `test/` so that the\n // Magic <iframe> can handle them without requiring network calls.\n if (this.sdk.testMode) {\n // eslint-disable-next-line no-param-reassign\n payload.method = `${testModePrefix}${payload.method}`;\n }\n }\n\n public on = createChainingEmitterMethod('on', this);\n public once = createChainingEmitterMethod('once', this);\n public addListener = createChainingEmitterMethod('addListener', this);\n\n public off = createChainingEmitterMethod('off', this);\n public removeListener = createChainingEmitterMethod('removeListener', this);\n public removeAllListeners = createChainingEmitterMethod('removeAllListeners', this);\n\n public emit = createBoundEmitterMethod('emit');\n public eventNames = createBoundEmitterMethod('eventNames');\n public listeners = createBoundEmitterMethod('listeners');\n public listenerCount = createBoundEmitterMethod('listenerCount');\n}\n","import { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from '../core/sdk';\nimport { createExtensionNotInitializedError, MagicExtensionError, MagicExtensionWarning } from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent } from '../util';\n\ntype AnonymousExtension = 'anonymous extension';\n\ninterface BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\n /**\n * A structure describing the platform and version compatiblity of this\n * extension.\n */\n compat?: {\n 'magic-sdk': boolean | string;\n '@magic-sdk/react-native': boolean | string;\n '@magic-sdk/react-native-bare': boolean | string;\n '@magic-sdk/react-native-expo': boolean | string;\n };\n}\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n let currentProto = Object.getPrototypeOf(instance);\n const protos = [currentProto];\n\n while (currentProto !== BaseModule.prototype) {\n currentProto = Object.getPrototypeOf(currentProto);\n protos.push(currentProto);\n }\n\n return protos;\n}\n\nabstract class BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\n public abstract readonly name: TName;\n\n private __sdk_access_field_descriptors__ = new Map<\n string,\n { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n >();\n private __is_initialized__ = false;\n\n protected utils = {\n createPromiEvent,\n isPromiEvent,\n encodeJSON,\n decodeJSON,\n createJsonRpcRequestPayload,\n standardizeJsonRpcRequestPayload,\n storage,\n };\n\n constructor() {\n super(undefined as any);\n\n // Disallow SDK access before initialization...\n\n const allSources = [this, ...getPrototypeChain(this)];\n\n sdkAccessFields.forEach((prop) => {\n const allDescriptors = allSources.map((source) => Object.getOwnPropertyDescriptor(source, prop));\n const sourceIndex = allDescriptors.findIndex((x) => !!x);\n const isPrototypeField = sourceIndex > 0;\n const descriptor = allDescriptors[sourceIndex];\n\n /* istanbul ignore else */\n if (descriptor) {\n this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n Object.defineProperty(this, prop, {\n configurable: true,\n get: () => {\n throw createExtensionNotInitializedError(prop);\n },\n });\n }\n });\n }\n\n /**\n * Registers a Magic SDK instance with this Extension.\n *\n * @internal\n */\n public init(sdk: SDKBase) {\n if (this.__is_initialized__) return;\n\n // Replace original property descriptors\n // for SDK access fields post-initialization.\n sdkAccessFields.forEach((prop) => {\n /* istanbul ignore else */\n if (this.__sdk_access_field_descriptors__.has(prop)) {\n const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop)!;\n\n if (isPrototypeField) {\n // For prototype fields, we just need the `delete` operator so that\n // the instance will fallback to the prototype chain itself.\n delete this[prop as keyof this];\n } else {\n Object.defineProperty(this, prop, descriptor);\n }\n }\n });\n\n this.sdk = sdk;\n this.__is_initialized__ = true;\n }\n\n /**\n * Creates a deprecation warning wrapped with a native Magic SDK warning type.\n * Best practice is to warn users of upcoming deprecations at least one major\n * version before the change is implemented. You can use this method to\n * communicate deprecations in a manner consistent with Magic SDK core code.\n */\n protected createDeprecationWarning(options: {\n method: string;\n removalVersion: string;\n useInstead?: string;\n }): MagicExtensionWarning {\n const { method, removalVersion, useInstead } = options;\n\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from this Extension in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n return new MagicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n }\n\n /**\n * Creates a warning wrapped with a native Magic SDK warning type. This\n * maintains consistency in warning messaging for consumers of Magic SDK and\n * this Extension.\n */\n protected createWarning(code: string | number, message: string): MagicExtensionWarning {\n return new MagicExtensionWarning(this, code, message);\n }\n\n /**\n * Creates an error wrapped with a native Magic SDK error type. This maintains\n * consistency in error handling for consumers of Magic SDK and this\n * Extension.\n */\n protected createError<TData = any>(code: string | number, message: string, data: TData): MagicExtensionError<TData> {\n return new MagicExtensionError<TData>(this, code, message, data);\n }\n}\n\nabstract class InternalExtension<TName extends string, TConfig extends any = any> extends BaseExtension<TName> {\n public abstract readonly config: TConfig;\n}\n\n/**\n * A base class representing \"extensions\" to the core Magic JS APIs. Extensions\n * enable new functionality by composing Magic endpoints methods together.\n */\nexport abstract class Extension<TName extends string = AnonymousExtension> extends BaseExtension<TName> {\n /**\n * This is a special constructor used to mark \"official\" extensions. These\n * extensions are designed for special interaction with the Magic iframe using\n * custom JSON RPC methods, business logic, and global configurations. This is\n * intended for internal-use only (and provides no useful advantage to\n * open-source extension developers over the regular `Extension` class).\n *\n * @internal\n */\n public static Internal = InternalExtension;\n public static Anonymous: AnonymousExtension = 'anonymous extension';\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends Extension<string>[]> = UnwrapArray<TExt> extends Extension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends Extension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, Extension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Magic SDK constructor with the necessary type\n * information to support a strongly-typed `Extension` interface.\n */\nexport type WithExtensions<SDK extends SDKBase> = {\n new <TCustomExtName extends string, TExt extends MagicSDKExtensionsOption<TCustomExtName>>(\n apiKey: string,\n options?: MagicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends MagicSDKExtensionsOption> = SDK &\n {\n [P in Exclude<\n TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number | AnonymousExtension\n >]: TExt extends Extension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number | AnonymousExtension\n >]: Extension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n };\n","import {\n MagicPayloadMethod,\n NFTCheckoutRequest,\n NFTCheckoutResponse,\n NFTPurchaseRequest,\n NFTPurchaseResponse,\n NFTTransferRequest,\n NFTTransferResponse,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class NFTModule extends BaseModule {\n /* Start an NFT Purchase flow with Sardine */\n public purchase(options: NFTPurchaseRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTPurchase, [options]);\n return this.request<NFTPurchaseResponse>(requestPayload);\n }\n\n /* Start an NFT Checkout flow with Paypal */\n public checkout(options: NFTCheckoutRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTCheckout, [options]);\n return this.request<NFTCheckoutResponse>(requestPayload);\n }\n\n /* Start an NFT Transfer flow */\n public transfer(options: NFTTransferRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTTransfer, [options]);\n return this.request<NFTTransferResponse>(requestPayload);\n }\n}\n","/* eslint-disable no-param-reassign */\n\nimport { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport type { AbstractProvider } from 'web3-core';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n createMissingApiKeyError,\n createReactNativeEndpointConfigurationWarning,\n createIncompatibleExtensionsError,\n} from './sdk-exceptions';\nimport { AuthModule } from '../modules/auth';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { Extension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\nimport { NFTModule } from '../modules/nft';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Magic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: Extension<string>) {\n if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n : !!ext.compat[SDKEnvironment.sdkName];\n }\n\n // To gracefully support older extensions, we assume\n // compatibility when the `compat` field is missing.\n return true;\n}\n\n/**\n * Generates a network hash of the SDK instance for persisting network specific\n * information on multichain setups\n */\nfunction getNetworkHash(apiKey: string, network?: EthNetworkConfiguration, extConfig?: any) {\n if (!network && !extConfig) {\n return `${apiKey}_eth_mainnet`;\n }\n if (extConfig) {\n return `${apiKey}_${JSON.stringify(extConfig)}`;\n }\n if (network) {\n if (typeof network === 'string') {\n return `${apiKey}_eth_${network}`;\n }\n // Custom network, not necessarily eth.\n return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;\n }\n return `${apiKey}_unknown`;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatiblity issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options?: MagicSDKAdditionalConfiguration): Record<string, any> {\n const extensions: Extension<string>[] | { [key: string]: Extension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: Extension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach((ext) => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name || ext.name !== Extension.Anonymous) {\n // Only apply extensions with a known, defined `name` parameter.\n (this as any)[ext.name] = ext;\n }\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(ext);\n }\n });\n } else {\n Object.keys(extensions).forEach((name) => {\n if (checkExtensionCompat(extensions[name])) {\n extensions[name].init(this);\n const ext = extensions[name];\n (this as any)[name] = ext;\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(extensions[name]);\n }\n });\n }\n\n if (incompatibleExtensions.length) {\n throw createIncompatibleExtensionsError(incompatibleExtensions);\n }\n\n return extConfig;\n}\n\nexport type MagicSDKExtensionsOption<TCustomExtName extends string = string> =\n | Extension<string>[]\n | { [P in TCustomExtName]: Extension<string> };\n\nexport interface MagicSDKAdditionalConfiguration<\n TCustomExtName extends string = string,\n TExt extends MagicSDKExtensionsOption<TCustomExtName> = any,\n> {\n endpoint?: string;\n locale?: SupportedLocale;\n network?: EthNetworkConfiguration;\n extensions?: TExt;\n testMode?: boolean;\n deferPreload?: boolean;\n useStorageCache?: boolean;\n meta?: any; // Generic field for clients to add metadata\n}\n\nexport class SDKBase {\n private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n protected readonly endpoint: string;\n protected readonly parameters: string;\n protected readonly networkHash: string;\n public readonly testMode: boolean;\n public readonly useStorageCache: boolean;\n\n /**\n * Contains methods for starting a Magic SDK authentication flow.\n */\n public readonly auth: AuthModule;\n\n /**\n * Contains methods for interacting with user data, checking login\n * status, generating cryptographically-secure ID tokens, and more.\n */\n public readonly user: UserModule;\n\n /**\n * Contains methods previously under the `ConnectExtension`, including\n * login, show wallet UI, request user info, and more.\n */\n public readonly wallet: WalletModule;\n\n /**\n * Contains methods for interacting with NFTs, including purchase.\n */\n public readonly nft: NFTModule;\n\n /**\n * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers\n * instance for automatic compatibility with Ethereum methods.\n */\n public readonly rpcProvider: RPCProviderModule & AbstractProvider;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(public readonly apiKey: string, options?: MagicSDKAdditionalConfiguration) {\n if (!apiKey) throw createMissingApiKeyError();\n\n if (SDKEnvironment.platform === 'react-native' && options?.endpoint) {\n createReactNativeEndpointConfigurationWarning().log();\n }\n\n const { defaultEndpoint, version } = SDKEnvironment;\n this.testMode = !!options?.testMode;\n this.useStorageCache = !!options?.useStorageCache;\n this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;\n\n // Prepare built-in modules\n this.auth = new AuthModule(this);\n this.user = new UserModule(this);\n this.wallet = new WalletModule(this);\n this.nft = new NFTModule(this);\n this.rpcProvider = new RPCProviderModule(this) as any;\n\n // Prepare extensions\n const extConfig: any = prepareExtensions.call(this, options);\n\n // Encode parameters as base64-JSON\n this.parameters = encodeJSON<QueryParameters>({\n API_KEY: this.apiKey,\n DOMAIN_ORIGIN: window.location ? window.location.origin : '',\n ETH_NETWORK: options?.network,\n host: createURL(this.endpoint).host,\n sdk: sdkNameToEnvName[SDKEnvironment.sdkName],\n version,\n ext: isEmpty(extConfig) ? undefined : extConfig,\n locale: options?.locale || 'en_US',\n ...(SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {}),\n meta: options?.meta,\n });\n this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? undefined : extConfig);\n if (!options?.deferPreload) this.preload();\n }\n\n /**\n * Represents the view controller associated with this `MagicSDK` instance.\n */\n protected get overlay(): ViewController {\n if (!SDKBase.__overlays__.has(this.parameters)) {\n const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - We don't want to expose this method to the user, but we\n // need to invoke in here so that the `ViewController` is ready for use.\n controller.init();\n\n SDKBase.__overlays__.set(this.parameters, controller);\n }\n\n return SDKBase.__overlays__.get(this.parameters)!;\n }\n\n /**\n * Preloads the Magic view, allowing for faster initial requests in browser\n * environments. Awaiting the returned promise will signal when the Magic view\n * has completed loading and is ready for requests.\n */\n public async preload() {\n await this.overlay.checkIsReadyForRequest;\n }\n}\n","import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n SDKWarningCode,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { getItem, setItem } from '../util/storage';\nimport { createJwt } from '../util/web-crypto';\nimport { SDKEnvironment } from './sdk-environment';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport {\n clearDeviceShares,\n encryptAndPersistDeviceShare,\n getDecryptedDeviceShare,\n} from '../util/device-share-web-crypto';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\ninterface StandardizedMagicRequest {\n msgType: string;\n payload: JsonRpcRequestPayload<any> | JsonRpcRequestPayload<any>[];\n jwt?: string;\n rt?: string;\n deviceShare?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nfunction getRequestPayloadFromBatch(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n return id && Array.isArray(requestPayload)\n ? requestPayload.find((p) => p.id === id)\n : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nfunction standardizeResponse(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n event: MagicMessageEvent,\n): StandardizedResponse {\n const id = event.data.response?.id;\n const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n if (id && requestPayloadResolved) {\n // Build a standardized response object\n const response = new JsonRpcResponse(requestPayloadResolved)\n .applyResult(event.data.response.result)\n .applyError(event.data.response.error);\n\n return { id, response };\n }\n\n return {};\n}\n\nasync function createMagicRequest(\n msgType: string,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n networkHash: string,\n) {\n const rt = await getItem<string>('rt');\n let jwt;\n\n // only for webcrypto platforms\n if (SDKEnvironment.platform === 'web') {\n try {\n jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n const request: StandardizedMagicRequest = { msgType, payload };\n\n if (jwt) {\n request.jwt = jwt;\n }\n if (jwt && rt) {\n request.rt = rt;\n }\n\n // Grab the device share if it exists for the network\n const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);\n if (decryptedDeviceShare) {\n request.deviceShare = decryptedDeviceShare;\n }\n\n return request;\n}\n\nasync function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport abstract class ViewController {\n public checkIsReadyForRequest: Promise<void>;\n public isReadyForRequest: boolean;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\n protected isConnectedToInternet = true;\n\n /**\n * Create an instance of `ViewController`\n *\n * @param endpoint - The URL for the relevant iframe context.\n * @param parameters - The unique, encoded query parameters for the\n * relevant iframe context.\n * @param networkHash - The hash of the network that this sdk instance is connected to\n * for multi-chain scenarios\n */\n constructor(\n protected readonly endpoint: string,\n protected readonly parameters: string,\n protected readonly networkHash: string,\n ) {\n this.checkIsReadyForRequest = this.waitForReady();\n this.isReadyForRequest = false;\n this.listen();\n }\n\n protected abstract init(): void;\n protected abstract _post(data: MagicMessageRequest): Promise<void>;\n protected abstract hideOverlay(): void;\n protected abstract showOverlay(): void;\n\n /**\n * Send a payload to the Magic `<iframe>` for processing and automatically\n * handle the acknowledging follow-up event(s).\n *\n * @param msgType - The type of message to encode with the data.\n * @param payload - The JSON RPC payload to emit via `window.postMessage`.\n */\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType>[]>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload,\n ): Promise<JsonRpcResponse<ResultType>>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType> | JsonRpcResponse<ResultType>[]> {\n return createPromise(async (resolve, reject) => {\n if (!this.isConnectedToInternet) {\n const error = createModalNotReadyError();\n reject(error);\n }\n\n if (!this.isReadyForRequest) {\n await this.waitForReady();\n }\n\n const batchData: JsonRpcResponse[] = [];\n const batchIds = Array.isArray(payload) ? payload.map((p) => p.id) : [];\n const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);\n\n await this._post(msg);\n\n /**\n * Collect successful RPC responses and resolve.\n */\n const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: MagicMessageEvent) => {\n const { id, response } = standardizeResponse(payload, event);\n persistMagicEventRefreshToken(event);\n if (response?.payload.error?.message === 'User denied account access.') {\n clearDeviceShares();\n } else if (event.data.deviceShare) {\n const { deviceShare } = event.data;\n encryptAndPersistDeviceShare(deviceShare, this.networkHash);\n }\n if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n batchData.push(response);\n\n // For batch requests, we wait for all responses before resolving.\n if (batchData.length === payload.length) {\n removeEventListener();\n resolve(batchData);\n }\n } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n removeEventListener();\n resolve(response);\n }\n };\n\n // Listen for and handle responses.\n const removeResponseListener = this.on(\n MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,\n acknowledgeResponse(() => removeResponseListener()),\n );\n });\n }\n\n /**\n * Listen for events received with the given `msgType`.\n *\n * @param msgType - The `msgType` encoded with the event data.\n * @param handler - A handler function to execute on each event received.\n * @return A `void` function to remove the attached event.\n */\n public on(\n msgType: MagicIncomingWindowMessage,\n handler: (this: Window, event: MagicMessageEvent) => any,\n ): RemoveEventListenerFunction {\n const boundHandler = handler.bind(window);\n\n // We cannot effectively cover this function because it never gets reference\n // by value. The functionality of this callback is tested within\n // `initMessageListener`.\n /* istanbul ignore next */\n const listener = (event: MagicMessageEvent) => {\n if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n };\n\n this.messageHandlers.add(listener);\n return () => this.messageHandlers.delete(listener);\n }\n\n private waitForReady() {\n return new Promise<void>((resolve) => {\n const unsubscribe = this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n });\n\n // We expect the overlay to be ready within 15 seconds.\n // Sometimes the message is not properly processed due to\n // webview issues. In that case, after 15 seconds we consider\n // the overlay ready, to avoid requests hanging forever.\n setTimeout(() => {\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n }, 15000);\n });\n }\n\n /**\n * Listen for messages sent from the underlying Magic `<WebView>`.\n */\n private listen() {\n this.on(MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {\n this.hideOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {\n this.showOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event: MagicMessageEvent) => {\n if (event.data.response.result.product_announcement) {\n new MagicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n }\n });\n }\n}\n","// Only re-export modules & types that are intended\n// for the public API from this file.\n\nexport {\n Extension,\n MagicSDKError as SDKError,\n MagicExtensionError as ExtensionError,\n MagicExtensionWarning as ExtensionWarning,\n MagicRPCError as RPCError,\n MagicSDKWarning as SDKWarning,\n isPromiEvent,\n} from '@magic-sdk/provider';\n\nexport type { MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption, PromiEvent } from '@magic-sdk/provider';\n\nexport * from '@magic-sdk/types';\n","/*!\n localForage -- Offline Storage, Improved\n Version 1.10.0\n https://localforage.github.io/localForage\n (c) 2013-2017 Mozilla, Apache License 2.0\n*/\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.localforage = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw (f.code=\"MODULE_NOT_FOUND\", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(_dereq_,module,exports){\n'use strict';\nvar immediate = _dereq_(1);\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n\n},{\"1\":1}],3:[function(_dereq_,module,exports){\n(function (global){\n'use strict';\nif (typeof global.Promise !== 'function') {\n global.Promise = _dereq_(2);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"2\":2}],4:[function(_dereq_,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getIDB() {\n /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */\n try {\n if (typeof indexedDB !== 'undefined') {\n return indexedDB;\n }\n if (typeof webkitIndexedDB !== 'undefined') {\n return webkitIndexedDB;\n }\n if (typeof mozIndexedDB !== 'undefined') {\n return mozIndexedDB;\n }\n if (typeof OIndexedDB !== 'undefined') {\n return OIndexedDB;\n }\n if (typeof msIndexedDB !== 'undefined') {\n return msIndexedDB;\n }\n } catch (e) {\n return;\n }\n}\n\nvar idb = getIDB();\n\nfunction isIndexedDBValid() {\n try {\n // Initialize IndexedDB; fall back to vendor-prefixed versions\n // if needed.\n if (!idb || !idb.open) {\n return false;\n }\n // We mimic PouchDB here;\n //\n // We test for openDatabase because IE Mobile identifies itself\n // as Safari. Oh the lulz...\n var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n\n var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1;\n\n // Safari <10.1 does not meet our requirements for IDB support\n // (see: https://github.com/pouchdb/pouchdb/issues/5572).\n // Safari 10.1 shipped with fetch, we can use that to detect it.\n // Note: this creates issues with `window.fetch` polyfills and\n // overrides; see:\n // https://github.com/localForage/localForage/issues/856\n return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' &&\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n // See: https://github.com/mozilla/localForage/issues/128\n // See: https://github.com/mozilla/localForage/issues/272\n typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n}\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor. (i.e.\n// old QtWebKit versions, at least).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// This is CommonJS because lie is an external dependency, so Rollup\n// can just ignore it.\nif (typeof Promise === 'undefined') {\n // In the \"nopromises\" build this will just throw if you don't have\n // a global promise object, but it would throw anyway later.\n _dereq_(3);\n}\nvar Promise$1 = Promise;\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction executeTwoCallbacks(promise, callback, errorCallback) {\n if (typeof callback === 'function') {\n promise.then(callback);\n }\n\n if (typeof errorCallback === 'function') {\n promise[\"catch\"](errorCallback);\n }\n}\n\nfunction normalizeKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + ' used as a key, but it is not a string.');\n key = String(key);\n }\n\n return key;\n}\n\nfunction getCallback() {\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n\nvar DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\nvar supportsBlobs = void 0;\nvar dbContexts = {};\nvar toString = Object.prototype.toString;\n\n// Transaction Modes\nvar READ_ONLY = 'readonly';\nvar READ_WRITE = 'readwrite';\n\n// Transform a binary string to an array buffer, because otherwise\n// weird stuff happens when you try to work with the binary string directly.\n// It is known.\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction _binStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\n// Code borrowed from PouchDB. See:\n// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js\n//\nfunction _checkBlobSupportWithoutCaching(idb) {\n return new Promise$1(function (resolve) {\n var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);\n var blob = createBlob(['']);\n txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n\n txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n\n txn.oncomplete = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);\n };\n })[\"catch\"](function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction _checkBlobSupport(idb) {\n if (typeof supportsBlobs === 'boolean') {\n return Promise$1.resolve(supportsBlobs);\n }\n return _checkBlobSupportWithoutCaching(idb).then(function (value) {\n supportsBlobs = value;\n return supportsBlobs;\n });\n}\n\nfunction _deferReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Create a deferred object representing the current database operation.\n var deferredOperation = {};\n\n deferredOperation.promise = new Promise$1(function (resolve, reject) {\n deferredOperation.resolve = resolve;\n deferredOperation.reject = reject;\n });\n\n // Enqueue the deferred operation.\n dbContext.deferredOperations.push(deferredOperation);\n\n // Chain its promise to the database readiness.\n if (!dbContext.dbReady) {\n dbContext.dbReady = deferredOperation.promise;\n } else {\n dbContext.dbReady = dbContext.dbReady.then(function () {\n return deferredOperation.promise;\n });\n }\n}\n\nfunction _advanceReadiness(dbInfo) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Resolve its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.resolve();\n return deferredOperation.promise;\n }\n}\n\nfunction _rejectReadiness(dbInfo, err) {\n var dbContext = dbContexts[dbInfo.name];\n\n // Dequeue a deferred operation.\n var deferredOperation = dbContext.deferredOperations.pop();\n\n // Reject its promise (which is part of the database readiness\n // chain of promises).\n if (deferredOperation) {\n deferredOperation.reject(err);\n return deferredOperation.promise;\n }\n}\n\nfunction _getConnection(dbInfo, upgradeNeeded) {\n return new Promise$1(function (resolve, reject) {\n dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();\n\n if (dbInfo.db) {\n if (upgradeNeeded) {\n _deferReadiness(dbInfo);\n dbInfo.db.close();\n } else {\n return resolve(dbInfo.db);\n }\n }\n\n var dbArgs = [dbInfo.name];\n\n if (upgradeNeeded) {\n dbArgs.push(dbInfo.version);\n }\n\n var openreq = idb.open.apply(idb, dbArgs);\n\n if (upgradeNeeded) {\n openreq.onupgradeneeded = function (e) {\n var db = openreq.result;\n try {\n db.createObjectStore(dbInfo.storeName);\n if (e.oldVersion <= 1) {\n // Added when support for blob shims was added\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n }\n } catch (ex) {\n if (ex.name === 'ConstraintError') {\n console.warn('The database \"' + dbInfo.name + '\"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage \"' + dbInfo.storeName + '\" already exists.');\n } else {\n throw ex;\n }\n }\n };\n }\n\n openreq.onerror = function (e) {\n e.preventDefault();\n reject(openreq.error);\n };\n\n openreq.onsuccess = function () {\n var db = openreq.result;\n db.onversionchange = function (e) {\n // Triggered when the database is modified (e.g. adding an objectStore) or\n // deleted (even when initiated by other sessions in different tabs).\n // Closing the connection here prevents those operations from being blocked.\n // If the database is accessed again later by this instance, the connection\n // will be reopened or the database recreated as needed.\n e.target.close();\n };\n resolve(db);\n _advanceReadiness(dbInfo);\n };\n });\n}\n\nfunction _getOriginalConnection(dbInfo) {\n return _getConnection(dbInfo, false);\n}\n\nfunction _getUpgradedConnection(dbInfo) {\n return _getConnection(dbInfo, true);\n}\n\nfunction _isUpgradeNeeded(dbInfo, defaultVersion) {\n if (!dbInfo.db) {\n return true;\n }\n\n var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);\n var isDowngrade = dbInfo.version < dbInfo.db.version;\n var isUpgrade = dbInfo.version > dbInfo.db.version;\n\n if (isDowngrade) {\n // If the version is not the default one\n // then warn for impossible downgrade.\n if (dbInfo.version !== defaultVersion) {\n console.warn('The database \"' + dbInfo.name + '\"' + \" can't be downgraded from version \" + dbInfo.db.version + ' to version ' + dbInfo.version + '.');\n }\n // Align the versions to prevent errors.\n dbInfo.version = dbInfo.db.version;\n }\n\n if (isUpgrade || isNewStore) {\n // If the store is new then increment the version (if needed).\n // This will trigger an \"upgradeneeded\" event which is required\n // for creating a store.\n if (isNewStore) {\n var incVersion = dbInfo.db.version + 1;\n if (incVersion > dbInfo.version) {\n dbInfo.version = incVersion;\n }\n }\n\n return true;\n }\n\n return false;\n}\n\n// encode a blob for indexeddb engines that don't support blobs\nfunction _encodeBlob(blob) {\n return new Promise$1(function (resolve, reject) {\n var reader = new FileReader();\n reader.onerror = reject;\n reader.onloadend = function (e) {\n var base64 = btoa(e.target.result || '');\n resolve({\n __local_forage_encoded_blob: true,\n data: base64,\n type: blob.type\n });\n };\n reader.readAsBinaryString(blob);\n });\n}\n\n// decode an encoded blob\nfunction _decodeBlob(encodedBlob) {\n var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n return createBlob([arrayBuff], { type: encodedBlob.type });\n}\n\n// is this one of our fancy encoded blobs?\nfunction _isEncodedBlob(value) {\n return value && value.__local_forage_encoded_blob;\n}\n\n// Specialize the default `ready()` function by making it dependent\n// on the current database operations. Thus, the driver will be actually\n// ready when it's been initialized (default) *and* there are no pending\n// operations on the database (initiated by some other instances).\nfunction _fullyReady(callback) {\n var self = this;\n\n var promise = self._initReady().then(function () {\n var dbContext = dbContexts[self._dbInfo.name];\n\n if (dbContext && dbContext.dbReady) {\n return dbContext.dbReady;\n }\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n}\n\n// Try to establish a new db connection to replace the\n// current one which is broken (i.e. experiencing\n// InvalidStateError while creating a transaction).\nfunction _tryReconnect(dbInfo) {\n _deferReadiness(dbInfo);\n\n var dbContext = dbContexts[dbInfo.name];\n var forages = dbContext.forages;\n\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n if (forage._dbInfo.db) {\n forage._dbInfo.db.close();\n forage._dbInfo.db = null;\n }\n }\n dbInfo.db = null;\n\n return _getOriginalConnection(dbInfo).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n // store the latest db reference\n // in case the db was upgraded\n dbInfo.db = dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n })[\"catch\"](function (err) {\n _rejectReadiness(dbInfo, err);\n throw err;\n });\n}\n\n// FF doesn't like Promises (micro-tasks) and IDDB store operations,\n// so we have to do it with callbacks\nfunction createTransaction(dbInfo, mode, callback, retries) {\n if (retries === undefined) {\n retries = 1;\n }\n\n try {\n var tx = dbInfo.db.transaction(dbInfo.storeName, mode);\n callback(null, tx);\n } catch (err) {\n if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) {\n return Promise$1.resolve().then(function () {\n if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {\n // increase the db version, to create the new ObjectStore\n if (dbInfo.db) {\n dbInfo.version = dbInfo.db.version + 1;\n }\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n }).then(function () {\n return _tryReconnect(dbInfo).then(function () {\n createTransaction(dbInfo, mode, callback, retries - 1);\n });\n })[\"catch\"](callback);\n }\n\n callback(err);\n }\n}\n\nfunction createDbContext() {\n return {\n // Running localForages sharing a database.\n forages: [],\n // Shared database.\n db: null,\n // Database readiness (promise).\n dbReady: null,\n // Deferred operations on the database.\n deferredOperations: []\n };\n}\n\n// Open the IndexedDB database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n // Get the current context of the database;\n var dbContext = dbContexts[dbInfo.name];\n\n // ...or create a new context.\n if (!dbContext) {\n dbContext = createDbContext();\n // Register the new context in the global container.\n dbContexts[dbInfo.name] = dbContext;\n }\n\n // Register itself as a running localForage in the current context.\n dbContext.forages.push(self);\n\n // Replace the default `ready()` function with the specialized one.\n if (!self._initReady) {\n self._initReady = self.ready;\n self.ready = _fullyReady;\n }\n\n // Create an array of initialization states of the related localForages.\n var initPromises = [];\n\n function ignoreErrors() {\n // Don't handle errors here,\n // just makes sure related localForages aren't pending.\n return Promise$1.resolve();\n }\n\n for (var j = 0; j < dbContext.forages.length; j++) {\n var forage = dbContext.forages[j];\n if (forage !== self) {\n // Don't wait for itself...\n initPromises.push(forage._initReady()[\"catch\"](ignoreErrors));\n }\n }\n\n // Take a snapshot of the related localForages.\n var forages = dbContext.forages.slice(0);\n\n // Initialize the connection process only when\n // all the related localForages aren't pending.\n return Promise$1.all(initPromises).then(function () {\n dbInfo.db = dbContext.db;\n // Get the connection or open a new one without upgrade.\n return _getOriginalConnection(dbInfo);\n }).then(function (db) {\n dbInfo.db = db;\n if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) {\n // Reopen the database for upgrading.\n return _getUpgradedConnection(dbInfo);\n }\n return db;\n }).then(function (db) {\n dbInfo.db = dbContext.db = db;\n self._dbInfo = dbInfo;\n // Share the final connection amongst related localForages.\n for (var k = 0; k < forages.length; k++) {\n var forage = forages[k];\n if (forage !== self) {\n // Self is already up-to-date.\n forage._dbInfo.db = dbInfo.db;\n forage._dbInfo.version = dbInfo.version;\n }\n }\n });\n}\n\nfunction getItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.get(key);\n\n req.onsuccess = function () {\n var value = req.result;\n if (value === undefined) {\n value = null;\n }\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n resolve(value);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items stored in database.\nfunction iterate(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openCursor();\n var iterationNumber = 1;\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (cursor) {\n var value = cursor.value;\n if (_isEncodedBlob(value)) {\n value = _decodeBlob(value);\n }\n var result = iterator(value, cursor.key, iterationNumber++);\n\n // when the iterator callback returns any\n // (non-`undefined`) value, then we stop\n // the iteration immediately\n if (result !== void 0) {\n resolve(result);\n } else {\n cursor[\"continue\"]();\n }\n } else {\n resolve();\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n\nfunction setItem(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n var dbInfo;\n self.ready().then(function () {\n dbInfo = self._dbInfo;\n if (toString.call(value) === '[object Blob]') {\n return _checkBlobSupport(dbInfo.db).then(function (blobSupport) {\n if (blobSupport) {\n return value;\n }\n return _encodeBlob(value);\n });\n }\n return value;\n }).then(function (value) {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n\n // The reason we don't _save_ null is because IE 10 does\n // not support saving the `null` type in IndexedDB. How\n // ironic, given the bug below!\n // See: https://github.com/mozilla/localForage/issues/161\n if (value === null) {\n value = undefined;\n }\n\n var req = store.put(value, key);\n\n transaction.oncomplete = function () {\n // Cast to undefined so the value passed to\n // callback/promise is the same as what one would get out\n // of `getItem()` later. This leads to some weirdness\n // (setItem('foo', undefined) will return `null`), but\n // it's not my fault localStorage is our baseline and that\n // it's weird.\n if (value === undefined) {\n value = null;\n }\n\n resolve(value);\n };\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction removeItem(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n // We use a Grunt task to make this safe for IE and some\n // versions of Android (including those used by Cordova).\n // Normally IE won't like `.delete()` and will insist on\n // using `['delete']()`, but we have a build step that\n // fixes this for us now.\n var req = store[\"delete\"](key);\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onerror = function () {\n reject(req.error);\n };\n\n // The request will be also be aborted if we've exceeded our storage\n // space.\n transaction.onabort = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction clear(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.clear();\n\n transaction.oncomplete = function () {\n resolve();\n };\n\n transaction.onabort = transaction.onerror = function () {\n var err = req.error ? req.error : req.transaction.error;\n reject(err);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction length(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.count();\n\n req.onsuccess = function () {\n resolve(req.result);\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction key(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n if (n < 0) {\n resolve(null);\n\n return;\n }\n\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var advanced = false;\n var req = store.openKeyCursor();\n\n req.onsuccess = function () {\n var cursor = req.result;\n if (!cursor) {\n // this means there weren't enough keys\n resolve(null);\n\n return;\n }\n\n if (n === 0) {\n // We have the first key, return it if that's what they\n // wanted.\n resolve(cursor.key);\n } else {\n if (!advanced) {\n // Otherwise, ask the cursor to skip ahead n\n // records.\n advanced = true;\n cursor.advance(n);\n } else {\n // When we get here, we've got the nth key.\n resolve(cursor.key);\n }\n }\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) {\n if (err) {\n return reject(err);\n }\n\n try {\n var store = transaction.objectStore(self._dbInfo.storeName);\n var req = store.openKeyCursor();\n var keys = [];\n\n req.onsuccess = function () {\n var cursor = req.result;\n\n if (!cursor) {\n resolve(keys);\n return;\n }\n\n keys.push(cursor.key);\n cursor[\"continue\"]();\n };\n\n req.onerror = function () {\n reject(req.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db;\n\n var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) {\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n forages[i]._dbInfo.db = db;\n }\n return db;\n });\n\n if (!options.storeName) {\n promise = dbPromise.then(function (db) {\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n }\n\n var dropDBPromise = new Promise$1(function (resolve, reject) {\n var req = idb.deleteDatabase(options.name);\n\n req.onerror = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n reject(req.error);\n };\n\n req.onblocked = function () {\n // Closing all open connections in onversionchange handler should prevent this situation, but if\n // we do get here, it just means the request remains pending - eventually it will succeed or error\n console.warn('dropInstance blocked for database \"' + options.name + '\" until all open connections are closed');\n };\n\n req.onsuccess = function () {\n var db = req.result;\n if (db) {\n db.close();\n }\n resolve(db);\n };\n });\n\n return dropDBPromise.then(function (db) {\n dbContext.db = db;\n for (var i = 0; i < forages.length; i++) {\n var _forage = forages[i];\n _advanceReadiness(_forage._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n } else {\n promise = dbPromise.then(function (db) {\n if (!db.objectStoreNames.contains(options.storeName)) {\n return;\n }\n\n var newVersion = db.version + 1;\n\n _deferReadiness(options);\n\n var dbContext = dbContexts[options.name];\n var forages = dbContext.forages;\n\n db.close();\n for (var i = 0; i < forages.length; i++) {\n var forage = forages[i];\n forage._dbInfo.db = null;\n forage._dbInfo.version = newVersion;\n }\n\n var dropObjectPromise = new Promise$1(function (resolve, reject) {\n var req = idb.open(options.name, newVersion);\n\n req.onerror = function (err) {\n var db = req.result;\n db.close();\n reject(err);\n };\n\n req.onupgradeneeded = function () {\n var db = req.result;\n db.deleteObjectStore(options.storeName);\n };\n\n req.onsuccess = function () {\n var db = req.result;\n db.close();\n resolve(db);\n };\n });\n\n return dropObjectPromise.then(function (db) {\n dbContext.db = db;\n for (var j = 0; j < forages.length; j++) {\n var _forage2 = forages[j];\n _forage2._dbInfo.db = db;\n _advanceReadiness(_forage2._dbInfo);\n }\n })[\"catch\"](function (err) {\n (_rejectReadiness(options, err) || Promise$1.resolve())[\"catch\"](function () {});\n throw err;\n });\n });\n }\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar asyncStorage = {\n _driver: 'asyncStorage',\n _initStorage: _initStorage,\n _support: isIndexedDBValid(),\n iterate: iterate,\n getItem: getItem,\n setItem: setItem,\n removeItem: removeItem,\n clear: clear,\n length: length,\n key: key,\n keys: keys,\n dropInstance: dropInstance\n};\n\nfunction isWebSQLValid() {\n return typeof openDatabase === 'function';\n}\n\n// Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n// it to Base64, so this is how we store it to prevent very strange errors with less\n// verbose ways of binary <-> string data storage.\nvar BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nvar BLOB_TYPE_PREFIX = '~~local_forage_type~';\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\nvar SERIALIZED_MARKER = '__lfsc__:';\nvar SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n// OMG the serializations!\nvar TYPE_ARRAYBUFFER = 'arbf';\nvar TYPE_BLOB = 'blob';\nvar TYPE_INT8ARRAY = 'si08';\nvar TYPE_UINT8ARRAY = 'ui08';\nvar TYPE_UINT8CLAMPEDARRAY = 'uic8';\nvar TYPE_INT16ARRAY = 'si16';\nvar TYPE_INT32ARRAY = 'si32';\nvar TYPE_UINT16ARRAY = 'ur16';\nvar TYPE_UINT32ARRAY = 'ui32';\nvar TYPE_FLOAT32ARRAY = 'fl32';\nvar TYPE_FLOAT64ARRAY = 'fl64';\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;\n\nvar toString$1 = Object.prototype.toString;\n\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n var i;\n var p = 0;\n var encoded1, encoded2, encoded3, encoded4;\n\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]);\n encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]);\n encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]);\n\n /*jslint bitwise: true */\n bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n }\n return buffer;\n}\n\n// Converts a buffer to a string to store, serialized, in the backend\n// storage library.\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n var i;\n\n for (i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += BASE_CHARS[bytes[i] >> 2];\n base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];\n base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];\n base64String += BASE_CHARS[bytes[i + 2] & 63];\n }\n\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n } else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n\n return base64String;\n}\n\n// Serialize a value, afterwards executing a callback (which usually\n// instructs the `setItem()` callback/promise to be executed). This is how\n// we store binary data with localStorage.\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString$1.call(value);\n }\n\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n //\n // TODO: See why those tests fail and use a better solution.\n if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer;\n var marker = SERIALIZED_MARKER;\n\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += TYPE_ARRAYBUFFER;\n } else {\n buffer = value.buffer;\n\n if (valueType === '[object Int8Array]') {\n marker += TYPE_INT8ARRAY;\n } else if (valueType === '[object Uint8Array]') {\n marker += TYPE_UINT8ARRAY;\n } else if (valueType === '[object Uint8ClampedArray]') {\n marker += TYPE_UINT8CLAMPEDARRAY;\n } else if (valueType === '[object Int16Array]') {\n marker += TYPE_INT16ARRAY;\n } else if (valueType === '[object Uint16Array]') {\n marker += TYPE_UINT16ARRAY;\n } else if (valueType === '[object Int32Array]') {\n marker += TYPE_INT32ARRAY;\n } else if (valueType === '[object Uint32Array]') {\n marker += TYPE_UINT32ARRAY;\n } else if (valueType === '[object Float32Array]') {\n marker += TYPE_FLOAT32ARRAY;\n } else if (valueType === '[object Float64Array]') {\n marker += TYPE_FLOAT64ARRAY;\n } else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n\n callback(marker + bufferToString(buffer));\n } else if (valueType === '[object Blob]') {\n // Conver the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result);\n\n callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n };\n\n fileReader.readAsArrayBuffer(value);\n } else {\n try {\n callback(JSON.stringify(value));\n } catch (e) {\n console.error(\"Couldn't convert value into a JSON string: \", value);\n\n callback(null, e);\n }\n }\n}\n\n// Deserialize data we've inserted into a value column/field. We place\n// special markers into our strings to mark them as encoded; this isn't\n// as nice as a meta field, but it's the only sane thing we can do whilst\n// keeping localStorage support intact.\n//\n// Oftentimes this will just deserialize JSON content, but if we have a\n// special marker (SERIALIZED_MARKER, defined above), we will extract\n// some kind of arraybuffer/binary data/typed array out of the string.\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n return JSON.parse(value);\n }\n\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case TYPE_ARRAYBUFFER:\n return buffer;\n case TYPE_BLOB:\n return createBlob([buffer], { type: blobType });\n case TYPE_INT8ARRAY:\n return new Int8Array(buffer);\n case TYPE_UINT8ARRAY:\n return new Uint8Array(buffer);\n case TYPE_UINT8CLAMPEDARRAY:\n return new Uint8ClampedArray(buffer);\n case TYPE_INT16ARRAY:\n return new Int16Array(buffer);\n case TYPE_UINT16ARRAY:\n return new Uint16Array(buffer);\n case TYPE_INT32ARRAY:\n return new Int32Array(buffer);\n case TYPE_UINT32ARRAY:\n return new Uint32Array(buffer);\n case TYPE_FLOAT32ARRAY:\n return new Float32Array(buffer);\n case TYPE_FLOAT64ARRAY:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nvar localforageSerializer = {\n serialize: serialize,\n deserialize: deserialize,\n stringToBuffer: stringToBuffer,\n bufferToString: bufferToString\n};\n\n/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n\nfunction createDbTable(t, dbInfo, callback, errorCallback) {\n t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback);\n}\n\n// Open the WebSQL database (automatically creates one if one didn't\n// previously exist), using any options set in the config.\nfunction _initStorage$1(options) {\n var self = this;\n var dbInfo = {\n db: null\n };\n\n if (options) {\n for (var i in options) {\n dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i];\n }\n }\n\n var dbInfoPromise = new Promise$1(function (resolve, reject) {\n // Open the database; the openDatabase API will automatically\n // create it for us if it doesn't exist.\n try {\n dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);\n } catch (e) {\n return reject(e);\n }\n\n // Create our key/value table if it doesn't exist.\n dbInfo.db.transaction(function (t) {\n createDbTable(t, dbInfo, function () {\n self._dbInfo = dbInfo;\n resolve();\n }, function (t, error) {\n reject(error);\n });\n }, reject);\n });\n\n dbInfo.serializer = localforageSerializer;\n return dbInfoPromise;\n}\n\nfunction tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) {\n t.executeSql(sqlStatement, args, callback, function (t, error) {\n if (error.code === error.SYNTAX_ERR) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name = ?\", [dbInfo.storeName], function (t, results) {\n if (!results.rows.length) {\n // if the table is missing (was deleted)\n // re-create it table and retry\n createDbTable(t, dbInfo, function () {\n t.executeSql(sqlStatement, args, callback, errorCallback);\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n } else {\n errorCallback(t, error);\n }\n }, errorCallback);\n}\n\nfunction getItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).value : null;\n\n // Check to see if this is serialized content we need to\n // unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction iterate$1(iterator, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) {\n var rows = results.rows;\n var length = rows.length;\n\n for (var i = 0; i < length; i++) {\n var item = rows.item(i);\n var result = item.value;\n\n // Check to see if this is serialized content\n // we need to unpack.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n result = iterator(result, item.key, i + 1);\n\n // void(0) prevents problems with redefinition\n // of `undefined`.\n if (result !== void 0) {\n resolve(result);\n return;\n }\n }\n\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction _setItem(key, value, callback, retriesLeft) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n // The localStorage API doesn't return undefined values in an\n // \"expected\" way, so undefined is always cast to null in all\n // drivers. See: https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () {\n resolve(originalValue);\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n // The transaction failed; check\n // to see if it's a quota error.\n if (sqlError.code === sqlError.QUOTA_ERR) {\n // We reject the callback outright for now, but\n // it's worth trying to re-run the transaction.\n // Even if the user accepts the prompt to use\n // more storage on Safari, this error will\n // be called.\n //\n // Try to re-run the transaction.\n if (retriesLeft > 0) {\n resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1]));\n return;\n }\n reject(sqlError);\n }\n });\n }\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction setItem$1(key, value, callback) {\n return _setItem.apply(this, [key, value, callback, 1]);\n}\n\nfunction removeItem$1(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Deletes every item in the table.\n// TODO: Find out if this resets the AUTO_INCREMENT number.\nfunction clear$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Does a simple `COUNT(key)` to get the number of items stored in\n// localForage.\nfunction length$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n // Ahhh, SQL makes this one soooooo easy.\n tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {\n var result = results.rows.item(0).c;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Return the key located at key index X; essentially gets the key from a\n// `WHERE id = ?`. This is the most efficient way I can think to implement\n// this rarely-used (in my experience) part of the API, but it can seem\n// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n// the ID of each key will change every time it's updated. Perhaps a stored\n// procedure for the `setItem()` SQL would solve this problem?\n// TODO: Don't change ID on `setItem()`.\nfunction key$1(n, callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {\n var result = results.rows.length ? results.rows.item(0).key : null;\n resolve(result);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$1(callback) {\n var self = this;\n\n var promise = new Promise$1(function (resolve, reject) {\n self.ready().then(function () {\n var dbInfo = self._dbInfo;\n dbInfo.db.transaction(function (t) {\n tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) {\n var keys = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n keys.push(results.rows.item(i).key);\n }\n\n resolve(keys);\n }, function (t, error) {\n reject(error);\n });\n });\n })[\"catch\"](reject);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// https://www.w3.org/TR/webdatabase/#databases\n// > There is no way to enumerate or delete the databases available for an origin from this API.\nfunction getAllStoreNames(db) {\n return new Promise$1(function (resolve, reject) {\n db.transaction(function (t) {\n t.executeSql('SELECT name FROM sqlite_master ' + \"WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\", [], function (t, results) {\n var storeNames = [];\n\n for (var i = 0; i < results.rows.length; i++) {\n storeNames.push(results.rows.item(i).name);\n }\n\n resolve({\n db: db,\n storeNames: storeNames\n });\n }, function (t, error) {\n reject(error);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n}\n\nfunction dropInstance$1(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n var currentConfig = this.config();\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n var db;\n if (options.name === currentConfig.name) {\n // use the db reference of the current instance\n db = self._dbInfo.db;\n } else {\n db = openDatabase(options.name, '', '', 0);\n }\n\n if (!options.storeName) {\n // drop all database tables\n resolve(getAllStoreNames(db));\n } else {\n resolve({\n db: db,\n storeNames: [options.storeName]\n });\n }\n }).then(function (operationInfo) {\n return new Promise$1(function (resolve, reject) {\n operationInfo.db.transaction(function (t) {\n function dropTable(storeName) {\n return new Promise$1(function (resolve, reject) {\n t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () {\n resolve();\n }, function (t, error) {\n reject(error);\n });\n });\n }\n\n var operations = [];\n for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) {\n operations.push(dropTable(operationInfo.storeNames[i]));\n }\n\n Promise$1.all(operations).then(function () {\n resolve();\n })[\"catch\"](function (e) {\n reject(e);\n });\n }, function (sqlError) {\n reject(sqlError);\n });\n });\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar webSQLStorage = {\n _driver: 'webSQLStorage',\n _initStorage: _initStorage$1,\n _support: isWebSQLValid(),\n iterate: iterate$1,\n getItem: getItem$1,\n setItem: setItem$1,\n removeItem: removeItem$1,\n clear: clear$1,\n length: length$1,\n key: key$1,\n keys: keys$1,\n dropInstance: dropInstance$1\n};\n\nfunction isLocalStorageValid() {\n try {\n return typeof localStorage !== 'undefined' && 'setItem' in localStorage &&\n // in IE8 typeof localStorage.setItem === 'object'\n !!localStorage.setItem;\n } catch (e) {\n return false;\n }\n}\n\nfunction _getKeyPrefix(options, defaultConfig) {\n var keyPrefix = options.name + '/';\n\n if (options.storeName !== defaultConfig.storeName) {\n keyPrefix += options.storeName + '/';\n }\n return keyPrefix;\n}\n\n// Check if localStorage throws when saving an item\nfunction checkIfLocalStorageThrows() {\n var localStorageTestKey = '_localforage_support_test';\n\n try {\n localStorage.setItem(localStorageTestKey, true);\n localStorage.removeItem(localStorageTestKey);\n\n return false;\n } catch (e) {\n return true;\n }\n}\n\n// Check if localStorage is usable and allows to save an item\n// This method checks if localStorage is usable in Safari Private Browsing\n// mode, or in any other case where the available quota for localStorage\n// is 0 and there wasn't any saved items yet.\nfunction _isLocalStorageUsable() {\n return !checkIfLocalStorageThrows() || localStorage.length > 0;\n}\n\n// Config the localStorage backend, using options set in the config.\nfunction _initStorage$2(options) {\n var self = this;\n var dbInfo = {};\n if (options) {\n for (var i in options) {\n dbInfo[i] = options[i];\n }\n }\n\n dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig);\n\n if (!_isLocalStorageUsable()) {\n return Promise$1.reject();\n }\n\n self._dbInfo = dbInfo;\n dbInfo.serializer = localforageSerializer;\n\n return Promise$1.resolve();\n}\n\n// Remove all keys from the datastore, effectively destroying all data in\n// the app's key/value store!\nfunction clear$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var keyPrefix = self._dbInfo.keyPrefix;\n\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Retrieve an item from the store. Unlike the original async_storage\n// library in Gaia, we don't modify return values at all. If a key's value\n// is `undefined`, we pass that value to the callback function.\nfunction getItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the key\n // is likely undefined and we'll pass it straight to the\n // callback.\n if (result) {\n result = dbInfo.serializer.deserialize(result);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Iterate over all items in the store.\nfunction iterate$2(iterator, callback) {\n var self = this;\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var keyPrefix = dbInfo.keyPrefix;\n var keyPrefixLength = keyPrefix.length;\n var length = localStorage.length;\n\n // We use a dedicated iterator instead of the `i` variable below\n // so other keys we fetch in localStorage aren't counted in\n // the `iterationNumber` argument passed to the `iterate()`\n // callback.\n //\n // See: github.com/mozilla/localForage/pull/435#discussion_r38061530\n var iterationNumber = 1;\n\n for (var i = 0; i < length; i++) {\n var key = localStorage.key(i);\n if (key.indexOf(keyPrefix) !== 0) {\n continue;\n }\n var value = localStorage.getItem(key);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, key.substring(keyPrefixLength), iterationNumber++);\n\n if (value !== void 0) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Same as localStorage's key() method, except takes a callback.\nfunction key$2(n, callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var result;\n try {\n result = localStorage.key(n);\n } catch (error) {\n result = null;\n }\n\n // Remove the prefix from the key, if a key is found.\n if (result) {\n result = result.substring(dbInfo.keyPrefix.length);\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction keys$2(callback) {\n var self = this;\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n var length = localStorage.length;\n var keys = [];\n\n for (var i = 0; i < length; i++) {\n var itemKey = localStorage.key(i);\n if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {\n keys.push(itemKey.substring(dbInfo.keyPrefix.length));\n }\n }\n\n return keys;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Supply the number of keys in the datastore to the callback function.\nfunction length$2(callback) {\n var self = this;\n var promise = self.keys().then(function (keys) {\n return keys.length;\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Remove an item from the store, nice and simple.\nfunction removeItem$2(key, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n var dbInfo = self._dbInfo;\n localStorage.removeItem(dbInfo.keyPrefix + key);\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\n// Set a key's value and run an optional callback once the value is set.\n// Unlike Gaia's implementation, the callback function is passed the value,\n// in case you want to operate on that value only after you're sure it\n// saved, or something like that.\nfunction setItem$2(key, value, callback) {\n var self = this;\n\n key = normalizeKey(key);\n\n var promise = self.ready().then(function () {\n // Convert undefined values to null.\n // https://github.com/mozilla/localForage/pull/42\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n var originalValue = value;\n\n return new Promise$1(function (resolve, reject) {\n var dbInfo = self._dbInfo;\n dbInfo.serializer.serialize(value, function (value, error) {\n if (error) {\n reject(error);\n } else {\n try {\n localStorage.setItem(dbInfo.keyPrefix + key, value);\n resolve(originalValue);\n } catch (e) {\n // localStorage capacity exceeded.\n // TODO: Make this a specific error/event.\n if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n reject(e);\n }\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n return promise;\n}\n\nfunction dropInstance$2(options, callback) {\n callback = getCallback.apply(this, arguments);\n\n options = typeof options !== 'function' && options || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n\n var self = this;\n var promise;\n if (!options.name) {\n promise = Promise$1.reject('Invalid arguments');\n } else {\n promise = new Promise$1(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + '/');\n } else {\n resolve(_getKeyPrefix(options, self._defaultConfig));\n }\n }).then(function (keyPrefix) {\n for (var i = localStorage.length - 1; i >= 0; i--) {\n var key = localStorage.key(i);\n\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key);\n }\n }\n });\n }\n\n executeCallback(promise, callback);\n return promise;\n}\n\nvar localStorageWrapper = {\n _driver: 'localStorageWrapper',\n _initStorage: _initStorage$2,\n _support: isLocalStorageValid(),\n iterate: iterate$2,\n getItem: getItem$2,\n setItem: setItem$2,\n removeItem: removeItem$2,\n clear: clear$2,\n length: length$2,\n key: key$2,\n keys: keys$2,\n dropInstance: dropInstance$2\n};\n\nvar sameValue = function sameValue(x, y) {\n return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n};\n\nvar includes = function includes(array, searchElement) {\n var len = array.length;\n var i = 0;\n while (i < len) {\n if (sameValue(array[i], searchElement)) {\n return true;\n }\n i++;\n }\n\n return false;\n};\n\nvar isArray = Array.isArray || function (arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n};\n\n// Drivers are stored here when `defineDriver()` is called.\n// They are shared across all instances of localForage.\nvar DefinedDrivers = {};\n\nvar DriverSupport = {};\n\nvar DefaultDrivers = {\n INDEXEDDB: asyncStorage,\n WEBSQL: webSQLStorage,\n LOCALSTORAGE: localStorageWrapper\n};\n\nvar DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];\n\nvar OptionalDriverMethods = ['dropInstance'];\n\nvar LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods);\n\nvar DefaultConfig = {\n description: '',\n driver: DefaultDriverOrder.slice(),\n name: 'localforage',\n // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n // we can use without a prompt.\n size: 4980736,\n storeName: 'keyvaluepairs',\n version: 1.0\n};\n\nfunction callWhenReady(localForageInstance, libraryMethod) {\n localForageInstance[libraryMethod] = function () {\n var _args = arguments;\n return localForageInstance.ready().then(function () {\n return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n });\n };\n}\n\nfunction extend() {\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n\n if (arg) {\n for (var _key in arg) {\n if (arg.hasOwnProperty(_key)) {\n if (isArray(arg[_key])) {\n arguments[0][_key] = arg[_key].slice();\n } else {\n arguments[0][_key] = arg[_key];\n }\n }\n }\n }\n }\n\n return arguments[0];\n}\n\nvar LocalForage = function () {\n function LocalForage(options) {\n _classCallCheck(this, LocalForage);\n\n for (var driverTypeKey in DefaultDrivers) {\n if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {\n var driver = DefaultDrivers[driverTypeKey];\n var driverName = driver._driver;\n this[driverTypeKey] = driverName;\n\n if (!DefinedDrivers[driverName]) {\n // we don't need to wait for the promise,\n // since the default drivers can be defined\n // in a blocking manner\n this.defineDriver(driver);\n }\n }\n }\n\n this._defaultConfig = extend({}, DefaultConfig);\n this._config = extend({}, this._defaultConfig, options);\n this._driverSet = null;\n this._initDriver = null;\n this._ready = false;\n this._dbInfo = null;\n\n this._wrapLibraryMethodsWithReady();\n this.setDriver(this._config.driver)[\"catch\"](function () {});\n }\n\n // Set any config values for localForage; can be called anytime before\n // the first API call (e.g. `getItem`, `setItem`).\n // We loop through options so we don't overwrite existing config\n // values.\n\n\n LocalForage.prototype.config = function config(options) {\n // If the options argument is an object, we use it to set values.\n // Otherwise, we return either a specified config value or all\n // config values.\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {\n // If localforage is ready and fully initialized, we can't set\n // any new configuration values. Instead, we return an error.\n if (this._ready) {\n return new Error(\"Can't call config() after localforage \" + 'has been used.');\n }\n\n for (var i in options) {\n if (i === 'storeName') {\n options[i] = options[i].replace(/\\W/g, '_');\n }\n\n if (i === 'version' && typeof options[i] !== 'number') {\n return new Error('Database version must be a number.');\n }\n\n this._config[i] = options[i];\n }\n\n // after all config options are set and\n // the driver option is used, try setting it\n if ('driver' in options && options.driver) {\n return this.setDriver(this._config.driver);\n }\n\n return true;\n } else if (typeof options === 'string') {\n return this._config[options];\n } else {\n return this._config;\n }\n };\n\n // Used to define a custom driver, shared across all instances of\n // localForage.\n\n\n LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {\n var promise = new Promise$1(function (resolve, reject) {\n try {\n var driverName = driverObject._driver;\n var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver');\n\n // A driver name should be defined and not overlap with the\n // library-defined, default drivers.\n if (!driverObject._driver) {\n reject(complianceError);\n return;\n }\n\n var driverMethods = LibraryMethods.concat('_initStorage');\n for (var i = 0, len = driverMethods.length; i < len; i++) {\n var driverMethodName = driverMethods[i];\n\n // when the property is there,\n // it should be a method even when optional\n var isRequired = !includes(OptionalDriverMethods, driverMethodName);\n if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') {\n reject(complianceError);\n return;\n }\n }\n\n var configureMissingMethods = function configureMissingMethods() {\n var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) {\n return function () {\n var error = new Error('Method ' + methodName + ' is not implemented by the current driver');\n var promise = Promise$1.reject(error);\n executeCallback(promise, arguments[arguments.length - 1]);\n return promise;\n };\n };\n\n for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {\n var optionalDriverMethod = OptionalDriverMethods[_i];\n if (!driverObject[optionalDriverMethod]) {\n driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);\n }\n }\n };\n\n configureMissingMethods();\n\n var setDriverSupport = function setDriverSupport(support) {\n if (DefinedDrivers[driverName]) {\n console.info('Redefining LocalForage driver: ' + driverName);\n }\n DefinedDrivers[driverName] = driverObject;\n DriverSupport[driverName] = support;\n // don't use a then, so that we can define\n // drivers that have simple _support methods\n // in a blocking manner\n resolve();\n };\n\n if ('_support' in driverObject) {\n if (driverObject._support && typeof driverObject._support === 'function') {\n driverObject._support().then(setDriverSupport, reject);\n } else {\n setDriverSupport(!!driverObject._support);\n }\n } else {\n setDriverSupport(true);\n }\n } catch (e) {\n reject(e);\n }\n });\n\n executeTwoCallbacks(promise, callback, errorCallback);\n return promise;\n };\n\n LocalForage.prototype.driver = function driver() {\n return this._driver || null;\n };\n\n LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {\n var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.'));\n\n executeTwoCallbacks(getDriverPromise, callback, errorCallback);\n return getDriverPromise;\n };\n\n LocalForage.prototype.getSerializer = function getSerializer(callback) {\n var serializerPromise = Promise$1.resolve(localforageSerializer);\n executeTwoCallbacks(serializerPromise, callback);\n return serializerPromise;\n };\n\n LocalForage.prototype.ready = function ready(callback) {\n var self = this;\n\n var promise = self._driverSet.then(function () {\n if (self._ready === null) {\n self._ready = self._initDriver();\n }\n\n return self._ready;\n });\n\n executeTwoCallbacks(promise, callback, callback);\n return promise;\n };\n\n LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {\n var self = this;\n\n if (!isArray(drivers)) {\n drivers = [drivers];\n }\n\n var supportedDrivers = this._getSupportedDrivers(drivers);\n\n function setDriverToConfig() {\n self._config.driver = self.driver();\n }\n\n function extendSelfWithDriver(driver) {\n self._extend(driver);\n setDriverToConfig();\n\n self._ready = self._initStorage(self._config);\n return self._ready;\n }\n\n function initDriver(supportedDrivers) {\n return function () {\n var currentDriverIndex = 0;\n\n function driverPromiseLoop() {\n while (currentDriverIndex < supportedDrivers.length) {\n var driverName = supportedDrivers[currentDriverIndex];\n currentDriverIndex++;\n\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(extendSelfWithDriver)[\"catch\"](driverPromiseLoop);\n }\n\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n }\n\n return driverPromiseLoop();\n };\n }\n\n // There might be a driver initialization in progress\n // so wait for it to finish in order to avoid a possible\n // race condition to set _dbInfo\n var oldDriverSetDone = this._driverSet !== null ? this._driverSet[\"catch\"](function () {\n return Promise$1.resolve();\n }) : Promise$1.resolve();\n\n this._driverSet = oldDriverSetDone.then(function () {\n var driverName = supportedDrivers[0];\n self._dbInfo = null;\n self._ready = null;\n\n return self.getDriver(driverName).then(function (driver) {\n self._driver = driver._driver;\n setDriverToConfig();\n self._wrapLibraryMethodsWithReady();\n self._initDriver = initDriver(supportedDrivers);\n });\n })[\"catch\"](function () {\n setDriverToConfig();\n var error = new Error('No available storage method found.');\n self._driverSet = Promise$1.reject(error);\n return self._driverSet;\n });\n\n executeTwoCallbacks(this._driverSet, callback, errorCallback);\n return this._driverSet;\n };\n\n LocalForage.prototype.supports = function supports(driverName) {\n return !!DriverSupport[driverName];\n };\n\n LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) {\n extend(this, libraryMethodsAndProperties);\n };\n\n LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {\n var supportedDrivers = [];\n for (var i = 0, len = drivers.length; i < len; i++) {\n var driverName = drivers[i];\n if (this.supports(driverName)) {\n supportedDrivers.push(driverName);\n }\n }\n return supportedDrivers;\n };\n\n LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {\n // Add a stub for each driver API method that delays the call to the\n // corresponding driver method until localForage is ready. These stubs\n // will be replaced by the driver methods as soon as the driver is\n // loaded, so there is no performance impact.\n for (var i = 0, len = LibraryMethods.length; i < len; i++) {\n callWhenReady(this, LibraryMethods[i]);\n }\n };\n\n LocalForage.prototype.createInstance = function createInstance(options) {\n return new LocalForage(options);\n };\n\n return LocalForage;\n}();\n\n// The actual localForage object that we expose as a module or via a\n// global. It's extended by pulling in one of our other libraries.\n\n\nvar localforage_js = new LocalForage();\n\nmodule.exports = localforage_js;\n\n},{\"3\":3}]},{},[4])(4)\n});\n","export const _driver = 'localforage-driver-memory';\n","/*!\nMIT License\n\nCopyright (c) 2018 Arturas Molcanovas <a.molcanovas@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n*/\n\n\nimport { __values } from 'tslib';\n\n/**\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n * Abstracts constructing a Blob object, so it also works in older\n * browsers that don't support the native Blob constructor. (i.e.\n * old QtWebKit versions, at least).\n *\n * @param parts\n * @param properties\n */\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n }\n catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n //tslint:disable-next-line:variable-name\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder\n : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder\n : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder\n : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\nvar BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\nvar SERIALIZED_MARKER_LENGTH = \"__lfsc__:\" /* SERIALIZED_MARKER */.length;\nvar TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + \"arbf\" /* TYPE_ARRAYBUFFER */.length;\n//tslint:disable:no-magic-numbers no-bitwise prefer-switch no-unbound-method\nvar toString = Object.prototype.toString;\nfunction stringToBuffer(serializedString) {\n // Fill the string into a ArrayBuffer.\n var bufferLength = serializedString.length * 0.75;\n var len = serializedString.length;\n if (serializedString[serializedString.length - 1] === '=') {\n bufferLength--;\n if (serializedString[serializedString.length - 2] === '=') {\n bufferLength--;\n }\n }\n var buffer = new ArrayBuffer(bufferLength);\n var bytes = new Uint8Array(buffer);\n for (var i = 0, p = 0; i < len; i += 4) {\n var encoded1 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i]);\n var encoded2 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 1]);\n var encoded3 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 2]);\n var encoded4 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */.indexOf(serializedString[i + 3]);\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return buffer;\n}\n/**\n * Converts a buffer to a string to store, serialized, in the backend\n * storage library.\n */\nfunction bufferToString(buffer) {\n // base64-arraybuffer\n var bytes = new Uint8Array(buffer);\n var base64String = '';\n for (var i = 0; i < bytes.length; i += 3) {\n /*jslint bitwise: true */\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i] >> 2];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64String +=\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64String += \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" /* BASE_CHARS */[bytes[i + 2] & 63];\n }\n if (bytes.length % 3 === 2) {\n base64String = base64String.substring(0, base64String.length - 1) + '=';\n }\n else if (bytes.length % 3 === 1) {\n base64String = base64String.substring(0, base64String.length - 2) + '==';\n }\n return base64String;\n}\n/**\n * Serialize a value, afterwards executing a callback (which usually\n * instructs the `setItem()` callback/promise to be executed). This is how\n * we store binary data with localStorage.\n * @param value\n * @param callback\n */\nfunction serialize(value, callback) {\n var valueType = '';\n if (value) {\n valueType = toString.call(value);\n }\n // Cannot use `value instanceof ArrayBuffer` or such here, as these\n // checks fail when running the tests using casper.js...\n if (value && (valueType === '[object ArrayBuffer]' ||\n (value.buffer && toString.call(value.buffer) === '[object ArrayBuffer]'))) {\n // Convert binary arrays to a string and prefix the string with\n // a special marker.\n var buffer = void 0;\n var marker = \"__lfsc__:\" /* SERIALIZED_MARKER */;\n if (value instanceof ArrayBuffer) {\n buffer = value;\n marker += \"arbf\" /* TYPE_ARRAYBUFFER */;\n }\n else {\n buffer = value.buffer;\n if (valueType === '[object Int8Array]') {\n marker += \"si08\" /* TYPE_INT8ARRAY */;\n }\n else if (valueType === '[object Uint8Array]') {\n marker += \"ui08\" /* TYPE_UINT8ARRAY */;\n }\n else if (valueType === '[object Uint8ClampedArray]') {\n marker += \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */;\n }\n else if (valueType === '[object Int16Array]') {\n marker += \"si16\" /* TYPE_INT16ARRAY */;\n }\n else if (valueType === '[object Uint16Array]') {\n marker += \"ur16\" /* TYPE_UINT16ARRAY */;\n }\n else if (valueType === '[object Int32Array]') {\n marker += \"si32\" /* TYPE_INT32ARRAY */;\n }\n else if (valueType === '[object Uint32Array]') {\n marker += \"ui32\" /* TYPE_UINT32ARRAY */;\n }\n else if (valueType === '[object Float32Array]') {\n marker += \"fl32\" /* TYPE_FLOAT32ARRAY */;\n }\n else if (valueType === '[object Float64Array]') {\n marker += \"fl64\" /* TYPE_FLOAT64ARRAY */;\n }\n else {\n callback(new Error('Failed to get type for BinaryArray'));\n }\n }\n callback(marker + bufferToString(buffer));\n }\n else if (valueType === '[object Blob]') {\n // Convert the blob to a binaryArray and then to a string.\n var fileReader = new FileReader();\n fileReader.onload = function () {\n // Backwards-compatible prefix for the blob type.\n //tslint:disable-next-line:restrict-plus-operands\n var str = \"~~local_forage_type~\" /* BLOB_TYPE_PREFIX */ + value.type + \"~\" + bufferToString(this.result);\n callback(\"__lfsc__:\" /* SERIALIZED_MARKER */ + \"blob\" /* TYPE_BLOB */ + str);\n };\n fileReader.readAsArrayBuffer(value);\n }\n else {\n try {\n callback(JSON.stringify(value));\n }\n catch (e) {\n console.error('Couldn\\'t convert value into a JSON string: ', value);\n callback(null, e);\n }\n }\n}\n/**\n * Deserialize data we've inserted into a value column/field. We place\n * special markers into our strings to mark them as encoded; this isn't\n * as nice as a meta field, but it's the only sane thing we can do whilst\n * keeping localStorage support intact.\n *\n * Oftentimes this will just deserialize JSON content, but if we have a\n * special marker (SERIALIZED_MARKER, defined above), we will extract\n * some kind of arraybuffer/binary data/typed array out of the string.\n * @param value\n */\nfunction deserialize(value) {\n // If we haven't marked this string as being specially serialized (i.e.\n // something other than serialized JSON), we can just return it and be\n // done with it.\n if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== \"__lfsc__:\" /* SERIALIZED_MARKER */) {\n return JSON.parse(value);\n }\n // The following code deals with deserializing some kind of Blob or\n // TypedArray. First we separate out the type of data we're dealing\n // with from the data itself.\n var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);\n var blobType;\n // Backwards-compatible blob type serialization strategy.\n // DBs created with older versions of localForage will simply not have the blob type.\n if (type === \"blob\" /* TYPE_BLOB */ && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n blobType = matcher[1];\n serializedString = serializedString.substring(matcher[0].length);\n }\n var buffer = stringToBuffer(serializedString);\n // Return the right type based on the code/type set during\n // serialization.\n switch (type) {\n case \"arbf\" /* TYPE_ARRAYBUFFER */:\n return buffer;\n case \"blob\" /* TYPE_BLOB */:\n return createBlob([buffer], { type: blobType });\n case \"si08\" /* TYPE_INT8ARRAY */:\n return new Int8Array(buffer);\n case \"ui08\" /* TYPE_UINT8ARRAY */:\n return new Uint8Array(buffer);\n case \"uic8\" /* TYPE_UINT8CLAMPEDARRAY */:\n return new Uint8ClampedArray(buffer);\n case \"si16\" /* TYPE_INT16ARRAY */:\n return new Int16Array(buffer);\n case \"ur16\" /* TYPE_UINT16ARRAY */:\n return new Uint16Array(buffer);\n case \"si32\" /* TYPE_INT32ARRAY */:\n return new Int32Array(buffer);\n case \"ui32\" /* TYPE_UINT32ARRAY */:\n return new Uint32Array(buffer);\n case \"fl32\" /* TYPE_FLOAT32ARRAY */:\n return new Float32Array(buffer);\n case \"fl64\" /* TYPE_FLOAT64ARRAY */:\n return new Float64Array(buffer);\n default:\n throw new Error('Unkown type: ' + type);\n }\n}\n\nfunction clone(obj) {\n var e_1, _a;\n if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj) {\n return obj;\n }\n var temp = obj instanceof Date ? new Date(obj) : (obj.constructor());\n try {\n for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n obj['isActiveClone'] = null;\n temp[key] = clone(obj[key]);\n delete obj['isActiveClone'];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return temp;\n}\n\nfunction getKeyPrefix(options, defaultConfig) {\n return (options.name || defaultConfig.name) + \"/\" + (options.storeName || defaultConfig.storeName) + \"/\";\n}\n\nfunction executeCallback(promise, callback) {\n if (callback) {\n promise.then(function (result) {\n callback(null, result);\n }, function (error) {\n callback(error);\n });\n }\n}\n\nfunction getCallback() {\n var _args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n _args[_i] = arguments[_i];\n }\n if (arguments.length && typeof arguments[arguments.length - 1] === 'function') {\n return arguments[arguments.length - 1];\n }\n}\n\n//tslint:disable-next-line:no-ignored-initial-value\nfunction dropInstanceCommon(options, callback) {\n var _this = this;\n callback = getCallback.apply(this, arguments);\n options = (typeof options !== 'function' && options) || {};\n if (!options.name) {\n var currentConfig = this.config();\n options.name = options.name || currentConfig.name;\n options.storeName = options.storeName || currentConfig.storeName;\n }\n var promise;\n if (!options.name) {\n promise = Promise.reject('Invalid arguments');\n }\n else {\n promise = new Promise(function (resolve) {\n if (!options.storeName) {\n resolve(options.name + \"/\");\n }\n else {\n resolve(getKeyPrefix(options, _this._defaultConfig));\n }\n });\n }\n return { promise: promise, callback: callback };\n}\n\nfunction normaliseKey(key) {\n // Cast the key to a string, as that's all we can set as a key.\n if (typeof key !== 'string') {\n console.warn(key + \" used as a key, but it is not a string.\");\n key = String(key);\n }\n return key;\n}\n\nvar serialiser = {\n bufferToString: bufferToString,\n deserialize: deserialize,\n serialize: serialize,\n stringToBuffer: stringToBuffer\n};\n\nexport { serialiser, clone, getKeyPrefix, executeCallback, getCallback, dropInstanceCommon, normaliseKey };\n//# sourceMappingURL=fesm5.js.map\n","const stores: { [store: string]: Store } = {};\n\n/** @internal */\nexport class Store {\n\n private data: { [k: string]: any } = {};\n\n private constructor(private readonly kp: string) {\n }\n\n public static resolve(kp: string): Store {\n if (!stores[kp]) {\n stores[kp] = new Store(kp);\n }\n\n return stores[kp];\n }\n\n public clear(): void {\n this.data = {};\n }\n\n public drop(): void {\n this.clear();\n delete stores[this.kp];\n }\n\n public get(key: string): any {\n return this.data[key];\n }\n\n public key(idx: number): string {\n return this.keys()[idx];\n }\n\n public keys(): string[] {\n return Object.keys(this.data);\n }\n\n public rm(k: string): void {\n delete this.data[k];\n }\n\n public set(k: string, v: any): void {\n this.data[k] = v;\n }\n}\n","import {clone, getKeyPrefix, LocalForageOptions, serialiser} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function _initStorage(this: any, options?: LocalForageOptions): any {\n const opts = options ? clone(options) : {};\n const kp = getKeyPrefix(opts, this._defaultConfig);\n const store = Store.resolve(kp);\n\n this._dbInfo = opts;\n this._dbInfo.serializer = serialiser;\n this._dbInfo.keyPrefix = kp;\n this._dbInfo.mStore = store;\n\n return Promise.resolve();\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function clear(this: any, callback?: (err: any) => void): Promise<void> {\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).clear();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {dropInstanceCommon, executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function dropInstance(this: any, _options: any, _cb?: any) {\n const {promise, callback} = dropInstanceCommon.apply(this, <any>arguments);\n\n const outPromise = (<Promise<string>>promise).then<void>(keyPrefix => {\n Store.resolve(keyPrefix).drop();\n });\n\n executeCallback(outPromise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function getItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n const result = (<Store>this._dbInfo.mStore).get(key$);\n\n // Deserialise if the result is not null or undefined\n return result == null ? null : this._dbInfo.serializer.deserialize(result); //tslint:disable-line:triple-equals\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function iterate(this: any, iterator: any, callback?: any) {\n const promise = this.ready().then(() => {\n const store = (<Store>this._dbInfo.mStore);\n const keys = store.keys();\n\n for (let i = 0; i < keys.length; i++) {\n let value = store.get(keys[i]);\n\n // If a result was found, parse it from the serialized\n // string into a JS object. If result isn't truthy, the\n // key is likely undefined and we'll pass it straight\n // to the iterator.\n if (value) {\n value = this._dbInfo.serializer.deserialize(value);\n }\n\n value = iterator(value, keys[i], i + 1);\n\n if (value !== undefined) {\n return value;\n }\n }\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function key(this: any, idx: number, callback?: any) {\n const promise = this.ready().then(() => {\n let result: any;\n try {\n result = (<Store>this._dbInfo.mStore).key(idx);\n\n if (result === undefined) {\n result = null;\n }\n } catch {\n result = null;\n }\n\n return result;\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function keys(this: any, callback?: any) {\n const promise = this.ready().then(() => {\n return (<Store>this._dbInfo.mStore).keys();\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback} from 'localforage-driver-commons';\n\nexport function length(this: any, callback?: any) {\n const promise = this.keys().then((keys$: any[]) => keys$.length);\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function removeItem(this: any, key$: string, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n (<Store>this._dbInfo.mStore).rm(key$);\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","import {executeCallback, normaliseKey} from 'localforage-driver-commons';\nimport {Store} from './Store';\n\nexport function setItem(this: any, key$: string, value: any, callback?: any) {\n key$ = normaliseKey(key$);\n\n const promise = this.ready().then(() => {\n if (value === undefined) {\n value = null;\n }\n\n // Save the original value to pass to the callback.\n const originalValue = value;\n\n return new Promise<any>((resolve, reject) => {\n this._dbInfo.serializer.serialize(value, (value$: string, error: Error) => {\n if (error) {\n reject(error);\n } else {\n try {\n (<Store>this._dbInfo.mStore).set(key$, value$);\n resolve(originalValue);\n } catch (e) {\n reject(e);\n }\n }\n });\n });\n });\n\n executeCallback(promise, callback);\n\n return promise;\n}\n","export const _support = true;\nexport {_driver} from './_driver';\nexport {_initStorage} from './_initStorage';\nexport {clear} from './clear';\nexport {dropInstance} from './dropInstance';\nexport {getItem} from './getItem';\nexport {iterate} from './iterate';\nexport {key} from './key';\nexport {keys} from './keys';\nexport {length} from './length';\nexport {removeItem} from './removeItem';\nexport {setItem} from './setItem';\n","/* istanbul ignore file */\n// Deprecate test API key in v7.0.0\n\nimport { SDKBase, createSDK, InstanceWithExtensions, MagicSDKExtensionsOption } from '@magic-sdk/provider';\nimport localForage from 'localforage';\nimport * as memoryDriver from 'localforage-driver-memory';\nimport { IframeController } from './iframe-controller';\n\nexport * from '@magic-sdk/commons';\n\nexport const Magic = createSDK(SDKBase, {\n platform: 'web',\n sdkName: 'magic-sdk',\n version: process.env.WEB_VERSION!,\n defaultEndpoint: 'https://auth.magic.link/',\n ViewController: IframeController,\n configureStorage: async () => {\n const lf = localForage.createInstance({\n name: 'MagicAuthLocalStorageDB',\n storeName: 'MagicAuthLocalStorage',\n });\n\n await lf.defineDriver(memoryDriver);\n await lf.setDriver([localForage.INDEXEDDB, localForage.LOCALSTORAGE, memoryDriver._driver]);\n\n return lf;\n },\n});\n\nexport type Magic<T extends MagicSDKExtensionsOption<any> = MagicSDKExtensionsOption> = InstanceWithExtensions<\n SDKBase,\n T\n>;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable no-unused-expressions */\n\nimport { ViewController, createDuplicateIframeWarning, createURL, createModalNotReadyError } from '@magic-sdk/provider';\n\n/**\n * Magic `<iframe>` overlay styles. These base styles enable `<iframe>` UI\n * to render above all other DOM content.\n */\nconst overlayStyles: Partial<CSSStyleDeclaration> = {\n display: 'block',\n visibility: 'hidden',\n position: 'fixed',\n top: '0',\n right: '0',\n width: '100%',\n height: '100%',\n borderRadius: '0',\n border: 'none',\n zIndex: '2147483647',\n};\n\n/**\n * Apply iframe styles to the given element.\n * @param elem - An element to apply styles using CSSOM.\n */\nfunction applyOverlayStyles(elem: HTMLElement) {\n for (const [cssProperty, value] of Object.entries(overlayStyles)) {\n /* eslint-disable-next-line no-param-reassign */\n (elem.style as any)[cssProperty as any] = value;\n }\n}\n\n/**\n * Checks if the given query params are associated with an active `<iframe>`\n * instance.\n *\n * @param parameters - The unique, encoded query parameters to check for\n * duplicates against.\n */\nfunction checkForSameSrcInstances(parameters: string) {\n const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.magic-iframe'));\n return Boolean(iframes.find((iframe) => iframe.src.includes(parameters)));\n}\n\n/**\n * View controller for the Magic `<iframe>` overlay.\n */\nexport class IframeController extends ViewController {\n private iframe!: Promise<HTMLIFrameElement>;\n private activeElement: any = null;\n\n /**\n * Initializes the underlying `<iframe>` element.\n * Initializes the underlying `Window.onmessage` event listener.\n */\n protected init() {\n (this as any).test = 'hello';\n this.iframe = new Promise((resolve) => {\n const onload = () => {\n if (!checkForSameSrcInstances(encodeURIComponent(this.parameters))) {\n const iframe = document.createElement('iframe');\n iframe.classList.add('magic-iframe');\n iframe.dataset.magicIframeLabel = createURL(this.endpoint).host;\n iframe.title = 'Secure Modal';\n iframe.src = createURL(`/send?params=${encodeURIComponent(this.parameters)}`, this.endpoint).href;\n iframe.allow = 'clipboard-read; clipboard-write';\n applyOverlayStyles(iframe);\n document.body.appendChild(iframe);\n resolve(iframe);\n } else {\n createDuplicateIframeWarning().log();\n }\n };\n\n // Check DOM state and load...\n if (['loaded', 'interactive', 'complete'].includes(document.readyState)) {\n onload();\n } else {\n // ...or check load events to load\n window.addEventListener('load', onload, false);\n }\n });\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (event.origin === this.endpoint) {\n if (event.data && event.data.msgType && this.messageHandlers.size) {\n // If the response object is undefined, we ensure it's at least an\n // empty object before passing to the event listener.\n /* istanbul ignore next */\n event.data.response = event.data.response ?? {};\n for (const handler of this.messageHandlers.values()) {\n handler(event);\n }\n }\n }\n });\n }\n\n protected async showOverlay() {\n const iframe = await this.iframe;\n iframe.style.visibility = 'visible';\n this.activeElement = document.activeElement;\n iframe.focus();\n }\n\n protected async hideOverlay() {\n const iframe = await this.iframe;\n iframe.style.visibility = 'hidden';\n if (this.activeElement?.focus) this.activeElement.focus();\n this.activeElement = null;\n }\n\n protected async _post(data: any) {\n const iframe = await this.iframe;\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(data, this.endpoint);\n } else {\n throw createModalNotReadyError();\n }\n }\n}\n","import { Extension } from '@magic-sdk/commons';\nimport { AlgorandConfig, AlgorandPayloadMethod } from './types';\n\nexport class AlgorandExtension extends Extension.Internal<'algod', any> {\n name = 'algod' as const;\n config: any = {};\n\n constructor(public algorandConfig: AlgorandConfig) {\n super();\n\n this.config = {\n rpcUrl: algorandConfig.rpcUrl,\n chainType: 'ALOGD',\n };\n }\n\n public async signTransaction(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignTransaction, txn));\n }\n\n public async signBid(txn: any) {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignBid, txn));\n }\n\n public async getWallet() {\n return this.request(this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandGetWallet, []));\n }\n\n public async signGroupTransaction(txns: any[]) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransaction, txns),\n );\n }\n\n public async signGroupTransactionV2(txns: any) {\n return this.request(\n this.utils.createJsonRpcRequestPayload(AlgorandPayloadMethod.AlgorandSignGroupTransactionV2, txns),\n );\n }\n}\n","export { WalletManager, WalletManagerConfig } from './manager'\nexport { NetworkId } from './network'\nexport { State, WalletState, defaultState } from './store'\nexport { StorageAdapter } from './storage'\nexport * from './wallets'\n","import { Store } from '@tanstack/store'\nimport algosdk from 'algosdk'\nimport {\n createDefaultNetworkConfig,\n isNetworkConfigMap,\n NetworkId,\n type AlgodConfig,\n type NetworkConfig,\n type NetworkConfigMap\n} from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport {\n defaultState,\n isValidState,\n LOCAL_STORAGE_KEY,\n removeWallet,\n setActiveNetwork,\n setActiveWallet,\n type State\n} from 'src/store'\nimport { createWalletMap, deepMerge } from 'src/utils'\nimport type { BaseWallet } from 'src/wallets/base'\nimport type {\n SupportedWallet,\n WalletAccount,\n WalletConfigMap,\n WalletId,\n WalletIdConfig,\n WalletMetadata,\n WalletOptions\n} from 'src/wallets/types'\n\nexport interface WalletManagerConfig {\n wallets?: SupportedWallet[]\n network?: NetworkId\n algod?: NetworkConfig\n}\n\nexport type PersistedState = Omit<State, 'algodClient'>\n\nexport class WalletManager {\n public _clients: Map<WalletId, BaseWallet> = new Map()\n\n public networkConfig: NetworkConfigMap\n\n public store: Store<State>\n public subscribe: (callback: (state: State) => void) => () => void\n\n constructor({ wallets = [], network = NetworkId.TESTNET, algod = {} }: WalletManagerConfig = {}) {\n this.networkConfig = this.initNetworkConfig(network, algod)\n\n const persistedState = this.loadPersistedState()\n const initialState: State = persistedState\n ? {\n ...persistedState,\n algodClient: this.createAlgodClient(this.networkConfig[persistedState.activeNetwork])\n }\n : {\n ...defaultState,\n activeNetwork: network,\n algodClient: this.createAlgodClient(this.networkConfig[network])\n }\n\n this.store = new Store<State>(initialState, {\n onUpdate: () => this.savePersistedState()\n })\n\n this.savePersistedState()\n\n this.subscribe = (callback: (state: State) => void): (() => void) => {\n const unsubscribe = this.store.subscribe(() => {\n callback(this.store.state)\n })\n\n return unsubscribe\n }\n\n this.initializeWallets(wallets)\n }\n\n // ---------- Store ------------------------------------------------- //\n\n public get algodClient(): algosdk.Algodv2 {\n return this.store.state.algodClient\n }\n\n public set algodClient(algodClient: algosdk.Algodv2) {\n this.store.setState((state) => ({\n ...state,\n algodClient\n }))\n }\n\n private loadPersistedState(): PersistedState | null {\n try {\n const serializedState = StorageAdapter.getItem(LOCAL_STORAGE_KEY)\n if (serializedState === null) {\n return null\n }\n const parsedState = JSON.parse(serializedState)\n if (!isValidState(parsedState)) {\n console.warn('[Store] Parsed state:', parsedState)\n throw new Error('Persisted state is invalid')\n }\n return parsedState as PersistedState\n } catch (error: any) {\n console.error(`[Store] Could not load state from local storage: ${error.message}`)\n return null\n }\n }\n\n private savePersistedState(): void {\n try {\n const { wallets, activeWallet, activeNetwork } = this.store.state\n const persistedState: PersistedState = { wallets, activeWallet, activeNetwork }\n const serializedState = JSON.stringify(persistedState)\n StorageAdapter.setItem(LOCAL_STORAGE_KEY, serializedState)\n } catch (error) {\n console.error('[Store] Could not save state to local storage:', error)\n }\n }\n\n // ---------- Wallets ----------------------------------------------- //\n\n private initializeWallets<T extends keyof WalletConfigMap>(\n walletsConfig: Array<T | WalletIdConfig<T>>\n ) {\n console.info('[Manager] Initializing wallets...')\n\n for (const walletConfig of walletsConfig) {\n let walletId: T\n let walletOptions: WalletOptions<T> | undefined\n let walletMetadata: Partial<WalletMetadata> | undefined\n\n // Parse wallet config\n if (typeof walletConfig === 'string') {\n walletId = walletConfig\n } else {\n const { id, options, metadata } = walletConfig\n walletId = id\n walletOptions = options\n walletMetadata = metadata\n }\n\n // Get wallet class\n const walletMap = createWalletMap()\n const WalletClass = walletMap[walletId]\n if (!WalletClass) {\n console.error(`[Manager] Wallet not found: ${walletId}`)\n continue\n }\n\n // Initialize wallet\n const walletInstance = new WalletClass({\n id: walletId,\n metadata: walletMetadata,\n options: walletOptions as any,\n getAlgodClient: this.getAlgodClient,\n store: this.store,\n subscribe: this.subscribe\n })\n\n this._clients.set(walletId, walletInstance)\n console.info(`[Manager] ✅ Initialized ${walletId}`)\n }\n\n const state = this.store.state\n\n // Check if connected wallets are still valid\n const connectedWallets = Object.keys(state.wallets) as WalletId[]\n for (const walletId of connectedWallets) {\n if (!this._clients.has(walletId)) {\n console.warn(`[Manager] Connected wallet not found: ${walletId}`)\n removeWallet(this.store, { walletId })\n }\n }\n\n // Check if active wallet is still valid\n if (state.activeWallet && !this._clients.has(state.activeWallet)) {\n console.warn(`[Manager] Active wallet not found: ${state.activeWallet}`)\n setActiveWallet(this.store, { walletId: null })\n }\n }\n\n public get wallets(): BaseWallet[] {\n return [...this._clients.values()]\n }\n\n public getWallet(walletId: WalletId): BaseWallet | undefined {\n return this._clients.get(walletId)\n }\n\n public async resumeSessions(): Promise<void> {\n const promises = this.wallets.map((wallet) => wallet?.resumeSession())\n await Promise.all(promises)\n }\n\n public async disconnect(): Promise<void> {\n const promises = this.wallets\n .filter((wallet) => wallet.isConnected)\n .map((wallet) => wallet?.disconnect())\n\n await Promise.all(promises)\n }\n\n // ---------- Network ----------------------------------------------- //\n\n private initNetworkConfig(network: NetworkId, config: NetworkConfig): NetworkConfigMap {\n console.info('[Manager] Initializing network...')\n\n let networkConfig = createDefaultNetworkConfig()\n\n if (isNetworkConfigMap(config)) {\n // Config for multiple networks\n networkConfig = deepMerge(networkConfig, config)\n } else {\n // Config for single (active) network\n networkConfig[network] = deepMerge(networkConfig[network], config)\n }\n\n console.info('[Manager] Algodv2 config:', networkConfig)\n\n return networkConfig\n }\n\n private createAlgodClient(config: AlgodConfig): algosdk.Algodv2 {\n if (this.store) console.info(`[Manager] Creating Algodv2 client for ${this.activeNetwork}...`)\n const { token = '', baseServer, port = '', headers = {} } = config\n return new algosdk.Algodv2(token, baseServer, port, headers)\n }\n\n public getAlgodClient = (): algosdk.Algodv2 => {\n return this.algodClient\n }\n\n public setActiveNetwork = async (networkId: NetworkId): Promise<void> => {\n if (this.activeNetwork === networkId) {\n return\n }\n\n const algodClient = this.createAlgodClient(this.networkConfig[networkId])\n setActiveNetwork(this.store, { networkId, algodClient })\n\n console.info(`[Manager] ✅ Active network set to ${networkId}.`)\n }\n\n public get activeNetwork(): NetworkId {\n return this.store.state.activeNetwork\n }\n\n // ---------- Active Wallet ----------------------------------------- //\n\n public get activeWallet(): BaseWallet | null {\n const state = this.store.state\n const activeWallet = this.wallets.find((wallet) => wallet.id === state.activeWallet)\n if (!activeWallet) {\n return null\n }\n\n return activeWallet\n }\n\n public get activeWalletAccounts(): WalletAccount[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts\n }\n\n public get activeWalletAddresses(): string[] | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n if (!this.activeWallet) {\n return null\n }\n return this.activeWallet.activeAccount\n }\n\n public get activeAddress(): string | null {\n if (!this.activeAccount) {\n return null\n }\n return this.activeAccount.address\n }\n\n // ---------- Sign Transactions ------------------------------------- //\n\n public get signTransactions(): BaseWallet['signTransactions'] {\n if (!this.activeWallet) {\n throw new Error('[Manager] No active wallet found!')\n }\n return this.activeWallet.signTransactions\n }\n\n public get transactionSigner(): algosdk.TransactionSigner {\n if (!this.activeWallet) {\n throw new Error('[Manager] No active wallet found!')\n }\n return this.activeWallet.transactionSigner\n }\n}\n","import algosdk from 'algosdk'\n\nexport enum NetworkId {\n MAINNET = 'mainnet',\n TESTNET = 'testnet',\n BETANET = 'betanet',\n FNET = 'fnet',\n LOCALNET = 'localnet'\n}\n\nexport function isValidNetworkId(networkId: any): networkId is NetworkId {\n return Object.values(NetworkId).includes(networkId)\n}\n\nexport interface AlgodConfig {\n token: string | algosdk.AlgodTokenHeader | algosdk.CustomTokenHeader | algosdk.BaseHTTPClient\n baseServer: string\n port?: string | number\n headers?: Record<string, string>\n}\n\nexport function isAlgodConfig(config: any): config is AlgodConfig {\n if (typeof config !== 'object') return false\n\n for (const key of Object.keys(config)) {\n if (!['token', 'baseServer', 'port', 'headers'].includes(key)) return false\n }\n\n return (\n typeof config.token === 'string' &&\n typeof config.baseServer === 'string' &&\n ['string', 'number', 'undefined'].includes(typeof config.port) &&\n ['object', 'undefined'].includes(typeof config.headers)\n )\n}\n\nexport type NetworkConfigMap = Record<NetworkId, AlgodConfig>\n\nexport function isNetworkConfigMap(config: NetworkConfig): config is NetworkConfigMap {\n const networkKeys = Object.values(NetworkId) as string[]\n return Object.keys(config).some((key) => networkKeys.includes(key))\n}\n\nexport type NetworkConfig = Partial<AlgodConfig> | Partial<Record<NetworkId, Partial<AlgodConfig>>>\n\nexport const nodeServerMap = {\n [NetworkId.MAINNET]: 'https://mainnet-api.4160.nodely.dev',\n [NetworkId.TESTNET]: 'https://testnet-api.4160.nodely.dev',\n [NetworkId.BETANET]: 'https://betanet-api.4160.nodely.dev',\n [NetworkId.FNET]: 'https://fnet-api.4160.nodely.dev'\n}\n\nexport function createDefaultNetworkConfig(): NetworkConfigMap {\n const localnetConfig: AlgodConfig = {\n token: 'a'.repeat(64),\n baseServer: 'http://localhost',\n port: 4001,\n headers: {}\n }\n\n return Object.values(NetworkId).reduce((configMap, value) => {\n const network = value as NetworkId\n const isLocalnet = network === NetworkId.LOCALNET\n\n configMap[network] = isLocalnet\n ? localnetConfig\n : {\n token: '',\n baseServer: nodeServerMap[network],\n port: '',\n headers: {}\n }\n\n return configMap\n }, {} as NetworkConfigMap)\n}\n\nexport const caipChainId: Partial<Record<NetworkId, string>> = {\n [NetworkId.MAINNET]: 'algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73k',\n [NetworkId.TESTNET]: 'algorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDe',\n [NetworkId.BETANET]: 'algorand:mFgazF-2uRS1tMiL9dsj01hJGySEmPN2'\n}\n","export class StorageAdapter {\n static getItem(key: string): string | null {\n if (typeof window === 'undefined') {\n return null\n }\n return localStorage.getItem(key)\n }\n\n static setItem(key: string, value: string): void {\n if (typeof window === 'undefined') {\n return\n }\n localStorage.setItem(key, value)\n }\n}\n","import algosdk from 'algosdk'\nimport { NetworkId, isValidNetworkId } from 'src/network'\nimport { WalletId, type WalletAccount } from 'src/wallets'\nimport type { Store } from '@tanstack/store'\n\nexport type WalletState = {\n accounts: WalletAccount[]\n activeAccount: WalletAccount | null\n}\n\nexport type WalletStateMap = Partial<Record<WalletId, WalletState>>\n\nexport interface State {\n wallets: WalletStateMap\n activeWallet: WalletId | null\n activeNetwork: NetworkId\n algodClient: algosdk.Algodv2\n}\n\nexport const defaultState: State = {\n wallets: {},\n activeWallet: null,\n activeNetwork: NetworkId.TESTNET,\n algodClient: new algosdk.Algodv2('', 'https://testnet-api.4160.nodely.dev/')\n}\n\nexport const LOCAL_STORAGE_KEY = '@txnlab/use-wallet:v3'\n\n// State mutations\n\nexport function addWallet(\n store: Store<State>,\n { walletId, wallet }: { walletId: WalletId; wallet: WalletState }\n) {\n store.setState((state) => {\n const updatedWallets = {\n ...state.wallets,\n [walletId]: {\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: wallet.activeAccount ? { ...wallet.activeAccount } : null\n }\n }\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: walletId\n }\n })\n}\n\nexport function removeWallet(store: Store<State>, { walletId }: { walletId: WalletId }) {\n store.setState((state) => {\n const updatedWallets = { ...state.wallets }\n delete updatedWallets[walletId]\n\n return {\n ...state,\n wallets: updatedWallets,\n activeWallet: state.activeWallet === walletId ? null : state.activeWallet\n }\n })\n}\n\nexport function setActiveWallet(store: Store<State>, { walletId }: { walletId: WalletId | null }) {\n store.setState((state) => ({\n ...state,\n activeWallet: walletId\n }))\n}\n\nexport function setActiveAccount(\n store: Store<State>,\n { walletId, address }: { walletId: WalletId; address: string }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n console.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newActiveAccount = wallet.accounts.find((a) => a.address === address)\n if (!newActiveAccount) {\n console.warn(`Account with address ${address} not found in wallet \"${walletId}\"`)\n return state\n }\n\n const updatedWallet = {\n ...wallet,\n accounts: wallet.accounts.map((account) => ({ ...account })),\n activeAccount: { ...newActiveAccount }\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setAccounts(\n store: Store<State>,\n { walletId, accounts }: { walletId: WalletId; accounts: WalletAccount[] }\n) {\n store.setState((state) => {\n const wallet = state.wallets[walletId]\n if (!wallet) {\n console.warn(`Wallet with id \"${walletId}\" not found`)\n return state\n }\n\n const newAccounts = accounts.map((account) => ({ ...account }))\n\n const isActiveAccountConnected = newAccounts.some(\n (account) => account.address === wallet.activeAccount?.address\n )\n\n const newActiveAccount = isActiveAccountConnected\n ? { ...wallet.activeAccount! }\n : newAccounts[0] || null\n\n const updatedWallet = {\n ...wallet,\n accounts: newAccounts,\n activeAccount: newActiveAccount\n }\n\n const updatedWallets = {\n ...state.wallets,\n [walletId]: updatedWallet\n }\n\n return {\n ...state,\n wallets: updatedWallets\n }\n })\n}\n\nexport function setActiveNetwork(\n store: Store<State>,\n { networkId, algodClient }: { networkId: NetworkId; algodClient: algosdk.Algodv2 }\n) {\n store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient\n }))\n}\n\n// Type guards\n\nexport function isValidWalletId(walletId: any): walletId is WalletId {\n return Object.values(WalletId).includes(walletId)\n}\n\nexport function isValidWalletAccount(account: any): account is WalletAccount {\n return (\n typeof account === 'object' &&\n account !== null &&\n typeof account.name === 'string' &&\n typeof account.address === 'string'\n )\n}\n\nexport function isValidWalletState(wallet: any): wallet is WalletState {\n return (\n typeof wallet === 'object' &&\n wallet !== null &&\n Array.isArray(wallet.accounts) &&\n wallet.accounts.every(isValidWalletAccount) &&\n (wallet.activeAccount === null || isValidWalletAccount(wallet.activeAccount))\n )\n}\n\nexport function isValidState(state: any): state is State {\n if (!state || typeof state !== 'object') return false\n if (typeof state.wallets !== 'object') return false\n for (const [walletId, wallet] of Object.entries(state.wallets)) {\n if (!isValidWalletId(walletId) || !isValidWalletState(wallet)) return false\n }\n if (state.activeWallet !== null && !isValidWalletId(state.activeWallet)) return false\n if (!isValidNetworkId(state.activeNetwork)) return false\n\n return true\n}\n","import { setActiveWallet, setActiveAccount, removeWallet, type State } from 'src/store'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type { NetworkId } from 'src/network'\nimport type { WalletAccount, WalletConstructor, WalletId, WalletMetadata } from 'src/wallets/types'\n\ninterface WalletConstructorType {\n new (...args: any[]): BaseWallet\n defaultMetadata: WalletMetadata\n}\n\nexport abstract class BaseWallet {\n readonly id: WalletId\n readonly metadata: WalletMetadata\n\n protected store: Store<State>\n protected getAlgodClient: () => algosdk.Algodv2\n\n public subscribe: (callback: (state: State) => void) => () => void\n\n protected constructor({\n id,\n metadata,\n store,\n subscribe,\n getAlgodClient\n }: WalletConstructor<WalletId>) {\n this.id = id\n this.store = store\n this.subscribe = subscribe\n this.getAlgodClient = getAlgodClient\n\n const ctor = this.constructor as WalletConstructorType\n this.metadata = { ...ctor.defaultMetadata, ...metadata }\n }\n\n static defaultMetadata: WalletMetadata = { name: 'Base Wallet', icon: '' }\n\n // ---------- Public Methods ---------------------------------------- //\n\n public abstract connect(args?: Record<string, any>): Promise<WalletAccount[]>\n public abstract disconnect(): Promise<void>\n public abstract resumeSession(): Promise<void>\n\n public setActive = (): void => {\n console.info(`[Wallet] Set active wallet: ${this.id}`)\n setActiveWallet(this.store, { walletId: this.id })\n }\n\n public setActiveAccount = (account: string): void => {\n console.info(`[Wallet] Set active account: ${account}`)\n setActiveAccount(this.store, {\n walletId: this.id,\n address: account\n })\n }\n\n public abstract signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const signTxnsResult = await this.signTransactions(txnGroup, indexesToSign)\n\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value !== null) {\n acc.push(value)\n }\n return acc\n }, [])\n\n return signedTxns\n }\n\n // ---------- Derived Properties ------------------------------------ //\n\n public get name(): string {\n return this.id.toUpperCase()\n }\n\n public get accounts(): WalletAccount[] {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n return walletState ? walletState.accounts : []\n }\n\n public get addresses(): string[] {\n return this.accounts.map((account) => account.address)\n }\n\n public get activeAccount(): WalletAccount | null {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n return walletState ? walletState.activeAccount : null\n }\n\n public get activeAddress(): string | null {\n return this.activeAccount?.address ?? null\n }\n\n public get activeNetwork(): NetworkId {\n const state = this.store.state\n return state.activeNetwork\n }\n\n public get isConnected(): boolean {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n return walletState ? walletState.accounts.length > 0 : false\n }\n\n public get isActive(): boolean {\n const state = this.store.state\n return state.activeWallet === this.id\n }\n\n // ---------- Protected Methods ------------------------------------- //\n\n protected onDisconnect(): void {\n removeWallet(this.store, { walletId: this.id })\n }\n}\n","import { CustomWallet, CustomWalletOptions } from './custom'\nimport { DeflyWallet, type DeflyWalletConnectOptions } from './defly'\nimport { ExodusWallet, type ExodusOptions } from './exodus'\nimport { KibisisWallet } from './kibisis'\nimport { KmdWallet, type KmdOptions } from './kmd'\nimport { LuteConnectOptions, LuteWallet } from './lute'\nimport { MagicAuth, MagicAuthOptions } from './magic'\nimport { MnemonicWallet, type MnemonicOptions } from './mnemonic'\nimport { PeraWallet, type PeraWalletConnectOptions } from './pera'\nimport {\n PeraWallet as PeraWalletBeta,\n type PeraWalletConnectOptions as PeraWalletConnectBetaOptions\n} from './pera2'\nimport { WalletConnect, type WalletConnectOptions } from './walletconnect'\nimport type { Store } from '@tanstack/store'\nimport type algosdk from 'algosdk'\nimport type { State } from 'src/store'\n\nexport enum WalletId {\n DEFLY = 'defly',\n CUSTOM = 'custom',\n EXODUS = 'exodus',\n KIBISIS = 'kibisis',\n KMD = 'kmd',\n LUTE = 'lute',\n MAGIC = 'magic',\n MNEMONIC = 'mnemonic',\n PERA = 'pera',\n PERA2 = 'pera-beta',\n WALLETCONNECT = 'walletconnect'\n}\n\nexport type WalletMap = {\n [WalletId.CUSTOM]: typeof CustomWallet\n [WalletId.DEFLY]: typeof DeflyWallet\n [WalletId.EXODUS]: typeof ExodusWallet\n [WalletId.KIBISIS]: typeof KibisisWallet\n [WalletId.KMD]: typeof KmdWallet\n [WalletId.LUTE]: typeof LuteWallet\n [WalletId.MAGIC]: typeof MagicAuth\n [WalletId.MNEMONIC]: typeof MnemonicWallet\n [WalletId.PERA]: typeof PeraWallet\n [WalletId.PERA2]: typeof PeraWalletBeta\n [WalletId.WALLETCONNECT]: typeof WalletConnect\n}\n\nexport type WalletOptionsMap = {\n [WalletId.CUSTOM]: CustomWalletOptions\n [WalletId.DEFLY]: DeflyWalletConnectOptions\n [WalletId.EXODUS]: ExodusOptions\n [WalletId.KIBISIS]: Record<string, never>\n [WalletId.KMD]: KmdOptions\n [WalletId.LUTE]: LuteConnectOptions\n [WalletId.MAGIC]: MagicAuthOptions\n [WalletId.MNEMONIC]: MnemonicOptions\n [WalletId.PERA]: PeraWalletConnectOptions\n [WalletId.PERA2]: PeraWalletConnectBetaOptions\n [WalletId.WALLETCONNECT]: WalletConnectOptions\n}\n\nexport type SupportedWallet = WalletIdConfig<WalletId> | WalletId\n\nexport type WalletConfigMap = {\n [K in keyof WalletOptionsMap]: {\n options?: WalletOptionsMap[K]\n metadata?: Partial<WalletMetadata>\n }\n}\n\nexport type WalletOptions<T extends keyof WalletOptionsMap> = WalletOptionsMap[T]\n\nexport type WalletConfig<T extends keyof WalletConfigMap> = WalletConfigMap[T]\n\nexport type WalletIdConfig<T extends keyof WalletConfigMap> = {\n [K in T]: {\n id: K\n } & WalletConfigMap[K]\n}[T]\n\ntype NonEmptyArray<T> = [T, ...T[]]\n\nexport type SupportedWallets = NonEmptyArray<SupportedWallet>\n\nexport type WalletMetadata = {\n name: string\n icon: string\n}\n\nexport interface BaseWalletConstructor {\n id: WalletId\n metadata: Partial<WalletMetadata> | undefined\n getAlgodClient: () => algosdk.Algodv2\n store: Store<State>\n subscribe: (callback: (state: State) => void) => () => void\n}\n\nexport type WalletConstructor<T extends keyof WalletOptionsMap> = BaseWalletConstructor & {\n options?: WalletOptions<T>\n defaultMetadata?: WalletMetadata\n}\n\nexport type WalletAccount = {\n name: string\n address: string\n}\n\n// Transaction types\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-multisigmetadata */\nexport interface MultisigMetadata {\n /**\n * Multisig version.\n */\n version: number\n\n /**\n * Multisig threshold value. Authorization requires a subset of signatures,\n * equal to or greater than the threshold value.\n */\n threshold: number\n\n /**\n * List of Algorand addresses of possible signers for this\n * multisig. Order is important.\n */\n addrs: string[]\n}\n\n/** @see https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0001.md#interface-wallettransaction */\nexport interface WalletTransaction {\n /**\n * Base64 encoding of the canonical msgpack encoding of a Transaction.\n */\n txn: string\n\n /**\n * Optional authorized address used to sign the transaction when the account\n * is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Multisig metadata used to sign the transaction\n */\n msig?: MultisigMetadata\n\n /**\n * Optional list of addresses that must sign the transactions\n */\n signers?: string[]\n\n /**\n * Optional base64 encoding of the canonical msgpack encoding of a\n * SignedTxn corresponding to txn, when signers=[]\n */\n stxn?: string\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n\n /**\n * Optional message explaining the reason of this group of transaction\n * Field only allowed in the first transaction of a group\n */\n groupMessage?: string\n}\n\n/** @see https://github.com/perawallet/connect/blob/1.3.4/src/util/model/peraWalletModels.ts */\nexport interface SignerTransaction {\n txn: algosdk.Transaction\n\n /**\n * Optional authorized address used to sign the transaction when\n * the account is rekeyed. Also called the signor/sgnr.\n */\n authAddr?: string\n\n /**\n * Optional list of addresses that must sign the transactions.\n * Wallet skips to sign this txn if signers is empty array.\n * If undefined, wallet tries to sign it.\n */\n signers?: string[]\n\n /**\n * Optional message explaining the reason of the transaction\n */\n message?: string\n}\n\nexport interface JsonRpcRequest<T = any> {\n id: number\n jsonrpc: string\n method: string\n params: T\n}\n\nexport class SignTxnsError extends Error {\n code: number\n data?: any\n\n constructor(message: string, code: number, data?: any) {\n super(message)\n this.name = 'SignTxnsError'\n this.code = code\n this.data = data\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { DeflyWalletConnect } from '@blockshake/defly-connect'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignerTransaction,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport interface DeflyWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 1024 1024\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"1024\" height=\"1024\" />\n <path fill=\"#FFFFFF\" d=\"M779.9,684.4L512,230L244.1,684.4L512,529.5L779.9,684.4z\" />\n <path fill=\"#FFFFFF\" d=\"M733.1,730L512,613.5L290.9,730L512,658L733.1,730z\" />\n</svg>\n`)}`\n\nexport class DeflyWallet extends BaseWallet {\n private client: DeflyWalletConnect | null = null\n private options: DeflyWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.DEFLY>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Defly',\n icon: ICON\n }\n\n private async initializeClient(): Promise<DeflyWalletConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('@blockshake/defly-connect')\n const DeflyWalletConnect = module.default\n ? module.default.DeflyWalletConnect\n : module.DeflyWalletConnect\n\n const client = new DeflyWalletConnect(this.options)\n client.connector?.on('disconnect', this.onDisconnect)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n await client.disconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://docs.exodus.com/api-reference/algorand-provider-arc-api/ */\n\ninterface EnableNetworkOpts {\n genesisID?: string\n genesisHash?: string\n}\n\ninterface EnableAccountsOpts {\n accounts?: string[]\n}\n\nexport type ExodusOptions = EnableNetworkOpts & EnableAccountsOpts\n\ninterface EnableNetworkResult {\n genesisID: string\n genesisHash: string\n}\n\ninterface EnableAccountsResult {\n accounts: string[]\n}\n\nexport type EnableResult = EnableNetworkResult & EnableAccountsResult\n\nexport type SignTxnsResult = (string | null)[]\n\nexport interface Exodus {\n isConnected: boolean\n address: string | null\n enable: (options?: ExodusOptions) => Promise<EnableResult>\n signTxns: (transactions: WalletTransaction[]) => Promise<SignTxnsResult>\n}\n\nexport type WindowExtended = { algorand: Exodus } & Window & typeof globalThis\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 300 300\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"grad1\" gradientUnits=\"userSpaceOnUse\" x1=\"246.603\" y1=\"9.2212\" x2=\"174.158\" y2=\"308.5426\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n \n <linearGradient id=\"grad2\" gradientUnits=\"userSpaceOnUse\" x1=\"129.3516\" y1=\"-19.1573\" x2=\"56.9066\" y2=\"280.1641\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0\" stop-color=\"#0B46F9\" />\n <stop offset=\"1\" stop-color=\"#BBFBE0\" />\n </linearGradient>\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n \n <mask id=\"mask1\" maskUnits=\"userSpaceOnUse\" x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\">\n <path fill=\"url(#grad1)\" d=\"M274.7,93.9L166.6,23v39.6l69.4,45.1l-8.2,25.8h-61.2v32.9h61.2l8.2,25.8l-69.4,45.1V277l108.2-70.7L257,150.1L274.7,93.9z\" />\n <path fill=\"url(#grad2)\" d=\"M72.5,166.4h61v-32.9H72.2l-7.9-25.8l69.2-45.1V23L25.3,93.9L43,150.1l-17.7,56.2L133.7,277v-39.6l-69.4-45.1L72.5,166.4z\" />\n </mask>\n \n <linearGradient id=\"grad3\" gradientUnits=\"userSpaceOnUse\" x1=\"46.4662\" y1=\"228.7554\" x2=\"171.8638\" y2=\"135.1039\" gradientTransform=\"matrix(1 0 0 -1 0 302)\">\n <stop offset=\"0.1198\" stop-color=\"#8952FF\" stop-opacity=\"0.87\" />\n <stop offset=\"1\" stop-color=\"#DABDFF\" stop-opacity=\"0\" />\n </linearGradient>\n <rect x=\"25.4\" y=\"23\" width=\"247.6\" height=\"254\" fill=\"url(#grad3)\" mask=\"url(#mask1)\" />\n</svg>\n`)}`\n\nexport class ExodusWallet extends BaseWallet {\n private client: Exodus | null = null\n private options: ExodusOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.EXODUS>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Exodus',\n icon: ICON\n }\n\n private async initializeClient(): Promise<Exodus> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n if (typeof window === 'undefined' || (window as WindowExtended).algorand === undefined) {\n throw new Error('Exodus is not available.')\n }\n const client = (window as WindowExtended).algorand\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const { accounts } = await client.enable(this.options)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n const client = await this.initializeClient()\n\n if (!client.isConnected) {\n throw new Error('Exodus is not connected.')\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport { WalletId, type WalletAccount, type WalletConstructor } from 'src/wallets/types'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\nimport type { Store } from '@tanstack/store'\n\nexport function isAVMWebProviderSDKError(error: any): error is AVMWebProviderSDK.BaseARC0027Error {\n return typeof error === 'object' && 'code' in error && 'message' in error\n}\n\nexport const KIBISIS_AVM_WEB_PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6'\n\nexport const ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#801C96\" width=\"480\" height=\"480\" />\n <path fill=\"#FFFFFF\" d=\"M393.5,223.2c0-7.3-0.6-14.6-1.6-21.6c-0.9-6.5-2.3-12.8-4-18.9c-18-64.9-77.4-112.5-148-112.5c-70.6,0-130,47.6-148,112.5c-1.7,6.2-3,12.5-4,19c-1,7.1-1.6,14.3-1.6,21.6h0v85.5h19.7v-85.5c0-7.2,0.6-14.4,1.8-21.4c14,1.1,27.6,4.3,40.5,9.5c15.9,6.4,30.3,15.6,42.6,27.3c12.3,11.7,22,25.4,28.7,40.6c6.9,15.6,10.5,32.2,10.5,49.2v81.4h0.1h19.6h0.1v-81.5c0.1-17.1,3.6-33.7,10.5-49.2c6.7-15.2,16.4-28.8,28.7-40.6c4.2-4,8.6-7.7,13.2-11.1v132.2h19.7V223.2h0c0-2.5-0.1-5-0.4-7.4c3.3-1.6,6.6-3.1,10-4.5c12.9-5.2,26.4-8.4,40.4-9.5c1.2,7,1.7,14.2,1.8,21.4v85.5h19.7L393.5,223.2L393.5,223.2z M240.1,277.3c-11.6-29.3-32.7-54.1-59.8-71c2.9-10,8.2-19.1,15.8-26.6c11.8-11.8,27.4-18.2,44-18.2s32.3,6.5,44,18.2c4.1,4.1,7.5,8.7,10.3,13.6c5.6-3.4,11.4-6.4,17.4-9.2c-14-25.2-40.9-42.3-71.8-42.3c-35.9,0-66.3,23-77.5,55.1c-15.5-7.1-32.5-11.8-50.4-13.5c1.3-4,2.7-7.9,4.3-11.8c6.7-15.9,16.4-30.3,28.7-42.6s26.6-22,42.6-28.7c16.5-7,34-10.5,52.1-10.5s35.6,3.5,52.1,10.5c15.9,6.7,30.3,16.4,42.6,28.7s22,26.6,28.7,42.6c1.6,3.9,3.1,7.8,4.3,11.8C309,189.2,260.1,226.5,240.1,277.3z\" />\n <path fill=\"#FFFFFF\" d=\"M158.1,359.8h19.7V245.5c-6.1-5.4-12.7-10-19.7-14V359.8z\" />\n</svg>\n`)}`\n\nexport class KibisisWallet extends BaseWallet {\n public avmWebClient: AVMWebProviderSDK.AVMWebClient | null = null\n protected avmWebProviderSDK: typeof AVMWebProviderSDK | null = null\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n metadata = {}\n }: WalletConstructor<WalletId.KIBISIS>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Kibisis',\n icon: ICON\n }\n\n /**\n * private functions\n */\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @private\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n private async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n const avmWebClient = this.avmWebClient || (await this._initializeAVMWebClient())\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.disable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @private\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n private async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n const avmWebClient = this.avmWebClient || (await this._initializeAVMWebClient())\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n private async _getGenesisHash(): Promise<string> {\n const algodClient = this.getAlgodClient()\n const version = await algodClient.versionsCheck().do()\n\n return version.genesis_hash_b64\n }\n\n private async _initializeAVMWebClient(): Promise<AVMWebProviderSDK.AVMWebClient> {\n const _functionName = '_initializeAVMWebClient'\n const avmWebProviderSDK = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n\n if (!this.avmWebClient) {\n console.info(`[${KibisisWallet.name}]#${_functionName}: initializing new client...`)\n\n this.avmWebClient = avmWebProviderSDK.AVMWebClient.init()\n }\n\n return this.avmWebClient\n }\n\n private async _initializeAVMWebProviderSDK(): Promise<typeof AVMWebProviderSDK> {\n const _functionName = '_initializeAVMWebProviderSDK'\n\n if (!this.avmWebProviderSDK) {\n console.info(\n `[${KibisisWallet.name}]#${_functionName}: initializing @agoralabs-sh/avm-web-provider...`\n )\n\n this.avmWebProviderSDK = await import('@agoralabs-sh/avm-web-provider')\n\n if (!this.avmWebProviderSDK) {\n throw new Error(\n 'failed to initialize, the @agoralabs-sh/avm-web-provider sdk was not provided'\n )\n }\n }\n\n return this.avmWebProviderSDK\n }\n\n private _mapAVMWebProviderAccountToWalletAccounts(\n accounts: AVMWebProviderSDK.IAccount[]\n ): WalletAccount[] {\n return accounts.map(({ address, name }, idx) => ({\n name: name || `[${this.metadata.name}] Account ${idx + 1}`,\n address\n }))\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method will timeout after 3\n * minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @private\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n private async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = this.avmWebProviderSDK || (await this._initializeAVMWebProviderSDK())\n const avmWebClient = this.avmWebClient || (await this._initializeAVMWebClient())\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.signTransactions({\n txns,\n providerId: KIBISIS_AVM_WEB_PROVIDER_ID\n })\n })\n }\n\n /**\n * public functions\n */\n\n public async connect(): Promise<WalletAccount[]> {\n let result: AVMWebProviderSDK.IEnableResult\n\n try {\n console.info(`[${this.metadata.name}] Connecting...`)\n\n result = await this._enable()\n\n console.info(\n `[${this.metadata.name}] Successfully connected on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] Error connecting: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n throw error\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public async disconnect(): Promise<void> {\n try {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n\n const result = await this._disable()\n\n console.info(\n `[${this.metadata.name}] Successfully disconnected${result.sessionIds && result.sessionIds.length ? ` sessions [${result.sessionIds.join(',')}]` : ''} on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] Error disconnecting: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n throw error\n }\n }\n\n public async resumeSession(): Promise<void> {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n let result: AVMWebProviderSDK.IEnableResult\n\n if (!walletState) {\n return\n }\n\n try {\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n result = await this._enable()\n\n if (result.accounts.length === 0) {\n throw new Error(`No accounts found!`)\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] Error resuming session: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n let txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Sign transactions\n const signTxnsResult = await this._signTransactions(txnsToSign)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.stxns.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n return result\n } catch (error: any) {\n console.error(\n `[${this.metadata.name}] error signing transactions: ` +\n (isAVMWebProviderSDKError(error)\n ? `${error.message} (code: ${error.code})`\n : error.message)\n )\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\ninterface KmdConstructor {\n token: string | algosdk.KMDTokenHeader | algosdk.CustomTokenHeader\n baseServer?: string\n port?: string | number\n headers?: Record<string, string>\n}\n\nexport type KmdOptions = Partial<Pick<KmdConstructor, 'token'>> &\n Omit<KmdConstructor, 'token'> & {\n wallet?: string\n }\n\ninterface KmdWalletRecord {\n id: string\n name: string\n driver_name?: string\n driver_version?: number\n mnemonic_ux?: boolean\n supported_txs?: Array<any>\n}\n\ninterface ListWalletsResponse {\n wallets: KmdWalletRecord[]\n message?: string\n error?: boolean\n}\n\ninterface InitWalletHandleResponse {\n wallet_handle_token: string\n message?: string\n error?: boolean\n}\n\ninterface ListKeysResponse {\n addresses: string[]\n message?: string\n error?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <linearGradient id=\"algokitGradient\" gradientUnits=\"userSpaceOnUse\" x1=\"0\" y1=\"400\" x2=\"400\" y2=\"0\">\n <stop offset=\"0\" style=\"stop-color:#31D8EE\"/>\n <stop offset=\"1\" style=\"stop-color:#01DC94\"/>\n </linearGradient>\n <rect fill=\"url(#algokitGradient)\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class KmdWallet extends BaseWallet {\n private client: algosdk.Kmd | null = null\n private options: KmdConstructor\n private walletName: string\n private walletId: string = ''\n private password: string = ''\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.KMD>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const {\n token = 'a'.repeat(64),\n baseServer = 'http://127.0.0.1',\n port = 4002,\n wallet = 'unencrypted-default-wallet'\n } = options || {}\n\n this.options = { token, baseServer, port }\n this.walletName = wallet\n\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'KMD',\n icon: ICON\n }\n\n private async initializeClient(): Promise<algosdk.Kmd> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const { token, baseServer, port } = this.options\n const client = new algosdk.Kmd(token, baseServer, port)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n if (!this.client) {\n await this.initializeClient()\n }\n\n // Get token and fetch accounts\n const token = await this.fetchToken()\n const accounts = await this.fetchAccounts(token)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n // Release token\n await this.releaseToken(token)\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n await this.initializeClient()\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Get token and password\n const token = await this.fetchToken()\n const password = this.getPassword()\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await Promise.all(\n txnsToSign.map((txn) => client.signTransaction(token, password, txn))\n )\n\n // Release token\n await this.releaseToken(token)\n\n return signedTxns\n }\n\n private async fetchWalletId(): Promise<string> {\n console.info(`[${this.metadata.name}] Fetching wallet data...`)\n const client = this.client || (await this.initializeClient())\n\n const { wallets }: ListWalletsResponse = await client.listWallets()\n const wallet = wallets.find((wallet: KmdWalletRecord) => wallet.name === this.walletName)\n\n if (!wallet) {\n throw new Error(`Wallet \"${this.walletName}\" not found!`)\n }\n\n this.walletId = wallet.id\n return wallet.id\n }\n\n private async fetchToken(): Promise<string> {\n console.info(`[${this.metadata.name}] Fetching token...`)\n const client = this.client || (await this.initializeClient())\n\n const walletId = this.walletId || (await this.fetchWalletId())\n const password = this.getPassword()\n\n const { wallet_handle_token }: InitWalletHandleResponse = await client.initWalletHandle(\n walletId,\n password\n )\n return wallet_handle_token\n }\n\n private async releaseToken(token: string): Promise<void> {\n console.info(`[${this.metadata.name}] Releasing token...`)\n const client = this.client || (await this.initializeClient())\n await client.releaseWalletHandle(token)\n }\n\n private getPassword(): string {\n if (this.password) {\n return this.password\n }\n const password = prompt('KMD password') || ''\n this.password = password\n return password\n }\n\n private async fetchAccounts(token: string): Promise<string[]> {\n console.info(`[${this.metadata.name}] Fetching accounts...`)\n const client = this.client || (await this.initializeClient())\n const { addresses }: ListKeysResponse = await client.listKeys(token)\n return addresses\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, type State } from 'src/store'\nimport { byteArrayToBase64, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type LuteConnect from 'lute-connect'\nimport type { SignTxnsError as ISignTxnsError, WalletTransaction } from 'lute-connect'\nimport {\n SignTxnsError,\n type WalletAccount,\n type WalletConstructor,\n type WalletId\n} from 'src/wallets/types'\n\nexport interface LuteConnectOptions {\n siteName?: string\n}\n\nfunction isSignTxnsError(error: any): error is ISignTxnsError {\n return error instanceof Error && 'code' in error\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#AB47BC\" d=\"M283.7,263.6c-0.6,0-1.3-0.1-1.8-0.4c-0.6-0.3-1.1-0.8-1.5-1.3c-0.4-0.6-0.7-1.3-0.8-2 c-0.1-0.8-0.1-1.7,0.1-2.5c0.2-0.9,0.6-1.8,1.2-2.6c0.6-0.8,1.4-1.7,2.2-2.3c0.9-0.7,2.1-1.2,3.2-1.6c1.2-0.4,2.7-0.5,4-0.5 c1.4,0,3,0.3,4.4,0.8c1.5,0.5,3.1,1.4,4.3,2.3c1.4,1,2.8,2.4,3.8,3.7c1.1,1.5,2.1,3.3,2.8,5.1c0.7,1.9,1.2,4.1,1.3,6.1 c0.2,2.1,0,4.6-0.4,6.7c-0.5,2.2-1.4,4.7-2.4,6.7c-1.1,2.1-2.8,4.4-4.4,6.2c-1.8,1.9-4.1,3.7-6.3,5c-2.3,1.4-5.2,2.6-7.9,3.3 c-2.8,0.7-6.1,1.1-8.9,1.1c-3,0-6.5-0.6-9.3-1.4c-3-0.9-6.4-2.4-9.1-4c-2.8-1.7-5.8-4.2-8-6.6c-2.3-2.5-4.6-5.8-6.2-8.9 c-1.7-3.2-3.1-7.1-3.8-10.7c-0.8-3.7-1.1-8-0.9-11.8c0.2-3.9,1.1-8.3,2.3-12c1.3-3.8,3.4-8.1,5.7-11.4c2.3-3.5,5.6-7.1,8.8-9.9 c3.3-2.8,7.5-5.6,11.5-7.5c4.1-1.9,9-3.5,13.5-4.3c4.6-0.8,10-1.1,14.6-0.7c4.8,0.4,10.2,1.6,14.7,3.3c4.7,1.7,9.7,4.4,13.8,7.3 c4.2,3,8.5,7,11.7,10.9c3.3,4.1,6.5,9.2,8.7,14c2.2,4.9,4,10.9,4.9,16.3c0.9,5.5,1,11.9,0.4,17.5c-0.6,5.7-2.2,12.1-4.3,17.4 c-2.1,5.5-5.4,11.4-8.9,16.1c-3.6,4.8-8.4,9.8-13.1,13.6c-4.8,3.8-11,7.5-16.6,9.9c-5.8,2.5-12.8,4.5-19.1,5.4 c-6.4,0.9-13.9,1-20.3,0.2c-6.6-0.8-14-2.7-20.1-5.2c-6.3-2.5-13.1-6.4-18.5-10.5c-5.5-4.2-11.2-9.8-15.4-15.3 c-4.3-5.6-8.4-12.7-11.2-19.2c-2.8-6.7-4.9-14.7-5.9-21.9c-0.9-5.9-2.8-12.6-5.2-18.1c-2.3-5.4-5.9-11.2-9.5-15.8 c-3.6-4.5-8.3-9-13-12.4c-4.5-3.3-10.1-6.4-15.3-8.3c-5-1.9-11.1-3.4-16.5-3.9c-5.2-0.5-11.3-0.3-16.5,0.5c-5,0.8-10.7,2.6-15.3,4.7 c-4.5,2.1-9.4,5.1-13.2,8.3c-3.7,3.1-7.5,7.2-10.2,11.1c-2.7,3.8-5.2,8.6-6.7,13c-1.5,4.2-2.6,9.3-3,13.8c-0.3,4.3-0.1,9.4,0.7,13.7 c0.8,4.1,2.3,8.8,4.2,12.5c1.8,3.6,4.4,7.6,7.1,10.6c2.6,2.9,6,5.9,9.3,8.1c3.1,2.1,7.1,4,10.6,5.1c3.4,1.1,7.5,1.9,11.1,2 c3.5,0.2,7.4-0.2,10.8-1c3.2-0.7,6.8-2.1,9.7-3.6c2.8-1.5,5.7-3.6,8-5.8c2.2-2.1,4.3-4.8,5.9-7.4c1.5-2.5,2.8-5.5,3.5-8.3 c0.7-2.6,1.1-5.7,1.1-8.5c0-2.6-0.5-5.5-1.2-8c-0.7-2.3-1.8-4.9-3.1-6.9c-1.2-1.9-2.9-3.9-4.6-5.4c-1.6-1.4-3.6-2.8-5.5-3.7 c-1.8-0.9-4-1.6-5.9-1.9c-1.8-0.3-3.9-0.4-5.8-0.1c-1.7,0.2-3.6,0.7-5.1,1.4c-1.4,0.6-2.9,1.6-4.1,2.6c-1.1,0.9-2.1,2.2-2.9,3.4 c-0.7,1.1-1.2,2.5-1.5,3.7c-0.3,1.1-0.4,2.4-0.3,3.6c0.1,1,0.4,2.2,0.8,3.1c0.4,0.8,1,1.7,1.6,2.3c0.6,0.5,1.3,1,2.1,1.3 c0.6,0.2,1.5,0.4,2.1,0.3c0.6-0.1,1.3-0.3,1.8-0.6c0.5-0.3,1-0.8,1.2-1.4c0.3-0.5,0.7-1,1.2-1.4c0.5-0.3,1.2-0.6,1.8-0.6 c0.7-0.1,1.5,0.1,2.1,0.3c0.7,0.3,1.5,0.8,2.1,1.3c0.6,0.6,1.3,1.5,1.6,2.3c0.4,0.9,0.7,2.1,0.8,3.1c0.1,1.1,0,2.5-0.3,3.6 c-0.3,1.2-0.9,2.6-1.5,3.7c-0.7,1.2-1.8,2.4-2.9,3.4c-1.2,1-2.7,2-4.1,2.6c-1.5,0.7-3.4,1.2-5.1,1.4c-1.8,0.2-4,0.2-5.8-0.1 c-2-0.3-4.1-1-5.9-1.9c-1.9-0.9-4-2.3-5.5-3.7c-1.7-1.5-3.4-3.5-4.6-5.4c-1.3-2-2.4-4.6-3.1-6.9c-0.7-2.5-1.2-5.4-1.2-8 c0-2.7,0.4-5.8,1.1-8.5c0.7-2.8,2-5.8,3.5-8.3c1.5-2.6,3.7-5.3,5.9-7.4c2.3-2.2,5.2-4.3,8-5.8c2.9-1.6,6.5-2.9,9.7-3.6 c3.4-0.8,7.4-1.1,10.8-1c3.6,0.2,7.7,0.9,11.1,2c3.6,1.2,7.5,3.1,10.6,5.1c3.3,2.1,6.7,5.1,9.3,8.1c2.7,3,5.3,7,7.1,10.6 c1.8,3.8,3.4,8.4,4.2,12.5c0.8,4.3,1.1,9.3,0.7,13.7c-0.4,4.5-1.5,9.6-3,13.8c-1.6,4.4-4.1,9.2-6.7,13c-2.8,3.9-6.5,8-10.2,11.1 c-3.8,3.2-8.7,6.2-13.2,8.3c-4.6,2.1-10.3,3.8-15.3,4.7c-5.2,0.9-11.3,1-16.5,0.5c-5.4-0.5-11.5-2-16.5-3.9 c-5.2-2-10.8-5.1-15.3-8.3c-4.6-3.4-9.4-7.9-13-12.4c-3.7-4.6-7.2-10.4-9.5-15.8c-2.4-5.5-4.3-12.2-5.2-18.1 c-0.9-6.1-1-13.2-0.3-19.3c0.7-6.3,2.5-13.4,4.9-19.2c2.4-6,6.1-12.5,10-17.7c4-5.3,9.3-10.7,14.6-14.8c5.3-4.2,12.1-8.1,18.3-10.7 c6.4-2.7,14.1-4.8,21-5.7c7-1,15.2-1,22.2-0.1c7.2,0.9,15.2,3.1,21.9,5.8c5.6,2.2,12.3,3.9,18.3,4.6c5.8,0.7,12.6,0.5,18.4-0.4 c5.6-0.9,12-2.7,17.2-5c5.1-2.3,10.6-5.6,14.9-9.1c4.2-3.4,8.5-8,11.7-12.3c3.1-4.3,6-9.6,7.8-14.5c1.8-4.8,3.1-10.5,3.6-15.6 c0.5-4.9,0.3-10.7-0.6-15.6c-0.8-4.7-2.5-10.1-4.5-14.4c-2-4.2-4.9-8.8-7.9-12.3c-2.9-3.4-6.8-6.9-10.5-9.5 c-3.6-2.5-8.1-4.8-12.2-6.2c-4-1.4-8.7-2.4-12.9-2.7c-4-0.3-8.7,0-12.7,0.8c-3.8,0.8-8.1,2.2-11.6,4c-3.4,1.7-7,4.1-9.7,6.6 c-2.7,2.4-5.4,5.6-7.3,8.6c-1.9,2.9-3.6,6.5-4.6,9.8c-1,3.2-1.6,6.9-1.7,10.2c-0.1,3.2,0.3,6.8,1,9.9c0.7,2.9,2,6.2,3.5,8.8 c1.4,2.5,3.4,5.1,5.4,7.2c1.9,1.9,4.4,3.8,6.8,5.2c2.2,1.3,5,2.4,7.5,3c2.3,0.6,5.1,0.9,7.6,0.8c2.3-0.1,4.9-0.5,7-1.3 c2-0.7,4.2-1.7,6-2.9c1.6-1.1,3.3-2.7,4.6-4.2c1.2-1.4,2.3-3.2,3-4.9c0.7-1.6,1.2-3.5,1.3-5.1c0.2-1.5,0.1-3.3-0.2-4.9 c-0.3-1.4-0.8-2.9-1.5-4.2c-0.6-1.1-1.5-2.3-2.4-3.2c-0.8-0.8-1.9-1.5-3-2c-0.9-0.4-2.1-0.7-3.1-0.8c-0.9-0.1-1.9,0-2.8,0.3 c-0.7,0.2-1.6,0.6-2.2,1.1c-0.5,0.4-1,1.1-1.3,1.7c-0.3,0.6-0.4,1.3-0.4,1.9c0,0.6,0.2,1.2,0.6,1.7c0.3,0.5,0.5,1.2,0.6,1.7 c0,0.6-0.1,1.3-0.4,1.9c-0.3,0.6-0.8,1.3-1.3,1.7c-0.6,0.5-1.4,0.9-2.2,1.1c-0.9,0.3-1.9,0.3-2.8,0.3c-1-0.1-2.2-0.4-3.1-0.8 c-1-0.5-2.1-1.2-3-2c-0.9-0.9-1.8-2.1-2.4-3.2c-0.7-1.2-1.2-2.8-1.5-4.2c-0.3-1.5-0.4-3.3-0.2-4.9c0.2-1.7,0.7-3.6,1.3-5.1 c0.7-1.7,1.8-3.5,3-4.9c1.3-1.5,3-3.1,4.6-4.2c1.8-1.2,4-2.3,6-2.9c2.2-0.7,4.8-1.2,7-1.3c2.4-0.1,5.2,0.2,7.6,0.8 c2.5,0.6,5.3,1.7,7.5,3c2.4,1.3,4.9,3.2,6.8,5.2c2,2,4,4.7,5.4,7.2c1.5,2.6,2.7,5.9,3.5,8.8c0.8,3.1,1.1,6.7,1,9.9 c-0.1,3.3-0.7,7.1-1.7,10.2c-1,3.3-2.7,6.9-4.6,9.8c-1.9,3-4.7,6.2-7.3,8.6c-2.8,2.5-6.4,5-9.7,6.6c-3.5,1.8-7.8,3.2-11.6,4 c-4,0.8-8.7,1.1-12.7,0.8c-4.2-0.3-9-1.3-12.9-2.7c-4.1-1.4-8.6-3.7-12.2-6.2c-3.7-2.6-7.6-6.1-10.5-9.5c-3-3.6-5.9-8.1-7.9-12.3 c-2-4.4-3.7-9.7-4.5-14.4c-0.8-4.9-1.1-10.6-0.6-15.6c0.5-5.1,1.8-10.8,3.6-15.6c1.8-4.9,4.7-10.3,7.8-14.5 c3.2-4.4,7.5-8.9,11.7-12.3c4.3-3.5,9.8-6.9,14.9-9.1c5.2-2.3,11.6-4.2,17.2-5c5.8-0.9,12.6-1,18.4-0.4c6,0.7,12.7,2.4,18.3,4.6 c5.7,2.3,12,5.7,16.9,9.4c5.1,3.8,10.3,8.9,14.2,13.8c4,5.1,7.8,11.5,10.3,17.5c2.6,6.1,4.6,13.5,5.5,20c0.9,6.7,1,14.5,0.1,21.2 c-0.9,6.9-2.9,14.6-5.5,21c-2.7,6.5-6.8,13.6-11,19.3c-4.4,5.7-10.3,11.7-16,16c-4.7,3.7-9.5,8.7-13.1,13.6 c-3.5,4.7-6.8,10.7-8.9,16.1c-2.1,5.3-3.6,11.7-4.3,17.4c-0.6,5.5-0.4,12,0.4,17.5c0.9,5.3,2.6,11.3,4.9,16.3c2.2,4.8,5.4,10,8.7,14 c3.2,3.9,7.6,8,11.7,10.9c4,2.9,9.1,5.6,13.8,7.3c4.5,1.7,9.9,2.9,14.7,3.3c4.6,0.4,10,0.2,14.6-0.7c4.4-0.8,9.4-2.4,13.5-4.3 c3.9-1.9,8.2-4.6,11.5-7.5c3.2-2.7,6.4-6.4,8.8-9.9c2.3-3.4,4.4-7.6,5.7-11.4c1.2-3.7,2.1-8.1,2.3-12c0.2-3.7-0.1-8.1-0.9-11.8 c-0.8-3.5-2.2-7.5-3.8-10.7c-1.6-3.1-3.9-6.3-6.2-8.9c-2.2-2.4-5.2-4.9-8-6.6c-2.7-1.7-6-3.2-9.1-4c-2.9-0.8-6.3-1.4-9.3-1.4 c-2.9,0-6.2,0.4-8.9,1.1c-2.6,0.7-5.5,1.9-7.9,3.3c-2.2,1.3-4.5,3.2-6.3,5c-1.7,1.8-3.3,4-4.4,6.2c-1.1,2-2,4.5-2.4,6.7 c-0.4,2.1-0.6,4.5-0.4,6.7c0.2,2,0.6,4.2,1.3,6.1c0.6,1.7,1.7,3.6,2.8,5.1c1,1.3,2.4,2.7,3.8,3.7c1.3,0.9,2.8,1.8,4.3,2.3 c1.3,0.5,2.9,0.8,4.4,0.8c1.3,0,2.7-0.1,4-0.5c1.1-0.3,2.3-0.9,3.2-1.6c0.8-0.6,1.7-1.4,2.2-2.3c0.5-0.7,0.9-1.7,1.2-2.6 c0.2-0.8,0.2-1.7,0.1-2.5c-0.1-0.7-0.4-1.4-0.8-2c-0.4-0.5-0.9-1-1.5-1.3C285,263.7,284.3,263.6,283.7,263.6L283.7,263.6z\" />\n</svg>\n`)}`\n\nexport class LuteWallet extends BaseWallet {\n private client: LuteConnect | null = null\n private options: LuteConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.LUTE>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.siteName) {\n throw new Error('[LuteWallet] Missing required option: siteName')\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Lute',\n icon: ICON\n }\n\n private async initializeClient(): Promise<LuteConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('lute-connect')\n const LuteConnect = module.default\n\n const client = new LuteConnect(this.options.siteName as string)\n this.client = client\n return client\n }\n\n private async getGenesisId(): Promise<string> {\n const algodClient = this.getAlgodClient()\n const genesis = await algodClient.genesis().do()\n const genesisId = `${genesis.network}-${genesis.id}`\n\n return genesisId\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const genesisId = await this.getGenesisId()\n const accounts = await client.connect(genesisId)\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n await this.initializeClient()\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signTxnsResult = await client.signTxns(txnsToSign)\n\n return signTxnsResult\n } catch (error) {\n if (isSignTxnsError(error)) {\n throw new SignTxnsError(error.message, error.code)\n }\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { InstanceWithExtensions, SDKBase } from '@magic-sdk/provider'\nimport type { AlgorandExtension } from '@magic-ext/algorand'\nimport type { MagicUserMetadata } from 'magic-sdk'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\n/** @see https://magic.link/docs/blockchains/other-chains/other/algorand */\n\nexport interface MagicAuthOptions {\n apiKey?: string\n}\n\nexport type MagicAuthClient = InstanceWithExtensions<\n SDKBase,\n {\n algorand: AlgorandExtension\n }\n>\n\n// @todo: export after switching to namespace exports (collides with Exodus.SignTxnsResult)\ntype SignTxnsResult = (string | undefined)[]\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 47 47\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"#6851FF\" d=\"M 23.960861 1.80769 C 25.835077 4.103153 27.902216 6.23489 30.137539 8.178169 C 28.647968 13.009323 27.846092 18.142094 27.846092 23.462154 C 27.846092 28.782307 28.648062 33.915169 30.13763 38.746368 C 27.902216 40.689724 25.835077 42.821476 23.960861 45.116985 C 22.086554 42.821476 20.019415 40.689632 17.783998 38.746368 C 19.273476 33.915169 20.075445 28.7824 20.075445 23.462337 C 20.075445 18.142277 19.273476 13.009506 17.783998 8.178318 C 20.019415 6.235001 22.086554 4.10321 23.960861 1.80769 Z M 13.511427 35.406403 C 11.145139 33.747814 8.633816 32.282063 6.000269 31.031937 C 6.730776 28.637476 7.123754 26.095783 7.123754 23.462429 C 7.123754 20.828892 6.730762 18.287201 6.000235 15.892738 C 8.633816 14.642616 11.145175 13.176861 13.511501 11.518276 C 14.416311 15.352554 14.895074 19.351414 14.895074 23.462154 C 14.895074 27.572985 14.416283 31.571938 13.511427 35.406403 Z M 33.027046 23.462337 C 33.027046 27.572985 33.505753 31.571846 34.410553 35.406124 C 36.776859 33.747631 39.288094 32.281876 41.921539 31.031845 C 41.191017 28.637384 40.798061 26.095692 40.798061 23.462246 C 40.798061 20.8288 41.191017 18.287201 41.921539 15.89283 C 39.288094 14.642708 36.776768 13.177048 34.410553 11.518555 C 33.505753 15.352831 33.027046 19.351692 33.027046 23.462337 Z\" />\n</svg>\n`)}`\n\nexport class MagicAuth extends BaseWallet {\n private client: MagicAuthClient | null = null\n private options: MagicAuthOptions\n\n protected store: Store<State>\n public userInfo: MagicUserMetadata | null = null\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MAGIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.apiKey) {\n throw new Error(`[${this.metadata.name}] Missing required option: apiKey`)\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Magic',\n icon: ICON\n }\n\n private async initializeClient(): Promise<MagicAuthClient> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const Magic = (await import('magic-sdk')).Magic\n const AlgorandExtension = (await import('@magic-ext/algorand')).AlgorandExtension\n const client = new Magic(this.options.apiKey as string, {\n extensions: {\n algorand: new AlgorandExtension({\n rpcUrl: ''\n })\n }\n })\n this.client = client\n return client\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n if (!args?.email || typeof args.email !== 'string') {\n throw new Error('Magic Link provider requires an email (string) to connect')\n }\n\n const { email } = args\n\n const client = this.client || (await this.initializeClient())\n\n console.info(`[${this.metadata.name}] Logging in ${email}...`)\n await client.auth.loginWithMagicLink({ email })\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n console.info(`[${this.metadata.name}] Login successful`, userInfo)\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? 'Magic Wallet 1',\n address: userInfo.publicAddress\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n console.info(`[${this.metadata.name}] Logging out ${this.userInfo?.email || 'user'}...`)\n await client.user.logout()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n const client = this.client || (await this.initializeClient())\n const isLoggedIn = await client.user.isLoggedIn()\n\n if (!isLoggedIn) {\n console.warn(`[${this.metadata.name}] Not logged in, please reconnect...`)\n this.onDisconnect()\n return\n }\n\n const userInfo = await client.user.getInfo()\n\n if (!userInfo) {\n await client.user.logout()\n throw new Error('User info not found!')\n }\n\n if (!userInfo.publicAddress) {\n await client.user.logout()\n throw new Error('No account found!')\n }\n\n this.userInfo = userInfo\n\n const walletAccount: WalletAccount = {\n name: userInfo.email ?? `${this.metadata.name} Account 1`,\n address: userInfo.publicAddress\n }\n\n const storedAccount = walletState.accounts[0]\n\n const { name, address } = walletAccount\n const { name: storedName, address: storedAddress } = storedAccount\n\n const match = name === storedName && address === storedAddress\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session account mismatch, updating account`, {\n prev: storedAccount,\n current: walletAccount\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: [walletAccount]\n })\n }\n console.info(`[${this.metadata.name}] Session resumed.`)\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signTxnsResult = (await client.algorand.signGroupTransactionV2(\n txnsToSign\n )) as SignTxnsResult\n\n // Convert base64 to Uint8Array, undefined to null\n const result = signTxnsResult.map((value) => {\n if (value === undefined) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { NetworkId } from 'src/network'\nimport { StorageAdapter } from 'src/storage'\nimport { LOCAL_STORAGE_KEY, WalletState, addWallet, type State } from 'src/store'\nimport { flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\nexport type MnemonicOptions = {\n persistToStorage?: boolean\n}\n\nexport const LOCAL_STORAGE_MNEMONIC_KEY = `${LOCAL_STORAGE_KEY}_mnemonic`\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#525252\" width=\"400\" height=\"400\" />\n <path fill=\"#FFFFFF\" d=\"M309.2,309.3H275l-22.2-82.7l-47.9,82.7h-38.3l73.9-128l-11.9-44.5l-99.6,172.6H90.8L217.1,90.6 h33.5l14.7,54.3h34.6l-23.6,41L309.2,309.3z\" />\n</svg>\n`)}`\n\nexport class MnemonicWallet extends BaseWallet {\n private account: algosdk.Account | null = null\n private options: MnemonicOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.MNEMONIC>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n\n const { persistToStorage = false } = options || {}\n this.options = { persistToStorage }\n\n this.store = store\n\n if (this.options.persistToStorage) {\n console.warn(\n `[${this.metadata.name}] Persisting mnemonics to storage is insecure. Any private key mnemonics used should never hold real Algos (i.e., on MainNet). Use with caution!`\n )\n }\n }\n\n static defaultMetadata = {\n name: 'Mnemonic',\n icon: ICON\n }\n\n private loadMnemonicFromStorage(): string | null {\n return StorageAdapter.getItem(LOCAL_STORAGE_MNEMONIC_KEY)\n }\n\n private saveMnemonicToStorage(mnemonic: string): void {\n StorageAdapter.setItem(LOCAL_STORAGE_MNEMONIC_KEY, mnemonic)\n }\n\n private checkMainnet(): void {\n try {\n const network = this.activeNetwork\n if (network === NetworkId.MAINNET) {\n console.warn(\n `[${this.metadata.name}] The Mnemonic wallet provider is insecure and intended for testing only. Any private key mnemonics used should never hold real Algos (i.e., on MainNet).`\n )\n throw new Error('MainNet active network detected. Aborting.')\n }\n } catch (error) {\n this.disconnect()\n throw error\n }\n }\n\n private initializeAccount(): algosdk.Account {\n let mnemonic = this.loadMnemonicFromStorage()\n if (!mnemonic) {\n mnemonic = prompt('Enter 25-word mnemonic passphrase:')\n if (!mnemonic) {\n this.account = null\n throw new Error('No mnemonic provided')\n }\n\n if (this.options.persistToStorage) {\n console.warn(`[${this.metadata.name}] Mnemonic saved to localStorage.`)\n this.saveMnemonicToStorage(mnemonic)\n }\n }\n\n const account = algosdk.mnemonicToSecretKey(mnemonic)\n this.account = account\n return account\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n console.info(`[${this.metadata.name}] Connecting...`)\n const account = this.initializeAccount()\n\n const walletAccount = {\n name: `${this.metadata.name} Account`,\n address: account.addr\n }\n\n const walletState: WalletState = {\n accounts: [walletAccount],\n activeAccount: walletAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return [walletAccount]\n }\n\n public disconnect = async (): Promise<void> => {\n this.onDisconnect()\n this.account = null\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // Don't resume session, disconnect instead\n if (walletState) {\n this.disconnect()\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = signer === this.account!.addr\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): algosdk.Transaction[] {\n const txnsToSign: algosdk.Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && signer === this.account!.addr\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push(txn)\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n // Throw error if MainNet is active\n this.checkMainnet()\n\n let txnsToSign: algosdk.Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n // Sign transactions\n const signedTxns = txnsToSign.map((txn) => txn.signTxn(this.account!.sk))\n return signedTxns\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { PeraWalletConnect } from '@perawallet/connect'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignerTransaction,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport interface PeraWalletConnectOptions {\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n compactMode?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#FFEE55\" width=\"200\" height=\"200\" />\n <path fill=\"#1C1C1C\" d=\"M106.1,64.3c2.2,9.1,1.5,17-1.7,17.8c-3.1,0.8-7.4-6-9.6-15c-2.2-9.1-1.5-17,1.7-17.8 C99.6,48.5,103.9,55.2,106.1,64.3z\" />\n <path fill=\"#1C1C1C\" d=\"M142.2,72.1c-4.8-5.1-14.5-3.7-21.6,3.1c-7,6.9-8.8,16.6-4,21.7c4.8,5.1,14.5,3.7,21.6-3.1 C145.3,86.9,147.1,77.2,142.2,72.1z\" />\n <path fill=\"#1C1C1C\" d=\"M103.7,150.8c3.1-0.8,3.7-9.2,1.4-18.8c-2.3-9.6-6.7-16.8-9.8-16c-3.1,0.8-3.7,9.2-1.4,18.8 C96.2,144.3,100.6,151.5,103.7,150.8z\" />\n <path fill=\"#1C1C1C\" d=\"M72.1,76.8c9,2.6,15.5,7.3,14.6,10.3c-0.9,3.1-8.9,3.4-17.8,0.8s-15.5-7.3-14.6-10.3 C55.1,74.5,63.1,74.1,72.1,76.8z\" />\n <path fill=\"#1C1C1C\" d=\"M130.2,111.5c9.5,2.8,16.5,7.6,15.6,10.6c-0.9,3.1-9.3,3.3-18.8,0.5c-9.5-2.8-16.5-7.6-15.6-10.6 C112.2,108.9,120.7,108.7,130.2,111.5z\" />\n <path fill=\"#1C1C1C\" d=\"M82.1,105c-2.2-2.3-9.5,1-16.3,7.5c-6.8,6.4-10.4,13.5-8.2,15.8c2.2,2.3,9.5-1,16.3-7.5 C80.7,114.4,84.3,107.3,82.1,105z\" />\n</svg>\n`)}`\n\nexport class PeraWallet extends BaseWallet {\n private client: PeraWalletConnect | null = null\n private options: PeraWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options = {},\n metadata = {}\n }: WalletConstructor<WalletId.PERA>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Pera',\n icon: ICON\n }\n\n private async initializeClient(): Promise<PeraWalletConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('@perawallet/connect')\n const PeraWalletConnect = module.default\n ? module.default.PeraWalletConnect\n : module.PeraWalletConnect\n\n const client = new PeraWalletConnect(this.options)\n client.connector?.on('disconnect', this.onDisconnect)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n await client.disconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts, flattenTxnGroup, isSignedTxn, isTransactionArray } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { PeraWalletConnect } from '@perawallet/connect-beta'\nimport type { Store } from '@tanstack/store'\nimport type {\n SignerTransaction,\n WalletAccount,\n WalletConstructor,\n WalletId\n} from 'src/wallets/types'\n\nexport interface PeraWalletConnectOptions {\n projectId: string\n bridge?: string\n shouldShowSignTxnToast?: boolean\n chainId?: 416001 | 416002 | 416003 | 4160\n compactMode?: boolean\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 200 200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#FFEE55\" width=\"200\" height=\"200\" />\n <path fill=\"#1C1C1C\" d=\"M106.1,64.3c2.2,9.1,1.5,17-1.7,17.8c-3.1,0.8-7.4-6-9.6-15c-2.2-9.1-1.5-17,1.7-17.8 C99.6,48.5,103.9,55.2,106.1,64.3z\" />\n <path fill=\"#1C1C1C\" d=\"M142.2,72.1c-4.8-5.1-14.5-3.7-21.6,3.1c-7,6.9-8.8,16.6-4,21.7c4.8,5.1,14.5,3.7,21.6-3.1 C145.3,86.9,147.1,77.2,142.2,72.1z\" />\n <path fill=\"#1C1C1C\" d=\"M103.7,150.8c3.1-0.8,3.7-9.2,1.4-18.8c-2.3-9.6-6.7-16.8-9.8-16c-3.1,0.8-3.7,9.2-1.4,18.8 C96.2,144.3,100.6,151.5,103.7,150.8z\" />\n <path fill=\"#1C1C1C\" d=\"M72.1,76.8c9,2.6,15.5,7.3,14.6,10.3c-0.9,3.1-8.9,3.4-17.8,0.8s-15.5-7.3-14.6-10.3 C55.1,74.5,63.1,74.1,72.1,76.8z\" />\n <path fill=\"#1C1C1C\" d=\"M130.2,111.5c9.5,2.8,16.5,7.6,15.6,10.6c-0.9,3.1-9.3,3.3-18.8,0.5c-9.5-2.8-16.5-7.6-15.6-10.6 C112.2,108.9,120.7,108.7,130.2,111.5z\" />\n <path fill=\"#1C1C1C\" d=\"M82.1,105c-2.2-2.3-9.5,1-16.3,7.5c-6.8,6.4-10.4,13.5-8.2,15.8c2.2,2.3,9.5-1,16.3-7.5 C80.7,114.4,84.3,107.3,82.1,105z\" />\n</svg>\n`)}`\n\nexport class PeraWallet extends BaseWallet {\n private client: PeraWalletConnect | null = null\n private options: PeraWalletConnectOptions\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.PERA2>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.projectId) {\n throw new Error(`[${this.metadata.name}] Missing required option: projectId`)\n }\n this.options = options\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Pera',\n icon: ICON\n }\n\n private async initializeClient(): Promise<PeraWalletConnect> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const module = await import('@perawallet/connect-beta')\n\n const PeraWalletConnect = module.PeraWalletConnect || module.default.PeraWalletConnect\n\n const client = new PeraWalletConnect(this.options)\n client.client?.on('session_delete', this.onDisconnect)\n this.client = client\n return client\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n const client = this.client || (await this.initializeClient())\n const accounts = await client.connect()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n const client = this.client || (await this.initializeClient())\n await client.disconnect()\n console.info(`[${this.metadata.name}] Disconnected.`)\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n const accounts = await client.reconnectSession()\n\n if (accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): SignerTransaction[] {\n const txnsToSign: SignerTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn })\n } else {\n txnsToSign.push({ txn, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n let txnsToSign: SignerTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Sign transactions\n const signedTxns = await client.signTransaction([txnsToSign])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n }\n}\n","import algosdk from 'algosdk'\nimport { caipChainId } from 'src/network'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport {\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n formatJsonRpcRequest,\n isSignedTxn,\n isTransactionArray\n} from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletConnectModal, WalletConnectModalConfig } from '@walletconnect/modal'\nimport type SignClient from '@walletconnect/sign-client'\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types'\nimport type {\n WalletAccount,\n WalletConstructor,\n WalletId,\n WalletTransaction\n} from 'src/wallets/types'\n\ninterface SignClientOptions {\n projectId: string\n relayUrl?: string\n metadata?: SignClientTypes.Metadata\n}\n\ntype WalletConnectModalOptions = Pick<\n WalletConnectModalConfig,\n | 'enableExplorer'\n | 'explorerRecommendedWalletIds'\n | 'privacyPolicyUrl'\n | 'termsOfServiceUrl'\n | 'themeMode'\n | 'themeVariables'\n>\n\nexport type WalletConnectOptions = SignClientOptions & WalletConnectModalOptions\n\nexport type SignTxnsResponse = Array<Uint8Array | number[] | string | null | undefined>\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionError'\n }\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"480\" height=\"480\" fill=\"#FFFFFF\" />\n <path fill=\"#3396FF\" d=\"M126.6,168c62.6-61.3,164.2-61.3,226.8,0l7.5,7.4c3.1,3.1,3.1,8,0,11.1l-25.8,25.2c-1.6,1.5-4.1,1.5-5.7,0l-10.4-10.2c-43.7-42.8-114.5-42.8-158.2,0l-11.1,10.9c-1.6,1.5-4.1,1.5-5.7,0l-25.8-25.2c-3.1-3.1-3.1-8,0-11.1L126.6,168zM406.7,220.2l22.9,22.5c3.1,3.1,3.1,8,0,11.1L326.2,355.1c-3.1,3.1-8.2,3.1-11.3,0l-73.4-71.9c-0.8-0.8-2.1-0.8-2.8,0l-73.4,71.9c-3.1,3.1-8.2,3.1-11.3,0L50.3,253.8c-3.1-3.1-3.1-8,0-11.1l22.9-22.5c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0 l73.4-71.9c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0l73.4-71.9C398.5,217.1,403.6,217.1,406.7,220.2L406.7,220.2z\" />\n</svg>\n`)}`\n\nexport class WalletConnect extends BaseWallet {\n private client: SignClient | null = null\n private options: SignClientOptions\n private modal: WalletConnectModal | null = null\n private modalOptions: WalletConnectModalOptions\n private session: SessionTypes.Struct | null = null\n private chains: string[]\n\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.WALLETCONNECT>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.projectId) {\n throw new Error(`[${this.metadata.name}] Missing required option: projectId`)\n }\n\n const {\n projectId,\n relayUrl = 'wss://relay.walletconnect.com',\n metadata: metadataOptions,\n ...modalOptions\n } = options\n\n const clientMetadata: SignClientTypes.Metadata = {\n ...this.getWindowMetadata(),\n ...metadataOptions\n }\n\n this.options = {\n projectId,\n relayUrl,\n metadata: clientMetadata\n }\n\n this.modalOptions = modalOptions\n this.chains = Object.values(caipChainId)\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'WalletConnect',\n icon: ICON\n }\n\n /**\n * Get metadata from the current window. This is adapted from the @walletconnect/utils\n * implementation, to avoid requiring the entire package as a dependency.\n * @see https://github.com/WalletConnect/walletconnect-utils/blob/master/browser/window-metadata/src/index.ts\n */\n private getWindowMetadata(): SignClientTypes.Metadata {\n let doc: Document\n let loc: Location\n\n const defaultMetadata = {\n name: '',\n description: '',\n url: '',\n icons: []\n }\n\n function getFromWindow<T>(name: string): T | undefined {\n let res: T | undefined\n if (typeof window !== 'undefined' && typeof (window as any)[name] !== 'undefined') {\n res = (window as any)[name]\n }\n return res\n }\n\n function getFromWindowOrThrow<T>(name: string): T {\n const res = getFromWindow<T>(name)\n if (!res) {\n throw new Error(`${name} is not defined in Window`)\n }\n return res\n }\n\n function getDocumentOrThrow(): Document {\n return getFromWindowOrThrow<Document>('document')\n }\n\n function getLocationOrThrow(): Location {\n return getFromWindowOrThrow<Location>('location')\n }\n\n try {\n doc = getDocumentOrThrow()\n loc = getLocationOrThrow()\n } catch (error) {\n console.warn(`[${this.metadata.name}] Error getting window metadata:`, error)\n return defaultMetadata\n }\n\n function getIcons(): string[] {\n const links: HTMLCollectionOf<HTMLLinkElement> = doc.getElementsByTagName('link')\n const icons: string[] = []\n\n for (let i = 0; i < links.length; i++) {\n const link: HTMLLinkElement = links[i]\n\n const rel: string | null = link.getAttribute('rel')\n if (rel) {\n if (rel.toLowerCase().indexOf('icon') > -1) {\n const href: string | null = link.getAttribute('href')\n\n if (href) {\n if (\n href.toLowerCase().indexOf('https:') === -1 &&\n href.toLowerCase().indexOf('http:') === -1 &&\n href.indexOf('//') !== 0\n ) {\n let absoluteHref: string = loc.protocol + '//' + loc.host\n\n if (href.indexOf('/') === 0) {\n absoluteHref += href\n } else {\n const path: string[] = loc.pathname.split('/')\n path.pop()\n const finalPath: string = path.join('/')\n absoluteHref += finalPath + '/' + href\n }\n\n icons.push(absoluteHref)\n } else if (href.indexOf('//') === 0) {\n const absoluteUrl: string = loc.protocol + href\n\n icons.push(absoluteUrl)\n } else {\n icons.push(href)\n }\n }\n }\n }\n }\n\n return icons\n }\n\n function getWindowMetadataOfAny(...args: string[]): string {\n const metaTags: HTMLCollectionOf<HTMLMetaElement> = doc.getElementsByTagName('meta')\n\n for (let i = 0; i < metaTags.length; i++) {\n const tag: HTMLMetaElement = metaTags[i]\n const attributes: Array<string | null> = ['itemprop', 'property', 'name']\n .map((target: string) => tag.getAttribute(target))\n .filter((attr: string | null) => {\n if (attr) {\n return args.includes(attr)\n }\n return false\n })\n\n if (attributes.length && attributes) {\n const content: string | null = tag.getAttribute('content')\n if (content) {\n return content\n }\n }\n }\n\n return ''\n }\n\n function getName(): string {\n let name: string = getWindowMetadataOfAny('name', 'og:site_name', 'og:title', 'twitter:title')\n\n if (!name) {\n name = doc.title\n }\n\n return name\n }\n\n function getDescription(): string {\n const description: string = getWindowMetadataOfAny(\n 'description',\n 'og:description',\n 'twitter:description',\n 'keywords'\n )\n\n return description\n }\n\n const name: string = getName()\n const description: string = getDescription()\n const url: string = loc.origin\n const icons: string[] = getIcons()\n\n const meta: SignClientTypes.Metadata = {\n description,\n url,\n icons,\n name\n }\n\n return meta\n }\n\n private async initializeClient(): Promise<SignClient> {\n console.info(`[${this.metadata.name}] Initializing client...`)\n const SignClient = (await import('@walletconnect/sign-client')).SignClient\n const client = await SignClient.init(this.options)\n\n client.on('session_event', (args) => {\n console.log(`[${this.metadata.name}] EVENT`, 'session_event', args)\n })\n\n client.on('session_update', ({ topic, params }) => {\n console.log(`[${this.metadata.name}] EVENT`, 'session_update', { topic, params })\n const { namespaces } = params\n const session = client.session.get(topic)\n const updatedSession = { ...session, namespaces }\n this.onSessionConnected(updatedSession)\n })\n\n client.on('session_delete', () => {\n console.log(`[${this.metadata.name}] EVENT`, 'session_delete')\n this.session = null\n })\n\n this.client = client\n return client\n }\n\n private async initializeModal(): Promise<WalletConnectModal> {\n console.info(`[${this.metadata.name}] Initializing modal...`)\n const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal\n const modal = new WalletConnectModal({\n projectId: this.options.projectId,\n chains: this.chains,\n ...this.modalOptions\n })\n\n modal.subscribeModal((state) =>\n console.info(`[${this.metadata.name}] Modal ${state.open ? 'open' : 'closed'}`)\n )\n\n this.modal = modal\n return modal\n }\n\n private onSessionConnected(session: SessionTypes.Struct): WalletAccount[] {\n const caipAccounts = session.namespaces.algorand!.accounts\n\n if (!caipAccounts.length) {\n throw new Error('No accounts found!')\n }\n\n // @todo: Validate format of CAIP-10 accounts\n\n // Filter duplicate accounts (same address, different chain)\n const accounts = [...new Set(caipAccounts.map((account) => account.split(':').pop()!))]\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n if (!walletState) {\n const newWalletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: newWalletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, newWalletState)\n } else {\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n }\n\n this.session = session\n return walletAccounts\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n try {\n const client = this.client || (await this.initializeClient())\n const modal = this.modal || (await this.initializeModal())\n\n const requiredNamespaces = {\n algorand: {\n chains: this.chains,\n methods: ['algo_signTxn'],\n events: []\n }\n }\n\n const { uri, approval } = await client.connect({ requiredNamespaces })\n\n if (!uri) {\n throw new Error('No URI found')\n }\n\n await modal.openModal({ uri })\n\n const session = await approval()\n const walletAccounts = this.onSessionConnected(session)\n\n return walletAccounts\n } finally {\n this.modal?.closeModal()\n }\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n try {\n this.onDisconnect()\n if (this.client && this.session) {\n await this.client.disconnect({\n topic: this.session.topic,\n reason: {\n message: 'User disconnected.',\n code: 6000\n }\n })\n }\n console.info(`[${this.metadata.name}] Disconnected.`)\n } catch (error: any) {\n console.error(error)\n }\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const client = this.client || (await this.initializeClient())\n\n if (client.session.length) {\n const lastKeyIndex = client.session.keys.length - 1\n const restoredSession = client.session.get(client.session.keys[lastKeyIndex])\n this.onSessionConnected(restoredSession)\n }\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session: ${error.message}`)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const txnDecodeObj = algosdk.decodeObj(txnBuffer) as\n | algosdk.EncodedTransaction\n | algosdk.EncodedSignedTransaction\n\n const isSigned = isSignedTxn(txnDecodeObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = algosdk.encodeAddress(txn.from.publicKey)\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n if (!this.session) {\n throw new SessionError(`No session found!`)\n }\n\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n // Format JSON-RPC request\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign])\n\n // Sign transactions\n const signTxnsResult = await client.request<SignTxnsResponse>({\n chainId: caipChainId[this.activeNetwork]!,\n topic: this.session.topic,\n request\n })\n\n // Filter out unsigned transactions, convert signed transactions to Uint8Array\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value) {\n let signedTxn: Uint8Array\n if (typeof value === 'string') {\n signedTxn = base64ToByteArray(value)\n } else if (value instanceof Uint8Array) {\n signedTxn = value\n } else if (Array.isArray(value)) {\n signedTxn = new Uint8Array(value)\n } else {\n // Log unexpected types for debugging\n console.warn(`[${this.metadata.name}] Unexpected type in signTxnsResult`, value)\n signedTxn = new Uint8Array()\n }\n acc.push(signedTxn)\n }\n return acc\n }, [])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n return result\n } catch (error) {\n if (error instanceof SessionError) {\n this.onDisconnect()\n }\n console.error(`[${this.metadata.name}] Error signing transactions:`, error)\n throw error\n }\n }\n}\n","import algosdk from 'algosdk'\nimport { WalletId, type JsonRpcRequest, type WalletAccount, type WalletMap } from './wallets/types'\nimport { CustomWallet } from './wallets/custom'\nimport { DeflyWallet } from './wallets/defly'\nimport { ExodusWallet } from './wallets/exodus'\nimport { KibisisWallet } from './wallets/kibisis'\nimport { KmdWallet } from './wallets/kmd'\nimport { LuteWallet } from './wallets/lute'\nimport { MagicAuth } from './wallets/magic'\nimport { MnemonicWallet } from './wallets/mnemonic'\nimport { PeraWallet } from './wallets/pera'\nimport { PeraWallet as PeraWalletBeta } from './wallets/pera2'\nimport { WalletConnect } from './wallets/walletconnect'\n\nexport function createWalletMap(): WalletMap {\n return {\n [WalletId.CUSTOM]: CustomWallet,\n [WalletId.DEFLY]: DeflyWallet,\n [WalletId.EXODUS]: ExodusWallet,\n [WalletId.KIBISIS]: KibisisWallet,\n [WalletId.KMD]: KmdWallet,\n [WalletId.LUTE]: LuteWallet,\n [WalletId.MAGIC]: MagicAuth,\n [WalletId.MNEMONIC]: MnemonicWallet,\n [WalletId.PERA]: PeraWallet,\n [WalletId.PERA2]: PeraWalletBeta,\n [WalletId.WALLETCONNECT]: WalletConnect\n }\n}\n\nexport function compareAccounts(accounts: WalletAccount[], compareTo: WalletAccount[]): boolean {\n const addresses = new Set(accounts.map((account) => account.address))\n const compareAddresses = new Set(compareTo.map((account) => account.address))\n\n if (addresses.size !== compareAddresses.size) {\n return false\n }\n\n // Check if every address in addresses is also in compareAddresses\n for (const address of addresses) {\n if (!compareAddresses.has(address)) {\n return false\n }\n }\n\n return true\n}\n\nexport function base64ToByteArray(blob: string): Uint8Array {\n return stringToByteArray(atob(blob))\n}\n\nexport function byteArrayToBase64(array: Uint8Array): string {\n return btoa(byteArrayToString(array))\n}\n\nexport function stringToByteArray(str: string): Uint8Array {\n const array = new Uint8Array(str.length)\n for (let i = 0; i < str.length; i++) {\n array[i] = str.charCodeAt(i)\n }\n return array\n}\n\nexport function byteArrayToString(array: Uint8Array): string {\n let result = ''\n for (let i = 0; i < array.length; i++) {\n result += String.fromCharCode(array[i])\n }\n return result\n}\n\nexport function isSignedTxn(\n txnDecodeObj: algosdk.EncodedTransaction | algosdk.EncodedSignedTransaction\n): txnDecodeObj is algosdk.EncodedSignedTransaction {\n return (txnDecodeObj as algosdk.EncodedSignedTransaction).txn !== undefined\n}\n\nexport function isTransaction(item: any): item is algosdk.Transaction {\n return (\n item && typeof item === 'object' && 'genesisID' in item && typeof item.genesisID === 'string'\n )\n}\n\nexport function isTransactionArray(\n txnGroup: any\n): txnGroup is algosdk.Transaction[] | algosdk.Transaction[][] {\n if (!Array.isArray(txnGroup) || txnGroup.length === 0) {\n return false\n }\n\n if (isTransaction(txnGroup[0])) {\n return true\n }\n\n if (Array.isArray(txnGroup[0]) && txnGroup[0].length > 0 && isTransaction(txnGroup[0][0])) {\n return true\n }\n\n return false\n}\n\nexport function flattenTxnGroup<T>(txnGroup: T[]): T extends (infer U)[] ? U[] : T[] {\n return Array.isArray(txnGroup[0]) ? ((txnGroup as any[]).flat() as any) : txnGroup\n}\n\nfunction getPayloadId(): number {\n const date = Date.now() * Math.pow(10, 3)\n const extra = Math.floor(Math.random() * Math.pow(10, 3))\n return date + extra\n}\n\nexport function formatJsonRpcRequest<T = any>(method: string, params: T): JsonRpcRequest<T> {\n return {\n id: getPayloadId(),\n jsonrpc: '2.0',\n method,\n params\n }\n}\n\nexport function deepMerge(target: any, source: any): any {\n const isObject = (obj: any) => obj && typeof obj === 'object'\n\n if (!isObject(target) || !isObject(source)) {\n throw new Error('Target and source must be objects')\n }\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n\n return target\n}\n","import algosdk from 'algosdk'\nimport { WalletState, addWallet, setAccounts, type State } from 'src/store'\nimport { compareAccounts } from 'src/utils'\nimport { BaseWallet } from 'src/wallets/base'\nimport type { Store } from '@tanstack/store'\nimport type { WalletAccount, WalletConstructor, WalletId } from 'src/wallets/types'\n\nexport type CustomProvider = {\n connect(args?: Record<string, any>): Promise<WalletAccount[]>\n disconnect?(): Promise<void>\n resumeSession?(): Promise<WalletAccount[] | void>\n signTransactions?<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]>\n transactionSigner?(\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]>\n}\n\nexport interface CustomWalletOptions {\n provider: CustomProvider\n}\n\nconst ICON = `data:image/svg+xml;base64,${btoa(`\n<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" fill=\"#525252\" />\n</svg>\n`)}`\n\nexport class CustomWallet extends BaseWallet {\n private provider: CustomProvider\n protected store: Store<State>\n\n constructor({\n id,\n store,\n subscribe,\n getAlgodClient,\n options,\n metadata = {}\n }: WalletConstructor<WalletId.CUSTOM>) {\n super({ id, metadata, getAlgodClient, store, subscribe })\n if (!options?.provider) {\n throw new Error(`[${this.metadata.name}] Missing required option: provider`)\n }\n this.provider = options.provider\n this.store = store\n }\n\n static defaultMetadata = {\n name: 'Custom',\n icon: ICON\n }\n\n public connect = async (args?: Record<string, any>): Promise<WalletAccount[]> => {\n console.info(`[${this.metadata.name}] Connecting...`)\n try {\n if (!this.provider.connect) {\n throw new Error(`[${this.metadata.name}] Method not supported: connect`)\n }\n\n const walletAccounts = await this.provider.connect(args)\n\n if (walletAccounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const activeAccount = walletAccounts[0]\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount\n }\n\n addWallet(this.store, {\n walletId: this.id,\n wallet: walletState\n })\n\n console.info(`[${this.metadata.name}] ✅ Connected.`, walletState)\n return walletAccounts\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error connecting:`, error.message || error)\n throw error\n }\n }\n\n public disconnect = async (): Promise<void> => {\n console.info(`[${this.metadata.name}] Disconnecting...`)\n this.onDisconnect()\n await this.provider.disconnect?.()\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const state = this.store.state\n const walletState = state.wallets[this.id]\n\n // No session to resume\n if (!walletState) {\n return\n }\n\n console.info(`[${this.metadata.name}] Resuming session...`)\n\n const result = await this.provider.resumeSession?.()\n\n if (Array.isArray(result)) {\n const walletAccounts = result\n\n if (walletAccounts.length === 0) {\n throw new Error(`[${this.metadata.name}] No accounts found!`)\n }\n\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n console.warn(`[${this.metadata.name}] Session accounts mismatch, updating accounts`, {\n prev: walletState.accounts,\n current: walletAccounts\n })\n setAccounts(this.store, {\n walletId: this.id,\n accounts: walletAccounts\n })\n }\n }\n console.info(`[${this.metadata.name}] Session resumed.`)\n } catch (error: any) {\n console.error(`[${this.metadata.name}] Error resuming session:`, error.message)\n throw error\n }\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n if (!this.provider.signTransactions) {\n throw new Error(`[${this.metadata.name}] Method not supported: signTransactions`)\n }\n return await this.provider.signTransactions(txnGroup, indexesToSign)\n }\n\n public transactionSigner = async (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n if (!this.provider.transactionSigner) {\n throw new Error(`[${this.metadata.name}] Method not supported: transactionSigner`)\n }\n return await this.provider.transactionSigner(txnGroup, indexesToSign)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAKA,GASAC,GAQAC,GCqCAC,GAKAC,GAmBAC,GC5EAC,GAUAC,GCZAC,GCsHAC,GAIAC,GAKAC,GAMAC,GAMAC,GAMAC,GAQAC,GAIAC,GAOAC,GAOAC,GASAC,GAMAC,GAWAC,GAIAC,GCvMAC,GCgBAC,GAIAC,GAkBAC,GCiBAC,GC+BAC;ARxFL;;;IAAK5B,KAAAA,QACVA,EAAA,gBAAgB,mBAChBA,EAAA,gBAAgB,mBAChBA,EAAA,oBAAoB,sBACpBA,EAAA,kBAAkB,oBAClBA,EAAA,0BAA0B,6BAC1BA,EAAA,yBAAyB,2BANfA,IAAAA,KAAA,CAAA,CAAA;AAAL,IASKC,KAAAA,QACVA,EAAA,iBAAiB,oBACjBA,EAAA,kBAAkB,oBAClBA,EAAA,mCAAmC,uCACnCA,EAAA,oBAAoB,sBACpBA,EAAA,sBAAsB,gBALZA,IAAAA,KAAA,CAAA,CAAA;AATL,IAiBKC,KAAAA,QAEVA,EAAAA,EAAA,aAAa,MAAA,IAAb,cACAA,EAAAA,EAAA,iBAAiB,MAAA,IAAjB,kBACAA,EAAAA,EAAA,iBAAiB,MAAA,IAAjB,kBACAA,EAAAA,EAAA,gBAAgB,MAAA,IAAhB,iBACAA,EAAAA,EAAA,gBAAgB,MAAA,IAAhB,iBAGAA,EAAAA,EAAA,8BAA8B,IAAA,IAA9B,+BACAA,EAAAA,EAAA,mBAAmB,MAAA,IAAnB,oBACAA,EAAAA,EAAA,uBAAuB,MAAA,IAAvB,wBACAA,EAAAA,EAAA,8BAA8B,MAAA,IAA9B,+BACAA,EAAAA,EAAA,sBAAsB,MAAA,IAAtB,uBACAA,EAAAA,EAAA,oBAAoB,MAAA,IAApB,qBACAA,EAAAA,EAAA,uBAAuB,MAAA,IAAvB,wBACAA,EAAAA,EAAA,oBAAoB,MAAA,IAApB,qBACAA,EAAAA,EAAA,qBAAqB,MAAA,IAArB,sBACAA,EAAAA,EAAA,wBAAwB,MAAA,IAAxB,yBAlBUA,IAAAA,KAAA,CAAA,CAAA;ACqCL,IAAKC,KAAAA,QACVA,EAAA,WAAW,YACXA,EAAA,iBAAiB,mBAFPA,IAAAA,KAAA,CAAA,CAAA;AAAL,IAKKC,KAAAA,QACVA,EAAA,iBAAiB,mBACjBA,EAAA,kBAAkB,oBAClBA,EAAA,iBAAiB,mBAHPA,IAAAA,KAAA,CAAA,CAAA;AALL,IAwBKC,KAAAA,QACVA,EAAA,eAAe,6BACfA,EAAA,oBAAoB,mCACpBA,EAAA,qBAAqB,oCACrBA,EAAA,sBAAsB,oCACtBA,EAAA,wBAAwB,sCACxBA,EAAA,aAAa,2BACbA,EAAA,kBAAkB,gCAClBA,EAAA,cAAc,2BACdA,EAAA,aAAa,sBACbA,EAAA,SAAS,qBACTA,EAAA,cAAc,2BACdA,EAAA,eAAe,uBACfA,EAAA,uBAAuB,oCACvBA,EAAA,uBAAuB,0CACvBA,EAAA,4BAA4B,gDAC5BA,EAAA,6BAA6B,4CAC7BA,EAAA,8BAA8B,iDAC9BA,EAAA,qBAAqB,wCACrBA,EAAA,0BAA0B,6CAC1BA,EAAA,sBAAsB,wCACtBA,EAAA,qBAAqB,wCACrBA,EAAA,iBAAiB,kCACjBA,EAAA,sBAAsB,wCACtBA,EAAA,oBAAoB,4BACpBA,EAAA,kBAAkB,uBAClBA,EAAA,UAAU,kBACVA,EAAA,SAAS,gBACTA,EAAA,cAAc,sBACdA,EAAA,cAAc,sBACdA,EAAA,cAAc,sBACdA,EAAA,wBAAwB,wBACxBA,EAAA,aAAa,iBAGbA,EAAA,iBAAiB,8BACjBA,EAAA,yBAAyB,2CACzBA,EAAA,oBAAoB,wBACpBA,EAAA,cAAc,mBACdA,EAAA,QAAQ,YACRA,EAAA,YAAY,yBACZA,EAAA,YAAY,yBACZA,EAAA,WAAW,mBACXA,EAAA,aAAa,0BACbA,EAAA,mBAAmB,6BACnBA,EAAA,cAAc,sBACdA,EAAA,eAAe,uBACfA,EAAA,yBAAyB,8BACzBA,EAAA,WAAW,oBACXA,EAAA,YAAY,8BACZA,EAAA,aAAa,+BAlDHA,IAAAA,KAAA,CAAA,CAAA;AC5EL,IAAKC,KAAAA,CAAAA,QACVA,GAAA,wBAAwB,yBACxBA,GAAA,sBAAsB,uBACtBA,GAAA,qBAAqB,sBACrBA,GAAA,qBAAqB,sBACrBA,GAAA,qBAAqB,sBACrBA,GAAA,4BAA4B,6BAC5BA,GAAA,kCAAkC,mCAPxBA,KAAAA,KAAA,CAAA,CAAA;AAAL,IAUKC,KAAAA,QACVA,EAAA,uBAAuB,wBADbA,IAAAA,KAAA,CAAA,CAAA;ACZL,IAAKC,KAAAA,QACVA,EAAA,cAAc,gBACdA,EAAA,MAAM,OACNA,EAAA,WAAW,YAHDA,IAAAA,KAAA,CAAA,CAAA;ACsHL,IAAKC,KAAAA,QACVA,EAAA,QAAQ,SADEA,IAAAA,KAAA,CAAA,CAAA;AAAL,IAIKC,KAAAA,QACVA,EAAA,YAAY,cACZA,EAAA,sBAAsB,yBAFZA,IAAAA,KAAA,CAAA,CAAA;AAJL,IASKC,KAAAA,QACVA,EAAA,iBAAiB,oBACjBA,EAAA,gBAAgB,mBAChBA,EAAA,SAAS,UAHCA,IAAAA,KAAA,CAAA,CAAA;AATL,IAeKC,KAAAA,QACVA,EAAA,eAAe,kBACfA,EAAA,SAAS,UACTA,EAAA,QAAQ,SAHEA,IAAAA,KAAA,CAAA,CAAA;AAfL,IAqBKC,KAAAA,QACVA,EAAA,aAAa,gBACbA,EAAA,gBAAgB,mBAChBA,EAAA,gBAAgB,mBAHNA,IAAAA,KAAA,CAAA,CAAA;AArBL,IA2BKC,KAAAA,QACVA,EAAA,eAAe,kBACfA,EAAA,kBAAkB,qBAClBA,EAAA,gBAAgB,mBAChBA,EAAA,kBAAkB,qBAClBA,EAAA,gBAAgB,mBALNA,IAAAA,KAAA,CAAA,CAAA;AA3BL,IAmCKC,KAAAA,QACVA,EAAA,QAAQ,gBADEA,IAAAA,KAAA,CAAA,CAAA;AAnCL,IAuCKC,KAAAA,CAAAA,QACVA,GAAA,iBAAiB,mBACjBA,GAAA,sBAAsB,yBACtBA,GAAA,gCAAgC,oCAChCA,GAAA,8BAA8B,kCAJpBA,KAAAA,KAAA,CAAA,CAAA;AAvCL,IA8CKC,KAAAA,CAAAA,QACVA,GAAA,QAAQ,6BACRA,GAAA,SAAS,2CACTA,GAAA,iBAAiB,wCACjBA,GAAA,gBAAgB,2BAJNA,KAAAA,KAAA,CAAA,CAAA;AA9CL,IAqDKC,KAAAA,QACVA,EAAA,qCAAqC,0CACrCA,EAAA,4BAA4B,gCAC5BA,EAAA,kBAAkB,yCAClBA,EAAA,eAAe,kDACfA,EAAA,YAAY,+CACZA,EAAA,sBAAsB,0DANZA,IAAAA,KAAA,CAAA,CAAA;AArDL,IA8DKC,KAAAA,QACVA,EAAA,oBAAoB,oCACpBA,EAAA,SAAS,6CACTA,EAAA,iBAAiB,oCAHPA,IAAAA,KAAA,CAAA,CAAA;AA9DL,IAoEKC,KAAAA,QACVA,EAAA,iCAAiC,4CACjCA,EAAA,eAAe,6BACfA,EAAA,kBAAkB,2CAClBA,EAAA,eAAe,oDACfA,EAAA,YAAY,iDACZA,EAAA,sBAAsB,4DACtBA,EAAA,eAAe,iCACfA,EAAA,qBAAqB,wCARXA,IAAAA,KAAA,CAAA,CAAA;AApEL,IA+EKC,KAAAA,QACVA,EAAA,iBAAiB,yBADPA,IAAAA,KAAA,CAAA,CAAA;AA/EL,IAmFKC,KAAAA,QACVA,EAAA,gBAAgB,6BADNA,IAAAA,KAAA,CAAA,CAAA;ACvML,IAAKC,KAAAA,QACVA,EAAA,UAAU,WADAA,IAAAA,KAAA,CAAA,CAAA;ACgBL,IAAKC,KAAAA,QACVA,EAAA,eAAe,kBADLA,IAAAA,KAAA,CAAA,CAAA;AAAL,IAIKC,KAAAA,QACVA,EAAA,eAAe,8BADLA,IAAAA,KAAA,CAAA,CAAA;AAJL,IAsBKC,KAAAA,QACVA,EAAA,cAAc,gBADJA,IAAAA,KAAA,CAAA,CAAA;ACiBL,IAAKC,KAAAA,CAAAA,QACVA,GAAA,UAAU,wBACVA,GAAA,UAAU,wBACVA,GAAA,YAAY,0BACZA,GAAA,aAAa,cAJHA,KAAAA,KAAA,CAAA,CAAA;AC+BL,IAAKC,KAAAA,QACVA,EAAA,oBAAoB,8BADVA,IAAAA,KAAA,CAAA,CAAA;;;;;AE1EZ,SAASC,GAAqBC,GAAE;AAAC,MAAMC,IAAE,EAAC,SAAQ,CAAC,EAAC;AAAE,SAAOD,EAAEC,GAAEA,EAAE,OAAO,GAAEA,EAAE;AAAO;ACdrF,SAASC,GAAcC,GAAW;AAChC,SAAO,OAAO,aAAa,SAASA,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AACrD;AAEA,SAASC,GAAcC,GAAW;AAChC,SAAO,IAAI,KAAKA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,CAAA,GAAI,MAAM,EAAE,CAAA;AACzD;AAQA,SAASC,GAASC,GAAqB;AACrC,SAAO,KAAK,mBAAmBA,CAAG,EAAE,QAAQ,iBAAiBL,EAAa,CAAC;AAC7E;AAQA,SAASM,GAASD,GAAqB;AACrC,SAAO,mBAAmB,MAAM,KAAK,KAAKA,CAAG,GAAGH,EAAa,EAAE,KAAK,EAAE,CAAC;AACzE;AAKO,SAASK,GAAcC,GAAoB;AAChD,SAAOJ,GAAS,KAAK,UAAUI,CAAO,CAAC;AACzC;AAKO,SAASC,GAAcC,GAAwB;AACpD,SAAO,KAAK,MAAMJ,GAASI,CAAW,CAAC;AACzC;AEzBA,SAASC,GAAYC,GAAgC;AACnD,SAAO,OAAOA,KAAU;AAC1B;AAKA,SAASC,GAAOD,GAA2B;AACzC,SAAOA,MAAU;AACnB;AAKA,SAASE,GAAMF,GAAuC;AACpD,SAAOC,GAAOD,CAAK,KAAKD,GAAYC,CAAK;AAC3C;AAeO,SAASG,GAAyBH,GAA6C;AACpF,SAAIE,GAAMF,CAAK,IAAU,QAEvB,CAACD,GAAYC,EAAM,OAAO,KAAK,CAACD,GAAYC,EAAM,EAAE,MAAM,CAACD,GAAYC,EAAM,MAAM,KAAK,CAACD,GAAYC,EAAM,KAAK;AAEpH;AAaO,SAASI,GAAmBJ,GAAoC;AACrE,SAAIE,GAAMF,CAAK,IAAU,QAClB,OAAOA,KAAU,YAAY,OAAO,OAAOK,CAAY,EAAE,SAASL,CAAK;AAChF;AAKO,SAASM,GAAQN,GAA0B;AAChD,MAAI,CAACA,EAAO,QAAO;AAEnB,WAAWO,KAAOP,EAEhB,KAAI,OAAO,eAAe,KAAKA,GAAOO,CAAG,EACvC,QAAO;AAIX,SAAO;AACT;AC5DO,SAASC,GACdC,GACAC,GACqB;AACrB,SAAA,OAAO,OAAOC,IAAgBD,CAAW,GAClCD;AACT;AFwEO,SAASG,KAA2B;AACzC,SAAO,IAAIC,EACTC,EAAa,eACb,iFACF;AACF;AAEO,SAASC,KAA2B;AACzC,SAAO,IAAIF,EAAcC,EAAa,eAAe,qBAAqB;AAC5E;AAEO,SAASE,KAA+B;AAC7C,SAAO,IAAIH,EAAcC,EAAa,mBAAmB,8CAA8C;AACzG;AAEO,SAASG,GAAmCC,GAAgB;AACjE,SAAO,IAAIL,EACTC,EAAa,yBACb,+EAA+EI,CAAAA,iDAAuDA,CAAAA,qCACxI;AACF;AAEO,SAASC,GAAkCC,GAAiC;AACjF,MAAIC,IAAM,2CAA2CV,GAAe,OAAA,IAAWA,GAAe,OAAA;AAE9F,SAAAS,EACG,OAAQE,OAAQ,OAAOA,EAAI,UAAW,eAAeA,EAAI,WAAW,IAAI,EACxE,QAASA,OAAQ;AAChB,QAAMC,IAASD,EAAI,OAAQX,GAAe,OAAA;AAGtC,WAAOY,KAAW,WACpBF,KAAO;kBAAqBC,EAAI,IAAA,4BAAgCC,CAAAA,OACtDA,MACVF,KAAO;kBAAqBC,EAAI,IAAA,uBAA2BX,GAAe,QAAA;EAK9E,CAAC,GAEI,IAAIE,EAAcC,EAAa,wBAAwBO,CAAG;AACnE;AAEO,SAASG,GAA2B5B,GAKxC;AAKD,MAAM6B,IAAiBC,OAAc;AACnC,QAAMC,IAAYD,IAAI,GAChBE,IAAID,IAAY,IAChBE,IAAIF,IAAY;AACtB,WAAIC,MAAM,KAAKC,MAAM,KAAW,GAAGF,CAAAA,OAC/BC,MAAM,KAAKC,MAAM,KAAW,GAAGF,CAAAA,OAC/BC,MAAM,KAAKC,MAAM,KAAW,GAAGF,CAAAA,OAC5B,GAAGA,CAAAA;EACZ;AAEA,SAAO,IAAId,EACTC,EAAa,iBACb,WAAWW,EAAc7B,EAAQ,QAAQ,CAAA,wBAAyBA,EAAQ,SAAA;gBACvDA,EAAQ,QAAA;gBACRA,EAAQ,QAAA,IAC7B;AACF;AAIO,SAASkC,KAA+B;AAC7C,SAAO,IAAIC,GAAgBC,EAAe,iBAAiB,0BAA0B;AACvF;AAEO,SAASC,KAAqC;AACnD,SAAO,IAAIF,GACTC,EAAe,gBACf,2IACF;AACF;AAEO,SAASE,KAAgD;AAC9D,SAAO,IAAIH,GACTC,EAAe,kCACf,yMAAyMrB,GAAe,eAAA,+GAC1N;AACF;AAEO,SAASwB,EAAyBvC,GAUtC;AACD,MAAM,EAAE,QAAAwC,GAAQ,iBAAAC,GAAiB,YAAAC,EAAW,IAAI1C,GAE1C2C,IAAiBF,EAAgB1B,GAAe,OAAA,GAChD6B,IAAmBF,IAAa,UAAUA,CAAAA,gBAA0B,IACpEG,IAAU,KAAKL,CAAAA,6BAAmCzB,GAAe,OAAA,mBAA0B4B,CAAAA,MAAoBC,CAAAA;AAErH,SAAO,IAAIT,GAAgBC,EAAe,mBAAmBS,CAAO;AACtE;AKnNA,UAAUC,KAAsD;AAC9D,MAAIC,IAAQ;AAEZ,YAEMA,KAAQ,OAAO,mBAAkB,MAAM,EAAEA,IACxCA,IAAQ;AAEjB;AAOO,SAASC,KAAuB;AACrC,SAAOC,GAAa,KAAK,EAAE;AAC7B;ACJA,SAASC,GAAoEC,GAAe;AAC1F,SAAA,OAAO,eAAeA,GAASC,IAA2B,EACxD,OAAO,MACP,YAAY,MACd,CAAC,GAEMD;AACT;AAMA,SAASE,GAAgEF,GAAY;AACnF,SAAO,CAAC,CAAEA,EAAgBC,EAAAA;AAC5B;AAUO,SAASE,EAAiCH,GAAyC;AAtC1F,MAAAI,GAAAC,GAAAC;AAuCE,SAAKJ,GAAsBF,CAAO,MAChCA,EAAQ,WAAUI,IAAAJ,EAAQ,YAAR,OAAAI,IAAmB,OACrCJ,EAAQ,KAAKH,GAAa,GAC1BG,EAAQ,UAASK,IAAAL,EAAQ,WAAR,OAAAK,IAAkB,QACnCL,EAAQ,UAASM,IAAAN,EAAQ,WAAR,OAAAM,IAAkB,CAAC,GAEpCP,GAA0BC,CAAO,IAI5BA;AACT;AAKO,SAASO,GAA4BlB,GAAgBmB,IAAgB,CAAC,GAA0B;AACrG,SAAOT,GAA0B,EAC/B,QAAAS,GACA,QAAAnB,GACA,SAAS,OACT,IAAIQ,GAAa,EACnB,CAAC;AACH;AEzCO,SAASY,KAA6D;AAC3E,MAAMC,IAAU,IAAIC;AAkBpB,SAAO,EACL,SAAAD,GACA,6BAlBkC,CAClCrB,GACAuB,MAEO,IAAIC,OACRH,EAAgBrB,CAAAA,EAAQ,MAAMqB,GAASG,CAAI,GACrCD,IAaT,0BAT8DvB,OACvD,IAAIwB,MACDH,EAAgBrB,CAAAA,EAAQ,MAAMqB,GAASG,CAAI,EAQvD;AACF;ADIO,SAASC,GAAa7D,GAAsC;AACjE,SAAO,CAAC,CAACA,EAAM8D,EAAAA;AACjB;AAMO,SAASC,GACdC,GACuG;AACvG,MAAMC,IAAUC,GAAcF,CAAQ,GAChC,EAAE,0BAAAG,GAA0B,6BAAAC,EAA4B,IAAIZ,GAEhE,GAIIa,IAAa,OAAO,cAAc,GAClCC,IAAc,OAAO,eAAe,GACpCC,IAAgB,OAAO,iBAAiB,GAMxCC,KACJ,CAACpC,IAAuEuB,OACxE,IAAIC,OAAgB;AAClB,QAAMa,KAAed,GAAevB,EAAAA,EAAQ,MAAMuB,IAAQC,EAAI;AAC9D,WAAOc,GAAWD,EAAW;EAC/B,GAMIC,KAAcf,CAAAA,OACX,OAAO,OAAOA,IAAQ,EAC3B,CAACG,EAAAA,GAAkB,MAEnB,CAACO,CAAAA,GAAaV,GAAOU,CAAAA,KAAeV,GAAO,MAC3C,CAACW,CAAAA,GAAcX,GAAOW,CAAAA,KAAgBX,GAAO,OAC7C,CAACY,CAAAA,GAAgBZ,GAAOY,CAAAA,KAAkBZ,GAAO,SAEjD,MAAMa,GAA4BH,GAAYV,EAAM,GACpD,OAAOa,GAA4BF,GAAaX,EAAM,GACtD,SAASa,GAA4BD,GAAeZ,EAAM,GAE1D,IAAIS,EAA4B,MAAMT,EAAM,GAC5C,MAAMS,EAA4B,QAAQT,EAAM,GAChD,aAAaS,EAA4B,eAAeT,EAAM,GAE9D,KAAKS,EAA4B,OAAOT,EAAM,GAC9C,gBAAgBS,EAA4B,kBAAkBT,EAAM,GACpE,oBAAoBS,EAA4B,sBAAsBT,EAAM,GAE5E,MAAMQ,EAAyB,MAAM,GACrC,YAAYA,EAAyB,YAAY,GACjD,WAAWA,EAAyB,WAAW,GAC/C,eAAeA,EAAyB,eAAe,EACzD,CAAC,GAGGQ,IAASD,GACbT,EAAQ,KACLW,CAAAA,QAECD,EAAO,KAAK,QAAQC,EAAQ,GAC5BD,EAAO,KAAK,SAAS,GACdC,KAGRC,CAAAA,OAAQ;AAEP,UAAAF,EAAO,KAAK,SAASE,EAAG,GACxBF,EAAO,KAAK,SAAS,GACfE;EACR,CACF,CACF;AAEA,SAAAF,EAAO,GAAGG,EAAqB,cAAc,MAAM;AACjDH,MAAO,KAAKI,EAAe,YAAY;EACzC,CAAC,GACMJ;AACT;AAWO,SAAST,GAAuBF,GAAyC;AAC9E,SAAO,IAAI,QAAiB,CAACgB,GAASC,MAAW;AAC/C,QAAMN,IAASX,EAASgB,GAASC,CAAM;AACvC,YAAQ,QAAQN,CAAM,EAAE,MAAMM,CAAM;EACtC,CAAC;AACH;AEvJO,SAASC,GAAsBC,GAAiBC,GAA+B;AAEpF,MAAM,CAACC,CAAK,IAAIF,EAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AAG7C,SAAOE,KAASD;AAClB;AECA,SAASE,GAAmElD,GAAuC;AACjH,SAAO,IAAUwB,MAAgB2B,GAAA,MAAA,MAAA,aAAA;AAE/B,WAAKC,OAAIA,KAAK,MAAM7E,GAAe,iBAAiB,IACpD,MAAM6E,GAAG,MAAM,GACPA,GAAGpD,CAAAA,EAAgB,GAAGwB,CAAI;EACpC,CAAA;AACF;ACbO,SAAS6B,KAAO;AACrB,MAAMC,IAAI,OAAO,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AAG1DA,IAAE,CAAA,IAAMA,EAAE,CAAA,IAAK,KAAQ,IAIvBA,EAAE,CAAA,IAAMA,EAAE,CAAA,IAAK,MAAQ;AAGvB,MAAIC,IAAM;AACV,SAAAA,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAO,KAEPA,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAO,KAEPA,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAO,KAEPA,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAOD,EAAE,CAAA,EAAG,SAAS,EAAE,GACvBC,KAAO,KAEPA,KAAOD,EAAE,EAAA,EAAI,SAAS,EAAE,GACxBC,KAAOD,EAAE,EAAA,EAAI,SAAS,EAAE,GACxBC,KAAOD,EAAE,EAAA,EAAI,SAAS,EAAE,GACxBC,KAAOD,EAAE,EAAA,EAAI,SAAS,EAAE,GACxBC,KAAOD,EAAE,EAAA,EAAI,SAAS,EAAE,GACxBC,KAAOD,EAAE,EAAA,EAAI,SAAS,EAAE,GAEjBC;AACT;AC1BO,SAASC,KAAuB;AACrC,MAAMC,IAAY,OAAO,UAAW,eAAe,CAAC,CAAE,OAAO,QACvDC,IAAkBD,KAAa,CAAC,CAAE,OAAO,OAAO;AAEtD,SAAOA,KAAaC;AACtB;AAOA,SAAsBC,KAAY;AAAA,SAAAR,GAAA,MAAA,MAAA,aAAA;AAEhC,QAAMS,IAAY,MAAMC,GAAa;AAErC,QAAI,CAACD,GAAW;AACd,cAAQ,KAAK,yDAAyD;AACtE;IACF;AAEA,QAAM,EAAE,QAAAE,EAAO,IAAI,OAAO,QACpBC,IAAa,MAAMC,GAAmBC,EAAqB;AAEjE,QAAI,CAACF,KAAc,CAACD,GAAQ;AAC1B,cAAQ,KAAK,qDAAqD;AAClE;IACF;AAEA,QAAMI,IAAS,EACb,KAAK,KAAK,OAAM,oBAAI,KAAK,GAAE,QAAQ,IAAI,GAAI,GAC3C,KAAKb,GAAK,EACZ,GAEMc,IAAU,EACd,KAAK,YACL,KAAK,SACL,KAAKP,EACP,GAEMQ,IAAM,EACV,WAAWC,GAAe,KAAK,UAAUF,CAAO,CAAC,GACjD,QAAQE,GAAe,KAAK,UAAUH,CAAM,CAAC,EAC/C,GAEMI,IAAOC,GAAW,GAAGH,EAAI,SAAA,IAAaA,EAAI,MAAA,EAAQ,GAClDI,KAAU,EAAE,MAAMC,IAAW,MAAM,EAAE,MAAM,UAAU,EAAE,GAEvDC,KAAMC,GAAiB,IAAI,WAAW,MAAMb,EAAO,KAAKU,IAAST,GAAYO,CAAI,CAAC,CAAC;AACzF,WAAO,GAAGF,EAAI,SAAA,IAAaA,EAAI,MAAA,IAAUM,EAAAA;EAC3C,CAAA;AAAA;AAEA,SAAeb,KAAe;AAAA,SAAAV,GAAA,MAAA,MAAA,aAAA;AAC5B,QAAI,CAACK,GAAqB,GAAG;AAC3B,cAAQ,KAAK,4BAA4B;AACzC;IACF;AAEA,YAAM,MAAMQ,GAAQY,EAAoB,OACtC,MAAMC,GAAa,IAGdb,GAAQY,EAAoB;EACrC,CAAA;AAAA;AAEA,SAAeC,KAAe;AAAA,SAAA1B,GAAA,MAAA,MAAA,aAAA;AAG5B,QAAM,EAAE,QAAAW,EAAO,IAAI,OAAO,QACpBgB,IAAK,MAAMhB,EAAO,YACtBiB,IACA,OACA,CAAC,MAAM,CACT,GAEMC,IAAe,MAAMlB,EAAO,UAAU,OAAOgB,EAAG,SAAU;AAGhE,UAAMG,EAAQhB,IAAuBa,EAAG,UAAW,GAEnD,MAAMG,EAAQL,IAAsBI,CAAY;EAClD,CAAA;AAAA;AAEA,SAASX,GAAehH,GAAa;AACnC,SAAO6H,GAAeC,GAAmB9H,CAAG,CAAC;AAC/C;AAEA,SAASkH,GAAWlH,GAAa;AAC/B,SAAO,IAAI,YAAY,EAAE,OAAOA,CAAG;AACrC;AAEA,SAAS6H,GAAeE,GAAa;AACnC,SAAO,KAAKA,CAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAC5E;AAEA,SAASD,GAAmB9H,GAAa;AAIvC,SAHe,mBAAmBA,CAAG,EAGvB,QAAQ,mBAAmB,CAACgI,GAAGC,MAAO,OAAO,aAAa,SAASA,GAAI,EAAE,CAAC,CAAC;AAC3F;AAEA,SAASX,GAAiBY,GAAmB;AAC3C,MAAIH,IAAM;AACV,SAAAG,EAAM,QAASC,OAAS;AACtBJ,SAAO,OAAO,aAAaI,CAAI;EACjC,CAAC,GACMN,GAAeE,CAAG;AAC3B;AC/GA,SAAsBK,IAAoB;AAAA,SAAAtC,GAAA,MAAA,MAAA,aAAA;AACxC,QAAMuC,IAAyB,CAAC;AAChC,UAAMC,GAAQ,CAAC/H,GAAOO,GAAKyH,MAAoB;AACzCzH,QAAI,WAAW,GAAG0H,EAAAA,GAAmB,KACvCH,EAAa,KAAKvH,CAAG;IAEzB,CAAC;AACD,aAAWA,KAAOuH,EAEhB,OAAMI,GAAW3H,CAAG;EAExB,CAAA;AAAA;AAEA,SAAS4H,GAAoBC,GAAqB;AAChD,MAAIC,IAAS,IACPC,IAAQ,IAAI,WAAWF,CAAM,GAC7BG,IAAMD,EAAM;AAClB,WAAS5G,IAAI,GAAGA,IAAI6G,GAAK7G,IACvB2G,MAAU,OAAO,aAAaC,EAAM5G,CAAAA,CAAE;AAExC,SAAO,OAAO,KAAK2G,CAAM;AAC3B;AAEO,SAASG,GAAoBC,GAAgB;AAClD,MAAMC,IAAe,OAAO,KAAKD,CAAM,GACjCF,IAAMG,EAAa,QACnBJ,IAAQ,IAAI,WAAWC,CAAG;AAChC,WAAS7G,IAAI,GAAGA,IAAI6G,GAAK7G,IACvB4G,GAAM5G,CAAAA,IAAKgH,EAAa,WAAWhH,CAAC;AAEtC,SAAO4G,EAAM;AACf;AAEA,SAAeK,KAAwB;AAAA,SAAApD,GAAA,MAAA,MAAA,aAAA;AACrC,QAAI,CAACK,GAAqB,GAAG;AAC3B,cAAQ,KAAK,4BAA4B;AACzC;IACF;AACA,QAAM,EAAE,QAAAgD,EAAO,IAAI,QACbC,IAAc,MAAMzC,GAAQ0C,EAAyB;AAC3D,WAAID,KAIOD,EAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;EAEtD,CAAA;AAAA;AAEA,SAAeG,KAA2B;AAAA,SAAAxD,GAAA,MAAA,MAAA,aAAA;AACxC,QAAI,CAACK,GAAqB,GAAG;AAC3B,cAAQ,KAAK,4BAA4B;AACzC;IACF;AACA,QAAM,EAAE,QAAAM,EAAO,IAAI,OAAO,QACpB8C,IAAe,MAAM5C,GAAQ6C,EAAkB;AACrD,WAAID,MAIQ,MAAM9C,EAAO,YACvB,EAAE,MAAMW,IAAW,QAAQqC,GAAY,GACvC,OACA,CAAC,WAAW,SAAS,CACvB;EAEF,CAAA;AAAA;AAEA,SAAsBC,GAA6BC,GAA2BC,GAAoC;AAAA,SAAA9D,GAAA,MAAA,MAAA,aAAA;AAChH,QAAM+D,IAAK,MAAMX,GAAsB,GACjCY,IAAgB,MAAMR,GAAyB;AAErD,QAAI,CAACO,KAAM,CAACC,KAAiB,CAACH,EAC5B;AAEF,QAAMI,IAAqBhB,GAAoBY,CAAiB,GAE1D,EAAE,QAAAlD,EAAO,IAAI,OAAO,QAEpBuD,IAAgB,MAAMvD,EAAO,QACjC,EACE,MAAMW,IACN,IAAAyC,EACF,GACAC,GACAC,CACF,GAIME,KAAuBvB,GAAoBsB,CAAa;AAE9D,UAAMpC,EAAQ,GAAGY,EAAAA,IAAoBoB,CAAAA,IAAeK,EAAoB,GACxE,MAAMrC,EAAQ4B,IAAoBM,CAAa,GAC/C,MAAMlC,EAAQyB,IAA2BQ,CAAE;EAC7C,CAAA;AAAA;AAEA,SAAsBK,GAAwBN,GAAkD;AAAA,SAAA9D,GAAA,MAAA,MAAA,aAAA;AAC9F,QAAMmE,IAAuB,MAAMtD,GAAgB,GAAG6B,EAAAA,IAAoBoB,CAAAA,EAAa,GACjFC,IAAM,MAAMlD,GAAQ0C,EAAyB,GAC7CS,IAAiB,MAAMnD,GAAQ6C,EAAkB;AAEvD,QAAI,CAACK,KAAM,CAACI,KAAwB,CAACH,KAAiB,CAAC3D,GAAqB,EAC1E;AAGF,QAAM,EAAE,QAAAM,EAAO,IAAI,OAAO,QACpB0D,IAAK,MAAM1D,EAAO,QAAQ,EAAE,MAAMW,IAAW,IAAAyC,EAAG,GAAGC,GAAef,GAAoBkB,CAAoB,CAAC;AAEjH,WAAOvB,GAAoByB,CAAE;EAC/B,CAAA;AAAA;ACpHO,SAASC,GAAUC,GAAaC,GAAoB;AAGzD,SAAOA,IAAO,IAAI,IAAID,GAAKC,CAAI,IAAI,IAAI,IAAID,CAAG;AAChD;AGoBA,SAASE,GAAmDC,GAAa;AACvE,MAAIC,IAAe,OAAO,eAAeD,CAAQ,GAC3CE,IAAS,CAACD,CAAY;AAE5B,SAAOA,MAAiBE,EAAW,YACjCF,KAAe,OAAO,eAAeA,CAAY,GACjDC,EAAO,KAAKD,CAAY;AAG1B,SAAOC;AACT;AEXA,SAASE,GAAqB/I,GAAwB;AACpD,SAAIA,EAAI,UAAUA,EAAI,OAAOX,GAAe,OAAA,KAAY,OAC/C,OAAOW,EAAI,OAAOX,GAAe,OAAA,KAAa,WACjD2J,GAAUC,GAAO5J,GAAe,OAAO,GAAGW,EAAI,OAAOX,GAAe,OAAA,CAAkB,IACtF,CAAC,CAACW,EAAI,OAAOX,GAAe,OAAA,IAK3B;AACT;AAMA,SAAS6J,GAAeC,GAAgBC,GAAmCC,GAAiB;AAC1F,SAAI,CAACD,KAAW,CAACC,IACR,GAAGF,CAAAA,iBAERE,IACK,GAAGF,CAAAA,IAAU,KAAK,UAAUE,CAAS,CAAA,KAE1CD,IACE,OAAOA,KAAY,WACd,GAAGD,CAAAA,QAAcC,CAAAA,KAGnB,GAAGD,CAAAA,IAAUC,EAAQ,MAAA,IAAUA,EAAQ,OAAA,IAAWA,EAAQ,SAAA,KAE5D,GAAGD,CAAAA;AACZ;AAMA,SAASG,GAAiChL,GAAgE;AA/D1G,MAAAuD;AAgEE,MAAM/B,KAAyE+B,IAAAvD,KAAA,OAAA,SAAAA,EAAS,eAAT,OAAAuD,IAAuB,CAAC,GACjGwH,IAAiB,CAAC,GAClBE,IAA8C,CAAC;AAgCrD,MA9BI,MAAM,QAAQzJ,CAAU,IAC1BA,EAAW,QAASE,OAAQ;AACtB+I,OAAqB/I,CAAG,KAC1BA,EAAI,KAAK,IAAI,IACTA,EAAI,QAAQA,EAAI,SAASwJ,EAAU,eAEpC,KAAaxJ,EAAI,IAAA,IAAQA,IAExBA,aAAewJ,EAAU,aACtBxK,GAAQgB,EAAI,MAAM,MAAGqJ,EAAUrJ,EAAI,IAAA,IAAQA,EAAI,YAGtDuJ,EAAuB,KAAKvJ,CAAG;EAEnC,CAAC,IAED,OAAO,KAAKF,CAAU,EAAE,QAAS2J,OAAS;AACxC,QAAIV,GAAqBjJ,EAAW2J,CAAAA,CAAK,GAAG;AAC1C3J,QAAW2J,CAAAA,EAAM,KAAK,IAAI;AAC1B,UAAMzJ,IAAMF,EAAW2J,CAAAA;AACtB,WAAaA,CAAAA,IAAQzJ,GAClBA,aAAewJ,EAAU,aACtBxK,GAAQgB,EAAI,MAAM,MAAGqJ,EAAUvJ,EAAW2J,CAAAA,EAAM,IAAA,IAAQzJ,EAAI;IAErE,MACEuJ,GAAuB,KAAKzJ,EAAW2J,CAAAA,CAAK;EAEhD,CAAC,GAGCF,EAAuB,OACzB,OAAM1J,GAAkC0J,CAAsB;AAGhE,SAAOF;AACT;AC/DA,SAASK,GACPC,GACAC,GACmC;AACnC,SAAOA,KAAM,MAAM,QAAQD,CAAc,IACrCA,EAAe,KAAM5L,OAAMA,EAAE,OAAO6L,CAAE,IACrCD;AACP;AAMA,SAASE,GACPF,GACAG,GACsB;AAxDxB,MAAAjI;AAyDE,MAAM+H,KAAK/H,IAAAiI,EAAM,KAAK,aAAX,OAAA,SAAAjI,EAAqB,IAC1BkI,IAAyBL,GAA2BC,GAAgBC,CAAE;AAE5E,MAAIA,KAAMG,GAAwB;AAEhC,QAAMC,IAAW,IAAIC,GAAgBF,CAAsB,EACxD,YAAYD,EAAM,KAAK,SAAS,MAAM,EACtC,WAAWA,EAAM,KAAK,SAAS,KAAK;AAEvC,WAAO,EAAE,IAAAF,GAAI,UAAAI,EAAS;EACxB;AAEA,SAAO,CAAC;AACV;AAEA,SAAeE,GACbC,GACA1I,GACAsG,GACA;AAAA,SAAA9D,GAAA,MAAA,MAAA,aAAA;AA5EF,QAAApC;AA6EE,QAAMuI,IAAK,MAAMtF,GAAgB,IAAI,GACjCuF;AAGJ,QAAIhL,GAAe,aAAa,MAC9B,KAAI;AACFgL,WAAOxI,KAAA,MAAMiD,GAAgB,KAAK,MAA3B,OAAAjD,KAAkC,MAAM4C,GAAU;IAC3D,SAAS7G,IAAP;AACA,cAAQ,MAAM,mBAAmBA,EAAC;IACpC;AAGF,QAAM0M,IAAoC,EAAE,SAAAH,GAAS,SAAA1I,EAAQ;AAEzD4I,UACFC,EAAQ,MAAMD,IAEZA,KAAOD,MACTE,EAAQ,KAAKF;AAIf,QAAMG,IAAuB,MAAMlC,GAAwBN,CAAW;AACtE,WAAIwC,MACFD,EAAQ,cAAcC,IAGjBD;EACT,CAAA;AAAA;AAEA,SAAeE,GAA8BV,GAA0B;AAAA,SAAA7F,GAAA,MAAA,MAAA,aAAA;AACjE,KAAC6F,EAAM,KAAK,OAIhB,MAAM/D,EAAQ,MAAM+D,EAAM,KAAK,EAAE;EACnC,CAAA;AAAA;2ExBjHAW,ICcyIC,IAA0FC,IAAwHC,IAA4JC,IAAcC,IAA8+FC,IAAmBC,IAAmIC,IAAqDC,IAA0GC,IAA8BC,IAAgCC,IAAOC,IAA8BC,IAAsCC,IAA6hHC,IAA0DC,IAAkBC,IAAiCC,IAAQC,IAAkCC,IAAUC,IAA+BC,IAAQC,IAAiCC,IAAUC,IAA+BC,IAAQC,IAAiCC,IAAUC,IAA8bC,IAAUC,IAA+BC,IAAqwDC,IAAOC,IAAgBC,IAA+uDC,IAAOC,IAA0BC,IAAuCC,IAAkCC,IAAuBC,IAAqIC,IAAiNC,IAA0CC,IAA+EC,IAAoYC,IAA+EC,IAAmsBC,IAA0GC,IAAoiBC,IAAsFC,IAAoHC,IAAuSC,IAA+V/E,IAAqHgF,IAA0BC,IAAOC,IAAUC,IAAkSC,IAAkBC,IAAKC,IAAqBrF,IIO16e5J,IAUAkP,IFnBAhP,GAaAiP,IAyBA/N,IAoBAgO,GAcAC,IK1EPnN,ICJAG,IA8DOuI,IEpEb0E,IAQavM,IDoCPI,IH9BOsG,GDOA8F,GAOAC,IQ5BbC,IAEI5K,IAcSY,IACAiB,GACAa,IACAmI,IACAC,IACA/P,IACAgQ,IACAxI,IEpBA1B,IACAW,IACPH,IACA2J,IAEArJ,ICLOc,IACAgB,IACAH,IAEPjC,IACAqC,IJYOuH,IMUAC,ICbLvM,IAA0BC,IAGrBuM,ICCPC,IAkBSC,IAgHAC,IAQOhG,GCnJTiG,IC+GAC,IAAAC,ICRSC;;;;ArBnHtB;ACUA;AEVA;ACAA;AGAA;AGAA;AMAA;ACEA;AEFA;AEAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AxBAA,IAAAnF,KAAAoF,GAAA,CAAAC,IAAAC,OAAA;AAAA;AAEA,UAAIC,KAAM,OAAO,UAAU,gBACvBC,KAAS;AASb,eAASC,KAAS;MAAC;AASf,aAAO,WACTA,GAAO,YAAY,uBAAO,OAAO,IAAI,GAMhC,IAAIA,GAAO,EAAE,cAAWD,KAAS;AAYxC,eAASE,GAAGC,GAAIC,GAASC,GAAM;AAC7B,aAAK,KAAKF,GACV,KAAK,UAAUC,GACf,KAAK,OAAOC,KAAQ;MACtB;AAaA,eAASC,IAAYpO,GAAS2H,GAAOsG,GAAIC,GAASC,GAAM;AACtD,YAAI,OAAOF,KAAO,WAChB,OAAM,IAAI,UAAU,iCAAiC;AAGvD,YAAII,IAAW,IAAIL,GAAGC,GAAIC,KAAWlO,GAASmO,CAAI,GAC9CG,IAAMR,KAASA,KAASnG,IAAQA;AAEpC,eAAK3H,EAAQ,QAAQsO,CAAAA,IACXtO,EAAQ,QAAQsO,CAAAA,EAAK,KAC1BtO,EAAQ,QAAQsO,CAAAA,IAAO,CAACtO,EAAQ,QAAQsO,CAAAA,GAAMD,CAAQ,IADxBrO,EAAQ,QAAQsO,CAAAA,EAAK,KAAKD,CAAQ,KAD1CrO,EAAQ,QAAQsO,CAAAA,IAAOD,GAAUrO,EAAQ,iBAI7DA;MACT;AASA,eAASuO,IAAWvO,GAASsO,GAAK;AAC5B,UAAEtO,EAAQ,iBAAiB,IAAGA,EAAQ,UAAU,IAAI+N,OACnD,OAAO/N,EAAQ,QAAQsO,CAAAA;MAC9B;AASA,eAASE,KAAe;AACtB,aAAK,UAAU,IAAIT,MACnB,KAAK,eAAe;MACtB;AASAS,MAAAA,GAAa,UAAU,aAAa,WAAsB;AACxD,YAAIC,IAAQ,CAAC,GACTC,GACApH;AAEJ,YAAI,KAAK,iBAAiB,EAAG,QAAOmH;AAEpC,aAAKnH,KAASoH,IAAS,KAAK,QACtBb,IAAI,KAAKa,GAAQpH,CAAI,KAAGmH,EAAM,KAAKX,KAASxG,EAAK,MAAM,CAAC,IAAIA,CAAI;AAGtE,eAAI,OAAO,wBACFmH,EAAM,OAAO,OAAO,sBAAsBC,CAAM,CAAC,IAGnDD;MACT;AASAD,MAAAA,GAAa,UAAU,YAAY,SAAmB7G,GAAO;AAC3D,YAAI2G,IAAMR,KAASA,KAASnG,IAAQA,GAChCgH,IAAW,KAAK,QAAQL,CAAAA;AAE5B,YAAI,CAACK,EAAU,QAAO,CAAC;AACvB,YAAIA,EAAS,GAAI,QAAO,CAACA,EAAS,EAAE;AAEpC,iBAAS1Q,IAAI,GAAG2Q,IAAID,EAAS,QAAQE,IAAK,IAAI,MAAMD,CAAC,GAAG3Q,IAAI2Q,GAAG3Q,IAC7D4Q,GAAG5Q,CAAAA,IAAK0Q,EAAS1Q,CAAAA,EAAG;AAGtB,eAAO4Q;MACT;AASAL,MAAAA,GAAa,UAAU,gBAAgB,SAAuB7G,GAAO;AACnE,YAAI2G,IAAMR,KAASA,KAASnG,IAAQA,GAChCmH,IAAY,KAAK,QAAQR,CAAAA;AAE7B,eAAKQ,IACDA,EAAU,KAAW,IAClBA,EAAU,SAFM;MAGzB;AASAN,MAAAA,GAAa,UAAU,OAAO,SAAc7G,GAAOoH,GAAIC,GAAIC,GAAIC,GAAIC,GAAI;AACrE,YAAIb,KAAMR,KAASA,KAASnG,IAAQA;AAEpC,YAAI,CAAC,KAAK,QAAQ2G,EAAAA,EAAM,QAAO;AAE/B,YAAIQ,KAAY,KAAK,QAAQR,EAAAA,GACzBxJ,IAAM,UAAU,QAChB3E,IACAlC;AAEJ,YAAI6Q,GAAU,IAAI;AAGhB,kBAFIA,GAAU,QAAM,KAAK,eAAenH,GAAOmH,GAAU,IAAI,QAAW,IAAI,GAEpEhK,GAAAA;YAAAA,KACD;AAAG,qBAAOgK,GAAU,GAAG,KAAKA,GAAU,OAAO,GAAG;YAAA,KAChD;AAAG,qBAAOA,GAAU,GAAG,KAAKA,GAAU,SAASC,CAAE,GAAG;YAAA,KACpD;AAAG,qBAAOD,GAAU,GAAG,KAAKA,GAAU,SAASC,GAAIC,CAAE,GAAG;YAAA,KACxD;AAAG,qBAAOF,GAAU,GAAG,KAAKA,GAAU,SAASC,GAAIC,GAAIC,CAAE,GAAG;YAAA,KAC5D;AAAG,qBAAOH,GAAU,GAAG,KAAKA,GAAU,SAASC,GAAIC,GAAIC,GAAIC,CAAE,GAAG;YAAA,KAChE;AAAG,qBAAOJ,GAAU,GAAG,KAAKA,GAAU,SAASC,GAAIC,GAAIC,GAAIC,GAAIC,CAAE,GAAG;UAAA;AAG3E,eAAKlR,KAAI,GAAGkC,KAAO,IAAI,MAAM2E,IAAK,CAAC,GAAG7G,KAAI6G,GAAK7G,KAC7CkC,CAAAA,GAAKlC,KAAI,CAAA,IAAK,UAAUA,EAAAA;AAG1B6Q,UAAAA,GAAU,GAAG,MAAMA,GAAU,SAAS3O,EAAI;QAC5C,OAAO;AACL,cAAI0M,KAASiC,GAAU,QACnB3Q;AAEJ,eAAKF,KAAI,GAAGA,KAAI4O,IAAQ5O,KAGtB,SAFI6Q,GAAU7Q,EAAAA,EAAG,QAAM,KAAK,eAAe0J,GAAOmH,GAAU7Q,EAAAA,EAAG,IAAI,QAAW,IAAI,GAE1E6G,GAAAA;YAAAA,KACD;AAAGgK,cAAAA,GAAU7Q,EAAAA,EAAG,GAAG,KAAK6Q,GAAU7Q,EAAAA,EAAG,OAAO;AAAG;YAAA,KAC/C;AAAG6Q,cAAAA,GAAU7Q,EAAAA,EAAG,GAAG,KAAK6Q,GAAU7Q,EAAAA,EAAG,SAAS8Q,CAAE;AAAG;YAAA,KACnD;AAAGD,cAAAA,GAAU7Q,EAAAA,EAAG,GAAG,KAAK6Q,GAAU7Q,EAAAA,EAAG,SAAS8Q,GAAIC,CAAE;AAAG;YAAA,KACvD;AAAGF,cAAAA,GAAU7Q,EAAAA,EAAG,GAAG,KAAK6Q,GAAU7Q,EAAAA,EAAG,SAAS8Q,GAAIC,GAAIC,CAAE;AAAG;YAAA;AAE9D,kBAAI,CAAC9O,GAAM,MAAKhC,KAAI,GAAGgC,KAAO,IAAI,MAAM2E,IAAK,CAAC,GAAG3G,KAAI2G,GAAK3G,KACxDgC,CAAAA,GAAKhC,KAAI,CAAA,IAAK,UAAUA,EAAAA;AAG1B2Q,cAAAA,GAAU7Q,EAAAA,EAAG,GAAG,MAAM6Q,GAAU7Q,EAAAA,EAAG,SAASkC,EAAI;UAAA;QAGxD;AAEA,eAAO;MACT;AAWAqO,MAAAA,GAAa,UAAU,KAAK,SAAY7G,GAAOsG,GAAIC,GAAS;AAC1D,eAAOE,IAAY,MAAMzG,GAAOsG,GAAIC,GAAS,KAAK;MACpD;AAWAM,MAAAA,GAAa,UAAU,OAAO,SAAc7G,GAAOsG,GAAIC,GAAS;AAC9D,eAAOE,IAAY,MAAMzG,GAAOsG,GAAIC,GAAS,IAAI;MACnD;AAYAM,MAAAA,GAAa,UAAU,iBAAiB,SAAwB7G,GAAOsG,GAAIC,GAASC,GAAM;AACxF,YAAIG,IAAMR,KAASA,KAASnG,IAAQA;AAEpC,YAAI,CAAC,KAAK,QAAQ2G,CAAAA,EAAM,QAAO;AAC/B,YAAI,CAACL,EACH,QAAAM,IAAW,MAAMD,CAAG,GACb;AAGT,YAAIQ,IAAY,KAAK,QAAQR,CAAAA;AAE7B,YAAIQ,EAAU,GAEVA,GAAU,OAAOb,MAChB,CAACE,KAAQW,EAAU,UACnB,CAACZ,KAAWY,EAAU,YAAYZ,MAEnCK,IAAW,MAAMD,CAAG;aAEjB;AACL,mBAASrQ,KAAI,GAAGyQ,KAAS,CAAC,GAAG7B,IAASiC,EAAU,QAAQ7Q,KAAI4O,GAAQ5O,KAAAA,EAEhE6Q,EAAU7Q,EAAAA,EAAG,OAAOgQ,KACnBE,KAAQ,CAACW,EAAU7Q,EAAAA,EAAG,QACtBiQ,KAAWY,EAAU7Q,EAAAA,EAAG,YAAYiQ,MAErCQ,GAAO,KAAKI,EAAU7Q,EAAAA,CAAE;AAOxByQ,UAAAA,GAAO,SAAQ,KAAK,QAAQJ,CAAAA,IAAOI,GAAO,WAAW,IAAIA,GAAO,CAAA,IAAKA,KACpEH,IAAW,MAAMD,CAAG;QAC3B;AAEA,eAAO;MACT;AASAE,MAAAA,GAAa,UAAU,qBAAqB,SAA4B7G,GAAO;AAC7E,YAAI2G;AAEJ,eAAI3G,KACF2G,IAAMR,KAASA,KAASnG,IAAQA,GAC5B,KAAK,QAAQ2G,CAAAA,KAAMC,IAAW,MAAMD,CAAG,MAE3C,KAAK,UAAU,IAAIP,MACnB,KAAK,eAAe,IAGf;MACT;AAKAS,MAAAA,GAAa,UAAU,MAAMA,GAAa,UAAU;AACpDA,MAAAA,GAAa,UAAU,cAAcA,GAAa,UAAU;AAK5DA,MAAAA,GAAa,WAAWV;AAKxBU,MAAAA,GAAa,eAAeA;AAKR,aAAOZ,KAAvB,QACFA,GAAO,UAAUY;IAAAA,CAAAA;AChUmE,IAAmDjG,KAAmB,OAAO,oBAAkB;AAA/F,IAA6IC,KAAU,EAAC,qBAAoB,SAAQ,YAAW,KAAI,kBAAiBD,IAAmB,2BAA0B,GAAE;AAAnQ,IAAqQE,KAAgB,OAAO,WAAjB,YAA0B,QAAQ,OAAK,QAAQ,IAAI,cAAY,cAAc,KAAK,QAAQ,IAAI,UAAU,IAAE,IAAIhN,MAAI,QAAQ,MAAM,UAAS,GAAGA,CAAC,IAAE,MAAI;IAAC;AAA/Z,IAAiaiN,KAAQD;AAAza,IAA+aE,KAAKnN,GAAqB,SAASC,GAAEC,GAAE;AAAC,UAAK,EAAC,2BAA0ByQ,EAAC,IAAE3D,IAAU4G,KAAG1T,IAAED,EAAE,UAAQ,CAAC,GAAG,KAAG,CAAC,GAAEwC,IAAEvC,EAAE,MAAI,CAAC,GAAE,IAAEA,EAAE,IAAE,CAAC,GAAM2T,IAAE,GAAQC,KAAE,CAAC7T,IAAEC,GAAEyQ,OAAI;AAAC,YAAMmD,KAAED;AAAI3G,QAAAA,GAAQ4G,IAAE5T,CAAC,GAAE,EAAED,EAAAA,IAAG6T,IAAErR,EAAEqR,EAAAA,IAAG5T,GAAE0T,EAAEE,EAAAA,IAAG,IAAI,OAAO5T,GAAEyQ,KAAE,MAAI,MAAM;MAAC;AAAEmD,MAAAA,GAAE,qBAAoB,aAAa,GAAEA,GAAE,0BAAyB,QAAQ,GAAEA,GAAE,wBAAuB,4BAA4B,GAAEA,GAAE,eAAc,IAAIrR,EAAE,EAAE,iBAAA,CAAA,QAA6BA,EAAE,EAAE,iBAAA,CAAA,QAA6BA,EAAE,EAAE,iBAAA,CAAA,GAAqB,GAAEqR,GAAE,oBAAmB,IAAIrR,EAAE,EAAE,sBAAA,CAAA,QAAkCA,EAAE,EAAE,sBAAA,CAAA,QAAkCA,EAAE,EAAE,sBAAA,CAAA,GAA0B,GAAEqR,GAAE,wBAAuB,MAAMrR,EAAE,EAAE,iBAAA,CAAA,IAAsBA,EAAE,EAAE,oBAAA,CAAA,GAAwB,GAAEqR,GAAE,6BAA4B,MAAMrR,EAAE,EAAE,sBAAA,CAAA,IAA2BA,EAAE,EAAE,oBAAA,CAAA,GAAwB,GAAEqR,GAAE,cAAa,QAAQrR,EAAE,EAAE,oBAAA,CAAA,SAA8BA,EAAE,EAAE,oBAAA,CAAA,MAA2B,GAAEqR,GAAE,mBAAkB,SAASrR,EAAE,EAAE,yBAAA,CAAA,SAAmCA,EAAE,EAAE,yBAAA,CAAA,MAAgC,GAAEqR,GAAE,mBAAkB,eAAe,GAAEA,GAAE,SAAQ,UAAUrR,EAAE,EAAE,eAAA,CAAA,SAAyBA,EAAE,EAAE,eAAA,CAAA,MAAsB,GAAEqR,GAAE,aAAY,KAAKrR,EAAE,EAAE,WAAA,CAAA,GAAeA,EAAE,EAAE,UAAA,CAAA,IAAeA,EAAE,EAAE,KAAA,CAAA,GAAS,GAAEqR,GAAE,QAAO,IAAIrR,EAAE,EAAE,SAAA,CAAA,GAAa,GAAEqR,GAAE,cAAa,WAAWrR,EAAE,EAAE,gBAAA,CAAA,GAAoBA,EAAE,EAAE,eAAA,CAAA,IAAoBA,EAAE,EAAE,KAAA,CAAA,GAAS,GAAEqR,GAAE,SAAQ,IAAIrR,EAAE,EAAE,UAAA,CAAA,GAAc,GAAEqR,GAAE,QAAO,cAAc,GAAEA,GAAE,yBAAwB,GAAGrR,EAAE,EAAE,sBAAA,CAAA,UAAiC,GAAEqR,GAAE,oBAAmB,GAAGrR,EAAE,EAAE,iBAAA,CAAA,UAA4B,GAAEqR,GAAE,eAAc,YAAYrR,EAAE,EAAE,gBAAA,CAAA,WAA+BA,EAAE,EAAE,gBAAA,CAAA,WAA+BA,EAAE,EAAE,gBAAA,CAAA,OAA2BA,EAAE,EAAE,UAAA,CAAA,KAAgBA,EAAE,EAAE,KAAA,CAAA,OAAgB,GAAEqR,GAAE,oBAAmB,YAAYrR,EAAE,EAAE,qBAAA,CAAA,WAAoCA,EAAE,EAAE,qBAAA,CAAA,WAAoCA,EAAE,EAAE,qBAAA,CAAA,OAAgCA,EAAE,EAAE,eAAA,CAAA,KAAqBA,EAAE,EAAE,KAAA,CAAA,OAAgB,GAAEqR,GAAE,UAAS,IAAIrR,EAAE,EAAE,IAAA,CAAA,OAAYA,EAAE,EAAE,WAAA,CAAA,GAAe,GAAEqR,GAAE,eAAc,IAAIrR,EAAE,EAAE,IAAA,CAAA,OAAYA,EAAE,EAAE,gBAAA,CAAA,GAAoB,GAAEqR,GAAE,UAAS,oBAAoBnD,CAAAA,kBAAsBA,CAAAA,oBAAwBA,CAAAA,kBAAsB,GAAEmD,GAAE,aAAYrR,EAAE,EAAE,MAAA,GAAQ,IAAE,GAAEqR,GAAE,aAAY,SAAS,GAAEA,GAAE,aAAY,SAASrR,EAAE,EAAE,SAAA,CAAA,QAAiB,IAAE,GAAEvC,EAAE,mBAAiB,OAAM4T,GAAE,SAAQ,IAAIrR,EAAE,EAAE,SAAA,CAAA,GAAaA,EAAE,EAAE,WAAA,CAAA,GAAe,GAAEqR,GAAE,cAAa,IAAIrR,EAAE,EAAE,SAAA,CAAA,GAAaA,EAAE,EAAE,gBAAA,CAAA,GAAoB,GAAEqR,GAAE,aAAY,SAAS,GAAEA,GAAE,aAAY,SAASrR,EAAE,EAAE,SAAA,CAAA,QAAiB,IAAE,GAAEvC,EAAE,mBAAiB,OAAM4T,GAAE,SAAQ,IAAIrR,EAAE,EAAE,SAAA,CAAA,GAAaA,EAAE,EAAE,WAAA,CAAA,GAAe,GAAEqR,GAAE,cAAa,IAAIrR,EAAE,EAAE,SAAA,CAAA,GAAaA,EAAE,EAAE,gBAAA,CAAA,GAAoB,GAAEqR,GAAE,mBAAkB,IAAIrR,EAAE,EAAE,IAAA,CAAA,QAAaA,EAAE,EAAE,UAAA,CAAA,OAAkB,GAAEqR,GAAE,cAAa,IAAIrR,EAAE,EAAE,IAAA,CAAA,QAAaA,EAAE,EAAE,SAAA,CAAA,OAAiB,GAAEqR,GAAE,kBAAiB,SAASrR,EAAE,EAAE,IAAA,CAAA,QAAaA,EAAE,EAAE,UAAA,CAAA,IAAeA,EAAE,EAAE,WAAA,CAAA,KAAgB,IAAE,GAAEvC,EAAE,wBAAsB,UAAS4T,GAAE,eAAc,SAASrR,EAAE,EAAE,WAAA,CAAA,cAAgCA,EAAE,EAAE,WAAA,CAAA,QAAuB,GAAEqR,GAAE,oBAAmB,SAASrR,EAAE,EAAE,gBAAA,CAAA,cAAqCA,EAAE,EAAE,gBAAA,CAAA,QAA4B,GAAEqR,GAAE,QAAO,iBAAiB,GAAEA,GAAE,QAAO,uBAAuB,GAAEA,GAAE,WAAU,yBAAyB;IAAC,CAAC;AAA35G,IAA65G1G,KAAQ;AAAr6G,IAAg7GC,KAAqB,CAACpN,GAAEC,MAAI;AAAC,UAAMyQ,IAAEvD,GAAQ,KAAKnN,CAAC,GAAE2T,IAAExG,GAAQ,KAAKlN,CAAC;AAAE,aAAOyQ,KAAGiD,MAAI3T,IAAE,CAACA,GAAEC,IAAE,CAACA,IAAGD,MAAIC,IAAE,IAAEyQ,KAAG,CAACiD,IAAE,KAAGA,KAAG,CAACjD,IAAE,IAAE1Q,IAAEC,IAAE,KAAG;IAAC;AAAjjH,IAAmjHoN,KAAoB,CAACrN,GAAEC,MAAImN,GAAqBnN,GAAED,CAAC;AAAtmH,IAAwmHsN,KAAY,EAAC,oBAAmBF,IAAqB,qBAAoBC,GAAmB;AAApsH,KAAssH,EAAC,YAAWE,IAAa,kBAAiBC,OAAkBT;AAAlwH,KAA4wH,EAAC,IAAGU,IAAK,GAAEC,OAAKR;AAA5xH,KAAiyH,EAAC,oBAAmBS,OAAoBL;AAAz0H,IAA21HM,KAAN,MAAY;MAAC,YAAY5N,GAAEC,GAAE;AAAC,YAAGA,KAAa,OAAOA,KAAjB,aAAqBA,IAAE,EAAC,OAAM,CAAC,CAACA,GAAE,mBAAkB,MAAE,IAAGD,aAAa4N,IAAO;AAAC,cAAG5N,EAAE,UAAQ,CAAC,CAACC,EAAE,SAAOD,EAAE,sBAAoB,CAAC,CAACC,EAAE,kBAAkB,QAAOD;AAAEA,cAAEA,EAAE;QAAO,WAAmB,OAAOA,KAAjB,SAAmB,OAAM,IAAI,UAAU,oBAAoBA,CAAAA,EAAG;AAAE,YAAGA,EAAE,SAAOuN,GAAa,OAAM,IAAI,UAAU,0BAA0BA,EAAAA,aAAyB;AAAEN,QAAAA,GAAQ,UAASjN,GAAEC,CAAC,GAAE,KAAK,UAAQA,GAAE,KAAK,QAAM,CAAC,CAACA,EAAE,OAAM,KAAK,oBAAkB,CAAC,CAACA,EAAE;AAAkB,YAAMyQ,IAAE1Q,EAAE,KAAK,EAAE,MAAMC,EAAE,QAAMwN,GAAKC,GAAI,KAAA,IAAOD,GAAKC,GAAI,IAAA,CAAK;AAAE,YAAG,CAACgD,EAAE,OAAM,IAAI,UAAU,oBAAoB1Q,CAAAA,EAAG;AAAE,YAAG,KAAK,MAAIA,GAAE,KAAK,QAAM,CAAC0Q,EAAE,CAAA,GAAG,KAAK,QAAM,CAACA,EAAE,CAAA,GAAG,KAAK,QAAM,CAACA,EAAE,CAAA,GAAG,KAAK,QAAMlD,MAAkB,KAAK,QAAM,EAAE,OAAM,IAAI,UAAU,uBAAuB;AAAE,YAAG,KAAK,QAAMA,MAAkB,KAAK,QAAM,EAAE,OAAM,IAAI,UAAU,uBAAuB;AAAE,YAAG,KAAK,QAAMA,MAAkB,KAAK,QAAM,EAAE,OAAM,IAAI,UAAU,uBAAuB;AAAEkD,UAAE,CAAA,IAAG,KAAK,aAAWA,EAAE,CAAA,EAAG,MAAM,GAAG,EAAE,IAAI1Q,OAAG;AAAC,cAAG,WAAW,KAAKA,CAAC,GAAE;AAAC,gBAAMC,IAAE,CAACD;AAAE,gBAAGC,KAAG,KAAGA,IAAEuN,GAAiB,QAAOvN;UAAC;AAAC,iBAAOD;QAAC,CAAC,IAAE,KAAK,aAAW,CAAC,GAAE,KAAK,QAAM0Q,EAAE,CAAA,IAAGA,EAAE,CAAA,EAAG,MAAM,GAAG,IAAE,CAAC,GAAE,KAAK,OAAO;MAAC;MAAC,SAAQ;AAAC,eAAO,KAAK,UAAQ,GAAG,KAAK,KAAA,IAAS,KAAK,KAAA,IAAS,KAAK,KAAA,IAAQ,KAAK,WAAW,WAAS,KAAK,WAAS,IAAI,KAAK,WAAW,KAAK,GAAG,CAAA,KAAK,KAAK;MAAO;MAAC,WAAU;AAAC,eAAO,KAAK;MAAO;MAAC,QAAQ1Q,GAAE;AAAC,YAAGiN,GAAQ,kBAAiB,KAAK,SAAQ,KAAK,SAAQjN,CAAC,GAAE,EAAEA,aAAa4N,KAAQ;AAAC,cAAa,OAAO5N,KAAjB,YAAoBA,MAAI,KAAK,QAAQ,QAAO;AAAEA,cAAE,IAAI4N,GAAO5N,GAAE,KAAK,OAAO;QAAC;AAAC,eAAOA,EAAE,YAAU,KAAK,UAAQ,IAAE,KAAK,YAAYA,CAAC,KAAG,KAAK,WAAWA,CAAC;MAAC;MAAC,YAAYA,GAAE;AAAC,eAAOA,aAAa4N,OAAS5N,IAAE,IAAI4N,GAAO5N,GAAE,KAAK,OAAO,IAAG2N,GAAmB,KAAK,OAAM3N,EAAE,KAAK,KAAG2N,GAAmB,KAAK,OAAM3N,EAAE,KAAK,KAAG2N,GAAmB,KAAK,OAAM3N,EAAE,KAAK;MAAC;MAAC,WAAWA,GAAE;AAAC,YAAGA,aAAa4N,OAAS5N,IAAE,IAAI4N,GAAO5N,GAAE,KAAK,OAAO,IAAG,KAAK,WAAW,UAAQ,CAACA,EAAE,WAAW,OAAO,QAAM;AAAG,YAAG,CAAC,KAAK,WAAW,UAAQA,EAAE,WAAW,OAAO,QAAO;AAAE,YAAG,CAAC,KAAK,WAAW,UAAQ,CAACA,EAAE,WAAW,OAAO,QAAO;AAAE,YAAIC,IAAE;AAAE,WAAE;AAAC,cAAMyQ,IAAE,KAAK,WAAWzQ,CAAAA,GAAG,IAAED,EAAE,WAAWC,CAAAA;AAAG,cAAGgN,GAAQ,sBAAqBhN,GAAEyQ,GAAE,CAAC,GAAWA,MAAT,UAAqB,MAAT,OAAW,QAAO;AAAE,cAAY,MAAT,OAAW,QAAO;AAAE,cAAYA,MAAT,OAAW,QAAM;AAAG,cAAGA,MAAI,EAAE,QAAO/C,GAAmB+C,GAAE,CAAC;QAAC,SAAO,EAAEzQ;MAAE;MAAC,aAAaD,GAAE;AAACA,qBAAa4N,OAAS5N,IAAE,IAAI4N,GAAO5N,GAAE,KAAK,OAAO;AAAG,YAAIC,IAAE;AAAE,WAAE;AAAC,cAAMyQ,IAAE,KAAK,MAAMzQ,CAAAA,GAAG,IAAED,EAAE,MAAMC,CAAAA;AAAG,cAAGgN,GAAQ,sBAAqBhN,GAAEyQ,GAAE,CAAC,GAAWA,MAAT,UAAqB,MAAT,OAAW,QAAO;AAAE,cAAY,MAAT,OAAW,QAAO;AAAE,cAAYA,MAAT,OAAW,QAAM;AAAG,cAAGA,MAAI,EAAE,QAAO/C,GAAmB+C,GAAE,CAAC;QAAC,SAAO,EAAEzQ;MAAE;MAAC,IAAID,GAAEC,GAAE;AAAC,gBAAOD,GAAAA;UAAAA,KAAO;AAAW,iBAAK,WAAW,SAAO,GAAE,KAAK,QAAM,GAAE,KAAK,QAAM,GAAE,KAAK,SAAQ,KAAK,IAAI,OAAMC,CAAC;AAAE;UAAA,KAAU;AAAW,iBAAK,WAAW,SAAO,GAAE,KAAK,QAAM,GAAE,KAAK,SAAQ,KAAK,IAAI,OAAMA,CAAC;AAAE;UAAA,KAAU;AAAW,iBAAK,WAAW,SAAO,GAAE,KAAK,IAAI,SAAQA,CAAC,GAAE,KAAK,IAAI,OAAMA,CAAC;AAAE;UAAA,KAAU;AAAiB,iBAAK,WAAW,WAApB,KAA4B,KAAK,IAAI,SAAQA,CAAC,GAAE,KAAK,IAAI,OAAMA,CAAC;AAAE;UAAA,KAAU;AAAY,iBAAK,UAAT,KAAoB,KAAK,UAAT,KAAoB,KAAK,WAAW,WAApB,KAA4B,KAAK,SAAQ,KAAK,QAAM,GAAE,KAAK,QAAM,GAAE,KAAK,aAAW,CAAC;AAAE;UAAA,KAAU;AAAY,iBAAK,UAAT,KAAoB,KAAK,WAAW,WAApB,KAA4B,KAAK,SAAQ,KAAK,QAAM,GAAE,KAAK,aAAW,CAAC;AAAE;UAAA,KAAU;AAAY,iBAAK,WAAW,WAApB,KAA4B,KAAK,SAAQ,KAAK,aAAW,CAAC;AAAE;UAAA,KAAU;AAAM,gBAAO,KAAK,WAAW,WAApB,EAA2B,MAAK,aAAW,CAAC,CAAC;iBAAM;AAAC,kBAAID,IAAE,KAAK,WAAW;AAAO,qBAAK,EAAEA,KAAG,IAAa,QAAO,KAAK,WAAWA,CAAAA,KAAjC,aAAsC,KAAK,WAAWA,CAAAA,KAAKA,IAAE;AAASA,oBAAL,MAAQ,KAAK,WAAW,KAAK,CAAC;YAAC;AAACC,kBAAI,KAAK,WAAW,CAAA,MAAKA,IAAE,MAAM,KAAK,WAAW,CAAA,CAAE,MAAI,KAAK,aAAW,CAACA,GAAE,CAAC,KAAG,KAAK,aAAW,CAACA,GAAE,CAAC;AAAG;UAAA;AAAc,kBAAM,IAAI,MAAM,+BAA+BD,CAAAA,EAAG;QAAA;AAAE,eAAO,KAAK,OAAO,GAAE,KAAK,MAAI,KAAK,SAAQ;MAAI;IAAC;AAAj3O,IAAw3O6N,KAAQ,CAAC7N,GAAEC,GAAEyQ,MAAI,IAAI9C,GAAO5N,GAAE0Q,CAAC,EAAE,QAAQ,IAAI9C,GAAO3N,GAAEyQ,CAAC,CAAC;AAAh7O,IAAk7O5C,KAAUD;AAA57O,IAAo8OE,KAAG,CAAC/N,GAAEC,GAAEyQ,MAAQ5C,GAAU9N,GAAEC,GAAEyQ,CAAC,MAAnB;AAAh9O,IAAq+O1C,KAAKD;AAA1+O,IAA6+OE,KAAI,CAACjO,GAAEC,GAAEyQ,MAAQ5C,GAAU9N,GAAEC,GAAEyQ,CAAC,MAAnB;AAA1/O,IAA+gPxC,KAAMD;AAArhP,IAAyhPE,KAAG,CAACnO,GAAEC,GAAEyQ,MAAI5C,GAAU9N,GAAEC,GAAEyQ,CAAC,IAAE;AAAtjP,IAAwjPtC,KAAKD;AAA7jP,IAAgkPE,KAAI,CAACrO,GAAEC,GAAEyQ,MAAI5C,GAAU9N,GAAEC,GAAEyQ,CAAC,KAAG;AAA/lP,IAAimPpC,KAAMD;AAAvmP,IAA2mPE,KAAG,CAACvO,GAAEC,GAAEyQ,MAAI5C,GAAU9N,GAAEC,GAAEyQ,CAAC,IAAE;AAAxoP,IAA0oPlC,KAAKD;AAA/oP,IAAkpPE,KAAI,CAACzO,GAAEC,GAAEyQ,MAAI5C,GAAU9N,GAAEC,GAAEyQ,CAAC,KAAG;AAAjrP,IAAmrPhC,KAAMD;AAAzrP,IAA6rPE,KAAI,CAAC3O,GAAEC,GAAEyQ,GAAEiD,MAAI;AAAC,cAAO1T,GAAAA;QAAAA,KAAO;AAAM,iBAAgB,OAAOD,KAAjB,aAAqBA,IAAEA,EAAE,UAAmB,OAAO0Q,KAAjB,aAAqBA,IAAEA,EAAE,UAAS1Q,MAAI0Q;QAAAA,KAAM;AAAM,iBAAgB,OAAO1Q,KAAjB,aAAqBA,IAAEA,EAAE,UAAmB,OAAO0Q,KAAjB,aAAqBA,IAAEA,EAAE,UAAS1Q,MAAI0Q;QAAAA,KAAM;QAAA,KAAO;QAAA,KAAQ;AAAK,iBAAO1C,GAAKhO,GAAE0Q,GAAEiD,CAAC;QAAA,KAAM;AAAK,iBAAOzF,GAAMlO,GAAE0Q,GAAEiD,CAAC;QAAA,KAAM;AAAI,iBAAOvF,GAAKpO,GAAE0Q,GAAEiD,CAAC;QAAA,KAAM;AAAK,iBAAOrF,GAAMtO,GAAE0Q,GAAEiD,CAAC;QAAA,KAAM;AAAI,iBAAOnF,GAAKxO,GAAE0Q,GAAEiD,CAAC;QAAA,KAAM;AAAK,iBAAOjF,GAAM1O,GAAE0Q,GAAEiD,CAAC;QAAA;AAAU,gBAAM,IAAI,UAAU,qBAAqB1T,CAAAA,EAAG;MAAA;IAAE;AAAznQ,IAA2nQ2O,KAAMD;AAAjoQ,IAAqoQE,KAAI,OAAO,YAAY;AAA5pQ,IAAoqQC,KAAN,MAAgB;MAAC,WAAW,MAAK;AAAC,eAAOD;MAAG;MAAC,YAAY7O,GAAEC,GAAE;AAAC,YAAGA,KAAa,OAAOA,KAAjB,aAAqBA,IAAE,EAAC,OAAM,CAAC,CAACA,GAAE,mBAAkB,MAAE,IAAGD,aAAa8O,IAAW;AAAC,cAAG9O,EAAE,UAAQ,CAAC,CAACC,EAAE,MAAM,QAAOD;AAAEA,cAAEA,EAAE;QAAK;AAACiN,QAAAA,GAAQ,cAAajN,GAAEC,CAAC,GAAE,KAAK,UAAQA,GAAE,KAAK,QAAM,CAAC,CAACA,EAAE,OAAM,KAAK,MAAMD,CAAC,GAAE,KAAK,WAAS6O,KAAI,KAAK,QAAM,KAAG,KAAK,QAAM,KAAK,WAAS,KAAK,OAAO,SAAQ5B,GAAQ,QAAO,IAAI;MAAC;MAAC,MAAMjN,GAAE;AAAC,YAAMC,IAAE,KAAK,QAAQ,QAAM8O,GAAKC,GAAI,eAAA,IAAiBD,GAAKC,GAAI,UAAA,GAAY0B,IAAE1Q,EAAE,MAAMC,CAAC;AAAE,YAAG,CAACyQ,EAAE,OAAM,IAAI,UAAU,uBAAuB1Q,CAAAA,EAAG;AAAE,aAAK,WAAkB0Q,EAAE,CAAA,MAAX,SAAcA,EAAE,CAAA,IAAG,IAAS,KAAK,aAAX,QAAsB,KAAK,WAAS,KAAIA,EAAE,CAAA,IAAG,KAAK,SAAO,IAAI9C,GAAO8C,EAAE,CAAA,GAAG,KAAK,QAAQ,KAAK,IAAE,KAAK,SAAO7B;MAAG;MAAC,WAAU;AAAC,eAAO,KAAK;MAAK;MAAC,KAAK7O,GAAE;AAAC,YAAGiN,GAAQ,mBAAkBjN,GAAE,KAAK,QAAQ,KAAK,GAAE,KAAK,WAAS6O,MAAK7O,MAAI6O,GAAI,QAAM;AAAG,YAAa,OAAO7O,KAAjB,SAAmB,KAAG;AAACA,cAAE,IAAI4N,GAAO5N,GAAE,KAAK,OAAO;QAAC,SAAO,GAAN;AAAS,iBAAM;QAAE;AAAC,eAAO4O,GAAM5O,GAAE,KAAK,UAAS,KAAK,QAAO,KAAK,OAAO;MAAC;MAAC,WAAWA,GAAEC,GAAE;AAAC,YAAG,EAAED,aAAa8O,IAAY,OAAM,IAAI,UAAU,0BAA0B;AAAE,YAAG7O,KAAa,OAAOA,KAAjB,aAAqBA,IAAE,EAAC,OAAM,CAAC,CAACA,GAAE,mBAAkB,MAAE,IAAQ,KAAK,aAAV,GAAmB,QAAW,KAAK,UAAV,MAAiB,IAAIgP,GAAMjP,EAAE,OAAMC,CAAC,EAAE,KAAK,KAAK,KAAK;AAAE,YAAQD,EAAE,aAAP,GAAgB,QAAWA,EAAE,UAAP,MAAc,IAAIiP,GAAM,KAAK,OAAMhP,CAAC,EAAE,KAAKD,EAAE,MAAM;AAAE,YAAM0Q,IAAE,EAAS,KAAK,aAAZ,QAA4B,KAAK,aAAX,OAA4B1Q,EAAE,aAAT,QAAyBA,EAAE,aAAR,MAAkB,IAAE,EAAS,KAAK,aAAZ,QAA4B,KAAK,aAAX,OAA4BA,EAAE,aAAT,QAAyBA,EAAE,aAAR,MAAkBwC,IAAE,KAAK,OAAO,YAAUxC,EAAE,OAAO,SAAQ8T,IAAE,EAAS,KAAK,aAAZ,QAA6B,KAAK,aAAZ,QAA6B9T,EAAE,aAAT,QAA0BA,EAAE,aAAT,OAAmB4T,KAAEhF,GAAM,KAAK,QAAO,KAAI5O,EAAE,QAAOC,CAAC,MAAW,KAAK,aAAZ,QAA4B,KAAK,aAAX,SAA8BD,EAAE,aAAT,QAAyBA,EAAE,aAAR,MAAkB6T,KAAEjF,GAAM,KAAK,QAAO,KAAI5O,EAAE,QAAOC,CAAC,MAAW,KAAK,aAAZ,QAA4B,KAAK,aAAX,SAA8BD,EAAE,aAAT,QAAyBA,EAAE,aAAR;AAAkB,eAAO0Q,KAAG,KAAGlO,KAAGsR,KAAGF,MAAGC;MAAC;IAAC;AAA/5T,KAAq6T,EAAC,IAAG9E,IAAK,GAAEC,OAAK9B;AAAr7T,IAAg8T+B,KAAN,MAAW;MAAC,YAAYjP,GAAEC,GAAE;AAAC,YAAGA,KAAa,OAAOA,KAAjB,aAAqBA,IAAE,EAAC,OAAM,CAAC,CAACA,GAAE,mBAAkB,MAAE,IAAGD,aAAaiP,GAAM,QAAOjP,EAAE,UAAQ,CAAC,CAACC,EAAE,SAAOD,EAAE,sBAAoB,CAAC,CAACC,EAAE,oBAAkBD,IAAE,IAAIiP,GAAMjP,EAAE,KAAIC,CAAC;AAAE,YAAGD,aAAa8O,GAAW,QAAO,KAAK,MAAI9O,EAAE,OAAM,KAAK,MAAI,CAAC,CAACA,CAAC,CAAC,GAAE,KAAK,OAAO,GAAE;AAAK,YAAG,KAAK,UAAQC,GAAE,KAAK,QAAM,CAAC,CAACA,EAAE,OAAM,KAAK,oBAAkB,CAAC,CAACA,EAAE,mBAAkB,KAAK,MAAID,GAAE,KAAK,MAAIA,EAAE,MAAM,YAAY,EAAE,IAAIA,OAAG,KAAK,WAAWA,EAAE,KAAK,CAAC,CAAC,EAAE,OAAOA,OAAGA,EAAE,MAAM,GAAE,CAAC,KAAK,IAAI,OAAO,OAAM,IAAI,UAAU,yBAAyBA,CAAAA,EAAG;AAAE,aAAK,OAAO;MAAC;MAAC,SAAQ;AAAC,eAAO,KAAK,QAAM,KAAK,IAAI,IAAIA,OAAGA,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,KAAK,GAAE,KAAK;MAAK;MAAC,WAAU;AAAC,eAAO,KAAK;MAAK;MAAC,WAAWA,GAAE;AAAC,YAAK,EAAC,OAAMC,EAAC,IAAE,KAAK;AAAQD,YAAEA,EAAE,KAAK;AAAE,YAAM0Q,IAAEzQ,IAAEiP,GAAKC,GAAI,gBAAA,IAAkBD,GAAKC,GAAI,WAAA;AAAanP,YAAEA,EAAE,QAAQ0Q,GAAER,GAAc,KAAK,QAAQ,iBAAiB,CAAC,GAAEjD,GAAQ,kBAAiBjN,CAAC,GAAEA,IAAEA,EAAE,QAAQkP,GAAKC,GAAI,cAAA,GAAgBC,EAAqB,GAAEnC,GAAQ,mBAAkBjN,GAAEkP,GAAKC,GAAI,cAAA,CAAe,GAAEnP,KAAGA,KAAGA,IAAEA,EAAE,QAAQkP,GAAKC,GAAI,SAAA,GAAWE,EAAgB,GAAG,QAAQH,GAAKC,GAAI,SAAA,GAAWG,EAAgB,GAAG,MAAM,KAAK,EAAE,KAAK,GAAG;AAAE,YAAM,IAAErP,IAAEiP,GAAKC,GAAI,eAAA,IAAiBD,GAAKC,GAAI,UAAA;AAAY,eAAOnP,EAAE,MAAM,GAAG,EAAE,IAAIA,OAAGwP,GAAgBxP,GAAE,KAAK,OAAO,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,EAAE,IAAIA,OAAGiQ,GAAYjQ,GAAE,KAAK,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,QAAMA,OAAG,CAAC,CAACA,EAAE,MAAM,CAAC,IAAE,MAAI,IAAE,EAAE,IAAIA,OAAG,IAAI8O,GAAW9O,GAAE,KAAK,OAAO,CAAC;MAAC;MAAC,WAAWA,GAAEC,GAAE;AAAC,YAAG,EAAED,aAAaiP,IAAO,OAAM,IAAI,UAAU,qBAAqB;AAAE,eAAO,KAAK,IAAI,KAAKyB,OAAGnB,GAAcmB,GAAEzQ,CAAC,KAAGD,EAAE,IAAI,KAAKA,OAAGuP,GAAcvP,GAAEC,CAAC,KAAGyQ,EAAE,MAAMA,OAAG1Q,EAAE,MAAMA,OAAG0Q,EAAE,WAAW1Q,GAAEC,CAAC,CAAC,CAAC,CAAC,CAAC;MAAC;MAAC,KAAKD,GAAE;AAAC,YAAG,CAACA,EAAE,QAAM;AAAG,YAAa,OAAOA,KAAjB,SAAmB,KAAG;AAACA,cAAE,IAAI4N,GAAO5N,GAAE,KAAK,OAAO;QAAC,SAAO,GAAN;AAAS,iBAAM;QAAE;AAAC,iBAAQC,IAAE,GAAEA,IAAE,KAAK,IAAI,QAAOA,IAAI,KAAGkQ,GAAQ,KAAK,IAAIlQ,CAAAA,GAAGD,GAAE,KAAK,OAAO,EAAE,QAAM;AAAG,eAAM;MAAE;IAAC;AAArqX,KAA2qX,EAAC,IAAGkP,IAAK,GAAEC,IAAI,uBAAsBC,IAAsB,kBAAiBC,IAAiB,kBAAiBC,OAAkBpC;AAA3yX,IAAgzXqC,KAAc,CAACvP,GAAEC,MAAI;AAAC,UAAIyQ,IAAE,MAASiD,IAAE3T,EAAE,MAAM,GAAMwC,IAAEmR,EAAE,IAAI;AAAE,aAAKjD,KAAGiD,EAAE,SAAQjD,KAAEiD,EAAE,MAAM3T,OAAGwC,EAAE,WAAWxC,GAAEC,CAAC,CAAC,GAAEuC,IAAEmR,EAAE,IAAI;AAAE,aAAOjD;IAAC;AAAn7X,IAAq7XlB,KAAgB,CAACxP,GAAEC,OAAKgN,GAAQ,QAAOjN,GAAEC,CAAC,GAAED,IAAE4P,GAAc5P,GAAEC,CAAC,GAAEgN,GAAQ,SAAQjN,CAAC,GAAEA,IAAE0P,GAAc1P,GAAEC,CAAC,GAAEgN,GAAQ,UAASjN,CAAC,GAAEA,IAAE8P,GAAe9P,GAAEC,CAAC,GAAEgN,GAAQ,UAASjN,CAAC,GAAEA,IAAEgQ,GAAahQ,GAAEC,CAAC,GAAEgN,GAAQ,SAAQjN,CAAC,GAAEA;AAAnoY,IAAsoYyP,KAAIzP,OAAG,CAACA,KAASA,EAAE,YAAY,MAApB,OAA6BA,MAAN;AAAxqY,IAAgrY0P,KAAc,CAAC1P,GAAEC,MAAID,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,OAAG2P,GAAa,GAAE1P,CAAC,CAAC,EAAE,KAAK,GAAG;AAA7vY,IAA+vY0P,KAAa,CAAC3P,GAAEC,MAAI;AAAC,UAAMyQ,IAAEzQ,EAAE,QAAMiP,GAAKC,GAAI,UAAA,IAAYD,GAAKC,GAAI,KAAA;AAAO,aAAOnP,EAAE,QAAQ0Q,GAAE,CAAC,GAAEA,GAAEiD,GAAE,GAAEG,OAAI;AAAC,YAAIF;AAAE,eAAO3G,GAAQ,SAAQjN,GAAE,GAAE0Q,GAAEiD,GAAE,GAAEG,EAAC,GAAErE,GAAIiB,CAAC,IAAEkD,KAAE,KAAGnE,GAAIkE,CAAC,IAAEC,KAAE,KAAKlD,CAAAA,SAAU,CAACA,IAAE,CAAA,WAAUjB,GAAI,CAAC,IAAEmE,KAAE,KAAKlD,CAAAA,IAAKiD,CAAAA,OAAQjD,CAAAA,IAAK,CAACiD,IAAE,CAAA,SAAQG,MAAG7G,GAAQ,mBAAkB6G,EAAC,GAAEF,KAAE,KAAKlD,CAAAA,IAAKiD,CAAAA,IAAK,CAAA,IAAKG,EAAAA,KAAMpD,CAAAA,IAAK,CAACiD,IAAE,CAAA,UAASC,KAAE,KAAKlD,CAAAA,IAAKiD,CAAAA,IAAK,CAAA,KAAMjD,CAAAA,IAAK,CAACiD,IAAE,CAAA,QAAQ1G,GAAQ,gBAAe2G,EAAC,GAAEA;MAAC,CAAC;IAAC;AAAjoZ,IAAmoZhE,KAAc,CAAC5P,GAAEC,MAAID,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,IAAI,OAAG6P,GAAa,GAAE5P,CAAC,CAAC,EAAE,KAAK,GAAG;AAAhtZ,IAAktZ4P,KAAa,CAAC7P,GAAEC,MAAI;AAACgN,MAAAA,GAAQ,SAAQjN,GAAEC,CAAC;AAAE,UAAMyQ,IAAEzQ,EAAE,QAAMiP,GAAKC,GAAI,UAAA,IAAYD,GAAKC,GAAI,KAAA,GAAOwE,IAAE1T,EAAE,oBAAkB,OAAK;AAAG,aAAOD,EAAE,QAAQ0Q,GAAE,CAACzQ,GAAEyQ,GAAE,GAAEoD,IAAEF,OAAI;AAAC,YAAIC;AAAE,eAAO5G,GAAQ,SAAQjN,GAAEC,GAAEyQ,GAAE,GAAEoD,IAAEF,EAAC,GAAEnE,GAAIiB,CAAC,IAAEmD,IAAE,KAAGpE,GAAI,CAAC,IAAEoE,IAAE,KAAKnD,CAAAA,OAAQiD,CAAAA,KAAM,CAACjD,IAAE,CAAA,WAAUjB,GAAIqE,EAAC,IAAED,IAAQnD,MAAN,MAAQ,KAAKA,CAAAA,IAAK,CAAA,KAAMiD,CAAAA,KAAMjD,CAAAA,IAAK,CAAC,IAAE,CAAA,SAAQ,KAAKA,CAAAA,IAAK,CAAA,KAAMiD,CAAAA,KAAM,CAACjD,IAAE,CAAA,WAAUkD,MAAG3G,GAAQ,mBAAkB2G,EAAC,GAAEC,IAAQnD,MAAN,MAAc,MAAN,MAAQ,KAAKA,CAAAA,IAAK,CAAA,IAAKoD,EAAAA,IAAKF,EAAAA,KAAMlD,CAAAA,IAAK,CAAA,IAAK,CAACoD,KAAE,CAAA,OAAM,KAAKpD,CAAAA,IAAK,CAAA,IAAKoD,EAAAA,IAAKF,EAAAA,KAAMlD,CAAAA,IAAK,CAAC,IAAE,CAAA,SAAQ,KAAKA,CAAAA,IAAK,CAAA,IAAKoD,EAAAA,IAAKF,EAAAA,KAAM,CAAClD,IAAE,CAAA,aAAYzD,GAAQ,OAAO,GAAE4G,IAAQnD,MAAN,MAAc,MAAN,MAAQ,KAAKA,CAAAA,IAAK,CAAA,IAAKoD,EAAAA,GAAIH,CAAAA,KAAMjD,CAAAA,IAAK,CAAA,IAAK,CAACoD,KAAE,CAAA,OAAM,KAAKpD,CAAAA,IAAK,CAAA,IAAKoD,EAAAA,GAAIH,CAAAA,KAAMjD,CAAAA,IAAK,CAAC,IAAE,CAAA,SAAQ,KAAKA,CAAAA,IAAK,CAAA,IAAKoD,EAAAA,KAAM,CAACpD,IAAE,CAAA,WAAWzD,GAAQ,gBAAe4G,CAAC,GAAEA;MAAC,CAAC;IAAC;AAAn5a,IAAq5a/D,KAAe,CAAC9P,GAAEC,OAAKgN,GAAQ,kBAAiBjN,GAAEC,CAAC,GAAED,EAAE,MAAM,KAAK,EAAE,IAAI,OAAG+P,GAAc,GAAE9P,CAAC,CAAC,EAAE,KAAK,GAAG;AAA5/a,IAA+/a8P,KAAc,CAAC/P,GAAEC,MAAI;AAACD,UAAEA,EAAE,KAAK;AAAE,UAAM0Q,IAAEzQ,EAAE,QAAMiP,GAAKC,GAAI,WAAA,IAAaD,GAAKC,GAAI,MAAA;AAAQ,aAAOnP,EAAE,QAAQ0Q,GAAE,CAACA,GAAE,GAAElO,GAAEsR,GAAEF,IAAEC,OAAI;AAAC5G,QAAAA,GAAQ,UAASjN,GAAE0Q,GAAE,GAAElO,GAAEsR,GAAEF,IAAEC,EAAC;AAAE,YAAME,IAAEtE,GAAIjN,CAAC,GAAErC,KAAE4T,KAAGtE,GAAIqE,CAAC,GAAEX,KAAEhT,MAAGsP,GAAImE,EAAC,GAAEI,KAAEb;AAAE,eAAY,MAAN,OAASa,OAAI,IAAE,KAAIH,KAAE5T,EAAE,oBAAkB,OAAK,IAAG8T,IAAErD,IAAQ,MAAN,OAAe,MAAN,MAAQ,aAAW,MAAI,KAAGsD,MAAG7T,OAAI2T,IAAE,IAAGF,KAAE,GAAQ,MAAN,OAAS,IAAE,MAAKzT,MAAGqC,IAAE,CAACA,IAAE,GAAEsR,IAAE,GAAEF,KAAE,MAAIE,IAAE,CAACA,IAAE,GAAEF,KAAE,MAAW,MAAP,SAAW,IAAE,KAAIzT,KAAEqC,IAAE,CAACA,IAAE,IAAEsR,IAAE,CAACA,IAAE,IAAS,MAAN,QAAUD,KAAE,OAAMnD,IAAE,GAAG,IAAElO,CAAAA,IAAKsR,CAAAA,IAAKF,EAAA,GAAIC,EAAAA,MAAK1T,KAAEuQ,IAAE,KAAKlO,CAAAA,OAAQqR,EAAAA,KAAM,CAACrR,IAAE,CAAA,WAAU2Q,OAAIzC,IAAE,KAAKlO,CAAAA,IAAKsR,CAAAA,KAAMD,EAAAA,KAAMrR,CAAAA,IAAK,CAACsR,IAAE,CAAA,SAAS7G,GAAQ,iBAAgByD,CAAC,GAAEA;MAAC,CAAC;IAAC;AAAjic,IAAmicV,KAAa,CAAChQ,GAAEC,OAAKgN,GAAQ,gBAAejN,GAAEC,CAAC,GAAED,EAAE,KAAK,EAAE,QAAQkP,GAAKC,GAAI,IAAA,GAAM,EAAE;AAAtnc,IAAyncc,KAAY,CAACjQ,GAAEC,OAAKgN,GAAQ,eAAcjN,GAAEC,CAAC,GAAED,EAAE,KAAK,EAAE,QAAQkP,GAAKjP,EAAE,oBAAkBkP,GAAI,UAAQA,GAAI,IAAA,GAAM,EAAE;AAA1uc,IAA6uce,KAAclQ,OAAG,CAACC,GAAEyQ,GAAEiD,GAAEnR,GAAE,GAAEoR,GAAEC,IAAEE,IAAE5T,GAAEgT,IAAEa,IAAEC,IAAEC,OAAI,GAAGxD,IAAEjB,GAAIkE,CAAC,IAAE,KAAGlE,GAAIjN,CAAC,IAAE,KAAKmR,CAAAA,OAAQ3T,IAAE,OAAK,EAAA,KAAKyP,GAAI,CAAC,IAAE,KAAKkE,CAAAA,IAAKnR,CAAAA,KAAMxC,IAAE,OAAK,EAAA,KAAK4T,IAAE,KAAKlD,CAAAA,KAAI,KAAKA,CAAAA,GAAI1Q,IAAE,OAAK,EAAA,EAAA,IAAQ+T,KAAEtE,GAAItP,CAAC,IAAE,KAAGsP,GAAI0D,EAAC,IAAE,IAAI,CAAChT,IAAE,CAAA,WAAUsP,GAAIuE,EAAC,IAAE,IAAI7T,CAAAA,IAAK,CAACgT,KAAE,CAAA,SAAQc,KAAE,KAAK9T,CAAAA,IAAKgT,EAAAA,IAAKa,EAAAA,IAAKC,EAAAA,KAAIjU,IAAE,IAAIG,CAAAA,IAAKgT,EAAAA,IAAK,CAACa,KAAE,CAAA,OAAM,KAAKD,EAAAA,EAAAA,GAAM,KAAK;AAAlhd,IAAohd5D,KAAQ,CAACnQ,GAAEC,GAAEyQ,MAAI;AAAC,eAAQA,IAAE,GAAEA,IAAE1Q,EAAE,QAAO0Q,IAAI,KAAG,CAAC1Q,EAAE0Q,CAAAA,EAAG,KAAKzQ,CAAC,EAAE,QAAM;AAAG,UAAGA,EAAE,WAAW,UAAQ,CAACyQ,EAAE,mBAAkB;AAAC,iBAAQA,IAAE,GAAEA,IAAE1Q,EAAE,QAAO0Q,IAAI,KAAGzD,GAAQjN,EAAE0Q,CAAAA,EAAG,MAAM,GAAE1Q,EAAE0Q,CAAAA,EAAG,WAAS5B,GAAW,OAAK9O,EAAE0Q,CAAAA,EAAG,OAAO,WAAW,SAAO,GAAE;AAAC,cAAM,IAAE1Q,EAAE0Q,CAAAA,EAAG;AAAO,cAAG,EAAE,UAAQzQ,EAAE,SAAO,EAAE,UAAQA,EAAE,SAAO,EAAE,UAAQA,EAAE,MAAM,QAAM;QAAE;AAAC,eAAM;MAAE;AAAC,aAAM;IAAE;AAAp2d,IAAm3dmL,KAAU,CAACpL,GAAEC,GAAEyQ,MAAI;AAAC,UAAG;AAACzQ,YAAE,IAAIgP,GAAMhP,GAAEyQ,CAAC;MAAC,SAAO1Q,GAAN;AAAS,eAAM;MAAE;AAAC,aAAOC,EAAE,KAAKD,CAAC;IAAC;AAAE,KAA4B,EAAC,YAAWoQ,OAAYrD;AAApD,KAA8D,EAAC,IAAGsD,IAAK,GAAEC,OAAKpD;AAA9E,IAAmFqD,KAAM,CAACvQ,GAAEC,MAAI;AAAC,UAAGA,KAAa,OAAOA,KAAjB,aAAqBA,IAAE,EAAC,OAAM,CAAC,CAACA,GAAE,mBAAkB,MAAE,IAAGD,aAAa4N,GAAO,QAAO5N;AAAuE,UAAxD,OAAOA,KAAjB,YAAkCA,EAAE,SAAOoQ,MAA0B,EAAEnQ,EAAE,QAAMoQ,GAAKC,GAAI,KAAA,IAAOD,GAAKC,GAAI,IAAA,GAAO,KAAKtQ,CAAC,EAAE,QAAO;AAAK,UAAG;AAAC,eAAO,IAAI4N,GAAO5N,GAAEC,CAAC;MAAC,SAAO,GAAN;AAAS,eAAO;MAAI;IAAC;AAAnX,IAAqXuQ,KAAQD;AAA7X,KAAmY,EAAC,IAAGE,IAAG,GAAEC,OAAGxD;AAA/Y,IAAia7B,KAAO,CAACrL,GAAEC,MAAI;AAAC,UAAGD,aAAa4N,GAAO,QAAO5N;AAAE,UAAa,OAAOA,KAAjB,aAAqBA,IAAE,OAAOA,CAAC,IAAa,OAAOA,KAAjB,SAAmB,QAAO;AAAK,UAAI2T,IAAE;AAAK,WAAI1T,IAAEA,KAAG,CAAC,GAAG,KAAI;AAAC,YAAI;AAAE,gBAAM,IAAEwQ,GAAGC,GAAE,SAAA,EAAW,KAAK1Q,CAAC,OAAK,CAAC2T,KAAGA,EAAE,QAAMA,EAAE,CAAA,EAAG,WAAS3T,EAAE,UAAS2T,MAAG,EAAE,QAAM,EAAE,CAAA,EAAG,WAASA,EAAE,QAAMA,EAAE,CAAA,EAAG,WAASA,IAAE,IAAGlD,GAAGC,GAAE,SAAA,EAAW,YAAU,EAAE,QAAM,EAAE,CAAA,EAAG,SAAO,EAAE,CAAA,EAAG;AAAOD,WAAGC,GAAE,SAAA,EAAW,YAAU;MAAE,MAAMiD,KAAE3T,EAAE,MAAMyQ,GAAGC,GAAE,MAAA,CAAO;AAAE,aAAciD,MAAP,OAAS,OAAKnD,GAAQ,GAAGmD,EAAE,CAAA,CAAA,IAAMA,EAAE,CAAA,KAAI,GAAA,IAAOA,EAAE,CAAA,KAAI,GAAA,IAAM1T,CAAC;IAAC;AIOz3f,IAAMwB,KAAiC,CAAC;AAUxC,IAAMkP,KAAmB,EAC9B,aAAa,aACb,2BAA2B,gBAC3B,gCAAgC,qBAChC,gCAAgC,oBAClC;AFxBO,IAAMhP,IAAN,cAA4B,MAAM;MAGvC,YAAmB+G,GAA2ByL,GAAoB;AAChE,cAAM,qBAAqBzL,CAAAA,KAASyL,CAAAA,EAAY;AAD/B,aAAA,OAAAzL;AAA2B,aAAA,aAAAyL;AAF9C,aAAA,YAAY;AAIV,eAAO,eAAe,MAAMxS,EAAc,SAAS;MACrD;IACF;AAPO,IAaMiP,KAAN,cAA4B,MAAM;MAOvC,YAAYwD,GAAmC;AAC7C,cAAM;AAPR,aAAA,YAAY;AASV,YAAMC,IAAiB,OAAOD,KAAA,OAAA,SAAAA,EAAa,IAAI;AAC/C,aAAK,cAAaA,KAAA,OAAA,SAAAA,EAAa,YAAW,kBAC1C,KAAK,OAAOlT,GAAmBmT,CAAc,IAAIA,IAAiBlT,EAAa,eAC/E,KAAK,UAAU,qBAAqB,KAAK,IAAA,KAAS,KAAK,UAAA,IACvD,KAAK,QAAOiT,KAAA,OAAA,SAAAA,EAAa,SAAQ,QAEjC,OAAO,eAAe,MAAMxD,GAAc,SAAS;MACrD;IACF;AA/BO,IAsCM/N,KAAN,MAAsB;MAG3B,YAAmB6F,GAA6ByL,GAAoB;AAAjD,aAAA,OAAAzL;AAA6B,aAAA,aAAAyL;AAC9C,aAAK,UAAU,uBAAuBzL,CAAAA,KAASyL,CAAAA;MACjD;MAKO,MAAM;AACX,gBAAQ,KAAK,KAAK,OAAO;MAC3B;IACF;AAnDO,IA0DMtD,IAAN,cAA+C,MAAM;MAG1D,YAAYzO,GAA+BsG,GAA8ByL,GAA2B3M,GAAa;AAC/G,cAAM,0BAA0BpF,EAAI,IAAA,OAAWsG,CAAAA,KAASyL,CAAAA,EAAY;AAD3B,aAAA,OAAAzL;AAA8B,aAAA,aAAAyL;AAA2B,aAAA,OAAA3M;AAFpG,aAAA,YAAY;AAIV,eAAO,eAAe,MAAMqJ,EAAoB,SAAS;MAC3D;IACF;AAjEO,IAwEMC,KAAN,MAA4B;MAGjC,YAAY1O,GAA+BsG,GAA8ByL,GAAoB;AAAlD,aAAA,OAAAzL;AAA8B,aAAA,aAAAyL;AACvE,aAAK,UAAU,4BAA4B/R,EAAI,IAAA,OAAWsG,CAAAA,KAASyL,CAAAA;MACrE;MAKO,MAAM;AACX,gBAAQ,KAAK,KAAK,OAAO;MAC3B;IACF;AKvFA,IAAMxQ,KAAeH,GAAmB;ACJxC,IAAMM,KAA4B,OAAO,oCAAoC;AA8DtE,IAAMuI,KAAN,MAAwC;MAS7C,YAAYiI,GAAiG;AACvGA,qBAA6BjI,MAC/B,KAAK,WAAWiI,EAAkB,QAAQ,SAC1C,KAAK,MAAMA,EAAkB,QAAQ,IACrC,KAAK,UAAUA,EAAkB,QAAQ,QACzC,KAAK,SAASA,EAAkB,QAAQ,SAC/BrT,GAAyBqT,CAAiB,KACnD,KAAK,WAAWA,EAAkB,SAClC,KAAK,MAAMA,EAAkB,IAC7B,KAAK,UAAUA,EAAkB,QACjC,KAAK,SAASA,EAAkB,UAEhC,KAAK,WAAWA,EAAkB,SAClC,KAAK,MAAMA,EAAkB,IAC7B,KAAK,UAAU,QACf,KAAK,SAAS;MAElB;MAEO,WAAWC,GAA6B;AAC7C,eAAA,KAAK,SAASA,GACP;MACT;MAEO,YAAY9O,GAA4B;AAC7C,eAAA,KAAK,UAAUA,GACR;MACT;MAEA,IAAW,WAAW;AACpB,eAAO,OAAO,KAAK,UAAW,eAAe,KAAK,WAAW;MAC/D;MAEA,IAAW,YAAY;AACrB,eAAO,OAAO,KAAK,WAAY;MACjC;MAEA,IAAW,UAAkC;AAC3C,eAAO,EACL,SAAS,KAAK,UACd,IAAI,KAAK,KACT,QAAQ,KAAK,SACb,OAAO,KAAK,OACd;MACF;IACF;AE1HA,IAAAsL,KAAyB,GAAA,GAAA,CAAA;AAAzB,IAQavM,KAAN,cAAmE,GAAAuO,QAExE;IAAC;ADkCH,IAAMnO,KAAkB,OAAO,cAAc;AH9BtC,IAAMsG,IAAN,MAAiB;MACtB,YAAsBsJ,GAAc;AAAd,aAAA,MAAAA;MAAe;MAKrC,IAAc,UAA0B;AACtC,eAAQ,KAAK,IAAY;MAC3B;MAKU,QAAkE3Q,GAAyC;AACnH,YAAM4Q,IAAkB,KAAK,QAAQ,KACnCC,EAA2B,sBAC3B1Q,EAAiCH,CAAO,CAC1C,GAGM2B,IAAaX,GAAqC,CAACiB,GAASC,MAAW;AAC3E0O,YACG,KAAME,CAAAA,OAAQ;AAEb,gBADAC,EAAc,GACVD,GAAI,SAAU5O,GAAO,IAAI6K,GAAc+D,GAAI,QAAQ,KAAK,CAAC;qBACpDA,GAAI,UAAW7O,GAAQ6O,GAAI,QAAQ,MAAoB;gBAC3D,OAAM7S,GAA6B;UAC1C,CAAC,EACA,MAAO6D,CAAAA,OAAQ;AACdiP,cAAc,GACd7O,EAAOJ,EAAG;UACZ,CAAC;QACL,CAAC,GAIKiP,IAAgB,KAAK,QAAQ,GAAGC,EAA2B,oBAAqBhC,OAAQ;AAlDlG,cAAA5O;AAmDM,cAAM,EAAE,UAAAmI,EAAS,IAAIyG,EAAI;AAEzB,cAAIzG,EAAS,OAAOvI,EAAQ,QAAMI,KAAAmI,EAAS,WAAT,OAAA,SAAAnI,GAAiB,QAAO;AACxD,gBAAM,EAAE,OAAAiI,IAAO,QAAA7H,IAAS,CAAC,EAAE,IAAI+H,EAAS;AACxC5G,cAAW,KAAK0G,IAAO,GAAG7H,CAAM;UAClC;QACF,CAAC;AAED,eAAOmB;MACT;MAGU,wBAAsCsP,GAA+BC,GAAmB;AAKhG,eAJWrQ,OAAc;AACvB,cAAMiQ,IAAMvQ,GAA4B4Q,EAAmB,mBAAmB,CAAC,EAAE,WAAAD,GAAW,WAAAD,GAAW,MAAApQ,EAAK,CAAC,CAAC;AAC9G,eAAK,QAAQiQ,CAAG;QAClB;MAEF;IACF;ADjDO,IAAM3D,IAA4C,EACvD,aAAa,WACb,2BAA2B,WAC3B,gCAAgC,WAChC,gCAAgC,UAClC;AALO,IAOMC,KAAN,cAAyB/F,EAAW;MAMlC,mBAAmB+J,GAAgD;AACxE,YAAMC,IACJzT,GAAe,YAAY,6BAC3BA,GAAe,YAAY,kCAC3BA,GAAe,YAAY;AAG7B,YAAIyT,KAAqBlP,GAAsBvE,GAAe,SAAS,EAAE,EACvE,OAAM,IAAI,MACR,sIACF;AACSyT,aAETjS,EAAyB,EACvB,QAAQ,6BACR,iBAAiB+N,GACjB,YAAY,2BACd,CAAC,EAAE,IAAI;AAGT,YAAM,EAAE,OAAAmE,GAAO,QAAAC,IAAS,MAAM,aAAAC,GAAa,WAAAC,GAAW,UAAAC,GAAS,IAAIN,GAE7DlJ,KAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,6BAA6BA,EAAmB,oBACvF,CAAC,EAAE,OAAAG,GAAO,QAAAC,GAAQ,aAAAC,GAAa,WAAAC,GAAW,UAAAC,GAAS,CAAC,CACtD;AACA,eAAO,KAAK,QAAwDxJ,EAAc;MACpF;MAOO,aAAakJ,GAA0C;AAC5D,YAAM,EAAE,aAAAO,GAAa,UAAAD,EAAS,IAAIN,GAC5BlJ,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,uBAAuBA,EAAmB,cACjF,CAAC,EAAE,aAAAQ,GAAa,QAAQ,MAAM,UAAAD,EAAS,CAAC,CAC1C;AACA,eAAO,KAAK,QAAuBxJ,CAAc;MACnD;MAOO,kBAAkBkJ,GAA+C;AACtE,YAAM,EAAE,OAAAE,GAAO,QAAAC,GAAQ,eAAAK,GAAe,WAAAH,GAAW,UAAAC,EAAS,IAAIN,GACxDlJ,KAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,4BAA4BA,EAAmB,mBACtF,CAAC,EAAE,OAAAG,GAAO,QAAAC,GAAQ,eAAAK,GAAe,WAAAH,GAAW,UAAAC,EAAS,CAAC,CACxD,GACMG,KAAS,KAAK,QAAuD3J,EAAc;AACzF,eAAI,CAAC0J,KAAiBC,MACpBA,GAAO,GAAGC,EAA4B,OAAO,MAAM;AACjD,eAAK,wBAAwBA,EAA4B,OAAO5J,GAAe,EAAS,EAAE;QAC5F,CAAC,GAEC,CAACqJ,KAAUM,OACbA,GAAO,GAAGE,EAA2B,gBAAiBC,OAAgB;AACpE,eAAK,wBAAwBD,EAA2B,gBAAgB7J,GAAe,EAAS,EAAE8J,CAAG;QACvG,CAAC,GACDH,GAAO,GAAGE,EAA2B,eAAgBE,OAAgB;AACnE,eAAK,wBAAwBF,EAA2B,eAAe7J,GAAe,EAAY,EAAE+J,CAAG;QACzG,CAAC,GACDJ,GAAO,GAAGE,EAA2B,QAAQ,MAAM;AACjD,eAAK,wBAAwBA,EAA2B,QAAQ7J,GAAe,EAAS,EAAE;QAC5F,CAAC,IAEI2J;MACT;MAYO,oBAAoBT,GAAkD;AAC3E,YAAM,EAAE,yBAAAc,GAAyB,UAAAR,EAAS,IAAIN,KAAiB,CAAC,GAC5De,IAAqBD,KAAA,OAAAA,IAA2B;AAEpD,YAAI,CAACA,KAA2BtU,GAAe,aAAa,OAAO;AACjEuU,cAAqB,OAAO,SAAS;AAGrC,cAAMC,IAAkB,OAAO,SAAS,SAAS,OAAO,SAAS;AACjE,iBAAO,QAAQ,aAAa,MAAM,IAAIA,CAAe;QACvD;AAEA,YAAMlK,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,8BAA8BA,EAAmB,qBACxF,CAACgB,GAAoBT,CAAQ,CAC/B;AAEA,eAAO,KAAK,QAAuBxJ,CAAc;MACnD;MAGO,sBAAsBU,GAAa;AACxC,YAAMV,IAAiB3H,GAA4B4Q,EAAmB,uBAAuB,CAAC,EAAE,KAAAvI,EAAI,CAAC,CAAC;AACtG,eAAO,KAAK,QAAiBV,CAAc;MAC7C;MAEO,kBAAkBkJ,GAAyC;AAChE,YAAM,EAAE,OAAAE,GAAO,QAAAC,IAAS,KAAK,IAAIH,GAC3BlJ,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,sBAAsBA,EAAmB,aAChF,CAAC,EAAE,OAAAG,GAAO,QAAAC,EAAO,CAAC,CACpB,GAEMM,IAAS,KAAK,QAAiD3J,CAAc;AAEnF,eAAKqJ,MACHM,EAAO,GAAGQ,EAAsB,OAAO,MAAM;AAC3C,eAAK,wBAAwBA,EAAsB,OAAOnK,EAAe,EAAS,EAAE;QACtF,CAAC,GACD2J,EAAO,GAAGQ,EAAsB,QAAQ,MAAM;AAC5C,eAAK,wBAAwBA,EAAsB,QAAQnK,EAAe,EAAS,EAAE;QACvF,CAAC,GACD2J,EAAO,GAAGQ,EAAsB,gBAAiBL,OAAgB;AAC/D,eAAK,wBAAwBK,EAAsB,gBAAgBnK,EAAe,EAAS,EAAE8J,CAAG;QAClG,CAAC,GACDH,EAAO,GAAGQ,EAAsB,eAAgBJ,OAAgB;AAC9D,eAAK,wBAAwBI,EAAsB,eAAenK,EAAe,EAAY,EAAE+J,CAAG;QACpG,CAAC,GACDJ,EAAO,GAAGS,EAAqB,mBAAoBC,OAAc;AAC/D,eAAK,wBAAwBD,EAAqB,mBAAmBpK,EAAe,EAAS,EAAEqK,CAAQ;QACzG,CAAC,GACDV,EAAO,GAAGS,EAAqB,QAAQ,MAAM;AAC3C,eAAK,wBAAwBA,EAAqB,QAAQpK,EAAe,EAAS,EAAE;QACtF,CAAC,GACD2J,EAAO,GAAGS,EAAqB,gBAAiBN,OAAgB;AAC9D,eAAK,wBAAwBM,EAAqB,gBAAgBpK,EAAe,EAAS,EAAE8J,CAAG;QACjG,CAAC,IAEIH;MACT;IACF;AQlLA,IAAAxE,KAAA,CAAA;AAAAmF,OAAAnF,IAAA,EAAA,OAAA,MAAAC,IAAA,SAAA,MAAAjK,IAAA,SAAA,MAAA2B,IAAA,KAAA,MAAAxH,IAAA,MAAA,MAAAgQ,IAAA,QAAA,MAAAD,IAAA,YAAA,MAAApI,IAAA,SAAA,MAAAb,EAAAA,CAAAA;AAgBO,IAAMjB,KAAUd,GAAuB,SAAS;AAAhD,IACM+B,IAAU/B,GAAuB,SAAS;AADhD,IAEM4C,KAAa5C,GAAuB,YAAY;AAFtD,IAGM+K,KAAQ/K,GAAuB,OAAO;AAH5C,IAIMgL,KAAShL,GAAuB,QAAQ;AAJ9C,IAKM/E,KAAM+E,GAAuB,KAAK;AALxC,IAMMiL,KAAOjL,GAAuB,MAAM;AAN1C,IAOMyC,KAAUzC,GAAuB,SAAS;AEpBhD,IAAMe,KAAwB;AAA9B,IACMW,KAAuB;AAD7B,IAEDH,KAAY;AAFX,IAGD2J,KAAa;AAHZ,IAKDrJ,KAAgC,EACpC,MAAMN,IACN,YAAY2J,GACd;ACRO,IAAMvI,KAAmB;AAAzB,IACMgB,KAAqB;AAD3B,IAEMH,KAA4B;AAFlC,IAIDjC,KAAY;AAJX,IAKDqC,KAAc;AJYb,IAAMuH,KAAN,cAAyBrG,EAAW;MAApC,cAAA;AAAA,cAAA,GAAA,SAAA;AA4IL,aAAQ,iBAAiB;AACzB,aAAQ,2BAA2B;AACnC,aAAQ,yBAAkD,CAAC;MAAA;MA7IpD,WAAW+J,GAAyC;AACzD,YAAMlJ,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,qBAAqBA,EAAmB,YAC/E,CAACC,CAAa,CAChB;AACA,eAAO,KAAK,QAAgBlJ,CAAc;MAC5C;MAEO,gBAAgBkJ,GAA8C;AACnE,YAAMlJ,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,0BAA0BA,EAAmB,iBACpF,CAACC,CAAa,CAChB;AACA,eAAO,KAAK,QAAgBlJ,CAAc;MAC5C;MAEa,UAAU;AAAA,eAAA1F,GAAA,MAAA,MAAA,aAAA;AACrB,cAAMiQ,IAAe,MAAMpP,GAAQ,KAAK,cAAc,GAChD6E,IAAiB3H,GAA4B4Q,EAAmB,SAAS,CAAC,EAAE,YAAYsB,EAAa,CAAC,CAAC;AAC7G,iBAAO,KAAK,QAA2BvK,CAAc;QACvD,CAAA;MAAA;MAEO,aAAa;AAClB,eAAOlH,GAA+B,CAAOiB,GAASC,MAAWM,GAAA,MAAA,MAAA,aAAA;AAC/D,cAAI;AACF,gBAAIkQ,IAAmB;AACnB,iBAAK,IAAI,oBACXA,KAAoB,MAAMrP,GAAQ,KAAK,wBAAwB,OAAO,QAIlEqP,KACFzQ,EAAQ,IAAI;AAIhB,gBAAMiG,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,qBAAqBA,EAAmB,UACjF,GACMwB,IAAqB,MAAM,KAAK,QAAiBzK,CAAc;AACjE,iBAAK,IAAI,oBACPyK,IACFrO,EAAQ,KAAK,0BAA0B,IAAI,IAE3Ca,GAAW,KAAK,wBAAwB,GAEtCuN,KAAoB,CAACC,KACvB,KAAK,kBAAkB,IAAI,IAG/B1Q,EAAQ0Q,CAAkB;UAC5B,SAAS7Q,GAAP;AACAI,cAAOJ,CAAG;UACZ;QACF,CAAA,CAAC;MACH;MAEO,SAAS;AACd,eAAAqD,GAAW,KAAK,cAAc,GAC9BA,GAAW,KAAK,wBAAwB,GACxCL,EAAkB,GAEX9D,GAA+B,CAAOiB,GAASC,MAAWM,GAAA,MAAA,MAAA,aAAA;AAC/D,cAAI;AACF,gBAAM0F,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,iBAAiBA,EAAmB,MAC7E,GACM5I,IAAW,MAAM,KAAK,QAAiBL,CAAc;AACvD,iBAAK,IAAI,mBACX,KAAK,kBAAkBK,CAAQ,GAEjCtG,EAAQsG,CAAQ;UAClB,SAASzG,GAAP;AACAI,cAAOJ,CAAG;UACZ;QACF,CAAA,CAAC;MACH;MAGO,kBAAkB8Q,GAA8B;AACrD,YAAM1K,IAAiB3H,GAA4B4Q,EAAmB,uBAAuByB,IAAQ,CAACA,CAAK,IAAI,CAAC,CAAC;AACjH,eAAO,KAAK,QAAkB1K,CAAc;MAC9C;MAEO,aAAakJ,GAA2C;AAC7D,YAAMlJ,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,uBAAuBA,EAAmB,cACjF,CAACC,CAAa,CAChB;AACA,eAAO,KAAK,QAA2BlJ,CAAc;MACvD;MAEO,eAAekJ,GAA4C;AAChE,YAAMlJ,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,yBAAyBA,EAAmB,gBACnF,CAACC,CAAa,CAChB;AACA,eAAO,KAAK,QAAwBlJ,CAAc;MACpD;MAEO,mBAAmB;AACxB,YAAMA,IAAiB3H,GAA4B4Q,EAAmB,QAAQ;AAC9E,eAAO,KAAK,QAAiBjJ,CAAc;MAC7C;MAGO,cAAc;AACnB9I,UAAyB,EACvB,QAAQ,sBACR,iBAAiB+N,GACjB,YAAY,iBACd,CAAC,EAAE,IAAI;AACP,YAAMjF,IAAiB3H,GACrB,KAAK,IAAI,WAAW4Q,EAAmB,sBAAsBA,EAAmB,WAClF;AACA,eAAO,KAAK,QAA2BjJ,CAAc;MACvD;MAEO,gBAAgB2K,GAAuC;AAC5D,aAAK,uBAAuB,KAAKA,CAAQ;MAC3C;MAEO,YAAY;AACjB,YAAM3K,IAAiB3H,GAA4B4Q,EAAmB,SAAS;AAC/E,eAAO,KAAK,QAAiBjJ,CAAc;MAC7C;MAEO,aAAa;AAClB,YAAMA,IAAiB3H,GAA4B4Q,EAAmB,UAAU;AAChF,eAAO,KAAK,QAAiBjJ,CAAc;MAC7C;MAGQ,kBAAkB4K,GAA0B;AAClD,aAAK,uBAAuB,QAASD,OAAa;AAChDA,YAASC,CAAS;QACpB,CAAC;MACH;IAKF;AMrIO,IAAMnF,KAAN,cAA2BtG,EAAW;MAAtC,cAAA;AAAA,cAAA,GAAA,SAAA;AAyHL,aAAQ,iBAAiB;MAAA;MAvHlB,gBAAgB;AACrB,YAAM1F,IAAaX,GAAgD,CAAOiB,GAASC,MAAWM,GAAA,MAAA,MAAA,aAAA;AAC5F,cAAI;AAEF,gBAAI,KAAK,kBAAkB,MAAM,MAAM,KAAK,gBAAgBuQ,EAAQ,QAAQ,IAAI;AAC9E,kBAAMnR,IAAS,MAAM,KAAK,2BAA2BmR,EAAQ,QAAQ;AACrE9Q,gBAAQL,CAAM;AACd;YACF;AAEA,gBAAI,KAAK,wBAAwB,MAAM,MAAM,KAAK,gBAAgBmR,EAAQ,cAAc,IAAI;AAC1F,kBAAMnR,IAAS,MAAM,KAAK,2BAA2BmR,EAAQ,cAAc;AAC3E9Q,gBAAQL,CAAM;AACd;YACF;AACA,gBAAMoR,IAAU,KAAK,WAAW,GAC1BC,IAAsB1S,GAA4B4Q,EAAmB,OAAO,CAAC6B,CAAO,CAAC,GACrFE,KAAe,KAAK,QAAuCD,CAAmB;AACpFC,YAAAA,GAAa,GAAGzE,EAAO,gBAAwBjO,OAC7C,KAAK,qBAAqB2S,GAAAC,EAAA,CAAA,GAAK5S,CAAAA,GAAL,EAAa,WAAWyS,EAAoB,GAAa,CAAA,CAAC,CACtF,GACAC,GAAa,GAAG,oBAA4B1S,OAAgC;AAC1EmB,gBAAW,KAAK,oBAAoBnB,CAAM;YAC5C,CAAC;AACD,gBAAMoB,KAAS,MAAMsR;AAChBtR,YAAAA,GAAe,SAAOM,EAAON,EAAM,GACxCK,EAAQL,EAAM;UAChB,SAAS8O,GAAP;AACAxO,cAAOwO,CAAK;UACd;QACF,CAAA,CAAC;AACD,eAAO/O;MACT;MAGO,OAAO0R,GAAuB;AACnC,eAAO,KAAK,QAAoC9S,GAA4B4Q,EAAmB,QAAQ,CAACkC,CAAM,CAAC,CAAC;MAClH;MAEO,cAAc;AACnB,eAAO,KAAK,QAAiB9S,GAA4B4Q,EAAmB,WAAW,CAAC;MAC1F;MAEO,mBAAmB;AACxB,eAAO,KAAK,QAAiB5Q,GAA4B4Q,EAAmB,gBAAgB,CAAC;MAC/F;MAEO,aAAa;AAClB,eAAO,KAAK,QAAiB5Q,GAA4B4Q,EAAmB,UAAU,CAAC;MACzF;MAEO,WAAW;AAChB,eAAO,KAAK,QAAiB5Q,GAA4B4Q,EAAmB,QAAQ,CAAC;MACvF;MAEO,eAAe;AACpB,eAAO,KAAK,QAAiB5Q,GAA4B4Q,EAAmB,YAAY,CAAC;MAC3F;MAEO,uBAAuBmC,GAAiBC,GAAwC;AACrF,eAAO,KAAK,QACVhT,GAA4B4Q,EAAmB,wBAAwB,CAACmC,GAASC,CAAW,CAAC,CAC/F;MACF;MAIa,UAAU;AAAA,eAAA/Q,GAAA,MAAA,MAAA,aAAA;AACrBpD,YAAyB,EACvB,QAAQ,oBACR,iBAAiB+N,GACjB,YAAY,iBACd,CAAC,EAAE,IAAI;AACP,cAAMsF,IAAe,MAAMpP,GAAQ,KAAK,cAAc,GAChD6E,IAAiB3H,GAA4B4Q,EAAmB,SAAS,CAAC,EAAE,YAAYsB,EAAa,CAAC,CAAC;AAC7G,iBAAO,KAAK,QAAoBvK,CAAc;QAChD,CAAA;MAAA;MAIO,aAAa;AAClB9I,UAAyB,EACvB,QAAQ,uBACR,iBAAiB+N,GACjB,YAAY,gBACd,CAAC,EAAE,IAAI,GACPhI,GAAW,KAAK,cAAc,GAC9BL,EAAkB;AAClB,YAAMoD,IAAiB3H,GAA4B4Q,EAAmB,UAAU;AAChF,eAAO,KAAK,QAAiBjJ,CAAc;MAC7C;MAIO,sBAAsB0K,GAA8B;AACzDxT,UAAyB,EACvB,QAAQ,kCACR,iBAAiB+N,GACjB,YAAY,+BACd,CAAC,EAAE,IAAI;AACP,YAAMjF,IAAiB3H,GAA4B4Q,EAAmB,uBAAuByB,IAAQ,CAACA,CAAK,IAAI,CAAC,CAAC;AACjH,eAAO,KAAK,QAAkB1K,CAAc;MAC9C;MAGa,cAA4B;AAAA,eAAA1F,GAAA,MAAA,MAAA,aAAA;AAEvC,kBADqB,MAAMa,GAAQ,KAAK,cAAc,GAAA;YAAA,KAE/C0P,EAAQ;AACX,qBAAO,KAAK,oBAAoB;YAAA,KAC7BA,EAAQ;AACX,qBAAO,KAAK,oBAAoB;YAAA;AAEhC,qBAAO,KAAK,IAAI;UAAA;QAEtB,CAAA;MAAA;MAOQ,sBAA+B;AA1JzC,YAAA3S,GAAAC,GAAAC;AA2JI,iBACGF,IAAA,OAAe,aAAf,OAAA,SAAAA,EAAyB,eAC1B,CAAC,GAAEE,KAAAD,IAAA,OAAe,aAAf,OAAA,SAAAA,EAAyB,cAAzB,QAAAC,EAAoC,KAAMkT,OAAkBA,KAAA,OAAA,SAAAA,EAAU,UAAA;MAE7E;MAEQ,oBAA6B;AACnC,eAAO,KAAK,SAAS,KAAK,KAAK,oBAAoB;MACrD;MAEQ,sBAA2B;AArKrC,YAAApT,GAAAC;AAsKI,iBAAQA,KAAAD,IAAA,OAAe,aAAf,OAAA,SAAAA,EAAyB,cAAzB,OAAA,SAAAC,EAAoC,KAAM/D,OAAWA,KAAA,OAAA,SAAAA,EAAG,UAAA,MAAgB,OAAe;MACjG;MAEQ,oBAAuC;AAE7C,YAAI,KAAK,SAAS,KAAK,CAAC,KAAK,oBAAoB,GAAG;AAClD,cAAMmX,IAAmB,kCAAkC,OAAO,SAAS,KAAK,QAAQ,iBAAiB,EAAE,CAAA;AAC3G,iBAAO,SAAS,OAAOA;QACzB;AACA,eAAO,KAAK,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,sBAAsB,CAAC;MAC7E;MAGQ,4BAAqC;AAnL/C,YAAArT,GAAAC,GAAAC;AAoLI,iBACGF,IAAA,OAAe,aAAf,OAAA,SAAAA,EAAyB,qBAC1B,CAAC,GAAEE,KAAAD,IAAA,OAAe,aAAf,OAAA,SAAAA,EAAyB,cAAzB,QAAAC,EAAoC,KAAMkT,OAAkBA,KAAA,OAAA,SAAAA,EAAU,gBAAA;MAE7E;MAEQ,0BAAmC;AA1L7C,YAAApT;AA2LI,eAAO,CAAC,GAAEA,IAAA,OAAe,aAAf,QAAAA,EAAyB;MACrC;MAEQ,sBAA2B;AA9LrC,YAAAA,GAAAC;AA+LI,iBAAQA,KAAAD,IAAA,OAAe,aAAf,OAAA,SAAAA,EAAyB,cAAzB,OAAA,SAAAC,EAAoC,KAAM/D,OAAWA,KAAA,OAAA,SAAAA,EAAG,gBAAA,MAAsB,OAAe;MACvG;MAEQ,0BAA6C;AAEnD,YAAI,KAAK,SAAS,KAAK,CAAC,KAAK,wBAAwB,GAAG;AACtD,cAAMoX,IAAyB,mCAAmC,mBAAmB,OAAO,SAAS,IAAI,CAAA;AACzG,iBAAO,SAAS,OAAOA;QACzB;AAEA,eADiB,KAAK,oBAAoB,EAC1B,QAAQ,EAAE,QAAQ,sBAAsB,CAAC;MAC3D;MAGQ,WAAoB;AAC1B,eAAO,gGAAgG,KACrG,UAAU,SACZ;MACF;MAEQ,aAAsB;AAC5B,eAAO,EACL,KAAK,EACH,qBAAqB,KAAK,oBAAoB,GAC9C,2BAA2B,KAAK,0BAA0B,EAC5D,EACF;MACF;MAEQ,0BAA0BF,GAAiC;AACjE,gBAAQA,GAAAA;UAAAA,KACDT,EAAQ;AACX,mBAAO,KAAK,kBAAkB;UAAA,KAC3BA,EAAQ;AACX,mBAAO,KAAK,wBAAwB;UAAA;AAEpC,kBAAM,IAAI,MAAM,qBAAqBS,CAAAA,mDAA2D;QAAA;MAEtG;MAEQ,gBAAgBG,GAAmC;AACzD,YAAMC,IAAkBrT,GAA4B,wBAAwB,CAAC,EAAE,QAAAoT,EAAO,CAAC,CAAC;AACxF,eAAO,KAAK,QAAiBC,CAAe;MAC9C;MAGc,qBAAqBpT,GAAgD;AAAA,eAAAgC,GAAA,MAAA,MAAA,aAAA;AACjF,cAAI;AACF,gBAAM8Q,IAAU,MAAM,KAAK,0BAA0B9S,EAAO,MAAM;AAClE,kBAAM8D,EAAQ,KAAK,gBAAgB9D,EAAO,MAAM,GAChD,KAAK,wBAAwBiO,EAAO,iBAAwBjO,EAAO,SAAgB,EAAE8S,CAAO;UAC9F,SAAS5C,GAAP;AACA,oBAAQ,MAAMA,CAAK,GACnB,KAAK,wBAAwBjC,EAAO,gBAAuBjO,EAAO,SAAgB,EAAE;UACtF;QACF,CAAA;MAAA;MAEc,2BAA2BmT,GAAoC;AAAA,eAAAnR,GAAA,MAAA,MAAA,aAAA;AAC3E,cAAI8Q;AACAK,gBAAWZ,EAAQ,aACrBO,IAAU,MAAM,KAAK,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,sBAAsB,CAAC,IAElFK,MAAWZ,EAAQ,mBACrBO,IAAU,MAAM,KAAK,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,sBAAsB,CAAC,IAEtF,MAAMhP,EAAQ,KAAK,gBAAgBqP,CAAM;AACzC,cAAME,IAAqBtT,GAA4B4Q,EAAmB,aAAa,CAAC,EAAE,QAAAwC,GAAQ,SAAAL,EAAQ,CAAC,CAAC;AAE5G,iBAD2B,KAAK,QAAkBO,CAAkB;QAEtE,CAAA;MAAA;IACF;ACpPA,KAAM,EAAE,0BAAAzS,IAA0B,6BAAAC,OAAgCZ,GAAmB;AAArF,IAGamN,KAAN,cAAgCvG,EAAmC;MAAnE,cAAA;AAAA,cAAA,GAAA,SAAA;AAIL,aAAgB,UAAU;AA2H1B,aAAO,KAAKhG,GAA4B,MAAM,IAAI;AAClD,aAAO,OAAOA,GAA4B,QAAQ,IAAI;AACtD,aAAO,cAAcA,GAA4B,eAAe,IAAI;AAEpE,aAAO,MAAMA,GAA4B,OAAO,IAAI;AACpD,aAAO,iBAAiBA,GAA4B,kBAAkB,IAAI;AAC1E,aAAO,qBAAqBA,GAA4B,sBAAsB,IAAI;AAElF,aAAO,OAAOD,GAAyB,MAAM;AAC7C,aAAO,aAAaA,GAAyB,YAAY;AACzD,aAAO,YAAYA,GAAyB,WAAW;AACvD,aAAO,gBAAgBA,GAAyB,eAAe;MAAA;MA5HxD,UACLpB,GACA8T,GACM;AACN,YAAI,CAACA,EACH,OAAMrV,GAA2B,EAC/B,WAAW,+BACX,UAAU,GACV,UAAU,YACV,UAAUqV,MAAsB,OAAO,SAAS,OAAOA,EACzD,CAAC;AAGH,YAAI,MAAM,QAAQ9T,CAAO,EACvB,MAAK,QACF,KACC6Q,EAA2B,sBAC3B7Q,EAAQ,IAAK1D,OAAM;AACjB,cAAMyX,IAAsB5T,EAAiC7D,CAAC;AAC9D,iBAAA,KAAK,+BAA+ByX,CAAmB,GAChDA;QACT,CAAC,CACH,EACC,KAAMC,OAAkB;AACtBF,YACC,MACAE,EAAc,IAAKzL,OAAc4K,GAAAC,EAAA,CAAA,GAC5B7K,EAAS,OAAA,GADmB,EAE/B,OAAOA,EAAS,WAAW,IAAIwE,GAAcxE,EAAS,QAAQ,KAAK,IAAI,KACzE,CAAA,CAAE,CACJ;QACF,CAAC;aACE;AACL,cAAM0L,IAAe9T,EAAiCH,CAAO;AAC7D,eAAK,+BAA+BiU,CAAY,GAChD,KAAK,QAAQ,KAAKpD,EAA2B,sBAAsBoD,CAAY,EAAE,KAAM1L,OAAa;AACjGuL,cACCvL,EAAS,WAAW,IAAIwE,GAAcxE,EAAS,QAAQ,KAAK,IAAI,MAChEA,EAAS,OACX;UACF,CAAC;QACH;MACF;MAUO,KACL2L,GACAC,GACoE;AAGpE,YAAI,OAAOD,KAAoB,UAAU;AACvC,cAAMlU,IAAUO,GACd2T,GACA,MAAM,QAAQC,CAAyB,IAAIA,IAA4B,CAAC,CAC1E;AACA,iBAAO,KAAK,QAAQnU,CAAO;QAC7B;AAIA,YAAI,MAAM,QAAQkU,CAAe,KAAK,CAAC,CAACC,GAA2B;AAEjE,eAAK,UAAUD,GAAiBC,CAAgC;AAChE;QACF;AAIA,YAAMC,IAAUlV,GAAmC;AACnD,eAAAkV,EAAQ,IAAI,GACL,IAAI5L,GAAgB0L,CAAe,EAAE,WAAW,EACrD,MAAM,QACN,SAASE,EAAQ,WACnB,CAAC,EAAE;MACL;MAEO,SAAS;AACd,YAAMlM,IAAiB3H,GAA4B4Q,EAAmB,KAAK;AAC3E,eAAO,KAAK,QAAwCjJ,CAAc;MACpE;MAMU,QAAkElI,GAAyC;AACnH,eAAA,KAAK,+BAA+BA,CAAO,GACpC,MAAM,QAA4BA,CAAO;MAClD;MAMQ,+BAA+BA,GAAyC;AAC9E,YAAMqU,IAAiB;AAInB,aAAK,IAAI,aAEXrU,EAAQ,SAAS,GAAGqU,CAAAA,GAAiBrU,EAAQ,MAAA;MAEjD;IAcF;AC1IA,IAAM6N,KAAkB,CAAC,WAAW,WAAW,KAAK;AAkBpD,IAAeC,KAAf,cAAgFzG,EAAW;MAmBzF,cAAc;AACZ,cAAM,MAAgB;AAjBxB,aAAQ,mCAAmC,oBAAI;AAI/C,aAAQ,qBAAqB;AAE7B,aAAU,QAAQ,EAChB,kBAAArG,IACA,cAAAF,IACA,YAAAlE,IACA,YAAAE,IACA,6BAAAyD,IACA,kCAAAJ,GACA,SAAAkN,GACF;AAOE,YAAMiH,IAAa,CAAC,MAAM,GAAGrN,GAAkB,IAAI,CAAC;AAEpD4G,WAAgB,QAAS0G,OAAS;AAChC,cAAMC,IAAiBF,EAAW,IAAK1T,CAAAA,OAAW,OAAO,yBAAyBA,IAAQ2T,CAAI,CAAC,GACzFE,IAAcD,EAAe,UAAWE,CAAAA,OAAM,CAAC,CAACA,EAAC,GACjDC,IAAmBF,IAAc,GACjCG,KAAaJ,EAAeC,CAAAA;AAG9BG,UAAAA,OACF,KAAK,iCAAiC,IAAIL,GAAM,EAAE,YAAAK,IAAY,kBAAAD,EAAiB,CAAC,GAEhF,OAAO,eAAe,MAAMJ,GAAM,EAChC,cAAc,MACd,KAAK,MAAM;AACT,kBAAMrW,GAAmCqW,CAAI;UAC/C,EACF,CAAC;QAEL,CAAC;MACH;MAOO,KAAK5D,GAAc;AACpB,aAAK,uBAIT9C,GAAgB,QAAS0G,OAAS;AAEhC,cAAI,KAAK,iCAAiC,IAAIA,CAAI,GAAG;AACnD,gBAAM,EAAE,YAAAK,GAAY,kBAAAD,EAAiB,IAAI,KAAK,iCAAiC,IAAIJ,CAAI;AAEnFI,gBAGF,OAAO,KAAKJ,CAAAA,IAEZ,OAAO,eAAe,MAAMA,GAAMK,CAAU;UAEhD;QACF,CAAC,GAED,KAAK,MAAMjE,GACX,KAAK,qBAAqB;MAC5B;MAQU,yBAAyB9T,GAIT;AACxB,YAAM,EAAE,QAAAwC,GAAQ,gBAAAG,GAAgB,YAAAD,EAAW,IAAI1C,GAEzC4C,IAAmBF,IAAa,UAAUA,CAAAA,gBAA0B,IACpEG,KAAU,KAAKL,CAAAA,uDAA6DG,CAAAA,MAAoBC,CAAAA;AACtG,eAAO,IAAIwN,GAAsB,MAAM,sBAAsBvN,EAAO;MACtE;MAOU,cAAcmF,GAAuBnF,GAAwC;AACrF,eAAO,IAAIuN,GAAsB,MAAMpI,GAAMnF,CAAO;MACtD;MAOU,YAAyBmF,GAAuBnF,GAAiBiE,GAAyC;AAClH,eAAO,IAAIqJ,EAA2B,MAAMnI,GAAMnF,GAASiE,CAAI;MACjE;IACF;AA9GA,IAgHeoK,KAAf,cAA0FD,GAAqB;IAE/G;AAlHA,IAwHsB/F,IAAf,cAA4E+F,GAAqB;IAYxG;AAZsB/F,MAUN,WAAWgG,IAVLhG,EAWN,YAAgC;AC9JzC,IAAMiG,KAAN,cAAwB3G,EAAW;MAEjC,SAASxK,GAA6B;AAC3C,YAAMqL,IAAiB3H,GAA4B4Q,EAAmB,aAAa,CAACtU,CAAO,CAAC;AAC5F,eAAO,KAAK,QAA6BqL,CAAc;MACzD;MAGO,SAASrL,GAA6B;AAC3C,YAAMqL,IAAiB3H,GAA4B4Q,EAAmB,aAAa,CAACtU,CAAO,CAAC;AAC5F,eAAO,KAAK,QAA6BqL,CAAc;MACzD;MAGO,SAASrL,GAA6B;AAC3C,YAAMqL,IAAiB3H,GAA4B4Q,EAAmB,aAAa,CAACtU,CAAO,CAAC;AAC5F,eAAO,KAAK,QAA6BqL,CAAc;MACzD;IACF;AC6FO,IAAM+F,KAAN,MAAc;MAwCnB,YAA4BvG,GAAgB7K,GAA2C;AAA3D,aAAA,SAAA6K;AAnK9B,YAAAtH;AAoKI,YAAI,CAACsH,EAAQ,OAAM7J,GAAyB;AAExCD,QAAAA,GAAe,aAAa,mBAAkBf,KAAA,OAAA,SAAAA,EAAS,aACzDsC,GAA8C,EAAE,IAAI;AAGtD,YAAM,EAAE,iBAAA0V,GAAiB,SAAAzS,EAAQ,IAAIxE;AACrC,aAAK,WAAW,CAAC,EAACf,KAAA,QAAAA,EAAS,WAC3B,KAAK,kBAAkB,CAAC,EAACA,KAAA,QAAAA,EAAS,kBAClC,KAAK,WAAWiK,IAAU1G,IAAAvD,KAAA,OAAA,SAAAA,EAAS,aAAT,OAAAuD,IAAqByU,CAAe,EAAE,QAGhE,KAAK,OAAO,IAAIzH,GAAW,IAAI,GAC/B,KAAK,OAAO,IAAIM,GAAW,IAAI,GAC/B,KAAK,SAAS,IAAIC,GAAa,IAAI,GACnC,KAAK,MAAM,IAAIK,GAAU,IAAI,GAC7B,KAAK,cAAc,IAAIJ,GAAkB,IAAI;AAG7C,YAAMhG,IAAiBC,GAAkB,KAAK,MAAMhL,CAAO;AAG3D,aAAK,aAAaD,GAA4BuW,GAAAC,EAAA,EAC5C,SAAS,KAAK,QACd,eAAe,OAAO,WAAW,OAAO,SAAS,SAAS,IAC1D,aAAavW,KAAA,OAAA,SAAAA,EAAS,SACtB,MAAMiK,GAAU,KAAK,QAAQ,EAAE,MAC/B,KAAKgG,GAAiBlP,GAAe,OAAA,GACrC,SAAAwE,GACA,KAAK7E,GAAQqK,CAAS,IAAI,SAAYA,GACtC,SAAQ/K,KAAA,OAAA,SAAAA,EAAS,WAAU,QAAA,GACvBe,GAAe,WAAW,EAAE,UAAUA,GAAe,SAAS,IAAI,CAAC,CAAA,GAT3B,EAU5C,MAAMf,KAAA,OAAA,SAAAA,EAAS,KACjB,CAAA,CAAC,GACD,KAAK,cAAc4K,GAAe,KAAK,QAAQ5K,KAAA,OAAA,SAAAA,EAAS,SAASU,GAAQqK,CAAS,IAAI,SAAYA,CAAS,GACtG/K,KAAA,QAAAA,EAAS,gBAAc,KAAK,QAAQ;MAC3C;MAKA,IAAc,UAA0B;AACtC,YAAI,CAACoR,GAAQ,aAAa,IAAI,KAAK,UAAU,GAAG;AAC9C,cAAM6G,IAAa,IAAIlX,GAAe,eAAe,KAAK,UAAU,KAAK,YAAY,KAAK,WAAW;AAKrGkX,YAAW,KAAK,GAEhB7G,GAAQ,aAAa,IAAI,KAAK,YAAY6G,CAAU;QACtD;AAEA,eAAO7G,GAAQ,aAAa,IAAI,KAAK,UAAU;MACjD;MAOa,UAAU;AAAA,eAAAzL,GAAA,MAAA,MAAA,aAAA;AACrB,gBAAM,KAAK,QAAQ;QACrB,CAAA;MAAA;IACF;AAzGO,IAAM0L,KAAND;AAAMC,OACa,eAA4C,oBAAI;ACTnE,IAAeC,KAAf,MAA8B;MAenC,YACqB4G,GACAC,GACA1O,GACnB;AAHmB,aAAA,WAAAyO;AACA,aAAA,aAAAC;AACA,aAAA,cAAA1O;AAfrB,aAAmB,kBAAkB,oBAAI;AACzC,aAAU,wBAAwB;AAgBhC,aAAK,yBAAyB,KAAK,aAAa,GAChD,KAAK,oBAAoB,OACzB,KAAK,OAAO;MACd;MAwBa,KACXoC,GACA1I,GACsE;AAAA,eAAAwC,GAAA,MAAA,MAAA,aAAA;AACtE,iBAAOrB,GAAc,CAAOc,GAASC,MAAWM,GAAA,MAAA,MAAA,aAAA;AAC9C,gBAAI,CAAC,KAAK,uBAAuB;AAC/B,kBAAMkO,KAAQ1S,GAAyB;AACvCkE,gBAAOwO,EAAK;YACd;AAEK,iBAAK,sBACR,MAAM,KAAK,aAAa;AAG1B,gBAAMuE,IAA+B,CAAC,GAChCC,IAAW,MAAM,QAAQlV,CAAO,IAAIA,EAAQ,IAAK1D,CAAAA,OAAMA,GAAE,EAAE,IAAI,CAAC,GAChEgC,KAAM,MAAMmK,GAAmB,GAAGC,CAAAA,IAAW,KAAK,UAAA,IAAc1I,GAAS,KAAK,WAAW;AAE/F,kBAAM,KAAK,MAAM1B,EAAG;AAKpB,gBAAM6W,KAAuBC,CAAAA,OAAsD/M,CAAAA,OAA6B;AAzLtH,kBAAAjI;AA0LQ,kBAAM,EAAE,IAAA+H,IAAI,UAAAI,GAAS,IAAIH,GAAoBpI,GAASqI,EAAK;AAE3D,kBADAU,GAA8BV,EAAK,KAC/BjI,KAAAmI,MAAA,OAAA,SAAAA,GAAU,QAAQ,UAAlB,OAAA,SAAAnI,GAAyB,aAAY,8BACvC0E,GAAkB;uBACTuD,GAAM,KAAK,aAAa;AACjC,oBAAM,EAAE,aAAAgN,GAAY,IAAIhN,GAAM;AAC9BjC,mBAA6BiP,IAAa,KAAK,WAAW;cAC5D;AACIlN,cAAAA,MAAMI,MAAY,MAAM,QAAQvI,CAAO,KAAKkV,EAAS,SAAS/M,EAAE,KAClE8M,EAAU,KAAK1M,EAAQ,GAGnB0M,EAAU,WAAWjV,EAAQ,WAC/BoV,GAAoB,GACpBnT,EAAQgT,CAAS,MAEV9M,MAAMI,MAAY,CAAC,MAAM,QAAQvI,CAAO,KAAKmI,OAAOnI,EAAQ,OACrEoV,GAAoB,GACpBnT,EAAQsG,EAAQ;YAEpB,GAGM+M,IAAyB,KAAK,GAClCtE,EAA2B,uBAC3BmE,GAAoB,MAAMG,EAAuB,CAAC,CACpD;UACF,CAAA,CAAC;QACH,CAAA;MAAA;MASO,GACL5M,GACA6M,GAC6B;AAC7B,YAAMC,IAAeD,EAAQ,KAAK,MAAM,GAMlCxG,IAAY1G,OAA6B;AACzCA,YAAM,KAAK,YAAY,GAAGK,CAAAA,IAAW,KAAK,UAAA,MAAc8M,EAAanN,CAAK;QAChF;AAEA,eAAA,KAAK,gBAAgB,IAAI0G,CAAQ,GAC1B,MAAM,KAAK,gBAAgB,OAAOA,CAAQ;MACnD;MAEQ,eAAe;AACrB,eAAO,IAAI,QAAe9M,OAAY;AACpC,cAAMwT,IAAc,KAAK,GAAGzE,EAA2B,qBAAqB,MAAM;AAChF,iBAAK,oBAAoB,MACzB/O,EAAQ,GACRwT,EAAY;UACd,CAAC;AAMD,qBAAW,MAAM;AACf,iBAAK,oBAAoB,MACzBxT,EAAQ,GACRwT,EAAY;UACd,GAAG,IAAK;QACV,CAAC;MACH;MAKQ,SAAS;AACf,aAAK,GAAGzE,EAA2B,oBAAoB,MAAM;AAC3D,eAAK,YAAY;QACnB,CAAC,GAED,KAAK,GAAGA,EAA2B,oBAAoB,MAAM;AAC3D,eAAK,YAAY;QACnB,CAAC,GAED,KAAK,GAAGA,EAA2B,iCAAkC3I,OAA6B;AAC5FA,YAAM,KAAK,SAAS,OAAO,wBAC7B,IAAIrJ,GAAgBC,EAAe,qBAAqBoJ,EAAM,KAAK,SAAS,OAAO,oBAAoB,EAAE,IAAI;QAEjH,CAAC;MACH;IACF;;;;;ACpRA,IAAAqN,WAAA;;;IAAAA;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AiBWA,SAASC,IAAmBC,IAAmB;AAC7C,WAAW,CAACC,IAAaC,EAAK,KAAK,OAAO,QAAQC,GAAa,EAE5DH,CAAAA,GAAK,MAAcC,EAAAA,IAAsBC;AAE9C;AASA,SAASE,IAAyBC,IAAoB;AACpD,MAAMC,KAA+B,CAAC,EAAE,MAAM,KAAK,SAAS,iBAAiB,eAAe,CAAC;AAC7F,SAAO,QAAQA,GAAQ,KAAMC,CAAAA,OAAWA,GAAO,IAAI,SAASF,EAAU,CAAC,CAAC;AAC1E;wDhB3CAG,KA+vFCC,Ke3vFDC,IACAC,KCIMR,KAuCOS,KDtCAC;;;;AAPb,IAAAC;ACAA,IAAAA;ADKA,IAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AfRA,IAAAN,MAAAO,IAAA,CAAAC,KAAAC,QAAA;AAAA,OAMC,SAASC,IAAE;AAAC,YAAG,OAAOF,OAAU,YAAU,OAAOC,MAAS,IAAaA,CAAAA,IAAO,UAAQC,GAAE;iBAAU,OAAO,UAAS,cAAY,OAAO,IAAK,QAAO,CAAC,GAAEA,EAAC;aAAM;AAAC,cAAIC;AAAK,iBAAO,SAAS,MAAaA,KAAE,SAAe,OAAO,SAAS,MAAaA,KAAE,SAAe,OAAO,OAAO,MAAaA,KAAE,OAAUA,KAAE,MAAKA,GAAE,cAAcD,GAAE;QAAC;MAAC,GAAG,WAAU;AAAC,YAAIE,IAAOH,IAAOD;AAAQ,eAAQ,SAASK,GAAEC,IAAEC,IAAEC,IAAE;AAAC,mBAASC,EAAEC,IAAEC,IAAE;AAAC,gBAAG,CAACJ,GAAEG,EAAAA,GAAG;AAAC,kBAAG,CAACJ,GAAEI,EAAAA,GAAG;AAAC,oBAAIE,KAAE,OAAOC,OAAS,cAAYA;AAAQ,oBAAG,CAACF,MAAGC,GAAE,QAAOA,GAAEF,IAAE,IAAE;AAAE,oBAAGI,GAAE,QAAOA,GAAEJ,IAAE,IAAE;AAAE,oBAAIR,KAAE,IAAI,MAAM,yBAAuBQ,KAAE,GAAG;AAAE,sBAAOR,GAAE,OAAK,oBAAoBA;cAAE;AAAC,kBAAIa,KAAER,GAAEG,EAAAA,IAAG,EAAC,SAAQ,CAAC,EAAC;AAAEJ,cAAAA,GAAEI,EAAAA,EAAG,CAAA,EAAG,KAAKK,GAAE,SAAQ,SAASV,GAAE;AAAC,oBAAIE,KAAED,GAAEI,EAAAA,EAAG,CAAA,EAAGL,CAAAA;AAAG,uBAAOI,EAAEF,MAAIF,CAAC;cAAC,GAAEU,IAAEA,GAAE,SAAQV,IAAEC,IAAEC,IAAEC,EAAC;YAAC;AAAC,mBAAOD,GAAEG,EAAAA,EAAG;UAAO;AAA2C,mBAAtCI,KAAE,OAAOD,OAAS,cAAYA,KAAgBH,KAAE,GAAEA,KAAEF,GAAE,QAAOE,KAAID,GAAED,GAAEE,EAAAA,CAAE;AAAE,iBAAOD;QAAC,EAAG,EAAC,GAAE,CAAC,SAASO,IAAQf,IAAOD,IAAQ;AAAA,WACp1B,SAAUiB,IAAO;AAClB;AACA,gBAAIC,IAAWD,GAAO,oBAAoBA,GAAO,wBAE7CE;AAGF,gBAAID,GAAU;AACZ,kBAAIE,KAAS,GACTC,KAAW,IAAIH,EAASI,CAAQ,GAChCC,KAAUN,GAAO,SAAS,eAAe,EAAE;AAC/CI,cAAAA,GAAS,QAAQE,IAAS,EACxB,eAAe,KACjB,CAAC,GACDJ,KAAgB,WAAY;AAC1BI,gBAAAA,GAAQ,OAAQH,KAAS,EAAEA,KAAS;cACtC;YACF,WAAW,CAACH,GAAO,gBAAgB,OAAOA,GAAO,iBAAmB,KAAa;AAC/E,kBAAIO,KAAU,IAAIP,GAAO;AACzBO,cAAAA,GAAQ,MAAM,YAAYF,GAC1BH,KAAgB,WAAY;AAC1BK,gBAAAA,GAAQ,MAAM,YAAY,CAAC;cAC7B;YACF,MAAW,eAAcP,MAAU,wBAAwBA,GAAO,SAAS,cAAc,QAAQ,IAC/FE,KAAgB,WAAY;AAI1B,kBAAIM,KAAWR,GAAO,SAAS,cAAc,QAAQ;AACrDQ,cAAAA,GAAS,qBAAqB,WAAY;AACxCH,kBAAS,GAETG,GAAS,qBAAqB,MAC9BA,GAAS,WAAW,YAAYA,EAAQ,GACxCA,KAAW;cACb,GACAR,GAAO,SAAS,gBAAgB,YAAYQ,EAAQ;YACtD,IAEAN,KAAgB,WAAY;AAC1B,yBAAWG,GAAU,CAAC;YACxB;AAIJ,gBAAII,IACAC,KAAQ,CAAC;AAEb,qBAASL,IAAW;AAClBI,cAAAA,KAAW;AAGX,uBAFIZ,IAAGc,IACHC,KAAMF,GAAM,QACTE,MAAK;AAIV,qBAHAD,KAAWD,IACXA,KAAQ,CAAC,GACTb,KAAI,IACG,EAAEA,KAAIe,KACXD,CAAAA,GAASd,EAAAA,EAAG;AAEde,gBAAAA,KAAMF,GAAM;cACd;AACAD,cAAAA,KAAW;YACb;AAEAzB,YAAAA,GAAO,UAAU6B;AACjB,qBAASA,GAAUC,IAAM;AACnBJ,cAAAA,GAAM,KAAKI,EAAI,MAAM,KAAK,CAACL,MAC7BP,GAAc;YAElB;UAEA,GAAG,KAAK,MAAK,OAAO,SAAW,MAAc,SAAS,OAAO,OAAS,MAAc,OAAO,OAAO,SAAW,MAAc,SAAS,CAAC,CAAC;QACtI,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,SAASH,IAAQf,IAAOD,IAAQ;AACzC;AACA,cAAI8B,KAAYd,GAAQ,CAAC;AAGzB,mBAASgB,IAAW;UAAC;AAErB,cAAIC,KAAW,CAAC,GAEZC,KAAW,CAAC,UAAU,GACtBC,KAAY,CAAC,WAAW,GACxBC,KAAU,CAAC,SAAS;AAExBnC,UAAAA,GAAO,UAAUoC;AAEjB,mBAASA,GAAQC,IAAU;AACzB,gBAAI,OAAOA,MAAa,WACtB,OAAM,IAAI,UAAU,6BAA6B;AAEnD,iBAAK,QAAQF,IACb,KAAK,QAAQ,CAAC,GACd,KAAK,UAAU,QACXE,OAAaN,KACfO,GAAsB,MAAMD,EAAQ;UAExC;AAEAD,UAAAA,GAAQ,UAAU,QAAW,SAAUG,IAAY;AACjD,mBAAO,KAAK,KAAK,MAAMA,EAAU;UACnC,GACAH,GAAQ,UAAU,OAAO,SAAUI,IAAaD,IAAY;AAC1D,gBAAI,OAAOC,MAAgB,cAAc,KAAK,UAAUN,MACtD,OAAOK,MAAe,cAAc,KAAK,UAAUN,GACnD,QAAO;AAET,gBAAIQ,KAAU,IAAI,KAAK,YAAYV,CAAQ;AAC3C,gBAAI,KAAK,UAAUI,IAAS;AAC1B,kBAAIE,KAAW,KAAK,UAAUH,KAAYM,KAAcD;AACxDG,cAAAA,GAAOD,IAASJ,IAAU,KAAK,OAAO;YACxC,MACE,MAAK,MAAM,KAAK,IAAIM,GAAUF,IAASD,IAAaD,EAAU,CAAC;AAGjE,mBAAOE;UACT;AACA,mBAASE,GAAUF,IAASD,IAAaD,IAAY;AACnD,iBAAK,UAAUE,IACX,OAAOD,MAAgB,eACzB,KAAK,cAAcA,IACnB,KAAK,gBAAgB,KAAK,qBAExB,OAAOD,MAAe,eACxB,KAAK,aAAaA,IAClB,KAAK,eAAe,KAAK;UAE7B;AACAI,UAAAA,GAAU,UAAU,gBAAgB,SAAU1D,IAAO;AACnD+C,YAAAA,GAAS,QAAQ,KAAK,SAAS/C,EAAK;UACtC,GACA0D,GAAU,UAAU,qBAAqB,SAAU1D,IAAO;AACxDyD,YAAAA,GAAO,KAAK,SAAS,KAAK,aAAazD,EAAK;UAC9C,GACA0D,GAAU,UAAU,eAAe,SAAU1D,IAAO;AAClD+C,YAAAA,GAAS,OAAO,KAAK,SAAS/C,EAAK;UACrC,GACA0D,GAAU,UAAU,oBAAoB,SAAU1D,IAAO;AACvDyD,YAAAA,GAAO,KAAK,SAAS,KAAK,YAAYzD,EAAK;UAC7C;AAEA,mBAASyD,GAAOD,IAASG,IAAM3D,IAAO;AACpC4C,YAAAA,GAAU,WAAY;AACpB,kBAAIgB;AACJ,kBAAI;AACFA,gBAAAA,KAAcD,GAAK3D,EAAK;cAC1B,SAASmB,IAAP;AACA,uBAAO4B,GAAS,OAAOS,IAASrC,EAAC;cACnC;AACIyC,cAAAA,OAAgBJ,KAClBT,GAAS,OAAOS,IAAS,IAAI,UAAU,oCAAoC,CAAC,IAE5ET,GAAS,QAAQS,IAASI,EAAW;YAEzC,CAAC;UACH;AAEAb,UAAAA,GAAS,UAAU,SAAUc,IAAM7D,IAAO;AACxC,gBAAI8D,KAASC,GAASC,GAAShE,EAAK;AACpC,gBAAI8D,GAAO,WAAW,QACpB,QAAOf,GAAS,OAAOc,IAAMC,GAAO,KAAK;AAE3C,gBAAIG,KAAWH,GAAO;AAEtB,gBAAIG,GACFZ,CAAAA,GAAsBQ,IAAMI,EAAQ;iBAC/B;AACLJ,cAAAA,GAAK,QAAQZ,IACbY,GAAK,UAAU7D;AAGf,uBAFI4B,KAAI,IACJe,KAAMkB,GAAK,MAAM,QACd,EAAEjC,KAAIe,KACXkB,CAAAA,GAAK,MAAMjC,EAAAA,EAAG,cAAc5B,EAAK;YAErC;AACA,mBAAO6D;UACT,GACAd,GAAS,SAAS,SAAUc,IAAMK,IAAO;AACvCL,YAAAA,GAAK,QAAQb,IACba,GAAK,UAAUK;AAGf,qBAFItC,KAAI,IACJe,KAAMkB,GAAK,MAAM,QACd,EAAEjC,KAAIe,KACXkB,CAAAA,GAAK,MAAMjC,EAAAA,EAAG,aAAasC,EAAK;AAElC,mBAAOL;UACT;AAEA,mBAASG,EAAQG,IAAK;AAEpB,gBAAIC,KAAOD,MAAOA,GAAI;AACtB,gBAAIA,OAAQ,OAAOA,MAAQ,YAAY,OAAOA,MAAQ,eAAe,OAAOC,MAAS,WACnF,QAAO,WAAoB;AACzBA,cAAAA,GAAK,MAAMD,IAAK,SAAS;YAC3B;UAEJ;AAEA,mBAASd,GAAsBQ,IAAMI,IAAU;AAE7C,gBAAI/B,KAAS;AACb,qBAASmC,GAAQrE,GAAO;AAClBkC,cAAAA,OAGJA,KAAS,MACTa,GAAS,OAAOc,IAAM7D,CAAK;YAC7B;AAEA,qBAASsE,GAAUtE,GAAO;AACpBkC,cAAAA,OAGJA,KAAS,MACTa,GAAS,QAAQc,IAAM7D,CAAK;YAC9B;AAEA,qBAASuE,KAAc;AACrBN,cAAAA,GAASK,IAAWD,EAAO;YAC7B;AAEA,gBAAIP,IAASC,GAASQ,EAAW;AAC7BT,cAAO,WAAW,WACpBO,GAAQP,EAAO,KAAK;UAExB;AAEA,mBAASC,GAASJ,IAAM3D,IAAO;AAC7B,gBAAIwE,KAAM,CAAC;AACX,gBAAI;AACFA,cAAAA,GAAI,QAAQb,GAAK3D,EAAK,GACtBwE,GAAI,SAAS;YACf,SAASrD,IAAP;AACAqD,cAAAA,GAAI,SAAS,SACbA,GAAI,QAAQrD;YACd;AACA,mBAAOqD;UACT;AAEArB,UAAAA,GAAQ,UAAUsB;AAClB,mBAASA,GAAQzE,IAAO;AACtB,mBAAIA,cAAiB,OACZA,KAEF+C,GAAS,QAAQ,IAAI,KAAKD,CAAQ,GAAG9C,EAAK;UACnD;AAEAmD,UAAAA,GAAQ,SAASuB;AACjB,mBAASA,GAAOC,IAAQ;AACtB,gBAAInB,KAAU,IAAI,KAAKV,CAAQ;AAC/B,mBAAOC,GAAS,OAAOS,IAASmB,EAAM;UACxC;AAEAxB,UAAAA,GAAQ,MAAMyB;AACd,mBAASA,IAAIC,IAAU;AACrB,gBAAIhB,KAAO;AACX,gBAAI,OAAO,UAAU,SAAS,KAAKgB,EAAQ,MAAM,iBAC/C,QAAO,KAAK,OAAO,IAAI,UAAU,kBAAkB,CAAC;AAGtD,gBAAIlC,KAAMkC,GAAS,QACf3C,KAAS;AACb,gBAAI,CAACS,GACH,QAAO,KAAK,QAAQ,CAAC,CAAC;AAQxB,qBALImC,KAAS,IAAI,MAAMnC,EAAG,GACtBoC,KAAW,GACXnD,IAAI,IACJ4B,IAAU,IAAI,KAAKV,CAAQ,GAExB,EAAElB,IAAIe,KACXqC,CAAAA,IAAYH,GAASjD,CAAAA,GAAIA,CAAC;AAE5B,mBAAO4B;AACP,qBAASwB,IAAYhF,KAAO4B,IAAG;AAC7BiC,cAAAA,GAAK,QAAQ7D,GAAK,EAAE,KAAKiF,GAAgB,SAAUf,IAAO;AACnDhC,gBAAAA,OACHA,KAAS,MACTa,GAAS,OAAOS,GAASU,EAAK;cAElC,CAAC;AACD,uBAASe,EAAeC,IAAU;AAChCJ,gBAAAA,GAAOlD,EAAAA,IAAKsD,IACR,EAAEH,OAAapC,MAAO,CAACT,OACzBA,KAAS,MACTa,GAAS,QAAQS,GAASsB,EAAM;cAEpC;YACF;UACF;AAEA3B,UAAAA,GAAQ,OAAOgC;AACf,mBAASA,IAAKN,IAAU;AACtB,gBAAIhB,KAAO;AACX,gBAAI,OAAO,UAAU,SAAS,KAAKgB,EAAQ,MAAM,iBAC/C,QAAO,KAAK,OAAO,IAAI,UAAU,kBAAkB,CAAC;AAGtD,gBAAIlC,KAAMkC,GAAS,QACf3C,KAAS;AACb,gBAAI,CAACS,GACH,QAAO,KAAK,QAAQ,CAAC,CAAC;AAMxB,qBAHIf,KAAI,IACJ4B,KAAU,IAAI,KAAKV,CAAQ,GAExB,EAAElB,KAAIe,KACXS,GAASyB,GAASjD,EAAAA,CAAE;AAEtB,mBAAO4B;AACP,qBAASJ,EAASpD,GAAO;AACvB6D,cAAAA,GAAK,QAAQ7D,CAAK,EAAE,KAAK,SAAUoF,KAAU;AACtClD,gBAAAA,OACHA,KAAS,MACTa,GAAS,QAAQS,IAAS4B,GAAQ;cAEtC,GAAG,SAAUlB,KAAO;AACbhC,gBAAAA,OACHA,KAAS,MACTa,GAAS,OAAOS,IAASU,GAAK;cAElC,CAAC;YACH;UACF;QAEA,GAAE,EAAC,GAAI,EAAC,CAAC,GAAE,GAAE,CAAC,SAASpC,IAAQf,IAAOD,IAAQ;AAAA,WAC7C,SAAUiB,IAAO;AAClB;AACI,mBAAOA,GAAO,WAAY,eAC5BA,GAAO,UAAUD,GAAQ,CAAC;UAG5B,GAAG,KAAK,MAAK,OAAO,SAAW,MAAc,SAAS,OAAO,OAAS,MAAc,OAAO,OAAO,SAAW,MAAc,SAAS,CAAC,CAAC;QACtI,GAAE,EAAC,GAAI,EAAC,CAAC,GAAE,GAAE,CAAC,SAASA,IAAQf,IAAOD,IAAQ;AAC9C;AAEA,cAAIuE,KAAU,OAAO,UAAW,cAAc,OAAO,OAAO,YAAa,WAAW,SAAUlB,GAAK;AAAE,mBAAO,OAAOA;UAAK,IAAI,SAAUA,GAAK;AAAE,mBAAOA,KAAO,OAAO,UAAW,cAAcA,EAAI,gBAAgB,UAAUA,MAAQ,OAAO,YAAY,WAAW,OAAOA;UAAK;AAE3Q,mBAASmB,EAAgBC,GAAUC,GAAa;AAAE,gBAAI,EAAED,aAAoBC,GAAgB,OAAM,IAAI,UAAU,mCAAmC;UAAK;AAExJ,mBAASC,KAAS;AAEd,gBAAI;AACA,kBAAI,OAAO,YAAc,IACrB,QAAO;AAEX,kBAAI,OAAO,kBAAoB,IAC3B,QAAO;AAEX,kBAAI,OAAO,eAAiB,IACxB,QAAO;AAEX,kBAAI,OAAO,aAAe,IACtB,QAAO;AAEX,kBAAI,OAAO,cAAgB,IACvB,QAAO;YAEf,QAAE;AACE;YACJ;UACJ;AAEA,cAAIC,KAAMD,GAAO;AAEjB,mBAASE,KAAmB;AACxB,gBAAI;AAGA,kBAAI,CAACD,MAAO,CAACA,GAAI,KACb,QAAO;AAMX,kBAAIE,IAAW,OAAO,eAAiB,OAAe,4BAA4B,KAAK,UAAU,SAAS,KAAK,CAAC,SAAS,KAAK,UAAU,SAAS,KAAK,CAAC,aAAa,KAAK,UAAU,QAAQ,GAEvLC,IAAW,OAAO,SAAU,cAAc,MAAM,SAAS,EAAE,QAAQ,cAAc,MAAM;AAQ3F,sBAAQ,CAACD,KAAYC,MAAa,OAAO,YAAc,OAKvD,OAAO,cAAgB;YAC3B,QAAE;AACE,qBAAO;YACX;UACJ;AAQA,mBAASC,GAAWC,GAAOC,GAAY;AAEnCD,gBAAQA,KAAS,CAAC,GAClBC,IAAaA,KAAc,CAAC;AAC5B,gBAAI;AACA,qBAAO,IAAI,KAAKD,GAAOC,CAAU;YACrC,SAAS7E,GAAP;AACE,kBAAIA,EAAE,SAAS,YACX,OAAMA;AAIV,uBAFI8E,IAAU,OAAO,cAAgB,MAAc,cAAc,OAAO,gBAAkB,MAAc,gBAAgB,OAAO,iBAAmB,MAAc,iBAAiB,mBAC7KC,IAAU,IAAID,KACT,IAAI,GAAG,IAAIF,EAAM,QAAQ,KAAK,EACnCG,GAAQ,OAAOH,EAAM,CAAA,CAAE;AAE3B,qBAAOG,EAAQ,QAAQF,EAAW,IAAI;YAC1C;UACJ;AAII,iBAAO,UAAY,OAGnBlE,GAAQ,CAAC;AAEb,cAAIqE,KAAY;AAEhB,mBAASC,GAAgB5C,GAAS6C,GAAU;AACpCA,iBACA7C,EAAQ,KAAK,SAAUM,GAAQ;AAC3BuC,gBAAS,MAAMvC,CAAM;YACzB,GAAG,SAAUI,GAAO;AAChBmC,gBAASnC,CAAK;YAClB,CAAC;UAET;AAEA,mBAASoC,GAAoB9C,GAAS6C,GAAUE,GAAe;AACvD,mBAAOF,KAAa,cACpB7C,EAAQ,KAAK6C,CAAQ,GAGrB,OAAOE,KAAkB,cACzB/C,EAAQ,MAAS+C,CAAa;UAEtC;AAEA,mBAASC,EAAaC,GAAK;AAEvB,mBAAI,OAAOA,KAAQ,aACf,QAAQ,KAAKA,IAAM,yCAAyC,GAC5DA,IAAM,OAAOA,CAAG,IAGbA;UACX;AAEA,mBAASC,KAAc;AACnB,gBAAI,UAAU,UAAU,OAAO,UAAU,UAAU,SAAS,CAAA,KAAO,WAC/D,QAAO,UAAU,UAAU,SAAS,CAAA;UAE5C;AAKA,cAAIC,KAA4B,oCAC5BC,KAAgB,QAChBC,KAAa,CAAC,GACdC,MAAW,OAAO,UAAU,UAG5BC,MAAY,YACZC,KAAa;AAOjB,mBAASC,GAAwBC,GAAK;AAIlC,qBAHIC,IAASD,EAAI,QACbE,IAAM,IAAI,YAAYD,CAAM,GAC5BE,IAAM,IAAI,WAAWD,CAAG,GACnB,IAAI,GAAG,IAAID,GAAQ,IACxBE,GAAI,CAAA,IAAKH,EAAI,WAAW,CAAC;AAE7B,mBAAOE;UACX;AAiBA,mBAASE,GAAgC5B,GAAK;AAC1C,mBAAO,IAAIS,GAAU,SAAU1B,GAAS;AACpC,kBAAI8C,IAAM7B,EAAI,YAAYiB,IAA2BK,EAAU,GAC3DQ,IAAO1B,GAAW,CAAC,EAAE,CAAC;AAC1ByB,gBAAI,YAAYZ,EAAyB,EAAE,IAAIa,GAAM,KAAK,GAE1DD,EAAI,UAAU,SAAUpG,GAAG;AAGvBA,kBAAE,eAAe,GACjBA,EAAE,gBAAgB,GAClBsD,EAAQ,KAAK;cACjB,GAEA8C,EAAI,aAAa,WAAY;AACzB,oBAAIE,IAAgB,UAAU,UAAU,MAAM,eAAe,GACzDC,IAAc,UAAU,UAAU,MAAM,QAAQ;AAGpDjD,kBAAQiD,KAAe,CAACD,KAAiB,SAASA,EAAc,CAAA,GAAI,EAAE,KAAK,EAAE;cACjF;YACJ,CAAC,EAAE,MAAS,WAAY;AACpB,qBAAO;YACX,CAAC;UACL;AAEA,mBAASE,GAAkBjC,GAAK;AAC5B,mBAAI,OAAOkB,MAAkB,YAClBT,GAAU,QAAQS,EAAa,IAEnCU,GAAgC5B,CAAG,EAAE,KAAK,SAAU1F,GAAO;AAC9D,qBAAA4G,KAAgB5G,GACT4G;YACX,CAAC;UACL;AAEA,mBAASgB,GAAgBC,GAAQ;AAC7B,gBAAIC,IAAYjB,GAAWgB,EAAO,IAAA,GAG9BE,IAAoB,CAAC;AAEzBA,cAAkB,UAAU,IAAI5B,GAAU,SAAU1B,GAASC,GAAQ;AACjEqD,gBAAkB,UAAUtD,GAC5BsD,EAAkB,SAASrD;YAC/B,CAAC,GAGDoD,EAAU,mBAAmB,KAAKC,CAAiB,GAG9CD,EAAU,UAGXA,EAAU,UAAUA,EAAU,QAAQ,KAAK,WAAY;AACnD,qBAAOC,EAAkB;YAC7B,CAAC,IAJDD,EAAU,UAAUC,EAAkB;UAM9C;AAEA,mBAASC,GAAkBH,GAAQ;AAC/B,gBAAIC,IAAYjB,GAAWgB,EAAO,IAAA,GAG9BE,IAAoBD,EAAU,mBAAmB,IAAI;AAIzD,gBAAIC,EACA,QAAAA,EAAkB,QAAQ,GACnBA,EAAkB;UAEjC;AAEA,mBAASE,EAAiBJ,GAAQK,GAAK;AACnC,gBAAIJ,IAAYjB,GAAWgB,EAAO,IAAA,GAG9BE,IAAoBD,EAAU,mBAAmB,IAAI;AAIzD,gBAAIC,EACA,QAAAA,EAAkB,OAAOG,CAAG,GACrBH,EAAkB;UAEjC;AAEA,mBAASI,EAAeN,GAAQO,GAAe;AAC3C,mBAAO,IAAIjC,GAAU,SAAU1B,GAASC,GAAQ;AAG5C,kBAFAmC,GAAWgB,EAAO,IAAA,IAAQhB,GAAWgB,EAAO,IAAA,KAASQ,GAAgB,GAEjER,EAAO,GACP,KAAIO,EACAR,CAAAA,GAAgBC,CAAM,GACtBA,EAAO,GAAG,MAAM;kBAEhB,QAAOpD,EAAQoD,EAAO,EAAE;AAIhC,kBAAIS,IAAS,CAACT,EAAO,IAAI;AAErBO,mBACAE,EAAO,KAAKT,EAAO,OAAO;AAG9B,kBAAIU,IAAU7C,GAAI,KAAK,MAAMA,IAAK4C,CAAM;AAEpCF,oBACAG,EAAQ,kBAAkB,SAAUpH,IAAG;AACnC,oBAAIqH,KAAKD,EAAQ;AACjB,oBAAI;AACAC,kBAAAA,GAAG,kBAAkBX,EAAO,SAAS,GACjC1G,GAAE,cAAc,KAEhBqH,GAAG,kBAAkB7B,EAAyB;gBAEtD,SAAS8B,IAAP;AACE,sBAAIA,GAAG,SAAS,kBACZ,SAAQ,KAAK,mBAAmBZ,EAAO,OAAO,sCAA2C1G,GAAE,aAAa,iBAAiBA,GAAE,aAAa,wBAAwB0G,EAAO,YAAY,mBAAmB;sBAEtM,OAAMY;gBAEd;cACJ,IAGJF,EAAQ,UAAU,SAAUpH,IAAG;AAC3BA,gBAAAA,GAAE,eAAe,GACjBuD,EAAO6D,EAAQ,KAAK;cACxB,GAEAA,EAAQ,YAAY,WAAY;AAC5B,oBAAIC,KAAKD,EAAQ;AACjBC,gBAAAA,GAAG,kBAAkB,SAAUrH,IAAG;AAM9BA,kBAAAA,GAAE,OAAO,MAAM;gBACnB,GACAsD,EAAQ+D,EAAE,GACVR,GAAkBH,CAAM;cAC5B;YACJ,CAAC;UACL;AAEA,mBAASa,IAAuBb,GAAQ;AACpC,mBAAOM,EAAeN,GAAQ,KAAK;UACvC;AAEA,mBAASc,IAAuBd,GAAQ;AACpC,mBAAOM,EAAeN,GAAQ,IAAI;UACtC;AAEA,mBAASe,GAAiBf,GAAQgB,GAAgB;AAC9C,gBAAI,CAAChB,EAAO,GACR,QAAO;AAGX,gBAAIiB,IAAa,CAACjB,EAAO,GAAG,iBAAiB,SAASA,EAAO,SAAS,GAClEkB,IAAclB,EAAO,UAAUA,EAAO,GAAG,SACzCmB,IAAYnB,EAAO,UAAUA,EAAO,GAAG;AAY3C,gBAVIkB,MAGIlB,EAAO,YAAYgB,KACnB,QAAQ,KAAK,mBAAmBhB,EAAO,OAAO,wCAA6CA,EAAO,GAAG,UAAU,iBAAiBA,EAAO,UAAU,GAAG,GAGxJA,EAAO,UAAUA,EAAO,GAAG,UAG3BmB,KAAaF,GAAY;AAIzB,kBAAIA,GAAY;AACZ,oBAAIG,IAAapB,EAAO,GAAG,UAAU;AACjCoB,oBAAapB,EAAO,YACpBA,EAAO,UAAUoB;cAEzB;AAEA,qBAAO;YACX;AAEA,mBAAO;UACX;AAGA,mBAASC,EAAY1B,GAAM;AACvB,mBAAO,IAAIrB,GAAU,SAAU1B,GAASC,GAAQ;AAC5C,kBAAIyE,IAAS,IAAI;AACjBA,gBAAO,UAAUzE,GACjByE,EAAO,YAAY,SAAUhI,GAAG;AAC5B,oBAAIiI,IAAS,KAAKjI,EAAE,OAAO,UAAU,EAAE;AACvCsD,kBAAQ,EACJ,6BAA6B,MAC7B,MAAM2E,GACN,MAAM5B,EAAK,KACf,CAAC;cACL,GACA2B,EAAO,mBAAmB3B,CAAI;YAClC,CAAC;UACL;AAGA,mBAAS6B,GAAYC,GAAa;AAC9B,gBAAIC,IAAYtC,GAAwB,KAAKqC,EAAY,IAAI,CAAC;AAC9D,mBAAOxD,GAAW,CAACyD,CAAS,GAAG,EAAE,MAAMD,EAAY,KAAK,CAAC;UAC7D;AAGA,mBAASE,GAAexJ,GAAO;AAC3B,mBAAOA,KAASA,EAAM;UAC1B;AAMA,mBAASyJ,GAAYpD,GAAU;AAC3B,gBAAIxC,IAAO,MAEPL,IAAUK,EAAK,WAAW,EAAE,KAAK,WAAY;AAC7C,kBAAIiE,IAAYjB,GAAWhD,EAAK,QAAQ,IAAA;AAExC,kBAAIiE,KAAaA,EAAU,QACvB,QAAOA,EAAU;YAEzB,CAAC;AAED,mBAAAxB,GAAoB9C,GAAS6C,GAAUA,CAAQ,GACxC7C;UACX;AAKA,mBAASkG,GAAc7B,GAAQ;AAC3BD,YAAAA,GAAgBC,CAAM;AAKtB,qBAHIC,IAAYjB,GAAWgB,EAAO,IAAA,GAC9B8B,IAAU7B,EAAU,SAEflG,IAAI,GAAGA,IAAI+H,EAAQ,QAAQ/H,KAAK;AACrC,kBAAIgI,IAASD,EAAQ/H,CAAAA;AACjBgI,gBAAO,QAAQ,OACfA,EAAO,QAAQ,GAAG,MAAM,GACxBA,EAAO,QAAQ,KAAK;YAE5B;AACA,mBAAA/B,EAAO,KAAK,MAELa,IAAuBb,CAAM,EAAE,KAAK,SAAUW,GAAI;AAErD,qBADAX,EAAO,KAAKW,GACRI,GAAiBf,CAAM,IAEhBc,IAAuBd,CAAM,IAEjCW;YACX,CAAC,EAAE,KAAK,SAAUA,GAAI;AAGlBX,gBAAO,KAAKC,EAAU,KAAKU;AAC3B,uBAAS5G,KAAI,GAAGA,KAAI+H,EAAQ,QAAQ/H,KAChC+H,GAAQ/H,EAAAA,EAAG,QAAQ,KAAK4G;YAEhC,CAAC,EAAE,MAAS,SAAUN,GAAK;AACvB,oBAAAD,EAAiBJ,GAAQK,CAAG,GACtBA;YACV,CAAC;UACL;AAIA,mBAAS2B,GAAkBhC,GAAQiC,GAAMzD,GAAU0D,GAAS;AACpDA,kBAAY,WACZA,IAAU;AAGd,gBAAI;AACA,kBAAIC,IAAKnC,EAAO,GAAG,YAAYA,EAAO,WAAWiC,CAAI;AACrDzD,gBAAS,MAAM2D,CAAE;YACrB,SAAS9B,GAAP;AACE,kBAAI6B,IAAU,MAAM,CAAClC,EAAO,MAAMK,EAAI,SAAS,uBAAuBA,EAAI,SAAS,iBAC/E,QAAO/B,GAAU,QAAQ,EAAE,KAAK,WAAY;AACxC,oBAAI,CAAC0B,EAAO,MAAMK,EAAI,SAAS,mBAAmB,CAACL,EAAO,GAAG,iBAAiB,SAASA,EAAO,SAAS,KAAKA,EAAO,WAAWA,EAAO,GAAG,QAEpI,QAAIA,EAAO,OACPA,EAAO,UAAUA,EAAO,GAAG,UAAU,IAGlCc,IAAuBd,CAAM;cAE5C,CAAC,EAAE,KAAK,WAAY;AAChB,uBAAO6B,GAAc7B,CAAM,EAAE,KAAK,WAAY;AAC1CgC,kBAAAA,GAAkBhC,GAAQiC,GAAMzD,GAAU0D,IAAU,CAAC;gBACzD,CAAC;cACL,CAAC,EAAE,MAAS1D,CAAQ;AAGxBA,gBAAS6B,CAAG;YAChB;UACJ;AAEA,mBAASG,KAAkB;AACvB,mBAAO,EAEH,SAAS,CAAC,GAEV,IAAI,MAEJ,SAAS,MAET,oBAAoB,CAAC,EACzB;UACJ;AAIA,mBAAS4B,IAAaC,GAAS;AAC3B,gBAAIrG,IAAO,MACPgE,IAAS,EACT,IAAI,KACR;AAEA,gBAAIqC,EACA,UAAStI,KAAKsI,EACVrC,GAAOjG,CAAAA,IAAKsI,EAAQtI,CAAAA;AAK5B,gBAAIkG,IAAYjB,GAAWgB,EAAO,IAAA;AAG7BC,kBACDA,IAAYO,GAAgB,GAE5BxB,GAAWgB,EAAO,IAAA,IAAQC,IAI9BA,EAAU,QAAQ,KAAKjE,CAAI,GAGtBA,EAAK,eACNA,EAAK,aAAaA,EAAK,OACvBA,EAAK,QAAQ4F;AAIjB,gBAAIU,IAAe,CAAC;AAEpB,qBAASC,KAAe;AAGpB,qBAAOjE,GAAU,QAAQ;YAC7B;AAEA,qBAASkE,KAAI,GAAGA,KAAIvC,EAAU,QAAQ,QAAQuC,MAAK;AAC/C,kBAAIT,KAAS9B,EAAU,QAAQuC,EAAAA;AAC3BT,cAAAA,OAAW/F,KAEXsG,EAAa,KAAKP,GAAO,WAAW,EAAE,MAASQ,EAAY,CAAC;YAEpE;AAGA,gBAAIT,IAAU7B,EAAU,QAAQ,MAAM,CAAC;AAIvC,mBAAO3B,GAAU,IAAIgE,CAAY,EAAE,KAAK,WAAY;AAChD,qBAAAtC,EAAO,KAAKC,EAAU,IAEfY,IAAuBb,CAAM;YACxC,CAAC,EAAE,KAAK,SAAUW,IAAI;AAElB,qBADAX,EAAO,KAAKW,IACRI,GAAiBf,GAAQhE,EAAK,eAAe,OAAO,IAE7C8E,IAAuBd,CAAM,IAEjCW;YACX,CAAC,EAAE,KAAK,SAAUA,IAAI;AAClBX,gBAAO,KAAKC,EAAU,KAAKU,IAC3B3E,EAAK,UAAUgE;AAEf,uBAASyC,KAAI,GAAGA,KAAIX,EAAQ,QAAQW,MAAK;AACrC,oBAAIV,KAASD,EAAQW,EAAAA;AACjBV,gBAAAA,OAAW/F,MAEX+F,GAAO,QAAQ,KAAK/B,EAAO,IAC3B+B,GAAO,QAAQ,UAAU/B,EAAO;cAExC;YACJ,CAAC;UACL;AAEA,mBAAS0C,GAAQ9D,GAAKJ,GAAU;AAC5B,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASkD,KAAW,SAAUmB,IAAKsC,IAAa;AACnE,sBAAItC,GACA,QAAOxD,EAAOwD,EAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GACtD6G,IAAMD,GAAM,IAAIhE,CAAG;AAEvBiE,sBAAI,YAAY,WAAY;AACxB,0BAAI1K,KAAQ0K,EAAI;AACZ1K,sBAAAA,OAAU,WACVA,KAAQ,OAERwJ,GAAexJ,EAAK,MACpBA,KAAQqJ,GAAYrJ,EAAK,IAE7ByE,EAAQzE,EAAK;oBACjB,GAEA0K,EAAI,UAAU,WAAY;AACtBhG,wBAAOgG,EAAI,KAAK;oBACpB;kBACJ,SAASvJ,IAAP;AACEuD,sBAAOvD,EAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAGA,mBAASmH,IAAQC,GAAUvE,GAAU;AACjC,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASkD,KAAW,SAAUmB,IAAKsC,IAAa;AACnE,sBAAItC,GACA,QAAOxD,EAAOwD,EAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GACtD6G,IAAMD,GAAM,WAAW,GACvBI,KAAkB;AAEtBH,sBAAI,YAAY,WAAY;AACxB,0BAAII,KAASJ,EAAI;AAEjB,0BAAII,IAAQ;AACR,4BAAI9K,KAAQ8K,GAAO;AACftB,wBAAAA,GAAexJ,EAAK,MACpBA,KAAQqJ,GAAYrJ,EAAK;AAE7B,4BAAI8D,KAAS8G,EAAS5K,IAAO8K,GAAO,KAAKD,IAAiB;AAKtD/G,wBAAAA,OAAW,SACXW,EAAQX,EAAM,IAEdgH,GAAO,SAAY;sBAE3B,MACIrG,GAAQ;oBAEhB,GAEAiG,EAAI,UAAU,WAAY;AACtBhG,wBAAOgG,EAAI,KAAK;oBACpB;kBACJ,SAASvJ,IAAP;AACEuD,sBAAOvD,EAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAE1B7C;UACX;AAEA,mBAASuH,IAAQtE,GAAKzG,GAAOqG,GAAU;AACnC,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,IAAQ;AACnD,kBAAImD;AACJhE,gBAAK,MAAM,EAAE,KAAK,WAAY;AAE1B,uBADAgE,KAAShE,EAAK,SACViD,IAAS,KAAK9G,CAAK,MAAM,kBAClB2H,GAAkBE,GAAO,EAAE,EAAE,KAAK,SAAUmD,IAAa;AAC5D,yBAAIA,KACOhL,IAEJkJ,EAAYlJ,CAAK;gBAC5B,CAAC,IAEEA;cACX,CAAC,EAAE,KAAK,SAAUA,IAAO;AACrB6J,gBAAAA,GAAkBhG,EAAK,SAASmD,IAAY,SAAUkB,GAAKsC,IAAa;AACpE,sBAAItC,EACA,QAAOxD,GAAOwD,CAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS;AAMtD7D,oBAAAA,OAAU,SACVA,KAAQ;AAGZ,wBAAI0K,KAAMD,GAAM,IAAIzK,IAAOyG,CAAG;AAE9B+D,oBAAAA,GAAY,aAAa,WAAY;AAO7BxK,sBAAAA,OAAU,WACVA,KAAQ,OAGZyE,EAAQzE,EAAK;oBACjB,GACAwK,GAAY,UAAUA,GAAY,UAAU,WAAY;AACpD,0BAAItC,KAAMwC,GAAI,QAAQA,GAAI,QAAQA,GAAI,YAAY;AAClDhG,sBAAAA,GAAOwD,EAAG;oBACd;kBACJ,SAAS/G,IAAP;AACEuD,oBAAAA,GAAOvD,EAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,EAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAASyH,IAAWxE,GAAKJ,GAAU;AAC/B,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASmD,IAAY,SAAUkB,IAAKsC,IAAa;AACpE,sBAAItC,GACA,QAAOxD,EAAOwD,EAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GAMtD6G,IAAMD,GAAM,OAAUhE,CAAG;AAC7B+D,oBAAAA,GAAY,aAAa,WAAY;AACjC/F,wBAAQ;oBACZ,GAEA+F,GAAY,UAAU,WAAY;AAC9B9F,wBAAOgG,EAAI,KAAK;oBACpB,GAIAF,GAAY,UAAU,WAAY;AAC9B,0BAAItC,KAAMwC,EAAI,QAAQA,EAAI,QAAQA,EAAI,YAAY;AAClDhG,wBAAOwD,EAAG;oBACd;kBACJ,SAAS/G,IAAP;AACEuD,sBAAOvD,EAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS0H,IAAM7E,GAAU;AACrB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASmD,IAAY,SAAUkB,GAAKsC,IAAa;AACpE,sBAAItC,EACA,QAAOxD,EAAOwD,CAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GACtD6G,KAAMD,GAAM,MAAM;AAEtBD,oBAAAA,GAAY,aAAa,WAAY;AACjC/F,wBAAQ;oBACZ,GAEA+F,GAAY,UAAUA,GAAY,UAAU,WAAY;AACpD,0BAAItC,IAAMwC,GAAI,QAAQA,GAAI,QAAQA,GAAI,YAAY;AAClDhG,wBAAOwD,CAAG;oBACd;kBACJ,SAAS/G,GAAP;AACEuD,sBAAOvD,CAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS2D,IAAOd,GAAU;AACtB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASkD,KAAW,SAAUmB,GAAKsC,IAAa;AACnE,sBAAItC,EACA,QAAOxD,EAAOwD,CAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GACtD6G,KAAMD,GAAM,MAAM;AAEtBC,oBAAAA,GAAI,YAAY,WAAY;AACxBjG,wBAAQiG,GAAI,MAAM;oBACtB,GAEAA,GAAI,UAAU,WAAY;AACtBhG,wBAAOgG,GAAI,KAAK;oBACpB;kBACJ,SAASvJ,GAAP;AACEuD,sBAAOvD,CAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAASiD,IAAIpF,GAAGgF,GAAU;AACtB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnD,kBAAIrD,IAAI,GAAG;AACPoD,kBAAQ,IAAI;AAEZ;cACJ;AAEAZ,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASkD,KAAW,SAAUmB,IAAKsC,IAAa;AACnE,sBAAItC,GACA,QAAOxD,EAAOwD,EAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GACtDsH,IAAW,OACXT,KAAMD,GAAM,cAAc;AAE9BC,oBAAAA,GAAI,YAAY,WAAY;AACxB,0BAAII,KAASJ,GAAI;AACjB,0BAAI,CAACI,IAAQ;AAETrG,0BAAQ,IAAI;AAEZ;sBACJ;AAEIpD,4BAAM,KAKD8J,IAFL1G,EAAQqG,GAAO,GAAG,KAKdK,IAAW,MACXL,GAAO,QAAQzJ,CAAC;oBAM5B,GAEAqJ,GAAI,UAAU,WAAY;AACtBhG,wBAAOgG,GAAI,KAAK;oBACpB;kBACJ,SAASvJ,IAAP;AACEuD,sBAAOvD,EAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS4H,IAAK/E,GAAU;AACpB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1BgG,gBAAAA,GAAkBhG,EAAK,SAASkD,KAAW,SAAUmB,GAAKsC,IAAa;AACnE,sBAAItC,EACA,QAAOxD,EAAOwD,CAAG;AAGrB,sBAAI;AACA,wBAAIuC,KAAQD,GAAY,YAAY3G,EAAK,QAAQ,SAAS,GACtD6G,KAAMD,GAAM,cAAc,GAC1BW,IAAO,CAAC;AAEZV,oBAAAA,GAAI,YAAY,WAAY;AACxB,0BAAII,KAASJ,GAAI;AAEjB,0BAAI,CAACI,IAAQ;AACTrG,0BAAQ2G,CAAI;AACZ;sBACJ;AAEAA,wBAAK,KAAKN,GAAO,GAAG,GACpBA,GAAO,SAAY;oBACvB,GAEAJ,GAAI,UAAU,WAAY;AACtBhG,wBAAOgG,GAAI,KAAK;oBACpB;kBACJ,SAASvJ,IAAP;AACEuD,sBAAOvD,EAAC;kBACZ;gBACJ,CAAC;cACL,CAAC,EAAE,MAASuD,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS6H,IAAanB,GAAS7D,GAAU;AACrCA,gBAAWK,GAAY,MAAM,MAAM,SAAS;AAE5C,gBAAI4E,IAAgB,KAAK,OAAO;AAChCpB,gBAAU,OAAOA,KAAY,cAAcA,KAAW,CAAC,GAClDA,EAAQ,SACTA,EAAQ,OAAOA,EAAQ,QAAQoB,EAAc,MAC7CpB,EAAQ,YAAYA,EAAQ,aAAaoB,EAAc;AAG3D,gBAAIzH,IAAO,MACPL;AACJ,gBAAI,CAAC0G,EAAQ,KACT1G,KAAU2C,GAAU,OAAO,mBAAmB;iBAC3C;AACH,kBAAIoF,IAAcrB,EAAQ,SAASoB,EAAc,QAAQzH,EAAK,QAAQ,IAElE2H,KAAYD,IAAcpF,GAAU,QAAQtC,EAAK,QAAQ,EAAE,IAAI6E,IAAuBwB,CAAO,EAAE,KAAK,SAAU1B,IAAI;AAClH,oBAAIV,KAAYjB,GAAWqD,EAAQ,IAAA,GAC/BP,IAAU7B,GAAU;AACxBA,gBAAAA,GAAU,KAAKU;AACf,yBAAS5G,KAAI,GAAGA,KAAI+H,EAAQ,QAAQ/H,KAChC+H,GAAQ/H,EAAAA,EAAG,QAAQ,KAAK4G;AAE5B,uBAAOA;cACX,CAAC;AAEI0B,gBAAQ,YAmDT1G,IAAUgI,GAAU,KAAK,SAAUhD,IAAI;AACnC,oBAAI,CAAA,CAACA,GAAG,iBAAiB,SAAS0B,EAAQ,SAAS,GAInD;AAAA,sBAAIuB,KAAajD,GAAG,UAAU;AAE9BZ,kBAAAA,GAAgBsC,CAAO;AAEvB,sBAAIpC,IAAYjB,GAAWqD,EAAQ,IAAA,GAC/BP,KAAU7B,EAAU;AAExBU,kBAAAA,GAAG,MAAM;AACT,2BAAS5G,KAAI,GAAGA,KAAI+H,GAAQ,QAAQ/H,MAAK;AACrC,wBAAIgI,KAASD,GAAQ/H,EAAAA;AACrBgI,oBAAAA,GAAO,QAAQ,KAAK,MACpBA,GAAO,QAAQ,UAAU6B;kBAC7B;AAEA,sBAAIC,KAAoB,IAAIvF,GAAU,SAAU1B,GAASC,IAAQ;AAC7D,wBAAIgG,KAAMhF,GAAI,KAAKwE,EAAQ,MAAMuB,EAAU;AAE3Cf,oBAAAA,GAAI,UAAU,SAAUxC,IAAK;AACzB,0BAAIM,KAAKkC,GAAI;AACblC,yBAAG,MAAM,GACT9D,GAAOwD,EAAG;oBACd,GAEAwC,GAAI,kBAAkB,WAAY;AAC9B,0BAAIlC,KAAKkC,GAAI;AACblC,sBAAAA,GAAG,kBAAkB0B,EAAQ,SAAS;oBAC1C,GAEAQ,GAAI,YAAY,WAAY;AACxB,0BAAIlC,KAAKkC,GAAI;AACblC,sBAAAA,GAAG,MAAM,GACT/D,EAAQ+D,EAAE;oBACd;kBACJ,CAAC;AAED,yBAAOkD,GAAkB,KAAK,SAAUlD,GAAI;AACxCV,sBAAU,KAAKU;AACf,6BAAS6B,KAAI,GAAGA,KAAIV,GAAQ,QAAQU,MAAK;AACrC,0BAAIsB,KAAWhC,GAAQU,EAAAA;AACvBsB,sBAAAA,GAAS,QAAQ,KAAKnD,GACtBR,GAAkB2D,GAAS,OAAO;oBACtC;kBACJ,CAAC,EAAE,MAAS,SAAUzD,GAAK;AACvB,2BAACD,EAAiBiC,GAAShC,CAAG,KAAK/B,GAAU,QAAQ,GAAG,MAAS,WAAY;oBAAC,CAAC,GACzE+B;kBACV,CAAC;gBAAA;cACL,CAAC,IArGD1E,IAAUgI,GAAU,KAAK,SAAUhD,IAAI;AACnCZ,gBAAAA,GAAgBsC,CAAO;AAEvB,oBAAIpC,KAAYjB,GAAWqD,EAAQ,IAAA,GAC/BP,IAAU7B,GAAU;AAExBU,gBAAAA,GAAG,MAAM;AACT,yBAAS5G,KAAI,GAAGA,KAAI+H,EAAQ,QAAQ/H,MAAK;AACrC,sBAAIgI,KAASD,EAAQ/H,EAAAA;AACrBgI,kBAAAA,GAAO,QAAQ,KAAK;gBACxB;AAEA,oBAAIgC,KAAgB,IAAIzF,GAAU,SAAU1B,IAASC,GAAQ;AACzD,sBAAIgG,KAAMhF,GAAI,eAAewE,EAAQ,IAAI;AAEzCQ,kBAAAA,GAAI,UAAU,WAAY;AACtB,wBAAIlC,KAAKkC,GAAI;AACTlC,oBAAAA,MACAA,GAAG,MAAM,GAEb9D,EAAOgG,GAAI,KAAK;kBACpB,GAEAA,GAAI,YAAY,WAAY;AAGxB,4BAAQ,KAAK,wCAAwCR,EAAQ,OAAO,yCAAyC;kBACjH,GAEAQ,GAAI,YAAY,WAAY;AACxB,wBAAIlC,KAAKkC,GAAI;AACTlC,oBAAAA,MACAA,GAAG,MAAM,GAEb/D,GAAQ+D,EAAE;kBACd;gBACJ,CAAC;AAED,uBAAOoD,GAAc,KAAK,SAAUpD,IAAI;AACpCV,kBAAAA,GAAU,KAAKU;AACf,2BAAS5G,IAAI,GAAGA,IAAI+H,EAAQ,QAAQ/H,KAAK;AACrC,wBAAIiK,KAAUlC,EAAQ/H,CAAAA;AACtBoG,oBAAAA,GAAkB6D,GAAQ,OAAO;kBACrC;gBACJ,CAAC,EAAE,MAAS,SAAU3D,IAAK;AACvB,yBAACD,EAAiBiC,GAAShC,EAAG,KAAK/B,GAAU,QAAQ,GAAG,MAAS,WAAY;kBAAC,CAAC,GACzE+B;gBACV,CAAC;cACL,CAAC;YAuDT;AAEA,mBAAA9B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,cAAIsI,MAAe,EACf,SAAS,gBACT,cAAc7B,KACd,UAAUtE,GAAiB,GAC3B,SAASgF,KACT,SAASJ,IACT,SAASQ,KACT,YAAYE,KACZ,OAAOC,KACP,QAAQ/D,KACR,KAAKV,KACL,MAAM2E,KACN,cAAcC,IAClB;AAEA,mBAASU,MAAgB;AACrB,mBAAO,OAAO,gBAAiB;UACnC;AAKA,cAAIC,MAAa,oEAEbC,MAAmB,wBACnBC,MAAyB,iCAEzBC,MAAoB,aACpBC,MAA2BD,IAAkB,QAG7CE,MAAmB,QACnBC,MAAY,QACZC,MAAiB,QACjBC,MAAkB,QAClBC,MAAyB,QACzBC,KAAkB,QAClBC,MAAkB,QAClBC,MAAmB,QACnBC,MAAmB,QACnBC,MAAoB,QACpBC,MAAoB,QACpBC,MAAgCZ,MAA2BC,IAAiB,QAE5EY,MAAa,OAAO,UAAU;AAElC,mBAASC,IAAeC,GAAkB;AAEtC,gBAAIC,IAAeD,EAAiB,SAAS,MACzCxK,IAAMwK,EAAiB,QACvBvL,GACAyL,IAAI,GACJC,GAAUC,IAAUC,IAAUC;AAE9BN,cAAiBA,EAAiB,SAAS,CAAA,MAAO,QAClDC,KACID,EAAiBA,EAAiB,SAAS,CAAA,MAAO,OAClDC;AAIR,gBAAIM,IAAS,IAAI,YAAYN,CAAY,GACrCO,KAAQ,IAAI,WAAWD,CAAM;AAEjC,iBAAK9L,IAAI,GAAGA,IAAIe,GAAKf,KAAK,EACtB0L,KAAWtB,IAAW,QAAQmB,EAAiBvL,CAAAA,CAAE,GACjD2L,KAAWvB,IAAW,QAAQmB,EAAiBvL,IAAI,CAAA,CAAE,GACrD4L,KAAWxB,IAAW,QAAQmB,EAAiBvL,IAAI,CAAA,CAAE,GACrD6L,KAAWzB,IAAW,QAAQmB,EAAiBvL,IAAI,CAAA,CAAE,GAGrD+L,GAAMN,GAAAA,IAAOC,KAAY,IAAIC,MAAY,GACzCI,GAAMN,GAAAA,KAAQE,KAAW,OAAO,IAAIC,MAAY,GAChDG,GAAMN,GAAAA,KAAQG,KAAW,MAAM,IAAIC,KAAW;AAElD,mBAAOC;UACX;AAIA,mBAASE,IAAeF,GAAQ;AAE5B,gBAAIC,IAAQ,IAAI,WAAWD,CAAM,GAC7BG,IAAe,IACfjM;AAEJ,iBAAKA,IAAI,GAAGA,IAAI+L,EAAM,QAAQ/L,KAAK,EAE/BiM,MAAgB7B,IAAW2B,EAAM/L,CAAAA,KAAM,CAAA,GACvCiM,KAAgB7B,KAAY2B,EAAM/L,CAAAA,IAAK,MAAM,IAAI+L,EAAM/L,IAAI,CAAA,KAAM,CAAA,GACjEiM,KAAgB7B,KAAY2B,EAAM/L,IAAI,CAAA,IAAK,OAAO,IAAI+L,EAAM/L,IAAI,CAAA,KAAM,CAAA,GACtEiM,KAAgB7B,IAAW2B,EAAM/L,IAAI,CAAA,IAAK,EAAA;AAG9C,mBAAI+L,EAAM,SAAS,MAAM,IACrBE,IAAeA,EAAa,UAAU,GAAGA,EAAa,SAAS,CAAC,IAAI,MAC7DF,EAAM,SAAS,MAAM,MAC5BE,IAAeA,EAAa,UAAU,GAAGA,EAAa,SAAS,CAAC,IAAI,OAGjEA;UACX;AAKA,mBAASC,GAAU9N,GAAOqG,GAAU;AAChC,gBAAI0H,IAAY;AAShB,gBARI/N,MACA+N,IAAYd,IAAW,KAAKjN,CAAK,IAOjCA,MAAU+N,MAAc,0BAA0B/N,EAAM,UAAUiN,IAAW,KAAKjN,EAAM,MAAM,MAAM,yBAAyB;AAG7H,kBAAI0N,GACAM,IAAS7B;AAETnM,2BAAiB,eACjB0N,IAAS1N,GACTgO,KAAU3B,QAEVqB,IAAS1N,EAAM,QAEX+N,MAAc,uBACdC,KAAUzB,MACHwB,MAAc,wBACrBC,KAAUxB,MACHuB,MAAc,+BACrBC,KAAUvB,MACHsB,MAAc,wBACrBC,KAAUtB,KACHqB,MAAc,yBACrBC,KAAUpB,MACHmB,MAAc,wBACrBC,KAAUrB,MACHoB,MAAc,yBACrBC,KAAUnB,MACHkB,MAAc,0BACrBC,KAAUlB,MACHiB,MAAc,0BACrBC,KAAUjB,MAEV1G,EAAS,IAAI,MAAM,oCAAoC,CAAC,IAIhEA,EAAS2H,IAASJ,IAAeF,CAAM,CAAC;YAC5C,WAAWK,MAAc,iBAAiB;AAEtC,kBAAIE,IAAa,IAAI;AAErBA,gBAAW,SAAS,WAAY;AAE5B,oBAAIC,KAAMjC,MAAmBjM,EAAM,OAAO,MAAM4N,IAAe,KAAK,MAAM;AAE1EvH,kBAAS8F,MAAoBG,MAAY4B,EAAG;cAChD,GAEAD,EAAW,kBAAkBjO,CAAK;YACtC,MACI,KAAI;AACAqG,gBAAS,KAAK,UAAUrG,CAAK,CAAC;YAClC,SAASmB,IAAP;AACE,sBAAQ,MAAM,+CAA+CnB,CAAK,GAElEqG,EAAS,MAAMlF,EAAC;YACpB;UAER;AAUA,mBAASgN,IAAYnO,GAAO;AAIxB,gBAAIA,EAAM,UAAU,GAAGoM,GAAwB,MAAMD,IACjD,QAAO,KAAK,MAAMnM,CAAK;AAM3B,gBAAImN,IAAmBnN,EAAM,UAAUgN,GAA6B,GAChEoB,IAAOpO,EAAM,UAAUoM,KAA0BY,GAA6B,GAE9EqB;AAGJ,gBAAID,MAAS9B,OAAaJ,IAAuB,KAAKiB,CAAgB,GAAG;AACrE,kBAAImB,IAAUnB,EAAiB,MAAMjB,GAAsB;AAC3DmC,kBAAWC,EAAQ,CAAA,GACnBnB,IAAmBA,EAAiB,UAAUmB,EAAQ,CAAA,EAAG,MAAM;YACnE;AACA,gBAAIZ,IAASR,IAAeC,CAAgB;AAI5C,oBAAQiB,GAAAA;cAAAA,KACC/B;AACD,uBAAOqB;cAAAA,KACNpB;AACD,uBAAOxG,GAAW,CAAC4H,CAAM,GAAG,EAAE,MAAMW,EAAS,CAAC;cAAA,KAC7C9B;AACD,uBAAO,IAAI,UAAUmB,CAAM;cAAA,KAC1BlB;AACD,uBAAO,IAAI,WAAWkB,CAAM;cAAA,KAC3BjB;AACD,uBAAO,IAAI,kBAAkBiB,CAAM;cAAA,KAClChB;AACD,uBAAO,IAAI,WAAWgB,CAAM;cAAA,KAC3Bd;AACD,uBAAO,IAAI,YAAYc,CAAM;cAAA,KAC5Bf;AACD,uBAAO,IAAI,WAAWe,CAAM;cAAA,KAC3Bb;AACD,uBAAO,IAAI,YAAYa,CAAM;cAAA,KAC5BZ;AACD,uBAAO,IAAI,aAAaY,CAAM;cAAA,KAC7BX;AACD,uBAAO,IAAI,aAAaW,CAAM;cAAA;AAE9B,sBAAM,IAAI,MAAM,kBAAkBU,CAAI;YAAA;UAElD;AAEA,cAAIG,MAAwB,EACxB,WAAWT,IACX,aAAaK,KACb,gBAAgBjB,KAChB,gBAAgBU,IACpB;AAYA,mBAASY,IAAcpN,GAAGyG,GAAQxB,GAAUE,GAAe;AACvDnF,cAAE,WAAW,gCAAgCyG,EAAO,YAAY,gDAAqD,CAAC,GAAGxB,GAAUE,CAAa;UACpJ;AAIA,mBAASkI,IAAevE,GAAS;AAC7B,gBAAIrG,IAAO,MACPgE,IAAS,EACT,IAAI,KACR;AAEA,gBAAIqC,EACA,UAAStI,KAAKsI,EACVrC,GAAOjG,CAAAA,IAAK,OAAOsI,EAAQtI,CAAAA,KAAO,WAAWsI,EAAQtI,CAAAA,EAAG,SAAS,IAAIsI,EAAQtI,CAAAA;AAIrF,gBAAI8M,IAAgB,IAAIvI,GAAU,SAAU1B,GAASC,IAAQ;AAGzD,kBAAI;AACAmD,kBAAO,KAAK,aAAaA,EAAO,MAAM,OAAOA,EAAO,OAAO,GAAGA,EAAO,aAAaA,EAAO,IAAI;cACjG,SAAS1G,IAAP;AACE,uBAAOuD,GAAOvD,EAAC;cACnB;AAGA0G,gBAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BoN,gBAAAA,IAAcpN,IAAGyG,GAAQ,WAAY;AACjChE,oBAAK,UAAUgE,GACfpD,EAAQ;gBACZ,GAAG,SAAUrD,IAAG8C,GAAO;AACnBQ,kBAAAA,GAAOR,CAAK;gBAChB,CAAC;cACL,GAAGQ,EAAM;YACb,CAAC;AAED,mBAAAmD,EAAO,aAAa0G,KACbG;UACX;AAEA,mBAASC,IAAcvN,GAAGyG,GAAQ+G,GAAcC,GAAMxI,GAAUE,GAAe;AAC3EnF,cAAE,WAAWwN,GAAcC,GAAMxI,GAAU,SAAUjF,IAAG8C,IAAO;AACvDA,cAAAA,GAAM,SAASA,GAAM,aACrB9C,GAAE,WAAW,kEAAuE,CAACyG,EAAO,SAAS,GAAG,SAAUzG,IAAG0N,GAAS;AACrHA,kBAAQ,KAAK,SAOdvI,EAAcnF,IAAG8C,EAAK,IAJtBsK,IAAcpN,IAAGyG,GAAQ,WAAY;AACjCzG,kBAAAA,GAAE,WAAWwN,GAAcC,GAAMxI,GAAUE,CAAa;gBAC5D,GAAGA,CAAa;cAIxB,GAAGA,CAAa,IAEhBA,EAAcnF,IAAG8C,EAAK;YAE9B,GAAGqC,CAAa;UACpB;AAEA,mBAASwI,IAAUtI,GAAKJ,GAAU;AAC9B,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,KAAShE,EAAK;AAClBgE,gBAAAA,GAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,kBAAAA,IAAcvN,IAAGyG,IAAQ,mBAAmBA,GAAO,YAAY,0BAA0B,CAACpB,CAAG,GAAG,SAAUrF,IAAG0N,GAAS;AAClH,wBAAIhL,KAASgL,EAAQ,KAAK,SAASA,EAAQ,KAAK,KAAK,CAAC,EAAE,QAAQ;AAI5DhL,oBAAAA,OACAA,KAAS+D,GAAO,WAAW,YAAY/D,EAAM,IAGjDW,EAAQX,EAAM;kBAClB,GAAG,SAAU1C,IAAG8C,GAAO;AACnBQ,sBAAOR,CAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAASwL,IAAUpE,GAAUvE,GAAU;AACnC,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,KAAShE,EAAK;AAElBgE,gBAAAA,GAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,kBAAAA,IAAcvN,IAAGyG,IAAQ,mBAAmBA,GAAO,WAAW,CAAC,GAAG,SAAUzG,IAAG0N,GAAS;AAIpF,6BAHIG,KAAOH,EAAQ,MACf3H,KAAS8H,GAAK,QAETrN,KAAI,GAAGA,KAAIuF,IAAQvF,MAAK;AAC7B,0BAAIsN,KAAOD,GAAK,KAAKrN,EAAC,GAClBkC,IAASoL,GAAK;AAYlB,0BARIpL,MACAA,IAAS+D,GAAO,WAAW,YAAY/D,CAAM,IAGjDA,IAAS8G,EAAS9G,GAAQoL,GAAK,KAAKtN,KAAI,CAAC,GAIrCkC,MAAW,QAAQ;AACnBW,0BAAQX,CAAM;AACd;sBACJ;oBACJ;AAEAW,sBAAQ;kBACZ,GAAG,SAAUrD,IAAG8C,GAAO;AACnBQ,sBAAOR,CAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS2L,GAAS1I,GAAKzG,GAAOqG,GAAU+I,GAAa;AACjD,gBAAIvL,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAU,IAAI2C,GAAU,SAAU1B,IAASC,IAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAItB7D,sBAAU,WACVA,IAAQ;AAIZ,oBAAIqP,KAAgBrP,GAEhB6H,IAAShE,EAAK;AAClBgE,kBAAO,WAAW,UAAU7H,GAAO,SAAUA,IAAOkE,IAAO;AACnDA,kBAAAA,KACAQ,GAAOR,EAAK,IAEZ2D,EAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,oBAAAA,IAAcvN,IAAGyG,GAAQ,4BAA4BA,EAAO,YAAY,+BAAoC,CAACpB,GAAKzG,EAAK,GAAG,WAAY;AAClIyE,sBAAAA,GAAQ4K,EAAa;oBACzB,GAAG,SAAUjO,IAAG8C,GAAO;AACnBQ,sBAAAA,GAAOR,CAAK;oBAChB,CAAC;kBACL,GAAG,SAAUoL,IAAU;AAGnB,wBAAIA,GAAS,SAASA,GAAS,WAAW;AAQtC,0BAAIF,IAAc,GAAG;AACjB3K,wBAAAA,GAAQ0K,GAAS,MAAMtL,GAAM,CAAC4C,GAAK4I,IAAehJ,GAAU+I,IAAc,CAAC,CAAC,CAAC;AAC7E;sBACJ;AACA1K,sBAAAA,GAAO4K,EAAQ;oBACnB;kBACJ,CAAC;gBAET,CAAC;cACL,CAAC,EAAE,MAAS5K,EAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS+L,IAAU9I,GAAKzG,GAAOqG,GAAU;AACrC,mBAAO8I,GAAS,MAAM,MAAM,CAAC1I,GAAKzG,GAAOqG,GAAU,CAAC,CAAC;UACzD;AAEA,mBAASmJ,IAAa/I,GAAKJ,GAAU;AACjC,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,KAAShE,EAAK;AAClBgE,gBAAAA,GAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,kBAAAA,IAAcvN,IAAGyG,IAAQ,iBAAiBA,GAAO,YAAY,kBAAkB,CAACpB,CAAG,GAAG,WAAY;AAC9FhC,sBAAQ;kBACZ,GAAG,SAAUrD,IAAG8C,GAAO;AACnBQ,sBAAOR,CAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAIA,mBAASiM,GAAQpJ,GAAU;AACvB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,IAAShE,EAAK;AAClBgE,kBAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,kBAAAA,IAAcvN,IAAGyG,GAAQ,iBAAiBA,EAAO,WAAW,CAAC,GAAG,WAAY;AACxEpD,sBAAQ;kBACZ,GAAG,SAAUrD,IAAG8C,IAAO;AACnBQ,sBAAOR,EAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAIA,mBAASkM,IAASrJ,GAAU;AACxB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,IAAShE,EAAK;AAClBgE,kBAAO,GAAG,YAAY,SAAUzG,IAAG;AAE/BuN,kBAAAA,IAAcvN,IAAGyG,GAAQ,iCAAiCA,EAAO,WAAW,CAAC,GAAG,SAAUzG,IAAG0N,IAAS;AAClG,wBAAIhL,IAASgL,GAAQ,KAAK,KAAK,CAAC,EAAE;AAClCrK,sBAAQX,CAAM;kBAClB,GAAG,SAAU1C,IAAG8C,IAAO;AACnBQ,sBAAOR,EAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AASA,mBAASmM,GAAMtO,GAAGgF,GAAU;AACxB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,KAAShE,EAAK;AAClBgE,gBAAAA,GAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,kBAAAA,IAAcvN,IAAGyG,IAAQ,qBAAqBA,GAAO,YAAY,yBAAyB,CAACxG,IAAI,CAAC,GAAG,SAAUD,IAAG0N,GAAS;AACrH,wBAAIhL,KAASgL,EAAQ,KAAK,SAASA,EAAQ,KAAK,KAAK,CAAC,EAAE,MAAM;AAC9DrK,sBAAQX,EAAM;kBAClB,GAAG,SAAU1C,IAAG8C,GAAO;AACnBQ,sBAAOR,CAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAASoM,IAAOvJ,GAAU;AACtB,gBAAIxC,IAAO,MAEPL,IAAU,IAAI2C,GAAU,SAAU1B,GAASC,GAAQ;AACnDb,gBAAK,MAAM,EAAE,KAAK,WAAY;AAC1B,oBAAIgE,IAAShE,EAAK;AAClBgE,kBAAO,GAAG,YAAY,SAAUzG,IAAG;AAC/BuN,kBAAAA,IAAcvN,IAAGyG,GAAQ,qBAAqBA,EAAO,WAAW,CAAC,GAAG,SAAUzG,IAAG0N,IAAS;AAGtF,6BAFI1D,IAAO,CAAC,GAEHxJ,KAAI,GAAGA,KAAIkN,GAAQ,KAAK,QAAQlN,KACrCwJ,GAAK,KAAK0D,GAAQ,KAAK,KAAKlN,EAAC,EAAE,GAAG;AAGtC6C,sBAAQ2G,CAAI;kBAChB,GAAG,SAAUhK,IAAG8C,IAAO;AACnBQ,sBAAOR,EAAK;kBAChB,CAAC;gBACL,CAAC;cACL,CAAC,EAAE,MAASQ,CAAM;YACtB,CAAC;AAED,mBAAA0B,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAIA,mBAASqM,GAAiBrH,GAAI;AAC1B,mBAAO,IAAIrC,GAAU,SAAU1B,GAASC,GAAQ;AAC5C8D,gBAAG,YAAY,SAAUpH,GAAG;AACxBA,kBAAE,WAAW,+FAAoG,CAAC,GAAG,SAAUA,GAAG0N,GAAS;AAGvI,2BAFIgB,KAAa,CAAC,GAETlO,KAAI,GAAGA,KAAIkN,EAAQ,KAAK,QAAQlN,KACrCkO,CAAAA,GAAW,KAAKhB,EAAQ,KAAK,KAAKlN,EAAC,EAAE,IAAI;AAG7C6C,oBAAQ,EACJ,IAAI+D,GACJ,YAAYsH,GAChB,CAAC;gBACL,GAAG,SAAU1O,GAAG8C,GAAO;AACnBQ,oBAAOR,CAAK;gBAChB,CAAC;cACL,GAAG,SAAUoL,GAAU;AACnB5K,kBAAO4K,CAAQ;cACnB,CAAC;YACL,CAAC;UACL;AAEA,mBAASS,GAAe7F,GAAS7D,GAAU;AACvCA,gBAAWK,GAAY,MAAM,MAAM,SAAS;AAE5C,gBAAI4E,IAAgB,KAAK,OAAO;AAChCpB,gBAAU,OAAOA,KAAY,cAAcA,KAAW,CAAC,GAClDA,EAAQ,SACTA,EAAQ,OAAOA,EAAQ,QAAQoB,EAAc,MAC7CpB,EAAQ,YAAYA,EAAQ,aAAaoB,EAAc;AAG3D,gBAAIzH,IAAO,MACPL;AACJ,mBAAK0G,EAAQ,OAGT1G,IAAU,IAAI2C,GAAU,SAAU1B,GAAS;AACvC,kBAAI+D;AACA0B,gBAAQ,SAASoB,EAAc,OAE/B9C,KAAK3E,EAAK,QAAQ,KAElB2E,KAAK,aAAa0B,EAAQ,MAAM,IAAI,IAAI,CAAC,GAGxCA,EAAQ,YAITzF,EAAQ,EACJ,IAAI+D,IACJ,YAAY,CAAC0B,EAAQ,SAAS,EAClC,CAAC,IALDzF,EAAQoL,GAAiBrH,EAAE,CAAC;YAOpC,CAAC,EAAE,KAAK,SAAUwH,GAAe;AAC7B,qBAAO,IAAI7J,GAAU,SAAU1B,IAASC,IAAQ;AAC5CsL,kBAAc,GAAG,YAAY,SAAU5O,IAAG;AACtC,2BAAS6O,EAAUC,IAAW;AAC1B,2BAAO,IAAI/J,GAAU,SAAU1B,GAASC,IAAQ;AAC5CtD,sBAAAA,GAAE,WAAW,0BAA0B8O,IAAW,CAAC,GAAG,WAAY;AAC9DzL,0BAAQ;sBACZ,GAAG,SAAUrD,IAAG8C,IAAO;AACnBQ,wBAAAA,GAAOR,EAAK;sBAChB,CAAC;oBACL,CAAC;kBACL;AAGA,2BADIiM,KAAa,CAAC,GACTvO,KAAI,GAAGe,KAAMqN,EAAc,WAAW,QAAQpO,KAAIe,IAAKf,KAC5DuO,CAAAA,GAAW,KAAKF,EAAUD,EAAc,WAAWpO,EAAAA,CAAE,CAAC;AAG1DuE,kBAAAA,GAAU,IAAIgK,EAAU,EAAE,KAAK,WAAY;AACvC1L,oBAAAA,GAAQ;kBACZ,CAAC,EAAE,MAAS,SAAUtD,IAAG;AACrBuD,oBAAAA,GAAOvD,EAAC;kBACZ,CAAC;gBACL,GAAG,SAAUmO,IAAU;AACnB5K,kBAAAA,GAAO4K,EAAQ;gBACnB,CAAC;cACL,CAAC;YACL,CAAC,IA/CD9L,IAAU2C,GAAU,OAAO,mBAAmB,GAkDlDC,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,cAAI4M,MAAgB,EAChB,SAAS,iBACT,cAAc3B,KACd,UAAU1C,IAAc,GACxB,SAASiD,KACT,SAASD,KACT,SAASQ,KACT,YAAYC,KACZ,OAAOC,IACP,QAAQC,KACR,KAAKC,IACL,MAAMC,KACN,cAAcG,GAClB;AAEA,mBAASM,KAAsB;AAC3B,gBAAI;AACA,qBAAO,OAAO,eAAiB,OAAe,aAAa,gBAE3D,CAAC,CAAC,aAAa;YACnB,QAAE;AACE,qBAAO;YACX;UACJ;AAEA,mBAASC,GAAcpG,GAASqG,GAAe;AAC3C,gBAAIC,IAAYtG,EAAQ,OAAO;AAE/B,mBAAIA,EAAQ,cAAcqG,EAAc,cACpCC,KAAatG,EAAQ,YAAY,MAE9BsG;UACX;AAGA,mBAASC,KAA4B;AACjC,gBAAIC,IAAsB;AAE1B,gBAAI;AACA,qBAAA,aAAa,QAAQA,GAAqB,IAAI,GAC9C,aAAa,WAAWA,CAAmB,GAEpC;YACX,QAAE;AACE,qBAAO;YACX;UACJ;AAMA,mBAASC,MAAwB;AAC7B,mBAAO,CAACF,GAA0B,KAAK,aAAa,SAAS;UACjE;AAGA,mBAASG,GAAe1G,GAAS;AAC7B,gBAAIrG,IAAO,MACPgE,IAAS,CAAC;AACd,gBAAIqC,EACA,UAAStI,KAAKsI,EACVrC,GAAOjG,CAAAA,IAAKsI,EAAQtI,CAAAA;AAM5B,mBAFAiG,EAAO,YAAYyI,GAAcpG,GAASrG,EAAK,cAAc,GAExD8M,IAAsB,KAI3B9M,EAAK,UAAUgE,GACfA,EAAO,aAAa0G,KAEbpI,GAAU,QAAQ,KANdA,GAAU,OAAO;UAOhC;AAIA,mBAAS0K,GAAQxK,GAAU;AACvB,gBAAIxC,IAAO,MACPL,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AAGxC,uBAFI2M,IAAY3M,EAAK,QAAQ,WAEpB,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AAC/C,oBAAI4C,IAAM,aAAa,IAAI,CAAC;AAExBA,kBAAI,QAAQ+J,CAAS,MAAM,KAC3B,aAAa,WAAW/J,CAAG;cAEnC;YACJ,CAAC;AAED,mBAAAL,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAKA,mBAASsN,GAAUrK,GAAKJ,GAAU;AAC9B,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AACxC,kBAAIgE,IAAShE,EAAK,SACdC,IAAS,aAAa,QAAQ+D,EAAO,YAAYpB,CAAG;AAMxD,qBAAI3C,MACAA,IAAS+D,EAAO,WAAW,YAAY/D,CAAM,IAG1CA;YACX,CAAC;AAED,mBAAAsC,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAGA,mBAASuN,GAAUnG,GAAUvE,GAAU;AACnC,gBAAIxC,IAAO,MAEPL,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AAcxC,uBAbIgE,IAAShE,EAAK,SACd2M,IAAY3I,EAAO,WACnBmJ,KAAkBR,EAAU,QAC5BrJ,KAAS,aAAa,QAQtB0D,KAAkB,GAEbjJ,IAAI,GAAGA,IAAIuF,IAAQvF,KAAK;AAC7B,oBAAI6E,KAAM,aAAa,IAAI7E,CAAC;AAC5B,oBAAI6E,GAAI,QAAQ+J,CAAS,MAAM,GAG/B;AAAA,sBAAIxQ,KAAQ,aAAa,QAAQyG,EAAG;AAYpC,sBANIzG,OACAA,KAAQ6H,EAAO,WAAW,YAAY7H,EAAK,IAG/CA,KAAQ4K,EAAS5K,IAAOyG,GAAI,UAAUuK,EAAe,GAAGnG,IAAiB,GAErE7K,OAAU,OACV,QAAOA;gBAAAA;cAEf;YACJ,CAAC;AAED,mBAAAoG,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAGA,mBAASyN,GAAM5P,GAAGgF,GAAU;AACxB,gBAAIxC,IAAO,MACPL,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AACxC,kBAAIgE,IAAShE,EAAK,SACdC;AACJ,kBAAI;AACAA,oBAAS,aAAa,IAAIzC,CAAC;cAC/B,QAAE;AACEyC,oBAAS;cACb;AAGA,qBAAIA,MACAA,IAASA,EAAO,UAAU+D,EAAO,UAAU,MAAM,IAG9C/D;YACX,CAAC;AAED,mBAAAsC,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS0N,GAAO7K,GAAU;AACtB,gBAAIxC,IAAO,MACPL,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AAKxC,uBAJIgE,IAAShE,EAAK,SACdsD,IAAS,aAAa,QACtBiE,IAAO,CAAC,GAEHxJ,KAAI,GAAGA,KAAIuF,GAAQvF,MAAK;AAC7B,oBAAIuP,KAAU,aAAa,IAAIvP,EAAC;AAC5BuP,gBAAAA,GAAQ,QAAQtJ,EAAO,SAAS,MAAM,KACtCuD,EAAK,KAAK+F,GAAQ,UAAUtJ,EAAO,UAAU,MAAM,CAAC;cAE5D;AAEA,qBAAOuD;YACX,CAAC;AAED,mBAAAhF,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAGA,mBAAS4N,GAAS/K,GAAU;AACxB,gBAAIxC,IAAO,MACPL,IAAUK,EAAK,KAAK,EAAE,KAAK,SAAUuH,GAAM;AAC3C,qBAAOA,EAAK;YAChB,CAAC;AAED,mBAAAhF,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAGA,mBAAS6N,GAAa5K,GAAKJ,GAAU;AACjC,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AACxC,kBAAIgE,IAAShE,EAAK;AAClB,2BAAa,WAAWgE,EAAO,YAAYpB,CAAG;YAClD,CAAC;AAED,mBAAAL,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAMA,mBAAS8N,IAAU7K,GAAKzG,GAAOqG,GAAU;AACrC,gBAAIxC,IAAO;AAEX4C,gBAAMD,EAAaC,CAAG;AAEtB,gBAAIjD,IAAUK,EAAK,MAAM,EAAE,KAAK,WAAY;AAGpC7D,oBAAU,WACVA,IAAQ;AAIZ,kBAAIqP,IAAgBrP;AAEpB,qBAAO,IAAImG,GAAU,SAAU1B,IAASC,IAAQ;AAC5C,oBAAImD,KAAShE,EAAK;AAClBgE,gBAAAA,GAAO,WAAW,UAAU7H,GAAO,SAAUA,GAAOkE,IAAO;AACvD,sBAAIA,GACAQ,CAAAA,GAAOR,EAAK;sBAEZ,KAAI;AACA,iCAAa,QAAQ2D,GAAO,YAAYpB,GAAKzG,CAAK,GAClDyE,GAAQ4K,CAAa;kBACzB,SAASlO,IAAP;AAAA,qBAGMA,GAAE,SAAS,wBAAwBA,GAAE,SAAS,iCAC9CuD,GAAOvD,EAAC,GAEZuD,GAAOvD,EAAC;kBACZ;gBAER,CAAC;cACL,CAAC;YACL,CAAC;AAED,mBAAAiF,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,mBAAS+N,GAAerH,GAAS7D,GAAU;AAIvC,gBAHAA,IAAWK,GAAY,MAAM,MAAM,SAAS,GAE5CwD,IAAU,OAAOA,KAAY,cAAcA,KAAW,CAAC,GACnD,CAACA,EAAQ,MAAM;AACf,kBAAIoB,IAAgB,KAAK,OAAO;AAChCpB,gBAAQ,OAAOA,EAAQ,QAAQoB,EAAc,MAC7CpB,EAAQ,YAAYA,EAAQ,aAAaoB,EAAc;YAC3D;AAEA,gBAAIzH,IAAO,MACPL;AACJ,mBAAK0G,EAAQ,OAGT1G,IAAU,IAAI2C,GAAU,SAAU1B,GAAS;AAClCyF,gBAAQ,YAGTzF,EAAQ6L,GAAcpG,GAASrG,EAAK,cAAc,CAAC,IAFnDY,EAAQyF,EAAQ,OAAO,GAAG;YAIlC,CAAC,EAAE,KAAK,SAAUsG,GAAW;AACzB,uBAAS5O,KAAI,aAAa,SAAS,GAAGA,MAAK,GAAGA,MAAK;AAC/C,oBAAI6E,KAAM,aAAa,IAAI7E,EAAC;AAExB6E,gBAAAA,GAAI,QAAQ+J,CAAS,MAAM,KAC3B,aAAa,WAAW/J,EAAG;cAEnC;YACJ,CAAC,IAhBDjD,IAAU2C,GAAU,OAAO,mBAAmB,GAmBlDC,GAAgB5C,GAAS6C,CAAQ,GAC1B7C;UACX;AAEA,cAAIgO,KAAsB,EACtB,SAAS,uBACT,cAAcZ,IACd,UAAUP,GAAoB,GAC9B,SAASU,IACT,SAASD,IACT,SAASQ,KACT,YAAYD,IACZ,OAAOR,IACP,QAAQO,IACR,KAAKH,IACL,MAAMC,IACN,cAAcK,GAClB,GAEIE,KAAY,SAAmBC,GAAGC,GAAG;AACrC,mBAAOD,MAAMC,KAAK,OAAOD,KAAM,YAAY,OAAOC,KAAM,YAAY,MAAMD,CAAC,KAAK,MAAMC,CAAC;UAC3F,GAEIC,KAAW,SAAkBC,GAAOC,GAAe;AAGnD,qBAFInP,IAAMkP,EAAM,QACZ,IAAI,GACD,IAAIlP,KAAK;AACZ,kBAAI8O,GAAUI,EAAM,CAAA,GAAIC,CAAa,EACjC,QAAO;AAEX;YACJ;AAEA,mBAAO;UACX,GAEIC,KAAU,MAAM,WAAW,SAAUC,GAAK;AAC1C,mBAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,MAAM;UACnD,GAIIC,MAAiB,CAAC,GAElBC,MAAgB,CAAC,GAEjBC,MAAiB,EACjB,WAAWrG,KACX,QAAQsE,KACR,cAAcoB,GAClB,GAEIY,KAAqB,CAACD,IAAe,UAAU,SAASA,IAAe,OAAO,SAASA,IAAe,aAAa,OAAO,GAE1HE,MAAwB,CAAC,cAAc,GAEvCC,MAAiB,CAAC,SAAS,WAAW,WAAW,OAAO,QAAQ,UAAU,cAAc,SAAS,EAAE,OAAOD,GAAqB,GAE/HE,KAAgB,EAChB,aAAa,IACb,QAAQH,GAAmB,MAAM,GACjC,MAAM,eAGN,MAAM,SACN,WAAW,iBACX,SAAS,EACb;AAEA,mBAASI,GAAcC,GAAqBC,GAAe;AACvDD,cAAoBC,CAAAA,IAAiB,WAAY;AAC7C,kBAAIC,IAAQ;AACZ,qBAAOF,EAAoB,MAAM,EAAE,KAAK,WAAY;AAChD,uBAAOA,EAAoBC,CAAAA,EAAe,MAAMD,GAAqBE,CAAK;cAC9E,CAAC;YACL;UACJ;AAEA,mBAASC,MAAS;AACd,qBAAShR,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AACvC,kBAAIoQ,IAAM,UAAUpQ,CAAAA;AAEpB,kBAAIoQ,EACA,UAASa,KAAQb,EACTA,GAAI,eAAea,CAAI,MACnBd,GAAQC,EAAIa,CAAAA,CAAK,IACjB,UAAU,CAAA,EAAGA,CAAAA,IAAQb,EAAIa,CAAAA,EAAM,MAAM,IAErC,UAAU,CAAA,EAAGA,CAAAA,IAAQb,EAAIa,CAAAA;YAK7C;AAEA,mBAAO,UAAU,CAAA;UACrB;AAEA,cAAIC,KAAc,WAAY;AAC1B,qBAASA,EAAY5I,GAAS;AAC1B5E,gBAAgB,MAAMwN,CAAW;AAEjC,uBAASC,KAAiBZ,IACtB,KAAIA,IAAe,eAAeY,CAAa,GAAG;AAC9C,oBAAIC,IAASb,IAAeY,CAAAA,GACxBE,IAAaD,EAAO;AACxB,qBAAKD,CAAAA,IAAiBE,GAEjBhB,IAAegB,CAAAA,KAIhB,KAAK,aAAaD,CAAM;cAEhC;AAGJ,mBAAK,iBAAiBJ,IAAO,CAAC,GAAGL,EAAa,GAC9C,KAAK,UAAUK,IAAO,CAAC,GAAG,KAAK,gBAAgB1I,CAAO,GACtD,KAAK,aAAa,MAClB,KAAK,cAAc,MACnB,KAAK,SAAS,OACd,KAAK,UAAU,MAEf,KAAK,6BAA6B,GAClC,KAAK,UAAU,KAAK,QAAQ,MAAM,EAAE,MAAS,WAAY;cAAC,CAAC;YAC/D;AAQA,mBAAA4I,EAAY,UAAU,SAAS,SAAgB5I,GAAS;AAIpD,mBAAK,OAAOA,IAAY,MAAc,cAAc7E,GAAQ6E,CAAO,OAAO,UAAU;AAGhF,oBAAI,KAAK,OACL,QAAO,IAAI,MAAM,sDAA2D;AAGhF,yBAAStI,KAAKsI,GAAS;AAKnB,sBAJItI,MAAM,gBACNsI,EAAQtI,CAAAA,IAAKsI,EAAQtI,CAAAA,EAAG,QAAQ,OAAO,GAAG,IAG1CA,MAAM,aAAa,OAAOsI,EAAQtI,CAAAA,KAAO,SACzC,QAAO,IAAI,MAAM,oCAAoC;AAGzD,uBAAK,QAAQA,CAAAA,IAAKsI,EAAQtI,CAAAA;gBAC9B;AAIA,uBAAI,YAAYsI,KAAWA,EAAQ,SACxB,KAAK,UAAU,KAAK,QAAQ,MAAM,IAGtC;cACX,MAAO,QAAI,OAAOA,KAAY,WACnB,KAAK,QAAQA,CAAAA,IAEb,KAAK;YAEpB,GAMA4I,EAAY,UAAU,eAAe,SAAsBI,GAAc7M,GAAUE,GAAe;AAC9F,kBAAI/C,IAAU,IAAI2C,GAAU,SAAU1B,IAASC,IAAQ;AACnD,oBAAI;AACA,sBAAIuO,KAAaC,EAAa,SAC1BC,IAAkB,IAAI,MAAM,sFAA2F;AAI3H,sBAAI,CAACD,EAAa,SAAS;AACvBxO,oBAAAA,GAAOyO,CAAe;AACtB;kBACJ;AAGA,2BADIC,KAAgBd,IAAe,OAAO,cAAc,GAC/C1Q,KAAI,GAAGe,KAAMyQ,GAAc,QAAQxR,KAAIe,IAAKf,MAAK;AACtD,wBAAIyR,KAAmBD,GAAcxR,EAAAA,GAIjC0R,IAAa,CAAC1B,GAASS,KAAuBgB,EAAgB;AAClE,yBAAKC,KAAcJ,EAAaG,EAAAA,MAAsB,OAAOH,EAAaG,EAAAA,KAAsB,YAAY;AACxG3O,sBAAAA,GAAOyO,CAAe;AACtB;oBACJ;kBACJ;AAEA,sBAAII,KAA0B,WAAmC;AAU7D,6BATIC,KAA8B,SAAqCC,IAAY;AAC/E,6BAAO,WAAY;AACf,4BAAIvP,KAAQ,IAAI,MAAM,YAAYuP,KAAa,2CAA2C,GACtFjQ,MAAU2C,GAAU,OAAOjC,EAAK;AACpC,+BAAAkC,GAAgB5C,KAAS,UAAU,UAAU,SAAS,CAAA,CAAE,GACjDA;sBACX;oBACJ,GAESkQ,MAAK,GAAGC,KAAOtB,IAAsB,QAAQqB,MAAKC,IAAMD,OAAM;AACnE,0BAAIE,MAAuBvB,IAAsBqB,GAAAA;AAC5CR,wBAAaU,GAAAA,MACdV,EAAaU,GAAAA,IAAwBJ,GAA4BI,GAAoB;oBAE7F;kBACJ;AAEAL,kBAAAA,GAAwB;AAExB,sBAAIM,KAAmB,SAA0BC,IAAS;AAClD7B,oBAAAA,IAAegB,EAAAA,KACf,QAAQ,KAAK,oCAAoCA,EAAU,GAE/DhB,IAAegB,EAAAA,IAAcC,GAC7BhB,IAAce,EAAAA,IAAca,IAI5BrP,GAAQ;kBACZ;AAEI,gCAAcyO,IACVA,EAAa,YAAY,OAAOA,EAAa,YAAa,aAC1DA,EAAa,SAAS,EAAE,KAAKW,IAAkBnP,EAAM,IAErDmP,GAAiB,CAAC,CAACX,EAAa,QAAQ,IAG5CW,GAAiB,IAAI;gBAE7B,SAAS1S,IAAP;AACEuD,kBAAAA,GAAOvD,EAAC;gBACZ;cACJ,CAAC;AAED,qBAAAmF,GAAoB9C,GAAS6C,GAAUE,CAAa,GAC7C/C;YACX,GAEAsP,EAAY,UAAU,SAAS,WAAkB;AAC7C,qBAAO,KAAK,WAAW;YAC3B,GAEAA,EAAY,UAAU,YAAY,SAAmBG,GAAY5M,GAAUE,GAAe;AACtF,kBAAIwN,IAAmB9B,IAAegB,CAAAA,IAAc9M,GAAU,QAAQ8L,IAAegB,CAAAA,CAAW,IAAI9M,GAAU,OAAO,IAAI,MAAM,mBAAmB,CAAC;AAEnJ,qBAAAG,GAAoByN,GAAkB1N,GAAUE,CAAa,GACtDwN;YACX,GAEAjB,EAAY,UAAU,gBAAgB,SAAuBzM,GAAU;AACnE,kBAAI2N,IAAoB7N,GAAU,QAAQoI,GAAqB;AAC/D,qBAAAjI,GAAoB0N,GAAmB3N,CAAQ,GACxC2N;YACX,GAEAlB,EAAY,UAAU,QAAQ,SAAezM,GAAU;AACnD,kBAAIxC,IAAO,MAEPL,IAAUK,EAAK,WAAW,KAAK,WAAY;AAC3C,uBAAIA,EAAK,WAAW,SAChBA,EAAK,SAASA,EAAK,YAAY,IAG5BA,EAAK;cAChB,CAAC;AAED,qBAAAyC,GAAoB9C,GAAS6C,GAAUA,CAAQ,GACxC7C;YACX,GAEAsP,EAAY,UAAU,YAAY,SAAmBmB,GAAS5N,GAAUE,GAAe;AACnF,kBAAI1C,IAAO;AAENkO,iBAAQkC,CAAO,MAChBA,IAAU,CAACA,CAAO;AAGtB,kBAAIC,KAAmB,KAAK,qBAAqBD,CAAO;AAExD,uBAASE,KAAoB;AACzBtQ,kBAAK,QAAQ,SAASA,EAAK,OAAO;cACtC;AAEA,uBAASuQ,GAAqBpB,IAAQ;AAClC,uBAAAnP,EAAK,QAAQmP,EAAM,GACnBmB,GAAkB,GAElBtQ,EAAK,SAASA,EAAK,aAAaA,EAAK,OAAO,GACrCA,EAAK;cAChB;AAEA,uBAASwQ,EAAWH,IAAkB;AAClC,uBAAO,WAAY;AACf,sBAAII,KAAqB;AAEzB,2BAASC,KAAoB;AACzB,2BAAOD,KAAqBJ,GAAiB,UAAQ;AACjD,0BAAIjB,IAAaiB,GAAiBI,EAAAA;AAClC,6BAAAA,MAEAzQ,EAAK,UAAU,MACfA,EAAK,SAAS,MAEPA,EAAK,UAAUoP,CAAU,EAAE,KAAKmB,EAAoB,EAAE,MAASG,EAAiB;oBAC3F;AAEAJ,oBAAAA,GAAkB;AAClB,wBAAIjQ,KAAQ,IAAI,MAAM,oCAAoC;AAC1D,2BAAAL,EAAK,aAAasC,GAAU,OAAOjC,EAAK,GACjCL,EAAK;kBAChB;AAEA,yBAAO0Q,GAAkB;gBAC7B;cACJ;AAKA,kBAAIC,KAAmB,KAAK,eAAe,OAAO,KAAK,WAAW,MAAS,WAAY;AACnF,uBAAOrO,GAAU,QAAQ;cAC7B,CAAC,IAAIA,GAAU,QAAQ;AAEvB,qBAAA,KAAK,aAAaqO,GAAiB,KAAK,WAAY;AAChD,oBAAIvB,KAAaiB,GAAiB,CAAA;AAClC,uBAAArQ,EAAK,UAAU,MACfA,EAAK,SAAS,MAEPA,EAAK,UAAUoP,EAAU,EAAE,KAAK,SAAUD,IAAQ;AACrDnP,oBAAK,UAAUmP,GAAO,SACtBmB,GAAkB,GAClBtQ,EAAK,6BAA6B,GAClCA,EAAK,cAAcwQ,EAAWH,EAAgB;gBAClD,CAAC;cACL,CAAC,EAAE,MAAS,WAAY;AACpBC,gBAAAA,GAAkB;AAClB,oBAAIjQ,KAAQ,IAAI,MAAM,oCAAoC;AAC1D,uBAAAL,EAAK,aAAasC,GAAU,OAAOjC,EAAK,GACjCL,EAAK;cAChB,CAAC,GAEDyC,GAAoB,KAAK,YAAYD,GAAUE,CAAa,GACrD,KAAK;YAChB,GAEAuM,EAAY,UAAU,WAAW,SAAkBG,GAAY;AAC3D,qBAAO,CAAC,CAACf,IAAce,CAAAA;YAC3B,GAEAH,EAAY,UAAU,UAAU,SAAiB2B,GAA6B;AAC1E7B,cAAAA,IAAO,MAAM6B,CAA2B;YAC5C,GAEA3B,EAAY,UAAU,uBAAuB,SAA8BmB,GAAS;AAEhF,uBADIC,IAAmB,CAAC,GACf,IAAI,GAAGvR,IAAMsR,EAAQ,QAAQ,IAAItR,GAAK,KAAK;AAChD,oBAAIsQ,KAAagB,EAAQ,CAAA;AACrB,qBAAK,SAAShB,EAAU,KACxBiB,EAAiB,KAAKjB,EAAU;cAExC;AACA,qBAAOiB;YACX,GAEApB,EAAY,UAAU,+BAA+B,WAAwC;AAKzF,uBAASlR,IAAI,GAAGe,IAAM2P,IAAe,QAAQ1Q,IAAIe,GAAKf,IAClD4Q,IAAc,MAAMF,IAAe1Q,CAAAA,CAAE;YAE7C,GAEAkR,EAAY,UAAU,iBAAiB,SAAwB5I,GAAS;AACpE,qBAAO,IAAI4I,EAAY5I,CAAO;YAClC,GAEO4I;UACX,EAAE,GAME4B,KAAiB,IAAI5B;AAEzB/R,UAAAA,GAAO,UAAU2T;QAEjB,GAAE,EAAC,GAAI,EAAC,CAAC,EAAC,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC,EAAE,CAAC;MACrB,CAAC;IAAA,CAAA;AAAA,IAAAnU,MAAAoU,IAAA,CAAA,IAAA,OAAA;AAAA,OAAA,SAAAC,IAAAC,IAAA;AAAA,eAAA,MAAA,YAAA,OAAA,KAAA,MAAAA,GAAA,EAAA,IAAA,OAAA,UAAA,cAAA,OAAA,MAAA,OAAA,6BAAA,CAAA,SAAA,GAAAA,EAAA,IAAAA,GAAAD,GAAA,0BAAA,CAAA,CAAA;MAAA,GAAA,OAAA,OAAA,MAAA,OAAA,IAAA,SAAAA,IAAA;AAAA;AAAA,YC/vFYE,KAAU;AAAA,iBAAAC,GAAArT,IAAA;AAAA,cAAA,IAAA,OAAA,UAAA,cAAAA,GAAA,OAAA,QAAA,GAAAsT,KAAA;AAAA,iBAAA,IAAA,EAAA,KAAAtT,EAAA,IAAA,EAAA,MAAA,WAAA;AAAA,mBAAAA,MAAAsT,MAAAtT,GAAA,WAAAA,KAAA,SAAA,EAAA,OAAAA,MAAAA,GAAAsT,IAAA,GAAA,MAAA,CAAAtT,GAAA;UAAA,EAAA;QAAA;ACuCvB,iBAASoE,GAAWC,IAAOC,GAAY;AAEnCD,UAAAA,KAAQA,MAAS,CAAA,GACjBC,IAAaA,KAAc,CAAA;AAC3B,cAAI;AACA,mBAAO,IAAI,KAAKD,IAAOC,CAAU;UACzC,SACW7E,IAAP;AACI,gBAAIA,GAAE,SAAS,YACX,OAAMA;AAQV,qBALI8E,KAAU,OAAO,cAAgB,MAAc,cAC7C,OAAO,gBAAkB,MAAc,gBACnC,OAAO,iBAAmB,MAAc,iBACpC,mBACVC,KAAU,IAAID,MACTrE,KAAI,GAAGA,KAAImE,GAAM,QAAQnE,MAAK,EACnCsE,CAAAA,GAAQ,OAAOH,GAAMnE,EAAAA,CAAE;AAE3B,mBAAOsE,GAAQ,QAAQF,EAAW,IAAI;UAC9C;QACA;AAEA,YAAIkG,KAAyB,iCACzBE,KAA2B,GAC3BY,KAAgCZ,KAA2B,GAE3DtF,IAAW,OAAO,UAAU;AAChC,iBAASoG,GAAeC,IAAkB;AAEtC,cAAIC,IAAeD,GAAiB,SAAS,MACzCxK,KAAMwK,GAAiB;AACvBA,UAAAA,GAAiBA,GAAiB,SAAS,CAAA,MAAO,QAClDC,KACID,GAAiBA,GAAiB,SAAS,CAAA,MAAO,OAClDC;AAKR,mBAFIM,KAAS,IAAI,YAAYN,CAAY,GACrCO,KAAQ,IAAI,WAAWD,EAAM,GACxB9L,KAAI,GAAGyL,KAAI,GAAGzL,KAAIe,IAAKf,MAAK,GAAG;AACpC,gBAAI0L,KAAW,mEAAoF,QAAQH,GAAiBvL,EAAAA,CAAE,GAC1H2L,MAAW,mEAAoF,QAAQJ,GAAiBvL,KAAI,CAAA,CAAE,GAC9H4L,KAAW,mEAAoF,QAAQL,GAAiBvL,KAAI,CAAA,CAAE,GAC9H6L,MAAW,mEAAoF,QAAQN,GAAiBvL,KAAI,CAAA,CAAE;AAClI+L,YAAAA,GAAMN,IAAAA,IAAQC,MAAY,IAAMC,OAAY,GAC5CI,GAAMN,IAAAA,KAASE,MAAW,OAAO,IAAMC,MAAY,GACnDG,GAAMN,IAAAA,KAASG,KAAW,MAAM,IAAMC,MAAW;UACzD;AACI,iBAAOC;QACX;AAKA,iBAASE,GAAeF,IAAQ;AAI5B,mBAFIC,IAAQ,IAAI,WAAWD,EAAM,GAC7BG,KAAe,IACVjM,KAAI,GAAGA,KAAI+L,EAAM,QAAQ/L,MAAK,EAEnCiM,CAAAA,MAAgB,mEAAoFF,EAAM/L,EAAAA,KAAM,CAAA,GAChHiM,MAAgB,oEAAsFF,EAAM/L,EAAAA,IAAK,MAAM,IAAM+L,EAAM/L,KAAI,CAAA,KAAM,CAAA,GAC7IiM,MACI,oEAAsFF,EAAM/L,KAAI,CAAA,IAAK,OAAO,IAAM+L,EAAM/L,KAAI,CAAA,KAAM,CAAA,GACtIiM,MAAgB,mEAAoFF,EAAM/L,KAAI,CAAA,IAAK,EAAA;AAEvH,iBAAI+L,EAAM,SAAS,MAAM,IACrBE,KAAeA,GAAa,UAAU,GAAGA,GAAa,SAAS,CAAC,IAAI,MAE/DF,EAAM,SAAS,MAAM,MAC1BE,KAAeA,GAAa,UAAU,GAAGA,GAAa,SAAS,CAAC,IAAI,OAEjEA;QACX;AAQA,iBAASC,GAAU9N,IAAOqG,GAAU;AAChC,cAAI0H,KAAY;AAMhB,cALI/N,OACA+N,KAAYjH,EAAS,KAAK9G,EAAK,IAI/BA,OAAU+N,OAAc,0BACvB/N,GAAM,UAAU8G,EAAS,KAAK9G,GAAM,MAAM,MAAM,yBAA0B;AAG3E,gBAAI0N,KAAS,QACTM,KAAS;AACThO,YAAAA,cAAiB,eACjB0N,KAAS1N,IACTgO,MAAU,WAGVN,KAAS1N,GAAM,QACX+N,OAAc,uBACdC,MAAU,SAELD,OAAc,wBACnBC,MAAU,SAELD,OAAc,+BACnBC,MAAU,SAELD,OAAc,wBACnBC,MAAU,SAELD,OAAc,yBACnBC,MAAU,SAELD,OAAc,wBACnBC,MAAU,SAELD,OAAc,yBACnBC,MAAU,SAELD,OAAc,0BACnBC,MAAU,SAELD,OAAc,0BACnBC,MAAU,SAGV3H,EAAS,IAAI,MAAM,oCAAoC,CAAC,IAGhEA,EAAS2H,KAASJ,GAAeF,EAAM,CAAC;UAChD,WACaK,OAAc,iBAAiB;AAEpC,gBAAIE,KAAa,IAAI;AACrBA,YAAAA,GAAW,SAAS,WAAY;AAG5B,kBAAIC,KAAM,yBAAgDlO,GAAM,OAAO,MAAM4N,GAAe,KAAK,MAAM;AACvGvH,gBAAS,kBAA+D6H,EAAG;YACvF,GACQD,GAAW,kBAAkBjO,EAAK;UAC1C,MAEQ,KAAI;AACAqG,cAAS,KAAK,UAAUrG,EAAK,CAAC;UAC1C,SACemB,IAAP;AACI,oBAAQ,MAAM,+CAAgDnB,EAAK,GACnEqG,EAAS,MAAMlF,EAAC;UAC5B;QAEA;AAYA,iBAASgN,GAAYnO,IAAO;AAIxB,cAAIA,GAAM,UAAU,GAAGoM,EAAwB,MAAM,YACjD,QAAO,KAAK,MAAMpM,EAAK;AAK3B,cAAImN,IAAmBnN,GAAM,UAAUgN,EAA6B,GAChEoB,KAAOpO,GAAM,UAAUoM,IAA0BY,EAA6B,GAC9EqB;AAGJ,cAAID,OAAS,UAA0BlC,GAAuB,KAAKiB,CAAgB,GAAG;AAClF,gBAAImB,KAAUnB,EAAiB,MAAMjB,EAAsB;AAC3DmC,YAAAA,KAAWC,GAAQ,CAAA,GACnBnB,IAAmBA,EAAiB,UAAUmB,GAAQ,CAAA,EAAG,MAAM;UACvE;AACI,cAAIZ,KAASR,GAAeC,CAAgB;AAG5C,kBAAQiB,IAAAA;YAAAA,KACC;AACD,qBAAOV;YAAAA,KACN;AACD,qBAAO5H,GAAW,CAAC4H,EAAM,GAAG,EAAE,MAAMW,GAAQ,CAAE;YAAA,KAC7C;AACD,qBAAO,IAAI,UAAUX,EAAM;YAAA,KAC1B;AACD,qBAAO,IAAI,WAAWA,EAAM;YAAA,KAC3B;AACD,qBAAO,IAAI,kBAAkBA,EAAM;YAAA,KAClC;AACD,qBAAO,IAAI,WAAWA,EAAM;YAAA,KAC3B;AACD,qBAAO,IAAI,YAAYA,EAAM;YAAA,KAC5B;AACD,qBAAO,IAAI,WAAWA,EAAM;YAAA,KAC3B;AACD,qBAAO,IAAI,YAAYA,EAAM;YAAA,KAC5B;AACD,qBAAO,IAAI,aAAaA,EAAM;YAAA,KAC7B;AACD,qBAAO,IAAI,aAAaA,EAAM;YAAA;AAE9B,oBAAM,IAAI,MAAM,kBAAkBU,EAAI;UAAA;QAElD;AAEA,iBAAS6G,GAAM9Q,IAAK;AAChB,cAAI+Q,GAAKC;AACT,cAAIhR,OAAQ,QAAQ,OAAQA,MAAS,YAAY,mBAAmBA,GAChE,QAAOA;AAEX,cAAIiR,KAAOjR,cAAe,OAAO,IAAI,KAAKA,EAAG,IAAKA,GAAI,YAAW;AACjE,cAAI;AACA,qBAASkR,KAAKC,GAAS,OAAO,KAAKnR,EAAG,CAAC,GAAGoR,KAAKF,GAAG,KAAI,GAAI,CAACE,GAAG,MAAMA,KAAKF,GAAG,KAAI,GAAI;AAChF,kBAAI5O,KAAM8O,GAAG;AACT,qBAAO,UAAU,eAAe,KAAKpR,IAAKsC,EAAG,MAC7CtC,GAAI,gBAAmB,MACvBiR,GAAK3O,EAAAA,IAAOwO,GAAM9Q,GAAIsC,EAAAA,CAAI,GAC1B,OAAOtC,GAAI;YAE3B;UACA,SACWqR,IAAP;AAAgBN,gBAAM,EAAE,OAAOM,GAAK;UAAG,UAAA;AAEnC,gBAAI;AACID,cAAAA,MAAM,CAACA,GAAG,SAASJ,KAAKE,GAAG,WAASF,GAAG,KAAKE,EAAE;YAC9D,UAAA;AACkB,kBAAIH,EAAK,OAAMA,EAAI;YAAM;UAC3C;AACI,iBAAOE;QACX;AAEA,iBAASK,GAAavL,IAASqG,GAAe;AAC1C,kBAAQrG,GAAQ,QAAQqG,EAAc,QAAQ,OAAOrG,GAAQ,aAAaqG,EAAc,aAAa;QACzG;AAEA,iBAASnK,GAAgB5C,IAAS6C,GAAU;AACpCA,eACA7C,GAAQ,KAAK,SAAUM,IAAQ;AAC3BuC,cAAS,MAAMvC,EAAM;UACjC,GAAW,SAAUI,IAAO;AAChBmC,cAASnC,EAAK;UAC1B,CAAS;QAET;AAEA,iBAASwC,IAAc;AAEnB,mBADIiM,KAAQ,CAAA,GACHe,IAAK,GAAGA,IAAK,UAAU,QAAQA,IACpCf,CAAAA,GAAMe,CAAAA,IAAM,UAAUA,CAAAA;AAE1B,cAAI,UAAU,UAAU,OAAO,UAAU,UAAU,SAAS,CAAA,KAAO,WAC/D,QAAO,UAAU,UAAU,SAAS,CAAA;QAE5C;AAGA,iBAASgC,GAAmBxL,IAAS7D,GAAU;AAC3C,cAAIsP,KAAQ;AAGZ,cAFAtP,IAAWK,EAAY,MAAM,MAAM,SAAS,GAC5CwD,KAAW,OAAOA,MAAY,cAAcA,MAAY,CAAA,GACpD,CAACA,GAAQ,MAAM;AACf,gBAAIoB,KAAgB,KAAK,OAAM;AAC/BpB,YAAAA,GAAQ,OAAOA,GAAQ,QAAQoB,GAAc,MAC7CpB,GAAQ,YAAYA,GAAQ,aAAaoB,GAAc;UAC/D;AACI,cAAI9H;AACJ,iBAAK0G,GAAQ,OAIT1G,KAAU,IAAI,QAAQ,SAAUiB,IAAS;AAChCyF,YAAAA,GAAQ,YAITzF,GAAQgR,GAAavL,IAASyL,GAAM,cAAc,CAAC,IAHnDlR,GAAQyF,GAAQ,OAAO,GAAG;UAK1C,CAAS,IAVD1G,KAAU,QAAQ,OAAO,mBAAmB,GAYzC,EAAE,SAASA,IAAS,UAAU6C,EAAQ;QACjD;AAEA,iBAASuP,GAAanP,IAAK;AAEvB,iBAAI,OAAOA,MAAQ,aACf,QAAQ,KAAKA,KAAM,yCAAyC,GAC5DA,KAAM,OAAOA,EAAG,IAEbA;QACX;AAEA,YAAIoP,KAAa,EACb,gBAAgBjI,IAChB,aAAaO,IACb,WAAWL,IACX,gBAAgBZ,GACpB,GC5VM4I,KAAqC,CAAA,GAG3CC,MAAA,WAAA;AAIE,mBAAAA,GAAqCC,GAAU;AAAV,iBAAA,KAAAA,GAF7B,KAAA,OAA6B,CAAA;UAAA;AAKvB,iBAAAD,GAAA,UAAd,SAAsBC,GAAU;AAC9B,mBAAKF,GAAOE,CAAAA,MACVF,GAAOE,CAAAA,IAAM,IAAID,GAAMC,CAAE,IAGpBF,GAAOE,CAAAA;UAAAA,GAGTD,GAAA,UAAA,QAAP,WAAA;AACE,iBAAK,OAAO,CAAA;UAAA,GAGPA,GAAA,UAAA,OAAP,WAAA;AACE,iBAAK,MAAK,GACV,OAAOD,GAAO,KAAK,EAAA;UAAA,GAGdC,GAAA,UAAA,MAAP,SAAWtP,GAAW;AACpB,mBAAO,KAAK,KAAKA,CAAAA;UAAAA,GAGZsP,GAAA,UAAA,MAAP,SAAWE,GAAW;AACpB,mBAAO,KAAK,KAAI,EAAGA,CAAAA;UAAAA,GAGdF,GAAA,UAAA,OAAP,WAAA;AACE,mBAAO,OAAO,KAAK,KAAK,IAAI;UAAA,GAGvBA,GAAA,UAAA,KAAP,SAAUzL,GAAS;AACjB,mBAAO,KAAK,KAAKA,CAAAA;UAAAA,GAGZyL,GAAA,UAAA,MAAP,SAAWzL,GAAW0K,IAAM;AAC1B,iBAAK,KAAK1K,CAAAA,IAAK0K;UAAA,GAEnBe;QAAA,EAAC;AAAA,iBC3Ce9L,IAAwBC,IAA4B;AAClE,cAAMgM,IAAOhM,KAAU+K,GAAM/K,EAAO,IAAI,CAAA,GAClC8L,KAAKP,GAAaS,GAAM,KAAK,cAAc,GAC3CzL,KAAQsL,IAAM,QAAQC,EAAE;AAE9B,iBAAA,KAAK,UAAUE,GACf,KAAK,QAAQ,aAAaL,IAC1B,KAAK,QAAQ,YAAYG,IACzB,KAAK,QAAQ,SAASvL,IAEf,QAAQ,QAAO;QACxB;AAAA,iBCXgBS,GAAiB7E,IAA6B;AAA9D,cAAAsP,IAAA,MACQnS,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AACxBmS,cAAK,QAAQ,OAAQ,MAAK;UAAA,CACnC;AAED,iBAAAvP,GAAgB5C,IAAS6C,EAAQ,GAE1B7C;QACT;AAAA,iBCRgB6H,GAAwB8K,IAAeC,GAAS;AACxD,cAAAjB,KAAAO,GAAA,MAAA,MAAA,SAAA,GAAClS,KAAA2R,GAAA,SAAS9O,KAAA8O,GAAA,UAEVkB,KAA+B7S,GAAS,KAAW,SAAAgN,IAAS;AAChEuF,YAAAA,IAAM,QAAQvF,EAAS,EAAE,KAAI;UAAA,CAC9B;AAED,iBAAApK,GAAgBiQ,IAAYhQ,EAAQ,GAE7B7C;QACT;AAAA,iBCVgB+G,GAAmB+L,IAAcjQ,GAAc;AAA/D,cAAAsP,KAAA;AACEW,UAAAA,KAAOV,GAAaU,EAAI;AAExB,cAAM9S,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AAChC,gBAAMM,KAAiB6R,GAAK,QAAQ,OAAQ,IAAIW,EAAI;AAGpD,mBAAOxS,MAAU,OAAO,OAAO6R,GAAK,QAAQ,WAAW,YAAY7R,EAAM;UAAA,CAC1E;AAED,iBAAAsC,GAAgB5C,IAAS6C,CAAQ,GAE1B7C;QACT;AAAA,iBCbgBmH,GAAmBC,IAAevE,GAAc;AAAhE,cAAAsP,KAAA,MACQnS,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AAIhC,qBAHMiH,KAAgBkL,GAAK,QAAQ,QAC7BvK,KAAOX,GAAM,KAAI,GAEd7I,KAAI,GAAGA,KAAIwJ,GAAK,QAAQxJ,MAAK;AACpC,kBAAI5B,KAAQyK,GAAM,IAAIW,GAAKxJ,EAAAA,CAAE;AAY7B,kBANI5B,OACFA,KAAQ2V,GAAK,QAAQ,WAAW,YAAY3V,EAAK,IAGnDA,KAAQ4K,GAAS5K,IAAOoL,GAAKxJ,EAAAA,GAAIA,KAAI,CAAC,GAElC5B,OAAU,OACZ,QAAOA;YAAAA;UAAAA,CAGZ;AAED,iBAAAoG,GAAgB5C,IAAS6C,CAAQ,GAE1B7C;QACT;AAAA,iBC3BgBiD,GAAewP,IAAa5P,GAAc;AAA1D,cAAAsP,KAAA,MACQnS,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AAChC,gBAAIM;AACJ,gBAAI;AACFA,cAAAA,KAAiB6R,GAAK,QAAQ,OAAQ,IAAIM,EAAG,GAEzCnS,OAAW,WACbA,KAAS;YAAA,QAEX;AACAA,cAAAA,KAAS;YAAA;AAGX,mBAAOA;UAAAA,CACR;AAED,iBAAAsC,GAAgB5C,IAAS6C,CAAQ,GAE1B7C;QACT;AAAA,iBCnBgB4H,GAAgB/E,IAAc;AAA9C,cAAAsP,IAAA,MACQnS,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AAChC,mBAAemS,EAAK,QAAQ,OAAQ,KAAI;UAAA,CACzC;AAED,iBAAAvP,GAAgB5C,IAAS6C,EAAQ,GAE1B7C;QACT;AAAA,iBCTgB2D,EAAkBd,IAAc;AAC9C,cAAM7C,IAAU,KAAK,KAAI,EAAG,KAAK,SAAC+S,IAAY;AAAK,mBAAAA,GAAM;UAAM,CAAA;AAE/D,iBAAAnQ,GAAgB5C,GAAS6C,EAAQ,GAE1B7C;QACT;AAAA,iBCLgByH,EAAsBqL,IAAcjQ,GAAc;AAAlE,cAAAsP,KAAA;AACEW,UAAAA,KAAOV,GAAaU,EAAI;AAExB,cAAM9S,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AACxBmS,YAAAA,GAAK,QAAQ,OAAQ,GAAGW,EAAI;UAAA,CACrC;AAED,iBAAAlQ,GAAgB5C,IAAS6C,CAAQ,GAE1B7C;QACT;AAAA,iBCVgBuH,IAAmBuL,IAActW,GAAYqG,IAAc;AAA3E,cAAAsP,KAAA;AACEW,UAAAA,KAAOV,GAAaU,EAAI;AAExB,cAAM9S,KAAU,KAAK,MAAK,EAAG,KAAK,WAAA;AAC5BxD,kBAAU,WACZA,IAAQ;AAIV,gBAAMqP,KAAgBrP;AAEtB,mBAAO,IAAI,QAAa,SAACyE,IAASC,IAAM;AACtCiR,cAAAA,GAAK,QAAQ,WAAW,UAAU3V,GAAO,SAACwW,KAAgBtS,IAAY;AACpE,oBAAIA,GACFQ,CAAAA,GAAOR,EAAK;oBAEZ,KAAI;AACMyR,kBAAAA,GAAK,QAAQ,OAAQ,IAAIW,IAAME,GAAM,GAC7C/R,GAAQ4K,EAAa;gBAAA,SACdlO,KAAP;AACAuD,kBAAAA,GAAOvD,GAAC;gBAAA;cAAA,CAGb;YAAA,CACF;UAAA,CACF;AAED,iBAAAiF,GAAgB5C,IAAS6C,EAAQ,GAE1B7C;QACT;AAAA,YCjCaiT,MAAW;AAAA,QAAA7B,GAAA,WAAA8B,KAAA9B,GAAA,UAAAC,IAAAD,GAAA,eAAA+B,KAAA/B,GAAA,QAAAgC,IAAAhC,GAAA,eAAAiC,IAAAjC,GAAA,UAAAkC,IAAAlC,GAAA,UAAAmC,IAAAnC,GAAA,MAAAoC,IAAApC,GAAA,OAAAvK,IAAAuK,GAAA,SAAA,GAAAA,GAAA,aAAA,GAAAA,GAAA,UAAAqC,KAAA,OAAA,eAAArC,IAAA,cAAA,EAAA,OAAA,KAAA,CAAA;MAAA,CAAA;IAAA,CAAA;ACIxB,IAAApU,KAAwB0W,IAAAC,IAAA,CAAA;AAAxB,IACA1W,MAA8ByW,IAAA3W,IAAA,CAAA;ACI9B,IAAMN,MAA8C,EAClD,SAAS,SACT,YAAY,UACZ,UAAU,SACV,KAAK,KACL,OAAO,KACP,OAAO,QACP,QAAQ,QACR,cAAc,KACd,QAAQ,QACR,QAAQ,aACV;AA4BO,IAAMS,MAAN,cAA+B0W,GAAe;MAA9C,cAAA;AAAA,cAAA,GAAA,SAAA;AAEL,aAAQ,gBAAqB;MAAA;MAMnB,OAAO;AACd,aAAa,OAAO,SACrB,KAAK,SAAS,IAAI,QAAS3S,CAAAA,OAAY;AACrC,cAAM4S,KAAS,MAAM;AACnB,gBAAKnX,IAAyB,mBAAmB,KAAK,UAAU,CAAC,EAW/DoX,IAA6B,EAAE,IAAI;iBAX+B;AAClE,kBAAMjX,KAAS,SAAS,cAAc,QAAQ;AAC9CA,cAAAA,GAAO,UAAU,IAAI,cAAc,GACnCA,GAAO,QAAQ,mBAAmBkX,GAAU,KAAK,QAAQ,EAAE,MAC3DlX,GAAO,QAAQ,gBACfA,GAAO,MAAMkX,GAAU,gBAAgB,mBAAmB,KAAK,UAAU,CAAA,IAAK,KAAK,QAAQ,EAAE,MAC7FlX,GAAO,QAAQ,mCACfR,IAAmBQ,EAAM,GACzB,SAAS,KAAK,YAAYA,EAAM,GAChCoE,GAAQpE,EAAM;YAChB;UAGF;AAGI,WAAC,UAAU,eAAe,UAAU,EAAE,SAAS,SAAS,UAAU,IACpEgX,GAAO,IAGP,OAAO,iBAAiB,QAAQA,IAAQ,KAAK;QAEjD,CAAC,GAED,OAAO,iBAAiB,WAAYG,CAAAA,OAAwB;AApFhE,cAAArC;AAqFM,cAAIqC,GAAM,WAAW,KAAK,YACpBA,GAAM,QAAQA,GAAM,KAAK,WAAW,KAAK,gBAAgB,MAAM;AAIjEA,YAAAA,GAAM,KAAK,YAAWrC,KAAAqC,GAAM,KAAK,aAAX,OAAArC,KAAuB,CAAC;AAC9C,qBAAWsC,MAAW,KAAK,gBAAgB,OAAO,EAChDA,CAAAA,GAAQD,EAAK;UAEjB;QAEJ,CAAC;MACH;MAEgB,cAAc;AAAA,eAAAE,IAAA,MAAA,MAAA,aAAA;AAC5B,cAAMrX,KAAS,MAAM,KAAK;AAC1BA,UAAAA,GAAO,MAAM,aAAa,WAC1B,KAAK,gBAAgB,SAAS,eAC9BA,GAAO,MAAM;QACf,CAAA;MAAA;MAEgB,cAAc;AAAA,eAAAqX,IAAA,MAAA,MAAA,aAAA;AA1GhC,cAAAvC;AA2GI,cAAM9U,KAAS,MAAM,KAAK;AAC1BA,UAAAA,GAAO,MAAM,aAAa,WACtB8U,KAAA,KAAK,kBAAL,QAAAA,GAAoB,SAAO,KAAK,cAAc,MAAM,GACxD,KAAK,gBAAgB;QACvB,CAAA;MAAA;MAEgB,MAAMwC,IAAW;AAAA,eAAAD,IAAA,MAAA,MAAA,aAAA;AAC/B,cAAMrX,KAAS,MAAM,KAAK;AAC1B,cAAIA,MAAUA,GAAO,cACnBA,CAAAA,GAAO,cAAc,YAAYsX,IAAM,KAAK,QAAQ;cAEpD,OAAMC,GAAyB;QAEnC,CAAA;MAAA;IACF;AD/GO,IAAMjX,KAAQkX,GAAUC,IAAS,EACtC,UAAU,OACV,SAAS,aACT,SAAS,UACT,iBAAiB,4BACjB,gBAAgBpX,KAChB,kBAAkB,MAAYgX,IAAA,QAAA,MAAA,aAAA;AAC5B,UAAMK,KAAK,GAAAC,QAAY,eAAe,EACpC,MAAM,2BACN,WAAW,wBACb,CAAC;AAED,aAAA,MAAMD,GAAG,aAAatX,GAAY,GAClC,MAAMsX,GAAG,UAAU,CAAC,GAAAC,QAAY,WAAW,GAAAA,QAAY,cAA2BC,IAAA,OAAO,CAAC,GAEnFF;IACT,CAAA,EACF,CAAC;;;;;;;;;OExBYG;;;;AAHb,IAAAC;;;;;;;;;;;;;;;;;AAGO,IAAMD,IAAN,cAAgCE,EAAU,SAAuB;MAItE,YAAmBC,GAAgC;AACjD,cAAM;AADW,aAAA,iBAAAA;AAHnB,aAAA,OAAO;AACP,aAAA,SAAc,CAAC;AAKb,aAAK,SAAS,EACZ,QAAQA,EAAe,QACvB,WAAW,QACb;MACF;MAEa,gBAAgBC,GAAU;AAAA,eAAAC,EAAA,MAAA,MAAA,aAAA;AACrC,iBAAO,KAAK,QAAQ,KAAK,MAAM,4BAAA,yBAA2ED,CAAG,CAAC;QAChH,CAAA;MAAA;MAEa,QAAQA,GAAU;AAAA,eAAAC,EAAA,MAAA,MAAA,aAAA;AAC7B,iBAAO,KAAK,QAAQ,KAAK,MAAM,4BAAA,iBAAmED,CAAG,CAAC;QACxG,CAAA;MAAA;MAEa,YAAY;AAAA,eAAAC,EAAA,MAAA,MAAA,aAAA;AACvB,iBAAO,KAAK,QAAQ,KAAK,MAAM,4BAAA,mBAAqE,CAAC,CAAC,CAAC;QACzG,CAAA;MAAA;MAEa,qBAAqBC,GAAa;AAAA,eAAAD,EAAA,MAAA,MAAA,aAAA;AAC7C,iBAAO,KAAK,QACV,KAAK,MAAM,4BAAA,8BAAgFC,CAAI,CACjG;QACF,CAAA;MAAA;MAEa,uBAAuBA,GAAW;AAAA,eAAAD,EAAA,MAAA,MAAA,aAAA;AAC7C,iBAAO,KAAK,QACV,KAAK,MAAM,4BAAA,gCAAkFC,CAAI,CACnG;QACF,CAAA;MAAA;IACF;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAAsB;AACtB,IAAAC,mBAAoB;;;ACCb,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,cAAW;AALD,SAAAA;AAAA,GAAA;AAQL,SAAS,iBAAiB,WAAwC;AACvE,SAAO,OAAO,OAAO,SAAS,EAAE,SAAS,SAAS;AACpD;AA0BO,SAAS,mBAAmB,QAAmD;AACpF,QAAM,cAAc,OAAO,OAAO,SAAS;AAC3C,SAAO,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,QAAQ,YAAY,SAAS,GAAG,CAAC;AACpE;AAIO,IAAM,gBAAgB;AAAA,EAC3B,CAAC,uBAAiB,GAAG;AAAA,EACrB,CAAC,uBAAiB,GAAG;AAAA,EACrB,CAAC,uBAAiB,GAAG;AAAA,EACrB,CAAC,iBAAc,GAAG;AACpB;AAEO,SAAS,6BAA+C;AAC7D,QAAM,iBAA8B;AAAA,IAClC,OAAO,IAAI,OAAO,EAAE;AAAA,IACpB,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,EACZ;AAEA,SAAO,OAAO,OAAO,SAAS,EAAE,OAAO,CAAC,WAAW,UAAU;AAC3D,UAAM,UAAU;AAChB,UAAM,aAAa,YAAY;AAE/B,cAAU,OAAO,IAAI,aACjB,iBACA;AAAA,MACE,OAAO;AAAA,MACP,YAAY,cAAc,OAAO;AAAA,MACjC,MAAM;AAAA,MACN,SAAS,CAAC;AAAA,IACZ;AAEJ,WAAO;AAAA,EACT,GAAG,CAAC,CAAqB;AAC3B;AAEO,IAAM,cAAkD;AAAA,EAC7D,CAAC,uBAAiB,GAAG;AAAA,EACrB,CAAC,uBAAiB,GAAG;AAAA,EACrB,CAAC,uBAAiB,GAAG;AACvB;;;ACjFO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,QAAQ,KAA4B;AACzC,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AACA,WAAO,aAAa,QAAQ,GAAG;AAAA,EACjC;AAAA,EAEA,OAAO,QAAQ,KAAa,OAAqB;AAC/C,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AACA,iBAAa,QAAQ,KAAK,KAAK;AAAA,EACjC;AACF;;;ACdA,IAAAC,mBAAoB;;;ACWb,IAAe,aAAf,MAA0B;AAAA,EACtB;AAAA,EACA;AAAA,EAEC;AAAA,EACA;AAAA,EAEH;AAAA,EAEG,YAAY;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAgC;AAC9B,SAAK,KAAK;AACV,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,iBAAiB;AAEtB,UAAM,OAAO,KAAK;AAClB,SAAK,WAAW,EAAE,GAAG,KAAK,iBAAiB,GAAG,SAAS;AAAA,EACzD;AAAA,EAEA,OAAO,kBAAkC,EAAE,MAAM,eAAe,MAAM,GAAG;AAAA,EAQlE,YAAY,MAAY;AAC7B,YAAQ,KAAK,+BAA+B,KAAK,EAAE,EAAE;AACrD,oBAAgB,KAAK,OAAO,EAAE,UAAU,KAAK,GAAG,CAAC;AAAA,EACnD;AAAA,EAEO,mBAAmB,CAAC,YAA0B;AACnD,YAAQ,KAAK,gCAAgC,OAAO,EAAE;AACtD,qBAAiB,KAAK,OAAO;AAAA,MAC3B,UAAU,KAAK;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EAOO,oBAAoB,OACzB,UACA,kBAC0B;AAC1B,UAAM,iBAAiB,MAAM,KAAK,iBAAiB,UAAU,aAAa;AAE1E,UAAM,aAAa,eAAe,OAAqB,CAAC,KAAK,UAAU;AACrE,UAAI,UAAU,MAAM;AAClB,YAAI,KAAK,KAAK;AAAA,MAChB;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAEL,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,IAAW,OAAe;AACxB,WAAO,KAAK,GAAG,YAAY;AAAA,EAC7B;AAAA,EAEA,IAAW,WAA4B;AACrC,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AACzC,WAAO,cAAc,YAAY,WAAW,CAAC;AAAA,EAC/C;AAAA,EAEA,IAAW,YAAsB;AAC/B,WAAO,KAAK,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO;AAAA,EACvD;AAAA,EAEA,IAAW,gBAAsC;AAC/C,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AACzC,WAAO,cAAc,YAAY,gBAAgB;AAAA,EACnD;AAAA,EAEA,IAAW,gBAA+B;AACxC,WAAO,KAAK,eAAe,WAAW;AAAA,EACxC;AAAA,EAEA,IAAW,gBAA2B;AACpC,UAAM,QAAQ,KAAK,MAAM;AACzB,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,IAAW,cAAuB;AAChC,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AACzC,WAAO,cAAc,YAAY,SAAS,SAAS,IAAI;AAAA,EACzD;AAAA,EAEA,IAAW,WAAoB;AAC7B,UAAM,QAAQ,KAAK,MAAM;AACzB,WAAO,MAAM,iBAAiB,KAAK;AAAA,EACrC;AAAA;AAAA,EAIU,eAAqB;AAC7B,iBAAa,KAAK,OAAO,EAAE,UAAU,KAAK,GAAG,CAAC;AAAA,EAChD;AACF;;;AC3GO,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,SAAM;AACN,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,mBAAgB;AAXN,SAAAA;AAAA,GAAA;AAqLL,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC;AAAA,EACA;AAAA,EAEA,YAAY,SAAiB,MAAc,MAAY;AACrD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;;;ACjNA,qBAAoB;AAmBpB,IAAM,OAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAM9C,CAAC;AAEK,IAAM,cAAN,cAA0B,WAAW;AAAA,EAClC,SAAoC;AAAA,EACpC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAsC;AACpC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EAEA,MAAc,mBAAgD;AAC5D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAMC,UAAS,MAAM,OAAO,2BAA2B;AACvD,UAAM,qBAAqBA,QAAO,UAC9BA,QAAO,QAAQ,qBACfA,QAAO;AAEX,UAAM,SAAS,IAAI,mBAAmB,KAAK,OAAO;AAClD,WAAO,WAAW,GAAG,cAAc,KAAK,YAAY;AACpD,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,WAAW,MAAM,OAAO,QAAQ;AAEtC,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,SAAK,aAAa;AAClB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,OAAO,WAAW;AACxB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAE1D,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,WAAW,MAAM,OAAO,iBAAiB;AAE/C,UAAI,SAAS,WAAW,GAAG;AACzB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,QACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,QAC9C;AAAA,MACF,EAAE;AAEF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,kDAAkD;AAAA,UACnF,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,eAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,eAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,eAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,eAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,eAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,aAAkC,CAAC;AAGvC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAEA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,UAAM,aAAa,MAAM,OAAO,gBAAgB,CAAC,UAAU,CAAC;AAG5D,UAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,UAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,YAAI,KAAK,IAAI;AAAA,MACf,OAAO;AACL,cAAM,YAAY,WAAW,MAAM;AACnC,YAAI,WAAW;AACb,cAAI,KAAK,SAAS;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAEL,WAAO;AAAA,EACT;AACF;;;ACxOA,IAAAC,kBAAoB;AAqDpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAyB9C,CAAC;AAEK,IAAM,eAAN,cAA2B,WAAW;AAAA,EACnC,SAAwB;AAAA,EACxB;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAuC;AACrC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAoC;AAChD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,QAAI,OAAO,WAAW,eAAgB,OAA0B,aAAa,QAAW;AACtF,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,SAAU,OAA0B;AAC1C,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO,OAAO,KAAK,OAAO;AAErD,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,aAAa;AAClB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAC1D,YAAM,SAAS,MAAM,KAAK,iBAAiB;AAE3C,UAAI,CAAC,OAAO,aAAa;AACvB,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC5C;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,aAAkC,CAAC;AAGvC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAEA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,UAAM,iBAAiB,MAAM,OAAO,SAAS,UAAU;AAGvD,UAAM,SAAS,eAAe,IAAI,CAAC,UAAU;AAC3C,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AACA,aAAO,kBAAkB,KAAK;AAAA,IAChC,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;AClQA,IAAAC,kBAAoB;AAeb,SAAS,yBAAyB,OAAyD;AAChG,SAAO,OAAO,UAAU,YAAY,UAAU,SAAS,aAAa;AACtE;AAEO,IAAM,8BAA8B;AAEpC,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMrD,CAAC;AAEK,IAAM,gBAAN,MAAM,uBAAsB,WAAW;AAAA,EACrC,eAAsD;AAAA,EACnD,oBAAqD;AAAA,EACrD;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAwC;AACtC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AAExD,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAc,WAAsD;AAClE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,KAAK,qBAAsB,MAAM,KAAK,6BAA6B;AACvE,UAAM,eAAe,KAAK,gBAAiB,MAAM,KAAK,wBAAwB;AAC9E,UAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,WAAO,IAAI,QAA0C,CAAC,SAAS,WAAW;AACxE,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AAEtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,qBAAqB;AACxB,YAAM,aAAa,aAAa,UAAU,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEvE,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAGD,mBAAa,QAAQ;AAAA,QACnB;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAc,UAAoD;AAChE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,KAAK,qBAAsB,MAAM,KAAK,6BAA6B;AACvE,UAAM,eAAe,KAAK,gBAAiB,MAAM,KAAK,wBAAwB;AAC9E,UAAM,cAAc,MAAM,KAAK,gBAAgB;AAE/C,WAAO,IAAI,QAAyC,CAAC,SAAS,WAAW;AACvE,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AAEtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,uBAAuB;AAC1B,YAAM,aAAa,aAAa,SAAS,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEtE,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAGD,mBAAa,OAAO;AAAA,QAClB;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,kBAAmC;AAC/C,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,UAAU,MAAM,YAAY,cAAc,EAAE,GAAG;AAErD,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,MAAc,0BAAmE;AAC/E,UAAM,gBAAgB;AACtB,UAAM,oBAAoB,KAAK,qBAAsB,MAAM,KAAK,6BAA6B;AAE7F,QAAI,CAAC,KAAK,cAAc;AACtB,cAAQ,KAAK,IAAI,eAAc,IAAI,KAAK,aAAa,8BAA8B;AAEnF,WAAK,eAAe,kBAAkB,aAAa,KAAK;AAAA,IAC1D;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,+BAAkE;AAC9E,UAAM,gBAAgB;AAEtB,QAAI,CAAC,KAAK,mBAAmB;AAC3B,cAAQ;AAAA,QACN,IAAI,eAAc,IAAI,KAAK,aAAa;AAAA,MAC1C;AAEA,WAAK,oBAAoB,MAAM,OAAO,gCAAgC;AAEtE,UAAI,CAAC,KAAK,mBAAmB;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,0CACN,UACiB;AACjB,WAAO,SAAS,IAAI,CAAC,EAAE,SAAS,KAAK,GAAG,SAAS;AAAA,MAC/C,MAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,aAAa,MAAM,CAAC;AAAA,MACxD;AAAA,IACF,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAc,kBACZ,MACoD;AACpD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,KAAK,qBAAsB,MAAM,KAAK,6BAA6B;AACvE,UAAM,eAAe,KAAK,gBAAiB,MAAM,KAAK,wBAAwB;AAE9E,WAAO,IAAI,QAAmD,CAAC,SAAS,WAAW;AACjF,YAAM,UAAU,OAAO,WAAW,MAAM;AAEtC,qBAAa,eAAe,UAAU;AAEtC;AAAA,UACE,IAAI,2BAA2B;AAAA,YAC7B,QAAQ,kBAAkB;AAAA,YAC1B,SAAS,8BAA8B,KAAK,SAAS,IAAI;AAAA,YACzD,YAAY;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF,GAAG,uBAAuB;AAC1B,YAAM,aAAa,aAAa,mBAAmB,CAAC,EAAE,OAAO,QAAQ,OAAO,MAAM;AAEhF,qBAAa,eAAe,UAAU;AAGtC,eAAO,aAAa,OAAO;AAE3B,YAAI,OAAO;AACT,iBAAO,OAAO,KAAK;AAAA,QACrB;AAEA,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,YACL,IAAI,oBAAoB;AAAA,cACtB,SAAS,2BAA2B,MAAM,8CAA8C,KAAK,SAAS,IAAI;AAAA,cAC1G,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,QAAQ,MAAM;AAAA,MACvB,CAAC;AAGD,mBAAa,iBAAiB;AAAA,QAC5B;AAAA,QACA,YAAY;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UAAoC;AAC/C,QAAI;AAEJ,QAAI;AACF,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAEpD,eAAS,MAAM,KAAK,QAAQ;AAE5B,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI,wCAAwC,OAAO,SAAS;AAAA,MAChF;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI,0BACnB,yBAAyB,KAAK,IAC3B,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MACrC,MAAM;AAAA,MACd;AACA,YAAM;AAAA,IACR;AAEA,UAAM,iBAAiB,KAAK,0CAA0C,OAAO,QAAQ;AAErF,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV,eAAe,eAAe,CAAC;AAAA,IACjC;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,aAA4B;AACvC,QAAI;AACF,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,WAAK,aAAa;AAElB,YAAM,SAAS,MAAM,KAAK,SAAS;AAEnC,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI,8BAA8B,OAAO,cAAc,OAAO,WAAW,SAAS,cAAc,OAAO,WAAW,KAAK,GAAG,CAAC,MAAM,EAAE,gBAAgB,OAAO,SAAS;AAAA,MACvL;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI,6BACnB,yBAAyB,KAAK,IAC3B,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MACrC,MAAM;AAAA,MACd;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,gBAA+B;AAC1C,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AACzC,QAAI;AAEJ,QAAI,CAAC,aAAa;AAChB;AAAA,IACF;AAEA,QAAI;AACF,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAE1D,eAAS,MAAM,KAAK,QAAQ;AAE5B,UAAI,OAAO,SAAS,WAAW,GAAG;AAChC,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,KAAK,0CAA0C,OAAO,QAAQ;AACrF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,kDAAkD;AAAA,UACnF,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AAED,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI,gCACnB,yBAAyB,KAAK,IAC3B,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MACrC,MAAM;AAAA,MACd;AACA,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACyC;AACzC,UAAM,aAAsD,CAAC;AAE7D,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACyC;AACzC,UAAM,aAAsD,CAAC;AAE7D,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,UAAI,aAAsD,CAAC;AAG3D,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAGA,YAAM,iBAAiB,MAAM,KAAK,kBAAkB,UAAU;AAG9D,YAAM,SAAS,eAAe,MAAM,IAAI,CAAC,UAAU;AACjD,YAAI,UAAU,MAAM;AAClB,iBAAO;AAAA,QACT;AACA,eAAO,kBAAkB,KAAK;AAAA,MAChC,CAAC;AAED,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI,oCACnB,yBAAyB,KAAK,IAC3B,GAAG,MAAM,OAAO,WAAW,MAAM,IAAI,MACrC,MAAM;AAAA,MACd;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACpfA,IAAAC,kBAAoB;AA8CpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAS9C,CAAC;AAEK,IAAM,YAAN,cAAwB,WAAW;AAAA,EAChC,SAA6B;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,WAAmB;AAAA,EACnB,WAAmB;AAAA,EAEjB;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAoC;AAClC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AAExD,UAAM;AAAA,MACJ,QAAQ,IAAI,OAAO,EAAE;AAAA,MACrB,aAAa;AAAA,MACb,OAAO;AAAA,MACP,SAAS;AAAA,IACX,IAAI,WAAW,CAAC;AAEhB,SAAK,UAAU,EAAE,OAAO,YAAY,KAAK;AACzC,SAAK,aAAa;AAElB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAyC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAM,EAAE,OAAO,YAAY,KAAK,IAAI,KAAK;AACzC,UAAM,SAAS,IAAI,gBAAAC,QAAQ,IAAI,OAAO,YAAY,IAAI;AACtD,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,KAAK,iBAAiB;AAAA,IAC9B;AAGA,UAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,UAAM,WAAW,MAAM,KAAK,cAAc,KAAK;AAE/C,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAGD,UAAM,KAAK,aAAa,KAAK;AAE7B,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,aAAa;AAClB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAC1D,YAAM,KAAK,iBAAiB;AAAA,IAC9B,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,aAAoC,CAAC;AAGzC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAGA,UAAM,QAAQ,MAAM,KAAK,WAAW;AACpC,UAAM,WAAW,KAAK,YAAY;AAElC,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,UAAM,aAAa,MAAM,QAAQ;AAAA,MAC/B,WAAW,IAAI,CAAC,QAAQ,OAAO,gBAAgB,OAAO,UAAU,GAAG,CAAC;AAAA,IACtE;AAGA,UAAM,KAAK,aAAa,KAAK;AAE7B,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,gBAAiC;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,2BAA2B;AAC9D,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,EAAE,QAAQ,IAAyB,MAAM,OAAO,YAAY;AAClE,UAAM,SAAS,QAAQ,KAAK,CAACC,YAA4BA,QAAO,SAAS,KAAK,UAAU;AAExF,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,WAAW,KAAK,UAAU,cAAc;AAAA,IAC1D;AAEA,SAAK,WAAW,OAAO;AACvB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAc,aAA8B;AAC1C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,qBAAqB;AACxD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAM,WAAW,KAAK,YAAa,MAAM,KAAK,cAAc;AAC5D,UAAM,WAAW,KAAK,YAAY;AAElC,UAAM,EAAE,oBAAoB,IAA8B,MAAM,OAAO;AAAA,MACrE;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,aAAa,OAA8B;AACvD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,sBAAsB;AACzD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,OAAO,oBAAoB,KAAK;AAAA,EACxC;AAAA,EAEQ,cAAsB;AAC5B,QAAI,KAAK,UAAU;AACjB,aAAO,KAAK;AAAA,IACd;AACA,UAAM,WAAW,OAAO,cAAc,KAAK;AAC3C,SAAK,WAAW;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,cAAc,OAAkC;AAC5D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,wBAAwB;AAC3D,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,EAAE,UAAU,IAAsB,MAAM,OAAO,SAAS,KAAK;AACnE,WAAO;AAAA,EACT;AACF;;;ACtSA,IAAAC,kBAAoB;AAkBpB,SAAS,gBAAgB,OAAqC;AAC5D,SAAO,iBAAiB,SAAS,UAAU;AAC7C;AAEA,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA,CAI9C,CAAC;AAEK,IAAM,aAAN,cAAyB,WAAW;AAAA,EACjC,SAA6B;AAAA,EAC7B;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAqC;AACnC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,UAAU;AACtB,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAAyC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAMC,UAAS,MAAM,OAAO,cAAc;AAC1C,UAAM,cAAcA,QAAO;AAE3B,UAAM,SAAS,IAAI,YAAY,KAAK,QAAQ,QAAkB;AAC9D,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,eAAgC;AAC5C,UAAM,cAAc,KAAK,eAAe;AACxC,UAAM,UAAU,MAAM,YAAY,QAAQ,EAAE,GAAG;AAC/C,UAAM,YAAY,GAAG,QAAQ,OAAO,IAAI,QAAQ,EAAE;AAElD,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,YAAY,MAAM,KAAK,aAAa;AAC1C,UAAM,WAAW,MAAM,OAAO,QAAQ,SAAS;AAE/C,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,aAAa;AAClB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAC1D,YAAM,KAAK,iBAAiB;AAAA,IAC9B,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,YAAM,iBAAiB,MAAM,OAAO,SAAS,UAAU;AAEvD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,gBAAgB,KAAK,GAAG;AAC1B,cAAM,IAAI,cAAc,MAAM,SAAS,MAAM,IAAI;AAAA,MACnD;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACrNA,IAAAC,kBAAoB;AAqCpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA,CAI9C,CAAC;AAEK,IAAM,YAAN,cAAwB,WAAW;AAAA,EAChC,SAAiC;AAAA,EACjC;AAAA,EAEE;AAAA,EACH,WAAqC;AAAA,EAE5C,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAsC;AACpC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,QAAQ;AACpB,YAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,mCAAmC;AAAA,IAC3E;AACA,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAA6C;AACzD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAM,SAAS,MAAM,wDAAqB;AAC1C,UAAM,qBAAqB,MAAM,yDAA+B;AAChE,UAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,QAAkB;AAAA,MACtD,YAAY;AAAA,QACV,UAAU,IAAI,kBAAkB;AAAA,UAC9B,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,OAAO,SAAyD;AAC/E,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,QAAI,CAAC,MAAM,SAAS,OAAO,KAAK,UAAU,UAAU;AAClD,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAEA,UAAM,EAAE,MAAM,IAAI;AAElB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,gBAAgB,KAAK,KAAK;AAC7D,UAAM,OAAO,KAAK,mBAAmB,EAAE,MAAM,CAAC;AAE9C,UAAM,WAAW,MAAM,OAAO,KAAK,QAAQ;AAE3C,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI,CAAC,SAAS,eAAe;AAC3B,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACrC;AAEA,SAAK,WAAW;AAEhB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,sBAAsB,QAAQ;AACjE,UAAM,gBAA+B;AAAA,MACnC,MAAM,SAAS,SAAS;AAAA,MACxB,SAAS,SAAS;AAAA,IACpB;AAEA,UAAM,cAA2B;AAAA,MAC/B,UAAU,CAAC,aAAa;AAAA,MACxB,eAAe;AAAA,IACjB;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO,CAAC,aAAa;AAAA,EACvB;AAAA,EAEO,aAAa,YAA2B;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,SAAK,aAAa;AAClB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB,KAAK,UAAU,SAAS,MAAM,KAAK;AACvF,UAAM,OAAO,KAAK,OAAO;AACzB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAC1D,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,aAAa,MAAM,OAAO,KAAK,WAAW;AAEhD,UAAI,CAAC,YAAY;AACf,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,sCAAsC;AACzE,aAAK,aAAa;AAClB;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,OAAO,KAAK,QAAQ;AAE3C,UAAI,CAAC,UAAU;AACb,cAAM,OAAO,KAAK,OAAO;AACzB,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,UAAI,CAAC,SAAS,eAAe;AAC3B,cAAM,OAAO,KAAK,OAAO;AACzB,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AAEA,WAAK,WAAW;AAEhB,YAAM,gBAA+B;AAAA,QACnC,MAAM,SAAS,SAAS,GAAG,KAAK,SAAS,IAAI;AAAA,QAC7C,SAAS,SAAS;AAAA,MACpB;AAEA,YAAM,gBAAgB,YAAY,SAAS,CAAC;AAE5C,YAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,YAAM,EAAE,MAAM,YAAY,SAAS,cAAc,IAAI;AAErD,YAAM,QAAQ,SAAS,cAAc,YAAY;AAEjD,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,gDAAgD;AAAA,UACjF,MAAM;AAAA,UACN,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU,CAAC,aAAa;AAAA,QAC1B,CAAC;AAAA,MACH;AACA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AAAA,IACzD,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,aAAkC,CAAC;AAGvC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAEA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,UAAM,iBAAkB,MAAM,OAAO,SAAS;AAAA,MAC5C;AAAA,IACF;AAGA,UAAM,SAAS,eAAe,IAAI,CAAC,UAAU;AAC3C,UAAI,UAAU,QAAW;AACvB,eAAO;AAAA,MACT;AACA,aAAO,kBAAkB,KAAK;AAAA,IAChC,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;ACpSA,IAAAC,kBAAoB;AAab,IAAM,6BAA6B,GAAG,iBAAiB;AAE9D,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAK9C,CAAC;AAEK,IAAM,iBAAN,cAA6B,WAAW;AAAA,EACrC,UAAkC;AAAA,EAClC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAyC;AACvC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AAExD,UAAM,EAAE,mBAAmB,MAAM,IAAI,WAAW,CAAC;AACjD,SAAK,UAAU,EAAE,iBAAiB;AAElC,SAAK,QAAQ;AAEb,QAAI,KAAK,QAAQ,kBAAkB;AACjC,cAAQ;AAAA,QACN,IAAI,KAAK,SAAS,IAAI;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEQ,0BAAyC;AAC/C,WAAO,eAAe,QAAQ,0BAA0B;AAAA,EAC1D;AAAA,EAEQ,sBAAsB,UAAwB;AACpD,mBAAe,QAAQ,4BAA4B,QAAQ;AAAA,EAC7D;AAAA,EAEQ,eAAqB;AAC3B,QAAI;AACF,YAAM,UAAU,KAAK;AACrB,UAAI,qCAA+B;AACjC,gBAAQ;AAAA,UACN,IAAI,KAAK,SAAS,IAAI;AAAA,QACxB;AACA,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AAAA,IACF,SAAS,OAAO;AACd,WAAK,WAAW;AAChB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,oBAAqC;AAC3C,QAAI,WAAW,KAAK,wBAAwB;AAC5C,QAAI,CAAC,UAAU;AACb,iBAAW,OAAO,oCAAoC;AACtD,UAAI,CAAC,UAAU;AACb,aAAK,UAAU;AACf,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,UAAI,KAAK,QAAQ,kBAAkB;AACjC,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,mCAAmC;AACtE,aAAK,sBAAsB,QAAQ;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,UAAU,gBAAAC,QAAQ,oBAAoB,QAAQ;AACpD,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AAErD,SAAK,aAAa;AAElB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,UAAM,UAAU,KAAK,kBAAkB;AAEvC,UAAM,gBAAgB;AAAA,MACpB,MAAM,GAAG,KAAK,SAAS,IAAI;AAAA,MAC3B,SAAS,QAAQ;AAAA,IACnB;AAEA,UAAM,cAA2B;AAAA,MAC/B,UAAU,CAAC,aAAa;AAAA,MACxB,eAAe;AAAA,IACjB;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO,CAAC,aAAa;AAAA,EACvB;AAAA,EAEO,aAAa,YAA2B;AAC7C,SAAK,aAAa;AAClB,SAAK,UAAU;AACf,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAEhD,SAAK,aAAa;AAElB,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,QAAI,aAAa;AACf,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,WAAW,KAAK,QAAS;AAE5C,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACuB;AACvB,UAAM,aAAoC,CAAC;AAE3C,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,WAAW,KAAK,QAAS;AAEzD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,GAAG;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AAEnC,SAAK,aAAa;AAElB,QAAI,aAAoC,CAAC;AAGzC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAGA,UAAM,aAAa,WAAW,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAS,EAAE,CAAC;AACxE,WAAO;AAAA,EACT;AACF;;;ACrNA,IAAAC,kBAAoB;AAoBpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAU9C,CAAC;AAEK,IAAM,aAAN,cAAyB,WAAW;AAAA,EACjC,SAAmC;AAAA,EACnC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd,GAAqC;AACnC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEA,MAAc,mBAA+C;AAC3D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAMC,UAAS,MAAM,OAAO,qBAAqB;AACjD,UAAM,oBAAoBA,QAAO,UAC7BA,QAAO,QAAQ,oBACfA,QAAO;AAEX,UAAM,SAAS,IAAI,kBAAkB,KAAK,OAAO;AACjD,WAAO,WAAW,GAAG,cAAc,KAAK,YAAY;AACpD,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,WAAW,MAAM,OAAO,QAAQ;AAEtC,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,SAAK,aAAa;AAClB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,OAAO,WAAW;AACxB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAE1D,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,WAAW,MAAM,OAAO,iBAAiB;AAE/C,UAAI,SAAS,WAAW,GAAG;AACzB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,QACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,QAC9C;AAAA,MACF,EAAE;AAEF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,kDAAkD;AAAA,UACnF,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,aAAkC,CAAC;AAGvC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAEA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,UAAM,aAAa,MAAM,OAAO,gBAAgB,CAAC,UAAU,CAAC;AAG5D,UAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,UAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,YAAI,KAAK,IAAI;AAAA,MACf,OAAO;AACL,cAAM,YAAY,WAAW,MAAM;AACnC,YAAI,WAAW;AACb,cAAI,KAAK,SAAS;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAEL,WAAO;AAAA,EACT;AACF;;;AC7OA,IAAAC,kBAAoB;AAqBpB,IAAMC,QAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAU9C,CAAC;AAEK,IAAMC,cAAN,cAAyB,WAAW;AAAA,EACjC,SAAmC;AAAA,EACnC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAsC;AACpC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,WAAW;AACvB,YAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,sCAAsC;AAAA,IAC9E;AACA,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMD;AAAA,EACR;AAAA,EAEA,MAAc,mBAA+C;AAC3D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAME,UAAS,MAAM,OAAO,0BAA0B;AAEtD,UAAM,oBAAoBA,QAAO,qBAAqBA,QAAO,QAAQ;AAErE,UAAM,SAAS,IAAI,kBAAkB,KAAK,OAAO;AACjD,WAAO,QAAQ,GAAG,kBAAkB,KAAK,YAAY;AACrD,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,WAAW,MAAM,OAAO,QAAQ;AAEtC,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,gBAAgB,eAAe,CAAC;AAEtC,UAAM,cAA2B;AAAA,MAC/B,UAAU;AAAA,MACV;AAAA,IACF;AAEA,cAAU,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAED,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,WAAO;AAAA,EACT;AAAA,EAEO,aAAa,YAA2B;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,SAAK,aAAa;AAClB,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,UAAM,OAAO,WAAW;AACxB,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,EACtD;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAE1D,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,WAAW,MAAM,OAAO,iBAAiB;AAE/C,UAAI,SAAS,WAAW,GAAG;AACzB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,QACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,QAC9C;AAAA,MACF,EAAE;AAEF,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,kDAAkD;AAAA,UACnF,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,gBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,gBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,gBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,gBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,IAAI,CAAC;AAAA,MACzB,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,aAAkC,CAAC;AAGvC,QAAI,mBAAmB,QAAQ,GAAG;AAChC,YAAM,WAAkC,gBAAgB,QAAQ;AAChE,mBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,IACvD,OAAO;AACL,YAAM,WAAyB,gBAAgB,QAAwB;AACvE,mBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,IAC9D;AAEA,UAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,UAAM,aAAa,MAAM,OAAO,gBAAgB,CAAC,UAAU,CAAC;AAG5D,UAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,UAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,YAAI,KAAK,IAAI;AAAA,MACf,OAAO;AACL,cAAM,YAAY,WAAW,MAAM;AACnC,YAAI,WAAW;AACb,cAAI,KAAK,SAAS;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAEL,WAAO;AAAA,EACT;AACF;;;AChPA,IAAAC,mBAAoB;AA4Cb,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEA,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAK9C,CAAC;AAEK,IAAM,gBAAN,cAA4B,WAAW;AAAA,EACpC,SAA4B;AAAA,EAC5B;AAAA,EACA,QAAmC;AAAA,EACnC;AAAA,EACA,UAAsC;AAAA,EACtC;AAAA,EAEE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAA8C;AAC5C,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,WAAW;AACvB,YAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,sCAAsC;AAAA,IAC9E;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,MACX,UAAU;AAAA,MACV,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,iBAA2C;AAAA,MAC/C,GAAG,KAAK,kBAAkB;AAAA,MAC1B,GAAG;AAAA,IACL;AAEA,SAAK,UAAU;AAAA,MACb;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ;AAEA,SAAK,eAAe;AACpB,SAAK,SAAS,OAAO,OAAO,WAAW;AACvC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAA8C;AACpD,QAAI;AACJ,QAAI;AAEJ,UAAM,kBAAkB;AAAA,MACtB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,KAAK;AAAA,MACL,OAAO,CAAC;AAAA,IACV;AAEA,aAAS,cAAiBC,OAA6B;AACrD,UAAI;AACJ,UAAI,OAAO,WAAW,eAAe,OAAQ,OAAeA,KAAI,MAAM,aAAa;AACjF,cAAO,OAAeA,KAAI;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAEA,aAAS,qBAAwBA,OAAiB;AAChD,YAAM,MAAM,cAAiBA,KAAI;AACjC,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,GAAGA,KAAI,2BAA2B;AAAA,MACpD;AACA,aAAO;AAAA,IACT;AAEA,aAAS,qBAA+B;AACtC,aAAO,qBAA+B,UAAU;AAAA,IAClD;AAEA,aAAS,qBAA+B;AACtC,aAAO,qBAA+B,UAAU;AAAA,IAClD;AAEA,QAAI;AACF,YAAM,mBAAmB;AACzB,YAAM,mBAAmB;AAAA,IAC3B,SAAS,OAAO;AACd,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oCAAoC,KAAK;AAC5E,aAAO;AAAA,IACT;AAEA,aAAS,WAAqB;AAC5B,YAAM,QAA2C,IAAI,qBAAqB,MAAM;AAChF,YAAMC,SAAkB,CAAC;AAEzB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAwB,MAAM,CAAC;AAErC,cAAM,MAAqB,KAAK,aAAa,KAAK;AAClD,YAAI,KAAK;AACP,cAAI,IAAI,YAAY,EAAE,QAAQ,MAAM,IAAI,IAAI;AAC1C,kBAAM,OAAsB,KAAK,aAAa,MAAM;AAEpD,gBAAI,MAAM;AACR,kBACE,KAAK,YAAY,EAAE,QAAQ,QAAQ,MAAM,MACzC,KAAK,YAAY,EAAE,QAAQ,OAAO,MAAM,MACxC,KAAK,QAAQ,IAAI,MAAM,GACvB;AACA,oBAAI,eAAuB,IAAI,WAAW,OAAO,IAAI;AAErD,oBAAI,KAAK,QAAQ,GAAG,MAAM,GAAG;AAC3B,kCAAgB;AAAA,gBAClB,OAAO;AACL,wBAAM,OAAiB,IAAI,SAAS,MAAM,GAAG;AAC7C,uBAAK,IAAI;AACT,wBAAM,YAAoB,KAAK,KAAK,GAAG;AACvC,kCAAgB,YAAY,MAAM;AAAA,gBACpC;AAEA,gBAAAA,OAAM,KAAK,YAAY;AAAA,cACzB,WAAW,KAAK,QAAQ,IAAI,MAAM,GAAG;AACnC,sBAAM,cAAsB,IAAI,WAAW;AAE3C,gBAAAA,OAAM,KAAK,WAAW;AAAA,cACxB,OAAO;AACL,gBAAAA,OAAM,KAAK,IAAI;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,aAAOA;AAAA,IACT;AAEA,aAAS,0BAA0B,MAAwB;AACzD,YAAM,WAA8C,IAAI,qBAAqB,MAAM;AAEnF,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,MAAuB,SAAS,CAAC;AACvC,cAAM,aAAmC,CAAC,YAAY,YAAY,MAAM,EACrE,IAAI,CAAC,WAAmB,IAAI,aAAa,MAAM,CAAC,EAChD,OAAO,CAAC,SAAwB;AAC/B,cAAI,MAAM;AACR,mBAAO,KAAK,SAAS,IAAI;AAAA,UAC3B;AACA,iBAAO;AAAA,QACT,CAAC;AAEH,YAAI,WAAW,UAAU,YAAY;AACnC,gBAAM,UAAyB,IAAI,aAAa,SAAS;AACzD,cAAI,SAAS;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,UAAkB;AACzB,UAAID,QAAe,uBAAuB,QAAQ,gBAAgB,YAAY,eAAe;AAE7F,UAAI,CAACA,OAAM;AACT,QAAAA,QAAO,IAAI;AAAA,MACb;AAEA,aAAOA;AAAA,IACT;AAEA,aAAS,iBAAyB;AAChC,YAAME,eAAsB;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAOA;AAAA,IACT;AAEA,UAAM,OAAe,QAAQ;AAC7B,UAAM,cAAsB,eAAe;AAC3C,UAAM,MAAc,IAAI;AACxB,UAAM,QAAkB,SAAS;AAEjC,UAAM,OAAiC;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,mBAAwC;AACpD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,0BAA0B;AAC7D,UAAM,cAAc,MAAM,OAAO,4BAA4B,GAAG;AAChE,UAAM,SAAS,MAAM,WAAW,KAAK,KAAK,OAAO;AAEjD,WAAO,GAAG,iBAAiB,CAAC,SAAS;AACnC,cAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,iBAAiB,IAAI;AAAA,IACpE,CAAC;AAED,WAAO,GAAG,kBAAkB,CAAC,EAAE,OAAO,OAAO,MAAM;AACjD,cAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,kBAAkB,EAAE,OAAO,OAAO,CAAC;AAChF,YAAM,EAAE,WAAW,IAAI;AACvB,YAAM,UAAU,OAAO,QAAQ,IAAI,KAAK;AACxC,YAAM,iBAAiB,EAAE,GAAG,SAAS,WAAW;AAChD,WAAK,mBAAmB,cAAc;AAAA,IACxC,CAAC;AAED,WAAO,GAAG,kBAAkB,MAAM;AAChC,cAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,gBAAgB;AAC7D,WAAK,UAAU;AAAA,IACjB,CAAC;AAED,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,kBAA+C;AAC3D,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,yBAAyB;AAC5D,UAAM,sBAAsB,MAAM,OAAO,sBAAsB,GAAG;AAClE,UAAM,QAAQ,IAAI,mBAAmB;AAAA,MACnC,WAAW,KAAK,QAAQ;AAAA,MACxB,QAAQ,KAAK;AAAA,MACb,GAAG,KAAK;AAAA,IACV,CAAC;AAED,UAAM;AAAA,MAAe,CAAC,UACpB,QAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,WAAW,MAAM,OAAO,SAAS,QAAQ,EAAE;AAAA,IAChF;AAEA,SAAK,QAAQ;AACb,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,SAA+C;AACxE,UAAM,eAAe,QAAQ,WAAW,SAAU;AAElD,QAAI,CAAC,aAAa,QAAQ;AACxB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAKA,UAAM,WAAW,CAAC,GAAG,IAAI,IAAI,aAAa,IAAI,CAAC,YAAY,QAAQ,MAAM,GAAG,EAAE,IAAI,CAAE,CAAC,CAAC;AAEtF,UAAM,iBAAiB,SAAS,IAAI,CAAC,SAAiB,SAAiB;AAAA,MACrE,MAAM,GAAG,KAAK,SAAS,IAAI,YAAY,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,EAAE;AAEF,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAEzC,QAAI,CAAC,aAAa;AAChB,YAAM,iBAA8B;AAAA,QAClC,UAAU;AAAA,QACV,eAAe,eAAe,CAAC;AAAA,MACjC;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,cAAc;AAAA,IACrE,OAAO;AACL,YAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,kDAAkD;AAAA,UACnF,MAAM,YAAY;AAAA,UAClB,SAAS;AAAA,QACX,CAAC;AACD,oBAAY,KAAK,OAAO;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAEA,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEO,UAAU,YAAsC;AACrD,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,QAAI;AACF,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAC3D,YAAM,QAAQ,KAAK,SAAU,MAAM,KAAK,gBAAgB;AAExD,YAAM,qBAAqB;AAAA,QACzB,UAAU;AAAA,UACR,QAAQ,KAAK;AAAA,UACb,SAAS,CAAC,cAAc;AAAA,UACxB,QAAQ,CAAC;AAAA,QACX;AAAA,MACF;AAEA,YAAM,EAAE,KAAK,SAAS,IAAI,MAAM,OAAO,QAAQ,EAAE,mBAAmB,CAAC;AAErE,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,cAAc;AAAA,MAChC;AAEA,YAAM,MAAM,UAAU,EAAE,IAAI,CAAC;AAE7B,YAAM,UAAU,MAAM,SAAS;AAC/B,YAAM,iBAAiB,KAAK,mBAAmB,OAAO;AAEtD,aAAO;AAAA,IACT,UAAE;AACA,WAAK,OAAO,WAAW;AAAA,IACzB;AAAA,EACF;AAAA,EAEO,aAAa,YAA2B;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,QAAI;AACF,WAAK,aAAa;AAClB,UAAI,KAAK,UAAU,KAAK,SAAS;AAC/B,cAAM,KAAK,OAAO,WAAW;AAAA,UAC3B,OAAO,KAAK,QAAQ;AAAA,UACpB,QAAQ;AAAA,YACN,SAAS;AAAA,YACT,MAAM;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACH;AACA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AAAA,IACtD,SAAS,OAAY;AACnB,cAAQ,MAAM,KAAK;AAAA,IACrB;AAAA,EACF;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAE1D,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAE3D,UAAI,OAAO,QAAQ,QAAQ;AACzB,cAAM,eAAe,OAAO,QAAQ,KAAK,SAAS;AAClD,cAAM,kBAAkB,OAAO,QAAQ,IAAI,OAAO,QAAQ,KAAK,YAAY,CAAC;AAC5E,aAAK,mBAAmB,eAAe;AAAA,MACzC;AAAA,IACF,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO,EAAE;AAChF,WAAK,aAAa;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,YACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,KAAK,UAAU;AAC/B,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,iBAAAC,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,KAAK,UAAU,SAAS,MAAM;AAEjD,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,mBACN,UACA,eACqB;AACrB,UAAM,aAAkC,CAAC;AAEzC,aAAS,QAAQ,CAAC,WAAW,UAAU;AACrC,YAAM,eAAe,iBAAAA,QAAQ,UAAU,SAAS;AAIhD,YAAM,WAAW,YAAY,YAAY;AAEzC,YAAM,MAA2B,WAC7B,iBAAAA,QAAQ,wBAAwB,SAAS,EAAE,MAC3C,iBAAAA,QAAQ,0BAA0B,SAAS;AAE/C,YAAM,eAAe,CAAC,iBAAiB,cAAc,SAAS,KAAK;AACnE,YAAM,SAAS,iBAAAA,QAAQ,cAAc,IAAI,KAAK,SAAS;AACvD,YAAM,aAAa,CAAC,YAAY,KAAK,UAAU,SAAS,MAAM;AAE9D,YAAM,YAAY,kBAAkB,IAAI,OAAO,CAAC;AAEhD,UAAI,gBAAgB,YAAY;AAC9B,mBAAW,KAAK,EAAE,KAAK,UAAU,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,KAAK,EAAE,KAAK,WAAW,SAAS,CAAC,EAAE,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI;AACF,UAAI,CAAC,KAAK,SAAS;AACjB,cAAM,IAAI,aAAa,mBAAmB;AAAA,MAC5C;AAEA,UAAI,aAAkC,CAAC;AAGvC,UAAI,mBAAmB,QAAQ,GAAG;AAChC,cAAM,WAAkC,gBAAgB,QAAQ;AAChE,qBAAa,KAAK,YAAY,UAAU,aAAa;AAAA,MACvD,OAAO;AACL,cAAM,WAAyB,gBAAgB,QAAwB;AACvE,qBAAa,KAAK,mBAAmB,UAAU,aAAa;AAAA,MAC9D;AAEA,YAAM,SAAS,KAAK,UAAW,MAAM,KAAK,iBAAiB;AAG3D,YAAM,UAAU,qBAAqB,gBAAgB,CAAC,UAAU,CAAC;AAGjE,YAAM,iBAAiB,MAAM,OAAO,QAA0B;AAAA,QAC5D,SAAS,YAAY,KAAK,aAAa;AAAA,QACvC,OAAO,KAAK,QAAQ;AAAA,QACpB;AAAA,MACF,CAAC;AAGD,YAAM,aAAa,eAAe,OAAqB,CAAC,KAAK,UAAU;AACrE,YAAI,OAAO;AACT,cAAI;AACJ,cAAI,OAAO,UAAU,UAAU;AAC7B,wBAAY,kBAAkB,KAAK;AAAA,UACrC,WAAW,iBAAiB,YAAY;AACtC,wBAAY;AAAA,UACd,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,wBAAY,IAAI,WAAW,KAAK;AAAA,UAClC,OAAO;AAEL,oBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uCAAuC,KAAK;AAC/E,wBAAY,IAAI,WAAW;AAAA,UAC7B;AACA,cAAI,KAAK,SAAS;AAAA,QACpB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAGL,YAAM,SAAS,WAAW,OAA8B,CAAC,KAAK,QAAQ;AACpE,YAAI,IAAI,WAAW,IAAI,QAAQ,UAAU,GAAG;AAC1C,cAAI,KAAK,IAAI;AAAA,QACf,OAAO;AACL,gBAAM,YAAY,WAAW,MAAM;AACnC,cAAI,WAAW;AACb,gBAAI,KAAK,SAAS;AAAA,UACpB;AAAA,QACF;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAEL,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,iBAAiB,cAAc;AACjC,aAAK,aAAa;AAAA,MACpB;AACA,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,iCAAiC,KAAK;AAC1E,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACriBO,SAAS,kBAA6B;AAC3C,SAAO;AAAA,IACL,sBAAgB,GAAG;AAAA,IACnB,oBAAe,GAAG;AAAA,IAClB,sBAAgB,GAAG;AAAA,IACnB,wBAAiB,GAAG;AAAA,IACpB,gBAAa,GAAG;AAAA,IAChB,kBAAc,GAAG;AAAA,IACjB,oBAAe,GAAG;AAAA,IAClB,0BAAkB,GAAG;AAAA,IACrB,kBAAc,GAAG;AAAA,IACjB,wBAAe,GAAGC;AAAA,IAClB,oCAAuB,GAAG;AAAA,EAC5B;AACF;AAEO,SAAS,gBAAgB,UAA2B,WAAqC;AAC9F,QAAM,YAAY,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO,CAAC;AACpE,QAAM,mBAAmB,IAAI,IAAI,UAAU,IAAI,CAAC,YAAY,QAAQ,OAAO,CAAC;AAE5E,MAAI,UAAU,SAAS,iBAAiB,MAAM;AAC5C,WAAO;AAAA,EACT;AAGA,aAAW,WAAW,WAAW;AAC/B,QAAI,CAAC,iBAAiB,IAAI,OAAO,GAAG;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,MAA0B;AAC1D,SAAO,kBAAkB,KAAK,IAAI,CAAC;AACrC;AAEO,SAAS,kBAAkB,OAA2B;AAC3D,SAAO,KAAK,kBAAkB,KAAK,CAAC;AACtC;AAEO,SAAS,kBAAkB,KAAyB;AACzD,QAAM,QAAQ,IAAI,WAAW,IAAI,MAAM;AACvC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,EAC7B;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA2B;AAC3D,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAU,OAAO,aAAa,MAAM,CAAC,CAAC;AAAA,EACxC;AACA,SAAO;AACT;AAEO,SAAS,YACd,cACkD;AAClD,SAAQ,aAAkD,QAAQ;AACpE;AAEO,SAAS,cAAc,MAAwC;AACpE,SACE,QAAQ,OAAO,SAAS,YAAY,eAAe,QAAQ,OAAO,KAAK,cAAc;AAEzF;AAEO,SAAS,mBACd,UAC6D;AAC7D,MAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;AACrD,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,SAAS,CAAC,CAAC,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,SAAS,KAAK,cAAc,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG;AACzF,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,gBAAmB,UAAkD;AACnF,SAAO,MAAM,QAAQ,SAAS,CAAC,CAAC,IAAM,SAAmB,KAAK,IAAY;AAC5E;AAEA,SAAS,eAAuB;AAC9B,QAAM,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC;AACxC,QAAM,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACxD,SAAO,OAAO;AAChB;AAEO,SAAS,qBAA8B,QAAgB,QAA8B;AAC1F,SAAO;AAAA,IACL,IAAI,aAAa;AAAA,IACjB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,UAAU,QAAa,QAAkB;AACvD,QAAM,WAAW,CAAC,QAAa,OAAO,OAAO,QAAQ;AAErD,MAAI,CAAC,SAAS,MAAM,KAAK,CAAC,SAAS,MAAM,GAAG;AAC1C,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,SAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,UAAM,cAAc,OAAO,GAAG;AAC9B,UAAM,cAAc,OAAO,GAAG;AAE9B,QAAI,MAAM,QAAQ,WAAW,KAAK,MAAM,QAAQ,WAAW,GAAG;AAC5D,aAAO,GAAG,IAAI,YAAY,OAAO,WAAW;AAAA,IAC9C,WAAW,SAAS,WAAW,KAAK,SAAS,WAAW,GAAG;AACzD,aAAO,GAAG,IAAI,UAAU,OAAO,OAAO,CAAC,GAAG,WAAW,GAAG,WAAW;AAAA,IACrE,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACrHA,IAAMC,SAAO,6BAA6B,KAAK;AAAA;AAAA;AAAA;AAAA,CAI9C,CAAC;AAEK,IAAM,eAAN,cAA2B,WAAW;AAAA,EACnC;AAAA,EACE;AAAA,EAEV,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC;AAAA,EACd,GAAuC;AACrC,UAAM,EAAE,IAAI,UAAU,gBAAgB,OAAO,UAAU,CAAC;AACxD,QAAI,CAAC,SAAS,UAAU;AACtB,YAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,qCAAqC;AAAA,IAC7E;AACA,SAAK,WAAW,QAAQ;AACxB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB,MAAM;AAAA,IACN,MAAMA;AAAA,EACR;AAAA,EAEO,UAAU,OAAO,SAAyD;AAC/E,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,iBAAiB;AACpD,QAAI;AACF,UAAI,CAAC,KAAK,SAAS,SAAS;AAC1B,cAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,iCAAiC;AAAA,MACzE;AAEA,YAAM,iBAAiB,MAAM,KAAK,SAAS,QAAQ,IAAI;AAEvD,UAAI,eAAe,WAAW,GAAG;AAC/B,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAEA,YAAM,gBAAgB,eAAe,CAAC;AAEtC,YAAM,cAA2B;AAAA,QAC/B,UAAU;AAAA,QACV;AAAA,MACF;AAEA,gBAAU,KAAK,OAAO;AAAA,QACpB,UAAU,KAAK;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAkB,WAAW;AAChE,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,uBAAuB,MAAM,WAAW,KAAK;AACjF,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,aAAa,YAA2B;AAC7C,YAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AACvD,SAAK,aAAa;AAClB,UAAM,KAAK,SAAS,aAAa;AAAA,EACnC;AAAA,EAEO,gBAAgB,YAA2B;AAChD,QAAI;AACF,YAAM,QAAQ,KAAK,MAAM;AACzB,YAAM,cAAc,MAAM,QAAQ,KAAK,EAAE;AAGzC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,uBAAuB;AAE1D,YAAM,SAAS,MAAM,KAAK,SAAS,gBAAgB;AAEnD,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,cAAM,iBAAiB;AAEvB,YAAI,eAAe,WAAW,GAAG;AAC/B,gBAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,sBAAsB;AAAA,QAC9D;AAEA,cAAM,QAAQ,gBAAgB,gBAAgB,YAAY,QAAQ;AAElE,YAAI,CAAC,OAAO;AACV,kBAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,kDAAkD;AAAA,YACnF,MAAM,YAAY;AAAA,YAClB,SAAS;AAAA,UACX,CAAC;AACD,sBAAY,KAAK,OAAO;AAAA,YACtB,UAAU,KAAK;AAAA,YACf,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AACA,cAAQ,KAAK,IAAI,KAAK,SAAS,IAAI,oBAAoB;AAAA,IACzD,SAAS,OAAY;AACnB,cAAQ,MAAM,IAAI,KAAK,SAAS,IAAI,6BAA6B,MAAM,OAAO;AAC9E,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEO,mBAAmB,OACxB,UACA,kBACmC;AACnC,QAAI,CAAC,KAAK,SAAS,kBAAkB;AACnC,YAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,0CAA0C;AAAA,IAClF;AACA,WAAO,MAAM,KAAK,SAAS,iBAAiB,UAAU,aAAa;AAAA,EACrE;AAAA,EAEO,oBAAoB,OACzB,UACA,kBAC0B;AAC1B,QAAI,CAAC,KAAK,SAAS,mBAAmB;AACpC,YAAM,IAAI,MAAM,IAAI,KAAK,SAAS,IAAI,2CAA2C;AAAA,IACnF;AACA,WAAO,MAAM,KAAK,SAAS,kBAAkB,UAAU,aAAa;AAAA,EACtE;AACF;;;AdxIO,IAAM,eAAsB;AAAA,EACjC,SAAS,CAAC;AAAA,EACV,cAAc;AAAA,EACd;AAAA,EACA,aAAa,IAAI,iBAAAC,QAAQ,QAAQ,IAAI,sCAAsC;AAC7E;AAEO,IAAM,oBAAoB;AAI1B,SAAS,UACd,OACA,EAAE,UAAU,OAAO,GACnB;AACA,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,iBAAiB;AAAA,MACrB,GAAG,MAAM;AAAA,MACT,CAAC,QAAQ,GAAG;AAAA,QACV,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAAA,QAC3D,eAAe,OAAO,gBAAgB,EAAE,GAAG,OAAO,cAAc,IAAI;AAAA,MACtE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,aAAa,OAAqB,EAAE,SAAS,GAA2B;AACtF,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,iBAAiB,EAAE,GAAG,MAAM,QAAQ;AAC1C,WAAO,eAAe,QAAQ;AAE9B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,cAAc,MAAM,iBAAiB,WAAW,OAAO,MAAM;AAAA,IAC/D;AAAA,EACF,CAAC;AACH;AAEO,SAAS,gBAAgB,OAAqB,EAAE,SAAS,GAAkC;AAChG,QAAM,SAAS,CAAC,WAAW;AAAA,IACzB,GAAG;AAAA,IACH,cAAc;AAAA,EAChB,EAAE;AACJ;AAEO,SAAS,iBACd,OACA,EAAE,UAAU,QAAQ,GACpB;AACA,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,QAAI,CAAC,QAAQ;AACX,cAAQ,KAAK,mBAAmB,QAAQ,aAAa;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,OAAO,SAAS,KAAK,CAACC,OAAMA,GAAE,YAAY,OAAO;AAC1E,QAAI,CAAC,kBAAkB;AACrB,cAAQ,KAAK,wBAAwB,OAAO,yBAAyB,QAAQ,GAAG;AAChF,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAAA,MAC3D,eAAe,EAAE,GAAG,iBAAiB;AAAA,IACvC;AAEA,UAAM,iBAAiB;AAAA,MACrB,GAAG,MAAM;AAAA,MACT,CAAC,QAAQ,GAAG;AAAA,IACd;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAEO,SAAS,YACd,OACA,EAAE,UAAU,SAAS,GACrB;AACA,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,QAAI,CAAC,QAAQ;AACX,cAAQ,KAAK,mBAAmB,QAAQ,aAAa;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,SAAS,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,EAAE;AAE9D,UAAM,2BAA2B,YAAY;AAAA,MAC3C,CAAC,YAAY,QAAQ,YAAY,OAAO,eAAe;AAAA,IACzD;AAEA,UAAM,mBAAmB,2BACrB,EAAE,GAAG,OAAO,cAAe,IAC3B,YAAY,CAAC,KAAK;AAEtB,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAEA,UAAM,iBAAiB;AAAA,MACrB,GAAG,MAAM;AAAA,MACT,CAAC,QAAQ,GAAG;AAAA,IACd;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAEO,SAAS,iBACd,OACA,EAAE,WAAW,YAAY,GACzB;AACA,QAAM,SAAS,CAAC,WAAW;AAAA,IACzB,GAAG;AAAA,IACH,eAAe;AAAA,IACf;AAAA,EACF,EAAE;AACJ;AAIO,SAAS,gBAAgB,UAAqC;AACnE,SAAO,OAAO,OAAO,QAAQ,EAAE,SAAS,QAAQ;AAClD;AAEO,SAAS,qBAAqB,SAAwC;AAC3E,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,OAAO,QAAQ,SAAS,YACxB,OAAO,QAAQ,YAAY;AAE/B;AAEO,SAAS,mBAAmB,QAAoC;AACrE,SACE,OAAO,WAAW,YAClB,WAAW,QACX,MAAM,QAAQ,OAAO,QAAQ,KAC7B,OAAO,SAAS,MAAM,oBAAoB,MACzC,OAAO,kBAAkB,QAAQ,qBAAqB,OAAO,aAAa;AAE/E;AAEO,SAAS,aAAa,OAA4B;AACvD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,MAAI,OAAO,MAAM,YAAY,SAAU,QAAO;AAC9C,aAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,MAAM,OAAO,GAAG;AAC9D,QAAI,CAAC,gBAAgB,QAAQ,KAAK,CAAC,mBAAmB,MAAM,EAAG,QAAO;AAAA,EACxE;AACA,MAAI,MAAM,iBAAiB,QAAQ,CAAC,gBAAgB,MAAM,YAAY,EAAG,QAAO;AAChF,MAAI,CAAC,iBAAiB,MAAM,aAAa,EAAG,QAAO;AAEnD,SAAO;AACT;;;AHvJO,IAAM,gBAAN,MAAoB;AAAA,EAClB,WAAsC,oBAAI,IAAI;AAAA,EAE9C;AAAA,EAEA;AAAA,EACA;AAAA,EAEP,YAAY,EAAE,UAAU,CAAC,GAAG,mCAA6B,QAAQ,CAAC,EAAE,IAAyB,CAAC,GAAG;AAC/F,SAAK,gBAAgB,KAAK,kBAAkB,SAAS,KAAK;AAE1D,UAAM,iBAAiB,KAAK,mBAAmB;AAC/C,UAAM,eAAsB,iBACxB;AAAA,MACE,GAAG;AAAA,MACH,aAAa,KAAK,kBAAkB,KAAK,cAAc,eAAe,aAAa,CAAC;AAAA,IACtF,IACA;AAAA,MACE,GAAG;AAAA,MACH,eAAe;AAAA,MACf,aAAa,KAAK,kBAAkB,KAAK,cAAc,OAAO,CAAC;AAAA,IACjE;AAEJ,SAAK,QAAQ,IAAI,qBAAa,cAAc;AAAA,MAC1C,UAAU,MAAM,KAAK,mBAAmB;AAAA,IAC1C,CAAC;AAED,SAAK,mBAAmB;AAExB,SAAK,YAAY,CAAC,aAAmD;AACnE,YAAM,cAAc,KAAK,MAAM,UAAU,MAAM;AAC7C,iBAAS,KAAK,MAAM,KAAK;AAAA,MAC3B,CAAC;AAED,aAAO;AAAA,IACT;AAEA,SAAK,kBAAkB,OAAO;AAAA,EAChC;AAAA;AAAA,EAIA,IAAW,cAA+B;AACxC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAAA,EAEA,IAAW,YAAY,aAA8B;AACnD,SAAK,MAAM,SAAS,CAAC,WAAW;AAAA,MAC9B,GAAG;AAAA,MACH;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEQ,qBAA4C;AAClD,QAAI;AACF,YAAM,kBAAkB,eAAe,QAAQ,iBAAiB;AAChE,UAAI,oBAAoB,MAAM;AAC5B,eAAO;AAAA,MACT;AACA,YAAM,cAAc,KAAK,MAAM,eAAe;AAC9C,UAAI,CAAC,aAAa,WAAW,GAAG;AAC9B,gBAAQ,KAAK,yBAAyB,WAAW;AACjD,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AACA,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,cAAQ,MAAM,oDAAoD,MAAM,OAAO,EAAE;AACjF,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,qBAA2B;AACjC,QAAI;AACF,YAAM,EAAE,SAAS,cAAc,cAAc,IAAI,KAAK,MAAM;AAC5D,YAAM,iBAAiC,EAAE,SAAS,cAAc,cAAc;AAC9E,YAAM,kBAAkB,KAAK,UAAU,cAAc;AACrD,qBAAe,QAAQ,mBAAmB,eAAe;AAAA,IAC3D,SAAS,OAAO;AACd,cAAQ,MAAM,kDAAkD,KAAK;AAAA,IACvE;AAAA,EACF;AAAA;AAAA,EAIQ,kBACN,eACA;AACA,YAAQ,KAAK,mCAAmC;AAEhD,eAAW,gBAAgB,eAAe;AACxC,UAAI;AACJ,UAAI;AACJ,UAAI;AAGJ,UAAI,OAAO,iBAAiB,UAAU;AACpC,mBAAW;AAAA,MACb,OAAO;AACL,cAAM,EAAE,IAAI,SAAS,SAAS,IAAI;AAClC,mBAAW;AACX,wBAAgB;AAChB,yBAAiB;AAAA,MACnB;AAGA,YAAM,YAAY,gBAAgB;AAClC,YAAM,cAAc,UAAU,QAAQ;AACtC,UAAI,CAAC,aAAa;AAChB,gBAAQ,MAAM,+BAA+B,QAAQ,EAAE;AACvD;AAAA,MACF;AAGA,YAAM,iBAAiB,IAAI,YAAY;AAAA,QACrC,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,SAAS;AAAA,QACT,gBAAgB,KAAK;AAAA,QACrB,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,MAClB,CAAC;AAED,WAAK,SAAS,IAAI,UAAU,cAAc;AAC1C,cAAQ,KAAK,gCAA2B,QAAQ,EAAE;AAAA,IACpD;AAEA,UAAM,QAAQ,KAAK,MAAM;AAGzB,UAAM,mBAAmB,OAAO,KAAK,MAAM,OAAO;AAClD,eAAW,YAAY,kBAAkB;AACvC,UAAI,CAAC,KAAK,SAAS,IAAI,QAAQ,GAAG;AAChC,gBAAQ,KAAK,yCAAyC,QAAQ,EAAE;AAChE,qBAAa,KAAK,OAAO,EAAE,SAAS,CAAC;AAAA,MACvC;AAAA,IACF;AAGA,QAAI,MAAM,gBAAgB,CAAC,KAAK,SAAS,IAAI,MAAM,YAAY,GAAG;AAChE,cAAQ,KAAK,sCAAsC,MAAM,YAAY,EAAE;AACvE,sBAAgB,KAAK,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,IAAW,UAAwB;AACjC,WAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;AAAA,EACnC;AAAA,EAEO,UAAU,UAA4C;AAC3D,WAAO,KAAK,SAAS,IAAI,QAAQ;AAAA,EACnC;AAAA,EAEA,MAAa,iBAAgC;AAC3C,UAAM,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,QAAQ,cAAc,CAAC;AACrE,UAAM,QAAQ,IAAI,QAAQ;AAAA,EAC5B;AAAA,EAEA,MAAa,aAA4B;AACvC,UAAM,WAAW,KAAK,QACnB,OAAO,CAAC,WAAW,OAAO,WAAW,EACrC,IAAI,CAAC,WAAW,QAAQ,WAAW,CAAC;AAEvC,UAAM,QAAQ,IAAI,QAAQ;AAAA,EAC5B;AAAA;AAAA,EAIQ,kBAAkB,SAAoB,QAAyC;AACrF,YAAQ,KAAK,mCAAmC;AAEhD,QAAI,gBAAgB,2BAA2B;AAE/C,QAAI,mBAAmB,MAAM,GAAG;AAE9B,sBAAgB,UAAU,eAAe,MAAM;AAAA,IACjD,OAAO;AAEL,oBAAc,OAAO,IAAI,UAAU,cAAc,OAAO,GAAG,MAAM;AAAA,IACnE;AAEA,YAAQ,KAAK,6BAA6B,aAAa;AAEvD,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,QAAsC;AAC9D,QAAI,KAAK,MAAO,SAAQ,KAAK,yCAAyC,KAAK,aAAa,KAAK;AAC7F,UAAM,EAAE,QAAQ,IAAI,YAAY,OAAO,IAAI,UAAU,CAAC,EAAE,IAAI;AAC5D,WAAO,IAAI,iBAAAC,QAAQ,QAAQ,OAAO,YAAY,MAAM,OAAO;AAAA,EAC7D;AAAA,EAEO,iBAAiB,MAAuB;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,mBAAmB,OAAO,cAAwC;AACvE,QAAI,KAAK,kBAAkB,WAAW;AACpC;AAAA,IACF;AAEA,UAAM,cAAc,KAAK,kBAAkB,KAAK,cAAc,SAAS,CAAC;AACxE,qBAAiB,KAAK,OAAO,EAAE,WAAW,YAAY,CAAC;AAEvD,YAAQ,KAAK,0CAAqC,SAAS,GAAG;AAAA,EAChE;AAAA,EAEA,IAAW,gBAA2B;AACpC,WAAO,KAAK,MAAM,MAAM;AAAA,EAC1B;AAAA;AAAA,EAIA,IAAW,eAAkC;AAC3C,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,eAAe,KAAK,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,MAAM,YAAY;AACnF,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAW,uBAA+C;AACxD,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAW,wBAAyC;AAClD,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,aAAa,SAAS,IAAI,CAAC,YAAY,QAAQ,OAAO;AAAA,EACpE;AAAA,EAEA,IAAW,gBAAsC;AAC/C,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAW,gBAA+B;AACxC,QAAI,CAAC,KAAK,eAAe;AACvB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA;AAAA,EAIA,IAAW,mBAAmD;AAC5D,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,IAAW,oBAA+C;AACxD,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AACF;","names":["SDKErrorCode","SDKWarningCode","RPCErrorCode","Wallets","Events","MagicPayloadMethod","MagicIncomingWindowMessage","MagicOutgoingWindowMessage","DeepLinkPage","LoginWithMagicLinkEventEmit","LoginWithMagicLinkEventOnReceived","LoginWithEmailOTPEventEmit","LoginWithSmsOTPEventEmit","LoginWithSmsOTPEventOnReceived","LoginWithEmailOTPEventOnReceived","DeviceVerificationEventEmit","DeviceVerificationEventOnReceived","RecencyCheckEventEmit","RecencyCheckEventOnReceived","UpdateEmailEventEmit","UpdateEmailEventOnReceived","AuthEventOnReceived","FarcasterLoginEventEmit","EthChainType","UserEventsEmit","UserEventsOnReceived","RecoveryMethodType","NftCheckoutIntermediaryEvents","WalletEventOnReceived","createCommonjsModule","e","r","percentToByte","p","byteToPercent","b","btoaUTF8","str","atobUTF8","encodeJSON","options","decodeJSON","queryString","isUndefined","value","isNull","isNil","isJsonRpcResponsePayload","isJsonRpcErrorCode","RPCErrorCode","isEmpty","key","createSDK","SDKBaseCtor","environment","SDKEnvironment","createMissingApiKeyError","MagicSDKError","SDKErrorCode","createModalNotReadyError","createMalformedResponseError","createExtensionNotInitializedError","member","createIncompatibleExtensionsError","extensions","msg","ext","compat","createInvalidArgumentError","ordinalSuffix","i","iAdjusted","j","k","createDuplicateIframeWarning","MagicSDKWarning","SDKWarningCode","createSynchronousWeb3MethodWarning","createReactNativeEndpointConfigurationWarning","createDeprecationWarning","method","removalVersions","useInstead","removalVersion","useInsteadSuffix","message","createIntGenerator","index","getPayloadId","intGenerator","markPayloadAsPreprocessed","payload","payloadPreprocessedSymbol","isPayloadPreprocessed","standardizeJsonRpcRequestPayload","_a","_b","_c","createJsonRpcRequestPayload","params","createTypedEmitter","emitter","TypedEmitter","source","args","isPromiEvent","promiEventBrand","createPromiEvent","executor","promise","createPromise","createBoundEmitterMethod","createChainingEmitterMethod","thenSymbol","catchSymbol","finallySymbol","createChainingPromiseMethod","nextPromise","promiEvent","result","resolved","err","UserEventsOnReceived","UserEventsEmit","resolve","reject","isMajorVersionAtLeast","version","majorVersion","major","proxyLocalForageMethod","__async","lf","uuid","u","uid","isWebCryptoSupported","hasCrypto","hasSubtleCrypto","createJwt","publicJwk","getPublicKey","subtle","privateJwk","getItem","STORE_KEY_PRIVATE_KEY","claims","headers","jws","strToUrlBase64","data","strToUint8","sigType","ALGO_NAME","sig","uint8ToUrlBase64","STORE_KEY_PUBLIC_JWK","generateWCKP","kp","EC_GEN_PARAMS","jwkPublicKey","setItem","binToUrlBase64","utf8ToBinaryString","bin","_","p1","uint8","code","clearDeviceShares","keysToRemove","iterate","iterationNumber","DEVICE_SHARE_KEY","removeItem","arrayBufferToBase64","buffer","binary","bytes","len","base64ToArrayBuffer","base64","binaryString","getOrCreateInitVector","crypto","existingIv","INITIALIZATION_VECTOR_KEY","getOrCreateEncryptionKey","existingKey","ENCRYPTION_KEY_KEY","ALGO_LENGTH","encryptAndPersistDeviceShare","deviceShareBase64","networkHash","iv","encryptionKey","decodedDeviceShare","encryptedData","encryptedDeviceShare","getDecryptedDeviceShare","ab","createURL","url","base","getPrototypeChain","instance","currentProto","protos","BaseModule","checkExtensionCompat","satisfies","coerce","getNetworkHash","apiKey","network","extConfig","prepareExtensions","incompatibleExtensions","Extension","name","getRequestPayloadFromBatch","requestPayload","id","standardizeResponse","event","requestPayloadResolved","response","JsonRpcResponse","createMagicRequest","msgType","rt","jwt","request","decryptedDeviceShare","persistMagicEventRefreshToken","require_eventemitter3","MAX_SAFE_INTEGER$1","constants","debug","debug_1","re_1","numeric","compareIdentifiers$1","rcompareIdentifiers","identifiers","MAX_LENGTH$1","MAX_SAFE_INTEGER","re$4","t$4","compareIdentifiers","SemVer","compare","compare_1","eq","eq_1","neq","neq_1","gt","gt_1","gte","gte_1","lt","lt_1","lte","lte_1","cmp","cmp_1","ANY","Comparator","re$3","t$3","Range","re$2","t$2","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","isSatisfiable","parseComparator","isX","replaceTildes","replaceTilde","replaceCarets","replaceCaret","replaceXRanges","replaceXRange","replaceStars","replaceGTE0","hyphenReplace","testSet","MAX_LENGTH","re$1","t$1","parse","parse_1","re","t","sdkNameToEnvName","MagicRPCError","MagicExtensionError","MagicExtensionWarning","import_eventemitter3","ProductConsolidationMethodRemovalVersions","AuthModule","storage_exports","clear","length","keys","ALGO_CURVE","UserModule","WalletModule","RPCProviderModule","sdkAccessFields","BaseExtension","InternalExtension","NFTModule","_SDKBase","SDKBase","ViewController","__commonJSMin","exports","module","has","prefix","Events","EE","fn","context","once","addListener","listener","evt","clearEvent","EventEmitter","names","events","handlers","l","ee","listeners","a1","a2","a3","a4","a5","s","a","n","o","E","c","$","h","rawMessage","sourceError","codeNormalized","responseOrPayload","error","sdk","responsePromise","MagicOutgoingWindowMessage","res","cleanupEvents","MagicIncomingWindowMessage","eventType","payloadId","MagicPayloadMethod","configuration","isRNMobilePackage","email","showUI","redirectURI","overrides","lifespan","phoneNumber","deviceCheckUI","handle","DeviceVerificationEventEmit","LoginWithEmailOTPEventEmit","otp","mfa","credentialOrQueryString","credentialResolved","urlWithoutQuery","RecencyCheckEventEmit","UpdateEmailEventEmit","newEmail","__export","activeWallet","cachedIsLoggedIn","isLoggedInResponse","scope","callback","loggedOut","Wallets","userEnv","loginRequestPayload","loginRequest","__spreadProps","__spreadValues","config","address","transaction","provider","metaMaskDeepLink","coinbaseWalletDeepLink","wallet","isWalletEnabled","autoConnectPayload","onRequestComplete","standardizedPayload","batchResponse","finalPayload","payloadOrMethod","onRequestCompleteOrParams","warning","testModePrefix","allSources","prop","allDescriptors","sourceIndex","x","isPrototypeField","descriptor","defaultEndpoint","controller","endpoint","parameters","batchData","batchIds","acknowledgeResponse","removeEventListener","deviceShare","removeResponseListener","handler","boundHandler","unsubscribe","init_es","applyOverlayStyles","elem","cssProperty","value","overlayStyles","checkForSameSrcInstances","parameters","iframes","iframe","require_localforage","rr","import_localforage","memoryDriver","IframeController","Magic","init_es","__commonJSMin","exports","module","f","g","define","e","t","n","r","s","o","u","a","__require","i","l","_dereq_","global","Mutation","scheduleDrain","called","observer","nextTick","element","channel","scriptEl","draining","queue","oldQueue","len","immediate","task","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","Promise","resolver","safelyResolveThenable","onRejected","onFulfilled","promise","unwrap","QueueItem","func","returnValue","self","result","tryCatch","getThen","thenable","error","obj","then","onError","onSuccess","tryToUnwrap","out","resolve","reject","reason","all","iterable","values","resolved","allResolver","resolveFromAll","outValue","race","response","_typeof","_classCallCheck","instance","Constructor","getIDB","idb","isIndexedDBValid","isSafari","hasFetch","createBlob","parts","properties","Builder","builder","Promise$1","executeCallback","callback","executeTwoCallbacks","errorCallback","normalizeKey","key","getCallback","DETECT_BLOB_SUPPORT_STORE","supportsBlobs","dbContexts","toString","READ_ONLY","READ_WRITE","_binStringToArrayBuffer","bin","length","buf","arr","_checkBlobSupportWithoutCaching","txn","blob","matchedChrome","matchedEdge","_checkBlobSupport","_deferReadiness","dbInfo","dbContext","deferredOperation","_advanceReadiness","_rejectReadiness","err","_getConnection","upgradeNeeded","createDbContext","dbArgs","openreq","db","ex","_getOriginalConnection","_getUpgradedConnection","_isUpgradeNeeded","defaultVersion","isNewStore","isDowngrade","isUpgrade","incVersion","_encodeBlob","reader","base64","_decodeBlob","encodedBlob","arrayBuff","_isEncodedBlob","_fullyReady","_tryReconnect","forages","forage","createTransaction","mode","retries","tx","_initStorage","options","initPromises","ignoreErrors","j","k","getItem","transaction","store","req","iterate","iterator","iterationNumber","cursor","setItem","blobSupport","removeItem","clear","advanced","keys","dropInstance","currentConfig","isCurrentDb","dbPromise","newVersion","dropObjectPromise","_forage2","dropDBPromise","_forage","asyncStorage","isWebSQLValid","BASE_CHARS","BLOB_TYPE_PREFIX","BLOB_TYPE_PREFIX_REGEX","SERIALIZED_MARKER","SERIALIZED_MARKER_LENGTH","TYPE_ARRAYBUFFER","TYPE_BLOB","TYPE_INT8ARRAY","TYPE_UINT8ARRAY","TYPE_UINT8CLAMPEDARRAY","TYPE_INT16ARRAY","TYPE_INT32ARRAY","TYPE_UINT16ARRAY","TYPE_UINT32ARRAY","TYPE_FLOAT32ARRAY","TYPE_FLOAT64ARRAY","TYPE_SERIALIZED_MARKER_LENGTH","toString$1","stringToBuffer","serializedString","bufferLength","p","encoded1","encoded2","encoded3","encoded4","buffer","bytes","bufferToString","base64String","serialize","valueType","marker","fileReader","str","deserialize","type","blobType","matcher","localforageSerializer","createDbTable","_initStorage$1","dbInfoPromise","tryExecuteSql","sqlStatement","args","results","getItem$1","iterate$1","rows","item","_setItem","retriesLeft","originalValue","sqlError","setItem$1","removeItem$1","clear$1","length$1","key$1","keys$1","getAllStoreNames","storeNames","dropInstance$1","operationInfo","dropTable","storeName","operations","webSQLStorage","isLocalStorageValid","_getKeyPrefix","defaultConfig","keyPrefix","checkIfLocalStorageThrows","localStorageTestKey","_isLocalStorageUsable","_initStorage$2","clear$2","getItem$2","iterate$2","keyPrefixLength","key$2","keys$2","itemKey","length$2","removeItem$2","setItem$2","dropInstance$2","localStorageWrapper","sameValue","x","y","includes","array","searchElement","isArray","arg","DefinedDrivers","DriverSupport","DefaultDrivers","DefaultDriverOrder","OptionalDriverMethods","LibraryMethods","DefaultConfig","callWhenReady","localForageInstance","libraryMethod","_args","extend","_key","LocalForage","driverTypeKey","driver","driverName","driverObject","complianceError","driverMethods","driverMethodName","isRequired","configureMissingMethods","methodNotImplementedFactory","methodName","_i","_len","optionalDriverMethod","setDriverSupport","support","getDriverPromise","serializerPromise","drivers","supportedDrivers","setDriverToConfig","extendSelfWithDriver","initDriver","currentDriverIndex","driverPromiseLoop","oldDriverSetDone","libraryMethodsAndProperties","localforage_js","$e","b","A","_driver","R","v","clone","e_1","_a","temp","_b","__values","_c","e_1_1","getKeyPrefix","dropInstanceCommon","_this","normaliseKey","serialiser","stores","Store","kp","idx","opts","_options","_cb","outPromise","key$","keys$","value$","_support","oe","re","h","N","E","O","V","ee","Ze","ke","ViewController","onload","createDuplicateIframeWarning","createURL","event","handler","__async","data","createModalNotReadyError","createSDK","SDKBase","lf","localForage","Te","AlgorandExtension","init_es","Extension","algorandConfig","txn","__async","txns","ICON","import_store","import_algosdk","NetworkId","import_algosdk","WalletId","module","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","wallet","import_algosdk","ICON","module","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","algosdk","import_algosdk","ICON","module","algosdk","import_algosdk","ICON","PeraWallet","module","algosdk","import_algosdk","ICON","name","icons","description","algosdk","PeraWallet","ICON","algosdk","a","algosdk"]}
|